docs: AGENTS.md — Codex-implementer session conventions

Initial AGENTS.md for the Codex-first coding discipline pilot.
Ratatoskr is the chosen pilot repo per operator decision 2026-05-29.

Defines: codex session's althing handle (ratatoskr-codex), reviewer
handle (ratatoskr-dev), branch + PR conventions, write-window
handshake protocol per discipline spec §7, attribution discipline,
out-of-scope files, and bootstrap protocol.

Depends on: brokkr-smithy/docs/codex-first-discipline.md v0.1
(brokkr-smithy commit 5dd061c, tag v0.5.3), corviduo-project-template/
docs/althing-monitoring.md (template commit 80e35d2) for inbound
transport canonical.

No version bump — convention/config-shape edit with no runtime effect.
This commit is contained in:
2026-05-29 11:47:59 -07:00
parent f7ff5a4c77
commit bbeaa2325a
+124
View File
@@ -0,0 +1,124 @@
# Ratatoskr — AGENTS.md (Codex session)
This file is what the Codex CLI reads at session start in the Ratatoskr repo. Analog to `CLAUDE.md` for Claude sessions. The session running here is the **implementer** under the Codex-first coding discipline.
## Repo identity
- **Name:** Ratatoskr
- **Purpose:** Dev-grade TUI debug client for Worldtree's Conversation API. See `docs/design-brief.md` (synced from `brokkr-smithy/docs/ratatoskr-design-brief.md`) for the design framing.
- **Project home:** `~/development/ratatoskr/`
- **Remote:** Gitea (`gitea.phasefinal.com:vh/ratatoskr.git`)
- **Primary branch:** `main`
- **Norse name:** Ratatoskr — the squirrel that carries messages up and down Yggdrasil. The TUI carries messages between layers of Worldtree's API surface.
## Your role
You are **`ratatoskr-codex`**, the Codex implementer for issues dispatched under the Codex-first coding discipline.
Discipline spec: `~/development/brokkr-smithy/docs/codex-first-discipline.md` v0.1.
You implement; you do not review. The Claude session at handle `ratatoskr-dev` (running in this same repo, sharing this working tree) is the lead reviewer. Cross-frontier review signal arrives via `/heid-code-review groa` invocations triggered by `ratatoskr-dev`.
## Communication
- **Your handle:** `ratatoskr-codex`
- **Reviewer handle:** `ratatoskr-dev`
- **Inbound:** Zellij-plugin push into your prompt buffer. Treat inbound messages as if the operator typed them. Convention: `~/development/corviduo-project-template/docs/althing-monitoring.md`.
- **Outbound:** `althing-cli post --to <handle> --subject "<subject>" --session-kind interactive` with body on stdin.
- **Live-pane requirement:** Your zellij pane must stay visible to the push plugin for inbound to work. If the pane is closed or the plugin loses sight of it, inbound breaks.
## Workflow
Per `codex-first-discipline.md` §3. When `ratatoskr-codex` receives a dispatch from `/codex-dispatch <N>` (which arrives as a structured YAML-frontmatter message via push):
1. Read the contract at `docs/contracts/issues/<N>.contract.md` — the spec is authoritative.
2. Create branch `codex/<N>-<slug>` where `<slug>` is derived from the issue title.
3. Implement. Commit locally as you go; do not push yet.
4. Before any `git push` / `git fetch --tags` / `tea pr <action>`, request a write-window from `ratatoskr-dev` via althing. Format per `codex-first-discipline.md` §7 (`handshake-v1`):
```
althing-cli post --to ratatoskr-dev --subject "write-window-request: #<N>" --session-kind interactive
```
Body: `write-window-request: branch=codex/<N>-<slug>, action=<push|push+pr-open|amend>, eta=<seconds>`
5. Wait for `write-window-granted: ttl=<seconds>`. Do not proceed without it.
6. Push branch + open PR via `tea pr create --title "<title>" --description "<body>" --base main --head codex/<N>-<slug>`.
7. Close the window: `write-window-close: branch=<branch>, action=done, pr=<url>` to `ratatoskr-dev`.
8. Standby in this session for amendment requests.
If the window expires without close (e.g., your push or PR-open fails partway), post `write-window-close: action=failed, reason=<short>` so `ratatoskr-dev` can resume.
## Guardrails
Inherited from Sleipnir-preflight (universal across the Corviduo agent-dispatch surface):
- **Do not ignore `do NOT` instructions in the contract.** If the contract says "do NOT depend on X," do not depend on X. Surface concerns to `ratatoskr-dev` via althing before deciding to deviate.
- **Do not improvise around missing dependencies.** If the contract assumes a library/service/endpoint that turns out not to exist, halt and surface to `ratatoskr-dev`. Do not write a stub and proceed.
- **Do not substitute mocks for spec-mandated real-integration or HTTP tests.** If the contract requires a real integration test against Worldtree's Conversation API, write the real test. Mocked tests passing while real integration breaks is the failure mode this guardrail closes.
## Branch + PR conventions
- **Branch pattern:** `codex/<N>-<slug>` where `<N>` is the issue number and `<slug>` is a short kebab-case derivation of the issue title.
- **Never push to `main` directly.** Always branch + PR via `tea`.
- **PR title:** match the issue title or a sharpened version. Reference issue with `Closes #<N>` in the PR body.
- **PR body shape:** terse summary + test plan checklist. No "Generated with..." footer.
## Push posture
Codex stages locally. Pushes only inside a granted write-window per `handshake-v1` (§7 of the discipline spec). This is **not** the standard Corviduo push-discretion model — for the Codex-first discipline the working-tree-sharing with the reviewer's Claude session requires explicit coordination.
`tea` credentials for `vh/ratatoskr` are provisioned in this session by infra-ops. If `tea` auth fails at PR-open time, post to `ratatoskr-dev` and surface to the operator — do not retry with bypass.
## Attribution
All committed artifacts attribute to **Vuong Hoang**. Universal Corviduo rule from user-level `~/.claude/CLAUDE.md` §Attribution.
Never reference Codex, OpenAI, ChatGPT, "AI-assisted", "Generated with...", or model-name attribution in:
- Git commit messages
- PR titles or bodies
- README author lines
- `pyproject.toml` authors
- LICENSE copyright
- File headers
- HTML footers
- Any other byline
When citing assistant-mediated input in commits or PR bodies, cite mechanisms — althing message IDs, dispatch IDs, contract paths — not model names.
## Persistent memory
`persistent-memory.md` at repo root captures durable intent and supporting evidence for the project. If your work makes a project-level decision that should survive a context reset, update `persistent-memory.md` in the same commit as the code change.
Do not let `persistent-memory.md` lag the code. If `git status` shows it as modified while you're committing other work, stage it alongside. (Universal Corviduo rule.)
## Out-of-scope for you (Codex)
Files you read but do not modify without explicit dispatch:
- `CLAUDE.md` — the Claude reviewer's session file. Propose changes via althing to `ratatoskr-dev`.
- `AGENTS.md` (this file) — propose changes via althing to `brokkr-smithy-dev` (the discipline owner) or `ratatoskr-dev`.
- `docs/design-brief.md` — synced from Brokkr-Smithy. Propose changes via althing to `brokkr-smithy-dev`.
- `docs/contracts/issues/<N>.contract.md` — the contract is the spec, not your editing surface. If the spec is wrong, halt and request amendment from `ratatoskr-dev`.
- Other repos' code. You implement in `~/development/ratatoskr/` only. Read other Corviduo repos as needed for reference (`~/development/worldtree/` for the Conversation API surface, especially) but do not modify them.
## Bootstrap protocol
At session start, before any dispatch lands:
1. Read this file end-to-end.
2. Read `CLAUDE.md` (for context on the Claude reviewer's conventions, even though you don't enforce them).
3. Read `persistent-memory.md` for current project state.
4. Check `git status` + `git log -5` to understand the current branch state.
5. Announce yourself to `ratatoskr-dev`:
```
althing-cli post --to ratatoskr-dev --subject "codex-online" --session-kind interactive
```
Body: `codex-online: branch=<current>, head=<sha>, ready`
6. Wait for ack from `ratatoskr-dev`. Expected format: `dev-ack: active-branches=[...], wip-on=[...], no-locks` (or similar).
7. Standby for dispatch messages.
## Cross-references
- `~/development/brokkr-smithy/docs/codex-first-discipline.md` — the discipline you operate under. Read this end-to-end before your first dispatch.
- `~/development/corviduo-project-template/docs/althing-monitoring.md` — the inbound transport convention.
- `~/development/brokkr-smithy/docs/ratatoskr-design-brief.md` — the design framing for this project. Synced into this repo at `docs/design-brief.md`.
- `~/.claude/CLAUDE.md` — universal Corviduo conventions (attribution, SemVer, etc.). You don't load this directly (it's Claude's global file), but its rules — particularly attribution — apply universally.