

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1# agents — the agent-profile registry (`caveman wrap` data)23Profiles for every AI coding agent `caveman wrap` can route through the byte-safe gateway. The4keystone is a **collapse toward data**, not an absolute: for5most agents, adding one is a **data change** (one JSON file here) and the CLI's injection appliers6+ the proxy's wire-protocol adapters are the only code. But routing sits on a **three-tier honesty7scale** (`injection_completeness`), because several agents genuinely need code:89- **declarative** — the profile's `injection` block alone routes it (claude's default env, gemini,10 aider, opencode). A true data-only add.11- **builder-assisted** — the profile is the base, but the CLI augments it in code: an12 `overlayBuilders.<id>` config-overlay builder (openclaw), or an auth/bedrock short-circuit13 (`applyClaudeBedrockWrap` for claude, `applyHermesAuthEnv` for hermes).14- **code-only** — the declared `injection` is inert and all routing is code (codex ships15 `injection.env: {}`; `buildCodexEphemeralWrapEnv` + `codexCavemanProviderToml` do the real work).1617`compile.mjs` DERIVES the true tier from the CLI (`overlayBuilders.<id>` + named wrap builders18scanned from `index.ts`) plus the inert-injection rule, and **fails closed** when a profile's19declared `injection_completeness` claims more data-purity than reality (e.g. `declarative` for an20agent that needs a builder). Separately, `buildWrapEnv` first sprays a generic base-URL union21(`WRAP_BASE_URL_ENV_VARS` in `../cli/src/index.ts`) as a fail-open fallback that any SDK subprocess22children inherit; each agent reads only its own subset, and the profile's injection then layers on23top.2425## Layout26- `profiles/*.json` — one profile per agent (`claude`, `codex`, `gemini`, `aider`, `opencode`, `hermes`, `openclaw`).27- `profiles/schema.json` — the profile contract (JSON Schema, draft-07).28- `reserved-verbs.json` — command tokens no profile id or binary name may shadow;29 compiled into the CLI and tested against dispatcher reality.30- `compile.mjs` — zero-dep compiler: validates every profile (fail-closed) and emits31 `agents.json` + the CLI's embedded `../cli/src/{agents,reserved-verbs}.generated.ts`. It also32 fails closed on four honesty invariants: any model id pinned in the injection config must be33 **priced by the provider catalog** (`../shared/provider-catalog/catalog/current.yaml`); a declared34 `injection_completeness` must match the CLI's real routing; the `agent-conformance.yml` CI pins35 are **derived from `tested_agent_version`** and must equal it; and a declared `last_verified_at`36 must be inside the staleness budget.37- `agents.json` — generated published registry (do not hand-edit).38- `probe-installed.mjs` — isolated `--version` + `--help` gate for installed profile binaries;39 `--require <id>` and `--all` fail on missing, broken, or version-drifted binaries. `--allow-newer`40 reclassifies a working binary **newer** than the pin as `drift` (not `broken`) — used by the41 non-blocking @latest lane.42- `drift-report.mjs` — turns a `probe --allow-newer --json` result into one GitHub issue per43 drifted agent (idempotent; opens or updates). Runs only in the non-blocking CI lane.44- `.github/workflows/agent-conformance.yml` — daily/manual real-engine compression contract for45 all profiles plus one clean **pinned** upstream-binary probe per profile, and a separate46 **non-blocking `@latest` drift-report** lane that files drift issues.4748`tested_agent_version` is evidence, not compatibility theater. Doctor compares49installed version, downgrades unknown/newer/older hosts to safe inactive subsets,50and reports binary-present-but-unlaunchable separately. Claude 2.1.226 is current51locally grounded pin; other pins remain unchanged until equivalent proof exists.5253## How a profile points an agent at the gateway54`injection.method` is one of:55- `env` — set literal env vars; values may use `{{cave_base_url}}` / `{{cave_api_key}}` /56 `{{cave_proxy_url}}` / `{{cave_org_id}}` templates. A var that renders empty is **omitted**57 (so we never set an empty auth token). Base-URL/API-base keys may append a compiler-validated58 safe path such as `/openai/v1`; secret keys cannot.59- `config-env-content` — render a mode-selected inline JSON config (`config_content.local` for60 BYOK `caveman start`; `config_content.managed` when `CAVE_GATEWAY_URL` is off-loopback) and set61 it as one env var. This is how **opencode** is wrapped (`OPENCODE_CONFIG_CONTENT`) without ever62 touching the user's `opencode.json`. An agent's own `{env:VAR}` tokens are left untouched.63- `config-file` — merge a mode-selected config overlay into a temp copy of the agent's own64 config file on disk (how **openclaw** is wrapped, without mutating the user's real config).6566## How a profile auto-shrinks command output (`command_hook`, optional)67`command_hook` declares how `caveman wrap`/`caveman hooks` route the agent's noisy68shell-command output through `caveman shrink` (RTK parity, byte-exact recoverable).69Three honest tiers — never claim a rewrite an agent can't do:70- `claude-pretooluse` / `codex-pretooluse` / `gemini-beforetool` / `opencode-plugin` / `hermes-plugin` /71 `openclaw-plugin` — **hard rewrite**: a `Bash` PreToolUse hook (Claude), a `BeforeTool`72 hook on `run_shell_command` (Gemini), or a `tool.execute.before`-style plugin73 (opencode/hermes/openclaw) deterministically reroutes the command before it runs.74 Claude + Gemini share one `installSettingsHook` (same settings.json shape, different75 event/matcher); every hard-rewrite method routes the command through `caveman shrink-hook`.76- `instruction-note` (+ `file`) — **soft model-nudge**: append a delimited "prefer77 `caveman shrink`" note to a file the agent auto-reads. Best-effort, idempotent,78 install→uninstall is a byte-exact round-trip. Retained only for hosts without a79 current hard hook surface. Codex now uses its native `PreToolUse` hook in80 `~/.codex/hooks.json` and supports `updatedInput` when allowing the tool.81- **absent** — **manual-only**: no installable surface (e.g. Aider); `hooks` just prints82 the `caveman shrink -- <cmd>` guidance.8384## How a profile declares a skill surface (`skills`, optional)85`skills` declares where the agent keeps on-disk skills so `caveman convert` can86pixel-compress their bodies (SKILL.md frontmatter stays text — it drives skill87discovery; only the body becomes PNG pages). `format` is a closed enum (only88`skill-md`: `<root>/<name>/SKILL.md` with YAML frontmatter — the Claude Code /89Codex convention); `user_dirs` are `~`-resolved roots, `project_dirs` are90repo-relative and scanned only with `--project`. **Absent = no verified skill91convention** — `convert` skips the agent with an honest note, never guesses a path.92- **Source format is JSON, not YAML** — deliberately, to keep the CLI **zero-runtime-dep** (the93 compiler needs no parser; the CLI imports the generated TS, never reads a file at runtime).94- **fail-closed**: unknown fields/enums/templates, command collisions, unsafe env95 keys/values, and paths outside the profile's own hidden home directory fail96 compile — never a guessed protocol, redirect, loader override, or arbitrary97 file read/write.98- The compiler runs in the CLI build **and** test (`node ../agents/compile.mjs`); the generated99 `agents.generated.ts` is committed and must stay in sync.100- `wire_protocol` must be one the proxy speaks natively (anthropic-messages · openai-chat ·101 openai-responses · gemini-generatecontent) — we don't translate protocols in the wrap path.102103See ../../CLAUDE.md (root) · ../cli/CLAUDE.md104
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| JuliusBrussee/cavemanCLAUDE.md · 98k | CLAUDE.md | archgitdo-notagent-behaviour+1 | 73/100 | today | |
| JuliusBrussee/cavemanagents/AGENTS.md · 98k | AGENTS.md | agent-behaviour | 16/100 | today | |
| JuliusBrussee/cavemanbrowse/CLAUDE.md · 98k | CLAUDE.md | testarch | 59/100 | today | |
| JuliusBrussee/cavemancacheengine/CLAUDE.md · 98k | CLAUDE.md | testarch | 73/100 | today | |
| JuliusBrussee/cavemanengine/AGENTS.md · 98k | AGENTS.md | stylearch | 66/100 | today | |
| JuliusBrussee/cavemanengine/CLAUDE.md · 98k | CLAUDE.md | stylearch | 58/100 | today | |
| JuliusBrussee/cavemanextension/AGENTS.md · 98k | AGENTS.md | buildteststylearch+1 | 73/100 | today | |
| JuliusBrussee/cavemanextension/CLAUDE.md · 98k | CLAUDE.md | buildteststylearch+1 | 73/100 | today | |
| JuliusBrussee/cavemanintegrations/CLAUDE.md · 98k | CLAUDE.md | stylearch | 55/100 | today | |
| JuliusBrussee/cavemanmcp/AGENTS.md · 98k | AGENTS.md | stylearch | 79/100 | today | |
| JuliusBrussee/cavemanmcp/CLAUDE.md · 98k | CLAUDE.md | stylearch | 79/100 | today | |
| JuliusBrussee/cavemanmem/AGENTS.md · 98k | AGENTS.md | stylearchperformanceagent-behaviour | 67/100 | today | |
| JuliusBrussee/cavemanmem/CLAUDE.md · 98k | CLAUDE.md | stylearchperformanceagent-behaviour | 71/100 | today | |
| JuliusBrussee/cavemanpackages/agent/CLAUDE.md · 98k | CLAUDE.md | archtesting-strategysecuritydependencies+2 | 34/100 | today | |
| JuliusBrussee/cavemanpackages/cli/AGENTS.md · 98k | AGENTS.md | stylearchdependenciesmonorepo | 71/100 | today | |
| JuliusBrussee/cavemanpackages/cli/CLAUDE.md · 98k | CLAUDE.md | stylearchdependenciesmonorepo | 71/100 | today | |
| JuliusBrussee/cavemanpackages/create-caveman-agent/CLAUDE.md · 98k | CLAUDE.md | archdependenciesmonorepoagent-behaviour | 36/100 | today | |
| JuliusBrussee/cavemanpackages/graders/AGENTS.md · 98k | AGENTS.md | teststylearchtypes+3 | 75/100 | today | |
| JuliusBrussee/cavemanpackages/graders/CLAUDE.md · 98k | CLAUDE.md | teststylearchtypes+3 | 75/100 | today | |
| JuliusBrussee/cavemanpackages/kit/AGENTS.md · 98k | AGENTS.md | stylearchdependenciesmonorepo | 63/100 | today |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| stacklok/toolhiveCLAUDE.md · 2.0k | CLAUDE.md | buildteststylearch+4 | 100/100 | 14 days ago | |
| Adit-Jain-srm/NightmareNetCLAUDE.md · 46 | CLAUDE.md | buildtestlint-formatstyle+6 | 100/100 | 14 days ago | |
| microsoft/playwrightCLAUDE.md · 95k | CLAUDE.md | buildtestlint-formatstyle+7 | 100/100 | 7 days ago | |
| nimbalyst/nimbalystpackages/android/CLAUDE.md · 1.5k | CLAUDE.md | setupbuildstylearch+2 | 100/100 | 14 days ago | |
| dotCMS/corecore-web/CLAUDE.md · 949 | CLAUDE.md | teststylearchtesting-strategy+3 | 100/100 | 14 days ago | |
| tphakala/birdnet-goCLAUDE.md · 1.6k | CLAUDE.md | buildtestlint-formatstyle+8 | 100/100 | today | |
| tyrchen/geektime-bootcamp-aiw7/genslides/backend/CLAUDE.md · 230 | CLAUDE.md | testlint-formatstylearch+6 | 100/100 | 9 days ago | |
| bagisto/bagistoCLAUDE.md · 28k | CLAUDE.md | setupbuildteststyle+5 | 100/100 | 7 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/juliusbrussee-caveman-agents-claude)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.