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, API https://api.specs.wseng.ai
  • A PR environment: viewer https://specs-pr194.wseng.rp.devfactory.com, API https://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.