惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
月光博客
月光博客
WordPress大学
WordPress大学
C
Cisco Blogs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 【当耐特】
大猫的无限游戏
大猫的无限游戏
The GitHub Blog
The GitHub Blog
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
有赞技术团队
有赞技术团队
Microsoft Azure Blog
Microsoft Azure Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
小众软件
小众软件
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
W
WeLiveSecurity
量子位
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Fortinet All Blogs
T
Threat Research - Cisco Blogs
Attack and Defense Labs
Attack and Defense Labs
P
Privacy & Cybersecurity Law Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
L
LINUX DO - 热门话题
Google Online Security Blog
Google Online Security Blog
S
Security Affairs
V2EX - 技术
V2EX - 技术
TaoSecurity Blog
TaoSecurity Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
S
Security @ Cisco Blogs
宝玉的分享
宝玉的分享
Project Zero
Project Zero
The Hacker News
The Hacker News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
PCI Perspectives
PCI Perspectives
G
GRAHAM CLULEY
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
N
Netflix TechBlog - Medium
S
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 聂微东

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Why Your Multi-Turn AI Agents Lose Their Train of Thought (And How to Fix It)
Langridge Pullian · 2026-06-15 · via DEV Community
  1. The Agent That Forgot Everything I have an agent that clarifies requirements. I give it a problem, it asks questions, I answer, it refines, and after three or four rounds it should have a spec ready. Simple.

Round one works fine. It asks reasonable questions. I answer. But when I ask it to continue — same session, same agent, next step in the pipeline — the clarifier starts from scratch. It repeats questions I already answered. It ignores constraints we already agreed on. Sometimes it contradicts its own analysis from five minutes ago.

This isn't an LLM bug. It's an architecture problem. Claude Code, OpenCode, and pretty much any coding agent that delegates work to subagents shares the same behavior: every invocation of a subagent — even the same one, to continue a conversation — creates a brand new session. No history. No context. No memory of what that subagent already thought, asked, or decided.

The good news: the infrastructure to fix this already exists in these tools. It's just that nobody uses it by default.

  1. How Coding Agents Delegate The pattern is the same everywhere. A main agent receives your prompt, reasons about it, and when it needs specialized help, it calls a delegation tool — typically named task().

// OpenCode — tool/task.ts, lines 144-155
const session = taskID
? yield* sessions.get(SessionID.make(taskID))
.pipe(Effect.catchCause(() => Effect.succeed(undefined)))
: undefined

const nextSession =
session ?? // If it exists, reuse it
(yield* sessions.create({ // Otherwise, create a new one
parentID: ctx.sessionID,
title: "params.description + (@${next.name} subagent),"
permission: [...],
}))
Here's the flow: the LLM decides to call task(), the system looks up the subagent definition (permissions, model, system prompt), creates a new session with parentID pointing to the main session, and kicks off an independent LLM loop. The subagent does its work, returns the result, and the main agent continues.

Claude Code exposes resume: sessionId in its SDK for exactly this — the same pattern: pass the session ID and the agent resumes with full history; omit it and a new session is created. OpenCode has the task_id parameter that lets you resume an existing session, but if you don't explicitly pass it, the system creates a new session. And since the main agent — the one calling task() — has no way of knowing which task_id it used last time, the default wins every time.

The subagent gets called, works, finishes. The next time you need it — even if it's the exact same agent to continue the exact same conversation — it's born with no past.

  1. What Actually Happens to the Session Here's what I found when I dug into OpenCode's source code: the infrastructure already persists everything. The problem isn't technical — it's a design choice.

Finding 1: Sessions store EVERYTHING.

OpenCode persists sessions in SQLite. Every message, every tool call, every output, every step of reasoning gets recorded:

SessionTable MessageTable PartTable
──────────── ──────────── ─────────
id (PK) id (PK) id (PK)
parent_id (FK→self) session_id (FK) message_id (FK)
title data (JSON) session_id (FK)
agent data (JSON)
time_created ↑ text | tool | reasoning
time_updated ↑ snapshots | patches
When a subagent executes 15 tool calls, analyzes 8 files, and produces a 500-word response — all of it lands on disk. And it stays there.

Finding 2: Subagents can't delete their sessions.

Subagents' default permissions don't include task or todowrite. There is no end_session, close, terminate, or anything similar. A subagent cannot — by accident or by design — destroy its own session.

Finding 3: The LLM loop exits — it doesn't destroy.

When the subagent finishes responding, the main loop checks an exit condition:

// OpenCode — prompt.ts, lines 1267-1274
if (
lastAssistant?.finish &&
!["tool-calls"].includes(lastAssistant.finish) &&
!hasToolCalls &&
lastUser.id < lastAssistant.id
) {
break // ← Exits the loop. Nothing else.
}
That break doesn't call sessions.remove(). It doesn't archive the session. It doesn't touch a single field in the database. The in-memory runner cleans itself up, but in SQLite the session sits there intact, with all its messages.

Finding 4: No TTL, no timeout, no automatic cleanup.

I searched for ttl, expir, timeout.*session, auto.*delete across the entire codebase. Zero results for sessions. Sessions live until someone deletes them manually. They don't expire.

