skilldrop-cli 0.16.35 → 0.16.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/README.md +1 -0
  2. package/agents/README.md +4 -1
  3. package/agents/docs-reviewer.md +47 -0
  4. package/agents/finding-adjudicator.md +49 -0
  5. package/agents/test-reviewer.md +52 -0
  6. package/catalogue.json +17 -7
  7. package/model-routing.json +40 -0
  8. package/package.json +1 -1
  9. package/packs/ai-engineering/skills/agent-config-review/SKILL.md +116 -0
  10. package/packs/ai-engineering/skills/agent-config-review/evals/eval_queries.json +12 -0
  11. package/packs/ai-engineering/skills/agent-config-review/evals/evals.json +75 -0
  12. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/db-migrator.md +8 -0
  13. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/reviewer.md +9 -0
  14. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/settings.json +48 -0
  15. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/settings.local.json +5 -0
  16. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.mcp.json +22 -0
  17. package/packs/ai-engineering/skills/agent-config-review/evals/files/1/package.json +12 -0
  18. package/packs/ai-engineering/skills/agent-config-review/evals/files/2/.cursor/mcp.json +17 -0
  19. package/packs/ai-engineering/skills/agent-config-review/evals/files/2/config.toml +21 -0
  20. package/packs/ai-engineering/skills/agent-config-review/evals/files/4/my-user-settings.json +11 -0
  21. package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.claude/agents/release-notes.md +13 -0
  22. package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.claude/settings.json +39 -0
  23. package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.mcp.json +18 -0
  24. package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/package.json +14 -0
  25. package/packs/ai-engineering/skills/agent-config-review/evals/files/5/.github/workflows/codex-triage.yml +29 -0
  26. package/packs/ai-engineering/skills/agent-config-review/evals/files/5/AGENTS.md +16 -0
  27. package/packs/ai-engineering/skills/agent-config-review/evals/files/5/codex/config.toml +34 -0
  28. package/packs/ai-engineering/skills/agent-config-review/examples/inputs/tidewater-ingest/.claude/settings.json +22 -0
  29. package/packs/ai-engineering/skills/agent-config-review/examples/inputs/tidewater-ingest/.mcp.json +9 -0
  30. package/packs/ai-engineering/skills/agent-config-review/examples/python-repo-tighten.md +81 -0
  31. package/packs/ai-engineering/skills/agent-config-review/manifest.json +60 -0
  32. package/packs/ai-engineering/skills/agent-config-review/reference.md +205 -0
  33. package/packs/ai-engineering/skills/agent-config-review/scripts/agent_config_scan.py +989 -0
  34. package/packs/ai-engineering/skills/agent-incident-response/SKILL.md +175 -0
  35. package/packs/ai-engineering/skills/agent-incident-response/evals/eval_queries.json +14 -0
  36. package/packs/ai-engineering/skills/agent-incident-response/evals/evals.json +107 -0
  37. package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/agent-session-excerpt.txt +11 -0
  38. package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/ci-build-log.txt +24 -0
  39. package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/incident-notes.md +19 -0
  40. package/packs/ai-engineering/skills/agent-incident-response/evals/files/2/mcp-config.json +20 -0
  41. package/packs/ai-engineering/skills/agent-incident-response/evals/files/2/session-transcript.txt +8 -0
  42. package/packs/ai-engineering/skills/agent-incident-response/evals/files/4/agent-session.log +70 -0
  43. package/packs/ai-engineering/skills/agent-incident-response/evals/files/4/infra/staging-db.tf +25 -0
  44. package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/jobs/nightly-triage/job.yaml +19 -0
  45. package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/jobs/nightly-triage/run.log +13 -0
  46. package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/usage-export-2026-10-20.csv +13 -0
  47. package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/.mcp.json +20 -0
  48. package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/git-log.txt +12 -0
  49. package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/notesync-excerpt.txt +30 -0
  50. package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/notesync.log +15 -0
  51. package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/ssh-config.txt +16 -0
  52. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/.github/workflows/ci.yml +28 -0
  53. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/SECURITY.md +8 -0
  54. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/issue-479.md +35 -0
  55. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/package.json +15 -0
  56. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/pr-482.diff +20 -0
  57. package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/run-log.txt +30 -0
  58. package/packs/ai-engineering/skills/agent-incident-response/examples/injected-issue-comment.md +57 -0
  59. package/packs/ai-engineering/skills/agent-incident-response/manifest.json +55 -0
  60. package/packs/ai-engineering/skills/agent-incident-response/reference.md +152 -0
  61. package/packs/ai-engineering/skills/agent-incident-response/scripts/find_secret_exposure.py +239 -0
  62. package/packs/ai-engineering/skills/agent-incident-response/scripts/usage_split.py +194 -0
  63. package/packs/converters/skills/file-to-markdown/SKILL.md +2 -1
  64. package/packs/converters/skills/file-to-markdown/evals/eval_queries.json +4 -0
  65. package/packs/converters/skills/file-to-markdown/manifest.json +2 -2
  66. package/packs/converters/skills/file-to-markdown/scripts/to_markdown.py +253 -3
  67. package/packs/converters/skills/md-to-confluence/SKILL.md +139 -0
  68. package/packs/converters/skills/md-to-confluence/evals/eval_queries.json +42 -0
  69. package/packs/converters/skills/md-to-confluence/evals/evals.json +89 -0
  70. package/packs/converters/skills/md-to-confluence/evals/files/1/img/latency-dashboard.png +0 -0
  71. package/packs/converters/skills/md-to-confluence/evals/files/1/payments-runbook.md +60 -0
  72. package/packs/converters/skills/md-to-confluence/evals/files/2/deploy-checklist.md +33 -0
  73. package/packs/converters/skills/md-to-confluence/evals/files/3/img/after/screen.png +0 -0
  74. package/packs/converters/skills/md-to-confluence/evals/files/3/img/before/screen.png +0 -0
  75. package/packs/converters/skills/md-to-confluence/evals/files/3/release-notes-4.2.md +49 -0
  76. package/packs/converters/skills/md-to-confluence/evals/files/4/docs/img/topology.png +0 -0
  77. package/packs/converters/skills/md-to-confluence/evals/files/4/docs/ingest-pipeline-design.md +65 -0
  78. package/packs/converters/skills/md-to-confluence/evals/files/5/support/troubleshooting-sso.md +57 -0
  79. package/packs/converters/skills/md-to-confluence/examples/inputs/img/queue-depth.png +0 -0
  80. package/packs/converters/skills/md-to-confluence/examples/inputs/queue-runbook.fixed.md +21 -0
  81. package/packs/converters/skills/md-to-confluence/examples/inputs/queue-runbook.md +21 -0
  82. package/packs/converters/skills/md-to-confluence/examples/queue-runbook.md +57 -0
  83. package/packs/converters/skills/md-to-confluence/manifest.json +52 -0
  84. package/packs/converters/skills/md-to-confluence/reference.md +92 -0
  85. package/packs/converters/skills/md-to-confluence/scripts/md_to_confluence.py +821 -0
  86. package/packs/converters/skills/md-to-pptx/SKILL.md +131 -0
  87. package/packs/converters/skills/md-to-pptx/evals/eval_queries.json +12 -0
  88. package/packs/converters/skills/md-to-pptx/evals/evals.json +84 -0
  89. package/packs/converters/skills/md-to-pptx/evals/files/1/img/defect-burndown.png +0 -0
  90. package/packs/converters/skills/md-to-pptx/evals/files/1/status-report.md +75 -0
  91. package/packs/converters/skills/md-to-pptx/evals/files/3/brand.json +12 -0
  92. package/packs/converters/skills/md-to-pptx/evals/files/3/night-shift-induction.md +53 -0
  93. package/packs/converters/skills/md-to-pptx/evals/files/4/charts/ontime.png +0 -0
  94. package/packs/converters/skills/md-to-pptx/evals/files/4/qbr-q3.md +85 -0
  95. package/packs/converters/skills/md-to-pptx/evals/files/5/vendor-sync-notes.md +28 -0
  96. package/packs/converters/skills/md-to-pptx/examples/support-weekly-input.md +48 -0
  97. package/packs/converters/skills/md-to-pptx/examples/support-weekly.md +75 -0
  98. package/packs/converters/skills/md-to-pptx/examples/tickets-by-week.png +0 -0
  99. package/packs/converters/skills/md-to-pptx/manifest.json +49 -0
  100. package/packs/converters/skills/md-to-pptx/reference.md +139 -0
  101. package/packs/converters/skills/md-to-pptx/scripts/md_to_pptx.py +1841 -0
  102. package/packs/dev-team/loops/modernize/LOOP.md +124 -0
  103. package/packs/dev-team/loops/modernize/evals/eval_queries.json +9 -0
  104. package/packs/dev-team/loops/modernize/evals/evals.json +27 -0
  105. package/packs/dev-team/loops/modernize/loop.json +60 -0
  106. package/packs/dev-team/skills/behaviour-equivalence/SKILL.md +155 -0
  107. package/packs/dev-team/skills/behaviour-equivalence/evals/eval_queries.json +11 -0
  108. package/packs/dev-team/skills/behaviour-equivalence/evals/evals.json +76 -0
  109. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/cases.jsonl +12 -0
  110. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/new.jsonl +12 -0
  111. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/notes.md +15 -0
  112. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/old.jsonl +12 -0
  113. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/old_rerun.jsonl +12 -0
  114. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/pricing_v1.py +45 -0
  115. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/pricing_v2.py +65 -0
  116. package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/rules.json +10 -0
  117. package/packs/dev-team/skills/behaviour-equivalence/evals/files/3/diff-summary.txt +16 -0
  118. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/diff.txt +13 -0
  119. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/fee_calc_py2.py +16 -0
  120. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/fee_calc_py3.py +24 -0
  121. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/input.csv +13 -0
  122. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/new_output.csv +13 -0
  123. package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/old_output.csv +13 -0
  124. package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/TEAM_NOTES.md +19 -0
  125. package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/normalisation.yaml +12 -0
  126. package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/new_run.jsonl +8 -0
  127. package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/old_run1.jsonl +8 -0
  128. package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/old_run2.jsonl +8 -0
  129. package/packs/dev-team/skills/behaviour-equivalence/examples/delivery-date.md +78 -0
  130. package/packs/dev-team/skills/behaviour-equivalence/manifest.json +33 -0
  131. package/packs/dev-team/skills/behaviour-equivalence/reference.md +97 -0
  132. package/packs/dev-team/skills/behaviour-equivalence/scripts/golden_diff.py +524 -0
  133. package/packs/dev-team/skills/behaviour-equivalence/templates/accepted.json +10 -0
  134. package/packs/dev-team/skills/behaviour-equivalence/templates/rules.json +7 -0
  135. package/packs/frontend/pack.json +55 -0
  136. package/packs/frontend/skills/rendering-strategy/SKILL.md +149 -0
  137. package/packs/frontend/skills/rendering-strategy/evals/eval_queries.json +38 -0
  138. package/packs/frontend/skills/rendering-strategy/evals/evals.json +77 -0
  139. package/packs/frontend/skills/rendering-strategy/evals/files/1/fernhill-app.md +40 -0
  140. package/packs/frontend/skills/rendering-strategy/evals/files/3/routes.md +33 -0
  141. package/packs/frontend/skills/rendering-strategy/evals/files/4/build-notes.txt +5 -0
  142. package/packs/frontend/skills/rendering-strategy/evals/files/4/nuxt.config.ts +19 -0
  143. package/packs/frontend/skills/rendering-strategy/evals/files/4/pages/recipes/[slug].vue +37 -0
  144. package/packs/frontend/skills/rendering-strategy/evals/files/4/routes.md +15 -0
  145. package/packs/frontend/skills/rendering-strategy/evals/files/5/routes.txt +18 -0
  146. package/packs/frontend/skills/rendering-strategy/evals/files/5/src/hooks.server.ts +14 -0
  147. package/packs/frontend/skills/rendering-strategy/evals/files/5/src/routes/(marketing)/pricing/+page.server.ts +10 -0
  148. package/packs/frontend/skills/rendering-strategy/evals/files/5/src/routes/+layout.server.ts +10 -0
  149. package/packs/frontend/skills/rendering-strategy/evals/files/5/svelte.config.js +10 -0
  150. package/packs/frontend/skills/rendering-strategy/evals/files/5/traffic.md +18 -0
  151. package/packs/frontend/skills/rendering-strategy/examples/saas-site.md +42 -0
  152. package/packs/frontend/skills/rendering-strategy/manifest.json +50 -0
  153. package/packs/frontend/skills/rendering-strategy/reference.md +116 -0
  154. package/packs/frontend/skills/rendering-strategy/scripts/render_load.py +181 -0
  155. package/packs/frontend/skills/web-performance-review/SKILL.md +106 -0
  156. package/packs/frontend/skills/web-performance-review/evals/eval_queries.json +38 -0
  157. package/packs/frontend/skills/web-performance-review/evals/evals.json +76 -0
  158. package/packs/frontend/skills/web-performance-review/evals/files/1/psi.json +1065 -0
  159. package/packs/frontend/skills/web-performance-review/evals/files/2/after.json +359 -0
  160. package/packs/frontend/skills/web-performance-review/evals/files/2/before.json +375 -0
  161. package/packs/frontend/skills/web-performance-review/evals/files/4/psi-pdp-mobile-2026-10-19.json +171 -0
  162. package/packs/frontend/skills/web-performance-review/evals/files/4/rum-inp-attribution-oct14-19.csv +6 -0
  163. package/packs/frontend/skills/web-performance-review/evals/files/4/rum-inp-daily.csv +15 -0
  164. package/packs/frontend/skills/web-performance-review/evals/files/5/crux-home-phone.json +35 -0
  165. package/packs/frontend/skills/web-performance-review/evals/files/5/lighthouse-home-mobile.json +173 -0
  166. package/packs/frontend/skills/web-performance-review/examples/quayside-article-lhr.json +480 -0
  167. package/packs/frontend/skills/web-performance-review/examples/quayside-article.md +103 -0
  168. package/packs/frontend/skills/web-performance-review/manifest.json +48 -0
  169. package/packs/frontend/skills/web-performance-review/reference.md +105 -0
  170. package/packs/frontend/skills/web-performance-review/scripts/lh_summary.py +743 -0
  171. package/packs/product-manager/skills/lean-canvas/SKILL.md +162 -0
  172. package/packs/product-manager/skills/lean-canvas/evals/eval_queries.json +42 -0
  173. package/packs/product-manager/skills/lean-canvas/evals/evals.json +82 -0
  174. package/packs/product-manager/skills/lean-canvas/evals/files/1/pawpass-notes.md +54 -0
  175. package/packs/product-manager/skills/lean-canvas/evals/files/3/lunchloop-pitch.md +30 -0
  176. package/packs/product-manager/skills/lean-canvas/evals/files/4/clubkit-notes.md +44 -0
  177. package/packs/product-manager/skills/lean-canvas/evals/files/5/cost-model.csv +5 -0
  178. package/packs/product-manager/skills/lean-canvas/evals/files/5/proposal.md +40 -0
  179. package/packs/product-manager/skills/lean-canvas/evals/files/5/stakeholder-emails.txt +18 -0
  180. package/packs/product-manager/skills/lean-canvas/examples/bike-repair.md +72 -0
  181. package/packs/product-manager/skills/lean-canvas/manifest.json +34 -0
  182. package/packs/product-manager/skills/lean-canvas/reference.md +102 -0
  183. package/packs/product-manager/skills/lean-canvas/scripts/unit_economics.py +211 -0
  184. package/packs/solution-architect/skills/api-contract-draft/SKILL.md +2 -2
  185. package/packs/solution-architect/skills/api-contract-draft/manifest.json +28 -6
  186. package/packs/solution-architect/skills/event-contract-draft/SKILL.md +167 -0
  187. package/packs/solution-architect/skills/event-contract-draft/evals/eval_queries.json +38 -0
  188. package/packs/solution-architect/skills/event-contract-draft/evals/evals.json +76 -0
  189. package/packs/solution-architect/skills/event-contract-draft/evals/files/1/order-events-brief.md +45 -0
  190. package/packs/solution-architect/skills/event-contract-draft/evals/files/4/NOTES.md +23 -0
  191. package/packs/solution-architect/skills/event-contract-draft/evals/files/4/schemas/shipment-update.json +40 -0
  192. package/packs/solution-architect/skills/event-contract-draft/evals/files/5/invoice.example.json +25 -0
  193. package/packs/solution-architect/skills/event-contract-draft/examples/order-service.asyncapi.json +246 -0
  194. package/packs/solution-architect/skills/event-contract-draft/examples/order-service.md +92 -0
  195. package/packs/solution-architect/skills/event-contract-draft/manifest.json +25 -0
  196. package/packs/solution-architect/skills/event-contract-draft/reference.md +113 -0
  197. package/packs/solution-architect/skills/event-contract-draft/scripts/check_asyncapi.py +502 -0
  198. package/packs/solution-architect/skills/event-contract-draft/templates/asyncapi-skeleton.json +144 -0
  199. package/packs/sre-oncall/skills/slo-spec/SKILL.md +161 -0
  200. package/packs/sre-oncall/skills/slo-spec/evals/eval_queries.json +38 -0
  201. package/packs/sre-oncall/skills/slo-spec/evals/evals.json +75 -0
  202. package/packs/sre-oncall/skills/slo-spec/evals/files/1/order-service.md +51 -0
  203. package/packs/sre-oncall/skills/slo-spec/evals/files/3/search-slo-status.md +30 -0
  204. package/packs/sre-oncall/skills/slo-spec/evals/files/4/alerts/payments-api.rules.yaml +16 -0
  205. package/packs/sre-oncall/skills/slo-spec/evals/files/4/docs/dependencies.md +8 -0
  206. package/packs/sre-oncall/skills/slo-spec/evals/files/4/metrics/summary-90d.md +51 -0
  207. package/packs/sre-oncall/skills/slo-spec/evals/files/5/ops-notes.md +34 -0
  208. package/packs/sre-oncall/skills/slo-spec/examples/ticket-booking.md +88 -0
  209. package/packs/sre-oncall/skills/slo-spec/manifest.json +34 -0
  210. package/packs/sre-oncall/skills/slo-spec/reference.md +113 -0
  211. package/packs/sre-oncall/skills/slo-spec/scripts/slo_math.py +449 -0
  212. package/packs/sre-oncall/skills/slo-spec/templates/slo-spec.md +35 -0
