WARNING: this code is mainly generated by Codex and should not be used in production

# codex-debug-client

A tiny interactive client for `codex app-server` (protocol v2 only). It prints
all JSON-RPC lines from the server and lets you send new turns as you type.

## Usage

Start the app-server client (it will spawn `codex app-server` itself):

```
cargo run -p codex-debug-client -- \
  --codex-bin codex \
  --approval-policy on-request \
  --output-file /tmp/app-server-server-json.jsonl
```

You can resume a specific thread:

```
cargo run -p codex-debug-client -- --thread-id thr_123
```

### CLI flags

- `--codex-bin <path>`: path to the `codex` binary (default: `codex`).
- `-c, --config key=value`: pass through `--config` overrides to `codex`.
- `--thread-id <id>`: resume a thread instead of starting a new one.
- `--approval-policy <policy>`: `untrusted`, `on-failure` (deprecated), `on-request`, `never`.
- `--auto-approve`: auto-approve command/file-change approvals (default: decline).
- `--final-only`: only show completed assistant messages and tool items.
- `--output-file <path>`: write raw server JSONL to this file instead of stdout.
- `--model <name>`: optional model override for thread start/resume.
- `--model-provider <name>`: optional provider override.
- `--cwd <path>`: optional working directory override.

## Interactive commands

Type a line to send it as a new turn. Commands are prefixed with `:`:

- `:help` show help
- `:new` start a new thread
- `:resume <thread-id>` resume a thread
- `:use <thread-id>` switch active thread without resuming
- `:refresh-thread` list available threads
- `:quit` exit

The prompt shows the active thread id. Client messages (help, errors, approvals)
print to stderr; raw server JSON prints to stdout so you can pipe/record it
unless `--final-only` is set. Pass `--output-file <path>` to record raw server
JSONL to a file instead of stdout.

## Notes

- The client performs the required initialize/initialized handshake.
- It prints every server notification and response line as it arrives.
- Approvals for `item/commandExecution/requestApproval` and
  `item/fileChange/requestApproval` are auto-responded to with decline unless
  `--auto-approve` is set.
