AGENTS.md · git:20260815.844bc33 · 2026-08-15 · sha256 12ef3a390f06a321
AGENTS.md git:20260815.844bc33A
Immutable. This exact content is served forever at /api/v1/blob/12ef3a390f06a321.
# a2ui-catalogue — Agent Entry Point
**This file exists so that ANY coding agent (Gemini, Antigravity, Codex, Claude, …)
finds the working rules.** The canonical rules live in `CLAUDE.md` — read it in full
before doing anything. `project.yaml` is the inventory (deployments, script IDs,
policy, declared processes); never carry identifiers from conversation memory when
the manifest declares them.
## Non-negotiables (summary — CLAUDE.md is authoritative)
1. **Every operation goes through a declared process.**
`python3 ops/ops.py list` → `python3 ops/ops.py run <process>`.
If the operation you need is not declared, declare it in `project.yaml`
`processes:` first, then run it. **Raw `clasp push` / `clasp deploy` or ad-hoc
command chains are forbidden** — improvisation is the failure mode this system
exists to prevent. "ops.py run X *or* standard clasp push" is not a plan; it is
the bug.
2. **Nothing new is published** to a2uicatalog.ai or any public surface without
explicit per-artifact opt-in from Curtis (`policy.published` in `project.yaml`,
enforced by tests). Never `git add -A`. Commits go through
`python3 ops/ops.py commit "<msg>"`; push through `ops.py run repo-publish`.
3. **Renderer source is ground truth.** When `atoms/schema.yaml` prose and a
renderer `.gs` file disagree about a field shape, the renderer wins
(known case: `spring_nodes` edges are `{from, to}` node IDs, not the
documented `{a, b}` index pairs).
4. **Verify before shipping:** `python3 -m pytest tests/ -q`. Check
`ops/log.jsonl` before re-diagnosing anything — a previous run may have
already recorded it.
5. Encoded `?p=` URLs are emitted by `scripts/make_url.py` only — never
hand-typed or copied between surfaces.
6. **Mutating git commands must name the repo explicitly:**
`git -C <path> add|commit|push`. Ambient cwd and a leading `cd` do not
count — the shell cwd resets between calls. Commits and pushes go through
the declared processes in rule 2, never raw git.
## This checkout is incomplete on its own
`ops/`, `thoughts/`, `a2uithoughts.md`, `improve.yaml` and `improve_probes` are
**symlinks into a sibling private repo and are not tracked here.** A standalone
clone of this repo has none of them, so every `ops.py` invocation above will
fail until they exist. Maintainers: clone the private repo as a sibling
directory and run its bootstrap.
- **CI must check out both repos and recreate the links** before running
`ops.py` — see `.github/workflows/deploy-full-catalog.yml`.
- If something reports "file not found" for a path that plainly exists on your
machine, run `git ls-files <path>` before theorising — an untracked symlink
is the usual answer.
Private-side operations (clasp identities, deploy mechanics, GAS gotchas) are
documented in the **a2ui-private** repo's `AGENTS.md` — read that too before any
deployment work.
If you take actions in this repo, log what you did and why in your own scratch
file under `/home/curtis/a2ui-private/` (agent logs never go in this public tree).