verify
GitHub提供在无 Docker 环境下验证 harness 变更的端到端方案,通过驱动真实 CLI 并拦截请求头来模拟容器内行为。
Trigger Scenarios
需要验证 CLI 与 API 交互逻辑
本地无 Docker 环境测试
Install
npx skills add anthropics/defending-code-reference-harness --skill verify -g -y
SKILL.md
Frontmatter
{
"name": "verify",
"description": "Verify harness changes end-to-end without docker — drive the real pinned CLI against a header-capturing stub server with the exact env resolve_auth_env() produces."
}
Verifying harness changes on a docker-less host
The pipeline's real surface is the in-container claude -p process and its
outbound API requests. Without docker, drive the same pinned CLI binary
directly with the env dict the harness would inject via docker -e.
Recipe
- Get the pinned CLI (version from
harness/agent_image.py:CLAUDE_CODE_VERSION):npm install --no-save @anthropic-ai/claude-code@<pin>in a temp dir → binary atnode_modules/@anthropic-ai/claude-code/bin/claude.exe(the.exename is the real native-binary entry on Linux too, filled in by the package's postinstall — not a Windows leftover). - Stub API server: a tiny HTTP server that appends each request's
headers to a JSONL file and returns a 400
invalid_request_error(non-retryable, so the CLI exits fast; exit=1 is expected). - Build the agent env exactly as the pipeline does:
python3 -c "from harness.auth import resolve_auth_env; ..."and dump to anexport-lines file withshlex.quote(values contain newlines — NEVER pass viaenv $(...), word-splitting mangles them;sourcethe file). - Emulate the container env:
unset ANTHROPIC_CUSTOM_HEADERS(and any other ambient var not in the resolved dict) before sourcing — a Claude Code session in this repo injects.claude/settings.jsonenv into shells, which containers never see. - Run:
ANTHROPIC_BASE_URL=http://127.0.0.1:<port> CLAUDECODE= IS_SANDBOX=1 timeout 30 <cli> -p hi --model claude-sonnet-4-5 --max-turns 1, then read the captured JSONL.
Gotchas
- Unit tests in
tests/test_patch.py/tests/test_patch_grade.pyneed docker and fail on docker-less hosts — pre-existing, not your change. - The docker
-einjection leg itself can't be exercised without docker; it's the same mechanism that carriesANTHROPIC_API_KEYin production. - For the interactive-skills surface, copy
.claude/settings.jsoninto a fresh temp dir and run the hostclaudefrom there (with ambientANTHROPIC_CUSTOM_HEADERSunset so settings.json is the only source).
Version History
- 6de8141 Current 2026-07-19 22:58


