Keep Claude commands out of subagents
This commit is contained in:
1 parent
8262ceb786
commit
1c60e78b55
2 files changed
+81
-49
No files matched your search
+18
-13
@@ -66,8 +66,12 @@ transcript is still being written to and its process is the session's to stop.
|
||||
|
||||
## Lifecycle, as events in the subagent's transcript
|
||||
|
||||
1. Created on the first child line for an unseen parent id (or, when the
|
||||
parent Task call was seen, at that call). First lines written:
|
||||
1. Created when the parent Task/Agent call is seen. A current Claude CLI's
|
||||
`task_started` with `task_type: local_agent` is a recovery source when an
|
||||
adopted stream begins after that call. A bare `parent_tool_use_id` is not
|
||||
enough: other operations can also parent nested lines, and treating one as
|
||||
proof created false subagents named after their first subcommand.
|
||||
First lines written:
|
||||
`Status Running`, then `UserMessage { text: <the Task's prompt> }` when
|
||||
the prompt is known -- it genuinely is the subagent's first user turn.
|
||||
2. Every child line is translated by that subagent's own `Translator`
|
||||
@@ -75,12 +79,13 @@ transcript is still being written to and its process is the session's to stop.
|
||||
content-block index, and parallel subagents interleave).
|
||||
3. **What ends a subagent is the CLI's own task lifecycle**, on top-level
|
||||
`system` lines that carry no `parent_tool_use_id`: `task_started`
|
||||
(`task_id`, `tool_use_id`, `is_backgrounded`, the prompt), `task_progress`
|
||||
repeatedly, then `task_updated` (`patch.status`, naming the *task* only)
|
||||
and `task_notification` (`tool_use_id`, `status`, and `summary` -- the
|
||||
agent's own report). `translate_task` keeps the `task_id -> tool_use_id`
|
||||
mapping from the first so the update can be attributed, records the
|
||||
summary as the subagent's closing text, and writes `Status Exited`. A
|
||||
(`task_id`, `tool_use_id`, `task_type`, `is_backgrounded`, the prompt),
|
||||
`task_progress` repeatedly, then `task_updated` (`patch.status`, naming the
|
||||
*task* only) and `task_notification` (`tool_use_id`, `status`, and `summary`
|
||||
-- the agent's own report). `translate_task` keeps the
|
||||
`task_id -> tool_use_id` mapping from the first so the update can be
|
||||
attributed, records the summary as the subagent's closing text, and writes
|
||||
`Status Exited`. A
|
||||
`completed` update is deliberately not the end: its notification carries
|
||||
the summary and would otherwise land after the ending. Any other terminal
|
||||
status ends it from the update, since the failure to avoid is a subagent
|
||||
@@ -175,11 +180,11 @@ its last status stays `Running`, which the list reports as **unknown**
|
||||
rather than as running (see the wire shape) until then.
|
||||
|
||||
Title: for Claude, the Task call's `description` input, then
|
||||
` (<subagent_type>)` when one is given; falling back to the tool's name when
|
||||
the child arrives before (or without) the parent call being seen. For Codex,
|
||||
the first lifecycle record uses the spawned thread's name or the last segment
|
||||
of `agentPath`, with underscores shown as spaces, then falls back to
|
||||
`subagent`.
|
||||
` (<subagent_type>)` when one is given; falling back to `Task` when the
|
||||
description is absent. An adopted current CLI can recover the same fields from
|
||||
its `local_agent` lifecycle record. For Codex, the first lifecycle record uses
|
||||
the spawned thread's name or the last segment of `agentPath`, with underscores
|
||||
shown as spaces, then falls back to `subagent`.
|
||||
|
||||
## Server layout
|
||||
|
||||
|
||||
Reference in new issue
Block a user