The irony: the infrastructure already does exactly what we need. It persists context. It keeps the history. It destroys nothing. You just need to ask it to reuse a session. And all it takes is passing the right task_id.

  1. The Handshake: 200 Lines That Change Everything The problem isn't one of capability — it's one of indexing. OpenCode can persist sessions and resume them if you pass a task_id. What it can't do is answer questions like:

"Give me the session for spec-42's clarifier"
"Has spec-42's constructor finished?"
"Resume the conversation with the planner where we left off"
To OpenCode, a session is ses_1d6f79327ffe7JM4ZcELwlMV0D. It doesn't know what "spec-42" is, which agent ran in that session, or which step of the workflow you're on. That's domain knowledge.

The handshake is the layer that translates domain knowledge into session references. Three functions:

Discovery: given a spec ID, find the right session's task_id
Naming: instead of ses_1d6f79327ffe, you see Kael-planner, Aitana-validator
Orchestration state: is the planner running? Did the validator approve?
The analogy is DNS. A web server can serve content if you give it the right IP. DNS translates github.com to 140.82.121.3. The handshake translates spec-42 → constructor to ses_1d6e78035ffe. It doesn't replace persistence. It complements it.

In practice, two scenarios:

Scenario A — New: No task_id exists for this agent. Call task() normally. Capture the task_id from the response. Persist it in a map: "spec-42/constructor" → "ses_1d6e78035ffe".

Scenario B — Resume: A task_id already exists. Retrieve it from the map. Call task() with that task_id. OpenCode loads the full session. The agent doesn't "remember" by magic — it sees its entire history.

The result: a 5-agent pipeline (clarifier → planner → auditor → constructor → validator) where each agent can resume with full context. Seven iterations on the same spec without losing a single reference.

  1. Three Benefits You Didn't Expect The obvious benefit is that the agent stops repeating questions. But there are three more that only show up in production.

Fewer tokens, lower latency. When an agent resumes its session, it doesn't need to re-run grep to find the relevant files, re-read documentation it already read, or re-analyze code it already understood. All of that is in the tool call history. Every tool call not re-executed is tokens saved and seconds the user doesn't wait for.

Real iterative refinement. A clarifier that goes through three rounds of questions sharpens its understanding each time. Without session continuity, round three is just as generic as round one — the agent doesn't know what it already asked or what you already answered. With it, each iteration builds on the last.

Auditability. When something goes wrong, the session history shows you exactly what the agent did, which tools it used, and why. Without continuity, that record fragments into orphaned sessions. With the handshake, you have a traceable reasoning chain end to end.

  1. This Isn't New — The Industry Already Does It What's interesting isn't that it works. It's that the industry already solved this problem with the same pattern — just with more infrastructure.

LangGraph implements checkpoints with thread_id + checkpointer. The thread_id is the direct equivalent of our task_id. The difference is that LangGraph needs you to configure SqliteSaver or PostgresSaver — FlowTask uses OpenCode's SQLite, which was already there. [docs]

Temporal runs workflows with durable execution: when a worker crashes at step 5 of 10, another worker picks up the workflow, replays the event history from the beginning, skips already-completed activities, and resumes from the last checkpoint. OpenCode solves the same conceptual problem — use history to avoid repeating completed work — at the LLM context level. The difference: Temporal guarantees this against infrastructure failures with deterministic replay; OpenCode does it at the conversational context layer of the LLM. [docs]

Microsoft Agent Framework defines supersteps with checkpoint storage: each superstep captures the full state upon completion. Each agent in our pipeline is a superstep that persists its state when done. [docs]

The difference: FlowTask solves it with 200 lines of protocol. Your tool already has the rest.

  1. Conclusion Session continuity isn't an infrastructure problem — it's a design omission. The tools already persist all the context. All that's missing is the handshake that reuses it.

If your agents depend on multi-turn reasoning, don't accept the default of a fresh session every time.

The full pattern is implemented in FlowTask for reference.

LangGraph implements checkpoints with thread_id + checkpointer. The thread_id is the direct equivalent of our task_id. The difference is that LangGraph needs you to configure SqliteSaver or PostgresSaver — FlowTask uses OpenCode's SQLite, which was already there. [docs]

Temporal runs workflows with durable execution: when a worker crashes at step 5 of 10, another worker picks up the workflow, replays the event history from the beginning, skips already-completed activities, and resumes from the last checkpoint. OpenCode solves the same conceptual problem — use history to avoid repeating completed work — at the LLM context level. The difference: Temporal guarantees this against infrastructure failures with deterministic replay; OpenCode does it at the conversational context layer of the LLM. [docs]

Microsoft Agent Framework defines supersteps with checkpoint storage: each superstep captures the full state upon completion. Each agent in our pipeline is a superstep that persists its state when done. [docs]

The difference: FlowTask solves it with 200 lines of protocol. Your tool already has the rest.

  1. Conclusion Session continuity isn't an infrastructure problem — it's a design omission. The tools already persist all the context. All that's missing is the handshake that reuses it.

If your agents depend on multi-turn reasoning, don't accept the default of a fresh session every time.

The full pattern is implemented in FlowTask for reference.