Subagents
Delegate bounded work and collect its results.
Manual for v0.9.5. Stable release: v0.9.5.
Source candidate distribution: 0.9.5. This bundle needs exactly octet 0.9.5. Use the version-matched installation and the 0.9.5 candidate record for availability and remaining qualification. 0.9.5 assets are not published; use the reviewed source-checkout route below until publication is approved.
Hand a bounded task to a background worker while the main session carries on. octet owns the child conversations, permissions, saving, limits and shutdown. It isn't an agent team, a swarm or a second model loop.
Try a read-only investigation#
After installing and enabling the bundle, a
subagent_spawn call can limit a worker to the hard read-only read tool:
{
"name": "explore-auth",
"task": "Trace authentication ownership and report relevant files and invariants.",
"profile": "explore",
"provider": "inherit",
"model": "inherit",
"reasoning": "inherit",
"tools": ["read"],
"timeout_seconds": 300,
"max_turns": 8,
"max_output_bytes": 8192,
"max_cost_microdollars": 200000,
"background": true,
"idempotency_key": "auth-audit-v1"
}The acknowledgement is not completion. Keep doing independent work. octet delivers the final output through its durable parent mailbox. Reusing an identical spawn key is safe to retry. Using it with different input fails.
| Tool | Use |
|---|---|
subagent_models |
Discover configured, credential-available worker models. Optional query and limit (default 50, max 100). |
subagent_spawn |
Start a named worker. background: false waits in the foreground, within limits. |
subagent_status |
Resync one target, or list all workers you own. |
subagent_wait |
Wait 1–60 seconds. Cancelling or timing out the wait doesn't stop workers. |
subagent_stop |
Give exactly one of {"target":"explore-auth"} or {"all":true}. The acknowledgement isn't terminal completion. |
subagent_continue |
Give target and message to steer an active worker, or resume a settled one with its conversation. Workers that are stopping, awaiting_approval or detached are rejected with stable errors. |
provider, model and reasoning default to inherit. Use subagent_models
to discover exact configured routes and supported reasoning before picking one.
Explicit routing needs the negotiated agent_model_selection_v1. The host alone
validates and normalizes it, and unknown routes never fall back to the parent.
The requested and host-confirmed effective selections show in the inspector and
are kept across restoration and continuation. Credentials are never returned.
Install and enable#
With octet 0.9.5 and verified matching published assets, install the bundle, then explicitly enable it:
octet extension install octet-subagents
octet --enable-extension octet-subagentsFor local testing with the 0.9.5 source tree, run from the repository root:
octet --extension-dir ./extensions --enable-extension octet-subagentsDon't install a 0.8.1 bundle into the 0.9.5 host. You need Python 3.9+.
Installing has no hook or third-party dependency and starts nothing, and the
bundle stays disabled until explicitly enabled. Default full access
(unsafe_host) implicitly trusts it without saving a grant. Optional
--trust-extension or source-bound trusted_extensions grants never enable it.
--safe-mode removes implicit trust and keeps executable processes stopped even
with explicit grants: startup still needs unsafe_host. Neither mode supplies
an OS sandbox. /extensions status shows the selected source, trust, API,
generation and negotiated features. The packaged skill is opt-in too:
/skills load octet-subagents.
Bound the work#
- At most 8 active children and 32 retained workers per parent owner, one level deep.
- Profiles are
explore,review,test-analysisandresearch. The provider, model and reasoning selection defaults to inherited. There's no separatemax_tokensargument. - The default tool grant is read, edit, write and bash, not read-only. A requested list must be a non-empty, duplicate-free subset. No browser, network-specific, collaboration or recursive agent tools are admitted.
- Workers inherit the working directory, environment, sandbox, approval policy and extension policy. A shared filesystem is not isolation, so scope changes to owned paths. Task text can't relax host policy.
- Omitted time, turn and cost ceilings inherit the parent's limits, including unlimited. The explicit limits and output bounds are in the safety reference.
Inspect the work#
Open /subagents (also /subagents list or /subagents status) to see the
host-owned live roster, including while a turn runs. Up and Down select, Enter
opens a scrollable, read-only transcript, Ctrl+X stops the selected worker, and
Escape or Left goes back. /subagents stop <name-or-id|all> requests interruption
without waiting for the parent turn to end. /subagents inspect <name-or-id>,
/subagents wait [name-or-id] and /subagents reattach [name-or-id] run at idle,
or queue until idle during a turn. /extensions only enables, disables and
configures the extension; runtime worker controls are not in its options menu.
A bounded, tool-like Subagents transcript block updates in place while workers are active, including between root turns. Its heading counts worker states, and up to four active child lines show the task and input and output tokens. Ctrl+O keeps disclosure. Once the block settles, the worker list shows all retained workers (up to 32), exact outcomes, models, tool-call counts (not model turns), cost and reasons. Prompts, tool arguments and results, and running model prose stay out of the roster.
What doesn't produce notices
Worker state and reason transitions, and raw first-party orchestration results (including errors), add no automatic per-worker transcript or semantic-copy notices, live or on replay. Actual failed, stopped or approval-parked states, model-visible errors, durable results and accounting are unchanged, and ordinary tool and run failures and approval prompts stay visible.
Serve inspection is also owner-bound and read-only, and can't send a prompt. In
both frontends, /subagents inspect <name-or-id> gives cached detail, and
/extensions inspect agent-session:<digest> is the fallback for an explicit
reference.
Open the fleet in panes#
Partial: pane execution is blocked. /subagents open-all tmux or
/subagents open-all herdr refreshes
the owner-bound agent/list and reports bounded plans using opaque
agent-session:<sha256> handles. No pane is created and no command is
submitted, including on repeated calls. See
/subagents open-all.
Why it's blocked
The host can resolve the opaque handles, but even launchable: true with
live_task: false is only a snapshot, not exclusive ownership. Every worker
stays blocked with an explicit reason, and otherwise-ready workers report
atomic host writer claim/settlement unavailable. The current parent stays
blocked because its calling process still owns it. Execution can't be enabled
until the host supplies atomic writer claim and settlement, and operator
coordination is no substitute. The command never installs a multiplexer and
keeps the eight-worker plan cap. The low-level tmux and herdr adapters keep
preflight, partial-failure reporting and direct stub tests, and those tests
aren't product ownership or live-handover qualification.
Session-scoped delegation#
A worker is owned by the parent session, not just the turn that spawned it.
Ending the parent turn doesn't stop its workers. After owner reconstruction, the
extension treats retained records as detached, not dead: summaries, errors,
usage and the sibling roster stay recoverable. An owner-bound reattach pass
restores available workers as idle until an explicit follow-up, and never
invents a new task. A worker parked at the approval boundary shows as
awaiting approval and can't be given unattended work.
Ownership and restoration
Host rebuilds restore extension ownership from the persisted principal and resource-owner fences. Each root session has its own roster alongside its lease, even when sessions share a delegation directory. Releasing an owner keeps settled output, error, terminal status and completion time independent of attachment.
Reference#
This bundle has distribution version 0.9.5 and uses API 0.4, with an exact
runtime requirement of octet 0.9.5. The detailed contract is a bundled-runtime
reference, not a general extension SDK tutorial.
- Safety model: exact grants, ceilings, ownership and accounting.
- Kernel boundary: host service ownership.
- Install, enable, and trust: local rebuild and inactive skill discovery.
- Tools: spawn, status, wait, stop and continue.
- Lifecycle and restart
behavior: states, retries,
resync and shutdown.
- Session-scoped delegation (reattachment): detached is recoverable, not terminal.
- /subagents open-all <tmux|herdr>: the pane-per-worker escape hatch.
- Per-worker provider, model, and reasoning: host-resolved selection and reasoning.
- TUI and Serve presentation: privacy, usage and owner-fenced inspection.
- Release smoke recipe: measured inputs versus deterministic fixtures. No live gain is claimed.
- Tests.