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
|
@@ -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,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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Grace Mbeki
|
|
2
|
+
|
|
3
|
+
Birmingham · grace.mbeki@example.com · 07700 900455
|
|
4
|
+
|
|
5
|
+
## Work
|
|
6
|
+
|
|
7
|
+
**Accounts Payable Clerk** — Halden Building Supplies, Birmingham
|
|
8
|
+
February 2021 – present
|
|
9
|
+
|
|
10
|
+
- Process around 400 supplier invoices a month in Sage 200, matching each to its purchase order and delivery note.
|
|
11
|
+
- Reconcile 60 supplier statements each month and chase the differences.
|
|
12
|
+
- Prepare the fortnightly payment run for the Finance Manager to approve.
|
|
13
|
+
- Built an Excel workbook (pivot tables and lookups) that lists invoices on hold by reason; the purchasing team now uses it every week.
|
|
14
|
+
- Support month-end by posting accruals for goods received and not yet invoiced.
|
|
15
|
+
|
|
16
|
+
**Finance Administrator** — Corrin Dental Group, Solihull
|
|
17
|
+
September 2018 – January 2021
|
|
18
|
+
|
|
19
|
+
- Raised sales invoices, banked receipts and kept the petty cash for four practices.
|
|
20
|
+
|
|
21
|
+
## Qualifications
|
|
22
|
+
|
|
23
|
+
- AAT Level 3 Diploma in Accounting, 2020
|
|
24
|
+
- Studying AAT Level 4; two of five units passed
|
|
25
|
+
- A levels: Mathematics (B), Economics (C), 2018
|
|
26
|
+
|
|
27
|
+
## Tools
|
|
28
|
+
|
|
29
|
+
Sage 200, Excel, Microsoft Teams
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Head Chef
|
|
2
|
+
Calder House Hotel, Peebles - 62 bedrooms, restaurant and events
|
|
3
|
+
|
|
4
|
+
You will lead the kitchen for our 120-cover restaurant and for weddings and events of up to 180 guests.
|
|
5
|
+
|
|
6
|
+
Requirements
|
|
7
|
+
- Level 3 Food Safety (Supervising Food Safety in Catering)
|
|
8
|
+
- Experience as a head chef, or as a sous chef with full responsibility for a kitchen
|
|
9
|
+
- Experience leading a team of 12 or more
|
|
10
|
+
- Menu design and costing to a gross profit target of 70%
|
|
11
|
+
- Experience of banqueting and events
|
|
12
|
+
- Stock control and supplier management
|
|
13
|
+
|
|
14
|
+
Desirable
|
|
15
|
+
- Experience in a hotel kitchen
|
|
16
|
+
- Experience with Procure Wizard or a similar ordering system
|
|
17
|
+
|
|
18
|
+
Salary 48,000 pounds plus tronc. Live-in available.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
LEO TANAKA
|
|
2
|
+
Edinburgh | leo.tanaka@example.com | 07700 900271
|
|
3
|
+
|
|
4
|
+
Sous Chef, The Larder at Queensgate (80-cover restaurant), Edinburgh
|
|
5
|
+
May 2022 - present
|
|
6
|
+
- Run the kitchen on the head chef's two days off each week.
|
|
7
|
+
- Lead a brigade of 6 on service.
|
|
8
|
+
- Write and cost the weekly specials; do the fish and vegetable orders.
|
|
9
|
+
- Trained 3 commis chefs, one now a chef de partie.
|
|
10
|
+
- Keep the allergen matrix up to date for every menu change.
|
|
11
|
+
- Environmental health inspection in 2025: rated 5.
|
|
12
|
+
|
|
13
|
+
Chef de Partie, Harbour Rooms Hotel, Leith
|
|
14
|
+
March 2019 - April 2022
|
|
15
|
+
- Ran the sauce section; covered banqueting for weddings in summer.
|
|
16
|
+
|
|
17
|
+
Commis Chef, Harbour Rooms Hotel, Leith
|
|
18
|
+
August 2017 - March 2019
|
|
19
|
+
|
|
20
|
+
TRAINING
|
|
21
|
+
SVQ Level 3 Professional Cookery, Edinburgh College, 2019
|
|
22
|
+
Level 2 Food Safety and Hygiene for Catering, renewed 2024
|
|
23
|
+
Allergen awareness training, 2024
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "resume-tailor",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Tailor a resume or CV to one job posting without adding anything that isn't true: reorder, cut and reword what the person has already done so the posting's needs are answered first, keep every employer, title, date and number as it was, and report what the posting asks for that the resume cannot claim. A script lists every figure and name in the draft that the original doesn't contain. Works for any occupation and level. Use when the user says \"tailor my resume for this job\", \"adapt my CV to this posting\", \"rewrite my resume for this role\", or pastes a job description next to their resume.",
|
|
5
|
+
"entrypoint": "SKILL.md",
|
|
6
|
+
"deps": {
|
|
7
|
+
"npm": [],
|
|
8
|
+
"pip": []
|
|
9
|
+
},
|
|
10
|
+
"env": {
|
|
11
|
+
"required": [],
|
|
12
|
+
"optional": []
|
|
13
|
+
},
|
|
14
|
+
"related": [
|
|
15
|
+
"cover-letter",
|
|
16
|
+
"doc-critique",
|
|
17
|
+
"job-fit-analysis"
|
|
18
|
+
],
|
|
19
|
+
"tags": [
|
|
20
|
+
"resume",
|
|
21
|
+
"cv",
|
|
22
|
+
"job-application",
|
|
23
|
+
"tailoring",
|
|
24
|
+
"career",
|
|
25
|
+
"job-search"
|
|
26
|
+
],
|
|
27
|
+
"permissions": {
|
|
28
|
+
"network": [],
|
|
29
|
+
"commands": [],
|
|
30
|
+
"files": "named-paths",
|
|
31
|
+
"notes": "Reads the draft, source and posting files it is given. Writes nothing."
|
|
32
|
+
},
|
|
33
|
+
"model": {
|
|
34
|
+
"tier": "standard",
|
|
35
|
+
"rationale": "Reorders and rewords existing content against a posting, with a script listing every figure and name the original doesn't contain."
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""List what a tailored resume or cover letter says that the candidate's own material doesn't.
|
|
3
|
+
|
|
4
|
+
python3 claim_check.py DRAFT --source RESUME [--source NOTES ...] [--posting POSTING] [--json]
|
|
5
|
+
|
|
6
|
+
DRAFT is the text you are about to send. Each --source is something the candidate wrote or
|
|
7
|
+
told you: the original resume, notes from the conversation. --posting is the job posting.
|
|
8
|
+
|
|
9
|
+
It reports four kinds of finding, each with the line it is on:
|
|
10
|
+
|
|
11
|
+
number a figure in the draft that no source contains ("35%", "$2M", "team of 8")
|
|
12
|
+
name a named thing in the draft that no source contains: a tool, an employer, a
|
|
13
|
+
certification, a degree ("Kubernetes", "Epic", "Green Belt")
|
|
14
|
+
combination capitalised words that each appear in a source but never together
|
|
15
|
+
("Senior Manager" when the source has "Senior Analyst" and "Office Manager")
|
|
16
|
+
borrowed wording the draft shares with the posting and no source uses. Fine when the
|
|
17
|
+
source shows the same thing in other words; a false claim when it doesn't.
|
|
18
|
+
|
|
19
|
+
A name or number that the posting contains is marked "in posting": right when the draft is
|
|
20
|
+
talking about the employer, wrong when it is claimed as the candidate's own.
|
|
21
|
+
|
|
22
|
+
It reads text, so it cannot tell a true claim from a false one. It tells you where to look.
|
|
23
|
+
Exit status: 0 nothing found, 1 findings, 2 a file could not be read. Standard library only.
|
|
24
|
+
"""
|
|
25
|
+
import argparse
|
|
26
|
+
import json
|
|
27
|
+
import re
|
|
28
|
+
import sys
|
|
29
|
+
|
|
30
|
+
MULT = {"k": 1e3, "thousand": 1e3, "m": 1e6, "mm": 1e6, "million": 1e6,
|
|
31
|
+
"bn": 1e9, "b": 1e9, "billion": 1e9}
|
|
32
|
+
NUMBER = re.compile(r"(?<![\w.])(\d[\d,]*(?:\.\d+)?)(?:(k|mm|m|bn|b)\b|\s?(thousand|million|billion)\b)?"
|
|
33
|
+
r"(\s?%|\s?percent\b|\s?per cent\b)?", re.I)
|
|
34
|
+
WORD = re.compile(r"\.?[A-Za-z][A-Za-z0-9+#']*(?:\.[A-Za-z0-9]+)*")
|
|
35
|
+
LIST_MARK = re.compile(r"^\s*(?:[-*•–>]+|\d+[.)]|#+|\|)\s*")
|
|
36
|
+
LINK = re.compile(r"\[([^\]]*)\]\([^)]*\)")
|
|
37
|
+
SUFFIXES = ("ations", "ation", "ments", "ment", "ings", "ing", "ers", "ies", "ed", "er", "es", "s", "ly")
|
|
38
|
+
|
|
39
|
+
# Words that start a line or a sentence with a capital letter and name nothing.
|
|
40
|
+
PLAIN = set("""
|
|
41
|
+
a an and are as at be been both but by for from had has have he her his i if in into is it its
|
|
42
|
+
me my no not of on or our she so that the their them then there these they this to up us was
|
|
43
|
+
we were what when where which who why with you your dear sincerely regards kind best yours
|
|
44
|
+
faithfully hiring manager team committee recruiter sir madam re subject date enclosed
|
|
45
|
+
summary profile objective experience employment work history education skills tools
|
|
46
|
+
certifications certification qualifications training projects awards languages interests
|
|
47
|
+
references available request professional career key core technical additional other
|
|
48
|
+
volunteering volunteer contact details achievements highlights about present current
|
|
49
|
+
january february march april may june july august september october november december
|
|
50
|
+
jan feb mar apr jun jul aug sep sept oct nov dec monday tuesday wednesday thursday friday
|
|
51
|
+
saturday sunday full part time application applying while although though because since
|
|
52
|
+
during after before however also please thank thanks between over across within having most each every one two three
|
|
53
|
+
""".split())
|
|
54
|
+
DATE_LINE = re.compile(r"^\s*(?:\d{1,2}(?:st|nd|rd|th)?\s+)?[A-Z][a-z]{2,8}\.?\s+(?:\d{1,2}(?:st|nd|rd|th)?,?\s+)?\d{4}\s*$")
|
|
55
|
+
# The joining words allowed inside a capitalised phrase: "Head of Geography".
|
|
56
|
+
JOINERS = {"of", "and", "for", "the", "in", "at", "&", "de"}
|
|
57
|
+
STOP = PLAIN | set("""
|
|
58
|
+
able across after also been before being between can could did does doing each every experience
|
|
59
|
+
experienced including into just like more most much need needs over role roles some such than
|
|
60
|
+
them through under using very well will within without work worked working would years year
|
|
61
|
+
have with that this from your their about must should strong good great team teams including
|
|
62
|
+
ability skills skill knowledge new help helps support supports ensure make makes
|
|
63
|
+
""".split())
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def read(path):
|
|
67
|
+
try:
|
|
68
|
+
with open(path, encoding="utf-8", errors="replace") as f:
|
|
69
|
+
return f.read()
|
|
70
|
+
except OSError as e:
|
|
71
|
+
print("claim_check: cannot read %s: %s" % (path, e.strerror), file=sys.stderr)
|
|
72
|
+
sys.exit(2)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def clean(line):
|
|
76
|
+
"""A line with its markdown removed, so `**Go**` and `Go` read the same."""
|
|
77
|
+
line = LINK.sub(r"\1", line)
|
|
78
|
+
line = line.replace("’", "'").replace("‘", "'").replace("–", " - ").replace("—", " - ")
|
|
79
|
+
return re.sub(r"[*_`~]", "", line)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def numbers(text):
|
|
83
|
+
"""{(value, is_percent)} for every figure in the text. "$2M" and "2 million" are one value."""
|
|
84
|
+
found = set()
|
|
85
|
+
for m in NUMBER.finditer(text):
|
|
86
|
+
try:
|
|
87
|
+
value = float(m.group(1).replace(",", ""))
|
|
88
|
+
except ValueError:
|
|
89
|
+
continue
|
|
90
|
+
unit = (m.group(2) or m.group(3) or "").lower()
|
|
91
|
+
found.add((value * MULT.get(unit, 1), bool(m.group(4))))
|
|
92
|
+
return found
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def stem(word):
|
|
96
|
+
w = word.lower().strip("'.")
|
|
97
|
+
if w.endswith("'s"):
|
|
98
|
+
w = w[:-2]
|
|
99
|
+
for s in SUFFIXES:
|
|
100
|
+
if w.endswith(s) and len(w) - len(s) >= 4:
|
|
101
|
+
return w[: -len(s)]
|
|
102
|
+
return w
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def key(word):
|
|
106
|
+
"""How a name is compared: case, dots, a plural, a possessive or a contraction don't matter."""
|
|
107
|
+
w = word.lower().strip("'")
|
|
108
|
+
w = re.sub(r"'(?:s|m|d|ve|ll|re|t)$", "", w)
|
|
109
|
+
w = w.replace(".", "") or w
|
|
110
|
+
return w[:-1] if len(w) > 4 and w.endswith("s") and not w.endswith("ss") else w
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def vocabulary(text):
|
|
114
|
+
names, stems = set(), set()
|
|
115
|
+
for line in text.splitlines():
|
|
116
|
+
for w in WORD.findall(clean(line)):
|
|
117
|
+
names.add(key(w))
|
|
118
|
+
stems.add(stem(w))
|
|
119
|
+
flat = " ".join(key(w) for line in text.splitlines() for w in WORD.findall(clean(line)))
|
|
120
|
+
return names, stems, " " + flat + " "
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def looks_named(word):
|
|
124
|
+
"""True for a word that is a name whatever its position: AWS, JavaScript, C++, k8s, .NET."""
|
|
125
|
+
body = word.lstrip(".")
|
|
126
|
+
return bool(re.search(r"[A-Z]", body[1:]) or re.search(r"[0-9+#]", body) or word.startswith("."))
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def phrases(line):
|
|
130
|
+
"""Runs of capitalised or name-shaped words in one line, as lists of words.
|
|
131
|
+
|
|
132
|
+
The first word of a line or sentence is capitalised by grammar, not because it is a name,
|
|
133
|
+
so it only counts when it is name-shaped itself or opens a longer capitalised run."""
|
|
134
|
+
text = LIST_MARK.sub("", clean(line))
|
|
135
|
+
out, run, start_of_sentence = [], [], True
|
|
136
|
+
tokens = re.findall(r"\.?[A-Za-z][A-Za-z0-9+#']*(?:\.[A-Za-z0-9]+)*|&|[.!?;:]\s|[,|·/()]|\s-\s", text + " ")
|
|
137
|
+
for i, tok in enumerate(tokens):
|
|
138
|
+
if not (tok[0].isalpha() or tok[0] in ".&") or tok.strip() in (".", "!", "?", ";", ":"):
|
|
139
|
+
if run:
|
|
140
|
+
out.append(run)
|
|
141
|
+
run = []
|
|
142
|
+
start_of_sentence = tok.strip() in (".", "!", "?")
|
|
143
|
+
continue
|
|
144
|
+
if "'" in tok and key(tok) in PLAIN: # I'm, I've, we'd
|
|
145
|
+
tok = key(tok)
|
|
146
|
+
capital = tok[0].isupper() or looks_named(tok)
|
|
147
|
+
if capital and not (start_of_sentence and not looks_named(tok) and tok.lower() in PLAIN):
|
|
148
|
+
run.append((tok, start_of_sentence))
|
|
149
|
+
elif run and tok.lower() in JOINERS and i + 1 < len(tokens) and tokens[i + 1][:1].isupper():
|
|
150
|
+
run.append((tok, False))
|
|
151
|
+
else:
|
|
152
|
+
if run:
|
|
153
|
+
out.append(run)
|
|
154
|
+
run = []
|
|
155
|
+
start_of_sentence = False
|
|
156
|
+
if run:
|
|
157
|
+
out.append(run)
|
|
158
|
+
cleaned = []
|
|
159
|
+
for r in out:
|
|
160
|
+
# A lone sentence-opening word ("Led", "Built") is grammar, not a name.
|
|
161
|
+
if len(r) == 1 and r[0][1] and not looks_named(r[0][0]):
|
|
162
|
+
continue
|
|
163
|
+
# A sentence-opening verb in front of a name ("Led AWS migration") is dropped from the run.
|
|
164
|
+
if len(r) > 1 and r[0][1] and not looks_named(r[0][0]) and r[0][0].lower() not in PLAIN:
|
|
165
|
+
r = r[1:] if r[0][0].lower().endswith(("ed", "ing")) else r
|
|
166
|
+
words = [w for w, _ in r]
|
|
167
|
+
while words and words[-1].lower() in JOINERS:
|
|
168
|
+
words.pop()
|
|
169
|
+
if words:
|
|
170
|
+
cleaned.append(words)
|
|
171
|
+
return cleaned
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def check(draft, sources, posting):
|
|
175
|
+
src_names, src_stems, src_flat = vocabulary("\n".join(sources))
|
|
176
|
+
src_numbers = numbers("\n".join(clean(s) for s in sources))
|
|
177
|
+
post_names, post_stems, _ = vocabulary(posting or "")
|
|
178
|
+
post_numbers = numbers(clean(posting or ""))
|
|
179
|
+
findings, seen = [], set()
|
|
180
|
+
|
|
181
|
+
def add(kind, what, n, line, in_posting=False):
|
|
182
|
+
if (kind, what.lower()) in seen:
|
|
183
|
+
return
|
|
184
|
+
seen.add((kind, what.lower()))
|
|
185
|
+
findings.append({"kind": kind, "text": what, "line": n, "context": line.strip()[:160],
|
|
186
|
+
"in_posting": in_posting})
|
|
187
|
+
|
|
188
|
+
for n, raw in enumerate(draft.splitlines(), 1):
|
|
189
|
+
line = clean(raw)
|
|
190
|
+
if not line.strip() or DATE_LINE.match(LIST_MARK.sub("", line)):
|
|
191
|
+
continue # a letter's own date line claims nothing
|
|
192
|
+
body = LIST_MARK.sub("", line)
|
|
193
|
+
for m in NUMBER.finditer(body):
|
|
194
|
+
got = next(iter(numbers(m.group(0))), None)
|
|
195
|
+
if got and got not in src_numbers:
|
|
196
|
+
add("number", m.group(0).strip(), n, raw, got in post_numbers)
|
|
197
|
+
for words in phrases(raw):
|
|
198
|
+
content = [w for w in words if w.lower() not in JOINERS]
|
|
199
|
+
missing = [w for w in content if key(w) not in src_names and w.lower() not in PLAIN]
|
|
200
|
+
if missing:
|
|
201
|
+
add("name", " ".join(words), n, raw, all(key(w) in post_names for w in missing))
|
|
202
|
+
elif len(content) > 1 and all(w.lower() not in PLAIN for w in content):
|
|
203
|
+
flat = " ".join(key(w) for w in words)
|
|
204
|
+
if " " + flat + " " not in src_flat:
|
|
205
|
+
add("combination", " ".join(words), n, raw)
|
|
206
|
+
if posting:
|
|
207
|
+
for w in WORD.findall(body):
|
|
208
|
+
s = stem(w)
|
|
209
|
+
if (len(s) >= 4 and w.lower() not in STOP and s in post_stems and s not in src_stems
|
|
210
|
+
and key(w) not in src_names and not w[0].isupper() and not looks_named(w)):
|
|
211
|
+
add("borrowed", w.lower(), n, raw, True)
|
|
212
|
+
return findings
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def main():
|
|
216
|
+
ap = argparse.ArgumentParser(description="List what a draft says that the candidate's own material doesn't.")
|
|
217
|
+
ap.add_argument("draft")
|
|
218
|
+
ap.add_argument("--source", action="append", required=True, metavar="FILE",
|
|
219
|
+
help="the candidate's own resume or notes; repeat for more than one")
|
|
220
|
+
ap.add_argument("--posting", metavar="FILE", help="the job posting")
|
|
221
|
+
ap.add_argument("--json", action="store_true")
|
|
222
|
+
a = ap.parse_args()
|
|
223
|
+
|
|
224
|
+
findings = check(read(a.draft), [read(p) for p in a.source], read(a.posting) if a.posting else None)
|
|
225
|
+
if a.json:
|
|
226
|
+
print(json.dumps({"draft": a.draft, "findings": findings}, indent=1))
|
|
227
|
+
return 1 if findings else 0
|
|
228
|
+
if not findings:
|
|
229
|
+
print("PASS %s: every figure and name is in the source material." % a.draft)
|
|
230
|
+
return 0
|
|
231
|
+
labels = {"number": "Figures not in the source", "name": "Names not in the source",
|
|
232
|
+
"combination": "Words the source has, but not together",
|
|
233
|
+
"borrowed": "Wording taken from the posting"}
|
|
234
|
+
print("REVIEW %s: %d item(s) to check against the source material." % (a.draft, len(findings)))
|
|
235
|
+
for kind in ("number", "name", "combination", "borrowed"):
|
|
236
|
+
rows = [f for f in findings if f["kind"] == kind]
|
|
237
|
+
if not rows:
|
|
238
|
+
continue
|
|
239
|
+
print("\n%s (%d)" % (labels[kind], len(rows)))
|
|
240
|
+
for f in rows:
|
|
241
|
+
note = " [in posting]" if f["in_posting"] and kind != "borrowed" else ""
|
|
242
|
+
print(" line %d: %s%s\n %s" % (f["line"], f["text"], note, f["context"]))
|
|
243
|
+
return 1
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
if __name__ == "__main__":
|
|
247
|
+
sys.exit(main())
|
|
@@ -13,6 +13,14 @@ or a rewrite that goes back out through `md-to-docx` or `md-to-html`.
|
|
|
13
13
|
|
|
14
14
|
## How to respond
|
|
15
15
|
|
|
16
|
+
**Four rules come before the steps and outrank them:**
|
|
17
|
+
|
|
18
|
+
- **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.
|
|
19
|
+
- **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".
|
|
20
|
+
- **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.
|
|
21
|
+
- **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.
|
|
22
|
+
- **For this skill:** Put the converted text in front of the user: write the file, and say what did not convert, with counts.
|
|
23
|
+
|
|
16
24
|
1. **Ask once for anything missing.** Usually only the file is needed:
|
|
17
25
|
|
|
18
26
|
> Send me the file (or its path). Anything else is optional:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "file-to-markdown",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Convert a Word document, PowerPoint deck, Excel workbook, web page, CSV, JSON, text file or PDF into clean Markdown that keeps headings, lists, tables, links, bold and italic, slide titles and speaker notes, and reports everything it dropped (images, charts, comments, formulas, tracked changes), so the content can be read, reviewed or fed to another skill. Use when the user hands over a .docx, .pptx, .xlsx, .html, .csv, .json or .pdf and says \"read this\", \"turn this into markdown\", \"extract the text\", or wants it critiqued or briefed.",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": {
|
|
@@ -13,6 +13,14 @@ depends on (network for diagrams, remote images) and what it left out. Drafts of
|
|
|
13
13
|
|
|
14
14
|
## How to respond
|
|
15
15
|
|
|
16
|
+
**Four rules come before the steps and outrank them:**
|
|
17
|
+
|
|
18
|
+
- **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.
|
|
19
|
+
- **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".
|
|
20
|
+
- **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.
|
|
21
|
+
- **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.
|
|
22
|
+
- **For this skill:** When the page is for email or offline reading, a diagram has to arrive as an embedded image and styles have to be inline. If you can't render a diagram, say so at the top of the reply, because the reader would otherwise see its source code.
|
|
23
|
+
|
|
16
24
|
1. **Ask once for what is missing, with defaults.** Take what the user already gave and offer
|
|
17
25
|
defaults so they can reply "go":
|
|
18
26
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "md-to-html",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Turn a Markdown draft into one self-contained, print-friendly HTML file that survives being emailed or attached, with headings that have anchor links, tables, code, quotes, an optional table of contents, local images embedded, brand colours and fonts from a brand.json, Mermaid diagrams kept as text or drawn from a pinned CDN, and raw HTML escaped so nothing in the source runs. Use when the user wants Markdown \"as a web page\", \"as an HTML file I can send\", \"something people can open in a browser and print\", or says \"convert this to HTML\".",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": {
|
|
@@ -14,6 +14,14 @@ in a browser. Diagrams usually come from `architecture-diagrams`; the rendered S
|
|
|
14
14
|
|
|
15
15
|
## How to respond
|
|
16
16
|
|
|
17
|
+
**Four rules come before the steps and outrank them:**
|
|
18
|
+
|
|
19
|
+
- **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.
|
|
20
|
+
- **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".
|
|
21
|
+
- **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.
|
|
22
|
+
- **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.
|
|
23
|
+
- **For this skill:** When rendering can't run here, leave clean `.mmd` files and the plain `mmdc` commands that produce the files the user asked for. Commands you show must work in the user's own terminal as written. Don't offer an HTML page in place of the SVG or PNG they asked for.
|
|
24
|
+
|
|
17
25
|
1. **Ask once for what is missing.** Usually only the input:
|
|
18
26
|
|
|
19
27
|
> Send the diagram (a `.mmd` file, or the Markdown doc it lives in). Optional:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mermaid-render",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Check Mermaid diagrams for the mistakes that stop them rendering (unknown diagram type, unbalanced brackets or quotes, unquoted parentheses in labels, the word end as a node id, missing arrows, unclosed subgraphs or alt blocks) with line numbers and a fix for each, then render them to SVG, PNG or PDF with mermaid-cli, or to a standalone HTML page when it is not installed. Works on a .mmd file or every mermaid fence in a Markdown doc. Use when a diagram \"won't render\", the user says \"check my mermaid\", \"export this diagram as SVG/PNG\", or needs the diagrams in a doc as image files.",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": {
|
|
@@ -11,6 +11,14 @@ There is no cryptographic watermark in Claude's text output, and this skill does
|
|
|
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:** With no text and no path, ask for the text in one sentence. When a rule holds one class of cleaning back, state the rule in one sentence, do every other cleaning the user asked for, and don't comment on their intentions.
|
|
21
|
+
|
|
14
22
|
1. **Name the target medium before reading a word of the text.** Markdown document, plain text, commit message, code comment, web form, CSV. The medium decides whether a class is a defect at all: a curly apostrophe is correct in Markdown prose and a bug in a commit message; an em dash is punctuation in an essay and a tell at four per paragraph. State the medium in the first line of the report.
|
|
15
23
|
|
|
16
24
|
2. **Run the script first, and read its output before reading the draft.** It localizes every mechanical finding, so the model pass only has to look at prose.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "output-hygiene",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Review agent-written text before it ships and strip the machine artifacts it carries — invisible Unicode, non-breaking spaces, homoglyphs, harness-added provenance trailers, trailing chat closers — then flag the prose tells a script cannot catch, each quoted with a rewrite. Use when the user wants to clean up AI-generated output, asks to remove a Claude watermark, attribution footer, or \"Generated with\" line, wants a draft that does not read as machine-written, or needs a pre-ship hygiene pass on a document, commit message, or pasted chat answer.",
|
|
5
5
|
"entrypoint": "SKILL.md",
|
|
6
6
|
"deps": {
|
|
@@ -9,6 +9,14 @@ Turns a metric name that people already argue about ("active customers", "net re
|
|
|
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:** Give one definition. Check the SQL against the warehouse the user named: each function against the column's type, and a calendar period against a rolling one. A parameter the user has to fill in is listed under "To confirm", not left in the query.
|
|
19
|
+
|
|
12
20
|
1. **Pin the question and the sources, asking once.** Ask at most 2 questions in one message: *"What decision does this number inform, and who reads it?"* and *"Which tables or models hold the data, and is there SQL or a dashboard already computing something under this name?"* Existing SQL is the best input you can get: it shows the definition people actually use today, including its bugs. If the user gave both, don't ask.
|
|
13
21
|
|
|
14
22
|
**Non-interactive runs** (subagent, CI, headless): derive the business question and sources from the input and tag each `[assumption]`. Choices the input doesn't settle (timezone, exclusions, late-data policy) get a stated default tagged `[assumption]` and are listed under open decisions. No metric name and no business question in the input → emit `BLOCKED: need the metric name and the question it answers`.
|