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.
- package/README.md +1 -0
- package/agents/README.md +4 -1
- package/agents/docs-reviewer.md +47 -0
- package/agents/finding-adjudicator.md +49 -0
- package/agents/test-reviewer.md +52 -0
- package/catalogue.json +17 -7
- package/model-routing.json +40 -0
- package/package.json +1 -1
- package/packs/ai-engineering/skills/agent-config-review/SKILL.md +116 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/eval_queries.json +12 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/evals.json +75 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/db-migrator.md +8 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/reviewer.md +9 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/settings.json +48 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/settings.local.json +5 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.mcp.json +22 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/package.json +12 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/2/.cursor/mcp.json +17 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/2/config.toml +21 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/my-user-settings.json +11 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.claude/agents/release-notes.md +13 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.claude/settings.json +39 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.mcp.json +18 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/package.json +14 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/5/.github/workflows/codex-triage.yml +29 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/5/AGENTS.md +16 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/5/codex/config.toml +34 -0
- package/packs/ai-engineering/skills/agent-config-review/examples/inputs/tidewater-ingest/.claude/settings.json +22 -0
- package/packs/ai-engineering/skills/agent-config-review/examples/inputs/tidewater-ingest/.mcp.json +9 -0
- package/packs/ai-engineering/skills/agent-config-review/examples/python-repo-tighten.md +81 -0
- package/packs/ai-engineering/skills/agent-config-review/manifest.json +60 -0
- package/packs/ai-engineering/skills/agent-config-review/reference.md +205 -0
- package/packs/ai-engineering/skills/agent-config-review/scripts/agent_config_scan.py +989 -0
- package/packs/ai-engineering/skills/agent-incident-response/SKILL.md +175 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/eval_queries.json +14 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/evals.json +107 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/agent-session-excerpt.txt +11 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/ci-build-log.txt +24 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/incident-notes.md +19 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/2/mcp-config.json +20 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/2/session-transcript.txt +8 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/4/agent-session.log +70 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/4/infra/staging-db.tf +25 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/jobs/nightly-triage/job.yaml +19 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/jobs/nightly-triage/run.log +13 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/usage-export-2026-10-20.csv +13 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/.mcp.json +20 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/git-log.txt +12 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/notesync-excerpt.txt +30 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/notesync.log +15 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/ssh-config.txt +16 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/.github/workflows/ci.yml +28 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/SECURITY.md +8 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/issue-479.md +35 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/package.json +15 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/pr-482.diff +20 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/run-log.txt +30 -0
- package/packs/ai-engineering/skills/agent-incident-response/examples/injected-issue-comment.md +57 -0
- package/packs/ai-engineering/skills/agent-incident-response/manifest.json +55 -0
- package/packs/ai-engineering/skills/agent-incident-response/reference.md +152 -0
- package/packs/ai-engineering/skills/agent-incident-response/scripts/find_secret_exposure.py +239 -0
- package/packs/ai-engineering/skills/agent-incident-response/scripts/usage_split.py +194 -0
- package/packs/converters/skills/file-to-markdown/SKILL.md +3 -2
- package/packs/converters/skills/file-to-markdown/evals/eval_queries.json +4 -0
- package/packs/converters/skills/file-to-markdown/manifest.json +2 -2
- package/packs/converters/skills/file-to-markdown/scripts/to_markdown.py +340 -7
- package/packs/converters/skills/md-to-confluence/SKILL.md +139 -0
- package/packs/converters/skills/md-to-confluence/evals/eval_queries.json +42 -0
- package/packs/converters/skills/md-to-confluence/evals/evals.json +89 -0
- package/packs/converters/skills/md-to-confluence/evals/files/1/img/latency-dashboard.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/1/payments-runbook.md +60 -0
- package/packs/converters/skills/md-to-confluence/evals/files/2/deploy-checklist.md +33 -0
- package/packs/converters/skills/md-to-confluence/evals/files/3/img/after/screen.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/3/img/before/screen.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/3/release-notes-4.2.md +49 -0
- package/packs/converters/skills/md-to-confluence/evals/files/4/docs/img/topology.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/4/docs/ingest-pipeline-design.md +65 -0
- package/packs/converters/skills/md-to-confluence/evals/files/5/support/troubleshooting-sso.md +57 -0
- package/packs/converters/skills/md-to-confluence/examples/inputs/img/queue-depth.png +0 -0
- package/packs/converters/skills/md-to-confluence/examples/inputs/queue-runbook.fixed.md +21 -0
- package/packs/converters/skills/md-to-confluence/examples/inputs/queue-runbook.md +21 -0
- package/packs/converters/skills/md-to-confluence/examples/queue-runbook.md +57 -0
- package/packs/converters/skills/md-to-confluence/manifest.json +52 -0
- package/packs/converters/skills/md-to-confluence/reference.md +92 -0
- package/packs/converters/skills/md-to-confluence/scripts/md_to_confluence.py +821 -0
- package/packs/converters/skills/md-to-pptx/SKILL.md +131 -0
- package/packs/converters/skills/md-to-pptx/evals/eval_queries.json +12 -0
- package/packs/converters/skills/md-to-pptx/evals/evals.json +84 -0
- package/packs/converters/skills/md-to-pptx/evals/files/1/img/defect-burndown.png +0 -0
- package/packs/converters/skills/md-to-pptx/evals/files/1/status-report.md +75 -0
- package/packs/converters/skills/md-to-pptx/evals/files/3/brand.json +12 -0
- package/packs/converters/skills/md-to-pptx/evals/files/3/night-shift-induction.md +53 -0
- package/packs/converters/skills/md-to-pptx/evals/files/4/charts/ontime.png +0 -0
- package/packs/converters/skills/md-to-pptx/evals/files/4/qbr-q3.md +85 -0
- package/packs/converters/skills/md-to-pptx/evals/files/5/vendor-sync-notes.md +28 -0
- package/packs/converters/skills/md-to-pptx/examples/support-weekly-input.md +48 -0
- package/packs/converters/skills/md-to-pptx/examples/support-weekly.md +75 -0
- package/packs/converters/skills/md-to-pptx/examples/tickets-by-week.png +0 -0
- package/packs/converters/skills/md-to-pptx/manifest.json +49 -0
- package/packs/converters/skills/md-to-pptx/reference.md +139 -0
- package/packs/converters/skills/md-to-pptx/scripts/md_to_pptx.py +1841 -0
- package/packs/dev-team/loops/modernize/LOOP.md +124 -0
- package/packs/dev-team/loops/modernize/evals/eval_queries.json +9 -0
- package/packs/dev-team/loops/modernize/evals/evals.json +27 -0
- package/packs/dev-team/loops/modernize/loop.json +60 -0
- package/packs/dev-team/skills/behaviour-equivalence/SKILL.md +155 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/eval_queries.json +11 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/evals.json +76 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/cases.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/new.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/notes.md +15 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/old.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/old_rerun.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/pricing_v1.py +45 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/pricing_v2.py +65 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/rules.json +10 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/3/diff-summary.txt +16 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/diff.txt +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/fee_calc_py2.py +16 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/fee_calc_py3.py +24 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/input.csv +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/new_output.csv +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/old_output.csv +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/TEAM_NOTES.md +19 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/normalisation.yaml +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/new_run.jsonl +8 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/old_run1.jsonl +8 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/old_run2.jsonl +8 -0
- package/packs/dev-team/skills/behaviour-equivalence/examples/delivery-date.md +78 -0
- package/packs/dev-team/skills/behaviour-equivalence/manifest.json +33 -0
- package/packs/dev-team/skills/behaviour-equivalence/reference.md +97 -0
- package/packs/dev-team/skills/behaviour-equivalence/scripts/golden_diff.py +524 -0
- package/packs/dev-team/skills/behaviour-equivalence/templates/accepted.json +10 -0
- package/packs/dev-team/skills/behaviour-equivalence/templates/rules.json +7 -0
- package/packs/frontend/pack.json +55 -0
- package/packs/frontend/skills/rendering-strategy/SKILL.md +149 -0
- package/packs/frontend/skills/rendering-strategy/evals/eval_queries.json +38 -0
- package/packs/frontend/skills/rendering-strategy/evals/evals.json +77 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/1/fernhill-app.md +40 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/3/routes.md +33 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/build-notes.txt +5 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/nuxt.config.ts +19 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/pages/recipes/[slug].vue +37 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/routes.md +15 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/routes.txt +18 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/src/hooks.server.ts +14 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/src/routes/(marketing)/pricing/+page.server.ts +10 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/src/routes/+layout.server.ts +10 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/svelte.config.js +10 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/traffic.md +18 -0
- package/packs/frontend/skills/rendering-strategy/examples/saas-site.md +42 -0
- package/packs/frontend/skills/rendering-strategy/manifest.json +50 -0
- package/packs/frontend/skills/rendering-strategy/reference.md +116 -0
- package/packs/frontend/skills/rendering-strategy/scripts/render_load.py +181 -0
- package/packs/frontend/skills/web-performance-review/SKILL.md +106 -0
- package/packs/frontend/skills/web-performance-review/evals/eval_queries.json +38 -0
- package/packs/frontend/skills/web-performance-review/evals/evals.json +76 -0
- package/packs/frontend/skills/web-performance-review/evals/files/1/psi.json +1065 -0
- package/packs/frontend/skills/web-performance-review/evals/files/2/after.json +359 -0
- package/packs/frontend/skills/web-performance-review/evals/files/2/before.json +375 -0
- package/packs/frontend/skills/web-performance-review/evals/files/4/psi-pdp-mobile-2026-10-19.json +171 -0
- package/packs/frontend/skills/web-performance-review/evals/files/4/rum-inp-attribution-oct14-19.csv +6 -0
- package/packs/frontend/skills/web-performance-review/evals/files/4/rum-inp-daily.csv +15 -0
- package/packs/frontend/skills/web-performance-review/evals/files/5/crux-home-phone.json +35 -0
- package/packs/frontend/skills/web-performance-review/evals/files/5/lighthouse-home-mobile.json +173 -0
- package/packs/frontend/skills/web-performance-review/examples/quayside-article-lhr.json +480 -0
- package/packs/frontend/skills/web-performance-review/examples/quayside-article.md +103 -0
- package/packs/frontend/skills/web-performance-review/manifest.json +48 -0
- package/packs/frontend/skills/web-performance-review/reference.md +105 -0
- package/packs/frontend/skills/web-performance-review/scripts/lh_summary.py +743 -0
- package/packs/product-manager/skills/lean-canvas/SKILL.md +162 -0
- package/packs/product-manager/skills/lean-canvas/evals/eval_queries.json +42 -0
- package/packs/product-manager/skills/lean-canvas/evals/evals.json +82 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/1/pawpass-notes.md +54 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/3/lunchloop-pitch.md +30 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/4/clubkit-notes.md +44 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/5/cost-model.csv +5 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/5/proposal.md +40 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/5/stakeholder-emails.txt +18 -0
- package/packs/product-manager/skills/lean-canvas/examples/bike-repair.md +72 -0
- package/packs/product-manager/skills/lean-canvas/manifest.json +34 -0
- package/packs/product-manager/skills/lean-canvas/reference.md +102 -0
- package/packs/product-manager/skills/lean-canvas/scripts/unit_economics.py +211 -0
- package/packs/solution-architect/skills/api-contract-draft/SKILL.md +2 -2
- package/packs/solution-architect/skills/api-contract-draft/manifest.json +28 -6
- package/packs/solution-architect/skills/event-contract-draft/SKILL.md +167 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/eval_queries.json +38 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/evals.json +76 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/1/order-events-brief.md +45 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/4/NOTES.md +23 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/4/schemas/shipment-update.json +40 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/5/invoice.example.json +25 -0
- package/packs/solution-architect/skills/event-contract-draft/examples/order-service.asyncapi.json +246 -0
- package/packs/solution-architect/skills/event-contract-draft/examples/order-service.md +92 -0
- package/packs/solution-architect/skills/event-contract-draft/manifest.json +25 -0
- package/packs/solution-architect/skills/event-contract-draft/reference.md +113 -0
- package/packs/solution-architect/skills/event-contract-draft/scripts/check_asyncapi.py +502 -0
- package/packs/solution-architect/skills/event-contract-draft/templates/asyncapi-skeleton.json +144 -0
- package/packs/sre-oncall/skills/slo-spec/SKILL.md +161 -0
- package/packs/sre-oncall/skills/slo-spec/evals/eval_queries.json +38 -0
- package/packs/sre-oncall/skills/slo-spec/evals/evals.json +75 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/1/order-service.md +51 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/3/search-slo-status.md +30 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/4/alerts/payments-api.rules.yaml +16 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/4/docs/dependencies.md +8 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/4/metrics/summary-90d.md +51 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/5/ops-notes.md +34 -0
- package/packs/sre-oncall/skills/slo-spec/examples/ticket-booking.md +88 -0
- package/packs/sre-oncall/skills/slo-spec/manifest.json +34 -0
- package/packs/sre-oncall/skills/slo-spec/reference.md +113 -0
- package/packs/sre-oncall/skills/slo-spec/scripts/slo_math.py +449 -0
- 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\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
|
+

|
|
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,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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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.
|
|
Binary file
|