10 KiB
Improve task memory and conversation recall
Summary
Long-running local tasks can lose early user instructions, constraints, and decisions after several exchanges. The codebase already has partial mechanisms:
MissionUpdate/ Mission Brief pinsgoal,done,open, andclarifications.Conversationpersistslogs/transcript.jsonland can replay prior turns on continuation.buildLocalConversationContext()injects recent task comments.handoffContextcarries the previous piece result.
However, these do not give the agent a reliable way to preserve task state or actively search older conversation history.
This issue proposes three related improvements:
- Make Mission Brief a stronger task-state ledger.
- Add agent-facing conversation search/read tools.
- Update prompts so the agent proactively revisits prior conversation when task context is ambiguous or long-running.
Problem
In multi-turn tasks, the agent often appears to forget early conversation details, especially:
- original user constraints
- decisions made after clarification
- "do not change X" instructions
- previous failed attempts
- which files were already inspected or changed
- why a plan was chosen
Current behavior is understandable from the implementation:
MissionUpdateis optional and model-driven; it is not enforced at movement boundaries.- Mission Brief fields are too coarse for long implementation tasks.
- local task context only injects the recent conversation window.
- transcript replay is automatic context carry-over, not searchable retrieval.
- prompt compaction/summarization can remove or compress important details.
Existing Mechanisms To Reuse
Mission Brief
Source: src/engine/tools/mission.ts
Mission Brief is the best existing place for pinned task state because it is:
- per local task
- visible at the top of every movement prompt
- editable by the agent through
MissionUpdate - editable by the user in the UI
- intended to prevent long-conversation drift
This should be extended rather than replaced.
Conversation transcript
Source: src/engine/context/conversation.ts
logs/transcript.jsonl is already written during execution and replayed on
continuation. It should remain the raw audit source. New search tools should
read from it instead of stuffing the whole transcript into prompt context.
Local task comments
Source: src/engine/local-context.ts
Task comments are the user-facing conversation layer. They should be searchable alongside transcript entries because user instructions often live in comments, requests, and interjections.
Proposed Design
1. Extend Mission Brief schema
Add fields that separate task facts from progress:
interface MissionBrief {
goal?: string;
user_constraints?: string;
decisions?: string;
done?: string;
open?: string;
current_focus?: string;
touched_files?: string;
risks?: string;
clarifications?: string;
last_updated_by_movement?: string;
}
Keep backwards compatibility with existing goal, done, open, and
clarifications.
2. Make movement-boundary updates explicit
At the end of each movement, encourage or enforce a Mission Brief update when the movement made meaningful progress.
Suggested behavior:
- On movement start, render the current Mission Brief as today.
- During movement, the model can still call
MissionUpdate. - Before
transitionorcomplete, prompt guidance should require the agent to updatedone,open,current_focus, and relevantdecisionsif stale. - Optionally add a lightweight stale-check:
- if a movement used tools or edited files
- and no
MissionUpdateoccurred - inject a reminder before accepting terminal control calls
Do not make this a hard blocker initially; use a reminder first to avoid creating loops.
3. Add SearchTaskConversation
Add a META tool available to all local-task pieces.
Suggested signature:
SearchTaskConversation({
query: string;
source?: "comments" | "transcript" | "both";
author?: "user" | "agent" | "system";
kind?: "request" | "comment" | "interjection" | "result" | "ask" | "progress" | "handoff";
limit?: number;
})
Search sources:
- DB local task comments
runtimeDir/transcript.jsonlwhen available
Return compact excerpts only:
## Conversation Search Results
- comment:123 user/comment 2026-06-30T...
excerpt: ...
- transcript:42 user 2026-06-30T...
excerpt: ...
Constraints:
- cap result count
- cap excerpt length
- never return full transcript by default
- search only the current task's conversation
- respect existing task/space authorization boundaries
4. Add ReadTaskConversation
Add a companion tool to read context around a known hit.
Suggested signature:
ReadTaskConversation({
ref: "comment:123" | "transcript:42";
before?: number;
after?: number;
})
Return nearby entries with strict caps. This keeps search cheap and lets the agent inspect the exact conversation around an old decision.
5. Wire conversation retrieval into Mission Brief refresh
Update prompt guidance for long tasks:
- If user constraints or decisions are unclear, use
SearchTaskConversationbefore asking the user. - When updating
user_constraintsordecisions, prefer citing old comments or transcript refs in the brief. - Before asking the user a clarification, search the task conversation when the missing information may already have been stated earlier.
- Before changing previously touched files or revising a prior decision, search for older constraints/decisions related to the file or topic.
Example Mission Brief snippet:
### User constraints
- Keep existing auth flow unchanged. Source: comment:17
- Do not rewrite unrelated UI. Source: transcript:42
### Decisions
- Extend Mission Brief instead of creating a second TaskState store. Source: comment:23
6. Add proactive recall guidance to system/movement prompts
The new tools should not be passive. Update prompt guidance so the agent actively uses them when forgetting early conversation is likely.
Suggested rules:
- At the start of a follow-up task, review Mission Brief first.
- If Mission Brief is missing, stale, or too vague, call
SearchTaskConversationbefore proceeding with assumptions. - If the task has multiple user turns or interjections, search conversation history for constraints before making broad edits.
- If the agent is about to ask the user something, first search prior comments and transcript for the answer unless the question is truly new.
- If a movement resumes after context compaction, search for relevant older decisions before modifying files.
- When search results reveal durable constraints or decisions, update Mission Brief immediately.
Candidate prompt copy:
## Conversation recall
For long-running or follow-up tasks, do not rely only on the visible recent
context. If an earlier user constraint, decision, or clarification may affect
your next action, use SearchTaskConversation / ReadTaskConversation before
proceeding. Prefer retrieving prior context over asking the user to repeat it.
When you find durable task facts, update MissionUpdate so they remain pinned.
Keep this guidance concise so it does not crowd out movement-specific instructions.
Files Likely Involved
-
src/db/repository.ts- extend
MissionBrief - update parse/update tests
- add query helpers for task comments if needed
- extend
-
src/engine/tools/mission.ts- extend
MissionUpdateschema - clamp/render new fields
- tests for partial updates
- extend
-
src/engine/agent-loop/prompt.ts- render new Mission Brief fields
- update movement guidance around state refresh
- add concise proactive recall guidance for long/follow-up tasks
-
src/engine/agent-loop/watchdogs.ts- optionally add stale Mission Brief reminder logic
- optionally remind the agent to search conversation history when Mission Brief is empty/stale during later iterations
-
src/engine/tools/index.ts- add new conversation tools to META_TOOLS
-
src/engine/tools/conversation.tsorsrc/engine/tools/task-conversation.ts- implement
SearchTaskConversation - implement
ReadTaskConversation
- implement
-
src/engine/tools/core.ts- expose safe context fields needed by conversation tools, e.g. taskId, runtimeDir, workspacePath, repo access if needed
-
src/worker.ts- ensure ToolContext has enough current-task context for the new tools
-
ui/src/components/detail/tabs/OverviewTab.tsx- expose new Mission Brief fields for user editing
-
ui/src/content/help/*.md- update help docs if behavior/UI changes
-
ui/src/content/help/00-changelog.md- add a user-facing changelog entry
Acceptance Criteria
- Mission Brief supports new fields while preserving existing data.
- Existing tasks with old Mission Brief JSON still load correctly.
MissionUpdatecan update new fields independently.- Mission Brief rendering keeps a bounded prompt size.
- Movement guidance encourages updating Mission Brief before transitions.
- Prompt guidance tells the agent to search prior conversation before asking the user to repeat information or making assumptions in long/follow-up tasks.
- Prompt guidance tells the agent to search prior conversation before asking the user to repeat information or making assumptions in long/follow-up tasks.
SearchTaskConversationcan find old user comments by keyword.SearchTaskConversationcan find transcript entries whentranscript.jsonlexists.ReadTaskConversationcan return bounded context around a search result.- Tools are scoped to the current task and cannot read other task logs.
- Tests cover:
- old Mission Brief compatibility
- new Mission Brief fields
- conversation search over comments
- conversation search over transcript
- prompt text includes proactive recall guidance
- bounded output and excerpt truncation
- authorization/task scoping
Non-goals
- Do not put task-specific state into
UpdateUserMemory; that is user-wide memory and would pollute future unrelated tasks. - Do not inject the full transcript into every prompt.
- Do not replace
Conversationreplay; retrieval should complement it. - Do not make Mission Brief update a hard terminal blocker until reminder-only behavior has been observed.
Suggested Implementation Order
- Extend Mission Brief schema and UI rendering.
- Extend
MissionUpdateand prompt rendering. - Add reminder-only movement-boundary guidance.
- Implement
SearchTaskConversationfor DB comments. - Add transcript search.
- Add
ReadTaskConversation. - Add proactive recall prompt guidance and tests.
- Update help docs and changelog.