← library
skill📝 Docs & writingv1 · updated 2026-10-09

Training Doc Generator

Builds a customized training document for one reader — a how-to guide, onboarding walkthrough, study course, or app manual — from what that reader already uses and what they want to be able to do, about any topic, tool, or repository. Asks only the intake questions the context leaves open, then delivers one of three formats — a single-file HTML guide, a keyboard-navigable slide deck, or a standalone searchable Next.js docs site. Use whenever someone asks to teach, train, onboard, explain, document how to use, write a tutorial or course, or make learning material for a person or team, even if they never say "training".

Run it as a prompt

Paste this into any AI agent, or fetch it: curl -s https://uplift.page/api/v1/prompts/training-doc-generator/raw

prompt.md
# Training Doc Generator

Generic training explains the tool; useful training gets *this reader* to *their goal* with
*what they already have*. Fix those facts first, then build backwards from the goal.

## When to use

- Someone asks to teach, train, onboard, explain, or document how to use a tool, app, topic,
  or repo (guide, tutorial, course, walkthrough, manual, deck)
- A new teammate, client, or attendee must get productive with something that exists
- Existing docs list features but get nobody to an outcome

## Steps

1. **Collect what is known** (reader, what they use, goal, source, format, constraints) from
   the request and the workspace: README, rules files, manifests.
2. **Ask only for what is still open**, in one message with a default per question
   (`references/intake.md`); nothing open → state the assumptions and go.
3. **Inspect the source before writing.** Repo: run the commands you teach, keep real
   output. App: drive it, capture screens, copy exact labels. Topic: name your canon.
4. **Design the path backwards**: the goal as a test the reader passes, then the 5–12
   outcomes that make it true, each needing only earlier ones.
5. **Write every lesson to the contract**: title as the outcome, why, exact steps, a check,
   and the trap that really happens.
6. **Build the chosen format** (`references/formats.md`): copy the `assets/` template,
   replace the content, keep its structure.
7. **Verify as the reader**: phone and desktop widths, every command run, every link
   followed, every fact checked against step 3; then run `scripts/check.mjs`.
8. **Hand back** the files, what was assumed, what only a human can fill in, and how to
   regenerate when the source changes.

## Rules

1. The reader's words, not the source's: plain language, sentence case, second person.
2. Every sentence is true of the source as inspected; nothing from memory.
3. What they already use decides what to skip; the goal decides where to stop.
4. Real examples over abstract ones: the reader's own data or situation when known.
5. Nothing private leaves the source: no credentials, customer names, or emails in text or
   images; placeholders instead.
6. Limitations are stated as tips, never hidden, removed when they stop being true.
7. One format per document, chosen for how it is read.
8. The output stands alone: relative paths, no build step for a guide or deck.

Install it as a skill

Agents that support the Agent Skills standard load it automatically when it applies.

download
curl -fsSL https://uplift.page/p/training-doc-generator/SKILL.md --create-dirs -o .agents/skills/training-doc-generator/SKILL.md
or from any MCP client
MCP server: https://uplift.page/mcp
Tool: pull_skill  {"slug": "training-doc-generator"}

The full skill

Generic training explains the tool; useful training gets this reader to their goal with what they already have. Fix those facts first, then build backwards from the goal.

When to use

  • Someone asks to teach, train, onboard, explain, or document how to use a tool, app, topic, or repo (guide, tutorial, course, walkthrough, manual, deck)
  • A new teammate, client, or attendee must get productive with something that exists
  • Existing docs list features but get nobody to an outcome

Steps

  1. Collect what is known (reader, what they use, goal, source, format, constraints) from the request and the workspace: README, rules files, manifests.
  2. Ask only for what is still open, in one message with a default per question (references/intake.md); nothing open → state the assumptions and go.
  3. Inspect the source before writing. Repo: run the commands you teach, keep real output. App: drive it, capture screens, copy exact labels. Topic: name your canon.
  4. Design the path backwards: the goal as a test the reader passes, then the 5–12 outcomes that make it true, each needing only earlier ones.
  5. Write every lesson to the contract: title as the outcome, why, exact steps, a check, and the trap that really happens.
  6. Build the chosen format (references/formats.md): copy the assets/ template, replace the content, keep its structure.
  7. Verify as the reader: phone and desktop widths, every command run, every link followed, every fact checked against step 3; then run scripts/check.mjs.
  8. Hand back the files, what was assumed, what only a human can fill in, and how to regenerate when the source changes.

Rules

  1. The reader's words, not the source's: plain language, sentence case, second person.
  2. Every sentence is true of the source as inspected; nothing from memory.
  3. What they already use decides what to skip; the goal decides where to stop.
  4. Real examples over abstract ones: the reader's own data or situation when known.
  5. Nothing private leaves the source: no credentials, customer names, or emails in text or images; placeholders instead.
  6. Limitations are stated as tips, never hidden, removed when they stop being true.
  7. One format per document, chosen for how it is read.
  8. The output stands alone: relative paths, no build step for a guide or deck.

Lesson contract

Every lesson carries, in this order:

  • Title — the outcome in the reader's words: "Request a meeting", not "Meetings module"
  • Why — one sentence tying it to the goal
  • Steps — numbered, imperative, one action each, with the exact label, command, or output
  • Check — "you're done when …", observable without help
  • Trap — the mistake that actually happens here, and its fix
  • Optional: a note (tip or stated limitation) and a media slot (screenshot, demo, diagram)

Formats

Format Pick when Output
Guide (default) The reader works through it alone, one sitting to a few hours One index.html (+ assets/): sticky nav, progress bar, lesson filter, lessons with steps, checks, traps, and media slots
Deck Someone presents or narrates it; 25 slides or fewer One deck.html: arrow-key and click navigation, progress, speaker notes, overview grid, prints one slide per page
Site Many lessons, ongoing reference, several readers, needs search Next.js app with markdown lessons in content/, sidebar, prev/next, client-side search, static export

Structure contracts, template placeholders, and the per-format checks live in references/formats.md; the templates in assets/guide.html, assets/deck.html, and assets/site/. Media is captured from the real source and redacted, never described from imagination. Define a term the first time only when the goal needs it; cut any lesson that serves the tool rather than the goal.

Examples

Good intake:  "Reader: new QA teammate who knows Playwright. Uses: this repo, macOS.
              Goal: run the smoke suite and file a vendor bug with evidence. Format: guide."
Bad intake:   "Reader: users. Goal: learn the app." — no test to pass, so no way to order or cut

Good title:   "Order food and pay the bill"        Bad: "Restaurant vocabulary" — a topic, not an outcome
Good step:    "Run `npm run test:web:smoke`; the last line reads `12 passed`."
Bad step:     "Run the tests and make sure they pass." — no command, no expected output
Good trap:    "Typing in the search box does nothing until you press the keyboard's search key."
Bad trap:     "Be careful with search." — nothing to recognise, nothing to do
Good check:   "You're done when the metro map on your phone shows your stop in Spanish."

Served from the uplift.page library and refreshed within 5 minutes of every update.