Happy Path Works
Document Ops · setup guide · last updated October 29, 2026

Step-by-step procedures (SOP builder)

Describe how a task is done, in your own words, and get it back as a Word document in your brand: one card per step, each role in its own color, warnings where they matter, and your screenshots beside the steps they belong to. The skill checks the file before you get it.

Before you start

A Claude plan with code execution turned on (Setup, step 1), and the brand setup run once, so the document comes out in your logo, colors and font. Without the brand setup you still get a finished document, in plain neutral colors.

Add the skill

In the Claude web or desktop app, select Customize, then Skills › Add › Upload skill, and upload sop-docx.skill from your download. Every upload tested so far used the file renamed to sop-docx.zip; if the .skill file is not accepted, rename it and upload again. Setup walks through the screens.

Tested in Claude Code, the claude.ai web app and the Claude desktop app. See compatibility.

Ask for an SOP

Start a new chat and ask for it by name: “Build an SOP for…”. Then write down how the work is done: who does what, the steps in order, the exceptions, and anything that must not be done. Notes are fine. You do not need to format anything or explain what an SOP looks like.

If you have screenshots, attach them as PNG files and say which step each one belongs to. You can also attach an existing Word document and ask for its screenshots to be carried over.

If the brand setup gave you two files to keep, brand.json and logo.png, attach both to the chat with their names unchanged. That is how the skill finds your brand.

Ask for a one-page card and it hands you to the job aids skill instead. A PDF, a spreadsheet or a slide deck is another skill’s job too. If your notes have no steps or roles in them, it asks before turning them into an SOP rather than inventing steps.

What comes back

A Word file, named from your brand’s naming pattern, such as ROAST_OPS_Grinder_Calibration_SOP.docx. In the same reply Claude says which brand it used, or that it used the neutral colors, and whether it checked how the pages break.

Worked example

One request, typed into a new claude.ai chat with brand.json, logo.png and a screenshot of the calibration screen attached. ROAST WORKS is an invented coffee roastery.

What was typed

Build an SOP for grinder calibration. We're ROAST WORKS, Roasting Operations. It goes in the ROAST WORKS Operations Library and takes effect August 2026. Why we do it: it keeps the burr gap inside tolerance so extraction stays consistent across shifts. It applies to all three floor grinders. Run it at every bean-type changeover, and once a week regardless. Who does what: - Specialist: does the gap measurement and the test grind - Approver: signs off on any gap change over 15 microns The steps: 1. The Specialist locks out the grinder: switch it OFF at the wall isolator, put your personal lockout tag on, and make sure the hopper is empty before opening the burr chamber. Safety: never open the burr chamber while the isolator is live. The burrs can free-spin for up to 20 seconds after power-down. 2. The Specialist measures the current burr gap with the feeler gauge at the 12 o'clock position, records it, and compares it to the target for the bean that's loaded. Targets: espresso blend 220 µm, plus or minus 5; filter light roast 650 µm, plus or minus 15; cold brew coarse 1100 µm, plus or minus 30. If it's inside tolerance, stop there and log the reading. No adjustment needed. 3. The Specialist enters the new gap in Grinder Control and runs a test grind before saving. The system won't save a new value without one. The screenshot I attached goes with this step. If the change is within 15 µm: save it, log it on the calibration sheet, no approval needed. If it's over 15 µm: don't save, send it to the Approver with the before and after readings, and wait for written sign-off. 4. The Approver reviews the before and after readings and the test grind result, then approves in Grinder Control, which stamps the record and closes it. Calibration records are kept for 24 months, and the monthly audit samples five closed records at random. One more thing: a grinder that won't hold its gap across two calibrations in a row is a maintenance ticket, not a calibration problem. Tag it out and raise the ticket instead of running this a third time. I've attached our brand files (brand.json and logo.png) and the Grinder Control screenshot.

What came back

[…] ROAST_OPS_Grinder_Calibration_SOP.docx Brand kit: your attached brand.json and logo.png (ROAST prefix, OPS segment) sop_check: PASS, exit 0. Naming, role colors, the one-stop-alert limit, width budget, font, footer and logo all checked. Pagination: rendered via LibreOffice to 2 pages, with no step card split across a page break. The four steps are yours, in your order. The lockout warning is the only red STOP box. The bean targets sit in a table in step 2. The screenshot and the within/over 15 µm fork are in step 3. Retention is in step 4. The “won’t hold its gap” rule is the closing note. The checker doesn’t verify that the steps themselves are correct, so give the targets and tolerances one last look before this goes into the Library.

The file: ROAST_OPS_Grinder_Calibration_SOP.docx, 2 pages.

Page 1 of the grinder calibration SOP that request produced

Page 1 of what came back.

What gets checked

Before you get the file, the skill checks it. The file goes out only when every check passes:

  • the file name follows your brand’s naming pattern;
  • every step has an owner listed under Who Does What, and every role listed there owns at least one step;
  • each role keeps the same color everywhere it appears;
  • there is at most one red stop warning, so it keeps its weight;
  • nothing inside a step card is too wide for it, so the colored bar down each card stays visible;
  • the page is US Letter in your brand’s font, the logo is your brand’s, and the footer names the file;
  • text on a colored background has enough contrast to read.

What no check can tell you: whether the steps are right, and whether the right people own them. Read it before you send it.

If it looks wrong

It says the skill’s files are missing. Once in testing, a chat loaded the skill’s instructions without its files. Claude stopped and said so rather than build an unchecked copy. The same request in a new chat worked.

It is in plain colors, not your brand. The skill did not find your brand, so it used the neutral defaults on purpose. Attach brand.json and logo.png and ask again. If you do not have them, run the brand setup first.

It asked whether you really want an SOP. Your notes did not have steps or roles for it to carry over. Add who does what and the steps, or tell it to go ahead.

Claude answered like a normal chat. Ask for the SOP by name. If it still does not start, see Setup, “When it doesn’t work”.

Using Claude Code instead

Extract the .skill file into your skills folder: ~/.claude/skills/ for every project, or .claude/skills/ inside one. A .skill file is a zip under another name. A skill in that folder does not reach your claude.ai account, and one on your account does not reach that folder.

Needs Node on the machine; the pack is tested on Node 20 and Node 24. Nothing else to install: the one library the skill uses ships inside it.

The skill reads your brand from brand.json and logo.png, looking in this order and stopping at the first hit: the path in HPW_BRAND_KIT, the folder you build from, any folder above it, then the neutral defaults. It never reads a brand from inside an installed skill folder.

To confirm the install, run this from the folder you will build in. Exit 0 means every file is present:

$ node <skill folder>/check_deps.js

To prove it end to end, build the shipped sample from a folder outside the skill. It builds the sample and checks it; expect PASS — clean:

$ node <skill folder>/examples/sop-sample/build_sample_sop.js