skilldrop-cli 0.16.34 → 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 +3 -2
  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 +340 -7
  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,131 @@
1
+ ---
2
+ name: md-to-pptx
3
+ description: Turn an existing Markdown document (a status report, runbook, review or notes) into a PowerPoint deck (.pptx) that opens without a repair prompt, with nothing to install. Each heading becomes a slide, lists keep their nesting, tables become real PowerPoint tables, images are embedded, and comments become speaker notes. A section too long for one slide is split onto "continued" slides instead of shrinking the text, and the reply names every split, everything dropped, and any speaker note that would go out with the file. Use when the user says "turn this markdown into slides", "make this report a PowerPoint", "convert the .md to pptx", "I need this as a deck for Thursday", or "export these notes to PowerPoint".
4
+ ---
5
+
6
+ # md-to-pptx
7
+
8
+ This skill turns a Markdown document into a `.pptx` mechanically: the headings decide the
9
+ slides and the words stay the user's own. A stdlib Python script writes the PowerPoint file,
10
+ checks it, and prints an outline of the slides. The agent's job is the part around it: get the
11
+ Markdown into a shape that converts well, run the script, read what it reports, and tell the
12
+ user what changed. Designing a persuasive deck is `deck-builder`; planning what slides should
13
+ say is `slide-outliner`.
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:** Convert, don't redesign. Each `##` section becomes one slide, or more when it splits, in the document's own words. Never add an agenda, summary, "Key takeaways" or "Questions?" slide, and never reword bullets to make them punchier. If the user wants that, the job is designing a deck, not converting one.
24
+
25
+ 1. **Get the Markdown, and nothing else.** A path, or text pasted in the chat. Save pasted text to
26
+ a `.md` file next to any images it uses. Don't ask about brand or slide size: 16:9 and the
27
+ built-in look are the defaults, and a `brand.json` (fonts and colours, the same file the Word
28
+ converter reads, often made with `brand-kit`) is used when the user names one.
29
+
30
+ 2. **Fix a copy so it converts well. Change formatting only, and list each change.**
31
+ - **Slide headings.** `#` is the title slide, each `##` starts a slide and `###` is a bold line
32
+ on it. A bold line used as a heading becomes `##`: ✅ `## Risks`, ❌ `**Risks**` (that stays a
33
+ paragraph, and the slide never starts).
34
+ - **Speaker notes are `<!-- notes: ... -->`**, the only form the converter reads. A
35
+ `Notes:` paragraph stays on the slide as text. Convert those paragraphs into comments only
36
+ when the user said they are speaker notes ("the Notes: bits are what I'll say").
37
+ - **What doesn't convert:** rewrite an HTML table as a pipe table, fold a footnote's text into
38
+ its sentence, and render a Mermaid block to PNG with `mermaid-render` (PNG output needs
39
+ mermaid-cli), then embed it as an image. Remote images are not fetched. Ask for a local copy,
40
+ or leave the alt text and say so.
41
+ - **Facts are untouched.** Same numbers, names, dates and order. Don't renumber a list that
42
+ skips a number. Report it (step 4).
43
+ - **Check the document against itself** while it's open: a count in a bullet against the rows
44
+ of its table, a total against its parts. ✅ *"Slide 2 says 9 of 12 depots surveyed; the
45
+ table on slide 3 marks 10 as Done. Left both as written."* ❌ Quietly changing 9 to 10. A
46
+ slide deck puts both figures in front of the room at once.
47
+
48
+ 3. **Convert.**
49
+
50
+ ```bash
51
+ # Claude Code
52
+ python3 "${CLAUDE_SKILL_DIR}/scripts/md_to_pptx.py" report.md -o report.pptx --brand ./brand/brand.json
53
+ # Other IDEs (from the skill folder)
54
+ python3 scripts/md_to_pptx.py report.md -o report.pptx --brand ./brand/brand.json
55
+ ```
56
+
57
+ Options: `--aspect 4:3` for older projectors; `--title "..."` replaces the title slide text.
58
+
59
+ 4. **Read every `WARN` line and act on it.** Each names a source line. Fix what is yours to fix
60
+ (a missing image path, an HTML block) and rerun. Report the rest in plain words. Three need
61
+ judgment:
62
+ - **A split** (`did not fit on one slide; split into N slides`) is reported, never hidden.
63
+ The text stays at full size. When a section runs to three slides or more, say so: it reads
64
+ as a document page, and the user may want to cut it.
65
+ - **A numbering jump** (`goes from 7 to 9`): PowerPoint numbers items in order, so "step 9"
66
+ in the text now points at a different step. Name the missing number and the reference.
67
+ - **A dropped construct** (footnote, HTML, remote image): say what was lost and where.
68
+
69
+ 5. **Read every speaker note before handing over.** The outline marks slides with `[notes]`.
70
+ Notes are invisible in the Markdown but travel inside the `.pptx`. Anyone it is emailed to
71
+ can read them. When a note reads as internal (*"don't raise the penalty clause"*, prices,
72
+ people, legal), name the slide and quote the note in the reply. Leave the note in place.
73
+ Deleting it is the user's call.
74
+
75
+ 6. **Check it, and claim only the checks that ran.** The script reopens the file and prints
76
+ `checked: N XML parts parse, N relationships resolve`. Compare the slide outline it prints
77
+ with the document's headings. Say it opened in PowerPoint, Keynote or LibreOffice only if it
78
+ did.
79
+
80
+ 7. **Reply in four lines or fewer:** where the file is and how many slides; what split and where
81
+ (*"Risks continues on slide 6, from the scanner risk"*); what was dropped, changed or doesn't
82
+ add up; any note to look at before sending. Example in
83
+ [`examples/support-weekly.md`](examples/support-weekly.md).
84
+
85
+ **Non-interactive runs** (subagent, CI, headless): with no Markdown there is nothing to convert.
86
+ Emit `BLOCKED: need the Markdown file or text to convert`, write nothing, and say in a sentence
87
+ what the deck will contain once it arrives. A missing brand or aspect uses the defaults, and
88
+ treating `Notes:` paragraphs as slide text is an `[assumption]` stated at the top.
89
+
90
+ ## Useful references in this skill
91
+
92
+ - [`reference.md`](reference.md): the full mapping, slide geometry and sizes, how splitting decides, the brand fields read, the package parts written, exit codes
93
+ - [`scripts/md_to_pptx.py`](scripts/md_to_pptx.py): the converter (stdlib only, Python 3.9+)
94
+ - [`examples/support-weekly.md`](examples/support-weekly.md): worked example, a weekly report with a table, a chart, notes and a split section
95
+
96
+ ## Quality bar
97
+
98
+ - **The slides follow the headings.** The printed outline matches the document's `##` headings one for one, plus "(continued)" slides.
99
+ - **No text below its set size.** Overflow is split onto continued slides, and every split is named in the reply.
100
+ - **Tables are tables.** A pipe table becomes a PowerPoint table the user can edit, not a picture or tab-separated text, and a split table repeats its header row.
101
+ - **Nothing is lost silently.** Every `WARN` is fixed and gone on rerun, or reported in plain words.
102
+ - **Notes were read.** Any note that would embarrass the sender if forwarded is quoted back by slide number.
103
+ - **Facts are untouched.** No number, name, date or list order changed, and no slide added that the document lacks.
104
+ - **Mismatches are named, not fixed.** A count or total the document contradicts is quoted back with both figures.
105
+ - **The file checks out.** The `checked:` line is in the run, and no check is claimed that wasn't run.
106
+
107
+ ## When to use this skill
108
+
109
+ - ✅ A status report, review or runbook in Markdown that has to be shown as slides
110
+ - ✅ Meeting notes or a design doc someone wants "as a PowerPoint" with its structure intact
111
+ - ✅ A branded version of the same, using the `brand.json` the Word documents use
112
+
113
+ ## When NOT to use this skill
114
+
115
+ - ❌ Designing a persuasive deck for an audience, with charts, layouts and a narrative; use `deck-builder`
116
+ - ❌ Planning what each slide should say before any document exists; use `slide-outliner`
117
+ - ❌ A Word document to edit and track changes in; use `md-to-docx`
118
+ - ❌ A web page or a file to open in a browser; use `md-to-html`
119
+ - ❌ A `.pptx` back to Markdown; use `file-to-markdown`
120
+
121
+ ## Anti-patterns to avoid
122
+
123
+ - ❌ **Shrinking text to make a slide fit.** 12 pt bullets are unreadable from the back of the room. Split, and say so.
124
+ - ❌ **Installing python-pptx for a conversion.** The script needs nothing, so the deck builds on a locked-down laptop or in CI.
125
+ - ❌ **"Improving" the deck.** An agenda slide, a "Thank you" slide or punchier bullets put words in the user's mouth they never wrote.
126
+ - ❌ **Handing over notes unread.** A comment written for the presenter ships to every recipient of the file.
127
+ - ❌ **Silently turning `Notes:` paragraphs into speaker notes.** "Notes: figures exclude VAT" is content. Ask, or keep it on the slide.
128
+ - ❌ **Fixing a list that skips a number.** Renumbering hides that a step may be missing. Report it.
129
+ - ❌ **Claiming "opens fine in PowerPoint"** when only the script's own check ran.
130
+ - ❌ **Showing the machinery.** The reply and the artifact are for the person who asked. Don't mention this skill, its files, templates, caps or internal terms, or that the run is non-interactive. Name another skill once, at the end, as a suggested next step, never inside the artifact.
131
+ - ❌ **A bare `BLOCKED` line.** Keep the `BLOCKED: need <X>` line, then write for a person: what is missing in plain words, what you will produce once you have it, and anything the request already lets you say.
@@ -0,0 +1,12 @@
1
+ [
2
+ { "query": "turn this markdown status report into slides for Thursday", "should_trigger": true },
3
+ { "query": "Convert runbook.md to a pptx", "should_trigger": true },
4
+ { "query": "Can you make my meeting notes in notes.md into a PowerPoint? Keep the tables as tables", "should_trigger": true },
5
+ { "query": "Export docs/q3-review.md as a PowerPoint deck with our brand.json fonts and colours", "should_trigger": true },
6
+ { "query": "I need this README as slides, nothing fancy, one slide per section", "should_trigger": true },
7
+ { "query": "Build an investor pitch deck from these bullet points, with charts and our corporate template", "should_trigger": false },
8
+ { "query": "Outline the slides for my architecture review next week: what should each slide say?", "should_trigger": false },
9
+ { "query": "Convert this markdown report to a Word document legal can track changes in", "should_trigger": false },
10
+ { "query": "Turn the .pptx the client sent back into markdown", "should_trigger": false },
11
+ { "query": "Make the markdown onboarding guide a single HTML page I can email", "should_trigger": false }
12
+ ]
@@ -0,0 +1,84 @@
1
+ {
2
+ "skill_name": "md-to-pptx",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "turn status-report.md into slides for Thursday's steering group, I'll present it and then email the deck round afterwards",
7
+ "files": [
8
+ "evals/files/1/status-report.md",
9
+ "evals/files/1/img/defect-burndown.png"
10
+ ],
11
+ "assertions": [
12
+ "Writes a .pptx whose slides follow the document's sections in order (title, Summary, Milestones, Defect burn-down, Risks and issues, Decisions needed, Next two weeks) and says it was checked by reopening the file, without claiming checks that were not run",
13
+ "The long Risks and issues section continues on a 'Risks and issues (continued)' slide at full text size instead of shrinking, and the reply says so",
14
+ "The milestones are a real PowerPoint table with all five rows, and the owners, dates and statuses exactly as in the file",
15
+ "The defect burn-down chart is embedded on its slide",
16
+ "The two notes comments become speaker notes on their slides (Summary, and the Risks slides) rather than slide text",
17
+ "It warns that the speaker note on the Risks slides mentions the Pellow Freight penalty clause and legal review, and that this note goes out to everyone the deck is emailed to, without deleting the note itself",
18
+ "It does not invent content: no agenda, summary, 'Next steps' or 'Questions?' slide, and no dates, owners or figures that are not in status-report.md",
19
+ "The reply opens with the file and slide count, is a few lines long, and does not mention scripts, skill names or file paths from the skill"
20
+ ]
21
+ },
22
+ {
23
+ "id": 2,
24
+ "prompt": "can you make this into a powerpoint for the steering committee tomorrow? the Notes: bits under each section are what I'll say, they shouldn't be on the slides\n\n# Depot Wi-Fi refresh\n\n## Where we are\n\n- 9 of 12 depots surveyed\n- Installs start 3 Nov at Selby\n- Spend so far £84,200 of £150,000\n\nNotes: the unsurveyed sites are all waiting on landlord access.\n\n## Survey results\n\n| Depot | Access points | Survey |\n|---|--:|---|\n| Selby | 18 | Done |\n| York | 22 | Done |\n| Hull | 31 | Done |\n| Goole | 12 | Done |\n| Doncaster | 26 | Done |\n| Wakefield | 24 | Done |\n| Leeds | 29 | Done |\n| Bradford | 20 | Done |\n| Harrogate | 14 | Done |\n| Scunthorpe | 16 | Done |\n| Grimsby | - | Booked 6 Nov |\n| Barnsley | - | Booked 10 Nov |\n\nNotes: Hull needs the most because of the mezzanine.\n\n![Coverage heatmap](https://files.example.com/wifi/heatmap.png)\n\n## Ask\n\n1. Approve the install order above\n2. Approve a £12,000 contingency\n\nNotes: if they push back on contingency, say it's 8% of budget.",
25
+ "assertions": [
26
+ "Saves the pasted text to a Markdown file and produces a .pptx with a title slide and one slide each for Where we are, Survey results and Ask (plus any continued slide)",
27
+ "The three Notes: paragraphs end up as speaker notes on their own slides and do not appear as slide text",
28
+ "Survey results is a real PowerPoint table with all twelve depots, the access point numbers right-aligned, and every value as written",
29
+ "Says the coverage heatmap is a web link that was not embedded, and asks for a local copy or says what appears in its place",
30
+ "Points out that '9 of 12 depots surveyed' does not match the table, which shows 10 depots as Done, and does not change either figure",
31
+ "It does not invent content: no agenda, summary or 'Questions?' slide, and no numbers, dates or sites that are not in the pasted text",
32
+ "Delivers the file without asking questions first, in a short reply in plain words"
33
+ ]
34
+ },
35
+ {
36
+ "id": 3,
37
+ "prompt": "Convert night-shift-induction.md into a 4:3 PowerPoint using brand.json, it's going on the induction room projector and new starters get a copy of the file afterwards.",
38
+ "files": [
39
+ "evals/files/3/night-shift-induction.md",
40
+ "evals/files/3/brand.json"
41
+ ],
42
+ "assertions": [
43
+ "Writes a 4:3 .pptx with the headings in Georgia and body text in Arial from brand.json",
44
+ "Reports that the accent colour '#F2A5' in brand.json is not a valid colour and that a default was used, rather than silently applying or replacing it",
45
+ "Points out that the start-of-shift checks jump from 7 to 9 in the source, so the slides number them in sequence and 'go back to step 9' now points at a different check; it does not invent a step 8 or quietly renumber the reference",
46
+ "The thirteen checks continue on a '(continued)' slide with the numbering carrying on, at full text size, and the reply says the section was split",
47
+ "Deals with the Mermaid flowchart: renders it to an image and embeds it, or says plainly that it appears as code text",
48
+ "The footnote 'Near misses count as incidents' is folded into the text rather than dropped silently, and the retired paper-form HTML block is either rewritten as text or reported as dropped",
49
+ "It does not add steps, times, sites or slides that are not in night-shift-induction.md",
50
+ "The reply is short, leads with the file, and does not mention scripts, skill names or the skill's file paths"
51
+ ]
52
+ },
53
+ {
54
+ "id": 4,
55
+ "held_out": "2026-10-20",
56
+ "prompt": "Can you turn qbr-q3.md into a PowerPoint for the Harlow Freight review on Thursday? I'm emailing the deck to their ops team tomorrow so they can read it beforehand.",
57
+ "assertions": [
58
+ "Produces a .pptx file in the working directory built from qbr-q3.md",
59
+ "Does not quietly ship the HTML comment's internal note (7% renewal floor, 11% margin, 'Dana to confirm') to the client: either the .pptx has no speaker note or slide text containing it, or the reply names that note as going out with the file and says to remove it before emailing Harlow",
60
+ "The reply says the 12-item 'Risks and mitigations' section was split across more than one slide (continued slides) rather than squeezed onto one",
61
+ "The reply says charts/cost-per-shipment.png is missing from the folder and was not embedded, naming that file",
62
+ "The .pptx embeds charts/ontime.png as an image (a media file present in the package)",
63
+ "The .pptx contains the lane table as a real table with all 9 lanes, Columbus to Atlanta through Cincinnati to Memphis, and their figures as in the source (e.g. Toledo to Milwaukee 91.7)",
64
+ "Invents nothing that is not in qbr-q3.md: no extra lanes, figures, risks, owners, dates or slides of made-up content",
65
+ "Answers the request directly: hands over the deck with a short reply naming the file and the things the sender must know before emailing it, not a long tutorial on how to build slides"
66
+ ]
67
+ },
68
+ {
69
+ "id": 5,
70
+ "held_out": "2026-10-20",
71
+ "prompt": "can u make these into 5 slides for my boss, she just wants the gist before friday. notes are in vendor-sync-notes.md. nothing fancy",
72
+ "assertions": [
73
+ "Produces a .pptx file in the working directory",
74
+ "The .pptx has 5 slides (or 6 where the reply says the extra one is a title slide), with topic titles the agent chose because the notes have no headings, rather than one slide per paragraph or a single wall of text",
75
+ "Uses the current figures from the 20 Oct meeting: go-live 1 December and budget $52,000; the superseded $48,000 / 17 November from the pasted 13 Oct section are not presented as current, and the reply says that pasted section was left out (or flags it)",
76
+ "Leaves Marco's private aside (his dad's surgery) out of every slide and speaker note in the .pptx, and the reply says it was left out or flags it",
77
+ "Keeps the action items with their owners and dates as written: Sanna demo by 13 Nov, Dev archive rule with legal by 30 Oct, Ruth training rooms week of 23 Nov",
78
+ "Presents the undecided points as open, not as decisions: the 6-versus-12-month read-only question and the archive-older-than-2-years idea",
79
+ "Invents nothing that is not in vendor-sync-notes.md: no new numbers, people, dates, risks or recommendations",
80
+ "Answers the request directly with a short reply naming the file and slide count, suited to a casual 'nothing fancy' ask"
81
+ ]
82
+ }
83
+ ]
84
+ }
@@ -0,0 +1,75 @@
1
+ ---
2
+ title: Atlas WMS migration — week 42 status
3
+ author: Priya Nair, Programme Lead
4
+ date: 22 October 2026
5
+ ---
6
+
7
+ # Atlas WMS migration: week 42 status
8
+
9
+ ## Summary
10
+
11
+ - Overall status: **Amber** (Green in week 40)
12
+ - Leeds go-live moves from 9 Nov to 23 Nov
13
+ - Budget: £412k spent of £640k (64%)
14
+ - Two of five integration streams complete
15
+
16
+ <!-- notes: Open with the date change; the steering group will ask about it first. -->
17
+
18
+ ## Milestones
19
+
20
+ | Milestone | Owner | Planned | Forecast | Status |
21
+ |---|---|---|---|---|
22
+ | Data migration dry run 1 | Tomasz | 15 Sep | 15 Sep | Done |
23
+ | Carrier API integration | Lena | 1 Oct | 8 Oct | Done |
24
+ | Data migration dry run 2 | Tomasz | 20 Oct | 27 Oct | Late |
25
+ | User acceptance testing | Aisha | 27 Oct | 10 Nov | At risk |
26
+ | Leeds go-live | Priya | 9 Nov | 23 Nov | At risk |
27
+
28
+ ## Defect burn-down
29
+
30
+ ![Open defects by week, weeks 36 to 42](img/defect-burndown.png)
31
+
32
+ Open defects fell from 148 to 61 over seven weeks. 9 of the 61 are severity 1.
33
+
34
+ ## Risks and issues
35
+
36
+ ### Risks
37
+
38
+ - **Dry run 2 slips again.** The source extract from the legacy system still times out on the
39
+ pallet history table, which holds eleven years of movements.
40
+ - Mitigation: archive movements older than three years before the extract
41
+ - Owner: Tomasz, decision needed by 24 Oct
42
+ - **UAT testers not released.** Leeds shift managers are needed for five days and peak season
43
+ starts on 16 Nov.
44
+ - Mitigation: split UAT into two blocks of two and a half days
45
+ - Owner: Aisha
46
+ - **Carrier label format change.** One carrier changes its label layout on 1 Nov, which the
47
+ integration built in October does not support yet.
48
+ - Mitigation: Lena has the new specification; estimate is three days of work
49
+ - **Handheld scanner firmware.** 40 of the 120 handhelds at Leeds run firmware older than the
50
+ minimum the new WMS supports.
51
+ - Mitigation: firmware update in the week of 2 Nov, outside picking hours
52
+
53
+ ### Issues
54
+
55
+ - **Severity 1 defects.** 9 open, 6 of them in replenishment rules; fixes are due in the
56
+ build of 29 Oct.
57
+ - **Training rooms.** The Leeds training room is booked for audits in the week of 9 Nov, so
58
+ training moves to the Wakefield site.
59
+ - **Test data.** UAT needs a masked copy of production data, and the masking job has not been
60
+ approved by the data protection officer yet.
61
+
62
+ <!-- notes: Don't raise the Pellow Freight penalty clause (£35k if go-live slips past 30 Nov) unless they ask; legal is still reviewing it. -->
63
+
64
+ ## Decisions needed
65
+
66
+ 1. Approve archiving pallet movements older than three years before dry run 2
67
+ 2. Approve the new Leeds go-live date of 23 Nov
68
+ 3. Release four Leeds shift managers for UAT in two blocks
69
+
70
+ ## Next two weeks
71
+
72
+ - Dry run 2 on 27 Oct, with the archive in place
73
+ - Replenishment fixes in the 29 Oct build
74
+ - Scanner firmware update in the week of 2 Nov
75
+ - Full plan and RAID log: [programme site](https://atlas.harbourline.example/programme)
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "Harbourline Logistics",
3
+ "colors": {
4
+ "primary": "#1D4E89",
5
+ "accent": "#F2A5",
6
+ "text": "#1F1F1F"
7
+ },
8
+ "fonts": {
9
+ "heading": "Georgia",
10
+ "body": { "family": "Arial" }
11
+ }
12
+ }
@@ -0,0 +1,53 @@
1
+ # Night shift induction: Wakefield cross-dock
2
+
3
+ Ops team, version 3. Read before your first shift.
4
+
5
+ # Before your first shift
6
+
7
+ - Collect your badge from security at Gate 2
8
+ - Book the forklift refresher if your licence is over 12 months old
9
+ - Counterbalance and reach trucks only
10
+ - Reach trucks: the refresher includes the 9 m racking test
11
+ - Bring your old licence card to the test
12
+ - Read the [incident reporting section](#reporting-an-incident) before you start
13
+
14
+ # Start-of-shift checks
15
+
16
+ The checks take about 25 minutes. Do them in this order.
17
+
18
+ 1. Sign in on the shift board in the transport office
19
+ 2. Pick up a handheld scanner from the charging rack
20
+ 3. Log in to the scanner with your badge number
21
+ 4. Check the scanner battery is above 80%
22
+ 5. Walk the dock doors 1 to 14 and check each leveller is down
23
+ 6. Check the fire exits on the east wall are clear
24
+ 7. Read the handover notes from the late shift
25
+ 9. Check the trailer schedule for the first three arrivals
26
+ 10. Confirm the yard shunter has the same schedule
27
+ 11. Test the dock door 7 sensor (it fails most often)
28
+ 12. Check the chilled bay reads 2 to 5 °C
29
+ 13. Report any fault to the shift lead before 22:30
30
+
31
+ If the scanner fails at check 3, go back to step 9 and tell the shift lead.
32
+
33
+ ```mermaid
34
+ flowchart LR
35
+ A[Sign in] --> B[Scanner] --> C[Dock walk] --> D[Handover notes]
36
+ ```
37
+
38
+ # Reporting an incident
39
+
40
+ Report every incident within the shift, even with no injury.[^1]
41
+
42
+ <details>
43
+ <summary>Old paper form</summary>
44
+ Form OPS-7 is retired; do not use it.
45
+ </details>
46
+
47
+ The scanner command to open an incident is:
48
+
49
+ ```text
50
+ MENU > 7 > INCIDENT > NEW
51
+ ```
52
+
53
+ [^1]: Near misses count as incidents.
@@ -0,0 +1,85 @@
1
+ # Harlow Freight: Q3 2026 Business Review
2
+
3
+ Prepared by Northwind Logistics Services for Harlow Freight, 22 October 2026
4
+
5
+ ## Summary
6
+
7
+ - On-time delivery for the quarter was **94.2%** against a 95% target
8
+ - Shipments handled: 18,430 (up 6% on Q2)
9
+ - Damage claims fell from 41 to 27
10
+ - Two lanes are well below target and have recovery plans (see Risks)
11
+
12
+ ## Delivery performance by lane
13
+
14
+ ![On-time delivery by month, Jul to Sep 2026](charts/ontime.png)
15
+
16
+ | Lane | Shipments | On-time % | Target % |
17
+ |---|---:|---:|---:|
18
+ | Columbus to Atlanta | 3,120 | 96.8 | 95 |
19
+ | Columbus to Chicago | 2,870 | 95.4 | 95 |
20
+ | Dayton to Nashville | 1,940 | 93.1 | 95 |
21
+ | Dayton to Pittsburgh | 1,610 | 95.9 | 95 |
22
+ | Toledo to Detroit | 2,250 | 97.2 | 95 |
23
+ | Toledo to Milwaukee | 1,480 | 91.7 | 95 |
24
+ | Akron to Buffalo | 1,330 | 95.0 | 95 |
25
+ | Akron to Charlotte | 2,060 | 94.6 | 95 |
26
+ | Cincinnati to Memphis | 1,770 | 92.8 | 95 |
27
+
28
+ ## Cost per shipment
29
+
30
+ ![Cost per shipment, Q1 to Q3 2026](charts/cost-per-shipment.png)
31
+
32
+ Average cost per shipment was $212 in Q3, down from $219 in Q2, mainly from consolidating the Akron loads.
33
+
34
+ ## Risks and mitigations
35
+
36
+ 1. **Toledo to Milwaukee on-time at 91.7%**
37
+ - Owner: Priya Raman (Northwind)
38
+ - Cause: driver shortage on the Thursday wave
39
+ - Mitigation: second carrier contracted from 1 November
40
+ 2. **Cincinnati to Memphis dock congestion**
41
+ - Owner: Owen Castell (Harlow)
42
+ - Cause: shared dock doors with inbound returns
43
+ - Mitigation: move returns to doors 9 to 12 after 2 pm
44
+ 3. **Dayton to Nashville weather exposure in Q4**
45
+ - Owner: Priya Raman (Northwind)
46
+ - Mitigation: pre-agreed reroute through Louisville
47
+ 4. **Peak season volume (+22% forecast for November)**
48
+ - Owner: Jonah Wilde (Northwind)
49
+ - Mitigation: 14 additional trailers on short-term lease
50
+ - Mitigation: weekend dispatch cover from 8 November
51
+ 5. **Fuel surcharge volatility**
52
+ - Owner: Mei Takahashi (Harlow)
53
+ - Mitigation: monthly surcharge review instead of quarterly
54
+ 6. **Telematics vendor contract ends 31 December**
55
+ - Owner: Jonah Wilde (Northwind)
56
+ - Mitigation: renewal or replacement decision by 15 November
57
+ 7. **Akron to Charlotte just below target (94.6%)**
58
+ - Owner: Priya Raman (Northwind)
59
+ - Mitigation: earlier cut-off for Friday pickups
60
+ 8. **Proof-of-delivery photo gaps**
61
+ - Owner: Owen Castell (Harlow)
62
+ - Cause: older handheld scanners at two depots
63
+ - Mitigation: scanner swap at Dayton and Akron in November
64
+ 9. **Claims process takes 19 days on average**
65
+ - Owner: Mei Takahashi (Harlow)
66
+ - Mitigation: target 10 days with a shared claims inbox
67
+ 10. **Single point of contact for after-hours escalations**
68
+ - Owner: Jonah Wilde (Northwind)
69
+ - Mitigation: rota of three named duty managers from December
70
+ 11. **Yard capacity at Columbus during peak**
71
+ - Owner: Owen Castell (Harlow)
72
+ - Mitigation: overflow yard at Grove Road, 40 spaces
73
+ 12. **Data feed delays into Harlow's planning system**
74
+ - Owner: Priya Raman (Northwind)
75
+ - Cause: nightly batch finishes after 6 am
76
+ - Mitigation: move batch start to 1 am
77
+
78
+ <!-- INTERNAL, do not share with Harlow: our renewal floor is a 7% discount and margin on this account is 11%. Dana to confirm the number before Thursday. -->
79
+
80
+ ## Next quarter priorities
81
+
82
+ - Bring Toledo to Milwaukee and Cincinnati to Memphis back above 95%
83
+ - Land the peak plan without missed collections
84
+ - Cut average claims time from 19 days to 10
85
+ - Agree the 2027 contract renewal
@@ -0,0 +1,28 @@
1
+ vendor sync, help desk move to Tessellate, tues 20 oct
2
+
3
+ present: me, Ruth Okafor, Marco Belli, Sanna Lind (Tessellate), Dev Patel (IT)
4
+
5
+ overall we are still on track but go-live moved. Tessellate can't finish the phone integration in time so go-live is now 1 December (was 17 Nov). Ruth ok with it as long as we don't overlap with the year-end freeze starting 14 Dec.
6
+
7
+ budget went up to $52,000 total because of the extra integration work. Ruth approved it in the meeting, no need to go back to finance since it's under the $60k sign-off limit.
8
+
9
+ ticket migration - Sanna says the test run moved 4,800 of 5,000 open tickets cleanly, the other 200 have attachments over 25 MB and need a manual pass. Dev thinks we can just archive anything older than 2 years instead of migrating it, nobody objected but not formally decided
10
+
11
+ training
12
+ - agents get 2 x 90 min sessions, week of 23 Nov
13
+ - Sanna will send the recording + quick ref card
14
+ - team leads get an extra admin session
15
+
16
+ (Marco out next week - his dad's surgery, keep that between us. Ruth covering his bits)
17
+
18
+ open question: do we keep the old system read-only for 6 months or 12? Ruth wants 12, Dev says licence cost makes 6 more realistic. nobody decided, comes back next sync
19
+
20
+ actions
21
+ - Sanna: fix phone integration, demo by 13 Nov
22
+ - Dev: confirm archive rule for >2yr tickets with legal by 30 Oct
23
+ - Ruth: book training rooms for week of 23 Nov
24
+ - me: send these notes round + update the project plan
25
+
26
+ ---- pasted from last week's sync (13 oct), already covered ----
27
+
28
+ go-live 17 November, budget $48,000, Tessellate confident on phone integration. training TBC. Marco to draft comms email to agents.
@@ -0,0 +1,48 @@
1
+ ---
2
+ title: Kestrel Support weekly review
3
+ date: Week 41
4
+ ---
5
+
6
+ # Kestrel Support: weekly review
7
+
8
+ ## This week
9
+
10
+ - 1,006 tickets opened, 1,041 closed
11
+ - Median first response: 2.8 hours (target 4)
12
+ - Backlog down to 233 from 268
13
+ - Chat hand-off rule live for the billing queue
14
+
15
+ Notes: lead with the backlog, it's the number the ops director watches.
16
+
17
+ ## Tickets by week
18
+
19
+ ![Tickets opened per week, weeks 37 to 41](tickets-by-week.png)
20
+
21
+ ## Queue health
22
+
23
+ | Queue | Open | Oldest (days) | Owner |
24
+ |---|--:|--:|---|
25
+ | Billing | 61 | 9 | Ruth |
26
+ | Accounts | 48 | 6 | Dev |
27
+ | Integrations | 72 | 14 | Ana |
28
+ | Hardware returns | 52 | 11 | Sam |
29
+
30
+ ## Follow-ups
31
+
32
+ ### Carried over
33
+
34
+ - Weekend rota for November still not agreed; Ruth to bring two options to the next review
35
+ - Option A keeps the current four-person rota and adds an on-call fifth person for peaks
36
+ - Option B moves to two-person weekend shifts with a Monday catch-up block
37
+ - The integrations backlog has grown three weeks in a row; Ana asked for one more engineer
38
+ from the platform team for two sprints
39
+ - Hardware returns are waiting on the courier contract renewal, which procurement owns
40
+
41
+ ### New
42
+
43
+ - Customer survey goes out on 3 November to everyone with a ticket closed in October
44
+ - The billing macro library needs a review before the price change on 1 December
45
+ - Two new starters join on 10 November and need shadowing slots on every queue
46
+ - Knowledge base articles for the new export feature are still in draft, owner to be agreed
47
+
48
+ <!-- notes: Ana's request for an engineer is not approved yet; don't promise it in the room. -->
@@ -0,0 +1,75 @@
1
+ # Worked example: a weekly support review becomes a six-slide deck
2
+
3
+ ## Input given to the skill
4
+
5
+ > Can you turn support-weekly-input.md into slides? I'm presenting it at the ops review on
6
+ > Thursday. The Notes: line is what I'll say, not slide text.
7
+
8
+ The source is [`support-weekly-input.md`](support-weekly-input.md), with its chart
9
+ [`tickets-by-week.png`](tickets-by-week.png) next to it. It has front matter, four `##`
10
+ sections, a right-aligned table, an image, a `Notes:` paragraph, a long "Follow-ups" section
11
+ with two `###` groups and nested bullets, and an HTML notes comment at the end.
12
+
13
+ ---
14
+
15
+ ## What the agent did
16
+
17
+ **First run, to see what doesn't convert:**
18
+
19
+ ```
20
+ $ python3 scripts/md_to_pptx.py support-weekly-input.md -o support-weekly.pptx
21
+ WARN line 1: YAML front matter dropped (lines 1-4); used on the title slide: title, date
22
+ WARN line 15: paragraph starting "Notes:" stays on the slide as text; wrap it in <!-- notes: ... --> to make it speaker notes
23
+ WARN line 30: "Follow-ups" did not fit on one slide; split into 2 slides (5-6) at a text boundary, text kept at full size
24
+ wrote support-weekly.pptx (6 slides, 1 of them continued, 1 table, 1 image, speaker notes on 1; 16:9; brand: no)
25
+ ```
26
+
27
+ **Fixed the source in a copy.** The user said the `Notes:` line is what they'll say, so it
28
+ becomes a notes comment. Nothing else changed:
29
+
30
+ ```diff
31
+ - Notes: lead with the backlog, it's the number the ops director watches.
32
+ + <!-- notes: lead with the backlog, it's the number the ops director watches. -->
33
+ ```
34
+
35
+ **Second run:**
36
+
37
+ ```
38
+ $ python3 scripts/md_to_pptx.py support-weekly-fixed.md -o support-weekly.pptx
39
+ WARN line 1: YAML front matter dropped (lines 1-4); used on the title slide: title, date
40
+ WARN line 30: "Follow-ups" did not fit on one slide; split into 2 slides (5-6) at a text boundary, text kept at full size
41
+ wrote support-weekly.pptx (6 slides, 1 of them continued, 1 table, 1 image, speaker notes on 2; 16:9; brand: no)
42
+ checked: 35 XML parts parse, 34 relationships resolve, every part has a content type
43
+ 1. Kestrel Support: weekly review [title]
44
+ 2. This week [notes]
45
+ 3. Tickets by week [image]
46
+ 4. Queue health [table]
47
+ 5. Follow-ups
48
+ 6. Follow-ups (continued) [notes]
49
+ 2 warning(s): the items above were dropped, split or changed; tell the user before sharing
50
+ ```
51
+
52
+ The outline matches the four `##` headings, plus one continued slide. The front matter warning
53
+ is expected: its title and date are on the title slide. The split kept the text at 20 pt. The
54
+ "Carried over" group and the first two "New" items are on slide 5, and the last two items are
55
+ on slide 6.
56
+
57
+ **Read both notes.** Slide 2's note is presenter guidance. Slide 6's note says *"Ana's request
58
+ for an engineer is not approved yet; don't promise it in the room."* That is fine to present
59
+ from, but anyone the file is forwarded to can read it.
60
+
61
+ **Checked it opens.** Microsoft PowerPoint for Mac 16.114 (2026-10-20) opened the file with no
62
+ repair prompt and counted six slides. A Quick Look thumbnail of each slide showed the table
63
+ with a shaded header and right-aligned numbers, and the chart centred under its title.
64
+
65
+ ---
66
+
67
+ ## Reply to the user
68
+
69
+ > Here's the deck: `support-weekly.pptx`, 6 slides (title, then This week, Tickets by week,
70
+ > Queue health, and Follow-ups over two slides). Follow-ups was too long for one slide, so it
71
+ > continues on slide 6 at full text size rather than shrinking.
72
+ >
73
+ > Your "Notes:" line is now the speaker note on slide 2. **Before you send the file to anyone:**
74
+ > slide 6's speaker note says Ana's engineer request isn't approved and not to promise it. It
75
+ > travels with the deck, so delete it from the notes pane if the deck goes beyond the room.