Files
Claude-Code-Monitor/plugins/ccam/commands/ccam-open.md
T
nntrivi2001 8a82895c65 feat(plugins): make CCAM installable straight from a Claude Code plugin
Adds a root `ccam` plugin (`.claude-plugin/plugin.json`, `"source": "./"`) so
`/plugin marketplace add` + `/plugin install ccam@...` is enough on a machine
with nothing but Claude Code: no clone, no npm run setup, no manual npm start.

- scripts/plugin-bootstrap.js: SessionStart hook. Fast-path exit, Node >=22.5
  gate (node:sqlite), mkdir lock with stale reclaim, deps installed into
  ~/.claude/agent-dashboard/runtime/ (never the plugin cache), legacy
  checkout-hook cleanup (backed up), ~/.local/bin/ccam launcher, eager UI
  build so client routes like /run work immediately, detached server spawn.
- scripts/plugin-open.js, scripts/plugin-doctor.js: /ccam-open, /ccam-doctor.
- server/index.js: DASHBOARD_CLIENT_DIST override (plugin cache is read-only).
- mcp/build/ is committed (plugin MCP servers start before any bootstrap could
  build them) and kept honest by scripts/check-mcp-build.js (content hash,
  not mtime), enforced by pre-commit when mcp/src changes.
- plugins/ccam-dashboard/.mcp.json moved under plugins/ccam/ with a working
  ${CLAUDE_PLUGIN_ROOT} path (the old relative path never resolved from a
  marketplace-cached subdir).
- Docs: README, INSTALL, SETUP, ARCHITECTURE, CLAUDE.md, docs/PLUGINS.md,
  docs/MCP.md, docs/CLI.md, docs/HOOKS.md.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-10 16:05:37 +07:00

893 B

description
description
Build the dashboard UI if needed and print its URL

Build the dashboard bundle if it is not there yet, then print the URL. The bootstrap already builds it on session start, so this is usually a no-op — use it to force a rebuild, or to finish the build if the bootstrap's own attempt failed (check ~/.claude/agent-dashboard/runtime/client-build.log).

node "${CLAUDE_PLUGIN_ROOT}/scripts/plugin-open.js"

The first run installs the client toolchain and takes a few minutes; later runs print the URL immediately. No server restart is needed — the server already serves from that directory.

Then help the user open it:

uname -s
  • Darwinopen <url>
  • Linuxxdg-open <url>
  • otherwise → tell them to open the URL in a browser.

Keep the output to a few lines. Pass --force to the script only if the user asks for a rebuild.