For agents

Showsteps for agents

A person records a task in the Chrome extension. You, an agent, can read, fix, export and create guides from files, with no network, no account and no API key. The same text is in AGENTS.md in the repo and in llms.txt.

What you can do

  • Validate and inspect a guide file.
  • Rewrite step titles and descriptions, hide steps, regenerate titles.
  • Export Markdown, self-contained HTML, PDF, DOCX, a Playwright script, or a replayable agent skill.
  • Create a guide from steps you write (no screenshots needed), then hand the file to a person to open in the extension.

Everything works offline on local files. Passwords and other sensitive fields are never stored in a guide: typed values in those fields are masked as ••• and no tool prints them.

Files

A guide is either:

  • something.showsteps: a zip with guide.json and images/<stepId>.png, or
  • a bare guide.json. Screenshots are picked up from an images/ folder next to it, if present.

Every command and tool accepts both. The schema is versioned (v1). Key fields: title, and steps[] withid, action, target (name, role, locators), title, description,page.url and skipped. The steps.json written by the skill export follows a JSON Schema served at /schema/steps.schema.json.

CLI

shell
npx -y @showsteps/cli --help
CommandWhat it does
showsteps validate <file> [--json]Checks the file against the schema. Exit 1 lists every problem.
showsteps info <file> [--json]Title, step counts, actions, pages, sensitive steps, screenshot counts.
showsteps steps <file> [--json]Steps with id, title, action, target, skipped and sensitive flags.
showsteps edit-step <file> --id <id> [--title T] [--description D] [--skip|--unskip] [--out F]Edit one step. Overwrites the file unless --out is given.
showsteps regen-titles <file> [--out F]Regenerate generated titles. Hand-edited titles are kept.
showsteps export <file> --format md|html|pdf|docx|playwright|skill|all --out <dir> [--no-images] [--credit] [--json]Write exports. Comma lists work: --format md,pdf. Exports carry no Showsteps branding unless you pass --credit.
showsteps new --from-steps <steps.json> --out <file.showsteps> [--title T]Create a guide from a step list.

Rules you can rely on

  • --json prints exactly one JSON object on stdout and nothing else. It always has "ok": true|false. Failures look like {"ok": false, "error": {"code": "invalid|usage|io", "message": "...", "errors": [...]}}.
  • Human messages and errors go to stderr.
  • Exit codes: 0 ok, 1 invalid input (bad guide, unknown step id, bad steps file), 2 usage error, 3 file error (missing or unwritable path).
  • Relative paths resolve against the current directory.
  • SOURCE_DATE_EPOCH fixes timestamps written by new and by edits, for reproducible output.

Export layout

FormatFiles written to --out
mdguide.md, images/*.png
htmlguide.html (one file, images inlined, print-ready)
pdfguide.pdf
docxguide.docx
playwrightreplay.spec.ts
skillskill/SKILL.md, skill/steps.json, skill/replay.spec.ts

--json returns {"ok": true, "files": ["/abs/path", ...]}. Steps with skipped: true are left out of every export.

Worked example

Every block below marked as runnable is executed by our checks, in this order, in an empty folder, and its output is compared with the command line's own golden files. Run them yourself in an empty folder and you get the same results. Paths in the output are absolute, so yours will differ.

1. Write a guide from scratch

steps.json can be an array, or an object with a title and steps:

steps.json
{
  "id": "g_from_steps",
  "title": "Reset a password",
  "description": "Written by an agent.",
  "steps": [
    { "action": "navigate", "url": "https://app.example.test/login", "page": { "url": "https://app.example.test/login", "title": "Sign in" } },
    { "action": "click", "target": "Forgot password" },
    { "action": "type", "target": "Email", "value": "jane@example.test" },
    { "action": "type", "target": "New password", "masked": true },
    { "action": "click", "target": "Reset password" },
    { "action": "note", "title": "Check your inbox for the confirmation email.", "description": "It arrives within a minute." }
  ]
}
shell
showsteps new --from-steps steps.json --out made.showsteps --json

Step fields: action (navigate, click, type, select, check,press, scroll, hover, note), title (generated when omitted, required fornote), description, target, url, value, optionText, key,checked, masked, page and skipped. Later steps inherit the last URL. Titles you give are treated as hand-edited and survive regen-titles. Every problem in the file is reported at once, so fix them in one pass.

Guides made this way have no screenshots. Exports still work, and a person can open the file in the extension to review it.

2. Check and inspect it

shell
showsteps validate made.showsteps --json
shell
showsteps info made.showsteps --json
shell: the step ids come from here
showsteps steps made.showsteps --json

3. Fix wording, then export

shell
showsteps edit-step made.showsteps --id s3 --title "Enter your work email" --description "Use the address you signed up with." --out reviewed.showsteps --json
shell: the title you edited is kept
showsteps regen-titles reviewed.showsteps --out regenerated.showsteps --json
shell: writes out/guide.md, out/images and out/skill
showsteps export reviewed.showsteps --format md,skill --out out --json

4. What a failure looks like

A steps file is not a guide, so validating it fails. Exit code 1, one JSON object on stdout, the reasons on stderr:

shell (exits 1)
showsteps validate steps.json --json
shell: every command and option
showsteps --help

MCP server

showsteps-mcp speaks MCP over stdio. It needs no network and no keys. Files are passed by absolute path.

Claude Code
claude mcp add showsteps -- npx -y @showsteps/mcp
Claude Desktop (claude_desktop_config.json) and Cursor (.cursor/mcp.json)
{
  "mcpServers": {
    "showsteps": { "command": "npx", "args": ["-y", "@showsteps/mcp"] }
  }
}
ToolInputsReturns
validate_guidepath{valid, steps} or {valid: false, errors}
guide_infopathTitle, counts, actions, pages, sensitive steps
list_stepspath, include_skipped?Ordered steps with ids
edit_steppath, step_id, title?, description?, skipped?, out_path?Updated step and changed fields
regenerate_titlespath, out_path?Number of titles changed
export_guidepath, format, out_dir, include_images?, credit?Absolute paths written
create_guide_from_stepsout_path, title, steps[], description?, start_url?Path, id, step count

Results are JSON in both the text content and structuredContent. Invalid guide content is reported as data byvalidate_guide. Everything else that fails (missing file, unknown step id, relative path, malformed steps) returnsisError: true with an error.code of invalid, usage or io and the list of problems.

edit_step and regenerate_titles overwrite the file unless you pass out_path. Preferout_path when a person has not asked you to change the original.

Working with people

The recording is a human’s account of a task. A sensible split: you fix wording, structure and exports; the person reviews screenshots and redactions in the extension (.showsteps files open there directly) before sharing. Send them the file path, not the contents.

See also: record a workflow as an agent skill and convert clicks to a Playwright test.