@@ -0,0 +1,162 @@
1
+ ---
2
+ name: lean-canvas
3
+ description: Turn a startup or internal-product idea into a lean canvas that finds what could kill it — the nine boxes filled only from what the user said, each entry tagged evidence-backed (with its source) or assumption, the assumptions ranked by how likely each is wrong times how badly the idea fails if it is, the cheapest test with a pass/fail line set in advance for the top ones, a computed unit-economics check when price and costs are given, and a plain call when the idea should change before anything is built. Use when the user says "lean canvas", "help me think through my startup idea", "what are the riskiest assumptions", "how do I validate this idea", "is this idea worth building", or "poke holes in my business model".
4
+ ---
5
+
6
+ # lean-canvas
7
+
8
+ The canvas is the vehicle; the product is the assumption work. A filled-in grid tells the
9
+ founder what they already believe. This skill tells them which belief is most likely to sink
10
+ the idea, and the cheapest way to find out this week. For a costed invest/defer decision with
11
+ NPV and options, use `business-case`; for the press release and FAQ of an idea already
12
+ approved, `prfaq`; for market and competitor frameworks, `strategy-analysis`; for measuring a
13
+ feature after it ships, `success-metrics`.
14
+
15
+ ## How to respond
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:** A box with nothing behind it says so. "Unfair advantage: none yet" is a correct entry; an invented moat, channel or metric is a wrong one.
24
+
25
+ 1. **Fill the nine boxes from the input only.** Problem (top 1–3), customer segments with the
26
+ **early adopter** named separately, unique value proposition, solution, channels, revenue
27
+ streams, cost structure, key metrics, unfair advantage. Tag every entry `[evidence: <source
28
+ the user gave>]` or `[assumption]`. A box the user left empty gets `[not stated]`, not a
29
+ filler. Internal products: revenue becomes the budget or saving that funds it, and the
30
+ customer is the team that has to adopt it.
31
+
32
+ 2. **Grade the evidence before trusting it.** Evidence counts for a box only when it comes
33
+ from the stated early adopter and records behaviour, not opinion.
34
+ - ✅ *"7 of the 20 cycle commuters we stopped at the office rack paid for a repair in the last three months"* — behaviour, right segment.
35
+ - ❌ *"12 people from my running club said they'd definitely sign up"* — wrong segment (runners, not cycle commuters) and stated intent. Tag it `[evidence: running-club chat — wrong segment, intent only]` and rate the box as an assumption.
36
+ - A third-party statistic (*"a council survey says 2,000 people cycle to the business district"*) sizes the segment; it doesn't show they feel the problem enough to pay.
37
+ - A lifetime or retention figure is evidence only if the data covers that long and every
38
+ customer. A six-month average from a three-month pilot, or from "the ones who stuck
39
+ with it", is an assumption; the real lifetime is unknown and probably shorter.
40
+
41
+ 3. **Test the claimed unfair advantage.** An unfair advantage can't be copied or bought by a
42
+ funded competitor within a year: insider information, an existing audience or customer
43
+ base, a network effect, a community, exclusive access or contract, a team member's
44
+ authority. A feature, an algorithm, "AI", "first mover", "better UX" or "passion" is not
45
+ one; it moves to Solution or UVP. Write ✅ *"Unfair advantage: none yet. The folding
46
+ repair stand is a feature — any mechanic can buy or copy one. A candidate: exclusive
47
+ access to office car parks, if landlords grant it."* ❌ *"Unfair advantage: our
48
+ proprietary stand design."*
49
+
50
+ 4. **Check every channel against the early adopter.** For each stated channel, ask: do these
51
+ people go there? A channel aimed at a different buyer (a procurement conference for ward
52
+ nurses who buy nothing themselves, Instagram ads for commuters the input says are offline
53
+ all day) is a mismatch. Name it, and say who the channel does reach. If **no** stated channel reaches the early adopter, that is a change-before-building
54
+ finding (step 7).
55
+
56
+ 5. **Compute the unit economics when price and costs are given.** Never estimate. Run:
57
+
58
+ ```bash
59
+ # Claude Code
60
+ python3 "${CLAUDE_SKILL_DIR}/scripts/unit_economics.py" --price 12 --variable-cost 7 --cac 90 --lifetime 6 --fixed 6000
61
+ # Other IDEs (from the skill folder)
62
+ python3 scripts/unit_economics.py --price 12 --variable-cost 7 --cac 90 --lifetime 6 --fixed 6000
63
+ ```
64
+
65
+ Derive inputs from what the user gave and show the derivation (✅ *"CAC $90 = $900 ad
66
+ spend ÷ 10 sign-ups"*). Use one currency and one period throughout. Add `--churn` instead of `--lifetime` when churn is given,
67
+ `--market-customers` when the user sizes the market. The script returns gross margin,
68
+ LTV, CAC payback, LTV:CAC, the most a customer can cost to acquire, break-even customers
69
+ and where the numbers don't close. If no script can run, do the same arithmetic by hand
70
+ and show every line. Price or cost missing → skip this step, list what's missing under
71
+ "To confirm", and write no number the user didn't give.
72
+
73
+ 6. **Rank the assumptions by risk = likelihood wrong × impact if wrong.** Likelihood: high
74
+ (no evidence, wrong-segment evidence, or opinion only), medium (right segment but few
75
+ people or indirect), low (observed behaviour from the right segment). Impact: fatal (the
76
+ idea fails), pivot (a box has to change), tune (a number moves). Score 3/2/1 each and sort.
77
+ The riskiest assumption sits in problem, customer or channel far more often than in
78
+ solution, because a solution can be rebuilt in a sprint while a problem nobody has can't
79
+ be fixed by building. Say in one sentence why the top one beats the others **for this
80
+ idea**. A solution assumption ("can the matching algorithm be accurate?") ranks first only
81
+ when the problem and customer are already backed by behaviour. Ties: the assumption the
82
+ others depend on goes first (a channel test means nothing until the problem holds).
83
+
84
+ 7. **Say plainly when the idea should change before anything is built.** Triggers: no stated
85
+ channel reaches the early adopter; CAC payback is longer than the customer lifetime;
86
+ break-even needs more customers than the stated market holds; the only problem evidence is
87
+ from a different segment. Write one sentence per trigger with what has to change.
88
+ ✅ *"Change before building: each member costs $90 to acquire and returns $30 over six
89
+ months, so every sign-up adds a $60 loss."* Silence on a finding the numbers show is a
90
+ failure. An assumption the user's own numbers already disprove is a finding here, not a
91
+ test to run: a $90 CAC against a $10 ceiling needs a new channel, not more of the old one.
92
+
93
+ 8. **Design the cheapest test that could prove each of the top 1–3 assumptions wrong.**
94
+ Each test names: what to do, the sample, the pass/fail line **set before running**, the
95
+ cost, the time, and what changes if it fails. Use counts, not percentages, for small
96
+ samples. Take thresholds from step 5 where possible (the most a customer can cost to
97
+ acquire is the channel test's fail line). Test menu and interview rules in
98
+ [`reference.md`](reference.md).
99
+ - ✅ *"Stand at two office bike racks for a morning and ask 20 cyclists about the last
100
+ time their bike needed fixing; never pitch. If fewer than 6 paid for a repair in the
101
+ past three months, the problem is wrong. Cost: $0. Time: two mornings."*
102
+ - ✅ *"Put a sign-up sheet with the $12 price and a card form at one rack for a week. Fail
103
+ if fewer than 5 of the cyclists who stop pay the first month."*
104
+ - ❌ *"Validate the market."* ❌ *"Run a survey to gauge interest."* ❌ *"Build an MVP and see."*
105
+
106
+ 9. **Write the reply in this order.** Keep it lean: under about 500 words unless a document
107
+ was asked for, and shorter when the user says "quick" or "short".
108
+ 1. **Riskiest assumption and its test**: two to four lines, first in the reply.
109
+ 2. **Change before building**: one line per trigger from step 7, or omitted when none fired.
110
+ 3. **Canvas**: nine rows, one line each, every entry tagged.
111
+ 4. **Next assumptions and tests**: numbers 2–3, same shape as the first, with the risk score.
112
+ 5. **Unit economics**: the computed lines and the flags, only when step 5 ran.
113
+ 6. **To confirm**: what was missing, once.
114
+
115
+ **Non-interactive runs** (subagent, CI, headless): a missing early adopter, channel or price
116
+ is not asked about; the most defensible reading of the input is used, tagged `[assumption]`,
117
+ and ranked as an assumption to test. No idea at all — no problem and no customer — emits
118
+ `BLOCKED: need the idea: who has the problem and what the problem is`, because a canvas of
119
+ invented boxes tests nothing.
120
+
121
+ ## Useful references in this skill
122
+
123
+ - [`reference.md`](reference.md) — the test menu, how to set a pass/fail line, interview rules, what counts as an unfair advantage, internal-product reading of the boxes
124
+ - [`scripts/unit_economics.py`](scripts/unit_economics.py) — gross margin, LTV, CAC payback, break-even customers and the flags (stdlib only)
125
+ - [`examples/bike-repair.md`](examples/bike-repair.md) — worked example: an on-site bike repair subscription where the payback outruns the lifetime
126
+
127
+ ## Quality bar
128
+
129
+ - **The first lines are the riskiest assumption and its test**, not the canvas.
130
+ - **Every canvas entry carries a tag**, and every `[evidence]` names the source the user gave.
131
+ - **Wrong-segment and opinion-only evidence is downgraded** and said to be.
132
+ - **A feature claimed as an unfair advantage is moved out**, and the box reads "none yet" if nothing else qualifies.
133
+ - **Each channel is checked against the early adopter**, mismatches named.
134
+ - **Unit economics are computed with the derivation shown**, and payback longer than lifetime is flagged.
135
+ - **Each top test has a sample, a pre-set pass/fail line, a cost and a time.**
136
+ - **Nothing is invented**: no market sizes, competitors, prices, churn or channels the user didn't give.
137
+
138
+ ## When to use this skill
139
+
140
+ - ✅ A founder's or intrapreneur's idea in their own words: "is this worth building?"
141
+ - ✅ "Fill in a lean canvas for…" or "what are my riskiest assumptions?"
142
+ - ✅ Planning what to test before writing code or asking for budget
143
+ - ✅ An internal tool pitch where adoption by another team is the real bet
144
+
145
+ ## When NOT to use this skill
146
+
147
+ - ❌ An investment case with options, NPV, payback ranges and a sponsor — `business-case`
148
+ - ❌ The press release and FAQ for an idea that is already approved — `prfaq`
149
+ - ❌ Market attractiveness, competitors, SWOT or Five Forces — `strategy-analysis`
150
+ - ❌ How to measure a feature that has shipped or is about to — `success-metrics`
151
+ - ❌ Turning interview notes or tickets already collected into themes — `feedback-synthesis`
152
+
153
+ ## Anti-patterns to avoid
154
+
155
+ - ❌ **The tidy grid.** Nine confident boxes and no ranking: the founder learns nothing they didn't write.
156
+ - ❌ **Accepting the moat.** "Our AI" as unfair advantage. Funded competitors copy features.
157
+ - ❌ **Counting "they'd use it" as evidence.** Opinion about the future is the weakest signal there is.
158
+ - ❌ **Estimating the economics.** "Margins look healthy" when a $90 CAC against $30 of lifetime margin loses money on every customer.
159
+ - ❌ **Riskiest assumption = will the tech work.** The usual killer is that the people can't be reached or don't care enough to pay.
160
+ - ❌ **Tests with no fail line.** "Talk to some customers" can't fail, so it can't teach.
161
+ - ❌ **Inventing a channel or a market size** to make a box look complete.
162
+ - ❌ **Burying "change this first"** under the canvas, or leaving it out to be encouraging.
@@ -0,0 +1,42 @@
1
+ [
2
+ {
3
+ "query": "Fill in a lean canvas for my idea: a subscription app that plans weekly meals for parents of kids with food allergies",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "What are the riskiest assumptions in my startup idea, and how do I test them before I write any code?",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "Poke holes in my business model — $49/month, we pay about $300 to get each customer, they stay around five months",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "I want to pitch an internal tool to the ops leadership team. Is it worth building, and what should I validate first?",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "How do I validate this idea cheaply this month? It's a marketplace for renting camping gear between neighbours",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "Write the business case for the new routing platform with build, buy and do-nothing options and NPV for the steering committee",
24
+ "should_trigger": false
25
+ },
26
+ {
27
+ "query": "The exec team approved the idea — write the press release and FAQ working backwards from launch",
28
+ "should_trigger": false
29
+ },
30
+ {
31
+ "query": "Run a Five Forces analysis on the meal-kit market before we decide whether to enter",
32
+ "should_trigger": false
33
+ },
34
+ {
35
+ "query": "What should we measure to know whether the new onboarding checklist worked after it ships?",
36
+ "should_trigger": false
37
+ },
38
+ {
39
+ "query": "Here are 30 customer interview notes — find the themes and what we should fix first",
40
+ "should_trigger": false
41
+ }
42
+ ]
@@ -0,0 +1,82 @@
1
+ {
2
+ "skill_name": "lean-canvas",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Can you do a lean canvas for my startup? My notes are in pawpass-notes.md. Accelerator application is due Friday and I want to know what the weak spots are before they find them.",
7
+ "files": [
8
+ "evals/files/1/pawpass-notes.md"
9
+ ],
10
+ "assertions": [
11
+ "The reply opens with the single riskiest assumption and a test for it, before the canvas, and the riskiest assumption is about the problem, the customer or the channel rather than the no-show predictor's accuracy",
12
+ "Says the AI no-show predictor is a feature, not an unfair advantage, and the unfair-advantage box reads none yet (or equivalent) rather than a substitute moat",
13
+ "Flags that LinkedIn ads and PetTech Expo don't reach solo mobile groomers, who the notes say aren't big on social media and that the expo draws chains and franchise buyers",
14
+ "Computes CAC as $1,200 / 3 = $400, contribution as $29 - $6 = $23 a month, CAC payback of about 17.4 months, and lifetime margin of $23 x 9 = $207, and says payback is longer than the 9-month lifetime so each customer loses money",
15
+ "Downgrades the six salon-groomer interviews as evidence from the wrong segment (salon, not mobile) and stated intent rather than behaviour",
16
+ "Says plainly that the idea should change before building (channel and/or economics), not only lists risks",
17
+ "Each top test names what to do, a sample, a pass/fail threshold set in advance, a cost and a time; no test is 'validate the market' or 'run a survey'",
18
+ "Does not invent competitors, market sizes, churn figures, channels presented as facts, or prices not in the notes; every canvas entry is tagged evidence (with source) or assumption"
19
+ ]
20
+ },
21
+ {
22
+ "id": 2,
23
+ "prompt": "Quick one. I'm a product lead at Brackenridge Health (regional hospital group). Idea: an internal app where ward nurses swap shifts with each other directly instead of emailing the rostering office. Rostering says they handle about 150 swap emails a week. Every swap still needs the ward manager to sign off. Nurses would hear about it from the staff intranet news page and a poster in the canteen. Our unfair advantage is we own the rostering data, so no vendor can integrate as cleanly. No budget numbers yet. Lean canvas plus what I should test first? Keep it short.",
24
+ "assertions": [
25
+ "Opens with the riskiest assumption and its test, and the riskiest is about adoption by nurses or ward-manager sign-off, not whether the app can be built",
26
+ "Notes the 150 emails a week measures the rostering office's workload, not that nurses find swapping painful or will change how they swap",
27
+ "Treats ward managers as a second customer whose sign-off behaviour can block the idea",
28
+ "Accepts ownership of rostering data as a real advantage for an internal product over vendors, while saying it does not show nurses will adopt the app",
29
+ "Reads revenue streams for an internal product as the budget or saving that funds it, and does not invent a price, budget or cost figure; unit economics are skipped and the missing numbers are listed to confirm",
30
+ "The test has a sample, a pass/fail line set before it runs, a cost and a time (for example a manual or concierge swap run on one ward with a stated count)",
31
+ "Stays short as asked: no more than about 350 words, with the canvas as one line per box"
32
+ ]
33
+ },
34
+ {
35
+ "id": 3,
36
+ "prompt": "Here are my pitch notes for LunchLoop (lunchloop-pitch.md). Is this worth quitting my job for? What should I test before building the app?",
37
+ "files": [
38
+ "evals/files/3/lunchloop-pitch.md"
39
+ ],
40
+ "assertions": [
41
+ "Answers the quit-and-build question in the first lines, and says the idea should change (or be tested) before building the full app",
42
+ "Computes per-customer monthly revenue as 8 x 15% x $12 = $14.40, delivery cost as 8 x $1.10 = $8.80, contribution of $5.60 a month, and break-even of about 1,608 active customers from $9,000 fixed costs",
43
+ "Flags that break-even (about 1,608 customers) exceeds the founder's own estimate of 1,200 workers who would use it, so the model cannot cover the salary in this town at these numbers",
44
+ "Computes CAC as $500 / 20 = $25 and lifetime margin as $5.60 x 6 = $33.60, and does not claim CAC payback is longer than lifetime (payback is about 4.5 months, inside 6)",
45
+ "Notes the 8 lunches a month and 6-month stay come only from customers who stuck with it, in a 3-month pilot, so lifetime and order frequency are overstated or unproven",
46
+ "Says 'everyone who eats lunch at work' is not an early adopter and names the need for a narrower one",
47
+ "Moves 'our food is better than any chain' out of unfair advantage (it is a value proposition) and leaves unfair advantage as none yet or a candidate grounded in the notes",
48
+ "Does not invent food-safety rules, competitor names, delivery partners or numbers not in the notes; anything assumed is tagged as an assumption"
49
+ ]
50
+ },
51
+ {
52
+ "id": 4,
53
+ "held_out": "2026-10-20",
54
+ "prompt": "ok so I've been sitting on this idea for months and I think it's time. my notes are in clubkit-notes.md (sorry they're a mess). can you do the lean canvas thing on it and tell me straight — is this worth quitting my job for? be honest, my mates all say it's a great idea",
55
+ "assertions": [
56
+ "Answers the actual question directly and early: gives a plain verdict on whether to quit the job now (a good answer says not yet / not on this evidence, and names what would have to be true first) rather than burying it under the canvas.",
57
+ "Flags that the survey is weak evidence of willingness to pay because the club is the payer but only 4 of the 31 respondents were committee members, and only 1 of those 4 said yes to £15/month; it does not present '23 of 31 (74%) would use it' or '9 said yes' as demand from buyers.",
58
+ "Computes unit economics from the notes correctly: variable cost £3.80 per club per month (£1.20 hosting + £2.30 SMS + £0.30 payment fee), contribution £11.20, CAC £150 (£300 / 2 paid clubs), and with the guessed 5% monthly churn a lifetime value of about £224, giving an LTV:CAC of roughly 1.5 and a payback of about 13 months; it notes CAC rests on just 2 conversions.",
59
+ "Catches that the '400 clubs x £15 = £6,000/month' quit plan confuses revenue with take-home: at 400 clubs contribution is £4,480/month, and at 5% churn replacing about 20 clubs a month at £150 CAC costs about £3,000/month, leaving roughly £1,480 — well short of the £3,500 needed.",
60
+ "Tags the 5% churn figure as an assumption (the founder says it is a guess) and raises the June-August shutdown as a specific risk to a monthly subscription (seasonal cancellations), ranking churn/seasonality among the riskiest assumptions.",
61
+ "Ranks the riskiest assumptions explicitly (e.g. club committees will pay £15/month; clubs will switch from or add to the free TeamHuddle app; churn), and for the top ones proposes a cheap test with a pass/fail threshold stated before the test runs (e.g. a set number of committee members pre-paying or committing out of a stated number approached).",
62
+ "Fills the canvas only from the notes: entries such as the Ferncross Rovers secretary experience, the 17 'chasing subs' mentions, the ads test and the ~1,200 Westmarch County FA clubs are tagged as evidence with their source, while price, churn and the 'clubs will pay for subs' belief are tagged as assumptions.",
63
+ "Invents nothing not in the notes: no made-up competitors beyond TeamHuddle, no market-size, conversion or churn benchmarks presented as fact, no extra survey figures, and any missing box (e.g. unfair advantage or channels beyond Facebook ads) is marked as a gap or open question rather than filled with invented content."
64
+ ]
65
+ },
66
+ {
67
+ "id": 5,
68
+ "held_out": "2026-10-20",
69
+ "prompt": "We're taking ClaimLens to the investment committee on Thursday. The proposal, cost model and the stakeholder emails are in this folder (proposal.md, cost-model.csv, stakeholder-emails.txt). The committee chair has told us she wants to see that we've stress-tested the idea, not just pitched it. Can you build a lean canvas for it and set out our riskiest assumptions and how we'd test them? Keep it to something we could put in an appendix.",
70
+ "assertions": [
71
+ "Catches that the proposal's break-even of 163 seats omits the product support cost in cost-model.csv: running costs are £6,500 + £2,500/month (0.5 FTE, £30,000/year) = £9,000/month, so break-even at £40/seat is 225 seats, and it states this correction plainly rather than repeating the 163 figure.",
72
+ "Points out that 225 seats exceeds the total potential seats across all three departments (120 + 60 + 35 = 215, which would bring in £8,600/month, about £400 short), so even full adoption does not cover running costs and the £180,000 build is never paid back at the current chargeback price.",
73
+ "Reads the stakeholder emails and corrects the 'confirmed interest' label: Underwriting only agreed to see a demo, and Complaints said its budget is locked until April and nothing can be charged this financial year; it treats neither as committed demand.",
74
+ "Flags the pilot usage drop (weekly active users fell from 22 of 25 in week 1 to 11 of 25 in week 6) as evidence against sustained adoption, and treats the 18-minutes-saved figure as weak evidence because it is self-reported by only 3 handlers.",
75
+ "Ranks the riskiest assumptions, with the economics/price-versus-cost gap and sustained handler usage near the top, and for each top assumption gives a cheap test with a pass/fail line set in advance (e.g. a signed chargeback commitment from the Claims head for a stated number of seats, or a measured time study with a stated minutes-saved threshold) — none of which requires spending the £180,000 first.",
76
+ "Makes a plain call that the proposal should change before the committee approves the build (e.g. reprice, cut run cost, re-scope, or ask for a smaller staged amount gated on the tests) rather than presenting the current ask as sound.",
77
+ "Fits the request for an appendix: a compact canvas plus a ranked assumptions/test table, with each canvas entry tagged evidence (citing proposal.md, cost-model.csv or stakeholder-emails.txt) or assumption, not a long essay.",
78
+ "Invents nothing not in the files: no new costs, salaries, seat counts, departments, usage figures, people or vendor names, and no outside benchmarks presented as fact; anything the files do not cover is marked as unknown."
79
+ ]
80
+ }
81
+ ]
82
+ }
@@ -0,0 +1,54 @@
1
+ # PawPass — my notes (Dana Okafor, co-founder)
2
+
3
+ Okay, braindump before the accelerator application is due.
4
+
5
+ ## The idea
6
+
7
+ PawPass is an app for **mobile dog groomers** — the ones who work out of a converted van
8
+ and drive to the customer's house. It sends SMS reminders, takes a card deposit when the
9
+ appointment is booked, and rebooks the slot from a waitlist if someone cancels.
10
+
11
+ ## Why
12
+
13
+ No-shows are killing groomers. My sister runs a grooming salon in town and I spent a
14
+ Saturday there and talked to the 6 groomers who work for her. All 6 said no-shows are
15
+ "really annoying" and 4 of them said they'd "definitely use an app for it". A report I read
16
+ from the Pet Care Trade Association says no-shows cost grooming businesses about 10% of
17
+ revenue.
18
+
19
+ Mobile groomers have it worse, I think, because they've already driven there when the
20
+ customer isn't home.
21
+
22
+ ## Who
23
+
24
+ Early adopters: solo mobile groomers, one van, doing 4–6 dogs a day. They live on their
25
+ phones between jobs. Most of them are not big on social media and don't use any booking
26
+ software today — paper diary or their phone's calendar.
27
+
28
+ Later: grooming salons, then vets.
29
+
30
+ ## How we'll get customers
31
+
32
+ - LinkedIn ads targeting "pet care business owners"
33
+ - A booth at PetTech Expo in March (the big pet-industry technology show — mostly chains and
34
+ franchise buyers go, but it's where the industry is)
35
+ - Referral credit: one free month for each groomer you refer
36
+
37
+ ## Money
38
+
39
+ - Price: $29 a month per groomer.
40
+ - Our costs per groomer: SMS and card processing come to about $6 a month.
41
+ - Fixed costs: hosting $300 a month plus our contract developer at $4,000 a month. Neither of
42
+ us founders takes a salary yet.
43
+ - We ran a test LinkedIn campaign last month: spent $1,200 and got 3 paying sign-ups.
44
+ - From our 20 beta groomers, people stay about 9 months on average before they quit
45
+ (we looked at a similar app's public numbers and it matched).
46
+
47
+ ## Unfair advantage
48
+
49
+ Our AI no-show predictor. It looks at past bookings and flags the customers likely to
50
+ not show, so the groomer can ask for a bigger deposit. Nobody else has this.
51
+
52
+ ## Goal
53
+
54
+ 300 paying groomers by the end of next year.
@@ -0,0 +1,30 @@
1
+ # LunchLoop — pitch notes (Marco Quill)
2
+
3
+ **One line:** home cooks in Fernbrook sell freshly made lunches to office workers, ordered by
4
+ 11am and delivered by 12:30.
5
+
6
+ **Problem:** Office lunch in Fernbrook is the same three sandwich chains. People are bored and
7
+ it's expensive.
8
+
9
+ **Customers:** Everyone who eats lunch at work. Also the home cooks, who want extra income
10
+ from their own kitchens.
11
+
12
+ **What we've done so far:**
13
+ - 14 home cooks signed up after a post in the Fernbrook community Facebook group.
14
+ - 3-month pilot in two office buildings. We spent $500 on flyers and lobby tastings and ended
15
+ up with 20 regular customers. The ones who stuck with it ordered about 8 lunches a month
16
+ each and stayed about 6 months on average (some started before the pilot via
17
+ word of mouth).
18
+
19
+ **Money:**
20
+ - A lunch sells for $12. We keep 15% as our fee; the cook gets the rest.
21
+ - Delivery costs us $1.10 per order (bike couriers).
22
+ - Fixed costs: my salary $7,000 a month plus software and insurance $2,000 a month.
23
+
24
+ **Market:** There are about 40 office buildings in Fernbrook. I reckon around 1,200 office
25
+ workers in total would use something like this.
26
+
27
+ **Unfair advantage:** Our cooks' food is better than any chain. Once people taste it they
28
+ don't go back.
29
+
30
+ **Ask:** I want to quit my job and build the full app this winter.
@@ -0,0 +1,44 @@
1
+ # ClubKit — notes (messy, sorry)
2
+
3
+ ## the idea
4
+ app for grassroots football clubs. subs collection, match-day availability ("who's playing sat?"),
5
+ kit orders, reminders by text. one place instead of 4 whatsapp groups + a spreadsheet + chasing
6
+ people for £5 in the car park.
7
+
8
+ charge the CLUB, not the players. monthly subscription.
9
+
10
+ ## why me
11
+ - I've been club secretary at Ferncross Rovers for 6 yrs. I do all of this by hand. it's awful.
12
+ - I can build it (I'm a backend dev by day)
13
+
14
+ ## survey (did it in Sept)
15
+ posted a google form in the Westmarch Sunday League whatsapp group. 31 responses.
16
+ - who answered: 19 players, 8 parents, 4 committee members (secretaries / treasurers)
17
+ - "would you use an app like this?" -> 23 of 31 said yes (74%!!)
18
+ - "would your club pay £15/month for it?" -> 9 said yes, 14 maybe, 8 no
19
+ - of the 4 committee people: 1 yes, 2 maybe, 1 no
20
+ - most common complaint: chasing subs (17 mentions)
21
+
22
+ ## pricing guesses
23
+ - £15/month per club. felt right. TeamHuddle (the free app loads of clubs already use for
24
+ availability) doesn't do subs properly, so I think clubs will pay for that bit.
25
+ - maybe £120/year option later
26
+
27
+ ## costs per club per month (my estimates)
28
+ - hosting: £1.20
29
+ - SMS reminders: £2.30 (assumes ~50 texts/club/month)
30
+ - payment processing: 2% of the subscription
31
+
32
+ ## ads test (Oct)
33
+ - spent £300 on facebook ads targeting club admins in Westmarch county
34
+ - 6 clubs signed up for the free 30-day trial
35
+ - 2 of them converted to paid at £15/month (as of last week)
36
+
37
+ ## churn
38
+ no idea really. guessing 5% a month? that's what I read is normal for small SaaS.
39
+ NB most clubs basically shut down June-August (no fixtures)
40
+
41
+ ## the dream
42
+ - there are ~1,200 grassroots clubs registered with Westmarch County FA
43
+ - 400 clubs x £15 = £6,000/month. I need about £3,500/month take-home to quit my job.
44
+ - so 400 clubs and I'm out!!
@@ -0,0 +1,5 @@
1
+ item,type,amount_gbp,period,notes
2
+ Build (contractor team),one-off,180000,once,5 months to production
3
+ Cloud hosting,run,2500,month,fixed
4
+ Model API usage,run,4000,month,platform minimum commitment; covers up to 300 seats
5
+ Product support (0.5 FTE),people,30000,year,half of one analyst salary; from go-live
@@ -0,0 +1,40 @@
1
+ # ClaimLens — Investment Committee proposal (DRAFT v3)
2
+
3
+ Harbourline Insurance — Innovation Lab
4
+ Sponsor: Priya Okafor (Head of Innovation)
5
+
6
+ ## Summary
7
+ ClaimLens reads a claim file (forms, adjuster notes, photo captions, correspondence) and produces
8
+ a one-page summary with flagged inconsistencies for the handler. We propose to roll it out as an
9
+ internal product, funded by chargeback to the departments that use it.
10
+
11
+ ## Problem
12
+ Claims handlers spend a large share of their day reading long files before they can act.
13
+ Handlers in the pilot said this is the most tedious part of the job.
14
+
15
+ ## Pilot results (Claims, 25 seats, 6 weeks)
16
+ - Weekly active users: week 1 = 22 of 25; week 6 = 11 of 25
17
+ - Time saved: average 18 minutes per claim file (self-reported by 3 handlers in a feedback session)
18
+ - Satisfaction: "really useful when it works" (feedback session quote)
19
+
20
+ ## Target departments
21
+ | Department | Staff (potential seats) | Status |
22
+ |---------------|-------------------------|---------------------------|
23
+ | Claims | 120 | Pilot running |
24
+ | Underwriting | 60 | Confirmed interest |
25
+ | Complaints | 35 | Confirmed interest |
26
+
27
+ See stakeholder-emails.txt for the interest from Underwriting and Complaints.
28
+
29
+ ## Pricing (internal chargeback)
30
+ £40 per seat per month, billed quarterly to the department cost centre.
31
+
32
+ ## Financials
33
+ See cost-model.csv.
34
+ Running costs are £6,500/month, so **we break even on running costs at 163 seats**
35
+ (£6,500 / £40 = 162.5). With Claims alone at 120 seats plus either other department we are
36
+ comfortably past break-even.
37
+
38
+ ## Ask
39
+ Approve £180,000 build budget (contractor team, 5 months) to take ClaimLens from pilot to
40
+ production for all three departments.
@@ -0,0 +1,18 @@
1
+ From: Dan Whitlow (Head of Underwriting Operations)
2
+ To: Priya Okafor
3
+ Subject: RE: ClaimLens
4
+ Date: 2026-09-29
5
+
6
+ Hi Priya — sounds interesting. Happy to see a demo when it's ready and we can take it from there.
7
+ Dan
8
+
9
+ ----------------------------------------------------------------
10
+
11
+ From: Mei Lindqvist (Complaints Manager)
12
+ To: Priya Okafor
13
+ Subject: RE: ClaimLens — interest for Complaints?
14
+ Date: 2026-10-06
15
+
16
+ Priya, the team would love something like this. Honestly though, our budget is locked until
17
+ April, so nothing new can be charged to us this financial year. Let's talk again in the spring.
18
+ Mei
@@ -0,0 +1,72 @@
1
+ # Example: on-site bike repair subscription
2
+
3
+ ## Input
4
+
5
+ > Lean canvas for my idea please. SpokeStop: a mechanic with a folding repair stand visits
6
+ > office bike racks once a week, and members get unlimited tune-ups and puncture fixes for
7
+ > $12 a month. People who cycle to work hate losing an evening to the bike shop. Early
8
+ > adopters: daily cycle commuters at offices with 500+ staff in the business district — the
9
+ > council's travel survey says about 2,000 people cycle in daily. 12 people at my running
10
+ > club said they'd definitely sign up. Channels: Instagram ads, and a stall at the city
11
+ > cycling festival in June. Our test Instagram campaign cost $900 and got 10 paying sign-ups.
12
+ > Mechanic time and parts work out at $7 per member per month. Fixed costs are a van lease
13
+ > and insurance at $6,000 a month. Members will probably drop off in winter, so I'd guess
14
+ > six months average. Unfair advantage: my folding stand design, nobody else has one.
15
+
16
+ ## Output
17
+
18
+ **Riskiest assumption: that commuters need repairs often enough to keep paying $12 every
19
+ month.** It scores 9 (likely wrong × fatal). The 10 Instagram sign-ups show people will try
20
+ it, not that they stay; the six-month lifetime is a guess; and the economics below lose money
21
+ on every member, so how often the problem bites is what decides the model. A better stand
22
+ changes none of that, which is why the solution isn't the risk here.
23
+
24
+ Test it this week: stand at two office bike racks for a morning each and ask 20 cyclists
25
+ about the last time their bike needed fixing; don't pitch. **Fail if fewer than 6 paid for a
26
+ repair in the past three months.** Cost: $0. Time: two mornings. If it fails, the offer moves
27
+ from a subscription to pay-per-fix.
28
+
29
+ **Change before building:**
30
+ - Each member costs $90 to acquire and returns $30 of margin over six months: every sign-up
31
+ adds a $60 loss, so growth deepens it.
32
+ - Break-even needs 1,200 members at once, 60% of the 2,000 daily cyclists the survey counts.
33
+
34
+ **Canvas**
35
+
36
+ | Box | Entry | Tag |
37
+ |---|---|---|
38
+ | Problem | Losing an evening to the bike shop for routine repairs; how often it happens is unknown | `[assumption]` |
39
+ | Customer segments | Daily cycle commuters in the business district; early adopter: those at offices with 500+ staff | `[evidence: council survey, ~2,000 daily]` for the size; `[assumption]` that they feel the problem |
40
+ | UVP | Your bike fixed at the office rack while you work | `[assumption]` |
41
+ | Solution | Weekly mechanic visit with a folding stand; unlimited tune-ups and puncture fixes | `[evidence: founder's design]` |
42
+ | Channels | Instagram ads; stall at the June cycling festival | `[evidence: $900 test → 10 sign-ups]` for Instagram; festival `[assumption]` and reaches leisure riders, not only commuters |
43
+ | Revenue streams | $12 a month per member | `[evidence: stated price]` |
44
+ | Cost structure | $7 per member per month; $6,000 a month fixed; $90 to acquire a member | `[evidence: founder's figures]`; CAC derived as $900 ÷ 10 |
45
+ | Key metrics | `[not stated]` — paid members and months retained are the two that test the model | `[assumption]` |
46
+ | Unfair advantage | None yet. The folding stand is a feature any mechanic can buy or copy. A candidate: exclusive access agreements with office landlords, if they would sign them | — |
47
+
48
+ The running-club interest is from the wrong segment (runners, not cycle commuters) and is
49
+ stated intent, so the problem box stays an assumption.
50
+
51
+ **Next assumptions**
52
+
53
+ 2. **Members stay six months** (score 6: likely wrong — a guess with winter churn named —
54
+ × pivot). Test: a concierge month for the 10 Instagram sign-ups, then count who renews.
55
+ Fail if fewer than 7 of 10 renew for month two. Cost: one mechanic day a week. Time: five
56
+ weeks.
57
+ 3. **Instagram reaches commuters at $10 or less per paying member** (score 6). $10 is a
58
+ third of lifetime margin, the most a member can cost if the fixed costs are to be covered.
59
+ Test: $200 on ads targeted to the business district. Fail above $10 per paying sign-up.
60
+ Time: one week. Today's $90 is nine times over it.
61
+
62
+ **Unit economics** (computed)
63
+ - Contribution: $12 − $7 = $5 a member a month (41.7% gross margin)
64
+ - Lifetime margin: $5 × 6 = $30; LTV:CAC 0.33
65
+ - CAC payback: $90 ÷ $5 = 18 months, three times the six-month lifetime
66
+ - Break-even: $6,000 ÷ $5 = 1,200 active members
67
+ - Most a member can cost to acquire: $30 at break-even, $10 at 3:1
68
+
69
+ **To confirm:** how the six-month lifetime was arrived at; whether the 10 Instagram
70
+ sign-ups were commuters; whether office landlords allow a mechanic at the racks.
71
+
72
+ Next step: run the two rack mornings before ordering anything for the van.
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "lean-canvas",
3
+ "version": "0.1.0",
4
+ "description": "Turn a startup or internal-product idea into a lean canvas that finds what could kill it — the nine boxes filled only from what the user said, each entry tagged evidence-backed (with its source) or assumption, the assumptions ranked by how likely each is wrong times how badly the idea fails if it is, the cheapest test with a pass/fail line set in advance for the top ones, a computed unit-economics check when price and costs are given, and a plain call when the idea should change before anything is built. Use when the user says \"lean canvas\", \"help me think through my startup idea\", \"what are the riskiest assumptions\", \"how do I validate this idea\", \"is this idea worth building\", or \"poke holes in my business model\".",
5
+ "entrypoint": "SKILL.md",
6
+ "deps": { "npm": [], "pip": [] },
7
+ "env": { "required": [], "optional": [] },
8
+ "related": ["business-case", "feedback-synthesis", "prfaq", "strategy-analysis", "success-metrics"],
9
+ "handoff": [
10
+ {
11
+ "to": "feedback-synthesis",
12
+ "when": "the problem interviews from the top test have been run and the notes are in",
13
+ "purpose": "Count how many distinct interviewees raised the problem unprompted, against the pass/fail line set before the test.",
14
+ "fallback": "If feedback-synthesis is absent, count distinct interviewees who described a recent instance before the problem was named, compare the count with the pre-set line, and say which canvas box changes."
15
+ },
16
+ {
17
+ "to": "business-case",
18
+ "when": "the riskiest assumptions have passed their tests and the idea needs money or headcount approved",
19
+ "purpose": "Turn the tested canvas into a costed invest/defer decision with do-nothing as the baseline.",
20
+ "fallback": "If business-case is absent, state the ask, the cost, the tested assumptions and the one that would flip the decision in five lines."
21
+ }
22
+ ],
23
+ "tags": ["lean-canvas", "startup", "assumptions", "validation", "unit-economics"],
24
+ "permissions": {
25
+ "network": [],
26
+ "commands": [],
27
+ "files": "named-paths",
28
+ "notes": "The script reads numbers from flags, a JSON file the user names, or stdin, and writes only to an -o path the user names."
29
+ },
30
+ "model": {
31
+ "tier": "standard",
32
+ "rationale": "Filling the canvas is structured; the value is in ranking assumptions by risk and naming the cheapest test that could kill the riskiest one."
33
+ }
34
+ }