Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add air-gapped/skills --skill claude-code-ci-harnessgit clone --depth 1 https://github.com/air-gapped/skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/air-gapped/skills/claude-code-ci-harness)<a href="https://agentmods.dev/skills/air-gapped/skills/claude-code-ci-harness"><img src="https://agentmods.dev/badge/skills/air-gapped/skills/claude-code-ci-harness/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/air-gapped/skills/claude-code-ci-harness"><img src="https://agentmods.dev/badge/skills/air-gapped/skills/claude-code-ci-harness.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00067 | $0.01021 |
| Opus 5.5 | $0.00027 | $0.00408 |
| Sonnet 5.5 | $0.00013 | $0.00204 |
| Haiku 4.5 | $0.00007 | $0.00102 |
Grade A, and why
claude-code-ci-harness scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 80 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Claude Code CI Harness
Never invoke claude directly for a test. Always use
scripts/isolated-run.sh. It isolates the run from the caller's profile.
Run
${CLAUDE_SKILL_DIR}/scripts/isolated-run.sh MODE_FLAGS \
--workdir DIR --transcript OUT.ndjson --prompt 'PROMPT'
| Mode | MODE_FLAGS |
|---|---|
| Endpoint, no auth | --base-url URL --model SERVED_NAME |
| Endpoint, bearer token | --base-url URL --model SERVED_NAME --token-var VAR |
Endpoint, X-Api-Key header |
--base-url URL --model SERVED_NAME --token-var VAR --x-api-key |
| Claude subscription | --model CLAUDE_ALIAS_OR_ID (no --base-url; token var defaults to CLAUDE_CODE_OAUTH_TOKEN) |
| Flag | Rule |
|---|---|
--base-url |
Endpoint root without /v1, local or remote. |
--model |
The exact name the endpoint serves; a Claude alias or ID in subscription mode. |
--token-var |
Name of a variable in the secrets file. |
--x-api-key |
Only for endpoints that require the token in an X-Api-Key header. |
--tools |
Built-in tool allowlist. Default: Read,Glob. |
--timeout |
Wall-clock limit in seconds. Default: 180. 0 disables it. |
Secrets
The secrets file is ~/.config/claude-code-ci-harness/targets.env. Each line is KEY=value. The file must be mode 0600, owned by the user, not a symlink, and outside Git. The runner rejects any other file.
- Subscription token: the user runs
claude setup-tokenin a separate terminal and addsCLAUDE_CODE_OAUTH_TOKEN=<token>to the file. Never runsetup-tokeninside an agent session, because the token would land in the transcript. - Never copy
~/.claude/.credentials.jsoninto a run. Its refresh token rotates, and a rotated copy logs out the user. - Never put a token in a flag, a transcript or the skill directory.
Do not change in the runner
| Keep | Reason |
|---|---|
--safe-mode |
Disables CLAUDE.md, skills, plugins and hooks. |
--permission-mode dontAsk |
Without it, -p starts in auto mode. |
--strict-mcp-config with an empty config |
Blocks the caller's MCP servers. |
Empty ANTHROPIC_API_KEY |
Stops an inherited key from overriding the intended token. |
No --bare |
It disables OAuth and has dropped Glob from --tools. |
What ships with it
12 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- references/improvement-backlog.md 548 B
- references/isolation.md 1.5 KB
- references/known-gaps.md 1.7 KB
- references/scenario-bank.md 2.0 KB
- references/sources.md 1.6 KB
- scripts/assert-events.sh 3.0 KB runs code
- scripts/cleanup.sh 1.2 KB runs code
- scripts/isolated-run.sh 9.7 KB runs code
- scripts/make-fixtures.sh 826 B runs code
- scripts/run-matrix.sh 2.9 KB runs code
- scripts/scan-token-leakage.sh 2.2 KB runs code
- tests/test-offline.sh 3.6 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 80 lines · 67 tokens per session scan A c7f1fdcaeecb
claude-code-ci-harness is a skill published in the GitHub repository air-gapped/skills (5 stars, last pushed 2d ago), licensed MIT. It adds 67 tokens to every session and 1,021 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-15.
Other skills, from other repositories
quality-scan
Run a scoped, read-only quality scan and report exact-candidate evidence, failures and frozen debt. Use for an ad-hoc gate sweep or release preparation; a static scan is not full release acceptance.
sweep-reds
Repair confirmed CI failures base-first, then prepare affected PRs one at a time with exact-candidate evidence. Use when asked to sweep reds or restore the queue. Never merges, closes PRs, weakens tests, or changes CI under ordinary sweep authority.
test-setup
Scaffold the test framework and CI — tests/ directory, engine test runner, GitHub Actions workflow. Once, before the first sprint.
ci-speedup
Cuts the wait from push to green by measuring a pipeline's critical path from run timestamps, then splitting, sharding, trimming setup and sharing test module state, with a before/after ledger. Use when asked to "speed up CI", "CI is slow", "why does a PR take 15 minutes", "CI is the bottleneck", or when agents merge…
ci-all
Full CI pipeline: run local tests, type check, push branch, and return the pipeline URL. The only command you need before opening a PR.
audit-harness
Use when auditing HARNESS.md, pre-commit hooks, pre-push hooks, architecture gates, or CI workflows for tunacode-cli. This skill treats any mismatch, skipped gate, or failing check as a critical failure and requires manual one-by-one execution rather than make targets, batch wrappers, or summary-only audits.