Skip to content

Allow main agents to resume subagent conversations - #614

Open
itkonen wants to merge 2 commits into
editor-code-assistant:masterfrom
itkonen:feat/resumable-subagents
Open

itkonen wants to merge 2 commits into
editor-code-assistant:masterfrom
itkonen:feat/resumable-subagents

Conversation

@itkonen

@itkonen itkonen commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

This PR allows main agents to reuse subagents and their accumulated context to speed up orchestration. Similar features exist in harnesses such as OpenCode, Codex, and Claude Code. Here, this is implemented by allowing the spawn_agent tool to accept the chat_id of an earlier subagent. When a chat_id is provided, the subagent continues its conversation from where it left off.

This supports several communication patterns. For example, a subagent can request more details from the main agent and return. The main agent can then answer through the task argument, using chat_id to continue that same subagent conversation.

AI summary

Implementation

  • Adds optional chat_id to spawn_agent. Calls without it continue to create fresh subagents. agent and task remain required.
  • Reuses the existing chat-prompt machinery and retained child history, including tool calls and results. Existing context compaction still applies.
  • Preserves the child’s original resolved model and variant. Continuation requires the same agent and does not accept model or variant overrides.
  • Returns the reusable ID at the beginning of the tool result so normal output truncation preserves it.
  • Resets the step budget for each invocation and extracts its result only from newly appended history, preventing an earlier answer from being returned as the new result.

Ownership and lifecycle safeguards

Continuation is limited to the same parent chat and server session. Invalid, foreign, or unauthorized IDs are rejected without silently creating a fresh child. Changes to configuration, workspace, or trust also require a fresh subagent. History replay checks child ownership before expanding referenced conversations.

Session-local bookkeeping prevents overlapping invocations and waits for prompt workers and tool cleanup to finish. Cancelled or provider-failed runs can be continued once their previous work has settled; active tools or unfinished cleanup still block continuation.

The patch also makes targeted corrections to existing cancellation handling:

  • Tool completion is signalled after post-tool and status hooks finish.
  • Stopping no longer bypasses the wait for dispatched tools and their cleanup.
  • Tool-state callbacks read current state rather than a captured snapshot.

There is no new messaging protocol, scheduler, or dedicated parent-question tool. Fork-aware continuation and persistence across server restarts are outside scope.

Validation

Regression coverage includes retained conversation and tool history, fresh-child behavior, invalid and unauthorized IDs, parameter ordering, model preservation, step-limit continuation, truncated results, transient provider failures, cancellation races, and rejection while old work remains active.

  • Full unit suite: 976 tests, 5,974 assertions, zero failures, using an explicit English/US JVM locale because existing numeric-format tests assume decimal points.
  • Existing subagent integration tests: 2 tests, 13 assertions, zero failures or errors.
  • Changed-file lint, editor diagnostics, and whitespace checks: clean.

🤖 Generated with ECA (openai/gpt-6-astra - xhigh)

Let main agents reuse a child's accumulated context through spawn_agent's
optional chat_id instead of recreating the conversation for every task.
Preserve the original model settings and enforce same-parent ownership,
session-local authorization, and non-overlapping invocations.

Allow cancelled and provider-failed runs to continue after their work has
settled, and wait for dispatched tools and cleanup hooks before reuse.
Cover retained history, validation, retry, and cancellation races with
regression tests and document the continuation interface.

🤖 Generated with [ECA](https://eca.dev) (openai/gpt-6-astra - xhigh)

Co-Authored-By: eca-agent <git@eca.dev>
@itkonen
itkonen marked this pull request as ready for review September 20, 2026 12:39

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant