Parent
#41
What to build
Migrate the Scout editorial judge off the anthropic Python SDK and onto the Claude Code CLI in headless mode, authenticated with a Claude subscription OAuth token instead of an API key. End-to-end: a workflow_dispatch Scout run reads its feeds, judges new entries via claude -p, and opens the same bot/scout-* Candidate PR as before — now billed to the subscription, not the API.
The judge runner becomes a deep module with a stable interface (judge_entry(system, title, url, summary) -> Judgment) that hides the headless invocation and JSON validation; the existing judge_candidate input schema is reused as the --json-schema. Per ADR-0001, the workflow installs the Claude Code CLI and swaps ANTHROPIC_API_KEY for CLAUDE_CODE_OAUTH_TOKEN. verify_links is left untouched (no LLM calls).
Acceptance criteria
Blocked by
None - can start immediately (the code is AFK; the slice completes only once the maintainer provisions the secret — HITL).
Parent
#41
What to build
Migrate the Scout editorial judge off the
anthropicPython SDK and onto the Claude Code CLI in headless mode, authenticated with a Claude subscription OAuth token instead of an API key. End-to-end: aworkflow_dispatchScout run reads its feeds, judges new entries viaclaude -p, and opens the samebot/scout-*Candidate PR as before — now billed to the subscription, not the API.The judge runner becomes a deep module with a stable interface (
judge_entry(system, title, url, summary) -> Judgment) that hides the headless invocation and JSON validation; the existingjudge_candidateinput schema is reused as the--json-schema. Per ADR-0001, the workflow installs the Claude Code CLI and swapsANTHROPIC_API_KEYforCLAUDE_CODE_OAUTH_TOKEN.verify_linksis left untouched (no LLM calls).Acceptance criteria
judge_entryinvokesclaude -p --model <id> --json-schema <schema>and returns a validated judgment; theanthropicSDK dependency is no longer used by Scoutscout-resources.ymlinstalls the Claude Code CLI and readsCLAUDE_CODE_OAUTH_TOKEN; noANTHROPIC_API_KEYreference remains in the Scout workflowverify-links.ymlis unchangedCLAUDE_CODE_OAUTH_TOKENrepo secret exists (viaclaude setup-token) and a manualworkflow_dispatchrun produces a Candidate PR identical in shape to the prior pipelineBlocked by
None - can start immediately (the code is AFK; the slice completes only once the maintainer provisions the secret — HITL).