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.
Files changed (166) hide show
  1. package/README.md +2 -1
  2. package/catalogue.json +10 -1
  3. package/model-routing.json +12 -0
  4. package/package.json +1 -1
  5. package/packs/ai-engineering/skills/agent-adoption-stage/SKILL.md +8 -0
  6. package/packs/ai-engineering/skills/agent-adoption-stage/manifest.json +1 -1
  7. package/packs/ai-engineering/skills/agent-loop-design/SKILL.md +8 -0
  8. package/packs/ai-engineering/skills/agent-loop-design/manifest.json +1 -1
  9. package/packs/ai-engineering/skills/ai-readiness-assessment/SKILL.md +8 -0
  10. package/packs/ai-engineering/skills/ai-readiness-assessment/manifest.json +1 -1
  11. package/packs/ai-engineering/skills/ai-usage-policy/SKILL.md +8 -0
  12. package/packs/ai-engineering/skills/ai-usage-policy/evals/evals.json +30 -0
  13. package/packs/ai-engineering/skills/ai-usage-policy/evals/files/2/data-handling-sheet.md +18 -0
  14. package/packs/ai-engineering/skills/ai-usage-policy/evals/files/2/it-notes.md +31 -0
  15. package/packs/ai-engineering/skills/ai-usage-policy/evals/files/2/md-email.md +29 -0
  16. package/packs/ai-engineering/skills/ai-usage-policy/manifest.json +1 -1
  17. package/packs/ai-engineering/skills/llm-eval-harness/SKILL.md +8 -0
  18. package/packs/ai-engineering/skills/llm-eval-harness/manifest.json +1 -1
  19. package/packs/ai-engineering/skills/subagent-design/SKILL.md +8 -0
  20. package/packs/ai-engineering/skills/subagent-design/manifest.json +1 -1
  21. package/packs/api-builder/skills/eval-harness-generator/SKILL.md +8 -0
  22. package/packs/api-builder/skills/eval-harness-generator/manifest.json +1 -1
  23. package/packs/api-builder/skills/tool-use-schema-writer/SKILL.md +8 -0
  24. package/packs/api-builder/skills/tool-use-schema-writer/evals/evals.json +29 -0
  25. package/packs/api-builder/skills/tool-use-schema-writer/evals/files/2/book_appointment.ts +64 -0
  26. package/packs/api-builder/skills/tool-use-schema-writer/manifest.json +1 -1
  27. package/packs/career/loops/apply/LOOP.md +88 -0
  28. package/packs/career/loops/apply/evals/eval_queries.json +9 -0
  29. package/packs/career/loops/apply/evals/evals.json +27 -0
  30. package/packs/career/loops/apply/loop.json +46 -0
  31. package/packs/career/pack.json +57 -0
  32. package/packs/career/skills/cover-letter/SKILL.md +132 -0
  33. package/packs/career/skills/cover-letter/evals/eval_queries.json +34 -0
  34. package/packs/career/skills/cover-letter/evals/evals.json +100 -0
  35. package/packs/career/skills/cover-letter/evals/files/1/posting.md +28 -0
  36. package/packs/career/skills/cover-letter/evals/files/1/resume.md +35 -0
  37. package/packs/career/skills/cover-letter/evals/files/2/posting.md +20 -0
  38. package/packs/career/skills/cover-letter/evals/files/2/resume.md +32 -0
  39. package/packs/career/skills/cover-letter/evals/files/4/posting.md +19 -0
  40. package/packs/career/skills/cover-letter/evals/files/4/resume.md +26 -0
  41. package/packs/career/skills/cover-letter/evals/files/5/posting.md +21 -0
  42. package/packs/career/skills/cover-letter/evals/files/5/resume.md +32 -0
  43. package/packs/career/skills/cover-letter/evals/files/6/posting.md +25 -0
  44. package/packs/career/skills/cover-letter/evals/files/6/resume.md +29 -0
  45. package/packs/career/skills/cover-letter/evals/files/7/posting.md +18 -0
  46. package/packs/career/skills/cover-letter/evals/files/7/resume.md +23 -0
  47. package/packs/career/skills/cover-letter/manifest.json +37 -0
  48. package/packs/career/skills/cover-letter/scripts/claim_check.py +247 -0
  49. package/packs/career/skills/job-fit-analysis/SKILL.md +136 -0
  50. package/packs/career/skills/job-fit-analysis/evals/eval_queries.json +34 -0
  51. package/packs/career/skills/job-fit-analysis/evals/evals.json +76 -0
  52. package/packs/career/skills/job-fit-analysis/evals/files/1/posting.md +28 -0
  53. package/packs/career/skills/job-fit-analysis/evals/files/1/resume.md +35 -0
  54. package/packs/career/skills/job-fit-analysis/evals/files/2/posting.md +20 -0
  55. package/packs/career/skills/job-fit-analysis/evals/files/2/resume.md +32 -0
  56. package/packs/career/skills/job-fit-analysis/evals/files/4/posting.md +25 -0
  57. package/packs/career/skills/job-fit-analysis/evals/files/4/resume.md +29 -0
  58. package/packs/career/skills/job-fit-analysis/evals/files/5/posting.md +18 -0
  59. package/packs/career/skills/job-fit-analysis/evals/files/5/resume.md +23 -0
  60. package/packs/career/skills/job-fit-analysis/manifest.json +31 -0
  61. package/packs/career/skills/resume-tailor/SKILL.md +116 -0
  62. package/packs/career/skills/resume-tailor/evals/eval_queries.json +34 -0
  63. package/packs/career/skills/resume-tailor/evals/evals.json +105 -0
  64. package/packs/career/skills/resume-tailor/evals/files/1/posting.md +26 -0
  65. package/packs/career/skills/resume-tailor/evals/files/1/resume.md +32 -0
  66. package/packs/career/skills/resume-tailor/evals/files/2/posting.md +19 -0
  67. package/packs/career/skills/resume-tailor/evals/files/2/resume.md +26 -0
  68. package/packs/career/skills/resume-tailor/evals/files/3/posting.md +21 -0
  69. package/packs/career/skills/resume-tailor/evals/files/3/resume.md +32 -0
  70. package/packs/career/skills/resume-tailor/evals/files/4/posting.md +28 -0
  71. package/packs/career/skills/resume-tailor/evals/files/4/resume.md +35 -0
  72. package/packs/career/skills/resume-tailor/evals/files/5/posting.md +20 -0
  73. package/packs/career/skills/resume-tailor/evals/files/5/resume.md +32 -0
  74. package/packs/career/skills/resume-tailor/evals/files/6/posting.md +25 -0
  75. package/packs/career/skills/resume-tailor/evals/files/6/resume.md +29 -0
  76. package/packs/career/skills/resume-tailor/evals/files/7/posting.md +18 -0
  77. package/packs/career/skills/resume-tailor/evals/files/7/resume.md +23 -0
  78. package/packs/career/skills/resume-tailor/manifest.json +37 -0
  79. package/packs/career/skills/resume-tailor/scripts/claim_check.py +247 -0
  80. package/packs/converters/skills/file-to-markdown/SKILL.md +8 -0
  81. package/packs/converters/skills/file-to-markdown/manifest.json +1 -1
  82. package/packs/converters/skills/md-to-html/SKILL.md +8 -0
  83. package/packs/converters/skills/md-to-html/manifest.json +1 -1
  84. package/packs/converters/skills/mermaid-render/SKILL.md +8 -0
  85. package/packs/converters/skills/mermaid-render/manifest.json +1 -1
  86. package/packs/core/skills/output-hygiene/SKILL.md +8 -0
  87. package/packs/core/skills/output-hygiene/manifest.json +1 -1
  88. package/packs/data-analytics/skills/metric-definition/SKILL.md +8 -0
  89. package/packs/data-analytics/skills/metric-definition/evals/evals.json +30 -0
  90. package/packs/data-analytics/skills/metric-definition/evals/files/2/tables.md +42 -0
  91. package/packs/data-analytics/skills/metric-definition/evals/files/2/thread.md +40 -0
  92. package/packs/data-analytics/skills/metric-definition/manifest.json +1 -1
  93. package/packs/design/skills/deck-builder/SKILL.md +8 -0
  94. package/packs/design/skills/deck-builder/manifest.json +1 -1
  95. package/packs/dev-team/skills/agents-md-generator/SKILL.md +8 -0
  96. package/packs/dev-team/skills/agents-md-generator/manifest.json +1 -1
  97. package/packs/dev-team/skills/contribution-wizard/SKILL.md +8 -0
  98. package/packs/dev-team/skills/contribution-wizard/evals/evals.json +29 -0
  99. package/packs/dev-team/skills/contribution-wizard/evals/files/2/AGENTS.md +9 -0
  100. package/packs/dev-team/skills/contribution-wizard/evals/files/2/CATALOG.md +18 -0
  101. package/packs/dev-team/skills/contribution-wizard/evals/files/2/CONTRIBUTING.md +45 -0
  102. package/packs/dev-team/skills/contribution-wizard/evals/files/2/OWNERS.md +7 -0
  103. package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/detention-claim-letter/INSTRUCTIONS.md +20 -0
  104. package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/detention-claim-letter/skill.yaml +11 -0
  105. package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/detention-claim-letter/tests/cases.yaml +25 -0
  106. package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/rate-con-extractor/INSTRUCTIONS.md +20 -0
  107. package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/rate-con-extractor/skill.yaml +8 -0
  108. package/packs/dev-team/skills/contribution-wizard/evals/files/2/skills/rate-con-extractor/tests/cases.yaml +32 -0
  109. package/packs/dev-team/skills/contribution-wizard/manifest.json +1 -1
  110. package/packs/dev-team/skills/devils-advocate/SKILL.md +8 -0
  111. package/packs/dev-team/skills/devils-advocate/evals/evals.json +29 -0
  112. package/packs/dev-team/skills/devils-advocate/evals/files/2/signups.py +116 -0
  113. package/packs/dev-team/skills/devils-advocate/evals/files/2/test_signups.py +69 -0
  114. package/packs/dev-team/skills/devils-advocate/manifest.json +1 -1
  115. package/packs/dev-team/skills/pre-merge-review/SKILL.md +8 -0
  116. package/packs/dev-team/skills/pre-merge-review/manifest.json +1 -1
  117. package/packs/dev-team/skills/release-notes/SKILL.md +8 -0
  118. package/packs/dev-team/skills/release-notes/evals/evals.json +29 -0
  119. package/packs/dev-team/skills/release-notes/evals/files/2/commits.txt +35 -0
  120. package/packs/dev-team/skills/release-notes/manifest.json +1 -1
  121. package/packs/product-manager/skills/prfaq/SKILL.md +8 -0
  122. package/packs/product-manager/skills/prfaq/manifest.json +1 -1
  123. package/packs/product-manager/skills/strategy-analysis/SKILL.md +9 -1
  124. package/packs/product-manager/skills/strategy-analysis/manifest.json +1 -1
  125. package/packs/product-manager/skills/user-journey-map/SKILL.md +8 -0
  126. package/packs/product-manager/skills/user-journey-map/manifest.json +1 -1
  127. package/packs/research/skills/hypothesis-comparison/SKILL.md +8 -0
  128. package/packs/research/skills/hypothesis-comparison/manifest.json +1 -1
  129. package/packs/research/skills/source-synthesis/SKILL.md +8 -0
  130. package/packs/research/skills/source-synthesis/evals/evals.json +30 -0
  131. package/packs/research/skills/source-synthesis/evals/files/2/badge-data.md +27 -0
  132. package/packs/research/skills/source-synthesis/evals/files/2/director-email.md +16 -0
  133. package/packs/research/skills/source-synthesis/evals/files/2/exit-interviews.md +17 -0
  134. package/packs/research/skills/source-synthesis/evals/files/2/practice-weekly-article.md +21 -0
  135. package/packs/research/skills/source-synthesis/evals/files/2/staff-survey-summary.md +41 -0
  136. package/packs/research/skills/source-synthesis/manifest.json +1 -1
  137. package/packs/solution-architect/skills/db-schema-design/SKILL.md +8 -0
  138. package/packs/solution-architect/skills/db-schema-design/evals/evals.json +29 -0
  139. package/packs/solution-architect/skills/db-schema-design/evals/files/2/current_tables.sql +29 -0
  140. package/packs/solution-architect/skills/db-schema-design/evals/files/2/notes.md +53 -0
  141. package/packs/solution-architect/skills/db-schema-design/manifest.json +1 -1
  142. package/packs/solution-architect/skills/design-doc/SKILL.md +8 -0
  143. package/packs/solution-architect/skills/design-doc/evals/evals.json +29 -0
  144. package/packs/solution-architect/skills/design-doc/evals/files/2/brief.md +18 -0
  145. package/packs/solution-architect/skills/design-doc/evals/files/2/eng-notes.md +30 -0
  146. package/packs/solution-architect/skills/design-doc/manifest.json +1 -1
  147. package/packs/solution-architect/skills/figma-diagrams/SKILL.md +8 -0
  148. package/packs/solution-architect/skills/figma-diagrams/manifest.json +1 -1
  149. package/packs/solution-architect/skills/tech-comparison-matrix/SKILL.md +8 -0
  150. package/packs/solution-architect/skills/tech-comparison-matrix/evals/evals.json +29 -0
  151. package/packs/solution-architect/skills/tech-comparison-matrix/evals/files/2/requirements.md +20 -0
  152. package/packs/solution-architect/skills/tech-comparison-matrix/evals/files/2/vendor-notes.md +29 -0
  153. package/packs/solution-architect/skills/tech-comparison-matrix/manifest.json +1 -1
  154. package/packs/sre-oncall/skills/delivery-metrics-report/SKILL.md +8 -0
  155. package/packs/sre-oncall/skills/delivery-metrics-report/manifest.json +1 -1
  156. package/packs/sre-oncall/skills/postmortem-generator/SKILL.md +8 -0
  157. package/packs/sre-oncall/skills/postmortem-generator/evals/evals.json +30 -0
  158. package/packs/sre-oncall/skills/postmortem-generator/evals/files/2/pager-export.txt +22 -0
  159. package/packs/sre-oncall/skills/postmortem-generator/evals/files/2/slack-thread.txt +28 -0
  160. package/packs/sre-oncall/skills/postmortem-generator/manifest.json +1 -1
  161. package/packs/stakeholder-comms/skills/guide-builder/SKILL.md +8 -0
  162. package/packs/stakeholder-comms/skills/guide-builder/evals/evals.json +29 -0
  163. package/packs/stakeholder-comms/skills/guide-builder/evals/files/2/api-notes.md +44 -0
  164. package/packs/stakeholder-comms/skills/guide-builder/evals/files/2/sample-booking.json +19 -0
  165. package/packs/stakeholder-comms/skills/guide-builder/manifest.json +1 -1
  166. package/profiles.json +2 -2
