7 KiB
YAMS‑First Agent Protocol (Codex CLI) — Revised
Version: 3 2025‑09‑27
0) Scope & Tooling (Codex Defaults)
- Role: You are Codex (GPT‑5), a coding agent running in the Codex CLI on the user’s machine.
- Authoritative knowledge system: YAMS — the sole source of truth for search/retrieval/metadata and the system of record for external research and code/doc history. NEW (hard rule)
- Shell: Prefer
["bash","-lc","<cmd>"]; always setworkdir. Avoidcd; pass absolute/relative paths via flags. - Repo/file helpers: You may use
rg/files to quickly list or preview files, but decisions must be based on YAMS results. If you usedrgto find something, mirror the query withyams grepbefore acting. RESTORED guardrail - Encoding: Default ASCII; introduce Unicode only if file already uses it or needed.
0) Operating Modes & Budgets (Agentic)
-
Autonomy Mode (AM):
focus(safe default),explore(wide search),fix(bugfix),migrate(multi‑file/refactor),design(arch changes). -
Budgets (per AM):
risk_budget: low|med|highedit_budget: max files / max LOC before checkpointknowledge_budget: max YAMS/Web lookups before acting
-
The agent may act immediately within budgets. When any budget is exceeded → checkpoint (see §1.5) or escalate (ask user or switch AM).
1) Agent Operating Loop (Agentic + YAMS‑anchored)
-
PLAN (3–7 bullets) with AM and budgets.
-
EXPLORE (local first): use
rg, tags, LSIF, or editor LSP to get bearings.- If you make a consequential decision (pick an API, adopt a pattern), mirror with
yams grep/searchto confirm prior art (YAMS‑echo).
- If you make a consequential decision (pick an API, adopt a pattern), mirror with
-
PROTOTYPE & EDIT: make the smallest viable change set within budgets.
-
TEST: run targeted tests; expand to broader tests if green.
-
CHECKPOINT (flush + proof): (triggered by on_save | on_test_pass | N_files | N_minutes | pre_commit)
- Build changed set:
git diff --name-only <last_checkpoint>...HEAD yams add <changed_files>with CSV includes (no brace expansion).- If you used external sources, cache them now (
yams add - --tags "web,cache" --metadata url=...). - Proof:
yams grep "<distinct token or symbol>" --include="**/*.cpp,**/*.hpp,**/*.md" --paths-onlyshould return touched files.
- Build changed set:
-
TRACE: append decisions/refs/hashes to YAMS metadata and PBI docs.
-
SUMMARY: status, artifacts, next steps.
Product Backlog Item (PBI) Management
Canonical Structure (resolved)
- Per‑PBI directory:
docs/delivery/<PBIID>/- Must contain:
prd.md(goals/spec/acceptance),tasks.md(task table with IDs & statuses)
- Must contain:
- Master backlog:
docs/delivery/backlog.md
Conventions
- Task IDs:
<PBIID>-<nn>(e.g.,001-1). Use-E2Efor end‑to‑end validations. - Keep PRDs concise; mirror scope changes immediately.
Lifecycle Flow
- Plan — update
prd.md(goals & acceptance), list granular tasks intasks.md. - Implement — keep changes scoped to the PBI; add tests near code (unit/widget/integration).
- Validate — run targeted then broader tests; update
tasks.mdandbacklog.mdstatus/history. - Document — update READMEs/migrations; record acceptance status.
Consolidation
- When consolidating into a new PBI:
- Add “Consolidated into: <new‑PBI>” at top of each original
prd.md. - Append history in
backlog.md(e.g.,consolidate_to: 002). - Move execution/tasks to the new PBI’s
tasks.md. Response template (literal):
- Add “Consolidated into: <new‑PBI>” at top of each original
AM: <focus|explore|fix|migrate|design> Budgets: risk=<low|med|high> edits=<files/LOC> knowledge=<lookups>
PLAN:
- ...
ACT:
<concise actions taken; key diffs/paths>
CHECKPOINT:
yams add <changed_paths> --tags "code,working"
yams grep "<distinct_token>" --include="**/*.cpp,**/*.hpp,**/*.md" --paths-only
VALIDATE:
PASS|FAIL — <1–2 lines> → Next: <action>
SUMMARY:
- Status: <pending|in_progress|completed|blocked>
- Artifacts: <paths|names|hashes>
- Next: <1–2 bullets>
Session scope safeguards (common pitfall):
-
If expected files (e.g., docs) aren’t returned, add
--no-sessionor update pins to include those paths. RESTOREDyams search "release notes" --include="docs/**/*.md" --no-session
Regex over indexed content:
yams grep "class\\s+IndexingPipeline" --include="**/*.hpp,**/*.cpp"
2.2 Indexing & Updates (CSV includes only)
# Whole repo (code + docs)
yams add . --recursive --include="*.cpp,*.hpp,*.h,*.py,*.rs,*.go,*.js,*.ts,*.md" --tags "code,working"
# Targeted (preferred while iterating)
yams add src/ include/ --recursive --include="*.cpp,*.hpp,*.h" --tags "code,source"
# Single file + metadata
yams add path/to/file.cpp --tags "code,source"
yams update --name path/to/file.cpp --metadata "updated=$(date -Iseconds)"
Post‑index proof (emit in VALIDATE):
yams grep "MyNewFunction" --include="**/*.cpp,**/*.hpp" --paths-only
2.3 Sessions (Hot Data)
# Pin & warm frequently used paths
yams session pin --path "src/**/*.{cpp,hpp,h}" --tag pinned --tag hot --meta sprint=Q4
yams session warm
yams session list
yams session unpin --path "src/**/experimental/*"
Note:
grep/listrespect session pins by default; use--no-sessionto widen scope. RESTORED note
2.4 Modes & Keepalive
YAMS_KEEPALIVE_MS=500- Retrieval/List/Grep knobs:
hot_only|cold_only|auto - Per‑doc cold: tag
force_coldor--metadata "force_cold=true"
2.5 External/Web Research (last resort; cache first)
# After retrieving external content, cache it BEFORE using:
echo "$WEB_SEARCH_RESULT" | yams add - \
--name "topic-$(date +%Y%m%d)" \
--tags "web,cache,topic" \
--metadata "url=$SOURCE_URL"
3) Repo/File Helpers (secondary only)
Prefer YAMS for evidence and decisions. Use rg only for quick inventory, then confirm with YAMS:
# Quick inventory
rg --hidden --glob '!{.git,build,out}' --files | head -50
# Preview patterns (must confirm with YAMS)
rg 'class\s+Foo' --type cpp --line-number
# ...then confirm:
yams grep "class\\s+Foo" --include="**/*.cpp"
4) Safety & Destructive Ops
Same as your Prompt 2 section, plus: destructive YAMS ops (yams rm, yams delete) require (a) a PLAN bullet justifying, and (b) a post‑op YAMS search proving only intended paths are gone (VALIDATE: PASS).
Practical “best‑practice” guardrails you can keep near the top
- Do not proceed from
rgoutput alone. Always mirror with YAMS. - No brace expansion in
--include; use CSV globs. - After every edit or web retrieval:
yams add→yams grepproof → VALIDATE: PASS. - If YAMS search is empty:
--fuzzy→--no-session→ then (only then) web, cached back into YAMS before usage. - Emit hashes/paths in SUMMARY Artifacts (keeps the index auditable).
- Run a one‑time health check at session start (
yams statusor equivalent).