Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when auditing security and supply chain in any codebase — trust boundaries, credential handling, injection surfaces, update/release integrity, CI permissions, dependency pinning. Assess by default, harden on request; provenance or it didn't happen.
.claude/skills/automagik-dev-supply-chain/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 175% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 91% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 21% | 0% |
Runtime syntax: invoke the plugin copy through the active runtime's owner-qualified skill selector; use a bare selector only when intentionally selecting a user-tier copy (a separately installed personal copy; Genie no longer seeds this tier). Cross-skill prose below uses bare names as portable semantic routes; the orchestrator resolves the selector for the active runtime.
This lane holds that every artifact a system trusts — a release binary, a dependency, a CI token, an inbound message — needs verifiable provenance, and "we downloaded it over HTTPS" is not provenance. Trust boundaries are enumerated, not assumed; the interesting question at each one is "what does an attacker who controls this input get?" Least privilege is the default; every credential and CI permission must justify its scope.
This lane's lens is inspired by the work of Dan Lorenc, creator of Sigstore and founder of Chainguard.
Assess and report by default; this is a defensive audit of the user's own repo. Apply hardening only when the invocation explicitly asks. Do not build exploit tooling — demonstrating a finding means citing the code path and describing the impact, not weaponizing it. Findings outside this lane get a one-line handoff to the relevant lane skill under skills/. When the evidence supports a conclusion, state it.
Enumerate before auditing. From the code, CI config, and CLAUDE.md/AGENTS.md, list: every point where external input enters (network listeners, webhook/hook stdin, message queues, downloaded artifacts, CLI args crossing privilege levels), every credential at rest (env vars, key files, tokens) and its handling, the update/release chain (how users get new versions, what verifies them), the CI surface (workflows, triggers, permissions, secrets, third-party actions), and the dependency posture (lockfile, count, where the build runs). Also collect the repo's stated security decisions — fail-closed contracts, documented trust delegations (e.g. "approval authority = membership in channel X"), known accepted risks — the audit judges whether they hold and whether their scope has silently widened, not whether you'd have chosen them.
Repo profile — recall, verify, persist. Before deriving from scratch, recall a stored profile for this repo: a memory/brain store if one is available this session, else a well-known file (in genie-framework repos, .genie/repo-profile.md). For this lane the profile records the boundary map, credential inventory, trust delegations, and the previously verified-safe list. The verified-safe list is the dangerous entry — code changes since the last audit can invalidate it, so re-verify any safe-listed boundary the current diff touches and report scope drift as a finding. After the audit, persist what discovery learned: update rather than duplicate, delete what proved wrong.
Profile write boundary. During assess-only and pull-request runs, return proposed profile changes as a profile_delta; do not write memory or repository files. Persist a profile only when the user explicitly asks.
permissions:, dangerous triggers (pull_request_target), secret exposure to forks, submodule checkout trust, actions pinned by SHA vs tag. Done when each workflow has a verdict.Every finding cites file:line read this session; every "verified safe" names what was checked. Findings are graded confirmed (path traced end to end), plausible (suspicious, taint not fully traced — with what remains), or not-assessed — a boundary is never safe because it "looks like" it validates.
Lead with a one-sentence verdict naming the most serious confirmed finding, or stating the audited surfaces are clean. Then findings ranked by impact × exposure, each with the trust boundary, evidence, plain-language impact, and the concrete hardening action. Include the verified-safe list — an audit that only reports holes hides its coverage. In a genie-framework repo, use CRITICAL/HIGH/MEDIUM/LOW for finding severities and SHIP/FIX-FIRST/BLOCKED only for the overall verdict; hardening campaigns become a wish via wish, and anything actively exploitable is BLOCKED regardless of effort to fix.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-19 | pass→pass | 6,655 | 4,637 | -30% | 1 | 1 | 0% | 1,020 | 2,090 | +105% | 0 | 0 | — |
case-01 | fail→fail | 17,225 | 19,978 | +16% | 1 | 1 | 0% | 2,160 | 3,321 | +54% | 0 | 0 | — |
case-02 | fail→pass | 21,945 | 31,959 | +46% | 1 | 1 | 0% | 2,059 | 5,664 | +175% | 0 | 0 | — |
case-03 | fail→fail | 12,620 | 18,489 | +47% | 1 | 1 | 0% | 1,278 | 3,653 | +186% | 0 | 0 | — |
case-04 | fail→fail | 6,402 | 6,430 | +0% | 1 | 1 | 0% | 459 | 1,842 | +301% | 0 | 0 | — |
case-05 | fail→fail | 17,073 | 14,473 | -15% | 1 | 1 | 0% | 2,831 | 2,984 | +5% | 0 | 0 | — |
case-06 | fail→fail | 26,614 | 6,835 | -74% | 1 | 1 | 0% | 4,582 | 1,819 | -60% | 0 | 0 | — |
case-07 | pass→pass | 18,044 | 15,271 | -15% | 1 | 1 | 0% | 1,672 | 3,025 | +81% | 0 | 0 | — |
case-08 | fail→pass | 17,198 | 10,424 | -39% | 1 | 1 | 0% | 2,634 | 2,982 | +13% | 0 | 0 | — |
case-09 | fail→pass | 15,575 | 5,807 | -63% | 1 | 1 | 0% | 2,245 | 2,215 | -1% | 0 | 0 | — |
case-10 | fail→pass | 6,778 | 4,251 | -37% | 1 | 1 | 0% | 1,045 | 1,994 | +91% | 0 | 0 | — |
case-11 | pass→pass | 11,998 | 6,825 | -43% | 1 | 1 | 0% | 1,397 | 2,419 | +73% | 0 | 0 | — |
case-12 | fail→pass | 12,767 | 6,741 | -47% | 1 | 1 | 0% | 1,892 | 2,293 | +21% | 0 | 0 | — |
case-18 | pass→pass | 11,101 | 18,551 | +67% | 1 | 1 | 0% | 1,803 | 3,716 | +106% | 0 | 0 | — |
case-13 | fail→pass | 6,992 | 5,154 | -26% | 1 | 1 | 0% | 1,013 | 1,950 | +92% | 0 | 0 | — |
case-14 | pass→pass | 13,311 | 12,193 | -8% | 1 | 1 | 0% | 2,058 | 3,291 | +60% | 0 | 0 | — |
case-15 | pass→pass | 12,621 | 9,589 | -24% | 1 | 1 | 0% | 1,471 | 2,710 | +84% | 0 | 0 | — |
case-16 | fail→pass | 10,118 | 6,754 | -33% | 1 | 1 | 0% | 1,538 | 2,290 | +49% | 0 | 0 | — |
case-17 | pass→pass | 12,040 | 8,806 | -27% | 1 | 1 | 0% | 1,886 | 2,690 | +43% | 0 | 0 | — |
case-20 | fail→fail | 6,999 | 6,293 | -10% | 1 | 1 | 0% | 957 | 1,664 | +74% | 0 | 0 | — |
case-21 | fail→pass | 13,629 | 5,399 | -60% | 1 | 1 | 0% | 2,220 | 2,161 | -3% | 0 | 0 | — |
case-22 | pass→pass | 8,067 | 8,327 | +3% | 1 | 1 | 0% | 1,286 | 2,153 | +67% | 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 20 counted toward the lift figure. The other 2 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 +36 percentage points is the difference between those two pass rates over the 20 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.