mirror of
https://github.com/hanzoai/dev.git
synced 2026-10-25 03:32:32 +00:00
hanzo-dev was a 53-day-frozen diverged fork that release.yml shipped only because codex-rs's v8 dep was believed to block musl. It doesn't — the prebuilt rusty_v8 musl artifacts already exist (rust-release.yml uses them). So collapse to the single canonical tree. - Delete hanzo-dev/ (1416 paths). codex-rs has zero deps on it; its 'unique' crates (zap/sse/backoff) aren't needed (codex-rs has its own upstream impls); zt/zap zero-trust was feature-gated OFF in release builds so it never shipped (external ~/work/hanzozt SDKs + docs unaffected; design notes kept in LLM.md). - Repoint every remaining hanzo-dev build/path ref to codex-rs: workflows (preview-build, issue-code, issue-comment), scripts (ci-tests.sh, generate-homebrew-formula.sh, pre-release.sh, build-fast.sh, hanzo.sh, hanzo-cli), code-sign actions, dependabot.yaml, merge-policy.json, docs. - Port the dev-fast cargo profile into codex-rs/Cargo.toml (build-fast.sh / pre-release.sh / release.yml preflight all use it). - Delete obsolete hanzo-dev-only tooling (check-codex-path-deps.sh, upstream-merge/diff-crates.sh) + repoint their callers. - package.json/build-fast.sh build only --bin dev (codex-rs has no dev-tui/dev-exec split bins). Verified locally: codex-rs builds `dev` (Hanzo Dev header, CODE_VERSION-aware); zero dangling source refs (only npm package names + Homebrew formula name kept).
113 lines
4.8 KiB
Markdown
113 lines
4.8 KiB
Markdown
# Non-interactive mode
|
||
|
||
Use Every Code in non-interactive mode to automate common workflows.
|
||
|
||
```shell
|
||
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:
|
||
|
||
```jsonl
|
||
{"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\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](https://platform.openai.com/docs/guides/structured-outputs).
|
||
|
||
Sample schema:
|
||
|
||
```json
|
||
{
|
||
"type": "object",
|
||
"properties": {
|
||
"project_name": { "type": "string" },
|
||
"programming_languages": { "type": "array", "items": { "type": "string" } }
|
||
},
|
||
"required": ["project_name", "programming_languages"],
|
||
"additionalProperties": false
|
||
}
|
||
```
|
||
|
||
```shell
|
||
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.
|
||
|
||
```shell
|
||
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.
|
||
|
||
```shell
|
||
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.
|
||
|
||
```shell
|
||
CODEX_API_KEY=your-api-key-here code exec "Fix merge conflict"
|
||
```
|
||
|
||
NOTE: `CODEX_API_KEY` is only supported in `code exec`.
|