Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Audit phase. Parallel review: code quality + security + tests. Semantic dedup of cross-mode findings. Outputs PASS/WARN/FAIL per dimension. Validates spec coverage.
.claude/skills/hashgraph-online-audit/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 103% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 131% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 214% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 181% | 0% |
CRITICAL: Run HARNESS_DIR=$(epic path) first. NEVER use .harness/ in the project directory.
This skill has 3 internal modes that run in parallel:
--strict Mode (Trust Boundary Isolation)When invoked with --strict (or when .harness/engagement.md has mode: strict), the audit enforces independence between verification agents to prevent reward hacking:
audit:code and audit:security run without visibility into each other's findings. Results are combined only during synthesis (Step 4)./go), a different agent instance must run audit. The builder's session ID is checked and excluded.Use --strict for security-sensitive projects, compliance requirements, or when the build phase had ambiguous outcomes.
Confirm go has run:
bashgit symbolic-ref --short HEAD # must NOT be main/master
Load the spec to know what was supposed to be built:
bashls -t $HARNESS_DIR/specs/SPEC-*.md | head -1
Read the Requirements and Acceptance Criteria sections.
bashgit diff --stat $(git merge-base HEAD main) git diff --name-only $(git merge-base HEAD main)
| Pattern | Scope | Extra checks | |---------|-------|-------------| | *.api.*, *route*, *controller*, *handler* | API | + Contract testing, request validation | | *.tsx, *.jsx, *.vue, *.svelte, *.css | Frontend | + Accessibility, semantic HTML | | *.sql, *migration*, *schema* | Database | + Migration safety, rollback plan | | *.rs, Cargo.toml, *.go, go.mod | Backend | + Build verification, type safety | | *.test.*, *.spec.*, __tests__/ | Tests | + Coverage delta, flaky test detection | | Dockerfile*, *.yml, *.yaml, Makefile | Infra | + Config validation, secret detection | | *.md, *.txt | Docs | + Link checking, freshness |
Launch all 3 modes with run_in_background: true.
--strict isolation protocol: When strict mode is active, each mode agent must be launched with:
This ensures each mode forms independent conclusions. Results are combined only in Step 4 synthesis.
## Code Review: <file or area>
- [BLOCKER] <description> (line X)
- [WARN] <description> (line Y)
- [NIT] <description> (line Z)
## Summary
- Blockers: N
- Warnings: N
- Verdict: APPROVE / REQUEST_CHANGES.env files are in .gitignore## Security Audit
- [CRITICAL] SQL injection risk in <file>:<line>
- [HIGH] Hardcoded secret in <file>:<line>
- [MEDIUM] Missing rate limit on <endpoint>
## Performance Audit
- [HIGH] N+1 query in <file>:<line>
- [MEDIUM] Unbounded array growth in <file>:<line>
## Summary
- Security: PASS / FAIL (N critical, N high)
- Performance: PASS / WARN (N issues)After all 3 modes complete, merge their findings and deduplicate:
Collection: Gather all findings from code, security, and test modes into a single pool.
Root-Cause Grouping: For each finding, identify the root cause. Findings sharing the same root cause (same file, same function, same underlying pattern) form a group.
Classification (per group):
| Classification | Meaning | Action | |---------------|---------|--------| | NEW | First finding for this root cause | Include in report | | DUP_BETTER | Duplicate with better evidence or higher severity | Replace original with this | | DUP_SKIP | Duplicate with weaker or equal evidence | Drop; reference the NEW finding |
Severity Reassessment: The surviving finding in each group takes the highest severity across all modes. For example, if code review says [WARN] but security says [CRITICAL] for the same root cause, the deduped finding is [CRITICAL].
Output: Only deduplicated findings proceed to Step 4 synthesis. The report should note: "N findings deduplicated from M total (K groups collapsed)."
Combine deduplicated findings into a single report:
## Audit Report
- Spec: SPEC-{timestamp} ({goal_slug})
- Branch: {current branch}
### Change Scope
- Scopes detected: [API, Frontend, Backend, Database, Infra, Docs, Tests]
- Scope-specific checks: [list what ran]
### Code Quality: [PASS/WARN/FAIL]
### Security: [PASS/WARN/FAIL]
### Performance: [PASS/WARN/FAIL]
### Tests: [X/Y passing, Z% coverage]
### Deduplication
- Total findings: M
- Deduplicated: N (K groups collapsed)
### Spec Coverage
- R1: ✅/❌ addressed in diff
- R2: ✅/❌ addressed in diff
- AC1: ✅/❌ verified by test
- AC2: ✅/❌ verified by test
### Action Items
1. [blocker or warning]/ship to create a PR."/go, then re-run /audit."| Excuse | Rebuttal | What to do instead | |--------|----------|-------------------| | "It's a small change, skip security" | Small changes introduce big vulnerabilities | Always run the security checklist | | "Tests are passing, that's enough" | Tests don't catch security or performance issues | Run all 3 modes | | "I'll fix the warnings later" | Later never comes | Fix blockers now, warnings before merge | | "Dedup is overkill for small audits" | Small audits can still have cross-mode overlap | Always dedup — the cost is trivial | | "Strict mode is overkill" | Without isolation, the builder can influence reviewers via shared context | Use --strict for security-sensitive or compliance-driven projects | | "The agents are independent enough" | Shared context creates anchoring bias — a clean code review inflates security scores | Strict mode ensures blind scoring until synthesis |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 29,534 | 39,264 | +33% | 1 | 1 | 0% | 2,485 | 5,939 | +139% | 0 | 0 | — |
case-02 | fail→fail | 24,240 | 27,819 | +15% | 1 | 1 | 0% | 2,354 | 4,738 | +101% | 0 | 0 | — |
case-03 | fail→fail | 27,520 | 36,120 | +31% | 1 | 1 | 0% | 2,159 | 6,700 | +210% | 0 | 0 | — |
case-04 | pass→fail | 28,296 | 17,705 | -37% | 1 | 1 | 0% | 4,201 | 2,504 | -40% | 0 | 0 | — |
case-05 | pass→fail | 8,354 | 20,163 | +141% | 1 | 1 | 0% | 1,065 | 2,616 | +146% | 0 | 0 | — |
case-06 | pass→fail | 21,299 | 24,419 | +15% | 1 | 1 | 0% | 2,459 | 2,634 | +7% | 0 | 0 | — |
case-07 | fail→pass | 19,526 | 4,537 | -77% | 1 | 1 | 0% | 2,362 | 2,855 | +21% | 0 | 0 | — |
case-08 | fail→pass | 32,289 | 6,213 | -81% | 1 | 1 | 0% | 1,388 | 2,823 | +103% | 0 | 0 | — |
case-09 | pass→pass | 13,409 | 4,305 | -68% | 1 | 1 | 0% | 1,795 | 2,929 | +63% | 0 | 0 | — |
case-10 | pass→pass | 15,406 | 9,238 | -40% | 1 | 1 | 0% | 1,532 | 2,807 | +83% | 0 | 0 | — |
case-11 | pass→pass | 15,860 | 6,260 | -61% | 1 | 1 | 0% | 1,690 | 3,052 | +81% | 0 | 0 | — |
case-12 | pass→pass | 16,019 | 8,693 | -46% | 1 | 1 | 0% | 2,222 | 3,368 | +52% | 0 | 0 | — |
case-13 | pass→pass | 15,348 | 10,197 | -34% | 1 | 1 | 0% | 2,544 | 2,854 | +12% | 0 | 0 | — |
case-14 | pass→pass | 18,505 | 2,755 | -85% | 1 | 1 | 0% | 2,193 | 2,596 | +18% | 0 | 0 | — |
case-15 | fail→pass | 13,405 | 8,685 | -35% | 1 | 1 | 0% | 1,059 | 2,441 | +131% | 0 | 0 | — |
case-20 | fail→pass | 5,414 | 5,956 | +10% | 1 | 1 | 0% | 828 | 2,600 | +214% | 0 | 0 | — |
case-16 | pass→pass | 15,381 | 14,077 | -8% | 1 | 1 | 0% | 2,335 | 3,635 | +56% | 0 | 0 | — |
case-17 | pass→pass | 12,991 | 10,731 | -17% | 1 | 1 | 0% | 1,164 | 2,792 | +140% | 0 | 0 | — |
case-18 | pass→pass | 15,752 | 8,291 | -47% | 1 | 1 | 0% | 1,713 | 2,712 | +58% | 0 | 0 | — |
case-19 | fail→pass | 11,213 | 8,024 | -28% | 1 | 1 | 0% | 920 | 2,587 | +181% | 0 | 0 | — |
case-21 | pass→pass | 17,505 | 4,317 | -75% | 1 | 1 | 0% | 1,762 | 2,719 | +54% | 0 | 0 | — |
case-22 | pass→pass | 19,277 | 6,739 | -65% | 1 | 1 | 0% | 1,847 | 3,266 | +77% | 0 | 0 | — |
case-23 | pass→pass | 8,387 | 5,106 | -39% | 1 | 1 | 0% | 1,213 | 3,061 | +152% | 0 | 0 | — |
case-24 | pass→pass | 12,953 | 8,753 | -32% | 1 | 1 | 0% | 1,400 | 2,812 | +101% | 0 | 0 | — |
case-25 | pass→pass | 13,835 | 3,864 | -72% | 1 | 1 | 0% | 1,814 | 2,857 | +57% | 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. 25 cases were attempted, and 22 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 +8 percentage points is the difference between those two pass rates over the 22 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
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.