# Step 2 — First session (Codex)

This record holds only what differs from [Step 2 of Start here](#start-here) when the harness is Codex. Everything not named here is the same.

**What you will see.** There is no `ucc-<profile>` launcher and no `/login`: Codex is signed in through its own ChatGPT sign-in, and the seat starts inside a herdr pane with `herdr agent start --kind codex`. Before the first prompt Codex may show one or both trust dialogs — *Hooks need review* (once per host) and *Do you trust the contents of this directory?* (once per directory) — while herdr already reports the seat ready. There is no `joined … as agent …` banner you can read on screen: the daemon's context lands as a hidden developer message the model will not quote, so the proof of a joined seat is read from outside the pane. Every handbook prompt ends with the web address it lives at, which the seat re-reads; that needs `[sandbox_workspace_write] network_access = true` in `~/.codex/config.toml` (the Codex chapter above explains the key).

**Do.**

1. Confirm the three pieces once: `readlink ~/.codex/skills/ucc` prints `$UCC_HOME/shared/skills`; `grep -c '"_ccc"' ~/.codex/hooks.json` prints `3`; `grep -n 'network_access = true' ~/.codex/config.toml` prints one line. Missing pieces are the chapter's table.
2. From a herdr pane, in the directory you will work in:

   ```bash
   herdr pane split --current --direction right --cwd "$PWD" --no-focus \
     --env HERDR_AGENT= --env UCC_PROFILE= --env CLAUDE_CONFIG_DIR= --env CCC_ROLE= --env CCC_CARD_SEED=
   herdr agent start first --kind codex --pane <pane id from the split>
   herdr agent read first --source visible
   ```

   If the screen shows *Hooks need review*, answer option 2: `herdr agent send-keys first down enter`. If it shows *Do you trust the contents of this directory?*, answer option 1: `herdr agent send-keys first enter`.
3. Send the first turn as one sentence — type it in the pane, or from another terminal:

   ```bash
   herdr agent prompt first "Read https://page.sui.pics/d/handbook-c3002f99fc0fee31/release?raw=1 and print what it says." --wait --timeout 180000
   ```

   A pass prints a short JSON line with `"version"` and `"label"` fields. `curl: (6) Could not resolve host: page.sui.pics` means the network key is not set — set it and start a new seat; the running one keeps its old sandbox.
4. Ask the seat to read a record your own root holds — its card, which the daemon wrote at the first turn: `Run mrd read 'sessions:agents/<short-id>/<short-id>.md' and print the toc.` — where `<short-id>` is the last 8 hex of the seat's Codex session id, the id `herdr agent get first` prints under `agent_session` (the `verify:` line below reads the same field). It answers with `path:`, `file_rev:`, `words:` and the `toc[…]` rows; `--section 1` serves a section's body. There is no write: the seat has no `put` tool, and the handbook's prompts are written for a Claude Code seat that has one. On Codex, treat every prompt record as reading material and carry out its shell commands yourself.

What this agent cannot do, in one line each: write a record (no memo, card, roster or board move); run any `ccc-agent` or `session killme`/`restart`/`forkme`/`schedule` verb; reach the fleet's AskUserQuestion-to-Telegram path — it can ask you only through Codex's own `request_user_input`, and it can spawn only Codex's own sub-agents, never fleet seats. Findings go into a report file, which is its proof.

`verify:` after the first turn, outside the pane: `ccc-agent list --table | grep -c "$(herdr agent get first | python3 -c 'import json,sys;print(json.load(sys.stdin)["result"]["agent"]["agent_session"]["value"])')"` — pass prints `1`: the seat's row, with the full Codex session id under `AGENT_ID`, `daemon` under `SOURCE` and `live` under `LIVENESS` (its short id on the card is the **last** 8 hex of that id). Then `herdr pane close <pane id>`.

`skill:` `ccc-native` — the seat's contract, with `references/codex.md` for the setup and the trust dialogs.
