Spec Viewer CLI for Claude Code
Paste https://docs.specs.wseng.ai/llms.txt into Claude Code and follow the steps in order. Install is GitHub Packages only. There is no public npm package and no hosted binary.
The viewer host is https://specs.wseng.ai. This documentation site is not the viewer.
Prerequisites
You need gh (GitHub CLI), Node 22 or newer, and jq.
Install
A default gh auth login does not grant read:packages. Refresh the token first:
gh auth refresh -h github.com -s read:packages
Point npm at GitHub Packages for the @trilogy-group scope, using that token, then install:
npm config set @trilogy-group:registry https://npm.pkg.github.com
npm config set //npm.pkg.github.com/:_authToken "$(gh auth token)"
npm install -g @trilogy-group/wsspec
Sign in
wsspec auth login
This opens a browser for Cognito OAuth. The session is stored in ~/.wsspec and reused. The CLI talks to https://api.specs.wseng.ai by default.
Folder convention
Publish into the caller's personal One-Off Specs project (@me). Arrange work as folders with an index markdown file:
skills/<name>/index.md
Use the same shape for other kinds (brainlifts/<name>/index.md, examples/<name>/index.md). A document title is the YAML front-matter title: or name:, otherwise the first # H1, otherwise the filename. Nested folders become navigation folders. Upload accepts .md, images (.png .jpg .jpeg .gif .svg .webp), .html, video (.mp4 .webm), .txt, .json, and .xml.
Publish
wsspec project upload @me ./skills --path skills/
Human output ends with Committed N specification(s). It does not print a viewer URL.
Return the share URL
VIEWER=https://specs.wseng.ai
SLUG=$(wsspec project view @me --json | jq -r .githubSlug)
echo "$VIEWER/$SLUG/skills/my-thing/index.md"
Give that URL to the user. Colleagues who are signed in can open it. Replace skills/my-thing/index.md with the path you actually uploaded.
Comments
Given that viewer URL:
wsspec thread list "https://specs.wseng.ai/<slug>/skills/my-thing/index.md"
wsspec thread reply "https://specs.wseng.ai/<slug>/skills/my-thing/index.md" --thread-id <id> --content "your reply"
Use the Thread ID from thread list. Do not combine a viewer URL with --path.
Non-production viewer
To target a PR or integration API, set WSSPEC_API_URL and keep composing share URLs with that environment's viewer host. Both hosts must move together.
- Production: viewer
https://specs.wseng.ai, APIhttps://api.specs.wseng.ai - A PR environment: viewer
https://specs-pr194.wseng.rp.devfactory.com, APIhttps://api-specs-pr194.wseng.rp.devfactory.com
export WSSPEC_API_URL=https://api-specs-pr194.wseng.rp.devfactory.com
Then run wsspec auth login against that API before uploading.