skilldrop-cli 0.16.5 → 0.16.7
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 +2 -1
- package/catalogue.json +10 -1
- package/model-routing.json +12 -0
- package/package.json +1 -1
- package/packs/ai-engineering/skills/agent-adoption-stage/SKILL.md +8 -0
- package/packs/ai-engineering/skills/agent-adoption-stage/manifest.json +1 -1
- package/packs/ai-engineering/skills/agent-loop-design/SKILL.md +8 -0
- package/packs/ai-engineering/skills/agent-loop-design/manifest.json +1 -1
- package/packs/ai-engineering/skills/ai-readiness-assessment/SKILL.md +8 -0
- package/packs/ai-engineering/skills/ai-readiness-assessment/manifest.json +1 -1
- package/packs/ai-engineering/skills/ai-usage-policy/SKILL.md +8 -0
- package/packs/ai-engineering/skills/ai-usage-policy/evals/evals.json +30 -0
- package/packs/ai-engineering/skills/ai-usage-policy/evals/files/2/data-handling-sheet.md +18 -0
- package/packs/ai-engineering/skills/ai-usage-policy/evals/files/2/it-notes.md +31 -0
- package/packs/ai-engineering/skills/ai-usage-policy/evals/files/2/md-email.md +29 -0
- package/packs/ai-engineering/skills/ai-usage-policy/manifest.json +1 -1
- package/packs/ai-engineering/skills/llm-eval-harness/SKILL.md +8 -0
- package/packs/ai-engineering/skills/llm-eval-harness/manifest.json +1 -1
- package/packs/ai-engineering/skills/subagent-design/SKILL.md +8 -0
- package/packs/ai-engineering/skills/subagent-design/manifest.json +1 -1
- package/packs/api-builder/skills/eval-harness-generator/SKILL.md +8 -0
- package/packs/api-builder/skills/eval-harness-generator/manifest.json +1 -1
- package/packs/api-builder/skills/tool-use-schema-writer/SKILL.md +8 -0
- package/packs/api-builder/skills/tool-use-schema-writer/evals/evals.json +29 -0
- package/packs/api-builder/skills/tool-use-schema-writer/evals/files/2/book_appointment.ts +64 -0
- package/packs/api-builder/skills/tool-use-schema-writer/manifest.json +1 -1
- package/packs/career/loops/apply/LOOP.md +88 -0
- package/packs/career/loops/apply/evals/eval_queries.json +9 -0
- package/packs/career/loops/apply/evals/evals.json +27 -0
- package/packs/career/loops/apply/loop.json +46 -0
- package/packs/career/pack.json +57 -0
- package/packs/career/skills/cover-letter/SKILL.md +132 -0
- package/packs/career/skills/cover-letter/evals/eval_queries.json +34 -0
- package/packs/career/skills/cover-letter/evals/evals.json +100 -0
- package/packs/career/skills/cover-letter/evals/files/1/posting.md +28 -0
- package/packs/career/skills/cover-letter/evals/files/1/resume.md +35 -0
- package/packs/career/skills/cover-letter/evals/files/2/posting.md +20 -0
- package/packs/career/skills/cover-letter/evals/files/2/resume.md +32 -0
- package/packs/career/skills/cover-letter/evals/files/4/posting.md +19 -0
- package/packs/career/skills/cover-letter/evals/files/4/resume.md +26 -0
- package/packs/career/skills/cover-letter/evals/files/5/posting.md +21 -0
- package/packs/career/skills/cover-letter/evals/files/5/resume.md +32 -0
- package/packs/career/skills/cover-letter/evals/files/6/posting.md +25 -0
- package/packs/career/skills/cover-letter/evals/files/6/resume.md +29 -0
- package/packs/career/skills/cover-letter/evals/files/7/posting.md +18 -0
- package/packs/career/skills/cover-letter/evals/files/7/resume.md +23 -0
- package/packs/career/skills/cover-letter/manifest.json +37 -0
- package/packs/career/skills/cover-letter/scripts/claim_check.py +247 -0
- package/packs/career/skills/job-fit-analysis/SKILL.md +136 -0
- package/packs/career/skills/job-fit-analysis/evals/eval_queries.json +34 -0
- package/packs/career/skills/job-fit-analysis/evals/evals.json +76 -0
- package/packs/career/skills/job-fit-analysis/evals/files/1/posting.md +28 -0
- package/packs/career/skills/job-fit-analysis/evals/files/1/resume.md +35 -0
- package/packs/career/skills/job-fit-analysis/evals/files/2/posting.md +20 -0
- package/packs/career/skills/job-fit-analysis/evals/files/2/resume.md +32 -0
- package/packs/career/skills/job-fit-analysis/evals/files/4/posting.md +25 -0
- package/packs/career/skills/job-fit-analysis/evals/files/4/resume.md +29 -0
- package/packs/career/skills/job-fit-analysis/evals/files/5/posting.md +18 -0
- package/packs/career/skills/job-fit-analysis/evals/files/5/resume.md +23 -0
- package/packs/career/skills/job-fit-analysis/manifest.json +31 -0
- package/packs/career/skills/resume-tailor/SKILL.md +116 -0
- package/packs/career/skills/resume-tailor/evals/eval_queries.json +34 -0
- package/packs/career/skills/resume-tailor/evals/evals.json +105 -0
- package/packs/career/skills/resume-tailor/evals/files/1/posting.md +26 -0
- package/packs/career/skills/resume-tailor/evals/files/1/resume.md +32 -0
- package/packs/career/skills/resume-tailor/evals/files/2/posting.md +19 -0
- package/packs/career/skills/resume-tailor/evals/files/2/resume.md +26 -0
- package/packs/career/skills/resume-tailor/evals/files/3/posting.md +21 -0
- package/packs/career/skills/resume-tailor/evals/files/3/resume.md +32 -0
- package/packs/career/skills/resume-tailor/evals/files/4/posting.md +28 -0
- package/packs/career/skills/resume-tailor/evals/files/4/resume.md +35 -0
- package/packs/career/skills/resume-tailor/evals/files/5/posting.md +20 -0
- package/packs/career/skills/resume-tailor/evals/files/5/resume.md +32 -0
- package/packs/career/skills/resume-tailor/evals/files/6/posting.md +25 -0
- package/packs/career/skills/resume-tailor/evals/files/6/resume.md +29 -0
- package/packs/career/skills/resume-tailor/evals/files/7/posting.md +18 -0
- package/packs/career/skills/resume-tailor/evals/files/7/resume.md +23 -0
- package/packs/career/skills/resume-tailor/manifest.json +37 -0
- package/packs/career/skills/resume-tailor/scripts/claim_check.py +247 -0
- package/packs/converters/skills/file-to-markdown/SKILL.md +8 -0
- package/packs/converters/skills/file-to-markdown/manifest.json +1 -1
- package/packs/converters/skills/md-to-html/SKILL.md +8 -0
- package/packs/converters/skills/md-to-html/manifest.json +1 -1
- package/packs/converters/skills/mermaid-render/SKILL.md +8 -0
- package/packs/converters/skills/mermaid-render/manifest.json +1 -1
- package/packs/core/skills/output-hygiene/SKILL.md +8 -0
- package/packs/core/skills/output-hygiene/manifest.json +1 -1
- package/packs/data-analytics/skills/metric-definition/SKILL.md +8 -0
- package/packs/data-analytics/skills/metric-definition/evals/evals.json +30 -0
- package/packs/data-analytics/skills/metric-definition/evals/files/2/tables.md +42 -0
- package/packs/data-analytics/skills/metric-definition/evals/files/2/thread.md +40 -0
- package/packs/data-analytics/skills/metric-definition/manifest.json +1 -1
- package/packs/design/skills/deck-builder/SKILL.md +8 -0
- package/packs/design/skills/deck-builder/manifest.json +1 -1
- package/packs/dev-team/skills/agents-md-generator/SKILL.md +8 -0
- package/packs/dev-team/skills/agents-md-generator/manifest.json +1 -1
- package/packs/dev-team/skills/contribution-wizard/SKILL.md +8 -0
- package/packs/dev-team/skills/contribution-wizard/evals/evals.json +29 -0
- package/packs/dev-team/skills/contribution-wizard/evals/files/2/AGENTS.md +9 -0
- package/packs/dev-team/skills/contribution-wizard/evals/files/2/CATALOG.md +18 -0
- package/packs/dev-team/skills/contribution-wizard/evals/files/2/CONTRIBUTING.md +45 -0
- package/packs/dev-team/skills/contribution-wizard/evals/files/2/OWNERS.md +7 -0
- package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/detention-claim-letter/INSTRUCTIONS.md +20 -0
- package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/detention-claim-letter/skill.yaml +11 -0
- package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/detention-claim-letter/tests/cases.yaml +25 -0
- package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/rate-con-extractor/INSTRUCTIONS.md +20 -0
- package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/rate-con-extractor/skill.yaml +8 -0
- package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/rate-con-extractor/tests/cases.yaml +32 -0
- package/packs/dev-team/skills/contribution-wizard/manifest.json +1 -1
- package/packs/dev-team/skills/devils-advocate/SKILL.md +8 -0
- package/packs/dev-team/skills/devils-advocate/evals/evals.json +29 -0
- package/packs/dev-team/skills/devils-advocate/evals/files/2/signups.py +116 -0
- package/packs/dev-team/skills/devils-advocate/evals/files/2/test_signups.py +69 -0
- package/packs/dev-team/skills/devils-advocate/manifest.json +1 -1
- package/packs/dev-team/skills/pre-merge-review/SKILL.md +8 -0
- package/packs/dev-team/skills/pre-merge-review/manifest.json +1 -1
- package/packs/dev-team/skills/release-notes/SKILL.md +8 -0
- package/packs/dev-team/skills/release-notes/evals/evals.json +29 -0
- package/packs/dev-team/skills/release-notes/evals/files/2/commits.txt +35 -0
- package/packs/dev-team/skills/release-notes/manifest.json +1 -1
- package/packs/product-manager/skills/prfaq/SKILL.md +8 -0
- package/packs/product-manager/skills/prfaq/manifest.json +1 -1
- package/packs/product-manager/skills/strategy-analysis/SKILL.md +9 -1
- package/packs/product-manager/skills/strategy-analysis/manifest.json +1 -1
- package/packs/product-manager/skills/user-journey-map/SKILL.md +8 -0
- package/packs/product-manager/skills/user-journey-map/manifest.json +1 -1
- package/packs/research/skills/hypothesis-comparison/SKILL.md +8 -0
- package/packs/research/skills/hypothesis-comparison/manifest.json +1 -1
- package/packs/research/skills/source-synthesis/SKILL.md +8 -0
- package/packs/research/skills/source-synthesis/evals/evals.json +30 -0
- package/packs/research/skills/source-synthesis/evals/files/2/badge-data.md +27 -0
- package/packs/research/skills/source-synthesis/evals/files/2/director-email.md +16 -0
- package/packs/research/skills/source-synthesis/evals/files/2/exit-interviews.md +17 -0
- package/packs/research/skills/source-synthesis/evals/files/2/practice-weekly-article.md +21 -0
- package/packs/research/skills/source-synthesis/evals/files/2/staff-survey-summary.md +41 -0
- package/packs/research/skills/source-synthesis/manifest.json +1 -1
- package/packs/solution-architect/skills/db-schema-design/SKILL.md +8 -0
- package/packs/solution-architect/skills/db-schema-design/evals/evals.json +29 -0
- package/packs/solution-architect/skills/db-schema-design/evals/files/2/current_tables.sql +29 -0
- package/packs/solution-architect/skills/db-schema-design/evals/files/2/notes.md +53 -0
- package/packs/solution-architect/skills/db-schema-design/manifest.json +1 -1
- package/packs/solution-architect/skills/design-doc/SKILL.md +8 -0
- package/packs/solution-architect/skills/design-doc/evals/evals.json +29 -0
- package/packs/solution-architect/skills/design-doc/evals/files/2/brief.md +18 -0
- package/packs/solution-architect/skills/design-doc/evals/files/2/eng-notes.md +30 -0
- package/packs/solution-architect/skills/design-doc/manifest.json +1 -1
- package/packs/solution-architect/skills/figma-diagrams/SKILL.md +8 -0
- package/packs/solution-architect/skills/figma-diagrams/manifest.json +1 -1
- package/packs/solution-architect/skills/tech-comparison-matrix/SKILL.md +8 -0
- package/packs/solution-architect/skills/tech-comparison-matrix/evals/evals.json +29 -0
- package/packs/solution-architect/skills/tech-comparison-matrix/evals/files/2/requirements.md +20 -0
- package/packs/solution-architect/skills/tech-comparison-matrix/evals/files/2/vendor-notes.md +29 -0
- package/packs/solution-architect/skills/tech-comparison-matrix/manifest.json +1 -1
- package/packs/sre-oncall/skills/delivery-metrics-report/SKILL.md +8 -0
- package/packs/sre-oncall/skills/delivery-metrics-report/manifest.json +1 -1
- package/packs/sre-oncall/skills/postmortem-generator/SKILL.md +8 -0
- package/packs/sre-oncall/skills/postmortem-generator/evals/evals.json +30 -0
- package/packs/sre-oncall/skills/postmortem-generator/evals/files/2/pager-export.txt +22 -0
- package/packs/sre-oncall/skills/postmortem-generator/evals/files/2/slack-thread.txt +28 -0
- package/packs/sre-oncall/skills/postmortem-generator/manifest.json +1 -1
- package/packs/stakeholder-comms/skills/guide-builder/SKILL.md +8 -0
- package/packs/stakeholder-comms/skills/guide-builder/evals/evals.json +29 -0
- package/packs/stakeholder-comms/skills/guide-builder/evals/files/2/api-notes.md +44 -0
- package/packs/stakeholder-comms/skills/guide-builder/evals/files/2/sample-booking.json +19 -0
- package/packs/stakeholder-comms/skills/guide-builder/manifest.json +1 -1
- package/profiles.json +2 -2
package/README.md
CHANGED
|
@@ -33,6 +33,7 @@ Install one pack. Every role pack also brings `core` (intake, critique, review c
|
|
|
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
35
|
- **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
|
+
- **Applying for a job:** `career` — an honest fit check against the posting, a tailored resume and a cover letter that claim nothing you didn't. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/career/)
|
|
36
37
|
- **Everyone:** `core` on its own. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/core/)
|
|
37
38
|
|
|
38
39
|
## Start in one command
|
|
@@ -54,7 +55,7 @@ In Claude Code you can use the plugin marketplace instead: run `/plugin marketpl
|
|
|
54
55
|
## How it works
|
|
55
56
|
|
|
56
57
|
- **A skill produces one file you own.** Each ships a quality bar, named anti-patterns and acceptance evals, so the output is an artifact, not a conversation. See [every skill, by category](guides/reference/skill-catalogue.md).
|
|
57
|
-
- **Loops order skills, and a gate decides when work moves on.** Five loops cover the lifecycle (`discover`, `design`, `build`, `release`, `operate`), plus the `ship-a-draft` wrapper for any document. Each gate is a script, a review panel or a person, chosen by how expensive the mistake is to undo. See [the loops, stage by stage](guides/reference/loops.md) and [why loops](guides/explanation/loops.md).
|
|
58
|
+
- **Loops order skills, and a gate decides when work moves on.** Five loops cover the lifecycle (`discover`, `design`, `build`, `release`, `operate`), plus the `ship-a-draft` wrapper for any document and `apply` for a job application. Each gate is a script, a review panel or a person, chosen by how expensive the mistake is to undo. See [the loops, stage by stage](guides/reference/loops.md) and [why loops](guides/explanation/loops.md).
|
|
58
59
|
- **Measured, not asserted.** `run_bench.py` runs each acceptance eval with the skill and without it, in a sandbox, and reports the lift, a blind preference from two judges, and the cost per run. The results are published whether or not they flatter the skills. See [how skills are checked](https://sananthanarayan.github.io/skilldrop/evals/) and [RFC-0040](docs/rfcs/0040-skill-benchmark.md).
|
|
59
60
|
- **Copy, never transform.** A skill is a plain `SKILL.md` folder in the [Agent Skills](https://agentskills.io) format, at `packs/<pack>/skills/<name>/`. What runs in your agent is byte-identical to what is reviewed here. There is no runtime, and the tooling has zero dependencies.
|
|
60
61
|
- **Updates keep your edits.** `npx skilldrop-cli update` replaces files you haven't touched. For any file you changed, it leaves the new version beside it as `<file>.upstream`. See [upgrade installed skills](guides/how-to/upgrade-skills.md).
|
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"],
|
|
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"],
|
|
5
5
|
"outcomes": {
|
|
6
6
|
"decide-what-to-build": {
|
|
7
7
|
"for": "Product managers · founders · strategists",
|
|
@@ -185,6 +185,15 @@
|
|
|
185
185
|
"skill-author",
|
|
186
186
|
"skill-review"
|
|
187
187
|
]
|
|
188
|
+
},
|
|
189
|
+
"apply-for-a-job": {
|
|
190
|
+
"for": "Anyone applying for a job, in any field",
|
|
191
|
+
"description": "Prepare one application that is tailored and true: an honest fit check against the posting, a resume reworked without adding a claim, and a cover letter built only from what you supplied.",
|
|
192
|
+
"skills": [
|
|
193
|
+
"job-fit-analysis",
|
|
194
|
+
"resume-tailor",
|
|
195
|
+
"cover-letter"
|
|
196
|
+
]
|
|
188
197
|
}
|
|
189
198
|
}
|
|
190
199
|
}
|
package/model-routing.json
CHANGED
|
@@ -481,6 +481,18 @@
|
|
|
481
481
|
"ux-writing": {
|
|
482
482
|
"tier": "standard",
|
|
483
483
|
"rationale": "Short-form writing to fixed slot rules and character budgets, plus a terminology consistency pass. Bounded generation with clear checks."
|
|
484
|
+
},
|
|
485
|
+
"job-fit-analysis": {
|
|
486
|
+
"tier": "standard",
|
|
487
|
+
"rationale": "Matches a posting's requirements to resume lines and reports the gaps. The rule is mechanical: no line in the resume, no credit."
|
|
488
|
+
},
|
|
489
|
+
"resume-tailor": {
|
|
490
|
+
"tier": "standard",
|
|
491
|
+
"rationale": "Reorders and rewords existing content against a posting, with a script listing every figure and name the original doesn't contain."
|
|
492
|
+
},
|
|
493
|
+
"cover-letter": {
|
|
494
|
+
"tier": "standard",
|
|
495
|
+
"rationale": "A short letter from supplied facts, with a script listing every figure and name the person's material doesn't contain."
|
|
484
496
|
}
|
|
485
497
|
}
|
|
486
498
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skilldrop-cli",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.7",
|
|
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",
|
|
@@ -23,6 +23,14 @@ The load-bearing idea: **the bottleneck moves.** Each stage is limited by someth
|
|
|
23
23
|
|
|
24
24
|
## How to respond
|
|
25
25
|
|
|
26
|
+
**Four rules come before the steps and outrank them:**
|
|
27
|
+
|
|
28
|
+
- **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.
|
|
29
|
+
- **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".
|
|
30
|
+
- **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.
|
|
31
|
+
- **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.
|
|
32
|
+
- **For this skill:** Say what a stage means in a plain sentence the first time you use it. Don't describe as the team's stated pain something they didn't say, and don't put target dates or head-counts on the plan unless they gave them.
|
|
33
|
+
|
|
26
34
|
1. **Place the team on exactly one stage, from observables.** Ask for (or extract) three things: how many agents a typical engineer has in flight, who writes most of the code now, and what gets reviewed — every diff, final diffs, or exceptions. Quote the evidence. **A range is a refusal** — pick the stage the team is *operating at*, not the best day it ever had. Cap clarifying questions at 2.
|
|
27
35
|
|
|
28
36
|
2. **Discount aspiration.** A team that bought licences for 200 people and has three power users is at stage 1 with an outlier, not stage 2. Place on the median engineer, and say so when the distribution is lopsided — the spread is itself a finding.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-adoption-stage",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Place an engineering team on the agentic-coding adoption ladder (0 gated → 4 intent-steered) using observables like agents-in-flight per engineer and who writes the code, name the one bottleneck gating the next step, prescribe the single next unlock, and state which current guardrail must change. Use when a leader asks \"how far along are we with coding agents\", \"why has our AI adoption plateaued\", or \"what do we do next to get more out of this\". Do NOT use to assess organisational preconditions like data, policy, and culture (that's ai-readiness-assessment) or to plan a tool's human rollout (that's ai-adoption-rollout).",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": {
|
|
@@ -9,6 +9,14 @@ You shouldn't be prompting agents; you should be designing the loops that prompt
|
|
|
9
9
|
|
|
10
10
|
## How to respond
|
|
11
11
|
|
|
12
|
+
**Four rules come before the steps and outrank them:**
|
|
13
|
+
|
|
14
|
+
- **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.
|
|
15
|
+
- **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".
|
|
16
|
+
- **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.
|
|
17
|
+
- **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.
|
|
18
|
+
- **For this skill:** Describe the loop for the user's task in concrete terms: what triggers it, what each stage produces, what checks it, and where a person approves. Caps and budgets use the user's numbers; without them, give the cap as a choice for them to make.
|
|
19
|
+
|
|
12
20
|
1. **Pin the loop's job and its "done".** Ask at most 2 questions, spent on: *"what artifact does one successful run produce?"* and *"how would a human verify it's right without watching the run?"* The done-condition must be **observable** — tests pass, checklist satisfied, reviewer-agent returns zero blockers — never "output looks good". No observable done-condition derivable → the task isn't loop-ready; say what needs defining first. Non-interactive run (no user to ask): derive both from the input and tag `[assumption]`; no artifact derivable → emit `BLOCKED: need the task and its done-condition`.
|
|
13
21
|
|
|
14
22
|
2. **Draw the state machine — generate, verify, gate, and nothing mushier.**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-loop-design",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Design a supervised agent loop — the generate→verify→gate cycle, observable exit criteria, hard iteration cap, human gates at irreversible steps, and failure routes — as a loop spec a team can implement in any agent harness. Use when the user wants to automate a recurring task with an AI agent loop, design a work loop / review loop / research loop, or asks \"how do I stop my agent from running forever or shipping junk\".",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": { "npm": [], "pip": [] },
|
|
@@ -11,6 +11,14 @@ Readiness assessments fail in one of two ways: a number with no evidence behind
|
|
|
11
11
|
|
|
12
12
|
## How to respond
|
|
13
13
|
|
|
14
|
+
**Four rules come before the steps and outrank them:**
|
|
15
|
+
|
|
16
|
+
- **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.
|
|
17
|
+
- **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".
|
|
18
|
+
- **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.
|
|
19
|
+
- **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.
|
|
20
|
+
- **For this skill:** Open with the verdict (ready, not yet, or not ready) and the two or three things to do first. The scorecard follows. Leave a dimension unscored when there is no evidence for it, and name no owner the user didn't name.
|
|
21
|
+
|
|
14
22
|
1. **Establish scope and the decision it feeds.** Whose readiness — one team, a function, the whole company? And what happens with the answer (a go/no-go, a budget request, a sequencing decision)? Scope changes what counts as evidence. Cap clarifying questions at 2.
|
|
15
23
|
|
|
16
24
|
2. **Score the six dimensions.** These are fixed — do not invent new ones for a single engagement, and do not drop one because it's awkward to assess. Score each **0–4** (0 absent · 1 ad hoc · 2 repeatable · 3 managed · 4 optimised):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-readiness-assessment",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Score an organisation's or team's readiness to adopt AI tooling across six gating dimensions — data, tooling, skills, governance, process, and culture — with an evidence line per score and the blocking gaps ranked by what stops adoption first. Use when the user asks \"are we ready for AI\", wants an AI maturity or readiness baseline, or needs to know what to fix before rolling tools out. Do NOT use to pick which use cases to build (that's ai-use-case-triage) or to plan the rollout itself (that's ai-adoption-rollout).",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": {
|
|
@@ -11,6 +11,14 @@ A policy that prohibits without offering a permitted path doesn't reduce risk; i
|
|
|
11
11
|
|
|
12
12
|
## How to respond
|
|
13
13
|
|
|
14
|
+
**Four rules come before the steps and outrank them:**
|
|
15
|
+
|
|
16
|
+
- **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.
|
|
17
|
+
- **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".
|
|
18
|
+
- **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.
|
|
19
|
+
- **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.
|
|
20
|
+
- **For this skill:** A usable policy says what to do when the rule has already been broken (data already pasted into a tool) and how it is enforced; include both. Check that the data classes and the approved-tools list agree with each other. Make no claim about where a tool sends data unless the user told you.
|
|
21
|
+
|
|
14
22
|
1. **Establish scope and the regulatory floor.** Which population, which tools, and any regime already binding (sector rules, customer contracts, an existing data-classification scheme). If the organisation already classifies data, **reuse those tier names** rather than inventing a parallel scheme — two classification systems means neither is followed. Cap clarifying questions at 2.
|
|
15
23
|
|
|
16
24
|
2. **Define three data tiers and what may enter a tool at each.** Three, because five is not memorable and one is not a policy:
|
|
@@ -14,6 +14,36 @@
|
|
|
14
14
|
"The disclosure rule states whether and where AI assistance must be declared",
|
|
15
15
|
"No regulation is asserted beyond what the prompt names; unclear applicability is marked [confirm with counsel]"
|
|
16
16
|
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": 2,
|
|
20
|
+
"held_out": "2026-10-05",
|
|
21
|
+
"prompt": "I'm the office manager at a 40-person recruitment agency and the MD has asked me to write our AI policy. Her email is in md-email.md, what our IT provider told me is in it-notes.md, and our existing data labels are in data-handling-sheet.md. Can you draft the policy so I can send it to her?",
|
|
22
|
+
"assertions": [
|
|
23
|
+
"It says candidate CVs, salary details and other Confidential data must not go into personal or free chatbot accounts, and tells staff what to do instead for the same task",
|
|
24
|
+
"It separates the 8-seat ChatGPT Team workspace from personal ChatGPT accounts, and notes that about 30 people have no Team seat",
|
|
25
|
+
"Copilot is not listed as an approved or available tool: the trial ended on 30 June 2026 and was not renewed",
|
|
26
|
+
"It does not state that the tools never train on the firm's data or that data stays in the UK; it says this is unconfirmed until someone checks the contract terms",
|
|
27
|
+
"It does not simply make Brightwell IT the policy owner: it notes Brightwell declined to make policy decisions and the operations manager post is vacant, and proposes an interim owner or flags ownership for the MD to decide",
|
|
28
|
+
"It says candidate data for Aldercroft Group roles must not go into any AI tool without Aldercroft's written consent",
|
|
29
|
+
"It says what to do about the 14 CVs pasted on 16 September and tells staff who to report it to if they have already pasted Confidential data",
|
|
30
|
+
"It names no law or regulation other than GDPR, which the MD mentioned, and NoteQuill is treated as unapproved or pending review, not as cleared"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": 3,
|
|
35
|
+
"held_out": "2026-10-05",
|
|
36
|
+
"prompt": "we're a small charity, 12 staff plus volunteers. the trustees want an 'AI policy' by the next board meeting. honestly I don't know what tools people are using, I think a couple of them use chatgpt for grant applications. we hold case notes on the people we support. can you write something short I can take to the board",
|
|
37
|
+
"assertions": [
|
|
38
|
+
"It delivers a draft policy in the reply and does not stop at a list of questions",
|
|
39
|
+
"It says case notes and anything that identifies a person the charity supports must not be put into AI chatbots, and says what to do instead",
|
|
40
|
+
"Drafting grant applications with AI is allowed, with a person checking the facts and figures before the application is submitted",
|
|
41
|
+
"It says whether the policy covers volunteers as well as the 12 staff",
|
|
42
|
+
"It says which tools are in use is not known, and proposes finding out or leaves the approved-tool list to be filled in; it does not present a list of approved tools as already agreed",
|
|
43
|
+
"It names no individual and no charity name; responsibilities are given to roles (for example a named trustee role or the director) or flagged for the board to assign",
|
|
44
|
+
"It does not state that a specific law, regulator or sector code applies as fact; any mention is marked as something to confirm",
|
|
45
|
+
"The policy itself is short: about two pages or less (roughly 800 words)"
|
|
46
|
+
]
|
|
17
47
|
}
|
|
18
48
|
]
|
|
19
49
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Larkfield Talent: data handling sheet (v3, January 2025)
|
|
2
|
+
|
|
3
|
+
Three labels. Everything the firm holds is one of these.
|
|
4
|
+
|
|
5
|
+
| Label | What it covers | Examples |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| **Public** | Anything already published | Job adverts, the website, published salary guides |
|
|
8
|
+
| **Internal** | Day-to-day business information that is not about an identifiable person | Internal process docs, anonymised placement statistics, fee templates |
|
|
9
|
+
| **Confidential** | Anything about an identifiable candidate or client contact, and anything a client contract restricts | Candidate CVs, salary and notice details, interview notes, client contracts, call recordings |
|
|
10
|
+
|
|
11
|
+
## Client-specific terms
|
|
12
|
+
|
|
13
|
+
**Aldercroft Group** (master services agreement, clause 9.3): candidate data relating to
|
|
14
|
+
Aldercroft roles must not be passed to any third-party processor without Aldercroft's prior
|
|
15
|
+
written consent.
|
|
16
|
+
|
|
17
|
+
No other client contract has a clause like this as far as we know. Nobody has checked since
|
|
18
|
+
2025.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Notes from Brightwell IT (outsourced provider, on site Thursdays)
|
|
2
|
+
|
|
3
|
+
Sent by Petra Lindqvist, Brightwell IT, 30 September 2026, in reply to Wendell's questions.
|
|
4
|
+
|
|
5
|
+
## Tools we know about
|
|
6
|
+
|
|
7
|
+
| Tool | Status | Detail |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| ChatGPT Team | Active | 8 seats, bought March 2026. Assigned to the directors and the marketing team. |
|
|
10
|
+
| ChatGPT free / personal accounts | In use, not managed | We see sign-ins from most consultant laptops. We reckon about 30 people. Personal email logins, nothing we control. |
|
|
11
|
+
| Microsoft Copilot | Not active | 10-seat trial. It ended on 30 June 2026 and was not renewed. |
|
|
12
|
+
| NoteQuill (call transcription) | In use, not managed | Browser extension. 6 consultants have it installed. Nobody bought it centrally. We have not looked at its terms. |
|
|
13
|
+
|
|
14
|
+
## Things you asked
|
|
15
|
+
|
|
16
|
+
**Do the tools train on our data / where is it stored?** We have not reviewed the terms for
|
|
17
|
+
any of these and can't confirm either way. Somebody would need to read the contract for the
|
|
18
|
+
Team plan. For the personal accounts and NoteQuill we have nothing.
|
|
19
|
+
|
|
20
|
+
**Can Brightwell own the policy?** No. We keep the laptops and accounts running. We don't
|
|
21
|
+
make policy decisions for clients and we are only with you one day a week. We can enforce
|
|
22
|
+
whatever you decide (blocking sites, removing extensions) if you tell us what.
|
|
23
|
+
|
|
24
|
+
**Who did this before?** The operations manager, but that post has been empty since
|
|
25
|
+
Farida left in August.
|
|
26
|
+
|
|
27
|
+
## The incident
|
|
28
|
+
|
|
29
|
+
On 16 September a consultant pasted 14 candidate CVs into a personal ChatGPT account to
|
|
30
|
+
get one-paragraph summaries for a client shortlist. We found out because he mentioned it.
|
|
31
|
+
Nothing has been done about it since.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
From: Corinne Ashby (Managing Director)
|
|
2
|
+
To: Wendell Okafor (Office Manager)
|
|
3
|
+
Date: 28 September 2026
|
|
4
|
+
Subject: AI rules, need something written down
|
|
5
|
+
|
|
6
|
+
Wendell,
|
|
7
|
+
|
|
8
|
+
After the thing with Tobias I want an actual policy for AI tools that I can send to all
|
|
9
|
+
40 of us. Short enough that people read it.
|
|
10
|
+
|
|
11
|
+
Where I think we are:
|
|
12
|
+
|
|
13
|
+
- ChatGPT is approved. We have a Team licence.
|
|
14
|
+
- We have Copilot as well.
|
|
15
|
+
- The transcription thing the consultants use on client calls, I don't know what it's
|
|
16
|
+
called.
|
|
17
|
+
|
|
18
|
+
Things I want it to say:
|
|
19
|
+
|
|
20
|
+
- Our tools never train on our data and everything stays in the UK. Clients ask about this
|
|
21
|
+
and I want to be able to point at the policy.
|
|
22
|
+
- What people can and can't put in. Candidate CVs are the obvious one. GDPR obviously
|
|
23
|
+
applies to us.
|
|
24
|
+
- What we do about the CVs Tobias already pasted in.
|
|
25
|
+
- IT will own it.
|
|
26
|
+
|
|
27
|
+
Use the labels from the data handling sheet, I don't want a second scheme.
|
|
28
|
+
|
|
29
|
+
Corinne
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-usage-policy",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Draft an organisation's AI acceptable-use policy — three data-sensitivity tiers with what may be put into a tool at each, permitted and prohibited uses stated as behaviours, a human-review matrix keyed to consequence, an approved-tool list with an exception route, and a named owner per rule. Use when a team needs rules for what people may put into AI tools, or asks for an AI acceptable-use or governance policy. Do NOT use to write a repo's agent-tooling policy (that's agents-md-generator) or to analyse one agent's capability surface (that's agent-threat-model).",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": {
|
|
@@ -9,6 +9,14 @@ Builds the measurement that turns "the new prompt feels better" into "the new pr
|
|
|
9
9
|
|
|
10
10
|
## How to respond
|
|
11
11
|
|
|
12
|
+
**Four rules come before the steps and outrank them:**
|
|
13
|
+
|
|
14
|
+
- **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.
|
|
15
|
+
- **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".
|
|
16
|
+
- **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.
|
|
17
|
+
- **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.
|
|
18
|
+
- **For this skill:** Use all the data the user already has, such as logged questions, before proposing to label new data. Don't call a check deterministic when it reads free text.
|
|
19
|
+
|
|
12
20
|
1. **Pin the task and the unit of judgment.** What does the feature do (classify / extract / summarize / answer-with-RAG / agentic-multi-step), and **what does one gradeable output look like**? Ask at most 2 questions, spent on the failure that hurts most ("what's a wrong answer that would actually cause a problem?") and whether ground truth exists. The answer-that-hurts shapes the adversarial cases and the critical subset.
|
|
13
21
|
|
|
14
22
|
2. **Build the golden set with three deliberate buckets** (case format in [`templates/`](templates/)):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llm-eval-harness",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Design an evaluation harness for an LLM-powered feature — a versioned golden set (representative + adversarial + regression cases), the cheapest adequate grading method per case, a metric with a pre-set pass bar and regression gate, and a failure taxonomy that targets iteration. Use when the user is building or tuning an LLM feature (prompt, RAG, agent, classifier) and needs evals, a way to test prompt/model changes, or to stop shipping quality regressions on vibes.",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": { "npm": [], "pip": [] },
|
|
@@ -9,6 +9,14 @@ Produces an **orchestration plan**: which subagents exist, what each one alone i
|
|
|
9
9
|
|
|
10
10
|
## How to respond
|
|
11
11
|
|
|
12
|
+
**Four rules come before the steps and outrank them:**
|
|
13
|
+
|
|
14
|
+
- **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.
|
|
15
|
+
- **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".
|
|
16
|
+
- **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.
|
|
17
|
+
- **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.
|
|
18
|
+
- **For this skill:** A yes-or-no question gets yes or no and the reason in two or three sentences. A design names what each agent checks, with what tools, and what the final report contains. Budget numbers come from the user or are left out.
|
|
19
|
+
|
|
12
20
|
1. **Justify the fan-out or refuse it.** Exactly three reasons earn multiple agents — name which applies, or recommend a single agent and stop:
|
|
13
21
|
- **Context separation**: the task spans more material than one context holds well, and it partitions cleanly (per-module audit, per-source research).
|
|
14
22
|
- **Independence**: judgments must not contaminate each other — reviewers, estimators, hypothesis-testers whose value is that they haven't seen each other's answers.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "subagent-design",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Decompose a task into an orchestrator and subagents — one-mission role cards with typed output contracts, a topology (pipeline / parallel / judge panel) chosen with a reason, context-isolation rationale, and a verification stage that is never a generator. Use when the user wants to fan work out across multiple agents, design a multi-agent workflow or orchestration, or asks \"should this be one agent or several\".",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": { "npm": [], "pip": [] },
|
|
@@ -9,6 +9,14 @@ Reads a SKILL.md and generates eval cases that cover the skill's happy path, edg
|
|
|
9
9
|
|
|
10
10
|
## How to respond
|
|
11
11
|
|
|
12
|
+
**Four rules come before the steps and outrank them:**
|
|
13
|
+
|
|
14
|
+
- **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.
|
|
15
|
+
- **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".
|
|
16
|
+
- **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.
|
|
17
|
+
- **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.
|
|
18
|
+
- **For this skill:** Read the skill you were asked to cover before saying anything is missing: look in the working directory and in the request. Write the eval files, and make sure each requirement the skill states has a case.
|
|
19
|
+
|
|
12
20
|
### Step 1 — Read the skill
|
|
13
21
|
|
|
14
22
|
Ask the user to paste the full SKILL.md. Extract:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eval-harness-generator",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
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": [] },
|
|
@@ -9,6 +9,14 @@ Converts a natural-language function description into a valid Anthropic `tool_us
|
|
|
9
9
|
|
|
10
10
|
## How to respond
|
|
11
11
|
|
|
12
|
+
**Four rules come before the steps and outrank them:**
|
|
13
|
+
|
|
14
|
+
- **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.
|
|
15
|
+
- **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".
|
|
16
|
+
- **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.
|
|
17
|
+
- **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.
|
|
18
|
+
- **For this skill:** Deliver the tool definition that was asked for. Encode every range, format, enum and default the source states, and add no behaviour the source doesn't state. No usage example unless asked.
|
|
19
|
+
|
|
12
20
|
### Step 1 — Intake
|
|
13
21
|
|
|
14
22
|
Ask the user to describe the function. Collect:
|
|
@@ -13,6 +13,35 @@
|
|
|
13
13
|
"Includes a Python snippet passing the tool to client.messages.create(tools=[...]) and handling stop_reason == 'tool_use'",
|
|
14
14
|
"Does not invent parameters, enum values, or behaviors not in the supplied signature and docstring"
|
|
15
15
|
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": 2,
|
|
19
|
+
"held_out": "2026-10-05",
|
|
20
|
+
"prompt": "Need a Claude tool definition for bookAppointment (it's in book_appointment.ts) so our front-desk assistant can book visits for callers. Ideally the same tool lets it cancel a booking too.",
|
|
21
|
+
"assertions": [
|
|
22
|
+
"It produces a tool definition with a name, a description and an input_schema of type object, and ctx / RequestContext is not one of the properties",
|
|
23
|
+
"The top-level required array contains the clinic code, visit type, start time and contact, and does not contain duration, vet id or notes",
|
|
24
|
+
"The pet id is not unconditionally required: the definition or reply states it is needed for every visit type except new_patient and must be left out for new_patient",
|
|
25
|
+
"contact is a nested object with its own required array containing phone, with email and SMS reminders optional",
|
|
26
|
+
"It flags that the comment says bookings can be made up to 90 days ahead while the code enforces 60, and does not state 90 days as the limit",
|
|
27
|
+
"Duration is limited to 15, 30 or 45 with a default of 30, and the definition states that dental visits need 45 minutes",
|
|
28
|
+
"It says cancelling is not supported by this function and does not add a cancel parameter, action or mode to the tool",
|
|
29
|
+
"It does not list six clinic codes as an enum or as fact, since the source gives only the example PVG-03"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": 3,
|
|
34
|
+
"held_out": "2026-10-05",
|
|
35
|
+
"prompt": "need tool defs for our support agent, two things: look up a shipment by tracking number, and get a shipping quote. quote needs origin zip, dest zip, weight (lbs) and service level - we have ground, 2-day and overnight i think? Dario would know for sure. dimensions are optional on the quote. no idea yet what the lookup gives back, that endpoint's still being built",
|
|
36
|
+
"assertions": [
|
|
37
|
+
"It delivers two tool definitions, each with a name, a description and an input_schema, and does not stop at questions",
|
|
38
|
+
"The quote tool's required array includes origin zip, destination zip and weight, and dimensions is not in it",
|
|
39
|
+
"The weight parameter's description states the unit is pounds",
|
|
40
|
+
"Service level offers ground, 2-day and overnight, and the reply says that list is unconfirmed and should be checked",
|
|
41
|
+
"Each tool's description says when the agent should call it, so a tracking question and a pricing question map to different tools",
|
|
42
|
+
"It does not state a tracking number format or pattern, a weight limit, carrier names or a dimension unit as fact",
|
|
43
|
+
"It does not describe the lookup's return fields as fact, and says what the lookup returns is not yet known"
|
|
44
|
+
]
|
|
16
45
|
}
|
|
17
46
|
]
|
|
18
47
|
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// scheduling/book_appointment.ts — Pawline Veterinary Group
|
|
2
|
+
import { RequestContext, ValidationError } from "../lib/http";
|
|
3
|
+
import { daysAhead, isQuarterHour, slots } from "./slots";
|
|
4
|
+
|
|
5
|
+
const MAX_ADVANCE_DAYS = 60;
|
|
6
|
+
const ALLOWED_DURATIONS = [15, 30, 45];
|
|
7
|
+
|
|
8
|
+
export type VisitType = "new_patient" | "checkup" | "vaccination" | "dental";
|
|
9
|
+
|
|
10
|
+
export interface OwnerContact {
|
|
11
|
+
phone: string; // E.164, e.g. +14155550123
|
|
12
|
+
email?: string;
|
|
13
|
+
smsReminders?: boolean; // default true
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface BookAppointmentInput {
|
|
17
|
+
clinicCode: string; // one of our six clinic codes, e.g. "PVG-03"
|
|
18
|
+
visitType: VisitType;
|
|
19
|
+
petId?: string; // existing patient id: "pet_" followed by 8 characters
|
|
20
|
+
startTime: string; // ISO 8601 with UTC offset, on a 15-minute boundary
|
|
21
|
+
durationMinutes?: number; // default 30
|
|
22
|
+
vetId?: string; // omit to get the first available vet
|
|
23
|
+
contact: OwnerContact;
|
|
24
|
+
notes?: string; // shown to the vet, max 500 characters
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Books an appointment slot at one clinic. Appointments can be booked up to
|
|
29
|
+
* 90 days ahead. Returns the confirmation code and the assigned vet.
|
|
30
|
+
*
|
|
31
|
+
* Booking only. Rescheduling and cancelling are handled by the front desk
|
|
32
|
+
* for now; there is no endpoint for either yet.
|
|
33
|
+
*/
|
|
34
|
+
export async function bookAppointment(input: BookAppointmentInput, ctx: RequestContext) {
|
|
35
|
+
const duration = input.durationMinutes ?? 30;
|
|
36
|
+
|
|
37
|
+
if (input.visitType !== "new_patient" && !input.petId) {
|
|
38
|
+
throw new ValidationError("petId is required for existing patients");
|
|
39
|
+
}
|
|
40
|
+
if (input.visitType === "new_patient" && input.petId) {
|
|
41
|
+
throw new ValidationError("new_patient visits must not carry a petId");
|
|
42
|
+
}
|
|
43
|
+
if (!ALLOWED_DURATIONS.includes(duration)) {
|
|
44
|
+
throw new ValidationError("durationMinutes must be 15, 30 or 45");
|
|
45
|
+
}
|
|
46
|
+
if (input.visitType === "dental" && duration < 45) {
|
|
47
|
+
throw new ValidationError("dental visits need 45 minutes");
|
|
48
|
+
}
|
|
49
|
+
if (!isQuarterHour(input.startTime)) {
|
|
50
|
+
throw new ValidationError("startTime must be on a 15-minute boundary");
|
|
51
|
+
}
|
|
52
|
+
if (daysAhead(input.startTime) < 0) {
|
|
53
|
+
throw new ValidationError("startTime is in the past");
|
|
54
|
+
}
|
|
55
|
+
if (daysAhead(input.startTime) > MAX_ADVANCE_DAYS) {
|
|
56
|
+
throw new ValidationError("startTime is too far ahead");
|
|
57
|
+
}
|
|
58
|
+
if (input.notes && input.notes.length > 500) {
|
|
59
|
+
throw new ValidationError("notes is limited to 500 characters");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const slot = await slots.reserve({ ...input, durationMinutes: duration }, ctx.staffUserId);
|
|
63
|
+
return { confirmationCode: slot.code, vetId: slot.vetId, startTime: slot.startTime };
|
|
64
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tool-use-schema-writer",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Takes a function description (name, purpose, parameters) and writes a valid Anthropic tool_use JSON schema, with type annotations, required fields, and a description for each parameter. Produces a Python usage snippet for client.messages.create(tools=[...]). Use when wiring a Claude agent to a function or API, designing tools for a multi-agent system, or documenting an existing tool for agent consumption.",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": { "npm": [], "pip": [] },
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apply
|
|
3
|
+
description: Take one job posting and one resume to an application ready to send — an honest fit check, a tailored resume and a cover letter — with the candidate deciding whether to apply before any writing, and confirming every claim is true before anything is sent. Use when the user wants to apply for a job, says "help me apply for this", or wants a resume and cover letter prepared for one posting.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# apply
|
|
7
|
+
|
|
8
|
+
One application, start to send, for any job. It opens with a gate because the cheapest
|
|
9
|
+
application is the one you decide not to write, and it closes with one because the candidate
|
|
10
|
+
signs these documents and answers for them at interview. Both gates are **human**: an agent
|
|
11
|
+
can say what the resume shows, but only the candidate knows what is true and what they want.
|
|
12
|
+
|
|
13
|
+
## Stages
|
|
14
|
+
|
|
15
|
+
| # | Stage | Type | Skills | Gate |
|
|
16
|
+
|---|---|---|---|---|
|
|
17
|
+
| 1 | `fit` | gate | [`job-fit-analysis`](../../skills/job-fit-analysis/SKILL.md) | **G5** human |
|
|
18
|
+
| 2 | `tailor` | generate | [`resume-tailor`](../../skills/resume-tailor/SKILL.md) | — |
|
|
19
|
+
| 3 | `letter` | generate | [`cover-letter`](../../skills/cover-letter/SKILL.md) | — |
|
|
20
|
+
| 4 | `confirm` | verify | [`output-hygiene`](../../../core/skills/output-hygiene/SKILL.md) | **G6** human |
|
|
21
|
+
|
|
22
|
+
## How to run this loop
|
|
23
|
+
|
|
24
|
+
1. **Check the fit and stop.** Run `job-fit-analysis` on the posting and the resume. Put its
|
|
25
|
+
verdict, the screening requirements and its questions to the candidate, then wait at G5.
|
|
26
|
+
- `PROCEED`: they are applying. Go on.
|
|
27
|
+
- `PROCEED WITH CONDITIONS`: they are applying and have answered the questions. Save
|
|
28
|
+
their answers to `notes.md`; from here on those answers are source material alongside
|
|
29
|
+
the resume.
|
|
30
|
+
- `RECONSIDER`: they are not applying. The loop ends here, and that is a good outcome.
|
|
31
|
+
2. **Tailor the resume.** Run `resume-tailor` with the resume, the posting and `notes.md`
|
|
32
|
+
if it exists. Carry its "Not claimed" list forward.
|
|
33
|
+
3. **Write the letter.** Run `cover-letter` with the tailored resume, the posting, `notes.md`
|
|
34
|
+
and the candidate's reason for wanting the job if they gave one. Skip this stage when the
|
|
35
|
+
posting says not to send a letter.
|
|
36
|
+
4. **Clean both documents.** Run `output-hygiene` on the resume and the letter.
|
|
37
|
+
5. **Confirm at G6.** Show the candidate both documents with two short lists: what the
|
|
38
|
+
posting asks for that neither document claims, and anything the claim check still lists.
|
|
39
|
+
Ask them to confirm every line is true. `NOT READY` returns to `tailor` with their
|
|
40
|
+
corrections added to `notes.md`. The candidate sends the application; the loop never does.
|
|
41
|
+
|
|
42
|
+
## Verdicts
|
|
43
|
+
|
|
44
|
+
Defined in [`contracts/terminals.json`](../../../../contracts/terminals.json). G5 emits
|
|
45
|
+
`PROCEED`, `PROCEED WITH CONDITIONS`, `RECONSIDER` or `BLOCKED`. G6 emits `READY`,
|
|
46
|
+
`NOT READY` or `BLOCKED`. `RECONSIDER` leaves the loop: the candidate's time goes to a
|
|
47
|
+
better posting.
|
|
48
|
+
|
|
49
|
+
## Non-interactive runs
|
|
50
|
+
|
|
51
|
+
With no person present, neither gate can be satisfied. Run `fit`, deliver the analysis and
|
|
52
|
+
emit `BLOCKED: need the candidate's decision to apply`. Do not decide for them, and do not
|
|
53
|
+
produce documents carrying their name that they have not confirmed.
|
|
54
|
+
|
|
55
|
+
## When a stage's skill is not installed
|
|
56
|
+
|
|
57
|
+
Name the missing skill and skilldrop as its source, do the minimal inline version of that
|
|
58
|
+
stage under the same rule (nothing the candidate didn't supply), and record that it ran
|
|
59
|
+
degraded. Never skip G6.
|
|
60
|
+
|
|
61
|
+
## Run log (opt-in)
|
|
62
|
+
|
|
63
|
+
Only when the environment variable `SKILLDROP_LOOP_LOG` is set to a file path: after each
|
|
64
|
+
gate's verdict, append one JSON line to that file. Nothing else is recorded, and nothing is
|
|
65
|
+
sent anywhere. When the variable isn't set, or you can't read it, skip this section.
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
printf '%s\n' '{"ts":"2026-10-05T14:03:00Z","loop":"apply","stage":"fit","gate":"G5","verdict":"PROCEED","round":1}' >> "$SKILLDROP_LOOP_LOG"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Fields: `ts` (UTC), `loop`, `stage`, `gate` (`null` for a stage without one), `verdict` (the
|
|
72
|
+
gate's exact word), and `round` (1 for the first attempt, counting returns under the cap).
|
|
73
|
+
The log holds verdicts only: never the posting, the resume or the candidate's name.
|
|
74
|
+
|
|
75
|
+
## Quality bar
|
|
76
|
+
|
|
77
|
+
- **The candidate decides to apply before anything is written.** A tailored resume for a job they would have skipped is wasted work.
|
|
78
|
+
- **Every claim in both documents traces to the resume or to something the candidate said.** Answers given at G5 are written to `notes.md`, so the trace exists.
|
|
79
|
+
- **The resume and the letter agree.** Same titles, dates and numbers in both.
|
|
80
|
+
- **The candidate confirms and sends.** G6 is their signature; the loop never submits an application.
|
|
81
|
+
|
|
82
|
+
## Anti-patterns to avoid
|
|
83
|
+
|
|
84
|
+
- ❌ **Skipping `fit` because the candidate is keen.** The screening requirements are what they most need to see before investing the time.
|
|
85
|
+
- ❌ **Treating a `Not shown` item as true** because the candidate proceeded. Only what they answered goes in.
|
|
86
|
+
- ❌ **Writing the letter from the original resume.** The letter follows the tailored one, or the two will disagree.
|
|
87
|
+
- ❌ **Self-confirming at G6.** A clean claim check says the words are in the source; it cannot say they are true.
|
|
88
|
+
- ❌ **Submitting the application.** Sending is the candidate's act.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
[
|
|
2
|
+
{"query": "help me apply for this job", "should_trigger": true},
|
|
3
|
+
{"query": "run the apply loop on this posting and my resume", "should_trigger": true},
|
|
4
|
+
{"query": "I want a tailored resume and cover letter for this role", "should_trigger": true},
|
|
5
|
+
{"query": "get my application for this job ready to send", "should_trigger": true},
|
|
6
|
+
{"query": "is this job a good fit for me?", "should_trigger": false},
|
|
7
|
+
{"query": "just write a cover letter for this", "should_trigger": false},
|
|
8
|
+
{"query": "turn these notes into a finished document", "should_trigger": false}
|
|
9
|
+
]
|