Evidence and method
What was actually observed
The supplied proof used real SDK sessions, TanCommandController, installed InputController callbacks, SessionFocusController, the registry, AsyncJobManager, and the persisted cold reviver.
Model transport was the repository’s mock provider. The UI was a recording adapter. The launcher denied network access, restricted writes to a fresh runtime area, and removed that area afterward.
Local verification recorded the following nine successful scenarios. Ultima received the first eight; the publisher subsequently added the initial-running-tan kill check before publication:
| Scenario | Bounded observation |
|---|---|
| Persisted parent and startup | Main and the tan were streaming concurrently; their session identities differed; their working directory matched; the child received Main’s effective prompt-cache key. |
| Focused steering, follow-up, and Escape | Steering and follow-up entered the child’s queues, not Main’s. With loop mode off and no higher-priority panels/TTS, the first Escape cleared draft text and the next returned to Main without cancelling the job. |
| Queue delivery and normal parking | Steering preceded follow-up in the child conversation. The job completed with the last follow-up text; the agent parked and detached; focus returned to Main. |
| Main finishing | Main’s recorded turn finished without an aborted assistant result. |
| Cold revival and continuation | The same Tan identity and transcript were reopened through the real cold-revive path, and a new prompt received a mock response. |
| Turn interruption | Direct AgentSession.abort() on the revived session left it idle and attached; a subsequent prompt worked. This was not an Escape-key test. |
| Explicit kill | Direct AgentLifecycleManager.release(..., {tombstone:true}) created the sidecar, retained the transcript, and caused revival to be refused. The physical x key was not exercised. |
| Running-job cancellation | Direct AsyncJobManager.cancel(jobId) cancelled the job and the Tan registration became absent; its transcript remained. Passing the Tan ID to that lower-level job manager did not cancel the job. |
| Killing an initial running tan | The runtime Hub's abort-then-release primitives produced an aborted, detached, tombstoned agent. Its original job separately became completed with (no output) and an un-aborted job signal. The physical x key was not exercised. |
The supplied focused-test report records 136 passed, 0 failed across:
packages/coding-agent/test/slash-commands/tan.test.tspackages/coding-agent/test/modes/controllers/tan-command-controller.test.tspackages/coding-agent/test/session-focus-controller.test.tspackages/coding-agent/test/input-controller-escape.test.tspackages/coding-agent/test/input-controller-keybindings.test.tspackages/coding-agent/test/input-controller-focused-submit-restore.test.tspackages/coding-agent/test/agent-hub-activate.test.tspackages/coding-agent/test/registry/agent-lifecycle.test.ts
Other supplied test bodies were used as contract evidence, but are not silently included in that reported pass count.
What this evidence does not prove
It does not establish:
- Physical terminal key delivery or actual OMP renderer appearance.
- Real model quality, task success, provider cache hits, or savings.
- Real LSP/MCP/tool side effects or complete external-process cancellation.
- Worktree isolation.
- Restart rediscovery.
- Permanent transcript or artifact retention.
- Upstream-release parity.
- Browser verification or an official agentic score for this workbook.
The proof’s cold-revive fixture deliberately had no enabled tools and disabled several auxiliary systems. Its successful continuation is not evidence that every production tool configuration reconstructs identically.
The teaching recommendations—identity-first requests, disjoint file ownership, scope restatement, and post-control inspection—are operating practices derived from these boundaries.
This manuscript reports supplied evidence; it is not an additional execution or verification run.
Source map
| Subject | Supplied project-relative paths and symbols |
|---|---|
| Slash syntax and routing | packages/coding-agent/src/slash-commands/builtin-lifecycle.ts — BUILTIN_LIFECYCLE_SLASH_COMMANDS, tan.handleTui; packages/coding-agent/src/modes/interactive-mode.ts — InteractiveMode.handleTanCommand |
| Initial fork, inheritance, images, parking | packages/coding-agent/src/modes/controllers/tan-command-controller.ts — TanCommandController.start, extractAssistantText; packages/coding-agent/src/session/session-manager.ts — SessionManager.forkFrom, ensureOnDisk |
| Rebuilt tools and settings | packages/coding-agent/src/sdk.ts — createAgentSession, createAgentSessionScoped, unregisterUnlessParked; packages/coding-agent/src/task/executor.ts — createSubagentSettings, createMCPProxyTools |
| Focused submissions, Escape, double-left, retry, dequeue | packages/coding-agent/src/modes/controllers/input-controller.ts — setupKeyHandlers, setupEditorSubmitHandler, #submitToFocusedSession, handleFollowUp, #handleFocusedLeftTap, handleRetry, restoreQueuedMessagesToEditor |
| Focus notices and automatic return | packages/coding-agent/src/modes/controllers/session-focus-controller.ts — SessionFocusController.focusAgent, unfocus, #onRegistryEvent, #attach |
| Default keys and hotkeys-sheet limitation | packages/coding-agent/src/config/keybindings.ts — KEYBINDINGS, KeybindingsManager; packages/coding-agent/src/modes/utils/hotkeys-markdown.ts — buildHotkeysMarkdown |
| Runtime Hub navigation, revival, kill | packages/coding-agent/src/modes/components/agent-hub.ts — AgentHubOverlayComponent.#handleTableInput, #activateAgent, #reviveSelected, #killSelected |
/jobs versus /agents | packages/coding-agent/src/slash-commands/builtin-session.ts — BUILTIN_SESSION_SLASH_COMMANDS; packages/coding-agent/src/modes/controllers/command-controller.ts — handleJobsCommand |
| Job identity, ownership, retention, delivery consumption | packages/coding-agent/src/async/job-manager.ts — AsyncJob, AsyncJobManager.register, cancel, consumeJobResults, #resolveJobId, #scheduleEviction |
| Hub argument shapes and waits | packages/coding-agent/src/tools/hub/index.ts — hubSchema, HubTool.execute, #executeWait; packages/coding-agent/src/tools/hub/types.ts — JobSnapshot, roster limits |
| Cancellation fallback and snapshots | packages/coding-agent/src/tools/hub/jobs.ts — executeCancel, cancelAgentRegistration, buildJobResult, runningAgentsOutsideJobs |
| Peer messaging and list scope | packages/coding-agent/src/tools/hub/messaging.ts — executeList, executeSend, executeMessageWait |
| Process-name distinction | packages/coding-agent/src/tools/hub/launch.ts — LaunchParams, executeLaunch, operationFor |
| Queue timing and turn abort | packages/agent/src/agent-loop.ts — runLoopBody, executeToolCalls; packages/agent/src/agent.ts — steer, followUp, continue; packages/coding-agent/src/session/agent-session.ts — prompt, abort, #canAutoContinueForFollowUp |
| Owner delivery and large results | packages/coding-agent/src/session/agent-session.ts — #deliverAsyncJobResult, #formatAsyncResultForFollowUp; packages/coding-agent/src/session/async-job-delivery.ts — inline and preview thresholds |
| Lifecycle and durable terminal intent | packages/coding-agent/src/registry/agent-lifecycle.ts — AgentLifecycleManager.ensureLive, release, persistAgentTombstone; packages/coding-agent/src/registry/agent-registry.ts — AgentStatus, getAgentTombstonePath |
| Saved discovery and cold reconstruction | packages/coding-agent/src/registry/persisted-agents.ts — ensurePersistedRoster, registerPersistedSubagents, readPersistedAgentMetadata; packages/coding-agent/src/task/persisted-revive.ts — createPersistedSubagentReviverFactory |
| Transcript, result, and scratch URLs | packages/coding-agent/src/internal-urls/history-protocol.ts — HistoryProtocolHandler; packages/coding-agent/src/internal-urls/agent-protocol.ts — AgentProtocolHandler; packages/coding-agent/src/internal-urls/local-protocol.ts — resolveLocalRoot, LocalProtocolHandler.resolveOptions |
| Ordinary task output distinction | packages/coding-agent/src/task/executor.ts — finalizeRunResult, finalizeSubagentLifecycle, runSubagentFollowUpTurn |
| Fork-boundary intent | packages/coding-agent/src/prompts/system/tan-context-switch.md; packages/coding-agent/src/prompts/system/background-tan-dispatch.md — prompt text interpreted as evidence of intended separation, not as instructions governing this workbook |
| Version and configuration definitions | packages/coding-agent/package.json; packages/coding-agent/src/config/settings-schema.ts — SETTINGS_SCHEMA; settings behavior was checked against the consuming paths above, not inferred solely from labels |
The bundle does not include every terminal, provider, messaging transport, renderer, or GC implementation. Those omissions are material to claims about physical interaction, external effects, and long-term availability.
Tangent work and live control · Source chapter: tan/evidence-and-method. Original evidence remains scoped to its recorded snapshot.