skilldrop-cli 0.13.2 → 0.13.3
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 +82 -80
- package/agents/README.md +3 -3
- package/bin/skilldrop.js +78 -17
- package/catalogue.json +111 -0
- package/contracts/catalogue.schema.json +32 -0
- package/contracts/loop.schema.json +2 -2
- package/contracts/pack.schema.json +34 -34
- package/package.json +3 -4
- package/packs/ai-engineering/pack.json +22 -0
- package/{skills → packs/ai-engineering/skills}/agent-adoption-stage/SKILL.md +2 -2
- package/packs/claude-api/pack.json +21 -0
- package/{skills → packs/claude-api/skills}/eval-harness-generator/SKILL.md +2 -2
- package/{skills → packs/claude-api/skills}/eval-harness-generator/manifest.json +1 -1
- package/{loops → packs/core/loops}/ship-a-draft/LOOP.md +1 -1
- package/packs/core/pack.json +21 -0
- package/{skills → packs/core/skills}/council-review/SKILL.md +1 -1
- package/{skills → packs/core/skills}/council-review/reference.md +2 -2
- package/{loops → packs/dev-team/loops}/build/LOOP.md +3 -3
- package/{loops → packs/dev-team/loops}/build/loop.json +1 -1
- package/{loops → packs/dev-team/loops}/release/LOOP.md +2 -2
- package/packs/dev-team/pack.json +22 -0
- package/{skills → packs/dev-team/skills}/agents-md-generator/reference.md +1 -1
- package/{skills → packs/dev-team/skills}/contribution-wizard/SKILL.md +5 -5
- package/{skills → packs/dev-team/skills}/contribution-wizard/manifest.json +1 -1
- package/{skills → packs/dev-team/skills}/devils-advocate/SKILL.md +1 -1
- package/{skills → packs/dev-team/skills}/pre-merge-review/SKILL.md +1 -1
- package/{loops → packs/product-manager/loops}/discover/LOOP.md +3 -3
- package/packs/product-manager/pack.json +22 -0
- package/{loops → packs/solution-architect/loops}/design/LOOP.md +2 -2
- package/packs/solution-architect/pack.json +22 -0
- package/{loops → packs/sre-oncall/loops}/operate/LOOP.md +1 -1
- package/packs/sre-oncall/pack.json +22 -0
- package/packs/stakeholder-comms/pack.json +22 -0
- package/{skills → packs/stakeholder-comms/skills}/deck-builder/SKILL.md +1 -1
- package/packs.json +0 -229
- /package/{skills → packs/ai-engineering/skills}/agent-adoption-stage/evals/eval_queries.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-adoption-stage/evals/evals.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-adoption-stage/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-budget/SKILL.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-budget/evals/eval_queries.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-budget/evals/evals.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-budget/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-budget/templates/budget-spec.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-loop-design/SKILL.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-loop-design/evals/eval_queries.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-loop-design/evals/evals.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-loop-design/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-loop-design/templates/loop-spec.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-threat-model/SKILL.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-threat-model/evals/eval_queries.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-threat-model/evals/evals.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-threat-model/examples/support-triage-agent.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-threat-model/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-threat-model/reference.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/agent-threat-model/templates/agent-threat-model.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-adoption-rollout/SKILL.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-adoption-rollout/evals/eval_queries.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-adoption-rollout/evals/evals.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-adoption-rollout/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-readiness-assessment/SKILL.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-readiness-assessment/evals/eval_queries.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-readiness-assessment/evals/evals.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-readiness-assessment/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-policy/SKILL.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-policy/evals/eval_queries.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-policy/evals/evals.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-policy/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-report/SKILL.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-report/examples/weekly-engineering-team.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-report/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-report/scripts/build_report.py +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-report/templates/report-per-user.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-report/templates/report-team-rollup.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-usage-report/templates/usage-event-schema.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-use-case-triage/SKILL.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-use-case-triage/evals/eval_queries.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-use-case-triage/evals/evals.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/ai-use-case-triage/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/llm-eval-harness/SKILL.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/llm-eval-harness/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/llm-eval-harness/reference.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/llm-eval-harness/templates/eval-plan.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/llm-eval-harness/templates/golden-case.jsonl +0 -0
- /package/{skills → packs/ai-engineering/skills}/subagent-design/SKILL.md +0 -0
- /package/{skills → packs/ai-engineering/skills}/subagent-design/evals/eval_queries.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/subagent-design/evals/evals.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/subagent-design/manifest.json +0 -0
- /package/{skills → packs/ai-engineering/skills}/subagent-design/templates/orchestration-plan.md +0 -0
- /package/{skills → packs/claude-api/skills}/prompt-caching-advisor/SKILL.md +0 -0
- /package/{skills → packs/claude-api/skills}/prompt-caching-advisor/manifest.json +0 -0
- /package/{skills → packs/claude-api/skills}/token-budget-estimator/SKILL.md +0 -0
- /package/{skills → packs/claude-api/skills}/token-budget-estimator/manifest.json +0 -0
- /package/{skills → packs/claude-api/skills}/tool-use-schema-writer/SKILL.md +0 -0
- /package/{skills → packs/claude-api/skills}/tool-use-schema-writer/manifest.json +0 -0
- /package/{loops → packs/core/loops}/ship-a-draft/evals/eval_queries.json +0 -0
- /package/{loops → packs/core/loops}/ship-a-draft/evals/evals.json +0 -0
- /package/{loops → packs/core/loops}/ship-a-draft/loop.json +0 -0
- /package/{skills → packs/core/skills}/brief-intake/SKILL.md +0 -0
- /package/{skills → packs/core/skills}/brief-intake/evals/eval_queries.json +0 -0
- /package/{skills → packs/core/skills}/brief-intake/evals/evals.json +0 -0
- /package/{skills → packs/core/skills}/brief-intake/manifest.json +0 -0
- /package/{skills → packs/core/skills}/brief-intake/templates/brief-adr.md +0 -0
- /package/{skills → packs/core/skills}/brief-intake/templates/brief-decision-log.md +0 -0
- /package/{skills → packs/core/skills}/brief-intake/templates/brief-deck.md +0 -0
- /package/{skills → packs/core/skills}/brief-intake/templates/brief-design-doc.md +0 -0
- /package/{skills → packs/core/skills}/brief-intake/templates/brief-exec-summary.md +0 -0
- /package/{skills → packs/core/skills}/brief-intake/templates/brief-generic.md +0 -0
- /package/{skills → packs/core/skills}/brief-intake/templates/brief-runbook.md +0 -0
- /package/{skills → packs/core/skills}/brief-intake/templates/brief-tech-comparison.md +0 -0
- /package/{skills → packs/core/skills}/council-review/evals/eval_queries.json +0 -0
- /package/{skills → packs/core/skills}/council-review/evals/evals.json +0 -0
- /package/{skills → packs/core/skills}/council-review/examples/redis-cache-decision.md +0 -0
- /package/{skills → packs/core/skills}/council-review/manifest.json +0 -0
- /package/{skills → packs/core/skills}/council-review/seats/architect.md +0 -0
- /package/{skills → packs/core/skills}/council-review/seats/bench.md +0 -0
- /package/{skills → packs/core/skills}/council-review/seats/operator.md +0 -0
- /package/{skills → packs/core/skills}/council-review/seats/pragmatist.md +0 -0
- /package/{skills → packs/core/skills}/council-review/seats/security-engineer.md +0 -0
- /package/{skills → packs/core/skills}/council-review/seats/user-advocate.md +0 -0
- /package/{skills → packs/core/skills}/council-review/templates/council-review.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/SKILL.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/evals/eval_queries.json +0 -0
- /package/{skills → packs/core/skills}/doc-critique/evals/evals.json +0 -0
- /package/{skills → packs/core/skills}/doc-critique/examples/design-doc-critique.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/manifest.json +0 -0
- /package/{skills → packs/core/skills}/doc-critique/rubrics/adr.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/rubrics/decision-log.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/rubrics/deck.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/rubrics/design-doc.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/rubrics/exec-summary.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/rubrics/generic.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/rubrics/runbook.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/rubrics/tech-comparison.md +0 -0
- /package/{skills → packs/core/skills}/doc-critique/templates/critique.md +0 -0
- /package/{skills → packs/core/skills}/output-hygiene/SKILL.md +0 -0
- /package/{skills → packs/core/skills}/output-hygiene/evals/eval_queries.json +0 -0
- /package/{skills → packs/core/skills}/output-hygiene/evals/evals.json +0 -0
- /package/{skills → packs/core/skills}/output-hygiene/manifest.json +0 -0
- /package/{skills → packs/core/skills}/output-hygiene/reference.md +0 -0
- /package/{skills → packs/core/skills}/output-hygiene/scripts/scrub.py +0 -0
- /package/{loops → packs/dev-team/loops}/build/evals/eval_queries.json +0 -0
- /package/{loops → packs/dev-team/loops}/build/evals/evals.json +0 -0
- /package/{loops → packs/dev-team/loops}/release/loop.json +0 -0
- /package/{skills → packs/dev-team/skills}/accessibility-audit/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/accessibility-audit/examples/login-form.md +0 -0
- /package/{skills → packs/dev-team/skills}/accessibility-audit/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/accessibility-audit/reference.md +0 -0
- /package/{skills → packs/dev-team/skills}/agents-md-generator/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/agents-md-generator/evals/eval_queries.json +0 -0
- /package/{skills → packs/dev-team/skills}/agents-md-generator/evals/evals.json +0 -0
- /package/{skills → packs/dev-team/skills}/agents-md-generator/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/agents-md-generator/templates/agents-md.md +0 -0
- /package/{skills → packs/dev-team/skills}/bug-triage/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/bug-triage/evals/eval_queries.json +0 -0
- /package/{skills → packs/dev-team/skills}/bug-triage/evals/evals.json +0 -0
- /package/{skills → packs/dev-team/skills}/bug-triage/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/bug-triage/templates/bug-ticket.md +0 -0
- /package/{skills → packs/dev-team/skills}/devils-advocate/evals/eval_queries.json +0 -0
- /package/{skills → packs/dev-team/skills}/devils-advocate/evals/evals.json +0 -0
- /package/{skills → packs/dev-team/skills}/devils-advocate/examples/rate-limiter-review.md +0 -0
- /package/{skills → packs/dev-team/skills}/devils-advocate/lenses/adversarial-review.md +0 -0
- /package/{skills → packs/dev-team/skills}/devils-advocate/lenses/edge-cases.md +0 -0
- /package/{skills → packs/dev-team/skills}/devils-advocate/lenses/future-proofing.md +0 -0
- /package/{skills → packs/dev-team/skills}/devils-advocate/lenses/test-coverage.md +0 -0
- /package/{skills → packs/dev-team/skills}/devils-advocate/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/devils-advocate/templates/challenge.md +0 -0
- /package/{skills → packs/dev-team/skills}/feature-implement-loop/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/feature-implement-loop/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/launch-readiness/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/launch-readiness/evals/eval_queries.json +0 -0
- /package/{skills → packs/dev-team/skills}/launch-readiness/evals/evals.json +0 -0
- /package/{skills → packs/dev-team/skills}/launch-readiness/examples/schema-change-revise.md +0 -0
- /package/{skills → packs/dev-team/skills}/launch-readiness/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/launch-readiness/templates/readiness-report.md +0 -0
- /package/{skills → packs/dev-team/skills}/migration-plan/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/migration-plan/evals/eval_queries.json +0 -0
- /package/{skills → packs/dev-team/skills}/migration-plan/evals/evals.json +0 -0
- /package/{skills → packs/dev-team/skills}/migration-plan/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/migration-plan/templates/migration-plan.md +0 -0
- /package/{skills → packs/dev-team/skills}/pre-merge-review/evals/eval_queries.json +0 -0
- /package/{skills → packs/dev-team/skills}/pre-merge-review/evals/evals.json +0 -0
- /package/{skills → packs/dev-team/skills}/pre-merge-review/examples/pre-merge-verdict.md +0 -0
- /package/{skills → packs/dev-team/skills}/pre-merge-review/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/pre-merge-review/scripts/gate.py +0 -0
- /package/{skills → packs/dev-team/skills}/release-notes/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/release-notes/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/release-notes/templates/release-notes.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-onboard/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-onboard/evals/eval_queries.json +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-onboard/evals/evals.json +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-onboard/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-onboard/reference.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-onboard/templates/github-actions-sonar-server.yml.tmpl +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-onboard/templates/github-actions-sonarcloud.yml.tmpl +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-onboard/templates/readme-snippet.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-onboard/templates/sonar-project.properties.tmpl +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/evals/eval_queries.json +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/evals/evals.json +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/lenses/bugs.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/lenses/code-smells.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/lenses/coverage-and-duplication.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/lenses/security-hotspots.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/lenses/vulnerabilities.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/reference.md +0 -0
- /package/{skills → packs/dev-team/skills}/sonar-review/templates/report.md +0 -0
- /package/{skills → packs/dev-team/skills}/test-plan-generator/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/test-plan-generator/evals/eval_queries.json +0 -0
- /package/{skills → packs/dev-team/skills}/test-plan-generator/evals/evals.json +0 -0
- /package/{skills → packs/dev-team/skills}/test-plan-generator/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/test-plan-generator/templates/test-plan.md +0 -0
- /package/{skills → packs/dev-team/skills}/user-story-splitter/SKILL.md +0 -0
- /package/{skills → packs/dev-team/skills}/user-story-splitter/evals/eval_queries.json +0 -0
- /package/{skills → packs/dev-team/skills}/user-story-splitter/evals/evals.json +0 -0
- /package/{skills → packs/dev-team/skills}/user-story-splitter/examples/notifications-epic.md +0 -0
- /package/{skills → packs/dev-team/skills}/user-story-splitter/manifest.json +0 -0
- /package/{skills → packs/dev-team/skills}/user-story-splitter/templates/story.md +0 -0
- /package/{loops → packs/product-manager/loops}/discover/evals/eval_queries.json +0 -0
- /package/{loops → packs/product-manager/loops}/discover/evals/evals.json +0 -0
- /package/{loops → packs/product-manager/loops}/discover/loop.json +0 -0
- /package/{skills → packs/product-manager/skills}/business-case/SKILL.md +0 -0
- /package/{skills → packs/product-manager/skills}/business-case/examples/build-vs-buy-flags.md +0 -0
- /package/{skills → packs/product-manager/skills}/business-case/manifest.json +0 -0
- /package/{skills → packs/product-manager/skills}/business-case/templates/business-case.md +0 -0
- /package/{skills → packs/product-manager/skills}/okr-cascade/SKILL.md +0 -0
- /package/{skills → packs/product-manager/skills}/okr-cascade/evals/eval_queries.json +0 -0
- /package/{skills → packs/product-manager/skills}/okr-cascade/evals/evals.json +0 -0
- /package/{skills → packs/product-manager/skills}/okr-cascade/manifest.json +0 -0
- /package/{skills → packs/product-manager/skills}/okr-cascade/templates/okr-cascade.md +0 -0
- /package/{skills → packs/product-manager/skills}/prd-draft/SKILL.md +0 -0
- /package/{skills → packs/product-manager/skills}/prd-draft/evals/eval_queries.json +0 -0
- /package/{skills → packs/product-manager/skills}/prd-draft/evals/evals.json +0 -0
- /package/{skills → packs/product-manager/skills}/prd-draft/manifest.json +0 -0
- /package/{skills → packs/product-manager/skills}/prd-draft/templates/prd.md +0 -0
- /package/{skills → packs/product-manager/skills}/prfaq/SKILL.md +0 -0
- /package/{skills → packs/product-manager/skills}/prfaq/evals/eval_queries.json +0 -0
- /package/{skills → packs/product-manager/skills}/prfaq/evals/evals.json +0 -0
- /package/{skills → packs/product-manager/skills}/prfaq/manifest.json +0 -0
- /package/{skills → packs/product-manager/skills}/prfaq/templates/prfaq.md +0 -0
- /package/{skills → packs/product-manager/skills}/requirements-interview/SKILL.md +0 -0
- /package/{skills → packs/product-manager/skills}/requirements-interview/evals/eval_queries.json +0 -0
- /package/{skills → packs/product-manager/skills}/requirements-interview/evals/evals.json +0 -0
- /package/{skills → packs/product-manager/skills}/requirements-interview/manifest.json +0 -0
- /package/{skills → packs/product-manager/skills}/requirements-interview/templates/interview-kit.md +0 -0
- /package/{skills → packs/product-manager/skills}/strategy-analysis/SKILL.md +0 -0
- /package/{skills → packs/product-manager/skills}/strategy-analysis/evals/eval_queries.json +0 -0
- /package/{skills → packs/product-manager/skills}/strategy-analysis/evals/evals.json +0 -0
- /package/{skills → packs/product-manager/skills}/strategy-analysis/examples/market-entry-tows.md +0 -0
- /package/{skills → packs/product-manager/skills}/strategy-analysis/manifest.json +0 -0
- /package/{skills → packs/product-manager/skills}/success-metrics/SKILL.md +0 -0
- /package/{skills → packs/product-manager/skills}/success-metrics/evals/eval_queries.json +0 -0
- /package/{skills → packs/product-manager/skills}/success-metrics/evals/evals.json +0 -0
- /package/{skills → packs/product-manager/skills}/success-metrics/manifest.json +0 -0
- /package/{skills → packs/product-manager/skills}/success-metrics/templates/metrics-plan.md +0 -0
- /package/{skills → packs/product-manager/skills}/user-journey-map/SKILL.md +0 -0
- /package/{skills → packs/product-manager/skills}/user-journey-map/evals/eval_queries.json +0 -0
- /package/{skills → packs/product-manager/skills}/user-journey-map/evals/evals.json +0 -0
- /package/{skills → packs/product-manager/skills}/user-journey-map/examples/b2b-saas-onboarding.md +0 -0
- /package/{skills → packs/product-manager/skills}/user-journey-map/manifest.json +0 -0
- /package/{skills → packs/product-manager/skills}/user-journey-map/templates/journey-map.md +0 -0
- /package/{loops → packs/solution-architect/loops}/design/evals/eval_queries.json +0 -0
- /package/{loops → packs/solution-architect/loops}/design/evals/evals.json +0 -0
- /package/{loops → packs/solution-architect/loops}/design/loop.json +0 -0
- /package/{skills → packs/solution-architect/skills}/adr-generator/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/adr-generator/evals/eval_queries.json +0 -0
- /package/{skills → packs/solution-architect/skills}/adr-generator/evals/evals.json +0 -0
- /package/{skills → packs/solution-architect/skills}/adr-generator/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/adr-generator/templates/madr.md +0 -0
- /package/{skills → packs/solution-architect/skills}/adr-generator/templates/nygard.md +0 -0
- /package/{skills → packs/solution-architect/skills}/api-contract-draft/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/api-contract-draft/evals/eval_queries.json +0 -0
- /package/{skills → packs/solution-architect/skills}/api-contract-draft/evals/evals.json +0 -0
- /package/{skills → packs/solution-architect/skills}/api-contract-draft/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/api-contract-draft/reference.md +0 -0
- /package/{skills → packs/solution-architect/skills}/api-contract-draft/templates/openapi-skeleton.yaml +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/evals/eval_queries.json +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/evals/evals.json +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/examples/aws-three-tier.md +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/examples/c4-container-saas.md +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/examples/microservices-sequence.md +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/templates/c4-container.puml +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/templates/mermaid-aws.md +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/templates/mermaid-flowchart.md +0 -0
- /package/{skills → packs/solution-architect/skills}/architecture-diagrams/templates/mermaid-sequence.md +0 -0
- /package/{skills → packs/solution-architect/skills}/data-contract/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/data-contract/evals/eval_queries.json +0 -0
- /package/{skills → packs/solution-architect/skills}/data-contract/evals/evals.json +0 -0
- /package/{skills → packs/solution-architect/skills}/data-contract/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/data-contract/reference.md +0 -0
- /package/{skills → packs/solution-architect/skills}/data-contract/templates/data-contract.md +0 -0
- /package/{skills → packs/solution-architect/skills}/db-schema-design/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/db-schema-design/evals/eval_queries.json +0 -0
- /package/{skills → packs/solution-architect/skills}/db-schema-design/evals/evals.json +0 -0
- /package/{skills → packs/solution-architect/skills}/db-schema-design/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/db-schema-design/reference.md +0 -0
- /package/{skills → packs/solution-architect/skills}/db-schema-design/templates/schema-design.md +0 -0
- /package/{skills → packs/solution-architect/skills}/design-doc/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/design-doc/evals/eval_queries.json +0 -0
- /package/{skills → packs/solution-architect/skills}/design-doc/evals/evals.json +0 -0
- /package/{skills → packs/solution-architect/skills}/design-doc/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/design-doc/templates/design-doc.md +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/evals/eval_queries.json +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/evals/evals.json +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/reference.md +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/requirements.txt +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/scripts/_figma_client.py +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/scripts/frame_to_mermaid.py +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/scripts/inspect_file.py +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/scripts/list_comments.py +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/scripts/post_comment.py +0 -0
- /package/{skills → packs/solution-architect/skills}/figma-diagrams/templates/figjam-import.json +0 -0
- /package/{skills → packs/solution-architect/skills}/nfr-spec/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/nfr-spec/evals/eval_queries.json +0 -0
- /package/{skills → packs/solution-architect/skills}/nfr-spec/evals/evals.json +0 -0
- /package/{skills → packs/solution-architect/skills}/nfr-spec/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/nfr-spec/reference.md +0 -0
- /package/{skills → packs/solution-architect/skills}/nfr-spec/templates/nfr-spec.md +0 -0
- /package/{skills → packs/solution-architect/skills}/reverse-architecture/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/reverse-architecture/evals/eval_queries.json +0 -0
- /package/{skills → packs/solution-architect/skills}/reverse-architecture/evals/evals.json +0 -0
- /package/{skills → packs/solution-architect/skills}/reverse-architecture/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/reverse-architecture/reference.md +0 -0
- /package/{skills → packs/solution-architect/skills}/reverse-architecture/templates/description.md +0 -0
- /package/{skills → packs/solution-architect/skills}/reverse-architecture/templates/extraction.md +0 -0
- /package/{skills → packs/solution-architect/skills}/tech-comparison-matrix/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/tech-comparison-matrix/examples/queue-selection.md +0 -0
- /package/{skills → packs/solution-architect/skills}/tech-comparison-matrix/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/tech-comparison-matrix/templates/matrix.md +0 -0
- /package/{skills → packs/solution-architect/skills}/threat-model/SKILL.md +0 -0
- /package/{skills → packs/solution-architect/skills}/threat-model/evals/eval_queries.json +0 -0
- /package/{skills → packs/solution-architect/skills}/threat-model/evals/evals.json +0 -0
- /package/{skills → packs/solution-architect/skills}/threat-model/examples/document-upload.md +0 -0
- /package/{skills → packs/solution-architect/skills}/threat-model/manifest.json +0 -0
- /package/{skills → packs/solution-architect/skills}/threat-model/reference.md +0 -0
- /package/{loops → packs/sre-oncall/loops}/operate/evals/eval_queries.json +0 -0
- /package/{loops → packs/sre-oncall/loops}/operate/evals/evals.json +0 -0
- /package/{loops → packs/sre-oncall/loops}/operate/loop.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/capacity-cost-model/SKILL.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/capacity-cost-model/manifest.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/capacity-cost-model/reference.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/capacity-cost-model/templates/cost-model.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/incident-comms/SKILL.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/incident-comms/evals/eval_queries.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/incident-comms/evals/evals.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/incident-comms/manifest.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/incident-comms/reference.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/incident-comms/templates/messages.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/observability-plan/SKILL.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/observability-plan/evals/eval_queries.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/observability-plan/evals/evals.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/observability-plan/manifest.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/observability-plan/reference.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/observability-plan/templates/observability-plan.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/postmortem-generator/SKILL.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/postmortem-generator/evals/eval_queries.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/postmortem-generator/evals/evals.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/postmortem-generator/manifest.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/postmortem-generator/templates/postmortem.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/runbook-generator/SKILL.md +0 -0
- /package/{skills → packs/sre-oncall/skills}/runbook-generator/evals/eval_queries.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/runbook-generator/evals/evals.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/runbook-generator/manifest.json +0 -0
- /package/{skills → packs/sre-oncall/skills}/runbook-generator/templates/runbook.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/audience-profile/SKILL.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/audience-profile/evals/eval_queries.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/audience-profile/evals/evals.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/audience-profile/manifest.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/audience-profile/reference.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/decision-log/SKILL.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/decision-log/evals/eval_queries.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/decision-log/evals/evals.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/decision-log/manifest.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/deck-builder/evals/eval_queries.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/deck-builder/evals/evals.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/deck-builder/examples/exec-board-update.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/deck-builder/examples/templated-brand-deck.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/deck-builder/manifest.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/deck-builder/reference.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/deck-builder/requirements.txt +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/deck-builder/scripts/build_deck.py +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/deck-builder/templates/deck-spec.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/deck-builder/templates/palettes.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/exec-summary/SKILL.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/exec-summary/evals/eval_queries.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/exec-summary/evals/evals.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/exec-summary/manifest.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/exec-summary/templates/exec-summary.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/guide-builder/SKILL.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/guide-builder/examples/local-setup-guide.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/guide-builder/manifest.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/guide-builder/templates/api-reference.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/guide-builder/templates/design-walkthrough.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/guide-builder/templates/setup-guide.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/slide-outliner/SKILL.md +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/slide-outliner/evals/eval_queries.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/slide-outliner/evals/evals.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/slide-outliner/manifest.json +0 -0
- /package/{skills → packs/stakeholder-comms/skills}/slide-outliner/templates/deck-outline.md +0 -0
package/bin/skilldrop.js
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* or any directory, from the bundled catalog or any third-party catalog
|
|
4
4
|
* (--from <path | git-url[#ref]>). Zero dependencies; copy-only, never executes
|
|
5
5
|
* catalog content at install time.
|
|
6
|
-
* Reads
|
|
6
|
+
* Reads three catalog shapes: skilldrop pack folders (packs/<p>/pack.json + packs/<p>/skills/),
|
|
7
|
+
* flat skilldrop (skills/ + packs.json), and agentbundle (packs/<p>/pack.toml + .apm/skills).
|
|
7
8
|
* Design: skilldrop-cli-design/skilldrop-cli-design.md
|
|
8
9
|
* Scope: docs/rfcs/0002-skilldrop-cli.md, docs/rfcs/0003-third-party-catalogs.md,
|
|
9
10
|
* docs/rfcs/0014-agentbundle-interop.md (the agentbundle reader)
|
|
@@ -36,6 +37,7 @@ const HELP = `skilldrop — portable AI-agent skills for Claude Code, Cursor, Ki
|
|
|
36
37
|
Usage:
|
|
37
38
|
skilldrop list [--from <src>] all skills in a catalog (name, version, tier)
|
|
38
39
|
skilldrop info <skill> [--from <src>] description, related, packs, deps
|
|
40
|
+
skilldrop info --pack <name> a pack's skills, loops, and what to try first (RFC-0032)
|
|
39
41
|
skilldrop packs [--from <src>] role-based packs
|
|
40
42
|
skilldrop agents [--from <src>] reviewer subagents in a catalog
|
|
41
43
|
skilldrop loops [--from <src>] loops — sequenced stages over skills (RFC-0028)
|
|
@@ -65,8 +67,8 @@ Usage:
|
|
|
65
67
|
|
|
66
68
|
Catalogs:
|
|
67
69
|
(default) the catalog bundled with this package
|
|
68
|
-
--from <dir|url> a skilldrop catalog (skills/<name>/
|
|
69
|
-
agentbundle one (packs/<pack>/.apm/skills/<name>/SKILL.md); a git URL
|
|
70
|
+
--from <dir|url> a skilldrop catalog (packs/<pack>/skills/<name>/ or flat skills/<name>/) OR
|
|
71
|
+
an agentbundle one (packs/<pack>/.apm/skills/<name>/SKILL.md); a git URL
|
|
70
72
|
works for either — append #<branch-or-tag> to pin
|
|
71
73
|
|
|
72
74
|
Install/update/uninstall targets (pick one):
|
|
@@ -107,7 +109,7 @@ function parseArgs(argv) {
|
|
|
107
109
|
const out = { _: [], flags: {} };
|
|
108
110
|
for (let i = 0; i < argv.length; i++) {
|
|
109
111
|
const a = argv[i];
|
|
110
|
-
if (a === "--pack" || a === "--ide" || a === "--dest" || a === "--from" || a === "--panel") out.flags[a.slice(2)] = argv[++i];
|
|
112
|
+
if (a === "--pack" || a === "--ide" || a === "--dest" || a === "--from" || a === "--panel" || a === "--profile") out.flags[a.slice(2)] = argv[++i];
|
|
111
113
|
else if (a.startsWith("--")) out.flags[a.slice(2)] = true;
|
|
112
114
|
else out._.push(a);
|
|
113
115
|
}
|
|
@@ -115,15 +117,18 @@ function parseArgs(argv) {
|
|
|
115
117
|
}
|
|
116
118
|
|
|
117
119
|
/* ---------- catalogs ----------
|
|
118
|
-
|
|
119
|
-
"
|
|
120
|
+
Three on-disk shapes are read (RFC-0003, RFC-0014, RFC-0034):
|
|
121
|
+
"packs" — skilldrop's own layout since RFC-0034: packs/<pack>/{pack.json,
|
|
122
|
+
skills/<name>/{SKILL.md,manifest.json}, loops/<name>/} + catalogue.json
|
|
123
|
+
"skilldrop" — flat skills/<name>/{SKILL.md,manifest.json} + optional packs.json; what
|
|
124
|
+
skilldrop shipped before RFC-0034, and what most third-party catalogs use
|
|
120
125
|
"apm" — agentbundle (agent-ready-repo): packs/<pack>/{pack.toml,
|
|
121
126
|
.apm/skills/<name>/SKILL.md, .apm/agents/<name>.md}
|
|
122
127
|
The apm reader normalizes into the same accessors the native path uses — skills keyed by
|
|
123
128
|
folder name, a per-skill manifest synthesized from the SKILL.md frontmatter + the pack.toml
|
|
124
129
|
version, each pack.toml's [pack] table a virtual pack — so `--from git+https://…/agent-ready-repo`
|
|
125
130
|
installs his packs through this same CLI. Skill accessors: skillsIn / skillDir / skillExists /
|
|
126
|
-
manifestOf; never touch cat.skillsDir directly (it exists only on the skilldrop shape). */
|
|
131
|
+
manifestOf; never touch cat.skillsDir directly (it exists only on the flat skilldrop shape). */
|
|
127
132
|
|
|
128
133
|
const catalogCache = {};
|
|
129
134
|
function resolveCatalog(source) {
|
|
@@ -142,11 +147,36 @@ function resolveCatalog(source) {
|
|
|
142
147
|
}
|
|
143
148
|
}
|
|
144
149
|
const src = source || BUNDLED;
|
|
150
|
+
const packsDir = path.join(dir, "packs");
|
|
151
|
+
if (fs.existsSync(packsDir) && fs.readdirSync(packsDir).some((p) => fs.existsSync(path.join(packsDir, p, "pack.json"))))
|
|
152
|
+
return (catalogCache[key] = readPacksCatalog(dir, src));
|
|
145
153
|
if (fs.existsSync(path.join(dir, "skills")))
|
|
146
154
|
return (catalogCache[key] = { dir, source: src, shape: "skilldrop", skillsDir: path.join(dir, "skills") });
|
|
147
155
|
if (fs.existsSync(path.join(dir, "packs")))
|
|
148
156
|
return (catalogCache[key] = readApmCatalog(dir, src));
|
|
149
|
-
die(`'${src}' is not a catalog — expected a skills/
|
|
157
|
+
die(`'${src}' is not a catalog — expected packs/<pack>/pack.json, a skills/ directory, or packs/<pack>/pack.toml (agentbundle)`);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* RFC-0034: membership is the folder. A skill is in a pack because it sits at
|
|
161
|
+
packs/<pack>/skills/<name>/; catalogue.json only sets the order packs are listed in. */
|
|
162
|
+
function readPacksCatalog(dir, source) {
|
|
163
|
+
const packsDir = path.join(dir, "packs");
|
|
164
|
+
const children = (d, marker) => fs.existsSync(d)
|
|
165
|
+
? fs.readdirSync(d).filter((x) => fs.existsSync(path.join(d, x, marker))).sort() : [];
|
|
166
|
+
const onDisk = children(packsDir, "pack.json");
|
|
167
|
+
const idx = path.join(dir, "catalogue.json");
|
|
168
|
+
const listed = fs.existsSync(idx) ? (readJSON(idx).packs || []).filter((p) => onDisk.includes(p)) : [];
|
|
169
|
+
const order = [...listed, ...onDisk.filter((p) => !listed.includes(p))];
|
|
170
|
+
const skillIndex = {}, loopIndex = {}, packsData = {};
|
|
171
|
+
for (const pack of order) {
|
|
172
|
+
const pdir = path.join(packsDir, pack);
|
|
173
|
+
const skills = children(path.join(pdir, "skills"), "SKILL.md");
|
|
174
|
+
const loops = children(path.join(pdir, "loops"), "loop.json");
|
|
175
|
+
for (const s of skills) if (!skillIndex[s]) skillIndex[s] = { dir: path.join(pdir, "skills", s) };
|
|
176
|
+
for (const l of loops) if (!loopIndex[l]) loopIndex[l] = path.join(pdir, "loops", l);
|
|
177
|
+
packsData[pack] = Object.assign({}, readJSON(path.join(pdir, "pack.json")), { skills, loops });
|
|
178
|
+
}
|
|
179
|
+
return { dir, source, shape: "packs", skillIndex, loopIndex, packsData };
|
|
150
180
|
}
|
|
151
181
|
|
|
152
182
|
/* Minimal TOML read — the [pack] table's basic-string scalars (name, version, description).
|
|
@@ -208,11 +238,11 @@ function readApmCatalog(dir, source) {
|
|
|
208
238
|
}
|
|
209
239
|
|
|
210
240
|
function skillsIn(cat) {
|
|
211
|
-
if (cat.
|
|
241
|
+
if (cat.skillIndex) return Object.keys(cat.skillIndex).sort();
|
|
212
242
|
return fs.readdirSync(cat.skillsDir).filter((d) => fs.statSync(path.join(cat.skillsDir, d)).isDirectory()).sort();
|
|
213
243
|
}
|
|
214
244
|
function skillDir(cat, s) {
|
|
215
|
-
if (cat.
|
|
245
|
+
if (cat.skillIndex) return cat.skillIndex[s] && cat.skillIndex[s].dir;
|
|
216
246
|
return path.join(cat.skillsDir, s);
|
|
217
247
|
}
|
|
218
248
|
// Skill names reach RegExp when unwiring hooks. skillExists() proves a directory exists; it
|
|
@@ -231,7 +261,7 @@ function manifestOf(cat, s) {
|
|
|
231
261
|
if (!cat.skillIndex[s]) throw new Error(`no such skill '${s}'`);
|
|
232
262
|
return cat.skillIndex[s].manifest;
|
|
233
263
|
}
|
|
234
|
-
return readJSON(path.join(cat
|
|
264
|
+
return readJSON(path.join(skillDir(cat, s), "manifest.json"));
|
|
235
265
|
}
|
|
236
266
|
|
|
237
267
|
/* Agents (RFC-0012): single markdown files, frontmatter is already Claude Code's format.
|
|
@@ -263,7 +293,7 @@ function checkAgent(cat, a) {
|
|
|
263
293
|
return problems;
|
|
264
294
|
}
|
|
265
295
|
function packsOf(cat) {
|
|
266
|
-
if (cat.
|
|
296
|
+
if (cat.packsData) return Object.keys(cat.packsData).length ? cat.packsData : null;
|
|
267
297
|
const p = path.join(cat.dir, "packs.json");
|
|
268
298
|
return fs.existsSync(p) ? readJSON(p).packs : null;
|
|
269
299
|
}
|
|
@@ -718,7 +748,7 @@ function expandNames(args, cat) {
|
|
|
718
748
|
if (args.flags.all) return skillsIn(cat);
|
|
719
749
|
if (args.flags.pack) {
|
|
720
750
|
const ps = packsOf(cat);
|
|
721
|
-
if (!ps) die(`catalog '${cat.source}'
|
|
751
|
+
if (!ps) die(`catalog '${cat.source}' defines no packs — install skills by name`);
|
|
722
752
|
const p = ps[args.flags.pack];
|
|
723
753
|
if (!p) die(`unknown pack '${args.flags.pack}' in catalog '${cat.source}'`);
|
|
724
754
|
return packMembers(ps, args.flags.pack, "skills");
|
|
@@ -920,6 +950,8 @@ function install(args) {
|
|
|
920
950
|
console.log(`deps: ${s} needs Python packages — run: cd ${path.join(dest, s)} && python3 -m pip install -r requirements.txt`);
|
|
921
951
|
if (suggestions.size)
|
|
922
952
|
console.log(`related (not installed): ${[...suggestions].sort().join(", ")} — add --with-related or install by name.`);
|
|
953
|
+
const pk = args.flags.pack && (packsOf(cat) || {})[args.flags.pack];
|
|
954
|
+
if (pk && pk["first-value"]) console.log("\n" + firstValueLines(pk).join("\n"));
|
|
923
955
|
}
|
|
924
956
|
|
|
925
957
|
function installedRows(flags) {
|
|
@@ -1030,11 +1062,12 @@ function listAgents(args) {
|
|
|
1030
1062
|
stages name, unless --no-skills. Optional in a catalog. */
|
|
1031
1063
|
function loopsIn(cat) {
|
|
1032
1064
|
if (cat.shape === "apm") return [];
|
|
1065
|
+
if (cat.loopIndex) return Object.keys(cat.loopIndex).sort();
|
|
1033
1066
|
const d = path.join(cat.dir, "loops");
|
|
1034
1067
|
if (!fs.existsSync(d)) return [];
|
|
1035
1068
|
return fs.readdirSync(d).filter((x) => fs.existsSync(path.join(d, x, "loop.json"))).sort();
|
|
1036
1069
|
}
|
|
1037
|
-
function loopDir(cat, n) { return path.join(cat.dir, "loops", n); }
|
|
1070
|
+
function loopDir(cat, n) { return cat.loopIndex ? cat.loopIndex[n] : path.join(cat.dir, "loops", n); }
|
|
1038
1071
|
function loopSpec(cat, n) { return readJSON(path.join(loopDir(cat, n), "loop.json")); }
|
|
1039
1072
|
|
|
1040
1073
|
function loopSkills(cat, n) {
|
|
@@ -1088,7 +1121,7 @@ function installLoops(args) {
|
|
|
1088
1121
|
let names = args._.slice();
|
|
1089
1122
|
if (!names.length && args.flags.pack) {
|
|
1090
1123
|
const ps = packsOf(cat);
|
|
1091
|
-
if (!ps) die(`catalog '${cat.source}'
|
|
1124
|
+
if (!ps) die(`catalog '${cat.source}' defines no packs`);
|
|
1092
1125
|
const pk = ps[args.flags.pack];
|
|
1093
1126
|
if (!pk) die(`unknown pack '${args.flags.pack}' in catalog '${cat.source}'`);
|
|
1094
1127
|
names = packMembers(ps, args.flags.pack, "loops");
|
|
@@ -1221,9 +1254,37 @@ function list(args) {
|
|
|
1221
1254
|
console.log(`\n${rows.length} skills in catalog '${cat.source}'. Details: skilldrop info <skill>`);
|
|
1222
1255
|
}
|
|
1223
1256
|
|
|
1257
|
+
/* RFC-0032: what to try first after installing a pack, how to tell it worked, what to do
|
|
1258
|
+
if it didn't — the same first-value block the pack's site page renders. */
|
|
1259
|
+
function firstValueLines(p) {
|
|
1260
|
+
const fv = p["first-value"];
|
|
1261
|
+
if (!fv) return [];
|
|
1262
|
+
const out = [`Start here: ${fv["starter-task"]}`, "", ` ${fv["starter-prompt"]}`, ""];
|
|
1263
|
+
for (const pre of fv.prerequisites || []) out.push(` before you start: ${pre}`);
|
|
1264
|
+
out.push(` worked if: ${fv.verification}`, ` if nothing happens: ${fv.recovery}`);
|
|
1265
|
+
return out;
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
function infoPack(args) {
|
|
1269
|
+
const cat = resolveCatalog(args.flags.from);
|
|
1270
|
+
const ps = packsOf(cat) || die(`catalog '${cat.source}' has no packs`);
|
|
1271
|
+
const name = args.flags.pack;
|
|
1272
|
+
const p = ps[name] || die(`unknown pack '${name}' — available: ${Object.keys(ps).join(", ")}`);
|
|
1273
|
+
if (args.flags.json)
|
|
1274
|
+
return emitJSON({ catalog: cat.source, name, ...p });
|
|
1275
|
+
console.log(`${p.display_name || name} (${name})\n\n${p.description}\n`);
|
|
1276
|
+
console.log(`skills: ${p.skills.join(", ")}`);
|
|
1277
|
+
if ((p.requires || []).length) console.log(`requires: ${p.requires.join(", ")} (installed with it)`);
|
|
1278
|
+
if ((p.loops || []).length) console.log(`loops: ${p.loops.join(", ")}`);
|
|
1279
|
+
if (p.links && p.links.documentation) console.log(`page: ${p.links.documentation}`);
|
|
1280
|
+
const fv = firstValueLines(p);
|
|
1281
|
+
if (fv.length) console.log("\n" + fv.join("\n"));
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1224
1284
|
function info(args) {
|
|
1285
|
+
if (args.flags.pack) return infoPack(args);
|
|
1225
1286
|
const cat = resolveCatalog(args.flags.from);
|
|
1226
|
-
const s = args._[0] || die("pass a skill name");
|
|
1287
|
+
const s = args._[0] || die("pass a skill name, or --pack <name>");
|
|
1227
1288
|
if (!skillExists(cat, s)) die(`unknown skill '${s}' in catalog '${cat.source}'`);
|
|
1228
1289
|
const m = manifestOf(cat, s);
|
|
1229
1290
|
const ps = packsOf(cat) || {};
|
|
@@ -1283,7 +1344,7 @@ function validateCmd(args) {
|
|
|
1283
1344
|
if (ps)
|
|
1284
1345
|
for (const [n, p] of Object.entries(ps))
|
|
1285
1346
|
for (const s of p.skills)
|
|
1286
|
-
if (!names.includes(s)) { console.log(`FAIL packs
|
|
1347
|
+
if (!names.includes(s)) { console.log(`FAIL packs: pack '${n}' lists unknown skill '${s}'`); bad++; }
|
|
1287
1348
|
if (bad) { console.log(`\n${bad} problem(s) in catalog '${cat.source}'.`); process.exit(1); }
|
|
1288
1349
|
console.log(`OK: ${names.length} skills in catalog '${cat.source}' pass the structural check.`);
|
|
1289
1350
|
}
|
package/catalogue.json
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
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
|
+
"version": "1.0.0",
|
|
4
|
+
"packs": ["core", "solution-architect", "product-manager", "dev-team", "sre-oncall", "stakeholder-comms", "ai-engineering", "claude-api"],
|
|
5
|
+
"outcomes": {
|
|
6
|
+
"decide-what-to-build": {
|
|
7
|
+
"description": "Turn a direction into a committed, measurable plan: press releases, strategy frameworks, OKRs, business cases, requirements, PRDs, and the metrics that will say whether it worked.",
|
|
8
|
+
"skills": [
|
|
9
|
+
"prfaq",
|
|
10
|
+
"strategy-analysis",
|
|
11
|
+
"okr-cascade",
|
|
12
|
+
"business-case",
|
|
13
|
+
"capacity-cost-model",
|
|
14
|
+
"requirements-interview",
|
|
15
|
+
"prd-draft",
|
|
16
|
+
"nfr-spec",
|
|
17
|
+
"success-metrics",
|
|
18
|
+
"user-story-splitter",
|
|
19
|
+
"user-journey-map"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"design-the-system": {
|
|
23
|
+
"description": "Commit the shape before the code: decision records, design docs, diagrams, contracts, schemas, migration and threat models, and the design of any agentic parts.",
|
|
24
|
+
"skills": [
|
|
25
|
+
"adr-generator",
|
|
26
|
+
"design-doc",
|
|
27
|
+
"architecture-diagrams",
|
|
28
|
+
"reverse-architecture",
|
|
29
|
+
"figma-diagrams",
|
|
30
|
+
"api-contract-draft",
|
|
31
|
+
"db-schema-design",
|
|
32
|
+
"data-contract",
|
|
33
|
+
"tech-comparison-matrix",
|
|
34
|
+
"threat-model",
|
|
35
|
+
"agent-threat-model",
|
|
36
|
+
"migration-plan",
|
|
37
|
+
"agent-loop-design",
|
|
38
|
+
"subagent-design",
|
|
39
|
+
"agent-budget"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"build-and-review-software": {
|
|
43
|
+
"description": "The loop around the code itself: supervised implementation, adversarial review panels, test plans, triage, accessibility and static-analysis passes, and the policy files agents read.",
|
|
44
|
+
"skills": [
|
|
45
|
+
"feature-implement-loop",
|
|
46
|
+
"pre-merge-review",
|
|
47
|
+
"devils-advocate",
|
|
48
|
+
"council-review",
|
|
49
|
+
"accessibility-audit",
|
|
50
|
+
"sonar-onboard",
|
|
51
|
+
"sonar-review",
|
|
52
|
+
"test-plan-generator",
|
|
53
|
+
"bug-triage",
|
|
54
|
+
"agents-md-generator",
|
|
55
|
+
"llm-eval-harness",
|
|
56
|
+
"eval-harness-generator",
|
|
57
|
+
"contribution-wizard"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"build-on-the-claude-api": {
|
|
61
|
+
"description": "Skills for teams building directly on the Anthropic API — prompt caching strategy, token budgeting, eval generation, and tool-use schema writing.",
|
|
62
|
+
"skills": [
|
|
63
|
+
"prompt-caching-advisor",
|
|
64
|
+
"token-budget-estimator",
|
|
65
|
+
"eval-harness-generator",
|
|
66
|
+
"tool-use-schema-writer"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
"run-and-recover-the-service": {
|
|
70
|
+
"description": "Operate what shipped: runbooks, observability design, release notes, incident communication, and the postmortem that closes the loop.",
|
|
71
|
+
"skills": [
|
|
72
|
+
"runbook-generator",
|
|
73
|
+
"observability-plan",
|
|
74
|
+
"release-notes",
|
|
75
|
+
"incident-comms",
|
|
76
|
+
"postmortem-generator",
|
|
77
|
+
"launch-readiness"
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
"explain-it-to-decision-makers": {
|
|
81
|
+
"description": "Get a non-technical audience to a decision: audience profiling, deck outlines and real decks, exec summaries, decision logs, and how-to guides.",
|
|
82
|
+
"skills": [
|
|
83
|
+
"audience-profile",
|
|
84
|
+
"slide-outliner",
|
|
85
|
+
"deck-builder",
|
|
86
|
+
"exec-summary",
|
|
87
|
+
"decision-log",
|
|
88
|
+
"guide-builder"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
"govern-ai-use": {
|
|
92
|
+
"description": "Adopt AI deliberately and prove what it is doing: readiness assessment, use-case triage, rollout plans, acceptable-use policy, adoption staging, and usage reporting.",
|
|
93
|
+
"skills": [
|
|
94
|
+
"ai-readiness-assessment",
|
|
95
|
+
"ai-use-case-triage",
|
|
96
|
+
"ai-adoption-rollout",
|
|
97
|
+
"ai-usage-policy",
|
|
98
|
+
"agent-adoption-stage",
|
|
99
|
+
"ai-usage-report"
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"get-a-draft-ready-to-ship": {
|
|
103
|
+
"description": "The passes either side of a generator: collect a messy input into a structured brief, critique the argument, and strip the machine artifacts before it leaves the building.",
|
|
104
|
+
"skills": [
|
|
105
|
+
"brief-intake",
|
|
106
|
+
"doc-critique",
|
|
107
|
+
"output-hygiene"
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/sananthanarayan/skilldrop/contracts/catalogue.schema.json",
|
|
4
|
+
"title": "skilldrop catalogue.json",
|
|
5
|
+
"$comment": "RFC-0026 / RFC-0034. The catalogue index: pack display order, and the outcome axis. Packs answer WHO needs a skill (the folder it sits in); outcomes answer WHY someone opened the catalogue.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["version", "packs", "outcomes"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"$comment": { "type": "string" },
|
|
11
|
+
"version": { "type": "string" },
|
|
12
|
+
"packs": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": { "type": "string" },
|
|
15
|
+
"minItems": 1,
|
|
16
|
+
"description": "Every pack folder under packs/, in display order. validate.py checks both directions."
|
|
17
|
+
},
|
|
18
|
+
"outcomes": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"description": "The catalogue's second browse axis. A browse aid only — never an install unit; the CLI takes no --outcome.",
|
|
21
|
+
"additionalProperties": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"additionalProperties": false,
|
|
24
|
+
"required": ["description", "skills"],
|
|
25
|
+
"properties": {
|
|
26
|
+
"description": { "type": "string", "description": "The chip's tooltip on the catalogue site." },
|
|
27
|
+
"skills": { "type": "array", "items": { "type": "string" }, "minItems": 1 }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://github.com/sananthanarayan/skilldrop/contracts/loop.schema.json",
|
|
4
4
|
"title": "skilldrop loop",
|
|
5
|
-
"$comment": "RFC-0028. A loop sequences existing skills; it never contains one. Skills stay in
|
|
5
|
+
"$comment": "RFC-0028. A loop sequences existing skills; it never contains one. Skills stay in their own packs/<pack>/skills/<name> folders and stay independently installable — a loop is a named order plus the gates between stages. Enforced by validate.py with hand-rolled stdlib checks: skilldrop ships zero runtime dependencies and this file must not become a reason to add `jsonschema`.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": ["name", "description", "entrypoint", "kind", "stages"],
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"type": "array",
|
|
49
49
|
"minItems": 1,
|
|
50
50
|
"items": { "type": "string" },
|
|
51
|
-
"description": "Skill folder names, in order. Each must be a real skills/<name
|
|
51
|
+
"description": "Skill folder names, in order. Each must be a real skill folder (packs/<pack>/skills/<name>). `*` means any generator, and is legal only in a wrapper."
|
|
52
52
|
},
|
|
53
53
|
"gate": {
|
|
54
54
|
"type": "object",
|
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://github.com/sananthanarayan/skilldrop/contracts/pack.schema.json",
|
|
4
|
-
"title": "skilldrop packs.json",
|
|
5
|
-
"$comment": "RFC-0001 / RFC-
|
|
4
|
+
"title": "skilldrop packs/<pack>/pack.json",
|
|
5
|
+
"$comment": "RFC-0001 / RFC-0032 / RFC-0033 / RFC-0034. One pack's metadata. Membership is not listed here: a skill is in this pack because it sits at packs/<pack>/skills/<name>/, and a loop because it sits at packs/<pack>/loops/<name>/. Key names follow agent-ready-repo's pack.toml so the two stay mechanically convertible.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
|
-
"required": ["
|
|
8
|
+
"required": ["description"],
|
|
9
9
|
"properties": {
|
|
10
10
|
"$comment": { "type": "string" },
|
|
11
|
-
"
|
|
12
|
-
"
|
|
11
|
+
"description": { "type": "string", "description": "One line — who this pack is for." },
|
|
12
|
+
"display_name": { "type": "string", "description": "RFC-0032. Human title for the pack's page and plugin entry." },
|
|
13
|
+
"keywords": { "type": "array", "items": { "type": "string" }, "description": "RFC-0032. Search terms, copied into the plugin entry." },
|
|
14
|
+
"links": {
|
|
13
15
|
"type": "object",
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"description": { "type": "string", "description": "One line — who this pack is for." },
|
|
21
|
-
"skills": { "type": "array", "items": { "type": "string" }, "minItems": 1,
|
|
22
|
-
"description": "Real skill folders. Every skill must appear in at least one pack." },
|
|
23
|
-
"requires": {
|
|
24
|
-
"type": "array",
|
|
25
|
-
"items": {
|
|
26
|
-
"type": "string"
|
|
27
|
-
},
|
|
28
|
-
"description": "RFC-0033. Packs installed together with this one (in practice, `core`). One level only: a required pack may not itself require."
|
|
29
|
-
},
|
|
30
|
-
"loops": { "type": "array", "items": { "type": "string" },
|
|
31
|
-
"description": "RFC-0028. Real loops/ folders. Every loop must appear in at least one pack." }
|
|
32
|
-
}
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"description": "RFC-0032. Catalogue-facing links; `documentation` is the pack's page.",
|
|
18
|
+
"properties": {
|
|
19
|
+
"homepage": { "type": "string" },
|
|
20
|
+
"repository": { "type": "string" },
|
|
21
|
+
"documentation": { "type": "string" }
|
|
33
22
|
}
|
|
34
23
|
},
|
|
35
|
-
"
|
|
24
|
+
"maintainers": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"description": "RFC-0032.",
|
|
27
|
+
"items": { "type": "object", "additionalProperties": false, "required": ["name"], "properties": { "name": { "type": "string" } } }
|
|
28
|
+
},
|
|
29
|
+
"first-value": {
|
|
36
30
|
"type": "object",
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
31
|
+
"additionalProperties": false,
|
|
32
|
+
"description": "RFC-0032. What to try first after installing, how to tell it worked, and what to do if it didn't. Key names match agent-ready-repo's [pack.first-value].",
|
|
33
|
+
"required": ["audience-posture", "prerequisites", "starter-task", "starter-prompt", "verification", "recovery"],
|
|
34
|
+
"properties": {
|
|
35
|
+
"audience-posture": { "type": "string", "enum": ["technical", "non-technical"] },
|
|
36
|
+
"prerequisites": { "type": "array", "items": { "type": "string" } },
|
|
37
|
+
"starter-task": { "type": "string" },
|
|
38
|
+
"starter-prompt": { "type": "string" },
|
|
39
|
+
"verification": { "type": "string" },
|
|
40
|
+
"recovery": { "type": "string" }
|
|
46
41
|
}
|
|
42
|
+
},
|
|
43
|
+
"requires": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"items": { "type": "string" },
|
|
46
|
+
"description": "RFC-0033. Packs installed together with this one (in practice, `core`). One level only: a required pack may not itself require."
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skilldrop-cli",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.3",
|
|
4
4
|
"description": "Portable AI-agent skills for the deliverables knowledge workers ship \u2014 diagrams, ADRs, PRDs, runbooks, decks, reviews \u2014 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",
|
|
@@ -11,11 +11,10 @@
|
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
13
|
"bin/",
|
|
14
|
-
"
|
|
14
|
+
"packs/",
|
|
15
15
|
"agents/",
|
|
16
|
-
"loops/",
|
|
17
16
|
"contracts/",
|
|
18
|
-
"
|
|
17
|
+
"catalogue.json",
|
|
19
18
|
"model-routing.json"
|
|
20
19
|
],
|
|
21
20
|
"engines": {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Adopt and build AI systems: readiness assessment, use-case triage, rollout and acceptable-use policy, plus agent loop design, subagent orchestration, spend budgets, agent security review, eval harnesses, and AI-usage reporting.",
|
|
3
|
+
"display_name": "AI engineering",
|
|
4
|
+
"keywords": ["ai-adoption", "agents", "evals", "governance", "budgets"],
|
|
5
|
+
"links": {
|
|
6
|
+
"documentation": "https://sananthanarayan.github.io/skilldrop/packs/ai-engineering/"
|
|
7
|
+
},
|
|
8
|
+
"maintainers": [
|
|
9
|
+
{
|
|
10
|
+
"name": "sananthanarayan"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"first-value": {
|
|
14
|
+
"audience-posture": "non-technical",
|
|
15
|
+
"prerequisites": [],
|
|
16
|
+
"starter-task": "Find out whether a team is ready to adopt AI tools, and what blocks it first",
|
|
17
|
+
"starter-prompt": "Are we ready for AI? Our support team has 12 people on Zendesk, no AI tools today, and a legal team worried about customer data.",
|
|
18
|
+
"verification": "ai-readiness-assessment scores six dimensions (data, tooling, skills, governance, process, culture) with evidence for each, and ranks the gaps that block adoption first.",
|
|
19
|
+
"recovery": "If ai-readiness-assessment does not activate, ask for it by name and check that its folder exists in your skills folder (`~/.claude/skills/` by default)."
|
|
20
|
+
},
|
|
21
|
+
"requires": ["core"]
|
|
22
|
+
}
|
|
@@ -41,12 +41,12 @@ The load-bearing idea: **the bottleneck moves.** Each stage is limited by someth
|
|
|
41
41
|
|
|
42
42
|
| Unlock | Where it's implemented |
|
|
43
43
|
|---|---|
|
|
44
|
-
| a trusted self-verification loop | [`pre-merge-review`](
|
|
44
|
+
| a trusted self-verification loop | [`pre-merge-review`](../../../dev-team/skills/pre-merge-review/SKILL.md) — a mechanical gate whose exit code decides, plus the reviewer panel |
|
|
45
45
|
| automated review that isn't the queue | the reviewer panel (`devils-advocate`, `security-reviewer`, `code-quality`) |
|
|
46
46
|
| loops and routines | [`agent-loop-design`](../agent-loop-design/SKILL.md) — generate→verify→gate with exit criteria and a cap |
|
|
47
47
|
| parallel agents without collision | [`subagent-design`](../subagent-design/SKILL.md) — topology, isolation, typed contracts |
|
|
48
48
|
| token efficiency as volume climbs | [`agent-budget`](../agent-budget/SKILL.md) + a provider-neutral model tier per task |
|
|
49
|
-
| encoding standards so agents inherit them | [`agents-md-generator`](
|
|
49
|
+
| encoding standards so agents inherit them | [`agents-md-generator`](../../../dev-team/skills/agents-md-generator/SKILL.md) and skills themselves |
|
|
50
50
|
| guardrails for autonomous work | [`agent-threat-model`](../agent-threat-model/SKILL.md) |
|
|
51
51
|
|
|
52
52
|
7. **End with the re-measure date and what would prove the unlock landed.** An observable: "median agents-in-flight ≥ 3 and engineers stop reading intermediate diffs, in 6 weeks."
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Skills for teams building on the Anthropic API — prompt caching, token budgeting, eval generation for skills, and tool-use schema writing.",
|
|
3
|
+
"display_name": "Claude API",
|
|
4
|
+
"keywords": ["anthropic", "prompt-caching", "tokens", "tool-use", "evals"],
|
|
5
|
+
"links": {
|
|
6
|
+
"documentation": "https://sananthanarayan.github.io/skilldrop/packs/claude-api/"
|
|
7
|
+
},
|
|
8
|
+
"maintainers": [
|
|
9
|
+
{
|
|
10
|
+
"name": "sananthanarayan"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"first-value": {
|
|
14
|
+
"audience-posture": "technical",
|
|
15
|
+
"prerequisites": ["A system prompt and a typical request from your Claude API integration"],
|
|
16
|
+
"starter-task": "Find where prompt caching will cut your input costs",
|
|
17
|
+
"starter-prompt": "Here is our system prompt and a typical request: <paste them>. Where should the cache_control breakpoints go, and what hit rate should we expect?",
|
|
18
|
+
"verification": "prompt-caching-advisor marks where each cache_control checkpoint goes and estimates the cache hit rate.",
|
|
19
|
+
"recovery": "If prompt-caching-advisor does not activate, ask for it by name and check that its folder exists in your skills folder (`~/.claude/skills/` by default)."
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -5,7 +5,7 @@ description: Takes a skill's SKILL.md and generates a set of eval cases — trig
|
|
|
5
5
|
|
|
6
6
|
# eval-harness-generator
|
|
7
7
|
|
|
8
|
-
Reads a SKILL.md and generates eval cases that cover the skill's happy path, edge cases, and known failure modes. The output is JSON that drops directly into `skills/<name>/evals
|
|
8
|
+
Reads a SKILL.md and generates eval cases that cover the skill's happy path, edge cases, and known failure modes. The output is JSON that drops directly into the skill's `evals/cases.json` (in skilldrop, `packs/<pack>/skills/<name>/evals/`). Unlike `llm-eval-harness` (which designs eval harnesses for arbitrary LLM features), this skill specifically targets the skilldrop eval format and the patterns that skilldrop skills routinely get wrong.
|
|
9
9
|
|
|
10
10
|
## How to respond
|
|
11
11
|
|
|
@@ -64,7 +64,7 @@ After the JSON array, add a brief eval strategy note (3–5 sentences) explainin
|
|
|
64
64
|
|
|
65
65
|
Tell the user:
|
|
66
66
|
```
|
|
67
|
-
Drop this into skills/<skill-name>/evals/cases.json
|
|
67
|
+
Drop this into packs/<pack>/skills/<skill-name>/evals/cases.json
|
|
68
68
|
Run: python3 validate.py # confirms the file is found
|
|
69
69
|
```
|
|
70
70
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eval-harness-generator",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Takes a skill's SKILL.md and generates a set of eval cases — trigger queries, expected output shape, and pass/fail criteria — ready to drop into the skill's evals/ directory. Use when adding evals to a new or existing skill, verifying a skill behaves as documented, or building a regression gate before modifying a skill.",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": { "npm": [], "pip": [] },
|
|
@@ -37,7 +37,7 @@ check the argument and the surface after.
|
|
|
37
37
|
|
|
38
38
|
## Verdicts
|
|
39
39
|
|
|
40
|
-
Defined in [`contracts/terminals.json`](
|
|
40
|
+
Defined in [`contracts/terminals.json`](../../../../contracts/terminals.json). G4 emits the critique
|
|
41
41
|
vocabulary. `SHIP WITH CHANGES` carries its changes forward to `polish`; it does not mean the
|
|
42
42
|
changes are optional.
|
|
43
43
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "The cross-role toolkit every pack builds on: structured intake, document critique, the review council, and output hygiene, plus the ship-a-draft wrapper. Installed automatically with every role pack.",
|
|
3
|
+
"display_name": "Core",
|
|
4
|
+
"keywords": ["intake", "critique", "review", "hygiene"],
|
|
5
|
+
"links": {
|
|
6
|
+
"documentation": "https://sananthanarayan.github.io/skilldrop/packs/core/"
|
|
7
|
+
},
|
|
8
|
+
"maintainers": [
|
|
9
|
+
{
|
|
10
|
+
"name": "sananthanarayan"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"first-value": {
|
|
14
|
+
"audience-posture": "non-technical",
|
|
15
|
+
"prerequisites": [],
|
|
16
|
+
"starter-task": "Turn rough notes into a structured brief, then get a verdict on the draft",
|
|
17
|
+
"starter-prompt": "Here are my notes from today's planning call: <paste them>. Turn them into a brief, then critique the draft you write from it.",
|
|
18
|
+
"verification": "brief-intake returns a structured brief with gaps tagged, and doc-critique ends with a verdict: SHIP IT, SHIP WITH CHANGES, MAJOR REWRITE or WRONG ARTIFACT.",
|
|
19
|
+
"recovery": "If neither skill activates, check that `brief-intake/SKILL.md` and `doc-critique/SKILL.md` exist in your skills folder (`~/.claude/skills/` by default). In Claude Code, start a new session after installing."
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -7,7 +7,7 @@ description: Convene a council of distinct senior-engineer personas (Architect,
|
|
|
7
7
|
|
|
8
8
|
You convene a **council of distinct expert personas** to deliberate something consequential, then reconcile their views into a decision. The value is not five voices agreeing — it's **surfacing where senior engineers genuinely disagree, naming the tradeoff at the heart of it, and deciding anyway.**
|
|
9
9
|
|
|
10
|
-
This is the deliberation counterpart to the single-voice reviewers. Use [`devils-advocate`](
|
|
10
|
+
This is the deliberation counterpart to the single-voice reviewers. Use [`devils-advocate`](../../../dev-team/skills/devils-advocate/SKILL.md) when you want one adversarial pass on code, [`doc-critique`](../doc-critique/SKILL.md) for one pass on a doc, [`tech-comparison-matrix`](../../../solution-architect/skills/tech-comparison-matrix/SKILL.md) for a weighted scoring of named options. Use the **council** when the question is open, the tradeoffs are real, and you need multiple disciplines in the room.
|
|
11
11
|
|
|
12
12
|
## What the council reviews
|
|
13
13
|
|