agent-native
Operate explicit orchestrator, implementer, validator, and scribe roles through a caller-selected agent runtime. Triggers: "agent-native factory", "role-shaped agent panes", "persistent workers".
Install
npx skills add https://github.com/boshu2/agentops/tree/main/images/gemini/skills/agent-native
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install boshu2-agentops@llmmart
git clone https://github.com/boshu2/agentops.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole boshu2/agentops collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Agent Native
Operate caller-selected agent sessions as explicit roles without turning the runtime into AgentOps lifecycle authority.
For judgment, default to a fresh context in the author's model family. Cross-model Validate, mixed Council and dueling model perspectives are explicit caller selections. Follow references/model-dispatch.md: the working session is the controller; check the explicitly selected adapter at runtime; no factory is required and Agent Mail is never the judgment path. The recipe owns host authorization, finite input/output, timeout and cleanup requirements.
Role requests declare authority; actual native runtime/OS filesystem and egress controls must enforce it. A prompt, worktree, chmod or unrestricted same-user process does not establish isolation. Observe synthetic canary denials before restricted-source work; unavailable protection remains unavailable.
Use native waits or status notifications while workers or checks are pending. Unchanged state is no reason for another analysis, review or provisional retrospective. Observation consumes time and context; it is not free. A known blocking failure deserves action even while other jobs run. For a suspected stall, inspect observable state before choosing a nudge or replacement within authority and remaining bounds. Stop observing at terminal status or the end of the caller's observation window; impatience alone does not justify restart.
Named failure mode — prompt-send optimism: treating a successfully delivered prompt as a working worker; delivery proves transport, not engagement.
For new authorized work after a worker completes, use the selected runtime's documented follow-up or resume operation that starts a turn. A message operation may only queue text for a running worker. Check native state and engagement; do not treat a queued repair request as a resumed implementation attempt.
Anti-pattern: restarting an unresponsive worker as the first move. Corrective: capture its observable state first — a restart destroys the evidence of why it stalled, and rescue is usually cheaper than rerun.
Roles
- Orchestrator: passes focused intent, scope and evidence references, names the integration/final-review owner, and reports runtime facts. Retrieve extra history only for a consequential uncertainty; a fresh context is not necessarily small. A new goal does not clear history or renew spent bounds.
- Implementer: may modify only its packet's declared subject.
- Validator: receives exact candidate content in a fresh, read-only context.
- Scribe: records runtime evidence without judging acceptance.
Reader and Writer are bounded cheap delegations, not roles with authority: a
Reader returns line-referenced bullets over files the caller never loads, and a
Writer lands one patterned file from a spec plus a reference file and returns a
receipt the caller never reads back. Both are caller-selected per call, default
to a cheap model, and yield runtime facts only — a receipt is not validation.
For Codex, use the source-owned bulk-reader or code-writer native role
(gpt-5.6-luna); pass a fresh bounded task and receive findings or a receipt.
The reader uses explicit slices of at most 350 lines; the parent keeps file
content out of its context. A reference file is required for a writer. See
context-budget delegation for
installation, native invocation, opt-in refusal hooks and the limits of role
instructions.
Contract
For a caller-selected parallel batch, validate every complete packet before the
first launch. Require the selected executor, packet identity and all transitive
effects, with canonical workspace-relative write scopes in separate isolation.
Resolve symlinks and normalize paths; compare scopes case-insensitively so an
alias cannot hide a collision. A lexical disjointness check alone cannot prove
symlink or runtime isolation. The reference batch contract rejects nonempty
write_scope.exclude because its proof cannot honor those exclusions.
Dispatch each validated packet once and preserve its identity with the result:
candidate, evidence or executor error. Do not partly launch a batch that later
fails validation, or retry an error as if it had never happened. Native caller
authority determines any repair or follow-up. The developer reference
scripts/swarm/dispatch_once.py requires an AgentOps source checkout; it is
exercised by repository tests and is not bundled with standalone skills.
Installed use dispatches through the selected native runtime. This optional
batch mode selects no backlog work, creates no queue and integrates no changes.
- Require caller intent, role, workspace, authorized source/output scope and evidence destination before starting a worker. Pass source-store/project/work identity and permitted intent locators before execution can fail. Record this dispatch association in caller-owned native comments/metadata or runtime facts, with actual worker session/context IDs explicitly unknown until observed; a requested ID is not an observed ID. This adds no AO packet schema.
- Capture observed native runtime/session/context identity at startup, before substantive work and independently of final handoff. Return the observation through the caller-owned native recording channel with its provenance and permitted source locator. Preserve launch failures and unknowns if startup never becomes observable. Follow session associations for separate parent/resume links, supported multi-work spans and frozen source bounds. A controller is not necessarily a native parent; every requested child and resumed execution needs its own observed association. If recording fails, report the gap; do not claim crash recovery from prompt delivery alone. Prove runtime readiness and engagement from observable state; a successful prompt send is not proof of work.
- Keep concurrent writers disjoint and isolated. Runtime coordination is not a claim, lease, queue, or completion state in AgentOps.
- Record provider state, transcript references, artifacts, and terminal status.
- Return runtime evidence to the caller. Do not convert provider retries, reconnects, idle states, or failures into Plan, Candidate, or verdict state.
- A validator session may supply judgment to Validate, but only Validate writes
verdict.v2. The adapter cannot select AgentOps semantics, issue a binding verdict, or turn factory completion into delivery or validation proof.
NTM, Codex exec, native processes, Agent Mail, and Gas City are replaceable adapters. Use them only when the caller selected that execution shape. A single local agent pays no factory coordination cost. Model identity, when recorded, is a declared runtime fact like context identity — see references/model-dispatch.md.
Native judgment receipts defines exact private receipt references and the independent profile/subject/acceptance checks for caller-required model diversity. Missing native identity never satisfies a leg.
Files (agentops)
-
references
-
context-budget-delegation.md 9.6 KB
# Context-Budget Delegation (Reader / Writer) Keep large file bytes out of the working context by delegating reads and patterned writes to bounded cheap contexts that return line-referenced bullets or receipts. Spotify published an internal Claude Code setup built this way and claims roughly a 90% token reduction; that is Spotify's claim about Spotify's setup, not a measurement made here. The mechanical finding is what matters: the same read rule placed in CLAUDE.md was advisory and ignored, and every line of an unbounded read is re-sent on every later turn for the rest of the session. ## Three layers | Layer | AgentOps surface | Authority | |---|---|---| | Advisory | this reference and the `agent-native` Roles note | none; context the agent may ignore | | Delegation | `bulk-reader` / `code-writer` subagents (`agents/`), `bulk-read` / `code-write` workflows (`workflows/`) | caller-selected per call | | Enforcement | the opt-in read-budget guard: [READ-BUDGET-GUARD.md](../../cc-hooks/references/READ-BUDGET-GUARD.md) | mechanical once installed; inert by default | The delegation surfaces live in the AgentOps source checkout: the subagents are Claude Code plugin agents and the workflows are Claude-only thin conveyors (`workflows/README.md`). Neither ships with a standalone installed skill. With the AgentOps plugin loaded, select Agent `subagent_type: "agentops:bulk-reader"` or `"agentops:code-writer"`, and Workflow `name: "agentops:bulk-read"` or `"agentops:code-write"`. Use bare names only for standalone definitions or workflow links when the runtime actually lists those names. The plugin adds the namespace; source frontmatter and workflow `meta.name` remain bare. ## Reader and Writer as bounded cheap delegations - **Reader** (`bulk-reader` subagent, `bulk-read` workflow): the caller passes a question and file paths; the reader reads each file completely in slices and returns bullets only, each starting with `path:line` or `path:start-end`, at most 40 unless the caller sets another cap, plus truthful `lines_covered` and `complete`. The caller sees bullets, never bytes, so a follow-up question costs one more cheap call and zero main-context lines. The slice budget applies to each Read, and the bullet cap applies only to the answer: neither caps total coverage. Readers start at offset 1 and continue through EOF, retrying truncated output from the first unread line with a smaller limit. An early answer may be revised later in the file; incomplete coverage cannot establish the final file-wide decision. Citations and coverage use actual source line labels, excluding tool wrappers and EOF notices. Uncertain counts must remain incomplete, never guessed. - **Writer** (`code-writer` subagent, `code-write` workflow): the caller passes a spec, a REQUIRED reference file and one target path; the writer matches the reference's patterns, writes only the target, optionally runs one check, and returns a receipt (path, line count, check result, a short summary). The caller never reads the result back. - Both are one-shot delegations: AgentOps adds no queue or persisted delegation state. Native runtimes may retain their own transcripts. A dead worker returns an explicit error; a missing writer receipt leaves possible writes unknown. ## Guard compatibility Readers and writers slice: `Read` with `offset` + `limit`, `limit` at most the budget (350 lines by default, `AOP_READ_BUDGET_LINES` when set). A subagent's own reads run under the same PreToolUse hook as the caller's, so an unbounded read inside a delegate is blocked the same way. The guard never fires on a bounded slice or on a file at or below budget, so a compliant reader is never blocked and the delegation works whether or not the guard is installed. ## Codex native roles and enforcement Verified against installed `codex-cli 0.154.0` on 2026-09-12 (the authoring Desktop session reports 0.153.4). Codex has synchronous `PreToolUse` hooks that can refuse supported local tool calls with exit 2 and stderr. Shell tools, including `exec_command`, arrive as `tool_name: "Bash"` and `tool_input.command`. This replaces the previous unverified assertion that Codex had no such hook. [Codex hook contract](https://learn.chatgpt.com/docs/hooks). The Codex guard is an optional installation from the checkout: ```sh bash scripts/install-codex-context-agents.sh # personal roles bash scripts/install-codex-read-budget-guard.sh # optional shell guard # Add --project for project scope; see the linked-worktree limit below. ``` Restart Codex to load the roles, and review the exact hook in `/hooks` before trusting it. Installing files does not activate an untrusted hook. The guard is inert in the plugin and its default hook manifest remains unchanged. The 0.154 CLI resolves project hooks from the primary checkout even when launched in a linked worktree. The hook installer rejects `--project` there before writing anything; install personally or run it in the primary checkout. Project trust must be saved in Codex config, and does not replace hook trust. The Codex installer wires only the verified Bash shape. It does not claim coverage of arbitrary MCP reads, hosted tools, or tool paths that opt out of hooks. It uses the same policy `core.context:unbounded-read`, budget `AOP_READ_BUDGET_LINES` (350 by default), waivers and hashed telemetry ledger as the Claude guard. Pipes, redirects, unresolved shell expressions and other command words remain outside the predicate. This is a scoped guardrail, not a complete boundary against all ways to read a file. The role templates are canonical source files under this skill's `agents/` directory, mirrored into `skills-codex/agent-native/agents/` by regeneration. The checkout exposes them at `.codex/agents/` using relative symlinks; the installer copies the generated templates to the runtime's personal or project agent directory and registers `agents.<name>.description` and `config_file` using the installed Codex config editor. The checkout has equivalent explicit registrations in `.codex/config.toml`; standalone file discovery did not work in the measured CLI, while registered roles ran successfully. Installation requires Node and the installed Codex runtime. They do not add skills to the menu. - `bulk-reader` (`agents/bulk-reader.toml`): one question and one file, slices of at most 350 lines (or a smaller configured budget), up to 40 paraphrased `path:line` findings with truthful coverage. Default sandbox: read-only. - `code-writer` (`agents/code-writer.toml`): spec, required reference and one target; patterned write and optional check, receipt only. Default sandbox: workspace-write. Target-only edits and content-free returns are role instructions; they are not a per-file sandbox or output filter. Parent live sandbox overrides can also override a role's default sandbox. Ask Codex: "Use bulk-reader to answer <question> about <path>; return at most five findings and coverage. Keep the file out of this parent context." For a write: "Use code-writer with spec <spec>, reference <path>, target <path>, check <read-only check>; return the receipt only." The runtime identifies a custom agent by its TOML `name`. When its native spawn tool exposes `agent_type`, select that name. On a facade that exposes only a task name, message, model and context inheritance, pass the role's instructions to a fresh child, explicitly select `gpt-5.6-luna` and the role's effort, and disable history inheritance (`fork_turns: "none"`). That fallback is a native delegated prompt; do not claim that the facade loaded a named role or enforced its sandbox setting. Never replace either route with a subprocess model invocation. [Codex subagent contract](https://learn.chatgpt.com/docs/agent-configuration/subagents). The parent checks only coverage, locators and receipt metadata. If evidence is insufficient, delegate a follow-up or let a fresh validator inspect the result in its own context. Do not read the whole file back into the parent to verify that delegation worked. Native output truncation is not proof of complete coverage; the reader retries smaller slices or returns `complete: false`. ## Model selection Claude agents and Workflow conveyors default to `haiku`; workflow `model` may override it. The Codex roles pin `gpt-5.6-luna` (reader low effort, writer medium), a model available in the measured runtime's catalog and the least expensive listed model with published comparable credit rates at this cutoff. Spark's research-preview price is not a comparable published rate. Role model pins and availability should be rechecked for another account or release; do not silently substitute a costly model. [Current rate card](https://learn.chatgpt.com/docs/pricing#token-rates). [model-dispatch](model-dispatch.md) still governs judgment legs; a reader or writer is an execution role, never a judge. See the checkout design note `docs/design/codex-context-budget.md` for the installed-runtime evidence, live proofs and remaining limits. ## Doctrine - A receipt is a runtime fact, not validation. `written: true`, a line count or `check_ok: true` proves that a process ran, nothing about acceptance. [Validate](../../validate/SKILL.md) stays fresh and author-distinct over the exact written content; the writer's context can never issue that PASS. - Reader bullets are evidence with a locator, not authority. Have a fresh validator inspect cited lines before an acceptance decision that depends on them. - No new AO command, scheduler or budget account. The guard is a standalone opt-in recipe with an installer (ADR-0002: a hook earns its lease on life only as an optional runtime adapter); the delegations are caller-selected per call; nothing counts tokens on the agent's behalf or renews a spent bound. -
judgment-receipts.md 6.3 KB
# Native judgment receipt references A consumer can check caller-selected judge profiles with `ao provenance verify-judgments`. This is a mechanical reader over the existing `verdict.v2` contract; Validate remains the semantic author. It neither launches judges nor chooses a strategy, provider, retry, budget or delivery transition. Before dispatch or source retrieval, the caller resolves task, source owner, model/provider and destination authorization. Required diversity cannot grant access to a denied provider. The native runtime must enforce that policy before transmission; a local verifier cannot retract an unauthorized dispatch. Pass the independently authorized providers separately from the required profile file. The generic reader does not resolve configuration; callers supply its inputs. ## Independent inputs Freeze the expected subject manifest, immutable acceptance file, author context, required profiles and authorized provider list outside the candidate's control. Every required leg must concern that exact subject **and** acceptance. Two valid PASS verdicts over the same bytes for different purposes are not interchangeable. For example, factual support cannot stand in for permission to disclose a page. The required profile file is a strict JSON object: ```json {"profiles":[{"id":"other-family","runtime":"claude","model":"claude-example","family":"anthropic","effort":""}]} ``` Use an exact model ID, not an alias that can silently resolve to another model. Supported runtime/family pairs are `codex`/`openai` and `claude`/`anthropic`. Profile IDs must be distinct. An empty effort imposes no actual-effort requirement. A nonempty effort requires that exact effort in runtime reporting; a requested option alone does not prove actual effort. Missing native reporting remains an honest limitation, even when the model and context can be verified. ## Receipt in existing evidence_refs The caller/runtime records one immutable receipt in protected non-Git evidence storage. A verdict cites it through an ordinary top-level `evidence_refs` string: ```text judgment-receipt:/absolute/private/evidence/receipt.json#sha256=<SHA256-of-exact-receipt-bytes> ``` No model, provider, effort or receipt fields are added to `verdict.v2`. Its own content-addressed artifact remains unchanged, including FAIL, NOT_PROVEN, findings, omissions and freshness attestation. There is no receipt-to-verdict backreference or digest cycle: the verdict binds the receipt's bytes. The receipt's strict version-1 shape is: ```json { "version": "1", "requested": {"id":"other-family","runtime":"claude","model":"claude-example","family":"anthropic","effort":""}, "subject_manifest_digest": "<expected-subject-manifest-digest>", "acceptance_digest": "<SHA256-of-exact-expected-acceptance-bytes>", "author_context_id": "<observed-author-context>", "transcript": {"path":"/absolute/private/evidence/native.jsonl","start":0,"end":1234,"sha256":"<SHA256-of-exact-selected-native-bytes>"}, "exit_code": 0, "timed_out": false, "truncated": false, "cleanup_verified": true, "omissions": [] } ``` Capture the complete invocation span, including native identity and terminal events. `start` and `end` are zero-based, end-exclusive byte offsets; both must be native JSONL line boundaries (the file end may lack a trailing newline). Hash the exact span, preserving CRLF, whitespace and final-newline presence. Never select only a favorable response from a run that changed model/context or terminated unsuccessfully. Record withheld/unread required input, incomplete output and every other omission. Nonempty omissions cannot satisfy the leg. Raw thinking content is not needed in reports; metadata span references suffice. The verifier reopens the transcript and parses native envelope fields. It never trusts a receipt-authored actual-model string, requested profile echo or JSON inside assistant/tool text. Claude `assistant.message.model` plus native `session_id`/`sessionId` supplies the reported identity; `system.init.model` is a requested configuration echo. Codex `session_meta.payload.model`, `model_provider`, `id` and optional `reasoning_effort` supply metadata when present. `turn_context` configuration and model self-description do not establish actual identity. Codex versions without native model reporting remain `identity_unverified`; do not guess their model from a command or filename. Successful native termination requires Claude `result` with `subtype: success` and `is_error: false`, or Codex `event_msg` with `payload.type: task_complete`. A saved content-only transcript without a terminal event cannot establish completion. Exit zero alone, a timed-out partial result or a clean process tree cannot replace the native terminal event. Native fields attest available runtime reporting; they do not cryptographically prove provider weights, an untampered recorder, complete source coverage or context isolation. Caller/runtime freshness attestation remains necessary alongside observed distinct context identities. ## Verify required coverage ```sh ao provenance verify-judgments \ --root "$SUBJECT_ROOT" --manifest "$MANIFEST" --intent "$EXPECTED_INTENT" \ --author-context-id "$AUTHOR_CONTEXT" --evidence-root "$EVIDENCE_ROOT" \ --required-profiles "$REQUIRED_PROFILES" --allowed-provider anthropic \ --verdict "$VERDICT" ``` Repeat `--verdict` for supplied legs and `--allowed-provider` for independently authorized providers. The existing private non-Git evidence root confines candidate-selected receipt, transcript and verdict reads. Files must be private regular files; paths cannot escape the root through symlinks. Reads are bounded to 16 MiB per file. Malformed/duplicate JSON, altered receipt or transcript bytes, invalid spans and unsupported helper versions fail closed before being relied on. The result lists each required leg, the unchanged supplied verdict, parsed native facts and exact source spans, and any mismatches or missing coverage. Unknown identity, wrong model/family/required effort, stale subject, wrong acceptance, reused author/peer context, timeout, truncation or unverified cleanup leaves `satisfied: false` with exit 1. An unavailable required leg remains missing; never swap it for another family or remove it without caller authority. Exit 0 and `satisfied: true` establish mechanical matching of the supplied PASS legs, not a new semantic judgment or a majority vote. Preserve disagreement. -
model-dispatch.md 10.8 KB
# Model Dispatch (controller-session) Judgment defaults to a fresh, author-distinct context in the author's model family: Codex/OpenAI reviews Codex/OpenAI work, and Claude/Anthropic reviews Claude/Anthropic work. Use that runtime's configured capable model unless the caller pins one. Other execution roles retain their caller-selected runtime. Factories are optional adapters; the current session passes requests and returns runtime facts without adding a mailbox, AO queue or scheduler. `--cross-model [model]` on Validate or RPI, or an explicit "cross-model review" request, adds a fresh judge from a different family. The optional model pins that leg; absent a pin, select an authorized capable other-family model. Council and other judgment strategies use fresh same-family contexts unless the caller selects mixed models. These are skill prompt selections, not new native CLI flags. Selection never grants source-disclosure or provider access. Risk changes evidence depth; it does not automatically select another family. An explicitly required unavailable leg remains `diversity_unsatisfied`: a single-family PASS is `NOT_PROVEN` for the combined request. Optional unavailable diversity may accompany the same-family result with that disclosure. A delivered FAIL stands. Neither agreement nor majority vote establishes truth. Authors cannot issue their own binding PASS. ## Request and independent inputs One request selects one worker and one result destination. Before dispatch, resolve role, exact subject/acceptance references, authorized input bytes, workspace, read/write scope, output/evidence destination, requested model, requirement for a fresh context distinct from the author and every peer, finite input/output limits and time bounds from the caller and native runtime. Actual context identity remains unknown until the native runtime reports it; verify freshness and distinctness against that observed identity before relying on judgment. These are invocation facts, not a new AO packet schema, work store or budget account. Retry remains the caller's decision. Judge legs receive read-only subject access; only their declared evidence output is writable. Both the fresh and required cross-family legs receive the same exact subject and unchanged acceptance with independently supplied initial inputs. Do not include the author's desired verdict or a peer's conclusion. Seal initial perspectives before cross-review; preserve findings and dissent afterward. Each leg must actually load the required skill, subject and authorized evidence; a skill-name mention or restating the procedure is not activation evidence. Check task, source owner, model/provider and destination authorization before reading pages, private citations, session-search hits or tracker comments. Read permission is not permission to transmit to a reviewer or store in Git. Native runtime/OS filesystem and egress controls enforce the declared profile; prompt restrictions, a worktree or a same-user unrestricted process do not. Unsupported protection prevents restricted-source dispatch. The repository contract is ADR-0016, State tiers; this installed skill carries the requirements above without depending on a repository-relative documentation link. ## Association before execution Before launch, pass source-store/project/work identity and permitted frozen intent references through the selected runtime input. The caller records the dispatch association in native work comments/metadata or existing runtime facts before execution can fail, with worker identity explicitly unknown if not yet observed. At startup, capture actual runtime/session/context identity and return it to that caller-owned channel before substantive work; final handoff is only an additional reference. Do this for a child or resumed execution as well. Keep requested model/ID, observed model/ID, controller identity, native parent and resume predecessor distinct. Use the selected runtime's observed resume identity even if it retains the original session ID; invocation observations must still remain distinguishable. Never infer parentage from workspace, filename, title or proximity. An unavailable startup/recording operation stays a named failure with unknown identity, not a fabricated successful launch. [Session associations](../../cass/references/SESSION_FORMATS.md#work-to-session-associations) owns the fact distinctions: provenance, permitted locators, source bounds and multi-work spans. Record only metadata authorized for the source owner and recipient/destination; BD/Dolt is versioned, not secret storage. Neither this reference nor the core phases gain tracker mutation, a new association store, or runtime lifecycle authority. Required judgment freshness remains unsatisfied when observed identities or their provenance are missing. ## Selected adapters Check readiness only for the selected execution shape; never start a factory merely because it is installed. No substitute can satisfy a required family. | Selected shape | Readiness and use | |---|---| | Native Codex or `codex-exec` | Native fresh context or available `codex exec`; close stdin or supply the finite prompt for non-TTY runs. | | Bounded Claude print | Available `claude` with the requested model/effort and a host-authorized native control profile; recipe below. | | Interactive runtime / NTM | Only when the caller selects interactive hosting; verify native readiness, observation and stop support. NTM itself is never required. | | Test runner | Synthetic conformance only; never evidence of a live model or semantic judgment. | Prefer the matching native runtime for same-family judgment. A Claude-family checkpoint may use the bounded adapter below when the actual host permits it; Codex-family judgment may use a fresh native Codex context or `codex exec`. A selection is not permission to override a host prohibition, missing controls, quota ceiling or provider guard in a specialist skill. ## Review duration Do not impose a fixed ten-minute timeout. Use an explicit caller-selected review timeout or derive the invocation timeout from the remaining caller/native deadline; when both exist, the earlier bound wins. A headless call still needs finite time and input/output bounds under host policy. If neither time bound is available, report the missing invocation bound before launching; do not invent a universal review limit. Native cancellation, output caps and cleanup remain. For the repository's shared adapter, supply `CODEX_EXEC_TIMEOUT` in seconds or `CODEX_EXEC_DEADLINE_EPOCH` as an absolute timestamp. With no explicit timeout, the adapter uses the remaining deadline without a ten-minute clamp. Reuse the same goal deadline across invocations; retries, context resets and renewed connections do not renew the caller's allowance. Record a timeout as an incomplete review, preserve its bounded output, and return control to the caller. ## Authorized bounded Claude invocation For a caller-selected Fable profile, the native command is: ```sh claude --print --model claude-fable-5-1 --effort xhigh ``` This is one caller-selected profile, not a mandatory model pin. Select another authorized capable Claude profile when requested. For native model evidence, request `--output-format stream-json --verbose`; preserve assistant-envelope model/context fields and the terminal result, not just rendered text. Inspect the installed CLI contract before choosing flags. An authorized public/toy read can use native safe-mode/restricted controls with tools, customizations, MCP and session persistence disabled when the installed runtime supports them. Those controls and cleared toy bytes do not establish restricted-source isolation. The command is supplied to a native bounded invocation, not a standalone unbounded shell recipe. Before starting it, the native runtime must: 1. Freeze exact authorized input and subject/acceptance identities; declare finite input and captured-output byte limits, wall-clock timeout and the allowed tools, source paths, output paths and egress endpoints. Missing limits or unsupported controls make this adapter unavailable. 2. Supply only that input on stdin, close stdin, and start a fresh context with the declared profile. Keep transcripts, stderr, diagnostics and review output in caller-selected protected non-Git storage; new recorders use native umask 077. Do not request permission bypass or broaden the profile. 3. Observe engagement and enforce the timeout and output cap through the native process/job control. On abnormal termination, capture available bounded state, stop the owned process tree through native controls and verify no owned descendants or hook/probe loops remain. Unverified cleanup is a disclosed runtime failure, never a successful review or permission to retry. 4. Return actual command/model/context identity, loaded input/skill/subject identities, exit or signal, timeout/truncation facts, output references and cleanup observations. Distinguish requested model from observed identity; missing identity or a wrong family cannot satisfy the required leg. The selected native runtime retains process, timeout and output control. AO does not become a scheduler or semantic workflow engine. This non-executable reference does not change Door9's policy for tracked executable code or production Go, introduce a shipped runner, or relax specialist provider-name guards. ## Receipts and judgment A successful prompt send proves transport, not engagement. Output bytes, exit zero, a terminated process and clean cleanup prove only those facts. Only fresh Validate can judge acceptance and persist `verdict.v2` when requested. Keep model/context identities in [native judgment receipt references](judgment-receipts.md) and freshness attestation notes. `ao provenance verify-judgments` compares all caller-required profiles with exact native transcript spans, independently supplied subject and acceptance, actual termination and omissions. Requested profile echo or unknown native identity cannot satisfy required diversity. No verdict schema change is required, and these attestations are not cryptographic proof of independence. Both required legs must pass the same exact subject for convergence. A split never certifies PASS and findings do not disappear because a judge was preferred. Return both results and unresolved dissent to the caller. Do not convene a third judge, retry, or resolve truth by a vote on this recipe's initiative. ## Consumers - Council: per-judge methodology and model/context identity, sealed initial perspectives, preserved dissent and no majority-derived PASS. - Idea Genie duel: optional selected model pins and sealed perspectives within its owning challenge contract; specialist provider guards remain intact. - Validate: fresh same-family and explicitly selected cross-family judgments; this reference is the invocation owner and Validate remains the verdict writer.
-
-
SKILL.md 8 KB
--- name: agent-native description: 'Dispatch independent tasks to parallel workers or selected persistent roles. Use when: delegation is authorized with disjoint scopes; execution does not validate output.' practices: [team-topologies, design-by-contract] hexagonal_role: supporting consumes: [explicit-role-packets] produces: [runtime-evidence, worker-handoff, per-packet-results] context_rel: - kind: customer-of with: ntm - kind: customer-of with: codex-exec - kind: customer-of with: agent-mail skill_api_version: 1 user-invocable: true metadata: tier: meta dependencies: [] capabilities: [role_dispatch, observe_workers, handoff, dispatch_once] effects: [manage_runtime_sessions, invoke_selected_executor] canonical_status: canonical disposition: keep_optional_adapter output_contract: runtime evidence and per-packet candidate, evidence, or error for explicit authorized work --- # Agent Native Operate caller-selected agent sessions as explicit roles without turning the runtime into AgentOps lifecycle authority. For judgment, default to a fresh context in the author's model family. Cross-model Validate, mixed Council and dueling model perspectives are explicit caller selections. Follow [references/model-dispatch.md](references/model-dispatch.md): the working session is the controller; check the explicitly selected adapter at runtime; no factory is required and Agent Mail is never the judgment path. The recipe owns host authorization, finite input/output, timeout and cleanup requirements. Role requests declare authority; actual native runtime/OS filesystem and egress controls must enforce it. A prompt, worktree, chmod or unrestricted same-user process does not establish isolation. Observe synthetic canary denials before restricted-source work; unavailable protection remains unavailable. Use native waits or status notifications while workers or checks are pending. Unchanged state is no reason for another analysis, review or provisional retrospective. Observation consumes time and context; it is not free. A known blocking failure deserves action even while other jobs run. For a suspected stall, inspect observable state before choosing a nudge or replacement within authority and remaining bounds. Stop observing at terminal status or the end of the caller's observation window; impatience alone does not justify restart. Named failure mode — **prompt-send optimism**: treating a successfully delivered prompt as a working worker; delivery proves transport, not engagement. For new authorized work after a worker completes, use the selected runtime's documented follow-up or resume operation that starts a turn. A message operation may only queue text for a running worker. Check native state and engagement; do not treat a queued repair request as a resumed implementation attempt. Anti-pattern: restarting an unresponsive worker as the first move. Corrective: capture its observable state first — a restart destroys the evidence of why it stalled, and rescue is usually cheaper than rerun. ## Roles - **Orchestrator:** passes focused intent, scope and evidence references, names the integration/final-review owner, and reports runtime facts. Retrieve extra history only for a consequential uncertainty; a fresh context is not necessarily small. A new goal does not clear history or renew spent bounds. - **Implementer:** may modify only its packet's declared subject. - **Validator:** receives exact candidate content in a fresh, read-only context. - **Scribe:** records runtime evidence without judging acceptance. Reader and Writer are bounded cheap delegations, not roles with authority: a Reader returns line-referenced bullets over files the caller never loads, and a Writer lands one patterned file from a spec plus a reference file and returns a receipt the caller never reads back. Both are caller-selected per call, default to a cheap model, and yield runtime facts only — a receipt is not validation. For Codex, use the source-owned `bulk-reader` or `code-writer` native role (`gpt-5.6-luna`); pass a fresh bounded task and receive findings or a receipt. The reader uses explicit slices of at most 350 lines; the parent keeps file content out of its context. A reference file is required for a writer. See [context-budget delegation](references/context-budget-delegation.md) for installation, native invocation, opt-in refusal hooks and the limits of role instructions. ## Contract For a caller-selected parallel batch, validate every complete packet before the first launch. Require the selected executor, packet identity and all transitive effects, with canonical workspace-relative write scopes in separate isolation. Resolve symlinks and normalize paths; compare scopes case-insensitively so an alias cannot hide a collision. A lexical disjointness check alone cannot prove symlink or runtime isolation. The reference batch contract rejects nonempty `write_scope.exclude` because its proof cannot honor those exclusions. Dispatch each validated packet once and preserve its identity with the result: candidate, evidence or executor error. Do not partly launch a batch that later fails validation, or retry an error as if it had never happened. Native caller authority determines any repair or follow-up. The developer reference `scripts/swarm/dispatch_once.py` requires an AgentOps source checkout; it is exercised by repository tests and is not bundled with standalone skills. Installed use dispatches through the selected native runtime. This optional batch mode selects no backlog work, creates no queue and integrates no changes. 1. Require caller intent, role, workspace, authorized source/output scope and evidence destination before starting a worker. Pass source-store/project/work identity and permitted intent locators before execution can fail. Record this dispatch association in caller-owned native comments/metadata or runtime facts, with actual worker session/context IDs explicitly unknown until observed; a requested ID is not an observed ID. This adds no AO packet schema. 2. Capture observed native runtime/session/context identity at startup, before substantive work and independently of final handoff. Return the observation through the caller-owned native recording channel with its provenance and permitted source locator. Preserve launch failures and unknowns if startup never becomes observable. Follow [session associations](../cass/references/SESSION_FORMATS.md#work-to-session-associations) for separate parent/resume links, supported multi-work spans and frozen source bounds. A controller is not necessarily a native parent; every requested child and resumed execution needs its own observed association. If recording fails, report the gap; do not claim crash recovery from prompt delivery alone. Prove runtime readiness and engagement from observable state; a successful prompt send is not proof of work. 3. Keep concurrent writers disjoint and isolated. Runtime coordination is not a claim, lease, queue, or completion state in AgentOps. 4. Record provider state, transcript references, artifacts, and terminal status. 5. Return runtime evidence to the caller. Do not convert provider retries, reconnects, idle states, or failures into Plan, Candidate, or verdict state. 6. A validator session may supply judgment to Validate, but only Validate writes `verdict.v2`. The adapter cannot select AgentOps semantics, issue a binding verdict, or turn factory completion into delivery or validation proof. NTM, Codex exec, native processes, Agent Mail, and Gas City are replaceable adapters. Use them only when the caller selected that execution shape. A single local agent pays no factory coordination cost. Model identity, when recorded, is a declared runtime fact like context identity — see [references/model-dispatch.md](references/model-dispatch.md). [Native judgment receipts](references/judgment-receipts.md) defines exact private receipt references and the independent profile/subject/acceptance checks for caller-required model diversity. Missing native identity never satisfies a leg.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.