{
  "markdown": "# external-reviewer\n\nA CLI that hands a repository to a second model for review. The model reads through four\nread-only tools — `list`, `read_file`, `search`, `git_read` — against an explicitly\nallowed slice of the repository, and returns markdown on stdout: leads for a reviewing\nskill to verify against the files, not a verdict.\n\n## Install\n\nGo 1.26 or newer, and `git` on `PATH` for the `git_read` tool:\n\n```\ngo install github.com/julienlegoux/external-reviewer@v0.1.0-beta.1\n```\n\n`@latest` resolves to the newest tag, which for now is the beta above — there is no\nstable release yet.\n\n## Quickstart\n\n**1. Give `kern-link` a credential.** This binary reads none, stores none and has no\n`login` command: provider credentials are resolved wholly by `kern-link`, from env vars\nor its store at `~/.pi/agent/auth.json`, populated by its own `pi-ai login`. Use\n`openai-codex` unless you have read the validation boundary below.\n\n**2. Assign the tiers.** One hand-written, never-committed TOML at\n`%AppData%\\external-reviewer\\config.toml` on Windows,\n`$XDG_CONFIG_HOME/external-reviewer/config.toml` (or `~/.config/…`) elsewhere;\n`EXTERNAL_REVIEWER_CONFIG` overrides the location with an absolute path.\n\n```toml\n[tiers.standard]\nprovider = \"openai-codex\"\nmodel = \"gpt-5.5\"\n```\n\n**3. Check what this machine can actually reach**, before spending anything on a run:\n\n```\nexternal-reviewer tiers\nexternal-reviewer models\n```\n\n**4. Review.** The system prompt and the task come from the caller, as a JSON request\nobject on stdin; `--allow` grants the subtrees the reviewer may read, and nothing outside\nthem is readable:\n\n```\necho '{\"system\":\"You are reviewing Go.\",\"task\":\"Find correctness bugs in the tool layer.\"}' \\\n  | external-reviewer review --allow internal/tools --allow docs/planning .\n```\n\n`external-reviewer help` prints the whole grammar. The report is on stdout; turn-by-turn\ncost and diagnostics are on stderr.\n\n## Validation boundary\n\nThe mechanism is fully generic: no provider is named anywhere in the binary except the\nfamily classifier's data table, so all ~35 providers `kern-link` reaches stay usable. But\n**v1 is validated against `openai-codex` over OAuth alone** — every other provider is\nwired and reachable, not tested. Treat that as a boundary to act on: a provider outside\nthis one is unverified, whatever the classifier allows.\n\n## What it does not do\n\n- **Read-only, enforced structurally.** The write half of the filesystem API is not in\n  the codebase, and CI rejects it if it reappears. The binary writes nothing inside the\n  repository under review and produces no output file. The one exception lives outside\n  the repository: `kern-link`'s own credential store, rewritten in `~/.pi/agent/` when a\n  stored OAuth token is expired.\n- No server, no daemon, no state between runs — one round trip per invocation.\n\n## Where the plan lives\n\n- [`docs/planning/SCOPE.md`](docs/planning/SCOPE.md) — what v1 ships.\n- [`docs/planning/SPECS.md`](docs/planning/SPECS.md) — the stack and the CLI grammar.\n- [`docs/planning/CONVENTIONS.md`](docs/planning/CONVENTIONS.md) — the repo's decided\n  standards.\n- [`docs/epics/`](docs/epics/) — where implementation currently stands.\n",
  "bytes": 3191,
  "sha": "aa4628cc5f2104e5552f86094ebdcf7d01a475852f59eb3440b8a46448e58741",
  "repo_slug": "julienlegoux/external-reviewer",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_julienlegoux_external_reviewer_docs_epic_3c35b47e/readme"
}