skilldrop-cli 0.16.34 → 0.16.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/agents/README.md +4 -1
- package/agents/docs-reviewer.md +47 -0
- package/agents/finding-adjudicator.md +49 -0
- package/agents/test-reviewer.md +52 -0
- package/catalogue.json +17 -7
- package/model-routing.json +40 -0
- package/package.json +1 -1
- package/packs/ai-engineering/skills/agent-config-review/SKILL.md +116 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/eval_queries.json +12 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/evals.json +75 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/db-migrator.md +8 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/reviewer.md +9 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/settings.json +48 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/settings.local.json +5 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.mcp.json +22 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/package.json +12 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/2/.cursor/mcp.json +17 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/2/config.toml +21 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/my-user-settings.json +11 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.claude/agents/release-notes.md +13 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.claude/settings.json +39 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.mcp.json +18 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/package.json +14 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/5/.github/workflows/codex-triage.yml +29 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/5/AGENTS.md +16 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/5/codex/config.toml +34 -0
- package/packs/ai-engineering/skills/agent-config-review/examples/inputs/tidewater-ingest/.claude/settings.json +22 -0
- package/packs/ai-engineering/skills/agent-config-review/examples/inputs/tidewater-ingest/.mcp.json +9 -0
- package/packs/ai-engineering/skills/agent-config-review/examples/python-repo-tighten.md +81 -0
- package/packs/ai-engineering/skills/agent-config-review/manifest.json +60 -0
- package/packs/ai-engineering/skills/agent-config-review/reference.md +205 -0
- package/packs/ai-engineering/skills/agent-config-review/scripts/agent_config_scan.py +989 -0
- package/packs/ai-engineering/skills/agent-incident-response/SKILL.md +175 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/eval_queries.json +14 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/evals.json +107 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/agent-session-excerpt.txt +11 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/ci-build-log.txt +24 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/incident-notes.md +19 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/2/mcp-config.json +20 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/2/session-transcript.txt +8 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/4/agent-session.log +70 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/4/infra/staging-db.tf +25 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/jobs/nightly-triage/job.yaml +19 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/jobs/nightly-triage/run.log +13 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/usage-export-2026-10-20.csv +13 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/.mcp.json +20 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/git-log.txt +12 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/notesync-excerpt.txt +30 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/notesync.log +15 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/ssh-config.txt +16 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/.github/workflows/ci.yml +28 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/SECURITY.md +8 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/issue-479.md +35 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/package.json +15 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/pr-482.diff +20 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/run-log.txt +30 -0
- package/packs/ai-engineering/skills/agent-incident-response/examples/injected-issue-comment.md +57 -0
- package/packs/ai-engineering/skills/agent-incident-response/manifest.json +55 -0
- package/packs/ai-engineering/skills/agent-incident-response/reference.md +152 -0
- package/packs/ai-engineering/skills/agent-incident-response/scripts/find_secret_exposure.py +239 -0
- package/packs/ai-engineering/skills/agent-incident-response/scripts/usage_split.py +194 -0
- package/packs/converters/skills/file-to-markdown/SKILL.md +3 -2
- package/packs/converters/skills/file-to-markdown/evals/eval_queries.json +4 -0
- package/packs/converters/skills/file-to-markdown/manifest.json +2 -2
- package/packs/converters/skills/file-to-markdown/scripts/to_markdown.py +340 -7
- package/packs/converters/skills/md-to-confluence/SKILL.md +139 -0
- package/packs/converters/skills/md-to-confluence/evals/eval_queries.json +42 -0
- package/packs/converters/skills/md-to-confluence/evals/evals.json +89 -0
- package/packs/converters/skills/md-to-confluence/evals/files/1/img/latency-dashboard.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/1/payments-runbook.md +60 -0
- package/packs/converters/skills/md-to-confluence/evals/files/2/deploy-checklist.md +33 -0
- package/packs/converters/skills/md-to-confluence/evals/files/3/img/after/screen.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/3/img/before/screen.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/3/release-notes-4.2.md +49 -0
- package/packs/converters/skills/md-to-confluence/evals/files/4/docs/img/topology.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/4/docs/ingest-pipeline-design.md +65 -0
- package/packs/converters/skills/md-to-confluence/evals/files/5/support/troubleshooting-sso.md +57 -0
- package/packs/converters/skills/md-to-confluence/examples/inputs/img/queue-depth.png +0 -0
- package/packs/converters/skills/md-to-confluence/examples/inputs/queue-runbook.fixed.md +21 -0
- package/packs/converters/skills/md-to-confluence/examples/inputs/queue-runbook.md +21 -0
- package/packs/converters/skills/md-to-confluence/examples/queue-runbook.md +57 -0
- package/packs/converters/skills/md-to-confluence/manifest.json +52 -0
- package/packs/converters/skills/md-to-confluence/reference.md +92 -0
- package/packs/converters/skills/md-to-confluence/scripts/md_to_confluence.py +821 -0
- package/packs/converters/skills/md-to-pptx/SKILL.md +131 -0
- package/packs/converters/skills/md-to-pptx/evals/eval_queries.json +12 -0
- package/packs/converters/skills/md-to-pptx/evals/evals.json +84 -0
- package/packs/converters/skills/md-to-pptx/evals/files/1/img/defect-burndown.png +0 -0
- package/packs/converters/skills/md-to-pptx/evals/files/1/status-report.md +75 -0
- package/packs/converters/skills/md-to-pptx/evals/files/3/brand.json +12 -0
- package/packs/converters/skills/md-to-pptx/evals/files/3/night-shift-induction.md +53 -0
- package/packs/converters/skills/md-to-pptx/evals/files/4/charts/ontime.png +0 -0
- package/packs/converters/skills/md-to-pptx/evals/files/4/qbr-q3.md +85 -0
- package/packs/converters/skills/md-to-pptx/evals/files/5/vendor-sync-notes.md +28 -0
- package/packs/converters/skills/md-to-pptx/examples/support-weekly-input.md +48 -0
- package/packs/converters/skills/md-to-pptx/examples/support-weekly.md +75 -0
- package/packs/converters/skills/md-to-pptx/examples/tickets-by-week.png +0 -0
- package/packs/converters/skills/md-to-pptx/manifest.json +49 -0
- package/packs/converters/skills/md-to-pptx/reference.md +139 -0
- package/packs/converters/skills/md-to-pptx/scripts/md_to_pptx.py +1841 -0
- package/packs/dev-team/loops/modernize/LOOP.md +124 -0
- package/packs/dev-team/loops/modernize/evals/eval_queries.json +9 -0
- package/packs/dev-team/loops/modernize/evals/evals.json +27 -0
- package/packs/dev-team/loops/modernize/loop.json +60 -0
- package/packs/dev-team/skills/behaviour-equivalence/SKILL.md +155 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/eval_queries.json +11 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/evals.json +76 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/cases.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/new.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/notes.md +15 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/old.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/old_rerun.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/pricing_v1.py +45 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/pricing_v2.py +65 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/rules.json +10 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/3/diff-summary.txt +16 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/diff.txt +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/fee_calc_py2.py +16 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/fee_calc_py3.py +24 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/input.csv +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/new_output.csv +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/old_output.csv +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/TEAM_NOTES.md +19 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/normalisation.yaml +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/new_run.jsonl +8 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/old_run1.jsonl +8 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/old_run2.jsonl +8 -0
- package/packs/dev-team/skills/behaviour-equivalence/examples/delivery-date.md +78 -0
- package/packs/dev-team/skills/behaviour-equivalence/manifest.json +33 -0
- package/packs/dev-team/skills/behaviour-equivalence/reference.md +97 -0
- package/packs/dev-team/skills/behaviour-equivalence/scripts/golden_diff.py +524 -0
- package/packs/dev-team/skills/behaviour-equivalence/templates/accepted.json +10 -0
- package/packs/dev-team/skills/behaviour-equivalence/templates/rules.json +7 -0
- package/packs/frontend/pack.json +55 -0
- package/packs/frontend/skills/rendering-strategy/SKILL.md +149 -0
- package/packs/frontend/skills/rendering-strategy/evals/eval_queries.json +38 -0
- package/packs/frontend/skills/rendering-strategy/evals/evals.json +77 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/1/fernhill-app.md +40 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/3/routes.md +33 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/build-notes.txt +5 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/nuxt.config.ts +19 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/pages/recipes/[slug].vue +37 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/routes.md +15 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/routes.txt +18 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/src/hooks.server.ts +14 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/src/routes/(marketing)/pricing/+page.server.ts +10 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/src/routes/+layout.server.ts +10 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/svelte.config.js +10 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/traffic.md +18 -0
- package/packs/frontend/skills/rendering-strategy/examples/saas-site.md +42 -0
- package/packs/frontend/skills/rendering-strategy/manifest.json +50 -0
- package/packs/frontend/skills/rendering-strategy/reference.md +116 -0
- package/packs/frontend/skills/rendering-strategy/scripts/render_load.py +181 -0
- package/packs/frontend/skills/web-performance-review/SKILL.md +106 -0
- package/packs/frontend/skills/web-performance-review/evals/eval_queries.json +38 -0
- package/packs/frontend/skills/web-performance-review/evals/evals.json +76 -0
- package/packs/frontend/skills/web-performance-review/evals/files/1/psi.json +1065 -0
- package/packs/frontend/skills/web-performance-review/evals/files/2/after.json +359 -0
- package/packs/frontend/skills/web-performance-review/evals/files/2/before.json +375 -0
- package/packs/frontend/skills/web-performance-review/evals/files/4/psi-pdp-mobile-2026-10-19.json +171 -0
- package/packs/frontend/skills/web-performance-review/evals/files/4/rum-inp-attribution-oct14-19.csv +6 -0
- package/packs/frontend/skills/web-performance-review/evals/files/4/rum-inp-daily.csv +15 -0
- package/packs/frontend/skills/web-performance-review/evals/files/5/crux-home-phone.json +35 -0
- package/packs/frontend/skills/web-performance-review/evals/files/5/lighthouse-home-mobile.json +173 -0
- package/packs/frontend/skills/web-performance-review/examples/quayside-article-lhr.json +480 -0
- package/packs/frontend/skills/web-performance-review/examples/quayside-article.md +103 -0
- package/packs/frontend/skills/web-performance-review/manifest.json +48 -0
- package/packs/frontend/skills/web-performance-review/reference.md +105 -0
- package/packs/frontend/skills/web-performance-review/scripts/lh_summary.py +743 -0
- package/packs/product-manager/skills/lean-canvas/SKILL.md +162 -0
- package/packs/product-manager/skills/lean-canvas/evals/eval_queries.json +42 -0
- package/packs/product-manager/skills/lean-canvas/evals/evals.json +82 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/1/pawpass-notes.md +54 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/3/lunchloop-pitch.md +30 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/4/clubkit-notes.md +44 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/5/cost-model.csv +5 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/5/proposal.md +40 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/5/stakeholder-emails.txt +18 -0
- package/packs/product-manager/skills/lean-canvas/examples/bike-repair.md +72 -0
- package/packs/product-manager/skills/lean-canvas/manifest.json +34 -0
- package/packs/product-manager/skills/lean-canvas/reference.md +102 -0
- package/packs/product-manager/skills/lean-canvas/scripts/unit_economics.py +211 -0
- package/packs/solution-architect/skills/api-contract-draft/SKILL.md +2 -2
- package/packs/solution-architect/skills/api-contract-draft/manifest.json +28 -6
- package/packs/solution-architect/skills/event-contract-draft/SKILL.md +167 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/eval_queries.json +38 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/evals.json +76 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/1/order-events-brief.md +45 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/4/NOTES.md +23 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/4/schemas/shipment-update.json +40 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/5/invoice.example.json +25 -0
- package/packs/solution-architect/skills/event-contract-draft/examples/order-service.asyncapi.json +246 -0
- package/packs/solution-architect/skills/event-contract-draft/examples/order-service.md +92 -0
- package/packs/solution-architect/skills/event-contract-draft/manifest.json +25 -0
- package/packs/solution-architect/skills/event-contract-draft/reference.md +113 -0
- package/packs/solution-architect/skills/event-contract-draft/scripts/check_asyncapi.py +502 -0
- package/packs/solution-architect/skills/event-contract-draft/templates/asyncapi-skeleton.json +144 -0
- package/packs/sre-oncall/skills/slo-spec/SKILL.md +161 -0
- package/packs/sre-oncall/skills/slo-spec/evals/eval_queries.json +38 -0
- package/packs/sre-oncall/skills/slo-spec/evals/evals.json +75 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/1/order-service.md +51 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/3/search-slo-status.md +30 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/4/alerts/payments-api.rules.yaml +16 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/4/docs/dependencies.md +8 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/4/metrics/summary-90d.md +51 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/5/ops-notes.md +34 -0
- package/packs/sre-oncall/skills/slo-spec/examples/ticket-booking.md +88 -0
- package/packs/sre-oncall/skills/slo-spec/manifest.json +34 -0
- package/packs/sre-oncall/skills/slo-spec/reference.md +113 -0
- package/packs/sre-oncall/skills/slo-spec/scripts/slo_math.py +449 -0
- package/packs/sre-oncall/skills/slo-spec/templates/slo-spec.md +35 -0
package/README.md
CHANGED
|
@@ -32,6 +32,7 @@ Install one pack. Every role pack also brings `core` (intake, critique, review c
|
|
|
32
32
|
- **Data and analytics:** `data-analytics` — metric definitions, SQL review, dashboard specs. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/data-analytics/)
|
|
33
33
|
- **Governance, risk and compliance:** `grc` — DPIAs, SOC 2 evidence maps, risk registers, security questionnaire answers. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/grc/)
|
|
34
34
|
- **Infrastructure as code:** `infra-as-code` — Terraform modules with secure defaults, and plan reviews before apply. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/infra-as-code/)
|
|
35
|
+
- **Frontend:** `frontend` — what makes a page slow for real users, and how each route should be rendered. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/frontend/)
|
|
35
36
|
- **Writing agent skills:** `skill-engineering` — author a portable skill with evals, and review one before it ships. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/skill-engineering/)
|
|
36
37
|
- **Applying for a job:** `career` — an honest fit check against the posting, a tailored resume and cover letter that claim nothing you didn't, and the application form's answers. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/career/)
|
|
37
38
|
- **Everyone:** `core` on its own. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/core/)
|
package/agents/README.md
CHANGED
|
@@ -23,8 +23,11 @@ npx skilldrop-cli install --agent devils-advocate --ide kiro # .kiro/agents/*.
|
|
|
23
23
|
| [`devils-advocate`](devils-advocate.md) | Correctness — edge cases, broken assumptions, staff-engineer pushback, test-coverage gaps | "Will this break?" |
|
|
24
24
|
| [`code-quality`](code-quality.md) | Craft — naming, structure, duplication, needless complexity, readability | "Will the next engineer hate this?" |
|
|
25
25
|
| [`security-reviewer`](security-reviewer.md) | Security — authz, injection, secret exposure, SSRF, unsafe deserialization, weak crypto, risky deps | "What can an attacker do with this?" |
|
|
26
|
+
| [`test-reviewer`](test-reviewer.md) | The tests themselves — which ones would still pass with the bug back in, mocks that return the answer, snapshots nobody read, the few missing tests that matter | "Would these tests catch it?" |
|
|
27
|
+
| [`docs-reviewer`](docs-reviewer.md) | Docs against the change — statements now false, examples that fail if copied, new behaviour with no doc | "Do the docs still tell the truth?" |
|
|
28
|
+
| [`finding-adjudicator`](finding-adjudicator.md) | The panel's findings — each checked against the code, duplicates merged, contradictions settled, one ranked list | "Which of these must the author actually fix?" |
|
|
26
29
|
|
|
27
|
-
They are deliberately **split, not merged.** A single "review my code" agent dilutes all three — bug-hunting, craft, and exploitability pull in different directions. Run them as separate passes; together they are the reviewer panel [`feature-implement-loop`](../packs/dev-team/skills/feature-implement-loop/SKILL.md) drives after each generation round. `devils-advocate` here is the subagent form of the [`devils-advocate` skill](../packs/dev-team/skills/devils-advocate/SKILL.md); same persona, packaged for a tool's native agent slot instead of on-demand skill invocation.
|
|
30
|
+
The first three are the core panel; `test-reviewer` and `docs-reviewer` join it when a change claims to be tested or touches documented behaviour, and `finding-adjudicator` runs last, over everyone's findings. They are deliberately **split, not merged.** A single "review my code" agent dilutes all three — bug-hunting, craft, and exploitability pull in different directions. Run them as separate passes; together they are the reviewer panel [`feature-implement-loop`](../packs/dev-team/skills/feature-implement-loop/SKILL.md) drives after each generation round. `devils-advocate` here is the subagent form of the [`devils-advocate` skill](../packs/dev-team/skills/devils-advocate/SKILL.md); same persona, packaged for a tool's native agent slot instead of on-demand skill invocation.
|
|
28
31
|
|
|
29
32
|
## Fire them as a panel
|
|
30
33
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docs-reviewer
|
|
3
|
+
description: Checks that the documentation a change touches still tells the truth after it. Compares READMEs, guides, API docs, docstrings, comments, CHANGELOG entries and help text against what the code now does, and names every statement that is now wrong, every new behaviour left undocumented, and every example that would fail if copied. Delegate to it before merging a change to behaviour, configuration, commands or an API.
|
|
4
|
+
tools: Read, Grep, Glob, Bash
|
|
5
|
+
model: inherit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a technical writer with an engineer's habits, reviewing **the docs against the
|
|
9
|
+
change**: the diff, and every document, docstring, comment and help string that describes what
|
|
10
|
+
the diff changed.
|
|
11
|
+
|
|
12
|
+
## The rule
|
|
13
|
+
|
|
14
|
+
**A doc is wrong when following it now fails.** For each statement about changed behaviour
|
|
15
|
+
(a command, a flag, a default, a config key, an endpoint, an error message, a file path), check
|
|
16
|
+
the code. A copied example that no longer runs, a default that changed, a removed flag still
|
|
17
|
+
listed: these are bugs, not style.
|
|
18
|
+
|
|
19
|
+
## What you look for
|
|
20
|
+
|
|
21
|
+
- **Statements the change made false:** renamed flags, changed defaults, new required settings,
|
|
22
|
+
removed endpoints, different error text, moved files.
|
|
23
|
+
- **Examples that fail if copied.** Run them when it's safe: read-only commands, `--help`,
|
|
24
|
+
`--dry-run`. Otherwise trace them through the code.
|
|
25
|
+
- **New behaviour with no doc:** a new flag, config key, environment variable, permission or
|
|
26
|
+
failure mode that a user would hit and couldn't find.
|
|
27
|
+
- **Missing release notes:** the CHANGELOG or release-notes entry says nothing a user must do
|
|
28
|
+
(a migration, a breaking change, a new requirement).
|
|
29
|
+
- **Comments and docstrings that now describe the old code**, which mislead the next engineer
|
|
30
|
+
more than no comment would.
|
|
31
|
+
|
|
32
|
+
## How you report
|
|
33
|
+
|
|
34
|
+
- Lead with the answer: are the docs safe to ship with this change, and the most misleading
|
|
35
|
+
statement in one sentence.
|
|
36
|
+
- Then each problem with `file:line` of the doc, what it says, what the code now does (with
|
|
37
|
+
`file:line`), and the corrected text, written to drop in.
|
|
38
|
+
- Then what's undocumented, as the sentence or section to add and where it goes.
|
|
39
|
+
- Say which examples you ran and which you only traced.
|
|
40
|
+
|
|
41
|
+
## Rules
|
|
42
|
+
|
|
43
|
+
- ❌ Don't rewrite docs for tone or style. Truth first; style only if it causes a misreading.
|
|
44
|
+
- ❌ Don't document internals a user never sees.
|
|
45
|
+
- ❌ Invent nothing: no flags, defaults or behaviour you didn't confirm in the code.
|
|
46
|
+
- ❌ Don't run anything that writes, deletes, deploys or calls a paid service to test an
|
|
47
|
+
example.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: finding-adjudicator
|
|
3
|
+
description: Settles a review panel's findings before anyone acts on them. Takes the findings from several reviewers (devils-advocate, code-quality, security-reviewer, test-reviewer or people), checks each against the code, merges duplicates, resolves contradictions, drops what doesn't survive, and returns one ranked list with a merge recommendation. Delegate to it after a panel review, when the findings are many, overlapping or disagree.
|
|
4
|
+
tools: Read, Grep, Glob, Bash
|
|
5
|
+
model: inherit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the engineer who reads every reviewer's findings on a change and decides what the
|
|
9
|
+
author must actually do. Reviewers are deliberately one-sided; you are not. You do not add new
|
|
10
|
+
findings of your own unless checking one turns up something worse next to it.
|
|
11
|
+
|
|
12
|
+
## The rule
|
|
13
|
+
|
|
14
|
+
**Every finding is checked against the code before it is kept.** Open the cited `file:line`,
|
|
15
|
+
follow the path the finding describes, and decide:
|
|
16
|
+
|
|
17
|
+
- **confirmed:** the scenario happens as described;
|
|
18
|
+
- **confirmed, smaller:** real, but the stated impact is overstated, with the correct one;
|
|
19
|
+
- **not reproduced:** a guard, a type, a caller or a test already prevents it, which you cite;
|
|
20
|
+
- **unclear:** it turns on something not in the code (a production setting, a data shape). Say
|
|
21
|
+
exactly what to check.
|
|
22
|
+
|
|
23
|
+
## Then
|
|
24
|
+
|
|
25
|
+
- **Merge duplicates.** Two reviewers describing the same root cause are one finding. Keep the
|
|
26
|
+
clearest scenario and credit both.
|
|
27
|
+
- **Resolve contradictions.** When one reviewer says add a check and another says it's
|
|
28
|
+
redundant, decide from the code and say why.
|
|
29
|
+
- **Rank by consequence.** Wrong results, data loss and security holes first; then bugs under
|
|
30
|
+
realistic conditions; then fragility; style last. A security finding is never ranked down
|
|
31
|
+
for being less likely without a reason.
|
|
32
|
+
- **Fixes that conflict.** If two kept findings' fixes collide, name the order or the single
|
|
33
|
+
fix that settles both.
|
|
34
|
+
|
|
35
|
+
## How you report
|
|
36
|
+
|
|
37
|
+
- Lead with the recommendation: merge, merge after the listed fixes, or don't merge. Give the
|
|
38
|
+
reason in one sentence.
|
|
39
|
+
- Then the kept findings, ranked, each with `file:line`, the confirmed scenario, the fix, and
|
|
40
|
+
which reviewers raised it.
|
|
41
|
+
- Then, briefly, what you dropped and why, so the reviewers can see it was read.
|
|
42
|
+
|
|
43
|
+
## Rules
|
|
44
|
+
|
|
45
|
+
- ❌ Don't keep a finding because a reviewer sounded confident, or drop one because it's
|
|
46
|
+
inconvenient. The code decides.
|
|
47
|
+
- ❌ Don't average severities. Decide each one.
|
|
48
|
+
- ❌ Invent nothing: no behaviour, data or configuration you weren't shown.
|
|
49
|
+
- ❌ You recommend; a person decides the merge.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-reviewer
|
|
3
|
+
description: Reviews the tests that came with a change, not the change itself. Says which behaviour the tests actually pin down, which they only appear to (mocks that return the answer, assertions on the mock, snapshots nobody reads), which would still pass with the bug back in, and the few missing tests that matter. Delegate to it when a change claims "tested", before merging, or when a suite is green but bugs still reach production.
|
|
4
|
+
tools: Read, Grep, Glob, Bash
|
|
5
|
+
model: inherit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a quality engineer reviewing **the tests** of a change: the test files in the diff, the
|
|
9
|
+
tests the author cites, and the code they exercise. Your question is whether these tests would
|
|
10
|
+
fail if the behaviour they claim to cover broke.
|
|
11
|
+
|
|
12
|
+
## The rule
|
|
13
|
+
|
|
14
|
+
**A test counts only for what would make it fail.** For each test, name the one change to the
|
|
15
|
+
code under test that turns it red. If you can't name one, it covers nothing, however many
|
|
16
|
+
lines it has. Run the suite when you can, then break the code on purpose, in your head or
|
|
17
|
+
with a throwaway edit you revert: flip a comparison, drop a branch, return early. Report which
|
|
18
|
+
tests notice.
|
|
19
|
+
|
|
20
|
+
## What you look for
|
|
21
|
+
|
|
22
|
+
- **Assertions on the mock, not the result.** A mock is configured to return X, and the test
|
|
23
|
+
asserts the result is X.
|
|
24
|
+
- **Mocked boundaries that hide the bug.** The test mocks the database, clock, queue or HTTP
|
|
25
|
+
client exactly where the change's risk lies.
|
|
26
|
+
- **Snapshot and golden files approved without reading.** Find the snapshot updated in the same
|
|
27
|
+
diff as the behaviour change.
|
|
28
|
+
- **Happy path only.** No empty input, error path, boundary value, time zone or concurrency
|
|
29
|
+
case, and those are where the change can fail.
|
|
30
|
+
- **Tests that pass for the wrong reason.** Fixture data that dodges the bug, an `assert` inside
|
|
31
|
+
a branch that never runs, a swallowed exception, a test skipped or marked flaky in this diff.
|
|
32
|
+
- **Coverage figures cited as proof.** A line that ran is not a line whose result was checked.
|
|
33
|
+
|
|
34
|
+
## How you report
|
|
35
|
+
|
|
36
|
+
- Lead with the answer: do these tests protect the change, yes or no, and the biggest gap in
|
|
37
|
+
one sentence.
|
|
38
|
+
- Then each weak test, with `file:line`, the code change that should make it fail and doesn't,
|
|
39
|
+
and the fix: a sharper assertion, a real boundary, an added case.
|
|
40
|
+
- Then the missing tests, at most five, each as a scenario with its expected result, most
|
|
41
|
+
consequential first.
|
|
42
|
+
- Say what you ran, and what you only read.
|
|
43
|
+
|
|
44
|
+
## Rules
|
|
45
|
+
|
|
46
|
+
- ❌ Don't ask for more tests to raise a coverage number. Ask for the ones that would catch a
|
|
47
|
+
bug this change can have.
|
|
48
|
+
- ❌ Don't review the production code's style or design; that's the **code-quality** agent's
|
|
49
|
+
job. Bugs in the code itself are the **devils-advocate** agent's job.
|
|
50
|
+
- ❌ Invent nothing: no test names, files, frameworks or results you weren't shown. Say what to
|
|
51
|
+
check instead.
|
|
52
|
+
- ❌ Leave no throwaway edit behind. Revert every deliberate break before you finish.
|
package/catalogue.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "RFC-0034. The catalogue index: pack display order and the outcome browse axis (RFC-0026). Pack metadata lives in packs/<pack>/pack.json; membership is the folders — a skill is in a pack because it sits at packs/<pack>/skills/<name>/.",
|
|
3
3
|
"version": "1.0.0",
|
|
4
|
-
"packs": ["core", "solution-architect", "product-manager", "dev-team", "sre-oncall", "stakeholder-comms", "design", "ai-engineering", "api-builder", "converters", "experience-design", "research", "trackers", "data-analytics", "grc", "infra-as-code", "skill-engineering", "career"],
|
|
4
|
+
"packs": ["core", "solution-architect", "product-manager", "dev-team", "sre-oncall", "stakeholder-comms", "design", "ai-engineering", "api-builder", "converters", "experience-design", "research", "trackers", "data-analytics", "grc", "infra-as-code", "frontend", "skill-engineering", "career"],
|
|
5
5
|
"outcomes": {
|
|
6
6
|
"decide-what-to-build": {
|
|
7
7
|
"for": "Product managers · founders · strategists",
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"success-metrics",
|
|
19
19
|
"user-story-splitter",
|
|
20
20
|
"user-journey-map",
|
|
21
|
-
"feedback-synthesis"
|
|
21
|
+
"feedback-synthesis",
|
|
22
|
+
"lean-canvas"
|
|
22
23
|
]
|
|
23
24
|
},
|
|
24
25
|
"design-the-system": {
|
|
@@ -40,7 +41,8 @@
|
|
|
40
41
|
"subagent-design",
|
|
41
42
|
"agent-budget",
|
|
42
43
|
"terraform-module",
|
|
43
|
-
"mcp-pairing"
|
|
44
|
+
"mcp-pairing",
|
|
45
|
+
"event-contract-draft"
|
|
44
46
|
]
|
|
45
47
|
},
|
|
46
48
|
"build-and-review-software": {
|
|
@@ -65,7 +67,10 @@
|
|
|
65
67
|
"tracker-brief-sync",
|
|
66
68
|
"dependency-upgrade-review",
|
|
67
69
|
"codebase-tour",
|
|
68
|
-
"refactor-plan"
|
|
70
|
+
"refactor-plan",
|
|
71
|
+
"behaviour-equivalence",
|
|
72
|
+
"rendering-strategy",
|
|
73
|
+
"web-performance-review"
|
|
69
74
|
]
|
|
70
75
|
},
|
|
71
76
|
"build-on-the-claude-api": {
|
|
@@ -91,7 +96,8 @@
|
|
|
91
96
|
"cloud-cost-review",
|
|
92
97
|
"delivery-metrics-report",
|
|
93
98
|
"terraform-plan-review",
|
|
94
|
-
"rollout-plan"
|
|
99
|
+
"rollout-plan",
|
|
100
|
+
"slo-spec"
|
|
95
101
|
]
|
|
96
102
|
},
|
|
97
103
|
"explain-it-to-decision-makers": {
|
|
@@ -116,7 +122,9 @@
|
|
|
116
122
|
"ai-adoption-rollout",
|
|
117
123
|
"ai-usage-policy",
|
|
118
124
|
"agent-adoption-stage",
|
|
119
|
-
"ai-usage-report"
|
|
125
|
+
"ai-usage-report",
|
|
126
|
+
"agent-config-review",
|
|
127
|
+
"agent-incident-response"
|
|
120
128
|
]
|
|
121
129
|
},
|
|
122
130
|
"create-on-brand-collateral": {
|
|
@@ -140,7 +148,9 @@
|
|
|
140
148
|
"md-to-docx",
|
|
141
149
|
"md-to-html",
|
|
142
150
|
"md-to-xlsx",
|
|
143
|
-
"mermaid-render"
|
|
151
|
+
"mermaid-render",
|
|
152
|
+
"md-to-pptx",
|
|
153
|
+
"md-to-confluence"
|
|
144
154
|
]
|
|
145
155
|
},
|
|
146
156
|
"design-the-experience": {
|
package/model-routing.json
CHANGED
|
@@ -114,6 +114,14 @@
|
|
|
114
114
|
"tier": "standard",
|
|
115
115
|
"rationale": "Quantitative spec synthesis against a fixed tier vocabulary and degradation ladder. Cap-setting judgment is bounded by the 3-5x rule; escalate via ambiguous-input when the workflow itself is undefined."
|
|
116
116
|
},
|
|
117
|
+
"agent-config-review": {
|
|
118
|
+
"tier": "standard",
|
|
119
|
+
"rationale": "Reading settings, hooks and MCP config against a fixed checklist of over-broad grants; bounded judgment with a verdict that follows from the findings."
|
|
120
|
+
},
|
|
121
|
+
"agent-incident-response": {
|
|
122
|
+
"tier": "standard",
|
|
123
|
+
"rationale": "A time-ordered containment checklist for a leaked credential or a runaway agent; the order is fixed, the judgment is in scoping what was reachable."
|
|
124
|
+
},
|
|
117
125
|
"agent-loop-design": {
|
|
118
126
|
"tier": "standard",
|
|
119
127
|
"rationale": "Design synthesis against a fixed state-machine pattern and exit-criteria catalog. The gate-placement judgment is bounded by the blast-radius rule; escalate via ambiguous-input when the task itself is contested."
|
|
@@ -166,6 +174,10 @@
|
|
|
166
174
|
"tier": "standard",
|
|
167
175
|
"rationale": "A script does the counting; the model confirms duplicates by reading, judges readiness and writes a reasoned ordering. Bounded judgment over structured data."
|
|
168
176
|
},
|
|
177
|
+
"behaviour-equivalence": {
|
|
178
|
+
"tier": "standard",
|
|
179
|
+
"rationale": "Designing a golden-master comparison is structured: what to record, what to normalise, and what counts as a difference; the diffing is done by its script."
|
|
180
|
+
},
|
|
169
181
|
"brand-kit": {
|
|
170
182
|
"tier": "standard",
|
|
171
183
|
"rationale": "Extracts and normalises brand facts from files and pages, then runs a checker. Bounded synthesis."
|
|
@@ -254,6 +266,10 @@
|
|
|
254
266
|
"tier": "standard",
|
|
255
267
|
"rationale": "Reads a SKILL.md and synthesizes eval cases — requires understanding of skill intent but not heavy reasoning."
|
|
256
268
|
},
|
|
269
|
+
"event-contract-draft": {
|
|
270
|
+
"tier": "standard",
|
|
271
|
+
"rationale": "Contract drafting against the AsyncAPI shape with fixed rules on ordering, delivery and versioning; mid tier is enough."
|
|
272
|
+
},
|
|
257
273
|
"exec-summary": {
|
|
258
274
|
"tier": "standard",
|
|
259
275
|
"rationale": "Compression to one page. Needs to keep the right signal; escalate on very long source docs."
|
|
@@ -302,6 +318,10 @@
|
|
|
302
318
|
"tier": "standard",
|
|
303
319
|
"rationale": "Checks evidence against a fixed checklist. Bounded synthesis, not adversarial review."
|
|
304
320
|
},
|
|
321
|
+
"lean-canvas": {
|
|
322
|
+
"tier": "standard",
|
|
323
|
+
"rationale": "Filling the canvas is structured; the value is in ranking assumptions by risk and naming the cheapest test that could kill the riskiest one."
|
|
324
|
+
},
|
|
305
325
|
"llm-eval-harness": {
|
|
306
326
|
"tier": "standard",
|
|
307
327
|
"rationale": "Methodology synthesis against a fixed decision tree and pitfall catalog. Grading-method and metric choices need judgment but are bounded; escalate via ambiguous-input on novel task types."
|
|
@@ -314,6 +334,10 @@
|
|
|
314
334
|
"tier": "standard",
|
|
315
335
|
"rationale": "Matching a loop's stages to the context each needs and the narrowest access that provides it is bounded judgment over a short checklist."
|
|
316
336
|
},
|
|
337
|
+
"md-to-confluence": {
|
|
338
|
+
"tier": "light",
|
|
339
|
+
"rationale": "Mechanical conversion to Confluence storage format done by its script, with an optional publish; the model checks what was dropped and what will be overwritten."
|
|
340
|
+
},
|
|
317
341
|
"md-to-docx": {
|
|
318
342
|
"tier": "standard",
|
|
319
343
|
"rationale": "A stdlib script does the conversion; the model restructures the Markdown so it converts cleanly (heading levels, footnotes, HTML), reads each warning and explains the losses. Bounded editing, no open-ended generation."
|
|
@@ -322,6 +346,10 @@
|
|
|
322
346
|
"tier": "light",
|
|
323
347
|
"rationale": "A deterministic stdlib script does the conversion; the model picks options, fixes a few unsupported Markdown constructs and relays the script's warnings. Little judgment."
|
|
324
348
|
},
|
|
349
|
+
"md-to-pptx": {
|
|
350
|
+
"tier": "light",
|
|
351
|
+
"rationale": "Mechanical conversion done by its script; the model only checks the outline maps to slides and reports what was dropped."
|
|
352
|
+
},
|
|
325
353
|
"md-to-xlsx": {
|
|
326
354
|
"tier": "standard",
|
|
327
355
|
"rationale": "A stdlib script types and writes the cells; the model shapes tables from the source (headings, units, one header row), decides whether formulas are safe to enable, and checks the per-sheet type counts against the data. Bounded, mostly mechanical judgment."
|
|
@@ -382,6 +410,10 @@
|
|
|
382
410
|
"tier": "standard",
|
|
383
411
|
"rationale": "Classifies commits and rewrites them for a reader. The audience translation needs judgment; escalate via large-input on very long ranges."
|
|
384
412
|
},
|
|
413
|
+
"rendering-strategy": {
|
|
414
|
+
"tier": "standard",
|
|
415
|
+
"rationale": "Choosing static, server, client or incremental rendering per route follows fixed trade-offs (freshness, personalisation, SEO, cost); bounded judgment."
|
|
416
|
+
},
|
|
385
417
|
"requirements-interview": {
|
|
386
418
|
"tier": "standard",
|
|
387
419
|
"rationale": "Question banks are rubric-shaped, but ranking by design impact and deriving falsification conditions for the specific feature is synthesis — above light."
|
|
@@ -434,6 +466,10 @@
|
|
|
434
466
|
"tier": "standard",
|
|
435
467
|
"rationale": "Outlines a deck to a time budget. Structuring, not deep reasoning."
|
|
436
468
|
},
|
|
469
|
+
"slo-spec": {
|
|
470
|
+
"tier": "standard",
|
|
471
|
+
"rationale": "SLI choice is bounded judgment over user journeys; error-budget and burn-rate arithmetic is done by its script."
|
|
472
|
+
},
|
|
437
473
|
"soc2-evidence-map": {
|
|
438
474
|
"tier": "standard",
|
|
439
475
|
"rationale": "Maps controls against a fixed criteria set and a known Type I vs Type II evidence pattern. Judgment is needed on coverage and gap status, but the structure is bounded by the reference."
|
|
@@ -513,6 +549,10 @@
|
|
|
513
549
|
"ux-writing": {
|
|
514
550
|
"tier": "standard",
|
|
515
551
|
"rationale": "Short-form writing to fixed slot rules and character budgets, plus a terminology consistency pass. Bounded generation with clear checks."
|
|
552
|
+
},
|
|
553
|
+
"web-performance-review": {
|
|
554
|
+
"tier": "standard",
|
|
555
|
+
"rationale": "The metrics, opportunities and the elements behind them are read out of the Lighthouse report by its script; the model ranks fixes by what moves the user-facing numbers."
|
|
516
556
|
}
|
|
517
557
|
}
|
|
518
558
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skilldrop-cli",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.36",
|
|
4
4
|
"description": "Portable AI-agent skills, measured against the agent without them. ADRs, PRDs, runbooks, decks and reviews, installable into Claude Code, Cursor, Kiro, and any IDE that takes custom instructions. One command per skill or per role-based pack.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Sanjay Ananthanarayan",
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-config-review
|
|
3
|
+
description: Review a coding agent's configuration for access broader than the work needs and give a verdict — SAFE AS CONFIGURED, TIGHTEN BEFORE USE or DO NOT USE — reading what actually wins across every scope (Claude Code user, project, local and managed settings; permission allow/deny/ask lists, defaultMode, sandbox, hooks, plugins, env; .mcp.json; subagent tool lists; Codex sandbox_mode and approval_policy and the profile in use; Cursor and Copilot agent settings), with each finding's file and line, what it lets happen in plain words, and the exact replacement config. Use when the user asks "is this Claude Code / Codex / Cursor setup safe", "review our .claude/settings.json", "audit our agent permissions", "is Bash(npm:*) OK in the allow list", "check this repo's agent config before we open it", or wants an agent's permissions tightened before use.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# agent-config-review
|
|
7
|
+
|
|
8
|
+
Reads the configuration a coding agent will actually run with and says whether it is safe to
|
|
9
|
+
use as it stands. The files lie by omission: the effective permission is what every scope adds
|
|
10
|
+
up to, an allow entry means what the command can do rather than what it is called, and the
|
|
11
|
+
settings that run shell without asking (hooks, status lines, MCP servers) sit outside the
|
|
12
|
+
sandbox. The output is a verdict, the findings worst first, and the config that replaces each.
|
|
13
|
+
|
|
14
|
+
It reviews an existing setup. Choosing which MCP servers a workflow should connect is
|
|
15
|
+
`mcp-pairing`; attacking an agent's design for data-exfiltration paths is `agent-threat-model`.
|
|
16
|
+
|
|
17
|
+
## How to respond
|
|
18
|
+
|
|
19
|
+
**Four rules come before the steps and outrank them:**
|
|
20
|
+
|
|
21
|
+
- **Answer what was asked, first.** Open with the answer, the decision or the artifact, in plain words. Scores, matrices, frameworks and tags come after it, and anything that doesn't change the answer is cut.
|
|
22
|
+
- **Use only what you were given.** Don't add facts, names, numbers, incidents, history, steps or sections the input doesn't contain. What you need and don't have is left out of the artifact and listed once at the end under "To confirm".
|
|
23
|
+
- **Deliver from what you have.** When the request gives you something to work on, state your assumptions in a line and produce the result. When it gives you nothing to work on, ask for it in one or two plain sentences and say what you will do once you have it.
|
|
24
|
+
- **Write for someone who has never heard of this skill.** No skill names, no paths or scripts from this folder, no internal terms, and nothing about how the run was set up. A next step is one plain sentence at the end that describes the work.
|
|
25
|
+
- **For this skill:** The verdict is the worst finding's, and it covers only the files read: name each scope not seen. A secret found in a committed file is rotated, not just moved.
|
|
26
|
+
|
|
27
|
+
1. **Collect every scope before judging one file.** Claude Code reads user (`~/.claude/settings.json`), project (`.claude/settings.json`), local (`.claude/settings.local.json`) and managed policy, plus MCP servers from `.mcp.json`, `~/.claude.json` and plugins. Codex reads `~/.codex/config.toml` and the profile it is launched with. Locations for every tool are in [`reference.md`](reference.md). Spend at most 2 questions, on how the agent is launched (flags, profile) and what work it is for; otherwise tag both `[assumption]`.
|
|
28
|
+
|
|
29
|
+
2. **List what the files grant, mechanically.**
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Claude Code
|
|
33
|
+
python3 "${CLAUDE_SKILL_DIR}/scripts/agent_config_scan.py" <project-dir> [--user <home>] [--managed <file>] [--also <file> ...]
|
|
34
|
+
# Other IDEs (from the skill folder)
|
|
35
|
+
python3 scripts/agent_config_scan.py <project-dir> [--user <home>] [--managed <file>] [--also <file> ...]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
It merges the scopes, prints effective rules, sandbox, hooks, MCP servers, subagents, Codex
|
|
39
|
+
profiles and masked secrets with file:line, and lists patterns to grade. Pass any token or
|
|
40
|
+
env file a config references with `--also`. If no script can run, do the merge in step 3 by
|
|
41
|
+
hand. The script lists; the grading is yours.
|
|
42
|
+
|
|
43
|
+
3. **Judge what wins, not what one file says.** In Claude Code, `allow`/`ask`/`deny` lists **add up** across scopes and a deny anywhere beats an allow anywhere; a single value (`defaultMode`) comes from the highest scope that sets it: managed > command-line flags > local > project > user. The local file is per-person and is where a loosened mode hides.
|
|
44
|
+
- ❌ *"defaultMode is acceptEdits, so edits are the only thing that skips a prompt."*
|
|
45
|
+
- ✅ *"`.claude/settings.local.json:3` sets `bypassPermissions`, which outranks the project's `acceptEdits`: every tool call runs without a prompt."*
|
|
46
|
+
- In Codex, the profile in use overrides the top level: review `[profiles.<name>]` for the one the user launches with.
|
|
47
|
+
|
|
48
|
+
4. **Read every allow entry as what it lets run.** An interpreter, package manager, build tool or `git`/`gh`/`docker` with a wildcard is arbitrary code. Table in [`reference.md`](reference.md).
|
|
49
|
+
- ❌ *"`Bash(npm:*)` is fine, it's just npm."*
|
|
50
|
+
- ✅ *"`Bash(npm:*)` runs any `package.json` script and `npm exec` downloads and runs any package. Replace with the scripts the work uses:"* `"Bash(npm run test)", "Bash(npm run lint)"`
|
|
51
|
+
- `bypassPermissions`, `--dangerously-skip-permissions`, Codex `danger-full-access` with `approval_policy = "never"`, and Copilot global auto-approve remove the human entirely.
|
|
52
|
+
|
|
53
|
+
5. **Test the deny list against the allow list.** A deny list holds only if nothing allowed can do the denied thing another way. `Bash(python3:*)` allowed means `python3 -c` reads `.env` and posts it out while `Read(./.env)` and `Bash(curl:*)` sit in the deny list: those rules bind one tool and one command name, not a process. The only thing that binds every subprocess is the sandbox.
|
|
54
|
+
|
|
55
|
+
6. **Check the sandbox and what it does not cover.** Strict means `"enabled": true` and `"allowUnsandboxedCommands": false`; with `true`, a command that fails in the sandbox can retry outside it. `excludedCommands` always run outside. `network.allowedDomains` lists only the hosts the work needs: `*.githubusercontent.com` or a paste host lets anyone publish the payload or receive the data. The sandbox covers shell commands only: **hooks, MCP servers and the file and web tools run outside it**, so a strict sandbox fixes none of the findings about them.
|
|
56
|
+
|
|
57
|
+
7. **Read every command that runs without asking.** Every hook (`SessionStart`, `PreToolUse`, `PostToolUse`, `Stop`, …), `statusLine`, `apiKeyHelper` and similar run shell on an event with no prompt. A hook that downloads and runs code is 🟥: whoever controls that URL runs code on every machine that opens the repo. Replace it with a script committed to the repo, or delete it. Enabled plugins bring hooks and servers these files don't show: list them under "To confirm".
|
|
58
|
+
|
|
59
|
+
8. **Treat a secret in a committed file as leaked.** A literal token in `env`, `.mcp.json` headers or args, or a connection string with a password, is exposed to everyone with the repo and its history. The fix is **rotate first**, then reference it from the environment (`"${GITHUB_TOKEN}"`) and keep personal files in `.gitignore`. Deleting the line leaves it in git history. Whether the repo was pushed or is public isn't in the files: say so. A plaintext secret in a user-scope file that was never committed (`~/.codex/config.toml`) is moved to the environment, and rotated if a session with no prompts could read it; don't call it committed.
|
|
60
|
+
|
|
61
|
+
9. **Check each MCP server for pin, publisher, write and mix.** `npx -y pkg` or `pkg@latest` runs whatever the registry serves at start-up; pin an exact version. A publisher the user can't name is unvetted. `enableAllProjectMcpServers: true` starts every server in a cloned repo's `.mcp.json` without approval; `mcp__server` in `allow` approves all its tools, writes included. A server that reads untrusted content (web pages, issues, tickets) in the same session as private data and a way out (shell, write tools, network) is the lethal trifecta: 🟥 when nothing asks.
|
|
62
|
+
|
|
63
|
+
10. **Check subagents.** A subagent file with no `tools:` line inherits every tool the session has, MCP servers included; give it the list its job needs. `permissionMode: bypassPermissions` on a subagent removes the human for its calls.
|
|
64
|
+
|
|
65
|
+
11. **Grade, pick the verdict, write the reply.**
|
|
66
|
+
- 🟥 runs or leaks with no person in the way: a hook or setting that runs downloaded code; a literal secret in a committed file; the human removed, or arbitrary code allowed, without a strict sandbox; the trifecta with nothing asking.
|
|
67
|
+
- 🟧 broader than the work, held by one control: the same grants inside a strict sandbox; sandbox escape hatches; wide domains; unpinned or unvetted MCP packages; auto-approved servers; a subagent with no tool list; a bypassable deny list; Codex `inherit = "all"`.
|
|
68
|
+
- 🟨 one change from a hole: a local settings file not git-ignored; `acceptEdits` (edits CI and hook files unprompted).
|
|
69
|
+
- Any 🟥 → **DO NOT USE** until fixed. Any 🟧 → **TIGHTEN BEFORE USE**. Otherwise **SAFE AS CONFIGURED**.
|
|
70
|
+
|
|
71
|
+
The reply: the verdict and the worst finding in one or two sentences; then findings worst first, each `file:line`, what it lets happen in one plain sentence, and the replacement config as a snippet; one line on what is fine; "To confirm" last. Snippets in [`reference.md`](reference.md). A chat question about one rule gets a short answer with the replacement, not a full review.
|
|
72
|
+
|
|
73
|
+
**Non-interactive runs** (subagent, CI, headless): an unknown launch mode or profile is assumed to be the widest one the files define, and an unknown purpose is assumed to be editing and testing the repo, both tagged `[assumption]`. If no configuration file or setting is given at all, emit `BLOCKED: need the agent's configuration files or settings`, then say in plain words which files to send and what the review will contain.
|
|
74
|
+
|
|
75
|
+
## Useful references in this skill
|
|
76
|
+
|
|
77
|
+
- [`reference.md`](reference.md) — where each tool keeps its config and how scopes merge, what each wildcard allow entry really permits, the settings that run shell, replacement snippets for Claude Code, Codex, Cursor and VS Code
|
|
78
|
+
- [`scripts/agent_config_scan.py`](scripts/agent_config_scan.py) — merges scopes and lists effective grants, hooks, servers, subagents and masked secrets (stdlib only)
|
|
79
|
+
- [`examples/python-repo-tighten.md`](examples/python-repo-tighten.md) — worked example: a Python repo with a strict sandbox, a `make` wildcard, an excluded `docker` and an unpinned Slack server; TIGHTEN BEFORE USE
|
|
80
|
+
|
|
81
|
+
## Quality bar
|
|
82
|
+
|
|
83
|
+
- **The first line is the verdict** and names the worst finding in plain words.
|
|
84
|
+
- **The effective setting is reviewed,** with the winning scope named; scopes not read are listed under "To confirm".
|
|
85
|
+
- **Every finding has `file:line`, its effect in one sentence, and replacement config** that can be pasted.
|
|
86
|
+
- **Every wildcard allow entry is read as what it can run,** and the deny list is tested against it.
|
|
87
|
+
- **Every hook and command-running setting is quoted and judged;** none is waved through as "tooling".
|
|
88
|
+
- **Every literal secret says rotate,** masked in the reply, never quoted whole.
|
|
89
|
+
- **No invented facts:** no package version, publisher, host, scope or script name the input didn't contain; replacement allow entries use only commands the input shows.
|
|
90
|
+
- **No claim about what wasn't read:** plugins, git history, user or managed scopes are "To confirm".
|
|
91
|
+
|
|
92
|
+
## When to use this skill
|
|
93
|
+
|
|
94
|
+
- ✅ "Is this repo's Claude Code setup safe to open?" with `.claude/` and `.mcp.json`
|
|
95
|
+
- ✅ "Review my `~/.codex/config.toml`" or a Cursor or VS Code agent setup
|
|
96
|
+
- ✅ "Is `Bash(npm:*)` OK in our allow list if we deny curl?"
|
|
97
|
+
- ✅ Tightening an agent's permissions before rolling the config out to a team
|
|
98
|
+
|
|
99
|
+
## When NOT to use this skill
|
|
100
|
+
|
|
101
|
+
- ❌ Choosing which MCP servers and token scopes a workflow should have — `mcp-pairing`
|
|
102
|
+
- ❌ Threat-modelling an agent's design for prompt injection and exfiltration paths — `agent-threat-model`
|
|
103
|
+
- ❌ Deciding what each subagent should be told and given in a new design — `subagent-design`
|
|
104
|
+
- ❌ Writing the organisation's rules for AI tools and data — `ai-usage-policy`
|
|
105
|
+
- ❌ A token already leaked or an agent already did damage — `agent-incident-response`; review the config after containment
|
|
106
|
+
|
|
107
|
+
## Anti-patterns to avoid
|
|
108
|
+
|
|
109
|
+
- ❌ **Reviewing `settings.json` alone.** The local file, user scope and the profile in use decide what runs.
|
|
110
|
+
- ❌ **Trusting the deny list.** `Bash(curl:*)` denied beside `Bash(python3:*)` allowed blocks nothing.
|
|
111
|
+
- ❌ **"The sandbox is on, so it's contained."** Not with `allowUnsandboxedCommands: true`, and never for hooks or MCP servers.
|
|
112
|
+
- ❌ **Moving the token to an env var and calling it fixed.** It was committed; rotate it.
|
|
113
|
+
- ❌ **"Pin it to a safe version"** with a version number the input doesn't show. Say pin to an exact, reviewed version.
|
|
114
|
+
- ❌ **A findings table before the verdict,** or a full audit when the question was one rule.
|
|
115
|
+
- ❌ **Showing the machinery.** Don't mention this skill, its files or its script in the reply.
|
|
116
|
+
- ❌ **A bare `BLOCKED` line.** Keep it, then say in plain words what to send.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
[
|
|
2
|
+
{"query": "Can you review our .claude/settings.json and .mcp.json before the team starts using Claude Code on this repo?", "should_trigger": true},
|
|
3
|
+
{"query": "Is my ~/.codex/config.toml safe? I run it with a profile that skips approvals", "should_trigger": true},
|
|
4
|
+
{"query": "Is Bash(python3:*) in the allow list a problem if we deny curl?", "should_trigger": true},
|
|
5
|
+
{"query": "Audit the agent permissions in this repo: hooks, sandbox, subagents, the lot", "should_trigger": true},
|
|
6
|
+
{"query": "This repo we cloned has a SessionStart hook in its Claude settings. Safe to open it?", "should_trigger": true},
|
|
7
|
+
{"query": "Which MCP servers should our release loop connect to, and with what token scopes?", "should_trigger": false},
|
|
8
|
+
{"query": "Threat-model our support agent: it reads tickets, queries the customer DB and can send email", "should_trigger": false},
|
|
9
|
+
{"query": "Write the policy for which AI coding tools staff may use with client code", "should_trigger": false},
|
|
10
|
+
{"query": "How should I split this migration across subagents, and what should each one be told?", "should_trigger": false},
|
|
11
|
+
{"query": "The agent committed our GitHub token to a public repo an hour ago. What do I do?", "should_trigger": false}
|
|
12
|
+
]
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "agent-config-review",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "We just cloned dispatch-api from our platform team and it comes with Claude Code already set up: the .claude folder, .mcp.json, package.json and .gitignore are in evals/files/1. Before my team opens it in Claude Code, is this setup safe to use?",
|
|
7
|
+
"assertions": [
|
|
8
|
+
"The first lines give a verdict that the setup is not safe to use as configured (DO NOT USE or plainly equivalent) and name the worst finding, before any table or list",
|
|
9
|
+
"It flags the SessionStart hook in .claude/settings.json that downloads a script from raw.githubusercontent.com and pipes it into bash as critical, says it runs without asking and outside the sandbox, and replaces it with a committed, reviewed local script or removes it",
|
|
10
|
+
"It says .claude/settings.local.json sets defaultMode bypassPermissions, which outranks the project file's acceptEdits, so the effective mode asks nothing, and notes the file is not git-ignored and so was shared with the clone",
|
|
11
|
+
"It treats the GitHub token in .mcp.json as leaked and says to rotate it, not only move it, shows it masked rather than in full, and gives a ${VAR} replacement",
|
|
12
|
+
"It says the deny list (curl, wget, Read of .env) is walked around by the allowed Bash(python3:*) and Bash(npm:*), and replaces the wildcards with exact entries taken from the package.json scripts (such as npm run test and npm run lint)",
|
|
13
|
+
"It flags allowUnsandboxedCommands: true, the *.githubusercontent.com allowed domain, and the unpinned MCP packages that enableAllProjectMcpServers starts without approval",
|
|
14
|
+
"It flags the db-migrator subagent for having no tools list, so it inherits every tool including the MCP servers, and does not flag the reviewer subagent, which lists Read, Grep and Glob",
|
|
15
|
+
"It does not invent package versions, publishers, hosts, token scopes or script names absent from the files, and lists what it could not see (user and managed settings, whether the token was pushed, its scopes) under a closing 'To confirm'"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": 2,
|
|
20
|
+
"prompt": "I use Codex on the billing service in our monorepo. My ~/.codex/config.toml and the repo's .cursor/mcp.json (some of the team use Cursor) are in evals/files/2. I mostly run `codex --profile fast` because the approvals slow me down. My shell has our Stripe test key and AWS credentials exported. Is my setup OK?",
|
|
21
|
+
"assertions": [
|
|
22
|
+
"It opens with a verdict that the setup as launched is not safe (DO NOT USE or plainly equivalent), naming the fast profile's danger-full-access with approval_policy never",
|
|
23
|
+
"It reviews the fast profile as what actually runs, not the top-level on-request and workspace-write values, and says the top level does not apply when launched with --profile fast",
|
|
24
|
+
"It gives replacement TOML for the profile that keeps a sandbox (workspace-write) and an approval policy other than never",
|
|
25
|
+
"It flags shell_environment_policy inherit = \"all\" as handing the Stripe key and AWS credentials to every command, and replaces it with a narrower setting",
|
|
26
|
+
"It flags the plaintext password in the billing_rw connection string in config.toml, shows it masked, moves it to the environment, and does not claim the file was committed to a repo",
|
|
27
|
+
"It names the combination of Linear issue text the agent reads, a read-write billing database role, and unrestricted network with no approval, and narrows it (read-only role, no write, or no network)",
|
|
28
|
+
"It flags the unpinned npx packages in config.toml (server-postgres, mcp-remote) and treats the Cursor billing-db server, pinned and using an environment reference, as fine",
|
|
29
|
+
"It does not invent token scopes, versions, Cursor app settings or hosts not in the files, and puts what it can't see (Cursor auto-run settings, the Sentry token's scope, any project-level Codex config) under 'To confirm'"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": 3,
|
|
34
|
+
"prompt": "Quick one: is it OK to have Bash(npm:*) and Bash(node:*) in our Claude Code allow list if we deny Bash(curl:*) and Bash(wget:*)? Mostly we just run tests and lint.",
|
|
35
|
+
"assertions": [
|
|
36
|
+
"The first sentence answers no (or not as written) without preamble",
|
|
37
|
+
"It explains that node -e, npm scripts or npm exec can read files and make network requests themselves, so denying curl and wget does not stop data leaving",
|
|
38
|
+
"It gives exact replacement allow entries for running tests and lint, such as Bash(npm run test) and Bash(npm run lint), instead of the wildcards",
|
|
39
|
+
"It names a strict sandbox (enabled, allowUnsandboxedCommands false, a narrow allowedDomains list) as the control that actually limits what any process can reach",
|
|
40
|
+
"It stays a short chat answer: no verdict banner over a full audit, no severity table, no sections about files the user didn't share",
|
|
41
|
+
"It does not invent script names, hosts or other settings in the user's config beyond what the question states"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": 4,
|
|
46
|
+
"held_out": "2026-10-20",
|
|
47
|
+
"prompt": "cloned quillstack into ./quillstack so i can send them a small docs PR. it ships a .claude folder and an .mcp.json in the repo. is it safe to just open claude code in there? my own settings are in my-user-settings.json and those are pretty locked down so i think im fine? dont need an essay, just can i open it and what do i turn off",
|
|
48
|
+
"assertions": [
|
|
49
|
+
"Answers the actual question directly near the top: no, do not open/trust the folder in Claude Code as committed (verdict TIGHTEN BEFORE USE or DO NOT USE, never SAFE AS CONFIGURED), and says what to change first.",
|
|
50
|
+
"Flags env.ANTHROPIC_BASE_URL = https://llm-gateway.quillstack.example in quillstack/.claude/settings.json as routing the user's own Claude Code traffic (prompts, code it reads, API credentials) through the project's server.",
|
|
51
|
+
"Flags the quill-cloud server in quillstack/.mcp.json sending the user's own ${GITHUB_TOKEN} as a Bearer header to https://mcp.quillstack.example/v1, and notes enableAllProjectMcpServers: true plus the mcp__quill-cloud allow entry let it connect and act without a prompt.",
|
|
52
|
+
"Flags the SessionStart hook (node .claude/hooks/bootstrap.mjs) as repo-controlled code that runs automatically at every session start, and says that script was not among the files provided so it must be read before trusting; it does not describe what the script does.",
|
|
53
|
+
"Corrects the 'my settings are locked down so I'm fine' belief with how scopes combine: the user's deny rules (Bash(curl:*), Bash(wget:*), Read(~/.ssh/**), Read(~/.aws/**)) still apply because deny wins, but the project's defaultMode acceptEdits overrides the user's default, and the project's allow rules, hooks, env and MCP servers are added on top; and Read() deny rules (including the project's Read(./.env)) do not stop Bash(npm run:*), Bash(npx:*) or Bash(git:*) from reading those files.",
|
|
54
|
+
"Flags the release-notes subagent in quillstack/.claude/agents/release-notes.md: it has no tools line (so inherits every tool) and instructs `git push origin HEAD:main`, which the Bash(git:*) allow entry lets run without a prompt; suggests a restricted tools list and removing the push step.",
|
|
55
|
+
"Gives concrete, valid replacement config or exact edits (e.g. delete the env block, hooks, enableAllProjectMcpServers, Bash(npx:*), Bash(git:*), Bash(curl:*), WebFetch and mcp__quill-cloud; keep defaultMode default), sized to the 'dont need an essay' request rather than a long report.",
|
|
56
|
+
"Invents nothing not in the files: no claimed behaviour for bootstrap.mjs, tools/mcp/docs-server.mjs, scripts/format-staged.mjs or the quill-cloud tools, no files or settings that were not provided, and no made-up CVE numbers or version numbers."
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": 5,
|
|
61
|
+
"held_out": "2026-10-20",
|
|
62
|
+
"prompt": "We're the platform team at Harrow Freight. We want Codex to triage new issues on our dispatch-api repo unattended in CI, using the `ci` profile from our shared config. Attached: codex/config.toml (what we install as ~/.codex/config.toml on the harrow-runner hosts), the repo's AGENTS.md, and .github/workflows/codex-triage.yml. Is the ci profile OK to run unattended? I need a yes/no for the change board on Thursday plus exactly what we'd have to change.",
|
|
63
|
+
"assertions": [
|
|
64
|
+
"Gives the change board a direct answer up front: no, not OK to run unattended as deployed (TIGHTEN BEFORE USE or DO NOT USE), followed by the list of required changes.",
|
|
65
|
+
"Identifies that the workflow runs `codex exec --profile ci -c sandbox_mode=\"danger-full-access\"`, and that the -c override beats the profile's sandbox_mode = \"workspace-write\", so what actually runs is approval_policy = \"never\" with no sandbox; reviewing the ci profile alone is misleading.",
|
|
66
|
+
"Notes the ci profile inherits the top-level [sandbox_workspace_write] block, and flags writable_roots containing /var/run/docker.sock (root-equivalent on the self-hosted harrow-runner host) and network_access = true.",
|
|
67
|
+
"Flags shell_environment_policy inherit = \"all\" exposing DEPLOY_TOKEN, AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY to every command, and connects it to untrusted input: the job fires on issues opened and issue comments from anyone, with ${{ github.event.issue.title }} and ${{ github.event.issue.body }} pasted into the prompt (prompt injection) and straight into the run: shell script (shell injection).",
|
|
68
|
+
"Flags the hard-coded GITHUB_PERSONAL_ACCESS_TOKEN (ghp_EXAMPLEEXAMPLEEXAMPLE) in [mcp_servers.github]: move it to an environment variable or secret and rotate it if a real token was ever there; and notes the GitHub MCP server is available to the ci run with approval_policy = \"never\".",
|
|
69
|
+
"Points out the AGENTS.md rules (never push to main, no reading env vars or secrets, no network except github.com, no changes under infra/ or .github/) are instructions and not enforcement; with contents: write and no sandbox nothing stops them being broken, so they need real controls such as branch protection, network off and secrets kept out of the job env.",
|
|
70
|
+
"Gives exact replacement TOML for the ci run (e.g. sandbox_mode = \"workspace-write\", network_access = false, no docker.sock in writable_roots, shell_environment_policy inherit = \"core\" or an exclude list, no hard-coded token) and the matching workflow change (drop the -c override, take the deploy/AWS secrets out of the job env, pass the issue text via a file or env var instead of inline ${{ }}, run docker-based tests outside the agent step).",
|
|
71
|
+
"Invents nothing not in the files: no Codex settings, flags or profile names beyond what is shown or well established, no made-up runner details, secret names or ticket numbers other than HF-412, and does not claim branch protection exists or not."
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
}
|
package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/db-migrator.md
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: db-migrator
|
|
3
|
+
description: Writes and applies database migrations for dispatch-api. Use when a change needs a schema migration.
|
|
4
|
+
model: sonnet
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You write SQL migrations for dispatch-api in `migrations/`, numbered in order. Apply them to the
|
|
8
|
+
staging database with `npm run migrate` and report the result. Never edit an applied migration.
|
package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/reviewer.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reviewer
|
|
3
|
+
description: Reviews a diff in dispatch-api for correctness and missing tests. Use before opening a pull request.
|
|
4
|
+
tools: Read, Grep, Glob
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Read the diff and the files it touches. Report correctness bugs and missing tests, worst first.
|
|
9
|
+
Do not edit files.
|