Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/alaliqing/claude-paper/webuigit clone --depth 1 https://github.com/alaliqing/claude-paperWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/alaliqing/claude-paper/webui)<a href="https://agentmods.dev/commands/alaliqing/claude-paper/webui"><img src="https://agentmods.dev/badge/commands/alaliqing/claude-paper/webui.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00006 | $0.00951 |
| Opus 5 | $0.00003 | $0.00476 |
| Sonnet 5 | $0.00001 | $0.00190 |
| Haiku 4.5 | $0.00001 | $0.00095 |
Grade C, and why
webui scanned grade C with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
rm -rf node_modules package-lock.json Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
if curl -s http://localhost:5815/api/papers > /dev/null 2>&1; then How it starts
The opening of the file, as written. The whole thing — 128 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Your task
Start the Claude Paper web viewer using the production Nuxt.js server.
Step 1: Check and Install Dependencies (First Run Only)
if [ ! -f "${CLAUDE_PLUGIN_ROOT}/src/web/node_modules/.package-lock.json" ] || [ ! -d "${CLAUDE_PLUGIN_ROOT}/src/web/node_modules/@nuxt" ]; then
if [ ! -d "${CLAUDE_PLUGIN_ROOT}/src/web/node_modules/@nuxt" ]; then
echo "ERROR: node_modules is corrupted, performing clean install..."
cd "${CLAUDE_PLUGIN_ROOT}/src/web"
rm -rf node_modules package-lock.json
npm install
echo "Web dependencies installed!"
else
echo "First run - installing web dependencies..."
cd "${CLAUDE_PLUGIN_ROOT}/src/web"
npm install
echo "Web dependencies installed!"
fi
else
echo "Dependencies already installed"
fi
Step 2: Build Production Server (auto-rebuilds on plugin update)
cd ${CLAUDE_PLUGIN_ROOT}/src/web
PLUGIN_VERSION=$(node -e "console.log(require('${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json').version)")
BUILD_VERSION=""
if [ -f ".output/.build-version" ]; then
BUILD_VERSION=$(cat ".output/.build-version")
fi
if [ ! -f ".output/server/index.mjs" ] || [ "$PLUGIN_VERSION" != "$BUILD_VERSION" ]; then
echo "Building production server (v${PLUGIN_VERSION})..."
npm run build
echo "$PLUGIN_VERSION" > .output/.build-version
echo "Build complete!"
else
echo "Production build is up to date (v${BUILD_VERSION})"
fi
Step 3: Check Port Availability
# Get version info for comparison
PLUGIN_VERSION=$(node -e "console.log(require('${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json').version)")
BUILD_VERSION=""
if [ -f ".output/.build-version" ]; then
BUILD_VERSION=$(cat ".output/.build-version")
fi
if lsof -i :5815 > /dev/null 2>&1; then
echo "INFO: Port 5815 is already in use"
PID_FILE="/tmp/claude-paper-webui.pid"
if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null; then
# Check version match - restart if plugin was updated
if [ "$PLUGIN_VERSION" = "$BUILD_VERSION" ]; then
echo "Claude Paper web UI is already running (version ${PLUGIN_VERSION})"
echo "Access it at: http://localhost:5815"
exit 0
else
echo "Version mismatch: running ${BUILD_VERSION}, need ${PLUGIN_VERSION}"
echo "Stopping old server..."
kill $(cat "$PID_FILE") 2>/dev/null
sleep 2
rm -f "$PID_FILE"
echo "Old server stopped, will restart with new version"
fi
else
echo "ERROR: Port 5815 is occupied by another process"
exit 1
fi
fi
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 128 lines · 6 tokens per session scan C 33238ccd42c6
webui is a command published in the GitHub repository alaliqing/claude-paper (333 stars, last pushed 20d ago), licensed MIT. It adds 6 tokens to every session and 951 once invoked, about $0.0000 per session on Opus 5. A static security scan graded it C with 2 findings (recursive force delete, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
install-context
Install OpenAgents Control context files.
fix
Auto-fix linting, formatting, and common issues.
doctor
Run the specrails health check to validate that all prerequisites are correctly configured for this repository.
status
Pipeline status for a spec/feature — or, with no slug, the whole-project delivery report (every spec/backlog/quick-task + GitHub/Linear cross-ref).
plan
Run the PO Phase pipeline for a single feature (db-agent → designer-agent → specification-agent).
review
Review current changes for correctness, style, and potential issues.