@@ -0,0 +1,27 @@
1
+ {
2
+ "loop_name": "apply",
3
+ "evals": [
4
+ {
5
+ "id": "stops-at-the-fit-gate",
6
+ "prompt": "Run the apply loop. My resume is in resume.md and the job is in posting.md. [a warehouse supervisor's resume with a high school diploma; a posting that requires a bachelor's degree]",
7
+ "assertions": [
8
+ "Starts with job-fit-analysis and delivers its verdict before any resume or letter is written",
9
+ "Names the unmet bachelor's degree as a screening requirement",
10
+ "Stops at G5 and asks the candidate whether to apply; does not tailor the resume in the same turn",
11
+ "Does not advise claiming the degree or adding any keyword the resume does not support"
12
+ ]
13
+ },
14
+ {
15
+ "id": "answers-become-source-material",
16
+ "prompt": "Continuing the apply loop: yes I want to apply. To your questions: I do speak Spanish, and no, I've never used SAP. [same resume and posting]",
17
+ "assertions": [
18
+ "Records the gate verdict as PROCEED WITH CONDITIONS and saves the answers to notes.md",
19
+ "The tailored resume includes Spanish and does not claim SAP",
20
+ "The cover letter is written after the tailored resume and uses the same titles, dates and numbers",
21
+ "Runs output-hygiene on both documents before the final gate",
22
+ "Stops at G6 and asks the candidate to confirm every line is true; does not submit or send anything",
23
+ "Lists what the posting asks for that neither document claims"
24
+ ]
25
+ }
26
+ ]
27
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "$comment": "RFC-0042. One job application, start to send. The first gate exists because the cheapest application is the one not written; the last because the candidate, not the agent, signs what is sent.",
3
+ "name": "apply",
4
+ "version": "0.1.0",
5
+ "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.",
6
+ "entrypoint": "LOOP.md",
7
+ "kind": "loop",
8
+ "cap": 3,
9
+ "stages": [
10
+ {
11
+ "id": "fit",
12
+ "type": "gate",
13
+ "intent": "Say honestly where the candidate stands against the posting, then let them decide whether this application is worth writing.",
14
+ "skills": ["job-fit-analysis"],
15
+ "gate": {
16
+ "id": "G5",
17
+ "kind": "human",
18
+ "verdicts": ["PROCEED", "PROCEED WITH CONDITIONS", "RECONSIDER", "BLOCKED"]
19
+ }
20
+ },
21
+ {
22
+ "id": "tailor",
23
+ "type": "generate",
24
+ "intent": "Rewrite the resume for this posting from what the candidate has done and nothing else.",
25
+ "skills": ["resume-tailor"]
26
+ },
27
+ {
28
+ "id": "letter",
29
+ "type": "generate",
30
+ "intent": "Write the letter from the tailored resume, the posting and the candidate's own reason for wanting the job.",
31
+ "skills": ["cover-letter"]
32
+ },
33
+ {
34
+ "id": "confirm",
35
+ "type": "verify",
36
+ "intent": "Strip what the machine left behind, then have the candidate confirm that every line in both documents is true and theirs.",
37
+ "skills": ["output-hygiene"],
38
+ "gate": {
39
+ "id": "G6",
40
+ "kind": "human",
41
+ "verdicts": ["READY", "NOT READY", "BLOCKED"],
42
+ "revise_to": "tailor"
43
+ }
44
+ }
45
+ ]
46
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "description": "One job application, for any occupation: an honest check of your resume against the posting, a tailored resume and a cover letter that say nothing you didn't, and a script that lists every figure and name in a draft that your own resume doesn't contain.",
3
+ "display_name": "Job applications",
4
+ "keywords": ["resume", "cv", "cover letter", "job application", "job search", "career change", "job posting"],
5
+ "links": {
6
+ "documentation": "https://sananthanarayan.github.io/skilldrop/packs/career/"
7
+ },
8
+ "maintainers": [
9
+ {
10
+ "name": "sananthanarayan"
11
+ }
12
+ ],
13
+ "first-value": {
14
+ "audience-posture": "non-technical",
15
+ "prerequisites": ["Your resume or CV as text, Markdown or a file your agent can read", "The job posting, pasted or saved as a file"],
16
+ "starter-task": "Find out where you stand against a posting before you write the application",
17
+ "starter-prompt": "My resume is in resume.md and the job I'm looking at is in posting.md. Am I a good fit? Be honest about what's missing.",
18
+ "verification": "job-fit-analysis opens with a verdict (strong match, worth applying, long shot or not a match), lists the requirements an employer screens on first, marks every requirement met, partly, not shown or not met with the resume line behind it, and ends with questions about what your resume doesn't show.",
19
+ "recovery": "If it credits you with something that isn't in your resume, say so and run it again. If job-fit-analysis does not activate, ask for it by name (\"use job-fit-analysis\")."
20
+ },
21
+ "requires": ["core"],
22
+ "journey": {
23
+ "when": "You've found a job you might apply for and want an application that is tailored to it and true.",
24
+ "you_bring": [
25
+ "your current resume or CV",
26
+ "the job posting",
27
+ "anything relevant that isn't on your resume: a tool you've used, a language you speak, a number you know",
28
+ "your reason for wanting the job, if you have one"
29
+ ],
30
+ "time": "About half an hour for one application",
31
+ "steps": [
32
+ {
33
+ "skill": "job-fit-analysis",
34
+ "you_do": "Give it the posting and your resume.",
35
+ "you_get": "A verdict, the screening requirements first, every requirement marked against your resume with the line it rests on, and questions about what your resume doesn't show.",
36
+ "decide": "Whether to apply, and your answers to its questions."
37
+ },
38
+ {
39
+ "skill": "resume-tailor",
40
+ "you_do": "Give it the resume, the posting and your answers.",
41
+ "you_get": "A tailored resume in a new file with every employer, title, date and number as you had them, what changed, and what the posting asks for that your resume cannot claim."
42
+ },
43
+ {
44
+ "skill": "cover-letter",
45
+ "you_do": "Give it the tailored resume, the posting and your reason for wanting the job.",
46
+ "you_get": "A letter under a page that opens on your strongest evidence and says nothing about you or the employer that you or the posting didn't supply."
47
+ },
48
+ {
49
+ "skill": "output-hygiene",
50
+ "you_do": "Run it on the resume and the letter before you send them.",
51
+ "you_get": "Both documents with invisible characters and machine residue removed, and any stock phrases quoted with a rewrite.",
52
+ "decide": "Read both documents once more: you sign them, so every line has to be true."
53
+ }
54
+ ],
55
+ "you_end_with": "A resume and a cover letter for one posting that you can defend line by line at interview, and a list of what the employer will notice is missing."
56
+ }
57
+ }
@@ -0,0 +1,132 @@
1
+ ---
2
+ name: cover-letter
3
+ description: Write a cover letter for one job from the person's resume and the posting: under a page, opening on the strongest evidence for the role, two or three specifics matched to what the employer asked for, and no enthusiasm, company facts or experience the person didn't supply. A script lists every figure and name in the letter that their own material doesn't contain. Works for any occupation and level. Use when the user says "write a cover letter for this job", "draft a covering letter", "write the cover note for my application", or needs an application email to go with a resume.
4
+ ---
5
+
6
+ # cover-letter
7
+
8
+ You write the letter that goes with one application. It makes the case the resume cannot
9
+ make on its own: why this person, for this job, in their own voice. Every fact about the
10
+ person comes from their resume or from what they told you, and every fact about the employer
11
+ comes from the posting. The person signs it, so it says nothing they could not repeat at
12
+ interview. It works the same for any occupation.
13
+
14
+ ## How to respond
15
+
16
+ These four rules outrank the steps below.
17
+
18
+ - **Answer first.** The reply opens with the letter itself: its first line is the reply's
19
+ first line. Nothing about how it was written comes before it or after it.
20
+ - **Use only what you were given.** No feelings, motives, admiration or history the person
21
+ didn't state. No company facts from memory.
22
+ - **Deliver from what you have.** With no stated reason for wanting the job, write a good
23
+ letter without one. Do not stop to ask.
24
+ - **Write for the hiring manager.** The letter contains the letter and nothing else: no
25
+ placeholders, no brackets, no mention of this skill.
26
+
27
+ 1. **Find the two or three things the employer most needs.** Take them from the posting's
28
+ required items and its description of the work, in the employer's words.
29
+
30
+ 2. **Find the person's best evidence for each.** A specific thing they did, from the resume
31
+ or their own words, with its number if it has one. If the resume has nothing for a need,
32
+ leave that need out of the letter. Do not fill it.
33
+
34
+ 3. **Write three or four short paragraphs, 200 to 350 words:**
35
+ - **Opening:** the job applied for, and straight into the strongest evidence. Not "I am
36
+ writing to apply" followed by nothing, and not "I am excited".
37
+ - **Evidence:** one or two paragraphs. Each ties something they did to something the
38
+ employer needs. Add what the resume line leaves out, such as how or why; do not repeat
39
+ the resume.
40
+ - **Why this job:** only when the person gave a reason. Use their reason in their words.
41
+ With no reason given, leave this out; a letter with no motive beats an invented one.
42
+ - **Close:** one sentence. Availability or the next step if the person mentioned it.
43
+
44
+ 4. **Handle the obvious question once, plainly.** A career change, a missing required item
45
+ or a gap the reader will see: one sentence that states it and points at the evidence that
46
+ answers it. No apology, no explanation the person didn't give. If they asked you not to
47
+ mention it, don't.
48
+
49
+ 5. **Keep to the facts, with the same limits as the resume.** Titles, dates, tools,
50
+ qualifications and numbers exactly as the person's material has them. A similar tool is
51
+ not the named one. Facts about the employer come only from the posting or the person:
52
+ no mission statements, news, products or values recalled from elsewhere.
53
+
54
+ A length of time belongs to the job it came from. Someone eight years with an employer
55
+ and a supervisor since 2021 has "eight years in the warehouse" and "five as a supervisor",
56
+ never "eight years as a supervisor". Work each one out from that job's own dates, or
57
+ leave the number out. Do not state availability, notice period, willingness to relocate
58
+ or salary unless the person did.
59
+
60
+ 6. **Address and sign it.** Head the letter with the person's name and contact line from
61
+ the resume, and the date when you know it. Use the name or role the posting says to write
62
+ to; otherwise "Dear Hiring Manager". Sign with the name on the resume. Add a subject line
63
+ only when the person says it is going in an email.
64
+
65
+ 7. **Match their register.** Plain first person, the spelling convention of the resume,
66
+ sentences the person could say aloud. Follow any limit the posting or the person sets:
67
+ "no more than one page" is the 350-word ceiling, a "short cover note" is under 200 words.
68
+ Read the finished letter through once for a sentence that stumbles or repeats the
69
+ posting's phrasing word for word, and rewrite it.
70
+
71
+ 8. **Run the check and resolve every line it prints:**
72
+
73
+ ```
74
+ python3 ${CLAUDE_SKILL_DIR}/scripts/claim_check.py <letter> --source <resume> --posting <posting>
75
+ ```
76
+ In non-Claude IDEs the same file is at a plain relative path:
77
+ `python3 scripts/claim_check.py <letter> --source <resume> --posting <posting>`. Save
78
+ anything the person told you to `notes.md` and add `--source notes.md`. It lists figures
79
+ and names their material doesn't contain. Items marked "in posting" are right when the
80
+ sentence is about the employer and wrong when it is claimed as the person's own. Fix and
81
+ rerun. If you cannot run it, do the same check by reading.
82
+
83
+ 9. **Reply with the letter first**, saved as `cover-letter-<employer>.md` when you can write
84
+ files. After it, in two or three plain lines addressed to the person: each thing the
85
+ posting requires that the letter does not claim, including anything they must supply
86
+ themselves such as a portfolio or references, and one question if a reason for wanting
87
+ the job would strengthen it. Say nothing about the check or how the letter was produced.
88
+
89
+ **With a posting and a few lines about the person and no resume**, write from those lines and
90
+ keep it short. **With no posting**, write to the role and employer the person names, using
91
+ only what they said about either. **With neither a resume nor any history**, ask for one in
92
+ one line: a letter cannot be written about nobody.
93
+
94
+ ## Quality bar
95
+
96
+ - **Every claim about the person is in their resume or their own words.**
97
+ - **Every claim about the employer is in the posting or was supplied by the person.**
98
+ - **The first two sentences name the job and give real evidence.**
99
+ - **200 to 350 words, and within any limit the posting sets.**
100
+ - **It can be sent as it is**: no placeholders, brackets or notes.
101
+
102
+ ## When to use this skill
103
+
104
+ - ✅ A posting asks for a cover letter, cover note or supporting statement
105
+ - ✅ An application email needs a short body to go with the attached resume
106
+ - ✅ A career changer needs to explain the move in a few honest lines
107
+
108
+ ## When NOT to use this skill
109
+
110
+ - ❌ Checking whether the job is worth applying for. Use `job-fit-analysis`.
111
+ - ❌ Rewriting the resume itself. Use `resume-tailor`.
112
+ - ❌ Removing machine artifacts from a letter that is already written. Use `output-hygiene`.
113
+
114
+ ## Anti-patterns to avoid
115
+
116
+ - ❌ **Invented enthusiasm.** "I have long admired your company" when the person said no
117
+ such thing.
118
+ - ❌ **Company facts from memory.** A mission, a product launch or an award the posting
119
+ doesn't mention may be wrong or out of date.
120
+ - ❌ **Claiming the posting's requirements back at it.** "I have extensive experience with
121
+ SAP" because the posting asked for SAP.
122
+ - ❌ **The resume in sentences.** A letter that lists every job adds nothing.
123
+ - ❌ **Stock phrases**: "perfect fit", "passionate", "proven track record", "I believe I
124
+ would be an asset".
125
+ - ❌ **Placeholders**: "[Company Name]", "[insert reason]". If it isn't known, the sentence
126
+ isn't written.
127
+ - ❌ **Apologising** for a gap, a career change or a missing qualification.
128
+ - ❌ **Stretching a title over the whole career.** "Eight years as a supervisor" when the
129
+ title is five years old.
130
+ - ❌ **Promising what they didn't.** Start dates, flexibility and relocation are theirs to offer.
131
+ - ❌ **Showing the machinery.** No mention of the check, this skill, or how it was written,
132
+ in the letter or in the reply around it.
@@ -0,0 +1,34 @@
1
+ [
2
+ {
3
+ "query": "Write a cover letter for this job",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "Draft a covering letter to go with my CV for this posting",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "I need a short cover note for this application email",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "Write a supporting statement for this role, I'm changing careers",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "Tailor my resume for this posting",
20
+ "should_trigger": false
21
+ },
22
+ {
23
+ "query": "Is this job a good fit for me?",
24
+ "should_trigger": false
25
+ },
26
+ {
27
+ "query": "Clean the AI tells out of this cover letter I already wrote",
28
+ "should_trigger": false
29
+ },
30
+ {
31
+ "query": "Write a letter to our customers about the price change",
32
+ "should_trigger": false
33
+ }
34
+ ]
@@ -0,0 +1,100 @@
1
+ {
2
+ "skill_name": "cover-letter",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Write my cover letter for the Clinical Nurse Educator job (posting.md, my CV is resume.md). The reason I want it: precepting is the best part of my job and I want to do it full time.",
7
+ "assertions": [
8
+ "The letter is no more than one page (about 400 words or fewer), as the posting requires",
9
+ "It is addressed to the Surgical Education Lead, as the posting says",
10
+ "Her stated reason (precepting is the best part of her job and she wants to do it full time) is used, and no other motive or admiration for the hospital is invented",
11
+ "It does not claim Epic experience, a BLS instructor certification, a master's degree or simulation lab experience",
12
+ "It gives specific evidence from the CV with the figures right: 9 preceptees, the first 12 weeks, the sepsis screening guide or the Cerner superuser role",
13
+ "Any facts about Northfield General are ones in the posting (320 beds, 240 nursing staff, five wards, the Surgical Division)",
14
+ "The letter contains no placeholders or bracketed text"
15
+ ]
16
+ },
17
+ {
18
+ "id": 2,
19
+ "prompt": "Need a cover letter for this Operations Coordinator job. posting.md and resume.md.",
20
+ "assertions": [
21
+ "The letter does not claim a bachelor's degree or imply he has one",
22
+ "No reason for wanting to work at Kestrel is invented, and nothing is said about Kestrel that the posting does not say",
23
+ "The team he supervises is given as 12, not 20 or more",
24
+ "The zero lost-time incidents over 14 months appears with that figure",
25
+ "SAP, pivot tables or VLOOKUP, Lean Six Sigma and Spanish are not claimed",
26
+ "The letter is between about 150 and 400 words and has no placeholders such as [Hiring Manager Name]",
27
+ "Outside the letter, the reply tells him the posting requires a bachelor's degree that the letter does not claim"
28
+ ]
29
+ },
30
+ {
31
+ "id": 3,
32
+ "prompt": "write a cover letter for this. I'm Sam Carter, 3 yrs on the pharmacy counter at a chemist - till, phones, booking flu jab appointments.\n\nReceptionist - Alder Lane Dental Practice. Greeting patients, answering phones, booking and rescheduling appointments, taking payments. Experience with Dentally software preferred. Part time, 24 hours.",
33
+ "assertions": [
34
+ "A complete letter is delivered, not a list of questions",
35
+ "The pharmacy is not given a name, and no employer, qualification or software is invented",
36
+ "Dentally experience is not claimed",
37
+ "The till, the phones and booking flu jab appointments are tied to taking payments, answering phones and booking appointments",
38
+ "The letter is about 300 words or fewer",
39
+ "It contains no placeholders or bracketed text",
40
+ "No interest in dentistry, admiration for the practice or other motive the person did not state is invented",
41
+ "It is signed Sam Carter"
42
+ ]
43
+ },
44
+ {
45
+ "id": 4,
46
+ "prompt": "Short cover note for the Tidewell job please (posting.md / resume.md). I actually own one of their dry bags and take it wild swimming, that's how I know them.",
47
+ "assertions": [
48
+ "The note is short: about 200 words or fewer",
49
+ "It uses her own connection (she owns one of their bags and takes it wild swimming) and adds no other claim about the brand beyond the posting",
50
+ "Google Analytics, HubSpot and Mailchimp are not claimed",
51
+ "No follower count, engagement figure or percentage appears",
52
+ "The internship is not inflated beyond 10 weeks, and she is not said to have a year of marketing experience",
53
+ "It mentions specific evidence from the CV: the Instagram account or weekly reel, the newsletter, or Canva",
54
+ "It contains no placeholders or bracketed text"
55
+ ]
56
+ },
57
+ {
58
+ "id": 5,
59
+ "prompt": "Cover letter for the instructional designer role (posting.md), CV is resume.md. I'm changing career so it needs to make sense of that. Don't mention the career break.",
60
+ "assertions": [
61
+ "The move from teaching to instructional design is addressed directly, without apology",
62
+ "The 2020 to 2022 career break is not mentioned",
63
+ "Articulate Storyline, Rise and ADDIE are not claimed as things she has used",
64
+ "The Moodle revision course (14 units) or training colleagues on Moodle is used as evidence",
65
+ "No admiration for Marlow & Finch or interest in insurance is invented",
66
+ "The letter does not say a portfolio exists, is attached or is enclosed, since her CV shows none",
67
+ "Outside the letter, the reply tells her the posting requires a portfolio she must supply",
68
+ "The letter is no more than one page (about 400 words or fewer) and has no placeholders"
69
+ ]
70
+ },
71
+ {
72
+ "id": 6,
73
+ "held_out": "2026-10-05",
74
+ "prompt": "Write a cover letter for the Orrell finance analyst job. resume.md, posting.md. I want to get out of processing and into analysis, that's the honest reason.",
75
+ "assertions": [
76
+ "Her stated reason (moving from processing into analysis) is used, and no other motive or admiration for Orrell is invented",
77
+ "The letter does not claim AAT Level 4 complete, ACCA, CIMA or Power BI",
78
+ "It does not say she has prepared management accounts, variance analysis or budgets",
79
+ "It uses specific evidence with the figures right: about 400 invoices a month, 60 supplier statements, the Excel workbook, or the accruals",
80
+ "Facts about Orrell are limited to the posting (22 gyms, the Midlands, the management pack for site managers)",
81
+ "The letter is no more than about 400 words and has no placeholders",
82
+ "Outside the letter, the reply tells her the posting asks for a qualification or analyst experience the letter does not claim"
83
+ ]
84
+ },
85
+ {
86
+ "id": 7,
87
+ "held_out": "2026-10-05",
88
+ "prompt": "Cover letter for the head chef job at Calder House please (posting.md, CV is resume.md).",
89
+ "assertions": [
90
+ "The letter does not claim Level 3 Food Safety",
91
+ "The brigade is given as 6 if a team size is given; no team of 12 or more is claimed",
92
+ "It does not claim experience of a 120-cover restaurant or events of 180 guests",
93
+ "No reason for wanting Calder House, Peebles or hotel work is invented",
94
+ "It uses specific evidence from the CV: running the kitchen two days a week, costing the weekly specials, the banqueting at Harbour Rooms, or the inspection rating of 5",
95
+ "He is described as a sous chef, not as a head chef",
96
+ "The letter is no more than about 400 words and has no placeholders"
97
+ ]
98
+ }
99
+ ]
100
+ }
@@ -0,0 +1,28 @@
1
+ # Clinical Nurse Educator — Surgical Division
2
+
3
+ **Northfield General Hospital** · Full time, permanent · Band 6
4
+
5
+ Northfield General is a 320-bed teaching hospital. The Surgical Division's education team supports 240 nursing staff across five wards.
6
+
7
+ ## The role
8
+
9
+ You will plan and deliver clinical education for surgical nursing staff: induction for new starters, annual skills updates, and ward-based teaching after incidents and audits.
10
+
11
+ ## You must have
12
+
13
+ - Current NMC registration (adult)
14
+ - A nursing degree
15
+ - At least 2 years' experience teaching, precepting or mentoring clinical staff
16
+ - At least 3 years' post-registration experience in an acute surgical or medical-surgical setting
17
+ - Experience using Epic, including supporting colleagues with it
18
+
19
+ ## It would help if you have
20
+
21
+ - A master's degree in nursing or education, or to be working towards one
22
+ - Basic Life Support instructor certification
23
+ - Experience running sessions in a simulation lab
24
+ - Experience writing teaching materials or guidelines
25
+
26
+ ## How to apply
27
+
28
+ Send a CV and a cover letter of no more than one page to the Surgical Education Lead. Closing date 24 October 2026.
@@ -0,0 +1,35 @@
1
+ # Maya Okafor, RN, BSN
2
+
3
+ Leeds, UK · maya.okafor@example.com · 07700 900142
4
+
5
+ ## Profile
6
+
7
+ Registered nurse with six years on an acute medical-surgical ward. Charge nurse on rotation since 2023.
8
+
9
+ ## Experience
10
+
11
+ **Staff Nurse, then Charge Nurse (rotating)** — Ward 14 Medical-Surgical, Aldermoor Hospital
12
+ August 2020 – present
13
+
14
+ - Care for up to 6 post-operative and acute medical patients per shift on a 28-bed ward.
15
+ - Take charge of the ward on rotation since March 2023: staffing, bed flow and escalation.
16
+ - Precept newly qualified nurses through their first 12 weeks; 9 preceptees so far.
17
+ - Wrote the ward's one-page guide to the sepsis screening tool and walked each shift through it at handover.
18
+ - Document in Cerner; ward superuser for the Cerner medication administration module since 2022.
19
+ - Member of the falls prevention working group.
20
+
21
+ **Healthcare Assistant** — Rowan Court Care Home
22
+ June 2017 – July 2020 (part time during degree)
23
+
24
+ - Personal care, observations and mealtime support for 30 residents.
25
+
26
+ ## Education and registration
27
+
28
+ - BSc (Hons) Adult Nursing, University of Bradford, 2020
29
+ - NMC registered nurse (adult), registered 2020
30
+ - Mentorship and Assessment in Practice module, 2022
31
+ - Basic Life Support provider, renewed January 2026
32
+
33
+ ## Other
34
+
35
+ - Volunteer first aider, Leeds 10K, 2023 and 2024
@@ -0,0 +1,20 @@
1
+ Operations Coordinator
2
+ Kestrel Freight Solutions - Columbus, OH - Full time
3
+
4
+ About the job
5
+ The Operations Coordinator keeps our cross-dock running to plan: scheduling inbound and outbound loads, coordinating with carriers, and reporting daily performance to the Operations Manager.
6
+
7
+ Requirements
8
+ - Bachelor's degree required
9
+ - 3+ years in warehouse or logistics operations
10
+ - Experience supervising or coordinating teams of 20 or more
11
+ - Advanced Excel (pivot tables, VLOOKUP)
12
+ - Experience with SAP Extended Warehouse Management
13
+ - Strong safety record and knowledge of OSHA requirements
14
+
15
+ Preferred
16
+ - Lean Six Sigma Green Belt
17
+ - Forklift certification
18
+ - Bilingual English/Spanish
19
+
20
+ Pay: $58,000 - $66,000. Day shift, Monday to Friday.
@@ -0,0 +1,32 @@
1
+ Daniel Reyes
2
+ Columbus, OH | daniel.reyes@example.com | (614) 555-0137
3
+
4
+ SUMMARY
5
+ Warehouse shift supervisor with 8 years at a regional grocery distribution center.
6
+
7
+ EXPERIENCE
8
+
9
+ Shift Supervisor, Hartwell Foods Distribution Center, Columbus, OH
10
+ March 2021 - Present
11
+ - Supervise a second-shift team of 12 pickers and loaders.
12
+ - Build the weekly shift roster in Excel and track attendance.
13
+ - Zero lost-time incidents on my shift for the last 14 months.
14
+ - Run the start-of-shift safety briefing and train new hires on the pallet jack and the scanner.
15
+ - Work with the transport office to reorder loading when trucks arrive late.
16
+ - Use the company's in-house warehouse system to release pick waves and fix inventory mismatches.
17
+
18
+ Order Picker, then Forklift Operator, Hartwell Foods Distribution Center
19
+ June 2018 - March 2021
20
+ - Picked and loaded outbound grocery orders; moved to forklift after one year.
21
+ - Picked as trainer for new forklift operators in 2020.
22
+
23
+ Stock Associate, Brightway Home Improvement, Dayton, OH
24
+ 2016 - 2018
25
+
26
+ EDUCATION
27
+ Westland High School, diploma, 2015
28
+ Columbus State Community College, 18 credits toward an associate degree in business (2019-2020, not completed)
29
+
30
+ CERTIFICATIONS
31
+ OSHA forklift operator certification, renewed 2025
32
+ First Aid/CPR, 2025
@@ -0,0 +1,19 @@
1
+ Marketing Assistant
2
+ Tidewell Outdoor Co. — Manchester (hybrid, 3 days in the office)
3
+
4
+ We make waterproof bags and sell them online and through 40 independent shops.
5
+
6
+ You will:
7
+ - Schedule and write social media posts across Instagram, TikTok and Facebook
8
+ - Help build the monthly email newsletter in HubSpot
9
+ - Pull weekly numbers from Google Analytics for the marketing meeting
10
+ - Support product photo shoots and trade shows
11
+
12
+ You have:
13
+ - At least 1 year of marketing experience (internships count)
14
+ - Experience running social media campaigns with measurable results
15
+ - Confident with Canva or Adobe Express
16
+ - Experience with Google Analytics and an email marketing tool such as HubSpot or Mailchimp
17
+ - A degree in marketing, communications or similar
18
+
19
+ Salary £24,000. Apply with a CV and short cover note.
@@ -0,0 +1,26 @@
1
+ PRIYA NAIR
2
+ Manchester · priya.nair@example.com · 07700 900318
3
+
4
+ EDUCATION
5
+ BA (Hons) Communications, 2:1 — University of Salford, 2023–2026
6
+ Dissertation: how local charities use short-form video
7
+
8
+ EXPERIENCE
9
+
10
+ Communications Intern — Greater Manchester Food Network (charity)
11
+ June 2025 – August 2025 (10 weeks)
12
+ - Wrote the fortnightly supporter newsletter.
13
+ - Made event posters and social media graphics in Canva.
14
+ - Interviewed three volunteers and wrote up their stories for the website.
15
+
16
+ Social Media Officer (volunteer) — Salford Film Society
17
+ September 2024 – June 2026
18
+ - Ran the society's Instagram account and posted before every screening.
19
+ - Started a weekly "what we're watching" reel.
20
+
21
+ Barista — Corner Grind Coffee
22
+ October 2023 – present (weekends)
23
+ - Serve customers, cash up, and train new weekend staff.
24
+
25
+ SKILLS
26
+ Canva, Instagram and TikTok, Microsoft Word and PowerPoint, basic video editing in CapCut
@@ -0,0 +1,21 @@
1
+ # Instructional Designer
2
+
3
+ **Marlow & Finch Insurance** · Learning and Development · Bristol (hybrid)
4
+
5
+ You will design and build training for our 1,100 claims and customer service staff: e-learning modules, facilitator guides and short job aids.
6
+
7
+ ## Essential
8
+
9
+ - Experience designing learning for adults from needs analysis through to evaluation (we use ADDIE)
10
+ - Experience building e-learning in Articulate Storyline or Rise
11
+ - Experience administering a learning management system
12
+ - Able to work with subject matter experts and turn their knowledge into clear learning content
13
+ - A portfolio of work samples, shared at application
14
+
15
+ ## Desirable
16
+
17
+ - Experience in financial services or another regulated industry
18
+ - A qualification in learning design (for example CIPD Level 5)
19
+ - Video or audio editing
20
+
21
+ Salary £38,000 – £44,000.
@@ -0,0 +1,32 @@
1
+ # Helen Brooks
2
+
3
+ Bristol · helen.brooks@example.com
4
+
5
+ ## Employment
6
+
7
+ **Teacher of Geography** — Ashcombe Academy, Bristol
8
+ September 2022 – present
9
+
10
+ - Teach geography to ages 11–18; six classes a week at exam level.
11
+ - Redesigned the Year 9 scheme of work around four enquiry questions, working back from the end-of-year assessment.
12
+ - Built the department's online revision course in Moodle: 14 units with quizzes and short recorded explanations.
13
+ - Run two training sessions a year for colleagues on using Moodle quizzes.
14
+
15
+ **Career break** — full-time carer for a family member
16
+ August 2020 – August 2022
17
+
18
+ **Teacher of Geography, then Head of Geography (from 2015)** — St Oswald's School, Bath
19
+ September 2009 – July 2020
20
+
21
+ - Led a department of 5 teachers; wrote the department's schemes of work for ages 11–16.
22
+ - Introduced fieldwork booklets that students complete on a tablet.
23
+ - Mentored 6 trainee teachers through their placements.
24
+
25
+ ## Education
26
+
27
+ - PGCE Secondary Geography, University of Exeter, 2009
28
+ - BA Geography, University of Sheffield, 2008
29
+
30
+ ## Tools
31
+
32
+ Moodle, Google Classroom, Google Slides, Canva, Audacity
@@ -0,0 +1,25 @@
1
+ # Finance Analyst
2
+
3
+ **Orrell Leisure Group** · Birmingham · £36,000 – £40,000
4
+
5
+ Orrell runs 22 gyms across the Midlands. The Finance Analyst reports to the Financial Controller and produces the monthly management pack for site managers.
6
+
7
+ ## What you'll do
8
+
9
+ - Build the monthly management accounts pack: variance to budget by site, with commentary
10
+ - Own the month-end close for payroll and utilities accruals
11
+ - Maintain the site-level budget model and reforecast each quarter
12
+ - Build dashboards in Power BI for the operations team
13
+
14
+ ## What we need
15
+
16
+ - Part-qualified ACCA or CIMA, or AAT Level 4 complete
17
+ - At least 2 years in a management accounts or analyst role
18
+ - Advanced Excel (pivot tables, lookups, modelling)
19
+ - Experience preparing variance analysis and budget commentary
20
+ - Experience with Power BI or a similar reporting tool
21
+
22
+ ## Nice to have
23
+
24
+ - Experience in a multi-site business
25
+ - Experience with Sage or NetSuite