Status: draft / proposal — captured from an initial discussion. A detailed design doc + phased implementation plan will follow.
Problem
The reviewer and synthesis engine is hardwired to anthropics/claude-code-action@v1, with a single global model input and one CLAUDE_CODE_OAUTH_TOKEN. So:
- You're locked to one vendor (Claude).
- Every reviewer uses the same model — you can't give a cheap/fast model to lightweight reviewers and a strong model to demanding ones.
Goal
Make the engine pluggable:
- Multi-vendor — reviewers/synthesis can run on agents other than Claude (e.g. OpenAI/Codex, Gemini, local models).
- Per-reviewer agent assignment — each reviewer (and synthesis) can be pointed at a different agent/model, forming a heterogeneous team.
Backward compatible: the default stays Claude; existing configs keep working unchanged.
Proposed direction (from the initial discussion)
An "agent" abstraction with two integration paths:
- Built-in adapters for common vendors (Claude, OpenAI, Gemini, …) — official, curated, easy to pick.
- Generic
command escape hatch — any action/CLI that honors the contract "read a prompt file → write a conforming findings/<reviewer>.json" can be plugged in, no vendor lock-in.
Agent assignment lives in repo config (e.g. .claude/audit.yml): a small agents registry + a per-reviewer agent: selector, with a default agent.
Key design questions (for the detailed plan)
- Uniform I/O contract — the linchpin.
claude-code-action already does prompt-in → JSON-out; the contract must be vendor-neutral (prompt file in, findings/synthesis JSON out, same schema + failed fallback).
- Auth/secrets per vendor — today one OAuth token; need per-agent secrets (e.g.
OPENAI_API_KEY, GEMINI_API_KEY) passed via secrets:.
- Config schema — the agents-registry shape;
reviewers.<name>.agent; the default; interaction with rubric_lang, model, max_turns.
- Matrix dispatch — the composite reviewer action always runs
claude-code-action; it must branch by agent type (adapter step vs generic command).
- Cost / determinism — mixing vendors changes the cost story; the deterministic skeleton (discovery / consolidate / report) is unaffected.
- Naming —
CLAUDE_CODE_OAUTH_TOKEN and the claude- branding assume Claude; revisit neutral naming while keeping back-compat.
Out of scope (for now)
- Auto-selecting the "best" agent per task.
- Streaming / interactive agents.
Next steps
- Detailed design doc (spec) — the contract + config schema.
- Phased implementation plan, behind the default-Claude back-compat.
Problem
The reviewer and synthesis engine is hardwired to
anthropics/claude-code-action@v1, with a single globalmodelinput and oneCLAUDE_CODE_OAUTH_TOKEN. So:Goal
Make the engine pluggable:
Backward compatible: the default stays Claude; existing configs keep working unchanged.
Proposed direction (from the initial discussion)
An "agent" abstraction with two integration paths:
commandescape hatch — any action/CLI that honors the contract "read a prompt file → write a conformingfindings/<reviewer>.json" can be plugged in, no vendor lock-in.Agent assignment lives in repo config (e.g.
.claude/audit.yml): a small agents registry + a per-revieweragent:selector, with a default agent.Key design questions (for the detailed plan)
claude-code-actionalready does prompt-in → JSON-out; the contract must be vendor-neutral (prompt file in, findings/synthesis JSON out, same schema +failedfallback).OPENAI_API_KEY,GEMINI_API_KEY) passed viasecrets:.reviewers.<name>.agent; the default; interaction withrubric_lang,model,max_turns.claude-code-action; it must branch by agent type (adapter step vs generic command).CLAUDE_CODE_OAUTH_TOKENand theclaude-branding assume Claude; revisit neutral naming while keeping back-compat.Out of scope (for now)
Next steps