Security

.agent-bus is local plaintext working data, including the append-only Event Journal under .agent-bus/events/. It is not encrypted and must not contain tokens, cookies, passwords, private keys, or unnecessary production data.

Execution Session metadata is bounded and excludes environment variables. Session endpoints are derived from the validated repository root and Session ID; input is structured text, not a shell string; and the Session Host can interrupt or terminate only the process it created. The Runtime does not attach to arbitrary PIDs or automate the Codex App Terminal UI. The preferred node-pty backend may use a bounded owned-stdio compatibility backend when a direct Plugin checkout has no installed package dependencies.

Task Graph v1 validation is read-only and precedes Git discovery, Bus handoff, Adapter resolution, worktree or Session creation, and child-process spawn. Invalid DAGs return the bounded TASK_GRAPH_INVALID Runtime error without initializing .agent-bus or persisting graph state. The separate graph-create operation persists only an already validated graph record and its append-only lifecycle event; it does not launch an Adapter, Session, or Implementer process. An optional Intent Map v1 companion is size-bounded and normalized before that boundary. Unknown, missing, or duplicate subtask coverage; duplicate patterns; absolute, drive-relative, escaping, or control-bearing paths; unsupported policies; and contradictory durable map facts fail closed. Write-intent patterns are structured data and are never evaluated through a shell. Graph planning reports deterministic dependency, capacity, and exact configured Agent/Adapter/executable facts without creating a worktree, Bus message, Session, lifecycle event, or child process. When Intent Map coverage exists, literal prefix mismatches prove separation and all unresolved glob relationships are treated conservatively. The later READY item is deferred with a bounded WRITE_INTENT_CONFLICT fact. Dispatch repeats the same compatibility check against RUNNING items under the graph lock before any worktree, Session, or process launch. No dependency edge is added, patterns are never executed through a shell, and declaration-based scheduling is not diff audit. The graph-dispatch operation captures one exact base commit and uses only a Runtime-owned, repository-contained, non-symlinked worktree and branch for the selected READY subtask. Its persistent Session is rooted at that worktree; exact Adapter command precedence, bounded I/O, and non-zero exit semantics remain in force. Launch or completion failures do not trigger automatic retry/fallback or mutate unrelated subtasks, and dispatch never changes the user’s checkout. Parallel graph execution claims READY subtasks under the graph lock, atomically enforces the persisted concurrency limit, and gives every selected subtask a distinct worktree, branch/ref, message, and Session identity rooted at one exact graph base commit. Failures remain isolated and never trigger fallback or automatic retry. Bounded graph advance requires an explicit 1–32 wave limit, reads a fresh Preflight before each wave, and stops on conflicts, non-success, recovery state, integration failure, or requested changes. It never invokes recovery, retries, changes dependencies, integrates, reviews, or authorizes release. Graph recovery is facts-first: status and inspect expose durable Session/worktree/commit/evidence classifications, and recovery only promotes a verified IMPLEMENTATION_DONE commit or records an interrupted FAILED state. Explicit resume reuses a verified healthy Runtime-owned Session/worktree and otherwise returns READY for a separate dispatch; it never loops or infers success from filenames or prose. Explicit graph stop/cleanup close only matching Runtime-owned Sessions and remove only the exact Runtime-owned worktree after a bounded timeout. Ownership mismatches, symlinks, path escapes, and cleanup failures are preserved as durable bounded errors; branches, refs, commits, evidence, and the user’s worktree remain intact. Graph integration is a separate, explicit boundary. It runs only after every required subtask has verified completion evidence, checks the exact Runtime source refs and captured base commit, and applies commits in deterministic order inside a distinct Runtime-owned aggregate worktree. It never changes the current checkout or source worktrees. A cherry-pick conflict remains in place with bounded source, applied-ref, Git-status, and conflict facts for inspection; no automatic resolution, reset, retry, merge, push, tag, publish, deploy, or release occurs. Aggregate review rechecks those facts before recording REVIEW_APPROVED or CHANGES_REQUESTED, and cleanup retains the aggregate branch, commits, conflict facts, and evidence.

Local Git exclusion prevents ordinary commits but does not block administrators, same-user processes, backups, cloud sync, or malware. Inspect and redact bus data before sharing diagnostics. Use the explicit clean --confirm DELETE_AGENT_BUS operation after audit retention is no longer needed.

The installer refuses unknown directories, symlinks, junctions, path escapes, modified installs, and extra files by default. Review the full security policy, including private vulnerability reporting.