skilldrop-cli 1.4.0 → 1.5.0
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 +6 -6
- package/bin/skilldrop.js +15 -10
- package/catalogue.json +5 -1
- package/contracts/catalogue.schema.json +2 -1
- package/model-routing.json +8 -8
- package/package.json +1 -1
- package/packs/ai-engineering/skills/judge-audit/SKILL.md +28 -11
- package/packs/ai-engineering/skills/judge-audit/evals/evals.json +30 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/12/judge_runs.csv +241 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/12/rosa_labels.csv +33 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/13/moderation_eval.csv +601 -0
- package/packs/ai-engineering/skills/judge-audit/manifest.json +2 -2
- package/packs/ai-engineering/skills/mcp-pairing/manifest.json +1 -1
- package/packs/ai-engineering/skills/mcp-pairing/reference.md +4 -3
- package/packs/ai-engineering/skills/subagent-design/SKILL.md +1 -0
- package/packs/ai-engineering/skills/subagent-design/examples/help-center-localization.md +146 -0
- package/packs/ai-engineering/skills/subagent-design/manifest.json +2 -2
- package/packs/api-builder/skills/prompt-caching-advisor/SKILL.md +4 -0
- package/packs/api-builder/skills/prompt-caching-advisor/examples/support-bot-block-order.md +120 -0
- package/packs/api-builder/skills/prompt-caching-advisor/manifest.json +2 -2
- package/packs/dev-team/loops/release/LOOP.md +4 -4
- package/packs/dev-team/loops/release/loop.json +1 -1
- package/packs/dev-team/skills/bug-triage/SKILL.md +1 -0
- package/packs/dev-team/skills/bug-triage/examples/export-row-limit-escalation.md +126 -0
- package/packs/dev-team/skills/bug-triage/manifest.json +2 -2
- package/packs/product-manager/skills/prd-draft/SKILL.md +1 -0
- package/packs/product-manager/skills/prd-draft/examples/approver-delay-not-slack.md +142 -0
- package/packs/product-manager/skills/prd-draft/manifest.json +2 -2
- package/profiles.json +1 -1
- package/packs/ai-engineering/loops/adopt/LOOP.md +0 -120
- package/packs/ai-engineering/loops/adopt/evals/eval_queries.json +0 -10
- package/packs/ai-engineering/loops/adopt/evals/evals.json +0 -69
- package/packs/ai-engineering/loops/adopt/evals/files/adopt-first-wave-to-sign-off/ai-ideas.md +0 -15
- package/packs/ai-engineering/loops/adopt/evals/files/adopt-first-wave-to-sign-off/org-context.md +0 -27
- package/packs/ai-engineering/loops/adopt/evals/files/adopt-first-wave-to-sign-off/staff-survey.csv +0 -11
- package/packs/ai-engineering/loops/adopt/evals/files/adopt-sponsor-slice-blocked-by-client-data/ai-ideas.md +0 -13
- package/packs/ai-engineering/loops/adopt/evals/files/adopt-sponsor-slice-blocked-by-client-data/firm-context.md +0 -23
- package/packs/ai-engineering/loops/adopt/loop.json +0 -53
- package/packs/career/loops/apply/LOOP.md +0 -97
- package/packs/career/loops/apply/evals/eval_queries.json +0 -9
- package/packs/career/loops/apply/evals/evals.json +0 -55
- package/packs/career/loops/apply/evals/files/apply-candidate-decided-full-run/application-form.md +0 -10
- package/packs/career/loops/apply/evals/files/apply-candidate-decided-full-run/job-posting.md +0 -33
- package/packs/career/loops/apply/evals/files/apply-candidate-decided-full-run/resume.md +0 -34
- package/packs/career/loops/apply/evals/files/apply-fit-gate-hard-requirement/cv.md +0 -27
- package/packs/career/loops/apply/evals/files/apply-fit-gate-hard-requirement/warehouse-supervisor.md +0 -30
- package/packs/career/loops/apply/loop.json +0 -52
- package/packs/product-manager/loops/discover/LOOP.md +0 -82
- package/packs/product-manager/loops/discover/evals/eval_queries.json +0 -30
- package/packs/product-manager/loops/discover/evals/evals.json +0 -54
- package/packs/product-manager/loops/discover/evals/files/discover-no-show-signal/interview-notes.md +0 -63
- package/packs/product-manager/loops/discover/evals/files/discover-no-show-signal/support-tickets.csv +0 -13
- package/packs/product-manager/loops/discover/evals/files/discover-vp-loyalty-no-evidence/vp-message.txt +0 -13
- package/packs/product-manager/loops/discover/loop.json +0 -41
- package/packs/sre-oncall/loops/operate/LOOP.md +0 -84
- package/packs/sre-oncall/loops/operate/evals/eval_queries.json +0 -30
- package/packs/sre-oncall/loops/operate/evals/evals.json +0 -53
- package/packs/sre-oncall/loops/operate/evals/files/operate-export-service-first-outage/alerts.log +0 -22
- package/packs/sre-oncall/loops/operate/evals/files/operate-export-service-first-outage/incident-chat.txt +0 -27
- package/packs/sre-oncall/loops/operate/evals/files/operate-export-service-first-outage/service-notes.md +0 -46
- package/packs/sre-oncall/loops/operate/evals/files/operate-incident-still-open/oncall-log.txt +0 -17
- package/packs/sre-oncall/loops/operate/evals/files/operate-incident-still-open/runbook-webhooks.md +0 -38
- package/packs/sre-oncall/loops/operate/loop.json +0 -41
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{"query": "help me apply for this job", "should_trigger": true},
|
|
3
|
-
{"query": "run the apply loop on this posting and my resume", "should_trigger": true},
|
|
4
|
-
{"query": "I want a tailored resume and cover letter for this role", "should_trigger": true},
|
|
5
|
-
{"query": "get my application for this job ready to send", "should_trigger": true},
|
|
6
|
-
{"query": "is this job a good fit for me?", "should_trigger": false},
|
|
7
|
-
{"query": "just write a cover letter for this", "should_trigger": false},
|
|
8
|
-
{"query": "turn these notes into a finished document", "should_trigger": false}
|
|
9
|
-
]
|
|
@@ -1,55 +0,0 @@
|
|
|
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 G6 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.1 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
|
-
"id": "apply-candidate-decided-full-run",
|
|
28
|
-
"held_out": "2026-11-04",
|
|
29
|
-
"prompt": "Help me apply for this CSM job at Quindle. The posting is job-posting.md, my CV is resume.md and the form questions are in application-form.md. I've already made up my mind that I'm applying, so once you've done the fit check just carry on and do the CV, cover letter and form answers. Closing date is Friday.",
|
|
30
|
-
"assertions": [
|
|
31
|
-
"The fit check comes first, before any CV or letter text, with each requirement marked met, partly met, not shown or not met and the resume line it rests on",
|
|
32
|
-
"Takes the candidate's stated decision to apply as the G6 decision and carries on through the tailored CV, cover letter and form answers in that order, rather than stopping to ask again",
|
|
33
|
-
"The tailored CV keeps every employer, title, date and number as in resume.md (42 accounts, £1.3M ARR, 94% retention, 15 QBR accounts, 3 saved accounts, 11 onboardings) and reports healthcare or regulated-industry experience as something it cannot claim",
|
|
34
|
-
"The cover letter is under a page, opens on the strongest evidence for the role, and adds no enthusiasm or facts about Quindle beyond the posting",
|
|
35
|
-
"Form answers follow the form's order, draft questions 1 to 4 from resume lines, and leave right to work, salary, notice period and equal-opportunities monitoring for the candidate to answer",
|
|
36
|
-
"Ends at the G6.1 confirm gate with the claims the candidate must check are true, and does not call the application ready to send before they confirm",
|
|
37
|
-
"Does not invent experience, figures or qualifications not in resume.md, such as healthcare work, a SQL certification or a notice period"
|
|
38
|
-
]
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"id": "apply-fit-gate-hard-requirement",
|
|
42
|
-
"held_out": "2026-11-04",
|
|
43
|
-
"prompt": "help me apply for this, closes sunday. the job is warehouse-supervisor.md and my cv is cv.md. need a cover letter and the cv sorted",
|
|
44
|
-
"assertions": [
|
|
45
|
-
"Runs the fit check first, with each requirement marked and the CV line it rests on",
|
|
46
|
-
"Puts the counterbalance and reach truck licences first as an essential requirement the CV does not show (it mentions only a manual pallet truck), with WMS experience not shown and warehouse or DC supervision partly met at best",
|
|
47
|
-
"Credits what the CV does show: teams of up to 14, leading the Thursday 22:00-06:00 replenishment crew of 6, return-to-work interviews, and the First Aid at Work certificate",
|
|
48
|
-
"Names the answers that would change the picture, such as whether the candidate holds or is booking the truck licences and whether they can work 4-on-4-off nights",
|
|
49
|
-
"Stops at the G6 gate for the candidate to decide whether to apply now that they have seen the fit check, and does not produce a tailored CV or cover letter in this run",
|
|
50
|
-
"Leaves the apply decision to the candidate rather than deciding it for them either way",
|
|
51
|
-
"Does not invent a forklift licence, warehouse experience, a named WMS or night-pattern availability not in cv.md"
|
|
52
|
-
]
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
}
|
package/packs/career/loops/apply/evals/files/apply-candidate-decided-full-run/application-form.md
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# Quindle — application form: Customer Success Manager, Mid-Market
|
|
2
|
-
|
|
3
|
-
1. Why are you interested in this role? (max 150 words)
|
|
4
|
-
2. Tell us about a time you kept a customer who was at risk of leaving. What did you do, and what happened? (max 200 words)
|
|
5
|
-
3. How many accounts do you currently manage, and what is their total value?
|
|
6
|
-
4. Do you have experience in healthcare or another regulated industry? If yes, please describe.
|
|
7
|
-
5. Do you have the right to work in the UK? (Yes / No / I will need sponsorship)
|
|
8
|
-
6. What are your salary expectations?
|
|
9
|
-
7. What is your notice period?
|
|
10
|
-
8. Equal opportunities monitoring (optional): gender, ethnicity, disability.
|
package/packs/career/loops/apply/evals/files/apply-candidate-decided-full-run/job-posting.md
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# Customer Success Manager, Mid-Market — Quindle
|
|
2
|
-
|
|
3
|
-
Remote (UK) · Full time · Closing date: Friday 6 November 2026
|
|
4
|
-
Apply at careers.quindle.example/jobs/csm-mm
|
|
5
|
-
|
|
6
|
-
## About the role
|
|
7
|
-
|
|
8
|
-
Quindle makes scheduling and records software for private clinics. You'll own a book of mid-market clinic groups after they go live, keep them renewing, and find room for them to grow with us. You'll report to the Head of Customer Success.
|
|
9
|
-
|
|
10
|
-
## What you'll do
|
|
11
|
-
|
|
12
|
-
- Own a portfolio of around 35 mid-market accounts
|
|
13
|
-
- Run quarterly business reviews with clinic managers and owners
|
|
14
|
-
- Spot at-risk accounts early from usage and health data, and build save plans
|
|
15
|
-
- Own renewals and work with Sales on expansion
|
|
16
|
-
- Feed customer needs back to Product
|
|
17
|
-
|
|
18
|
-
## What we're looking for
|
|
19
|
-
|
|
20
|
-
**Essential**
|
|
21
|
-
- 4+ years in a customer-facing role at a software or subscription business, including at least 2 years managing a book of accounts
|
|
22
|
-
- Track record on retention or renewals, with numbers to show it
|
|
23
|
-
- Experience running business reviews with senior customer stakeholders
|
|
24
|
-
- Comfortable working day to day in a CRM
|
|
25
|
-
|
|
26
|
-
**Nice to have**
|
|
27
|
-
- Experience in healthcare or another regulated industry
|
|
28
|
-
- Basic SQL or confidence pulling your own data
|
|
29
|
-
- Experience onboarding new customers
|
|
30
|
-
|
|
31
|
-
## What we offer
|
|
32
|
-
|
|
33
|
-
Salary £42,000–£50,000, 25 days holiday plus bank holidays, home office budget.
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# Sam Okonedo
|
|
2
|
-
|
|
3
|
-
sam.okonedo@example.com · 07700 900123 · Bristol
|
|
4
|
-
|
|
5
|
-
## Experience
|
|
6
|
-
|
|
7
|
-
**Account Manager — Brindle Payroll Ltd** · March 2021 – present
|
|
8
|
-
Payroll software for small and mid-sized businesses.
|
|
9
|
-
- Manage a book of 42 SMB and mid-market accounts worth £1.3M in annual recurring revenue
|
|
10
|
-
- Gross revenue retention of 94% across my book in 2024 (team average 89%)
|
|
11
|
-
- Run quarterly business reviews with finance directors and owners for my 15 largest accounts
|
|
12
|
-
- Turned around 3 accounts flagged red on our health score in 2025; all 3 renewed
|
|
13
|
-
- Led onboarding for 11 new clients after the onboarding specialist role was cut in 2023
|
|
14
|
-
- Keep all account notes, renewals and tasks in the team CRM
|
|
15
|
-
|
|
16
|
-
**Customer Support Team Lead — Marrow Telecom** · June 2018 – February 2021
|
|
17
|
-
Business broadband and phone lines.
|
|
18
|
-
- Led a team of 6 support agents handling business customer queries by phone, chat and email
|
|
19
|
-
- Team CSAT of 4.6 out of 5 over 2020
|
|
20
|
-
- Wrote the team's escalation guide, still in use when I left
|
|
21
|
-
|
|
22
|
-
**Customer Support Agent — Marrow Telecom** · September 2016 – May 2018
|
|
23
|
-
|
|
24
|
-
## Education
|
|
25
|
-
|
|
26
|
-
BA (Hons) Business Management, Harbourside University (2016)
|
|
27
|
-
|
|
28
|
-
## Training
|
|
29
|
-
|
|
30
|
-
- Introduction to SQL (online course, 2023)
|
|
31
|
-
|
|
32
|
-
## Skills
|
|
33
|
-
|
|
34
|
-
CRM administration, Excel (pivot tables, lookups), presenting to senior stakeholders
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# Lee Farrant
|
|
2
|
-
|
|
3
|
-
lee.farrant@example.com · 07700 900456 · Northampton
|
|
4
|
-
|
|
5
|
-
## Profile
|
|
6
|
-
|
|
7
|
-
Retail shift manager with six years running teams on early, late and night shifts in a large supermarket.
|
|
8
|
-
|
|
9
|
-
## Experience
|
|
10
|
-
|
|
11
|
-
**Shift Manager — Hollinsby Foods, Northampton superstore** · April 2020 – present
|
|
12
|
-
- Run early and late shifts with teams of up to 14 colleagues across grocery, chilled and checkouts
|
|
13
|
-
- Lead the Thursday night replenishment crew (6 colleagues, 22:00–06:00) receiving and putting away the overnight delivery
|
|
14
|
-
- Store stock accuracy of 98.7% at the 2025 annual stock count
|
|
15
|
-
- Do the rota for the grocery department (around 30 colleagues)
|
|
16
|
-
- Carry out return-to-work interviews and first-stage disciplinary meetings
|
|
17
|
-
- Use the store's handheld stock system for gap checks, deliveries and stock counts
|
|
18
|
-
- Move cages and pallets on the shop floor with a manual pallet truck
|
|
19
|
-
|
|
20
|
-
**Customer Assistant — Hollinsby Foods** · August 2017 – March 2020
|
|
21
|
-
- Night replenishment, then checkouts and customer service desk
|
|
22
|
-
|
|
23
|
-
## Qualifications
|
|
24
|
-
|
|
25
|
-
- First Aid at Work certificate (2024)
|
|
26
|
-
- Food Hygiene Level 2
|
|
27
|
-
- GCSEs including English and Maths
|
package/packs/career/loops/apply/evals/files/apply-fit-gate-hard-requirement/warehouse-supervisor.md
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# Night Shift Warehouse Supervisor — Pellbrook Distribution
|
|
2
|
-
|
|
3
|
-
Ambient distribution centre, Daventry area · Permanent · £34,500 plus night allowance
|
|
4
|
-
Closing date: Sunday 8 November 2026 · jobs.pellbrook.example/night-supervisor
|
|
5
|
-
|
|
6
|
-
## The role
|
|
7
|
-
|
|
8
|
-
You'll run the night shift at our ambient distribution centre, leading a team of around 20 pickers, loaders and forklift drivers so that store orders leave on time and accurately.
|
|
9
|
-
|
|
10
|
-
Shift pattern: 4 nights on, 4 nights off, 22:00–06:00.
|
|
11
|
-
|
|
12
|
-
## Responsibilities
|
|
13
|
-
|
|
14
|
-
- Plan and allocate labour across picking, loading and goods-in for the shift
|
|
15
|
-
- Hit dispatch and pick-accuracy targets
|
|
16
|
-
- Run shift briefings, toolbox talks and return-to-work interviews
|
|
17
|
-
- Carry out and record safety checks, and lead incident investigations on shift
|
|
18
|
-
- Cover forklift operation when the shift is short
|
|
19
|
-
|
|
20
|
-
## Requirements
|
|
21
|
-
|
|
22
|
-
**Essential**
|
|
23
|
-
- Current counterbalance and reach truck licences (certificates will be checked at interview)
|
|
24
|
-
- At least 2 years supervising a team in a warehouse or distribution centre
|
|
25
|
-
- Able to work the 4-on-4-off night pattern
|
|
26
|
-
- Experience using a warehouse management system (WMS)
|
|
27
|
-
|
|
28
|
-
**Desirable**
|
|
29
|
-
- First Aid at Work certificate
|
|
30
|
-
- IOSH Managing Safely or equivalent
|
|
@@ -1,52 +0,0 @@
|
|
|
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.3.0",
|
|
5
|
-
"description": "Take one job posting and one resume to an application ready to send — an honest fit check, a tailored resume, a cover letter and the answers to the application form — 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": "G6",
|
|
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": "form",
|
|
35
|
-
"type": "generate",
|
|
36
|
-
"intent": "Draft the application form's answers from the tailored resume, and hand back the declarations that are the candidate's alone.",
|
|
37
|
-
"skills": ["application-form-answers"]
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
"id": "confirm",
|
|
41
|
-
"type": "verify",
|
|
42
|
-
"intent": "Strip what the machine left behind, then have the candidate confirm that every line in the documents is true and theirs, and that anything added from outside the resume is right.",
|
|
43
|
-
"skills": ["output-hygiene"],
|
|
44
|
-
"gate": {
|
|
45
|
-
"id": "G6.1",
|
|
46
|
-
"kind": "human",
|
|
47
|
-
"verdicts": ["READY", "NOT READY", "BLOCKED"],
|
|
48
|
-
"revise_to": "tailor"
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
]
|
|
52
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: discover
|
|
3
|
-
description: Take raw signal — interviews, journeys, a strategy question — to a requirement a human has ratified, so design starts from an agreed problem rather than an assumed one. Use when the user is deciding what to build, scoping a feature, or turning stakeholder conversations into requirements.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# discover
|
|
7
|
-
|
|
8
|
-
The first loop of the lifecycle, and the cheapest one to run twice. Everything downstream
|
|
9
|
-
inherits whatever this loop got wrong, which is why it ends at a **human** gate rather than a
|
|
10
|
-
script: no check can tell you that you solved the wrong problem well.
|
|
11
|
-
|
|
12
|
-
## Stages
|
|
13
|
-
|
|
14
|
-
| # | Stage | Type | Skills | Gate |
|
|
15
|
-
|---|---|---|---|---|
|
|
16
|
-
| 1 | `gather` | generate | [`requirements-interview`](../../skills/requirements-interview/SKILL.md), [`user-journey-map`](../../skills/user-journey-map/SKILL.md), [`strategy-analysis`](../../skills/strategy-analysis/SKILL.md), [`feedback-synthesis`](../../skills/feedback-synthesis/SKILL.md) | — |
|
|
17
|
-
| 2 | `structure` | generate | [`brief-intake`](../../../core/skills/brief-intake/SKILL.md) | — |
|
|
18
|
-
| 3 | `specify` | generate | [`prd-draft`](../../skills/prd-draft/SKILL.md) | — |
|
|
19
|
-
| 4 | `ratify` | gate | [`doc-critique`](../../../core/skills/doc-critique/SKILL.md) | **G0** human |
|
|
20
|
-
|
|
21
|
-
## How to run this loop
|
|
22
|
-
|
|
23
|
-
1. **Gather from whichever direction the signal arrives.** A stakeholder conversation →
|
|
24
|
-
`requirements-interview`. An existing experience with known friction → `user-journey-map`.
|
|
25
|
-
An open strategic question → `strategy-analysis`. A pile of tickets, survey verbatims or
|
|
26
|
-
interview notes already collected → `feedback-synthesis`. Run one; running several on the
|
|
27
|
-
same input produces several views of the same thing and no more information.
|
|
28
|
-
2. **Structure once.** `brief-intake` tags every field `[explicit]` / `[implied]` /
|
|
29
|
-
`[inferred]` / `[missing]` with verbatim quotes. The tags are the deliverable — an
|
|
30
|
-
untagged brief hides which parts are somebody's assumption.
|
|
31
|
-
3. **Resolve the missing before specifying.** `brief-intake` ends with what the downstream
|
|
32
|
-
skill will refuse to start without. Answer those; do not let `prd-draft` invent them.
|
|
33
|
-
4. **Specify.** `prd-draft` turns the brief into numbered requirements a design can be held to.
|
|
34
|
-
5. **Ratify at G0.** Run `doc-critique` against the PRD, then put the decision to a human.
|
|
35
|
-
The critique informs; the human decides. `REVISE` returns to `structure`, not to `specify`
|
|
36
|
-
— a weak PRD almost always means a thin brief.
|
|
37
|
-
|
|
38
|
-
## Verdicts
|
|
39
|
-
|
|
40
|
-
Defined in [`contracts/terminals.json`](../../../../contracts/terminals.json). G0 emits `PROCEED`,
|
|
41
|
-
`PROCEED WITH CONDITIONS`, `REVISE`, `RECONSIDER`, or `BLOCKED`. `RECONSIDER` leaves the loop:
|
|
42
|
-
the problem itself is wrong, and no amount of re-briefing fixes that.
|
|
43
|
-
|
|
44
|
-
## Non-interactive runs
|
|
45
|
-
|
|
46
|
-
With no human present, G0 cannot be satisfied. Emit `BLOCKED: need ratification of <the
|
|
47
|
-
brief's central claim>` and stop. Do not self-ratify — a fabricated goal corrupts every
|
|
48
|
-
artifact the other four loops produce.
|
|
49
|
-
|
|
50
|
-
## When a stage's skill is not installed
|
|
51
|
-
|
|
52
|
-
Name the missing skill and skilldrop as its source, do the minimal inline version of that
|
|
53
|
-
stage, and record that it ran degraded. Never skip G0.
|
|
54
|
-
|
|
55
|
-
## Run log (opt-in)
|
|
56
|
-
|
|
57
|
-
Only when the environment variable `SKILLDROP_LOOP_LOG` is set to a file path: after each
|
|
58
|
-
gate's verdict, append one JSON line to that file. Nothing else is recorded, and nothing is
|
|
59
|
-
sent anywhere. When the variable isn't set, or you can't read it, skip this section.
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
printf '%s\n' '{"ts":"2026-10-01T14:03:00Z","loop":"discover","stage":"ratify","gate":"G0","verdict":"PROCEED","round":1}' >> "$SKILLDROP_LOOP_LOG"
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Fields: `ts` (UTC), `loop`, `stage`, `gate` (`null` for a stage without one), `verdict` (the
|
|
66
|
-
gate's exact word), and `round` (1 for the first attempt, counting returns under the cap).
|
|
67
|
-
`skilldrop loop-stats` summarises the file: which gates pass first time, which loop back, and
|
|
68
|
-
which end in `BLOCKED`.
|
|
69
|
-
|
|
70
|
-
## Quality bar
|
|
71
|
-
|
|
72
|
-
- **Every field carries a provenance tag.** A brief that does not distinguish quoted from inferred cannot be ratified, only believed.
|
|
73
|
-
- **`[missing]` is resolved or stated, never filled.** Inventing the goal, the customer, or the success measure is the one failure this loop exists to prevent.
|
|
74
|
-
- **The requirements are numbered and testable.** "Fast" is not a requirement; a latency target is.
|
|
75
|
-
- **A human ratifies before design starts.** G0 is the loop's only reason to exist — an unratified brief is a draft, whatever the critique said.
|
|
76
|
-
|
|
77
|
-
## Anti-patterns to avoid
|
|
78
|
-
|
|
79
|
-
- ❌ **Running every `gather` skill to be thorough.** Three lenses on one input is not three inputs; pick the one that matches where the signal came from.
|
|
80
|
-
- ❌ **Letting `prd-draft` fill a `[missing]` field.** That converts an open question into a fact nobody agreed to.
|
|
81
|
-
- ❌ **Treating `doc-critique`'s `SHIP IT` as ratification.** The critique judges the document; G0 judges the problem.
|
|
82
|
-
- ❌ **Returning `REVISE` to `specify`.** Re-writing the PRD from the same thin brief reproduces the same gaps in better prose.
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"query": "turn these stakeholder notes into requirements",
|
|
4
|
-
"should_trigger": true
|
|
5
|
-
},
|
|
6
|
-
{
|
|
7
|
-
"query": "run the discover loop on this complaint",
|
|
8
|
-
"should_trigger": true
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"query": "what problem are we actually solving here?",
|
|
12
|
-
"should_trigger": true
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"query": "get this idea to a ratified brief",
|
|
16
|
-
"should_trigger": true
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"query": "split this epic into stories",
|
|
20
|
-
"should_trigger": false
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"query": "write the design doc for this",
|
|
24
|
-
"should_trigger": false
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"query": "review my pull request",
|
|
28
|
-
"should_trigger": false
|
|
29
|
-
}
|
|
30
|
-
]
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"loop_name": "discover",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": "refuses-to-specify-on-a-thin-brief",
|
|
6
|
-
"prompt": "Run the discover loop. An account manager says enterprise customers keep hitting our API limits and are complaining.",
|
|
7
|
-
"assertions": [
|
|
8
|
-
"Starts at `gather` with requirements-interview, because the signal arrived as a conversation rather than a journey or a strategy question",
|
|
9
|
-
"Does not run all three gather skills on the same input",
|
|
10
|
-
"Tags every brief field [explicit] / [implied] / [inferred] / [missing] with its source",
|
|
11
|
-
"Marks the threshold and the affected-customer count as [missing] rather than inventing plausible numbers",
|
|
12
|
-
"Refuses to complete `specify` until the [missing] anchors are resolved, and says which ones block it",
|
|
13
|
-
"Does not self-ratify G0 — it names ratification as a human decision"
|
|
14
|
-
]
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": "reconsider-leaves-the-loop",
|
|
18
|
-
"prompt": "We ran discover and the stakeholder now says they actually want burst capacity, not a higher ceiling.",
|
|
19
|
-
"assertions": [
|
|
20
|
-
"Classifies this as RECONSIDER, a redirect-class verdict",
|
|
21
|
-
"States that a redirect leaves the loop rather than revising within it",
|
|
22
|
-
"Does not route back to `structure` for another brief on the original problem"
|
|
23
|
-
]
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"id": "discover-no-show-signal",
|
|
27
|
-
"held_out": "2026-11-04",
|
|
28
|
-
"prompt": "Our head of product wants SMS appointment reminders in Chairside because clinics keep complaining about no-shows. I did six clinic manager interviews and pulled last quarter's support tickets (interview-notes.md, support-tickets.csv). Can you take this through to a requirement the team can sign off on? I'm taking it to product review on Thursday.",
|
|
29
|
-
"assertions": [
|
|
30
|
-
"Synthesises the interviews and tickets into themes before writing the brief and the PRD, and the PRD's problem statement traces back to those themes rather than starting from the head of product's SMS request",
|
|
31
|
-
"Counts themes by distinct clinic or account, not by mentions: Riverside Smiles (CL-1107) filing four rescheduling tickets is counted as one account, and the interviews split four clinics (B, C, E, F) for not being able to move an appointment against two (A, D) for forgetting",
|
|
32
|
-
"Concludes that the evidence points more at patients being unable to reschedule outside phone hours than at forgetting, and cites Harbourside (clinic C), which already sends SMS reminders and still gets no-shows, instead of treating SMS reminders as the settled solution",
|
|
33
|
-
"The PRD's problem statement contains no solution language, and the PRD has testable requirements and explicit non-goals",
|
|
34
|
-
"Runs a critique of the drafted PRD before handing it over, and either fixes each finding or lists it as open",
|
|
35
|
-
"Stops at a human ratification gate: presents the PRD as awaiting sign-off at Thursday's review, does not call it ratified or approved itself, and does not go on to a design doc or architecture",
|
|
36
|
-
"Does not invent figures that are not in the input, such as a no-show rate, revenue lost to no-shows, or a share of patients who would reschedule online"
|
|
37
|
-
]
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
"id": "discover-vp-loyalty-no-evidence",
|
|
41
|
-
"held_out": "2026-11-04",
|
|
42
|
-
"prompt": "VP wants a loyalty points programme in the Chairside patient app, her message is in vp-message.txt. We haven't done any research on it. Just write the PRD and mark it approved so design can start Monday, she's already said yes.",
|
|
43
|
-
"assertions": [
|
|
44
|
-
"Says plainly that the input holds no customer or clinic evidence, and labels the PRD's problem statement as an unvalidated assumption rather than an established problem",
|
|
45
|
-
"Does not skip the gather stage: produces interview questions or an assumptions-to-validate ledger that tests the VP's premise, including at least one question that could disprove it",
|
|
46
|
-
"Does not mark the PRD approved or ratified; leaves sign-off of the written requirement to a person, noting that the VP's yes was given to an idea before any requirement existed",
|
|
47
|
-
"The critique of the draft flags the missing evidence for the problem as a blocker or a major finding, not a nit",
|
|
48
|
-
"Does not hand the work on to design or produce design artifacts such as a design doc, architecture or screens",
|
|
49
|
-
"Proceeds without asking follow-up questions, and states the assumptions it made in their place",
|
|
50
|
-
"Does not invent evidence that is not in vp-message.txt, such as customer quotes, survey results, retention figures or details of the expo vendors, and does not carry the VP's 'cuts no-shows in half' guess into the PRD as a fact or committed target"
|
|
51
|
-
]
|
|
52
|
-
}
|
|
53
|
-
]
|
|
54
|
-
}
|
package/packs/product-manager/loops/discover/evals/files/discover-no-show-signal/interview-notes.md
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# Chairside — clinic manager interviews, no-shows
|
|
2
|
-
|
|
3
|
-
Interviewer: Tomas Reyes (PM). Six 30-minute calls, 13–24 Oct 2026. Notes are mine, not transcripts; quotes are as close as I could get them.
|
|
4
|
-
|
|
5
|
-
Context going in: Mara Lindqvist (Head of Product) asked us to look at SMS appointment reminders because "clinics keep complaining about no-shows".
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## A — Oakfield Family Dental (acct CL-1043), 3 chairs
|
|
10
|
-
Manager: Helen Brandt
|
|
11
|
-
|
|
12
|
-
- Biggest headache is the afternoon slots. "Half the time they just forgot. We ring the day before if we have time, which we usually don't."
|
|
13
|
-
- Would like an automatic reminder. Asked if it could be a text, "nobody reads email".
|
|
14
|
-
- Reschedule calls are "fine, we get a few".
|
|
15
|
-
- Q: how many no-shows? "Feels like a lot. Maybe one or two a day? I've never counted."
|
|
16
|
-
|
|
17
|
-
## B — Riverside Smiles (acct CL-1107), 5 chairs
|
|
18
|
-
Manager: Owen Pak
|
|
19
|
-
|
|
20
|
-
- No-shows mostly from patients who knew they couldn't make it but "didn't want to ring". "They know they can't come, they mean to call, the phones are only staffed 8 to 5, and by the time they remember it's evening."
|
|
21
|
-
- Front desk spends the first hour each morning on voicemails asking to move appointments.
|
|
22
|
-
- Wants patients to be able to move their own appointment. "Not cancel — move. If they can only cancel, I've lost the slot and the patient."
|
|
23
|
-
- Reminders: "We already send the default email reminder from Chairside. Doesn't change much."
|
|
24
|
-
|
|
25
|
-
## C — Harbourside Dental Studio (acct CL-1122), 4 chairs
|
|
26
|
-
Manager: Priyanka Shah
|
|
27
|
-
|
|
28
|
-
- Already sends SMS reminders through a separate tool (pays for it separately, wants to drop it).
|
|
29
|
-
- Still gets no-shows. "The text goes out at 7pm the night before. They reply 'can I move this?' to the text. Nobody sees that reply, it's a no-reply number. Then they don't come."
|
|
30
|
-
- "Reminders aren't the problem. The problem is there's nothing they can do with the reminder."
|
|
31
|
-
- Wants: the reminder to let the patient pick a new time.
|
|
32
|
-
|
|
33
|
-
## D — Northgate Dental Care (acct CL-1158), 2 chairs
|
|
34
|
-
Manager: Femi Adeyemi
|
|
35
|
-
|
|
36
|
-
- Small practice, older patient base. "A lot of my patients don't text."
|
|
37
|
-
- Forgetting is the main reason. Calls every patient the day before; takes about 40 minutes a day.
|
|
38
|
-
- Would use automatic reminders if patients could get a phone call instead of a text. Not sure SMS helps his patients.
|
|
39
|
-
- Rescheduling: "They call, it's fine."
|
|
40
|
-
|
|
41
|
-
## E — Lakeview Orthodontics (acct CL-1201), 6 chairs
|
|
42
|
-
Manager: Grace Muller
|
|
43
|
-
|
|
44
|
-
- Patients are mostly teenagers; parents book. Parents "can't call during work hours".
|
|
45
|
-
- No-shows cluster on school-holiday weeks, when plans change. Parents want to move the appointment and "the only way is to phone us".
|
|
46
|
-
- Wants online rescheduling, limited to the same clinician. Orthodontic appointments must stay with the same clinician.
|
|
47
|
-
- Asked whether a reminder would help: "A bit. But they don't forget, they just can't get through to us."
|
|
48
|
-
|
|
49
|
-
## F — Westbrook Dental (acct CL-1219), 4 chairs
|
|
50
|
-
Manager: Ana Kowalczyk
|
|
51
|
-
|
|
52
|
-
- "When a patient no-shows I can almost always see a missed call or a voicemail from the day before." Has started checking.
|
|
53
|
-
- Front desk is one person; can't answer while checking someone in.
|
|
54
|
-
- Wants patients to move appointments themselves, but worried about double-booking and about patients moving into slots reserved for emergencies.
|
|
55
|
-
- Indifferent on reminders. "Fine, but that's not what's happening."
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## My quick read (not analysed yet)
|
|
60
|
-
- I went in expecting "forgetting" and I'm not sure that's the main thing.
|
|
61
|
-
- Two clinics (A, D) say forgetting. Four (B, C, E, F) say patients wanted to move the appointment and couldn't reach the clinic.
|
|
62
|
-
- D's patients may not use SMS at all.
|
|
63
|
-
- Nobody gave me a real no-show number. None of them track it.
|
package/packs/product-manager/loops/discover/evals/files/discover-no-show-signal/support-tickets.csv
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
ticket_id,opened,account_id,clinic,channel,subject,body
|
|
2
|
-
T-55102,2026-07-03,CL-1107,Riverside Smiles,email,Online rescheduling?,"Is there any way for patients to move their own appointment online? Our voicemail is full every morning."
|
|
3
|
-
T-55140,2026-07-09,CL-1043,Oakfield Family Dental,chat,Reminder texts,"Can Chairside send text reminders instead of emails? Patients don't read the emails."
|
|
4
|
-
T-55188,2026-07-15,CL-1107,Riverside Smiles,email,Re: Online rescheduling?,"Following up on T-55102. Any update? Still getting 10+ voicemails a day to move appointments."
|
|
5
|
-
T-55231,2026-07-22,CL-1288,Pinecrest Dental,phone,Printer setup,"Appointment cards print on the wrong size paper since the update."
|
|
6
|
-
T-55267,2026-07-28,CL-1201,Lakeview Orthodontics,email,Patient self-service,"Parents keep asking for a link to reschedule. Can the confirmation email have a reschedule button?"
|
|
7
|
-
T-55310,2026-08-04,CL-1107,Riverside Smiles,chat,reschedule link,"Do you have a reschedule link we can send patients? Even just for cleanings."
|
|
8
|
-
T-55355,2026-08-11,CL-1122,Harbourside Dental Studio,email,SMS reminders built in?,"We pay for a separate SMS reminder tool. Do you have reminders by text built in? Also patients reply to the text asking to move and we never see it."
|
|
9
|
-
T-55402,2026-08-19,CL-1107,Riverside Smiles,email,Feature request: patients change own booking,"Raising again. Patients want to change their own booking. This is our number one ask."
|
|
10
|
-
T-55447,2026-08-26,CL-1219,Westbrook Dental,chat,Can patients reschedule themselves?,"Can patients reschedule themselves? Needs to not let them book over emergency slots."
|
|
11
|
-
T-55489,2026-09-02,CL-1288,Pinecrest Dental,email,Export appointments,"How do I export last month's appointments to a spreadsheet?"
|
|
12
|
-
T-55530,2026-09-10,CL-1201,Lakeview Orthodontics,email,Re: Patient self-service,"Any news on the reschedule button? Parents asking weekly."
|
|
13
|
-
T-55574,2026-09-18,CL-1043,Oakfield Family Dental,phone,No-show reminders,"Is there a way to automatically remind patients the day before? We don't have time to ring them all."
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
From: Dana Whitfield (VP Product, Chairside)
|
|
2
|
-
To: #product-chairside
|
|
3
|
-
Date: Mon 2 Nov 2026, 08:14
|
|
4
|
-
|
|
5
|
-
Morning all. Back from DentTech Expo. Two of the vendors there were showing loyalty points in their patient apps and I think we're behind on this.
|
|
6
|
-
|
|
7
|
-
Idea: patients earn points in the Chairside patient app for keeping appointments and for coming back for their six-monthly cleaning. Clinics can let them redeem points for something (whitening discount? priority booking? let the clinics decide).
|
|
8
|
-
|
|
9
|
-
I bet this cuts no-shows in half and gets more people back for recalls. Clinics will love it.
|
|
10
|
-
|
|
11
|
-
Can someone get a PRD going this week? I'd like design to start Monday. I'm a yes on this, no need to bring it back to me.
|
|
12
|
-
|
|
13
|
-
D.
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "RFC-0028. The first loop of the lifecycle: nothing is designed or built until a human has ratified what problem is being solved. Cheapest loop to redo and the most expensive to skip.",
|
|
3
|
-
"name": "discover",
|
|
4
|
-
"version": "0.3.0",
|
|
5
|
-
"description": "Take raw signal — interviews, journeys, a strategy question — to a requirement a human has ratified, so design starts from an agreed problem rather than an assumed one. Use when the user is deciding what to build, scoping a feature, or turning stakeholder conversations into requirements.",
|
|
6
|
-
"entrypoint": "LOOP.md",
|
|
7
|
-
"kind": "loop",
|
|
8
|
-
"cap": 3,
|
|
9
|
-
"stages": [
|
|
10
|
-
{
|
|
11
|
-
"id": "gather",
|
|
12
|
-
"type": "generate",
|
|
13
|
-
"intent": "Collect the raw signal from whichever direction it arrives: a stakeholder conversation, an existing user journey, or a strategic question.",
|
|
14
|
-
"skills": ["requirements-interview", "user-journey-map", "strategy-analysis", "feedback-synthesis"]
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": "structure",
|
|
18
|
-
"type": "generate",
|
|
19
|
-
"intent": "Turn the mess into one brief with every field tagged explicit / implied / inferred / missing, so downstream can see what was assumed.",
|
|
20
|
-
"skills": ["brief-intake"]
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"id": "specify",
|
|
24
|
-
"type": "generate",
|
|
25
|
-
"intent": "Turn the ratified brief into numbered requirements a design can be held to.",
|
|
26
|
-
"skills": ["prd-draft"]
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"id": "ratify",
|
|
30
|
-
"type": "gate",
|
|
31
|
-
"intent": "A human agrees this is the problem worth solving. The critique informs that decision; it does not make it.",
|
|
32
|
-
"skills": ["doc-critique"],
|
|
33
|
-
"gate": {
|
|
34
|
-
"id": "G0",
|
|
35
|
-
"kind": "human",
|
|
36
|
-
"verdicts": ["PROCEED", "PROCEED WITH CONDITIONS", "REVISE", "RECONSIDER", "BLOCKED"],
|
|
37
|
-
"revise_to": "structure"
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
]
|
|
41
|
-
}
|