Files
dev/docs/exec.md
T
zeekayandHanzo Dev 6cbbea2d03 merge: just-every/code v0.6.169 (e4fe007150) — keep Hanzo identity
Our history is just-every's with author emails rewritten, so the graphs are
disjoint and git finds no merge base. Supplied one by hand: d1f1f51a41, the
just-every commit matching our Oct-2025 fork point (22 files apart). 9618
upstream commits, 7004 files, +1.81M/-159k, 37 conflicts.

Resolution:
- Upstream code where our side was the Oct-2025 prototype of a feature they
  have since reimplemented 3-5x larger (agent_runs, browser_sessions,
  history_cell/{agent,browser}, the vt100 harness and its snapshots).
- Upstream's config.rs module split (builder/defaults/sources/validation)
  kept; zen5-coder and the provider-follows-model rule re-applied on top.
- Ours where the file IS the identity: README, package.json, postinstall,
  release notes pipeline, integration-zed.
- Hybrid where upstream improved a file we had branded: updates.rs (their
  release-repo migration, our hanzoai/dev), release.yml (their fail-fast npm
  auth check, our package name), chatwidget.rs (their turn handling, our
  HANZO_USER_KEY hint), exec human output (their 237 lines, our banner).

Superseded and dropped deliberately: our resume_command_name() coder-alias
hack — upstream's derive_resume_command_name() reads the invocation basename
generically, which yields "dev" for us.

LLM.md now records the real topology and the sync point; AGENTS.md and
CLAUDE.md are symlinks to it again. Single parent on purpose: adopting
jecode/main as a second parent would re-import 13,742 commits carrying the
upstream author emails a prior rewrite deliberately removed.

Version 0.2.188 -> 0.2.189.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-05 23:09:12 -07:00

4.8 KiB
Raw Blame History

Non-interactive mode

Use Every Code in non-interactive mode to automate common workflows.

code exec "count the total number of lines of code in this project"

In non-interactive mode, Code does not ask for command or edit approvals. By default it runs in read-only mode, so it cannot edit files or run commands that require network access.

Use code exec --full-auto to allow file edits. Use code exec --sandbox danger-full-access to allow edits and networked commands.

Default output mode

By default, Code streams its activity to stderr and only writes the final message from the agent to stdout. This makes it easier to pipe code exec into another tool without extra filtering.

To write the output of code exec to a file, in addition to using a shell redirect like >, there is also a dedicated flag to specify an output file: -o/--output-last-message.

JSON output mode

code exec supports a --json mode that streams events to stdout as JSON Lines (JSONL) while the agent runs.

Supported event types:

  • thread.started - when a thread is started or resumed.
  • turn.started - when a turn starts. A turn encompasses all events between the user message and the assistant response.
  • turn.completed - when a turn completes; includes token usage.
  • turn.failed - when a turn fails; includes error details.
  • item.started/item.updated/item.completed - when a thread item is added/updated/completed.

Supported item types:

  • assistant_message - assistant message.
  • reasoning - a summary of the assistant's thinking.
  • command_execution - assistant executing a command.
  • file_change - assistant making file changes.
  • mcp_tool_call - assistant calling an MCP tool.
  • web_search - assistant performing a web search.

Typically, an assistant_message is added at the end of the turn.

Sample output:

{"type":"thread.started","thread_id":"0199a213-81c0-7800-8aa1-bbab2a035a53"}
{"type":"turn.started"}
{"type":"item.completed","item":{"id":"item_0","item_type":"reasoning","text":"**Searching for README files**"}}
{"type":"item.started","item":{"id":"item_1","item_type":"command_execution","command":"bash -lc ls","aggregated_output":"","status":"in_progress"}}
{"type":"item.completed","item":{"id":"item_1","item_type":"command_execution","command":"bash -lc ls","aggregated_output":"AGENTS.md\nCHANGELOG.md\nREADME.md\ncode-rs\ncodex-rs\ncodex-cli\ndocs\nscripts\nsdk\n","exit_code":0,"status":"completed"}}
{"type":"item.completed","item":{"id":"item_2","item_type":"reasoning","text":"**Checking repository root for README**"}}
{"type":"item.completed","item":{"id":"item_3","item_type":"assistant_message","text":"Yep — there’s a `README.md` in the repository root."}}
{"type":"turn.completed","usage":{"input_tokens":24763,"cached_input_tokens":24448,"output_tokens":122}}

Structured output

By default, the agent responds with natural language. Use --output-schema to provide a JSON Schema that defines the expected JSON output.

The JSON Schema must follow the strict schema rules.

Sample schema:

{
  "type": "object",
  "properties": {
    "project_name": { "type": "string" },
    "programming_languages": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["project_name", "programming_languages"],
  "additionalProperties": false
}
code exec "Extract details of the project" --output-schema ~/schema.json
...

{"project_name":"Every Code CLI","programming_languages":["Rust","TypeScript","Shell"]}

Combine --output-schema with -o to only print the final JSON output. You can also pass a file path to -o to save the JSON output to a file.

Git repository requirement

Code requires a Git repository to avoid destructive changes. To disable this check, use code exec --skip-git-repo-check.

Resuming non-interactive sessions

Resume a previous non-interactive session with code exec resume <SESSION_ID> or code exec resume --last. This preserves conversation context so you can ask follow-up questions or give new tasks to the agent.

code exec "Review the change, look for use-after-free issues"
code exec resume --last "Fix use-after-free issues"

Only the conversation context is preserved; you must still provide flags to customize Code behavior.

code exec --model gpt-5.1-codex --json "Review the change, look for use-after-free issues"
code exec --model gpt-5.1 --json resume --last "Fix use-after-free issues"

Authentication

By default, code exec uses the same authentication method as the TUI and VSCode extension. You can override the API key by setting the CODEX_API_KEY environment variable.

CODEX_API_KEY=your-api-key-here code exec "Fix merge conflict"

NOTE: CODEX_API_KEY is only supported in code exec.