Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Ensures Claude verifies both local tests AND remote CI before claiming completion. Use BEFORE any completion claims, commits, or pull requests. Mandatory verification with evidence.
.claude/skills/aiskillstore-autonomous-ci/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 539% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 113% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 27% | 0% |
Never claim success without CI verification. This skill ensures Claude automatically verifies both local tests AND remote CI before declaring work complete.
Core Principle: Evidence before claims. Always.
This skill is MANDATORY before:
textBEFORE claiming any completion: 1. RUN LOCAL VERIFICATION └─> Execute project-specific test command └─> Check exit code └─> If fails: Fix and repeat 2. COMMIT AND PUSH └─> Only if local tests pass └─> Push to remote repository 3. MONITOR CI (BLOCKING) └─> Find workflow run for commit └─> WAIT for completion (do not proceed) └─> Check all workflows in .github/workflows/ 4. IF CI FAILS └─> Download failure logs └─> Analyze root cause └─> Fix the issue └─> REPEAT from step 1 5. ONLY WHEN ALL CI PASSES └─> Report success with evidence
This skill uses scripts from the plugin directory:
The plugin provides a generic test runner that auto-detects your project type:
bash# For .NET projects dotnet test --configuration Release # For Node.js projects npm test # For Python projects pytest # For Go projects go test ./...
Claude will automatically detect your project type and run the appropriate command.
After pushing, Claude will use GitHub CLI to monitor CI:
bash# Find and watch workflow run gh run list --limit 1 --commit <sha> gh run watch <run-id> # Check final status gh run view <run-id> --json conclusion
If Claude catches itself thinking or about to say:
STOP. Run the verification protocol instead.
bash# ALWAYS verify locally first # For .NET: dotnet build --configuration Release dotnet test --no-build --configuration Release # For Node.js: npm run build npm test # For Python: pytest # ONLY proceed if exit code = 0
bash# Only after local tests pass git add . git commit -m "Fix: issue description" git push
bash# Get commit SHA COMMIT_SHA=$(git rev-parse HEAD) # Find workflow run RUN_ID=$(gh run list --commit "$COMMIT_SHA" --limit 1 --json databaseId -q '.[0].databaseId') # Watch workflow (BLOCKS until complete) gh run watch "$RUN_ID" # Check conclusion CONCLUSION=$(gh run view "$RUN_ID" --json conclusion -q .conclusion) if [ "$CONCLUSION" = "success" ]; then echo "✅ CI passed" else echo "❌ CI failed - analyzing logs" gh run view "$RUN_ID" --log-failed fi
When CI fails:
gh run view <run-id> --log-failed| Excuse | Reality | | ------ | ------- | | "Tests passed locally" | CI environment may differ | | "It's a small change" | Small changes break CI too | | "I'm confident" | Confidence ≠ verification | | "CI takes too long" | Waiting is mandatory | | "I'll check later" | No. Check now. | | "Just this once" | No exceptions. Ever. |
bash# Local verification dotnet test --configuration Release # This runs ALL target frameworks # Example: net8.0, net9.0, net10.0
For projects with multiple CI workflows (tests.yml, lint.yml, build.yml):
bash# Monitor ALL workflows gh run list --commit <sha> --json databaseId,name,conclusion # All must pass: # ✅ tests.yml: success # ✅ lint.yml: success # ✅ build.yml: success
Some projects upload test results to services like Codecov:
bash# Wait for primary workflow gh run watch <run-id> # Verify uploads completed # Check workflow logs for "Upload complete" messages
Claude may ONLY claim completion when:
When all checks pass, report with evidence:
text✅ Verification Complete Local Tests: 159/159 passed CI Status: All checks passed Workflows: - tests.yml: ✅ success https://github.com/user/repo/actions/runs/12345 - lint.yml: ✅ success https://github.com/user/repo/actions/runs/12346 Commit: abc123def Timestamp: 2025-11-21 15:30:45 Work is verified complete.
From painful experience:
gh) installed and authenticatedNo shortcuts. No exceptions. No rationalizations.
This is non-negotiable.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→pass | 15,120 | 8,119 | -46% | 1 | 1 | 0% | 1,718 | 2,898 | +69% | 0 | 0 | — |
case-07 | pass→pass | 8,413 | 5,034 | -40% | 1 | 1 | 0% | 1,340 | 2,391 | +78% | 0 | 0 | — |
case-05 | fail→pass | 11,839 | 34,874 | +195% | 1 | 1 | 0% | 996 | 6,361 | +539% | 0 | 0 | — |
case-01 | fail→fail | 10,222 | 16,237 | +59% | 1 | 1 | 0% | 229 | 1,870 | +717% | 0 | 0 | — |
case-02 | fail→fail | 10,845 | 8,851 | -18% | 1 | 1 | 0% | 332 | 1,741 | +424% | 0 | 0 | — |
case-03 | fail→fail | 14,904 | 9,547 | -36% | 1 | 1 | 0% | 272 | 1,742 | +540% | 0 | 0 | — |
case-04 | fail→pass | 14,675 | 9,402 | -36% | 1 | 1 | 0% | 1,446 | 2,209 | +53% | 0 | 0 | — |
case-08 | pass→pass | 13,803 | 11,517 | -17% | 1 | 1 | 0% | 1,583 | 2,677 | +69% | 0 | 0 | — |
case-09 | pass→pass | 12,067 | 5,889 | -51% | 1 | 1 | 0% | 1,983 | 2,501 | +26% | 0 | 0 | — |
case-10 | pass→pass | 8,906 | 6,946 | -22% | 1 | 1 | 0% | 555 | 1,826 | +229% | 0 | 0 | — |
case-11 | fail→pass | 11,998 | 9,527 | -21% | 1 | 1 | 0% | 1,058 | 2,249 | +113% | 0 | 0 | — |
case-12 | fail→pass | 17,173 | 4,448 | -74% | 1 | 1 | 0% | 1,892 | 2,404 | +27% | 0 | 0 | — |
case-13 | pass→pass | 12,647 | 16,451 | +30% | 1 | 1 | 0% | 1,798 | 3,179 | +77% | 0 | 0 | — |
case-14 | pass→pass | 17,387 | 10,357 | -40% | 1 | 1 | 0% | 1,732 | 2,286 | +32% | 0 | 0 | — |
case-15 | pass→pass | 8,947 | 8,312 | -7% | 1 | 1 | 0% | 783 | 2,116 | +170% | 0 | 0 | — |
case-16 | fail→pass | 11,702 | 11,734 | +0% | 1 | 1 | 0% | 1,652 | 2,630 | +59% | 0 | 0 | — |
case-17 | pass→pass | 17,991 | 19,039 | +6% | 1 | 1 | 0% | 2,162 | 3,974 | +84% | 0 | 0 | — |
case-18 | pass→pass | 11,739 | 10,029 | -15% | 1 | 1 | 0% | 979 | 2,283 | +133% | 0 | 0 | — |
case-19 | pass→pass | 10,163 | 3,189 | -69% | 1 | 1 | 0% | 886 | 2,040 | +130% | 0 | 0 | — |
case-20 | pass→pass | 4,707 | 7,545 | +60% | 1 | 1 | 0% | 908 | 2,878 | +217% | 0 | 0 | — |
case-21 | pass→pass | 14,510 | 20,581 | +42% | 1 | 1 | 0% | 1,814 | 4,343 | +139% | 0 | 0 | — |
case-22 | pass→pass | 19,004 | 11,719 | -38% | 1 | 1 | 0% | 2,436 | 3,708 | +52% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +27 percentage points is the difference between those two pass rates over the 19 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.