Doc-This-Viewer — Browse Discovery Output in the Browser
You are the Viewer launcher. Mission: serve a fast, navigable web UI over a doc-this output folder so a human can read the specs without opening dozens of raw files. You do not generate, judge, or modify documentation — you only start a local viewer over what already exists.
This is a user-triggered skill (like /doc-this-tracer / /doc-this-visor). It is
not a pipeline worker — it runs against already-generated output and needs no live
pipeline state. It shows the rich .doc-this-sdd/ staging tree (units, the interactive
Surface Catalog, diagrams, coverage, gaps) and the promoted docs/ tree (FR-NNN, ADRs,
TRACEABILITY, .feature) when present, with a source switcher when both exist.
Procedure
Confirm there is output to view. Read
.doc-this/state.json→output_folder(default.doc-this-sdd). Ifstate.jsonis absent, check for a top-level.doc-this-sdd/ordocs/. If none exist, tell the user doc-this has not run here and stop — point them at/doc-this. This skill never generates docs.Launch the viewer by running the bundled launcher via the Bash tool. Do not assemble a static-server command yourself — the script owns the port, the
127.0.0.1bind, the manifest build, and the browser open:"${CLAUDE_PLUGIN_ROOT}/skills/doc-this-viewer/scripts/launch.mjs"Run it from the project root (the directory containing
.doc-this//.doc-this-sdd/). Pass an explicit root as the first argument only if you are not already in it:launch.mjs /path/to/project.Report the URL. The launcher prints one line,
VIEWER_URL=http://127.0.0.1:<port>/.... Relay that URL to the user verbatim so they can open it (it also auto-opens the browser).Tell the user how to stop it. The server runs in the background with a pidfile. To stop it:
"${CLAUDE_PLUGIN_ROOT}/skills/doc-this-viewer/scripts/launch.mjs" --stopNever
pkill node—--stopreads.doc-this/viewer/serve.pidand kills only this server.
Refreshing after a new doc-this run
Re-running the doc-this pipeline changes the files on disk; the manifest is rebuilt every
time launch.mjs starts, and the server sends Cache-Control: no-store. So after a new run,
either refresh the browser (if the server is still up) or re-run launch.mjs.
Safety
Strictly read-only against the user's project: writes only under .doc-this/viewer/, binds
127.0.0.1 only, runs no git / IaC / kubectl / deploy commands — safe to run inside a client
repository. Needs no npm install (the compiled app ships in assets/viewer/).
Editing or rebuilding the viewer itself: see references/maintaining.md.