Collaborative plan review system with web UI. Use when entering plan mode or creating implementation plans. Enables users to view plans in browser, add inline comments by selecting text, and answer questions through a beautiful web interface.
Launches a web UI for collaborative plan review with inline commenting. Opens plans in browser when entering plan mode or creating implementation plans, enabling users to select text and add comments like Google Docs.
/plugin marketplace add SaharCarmel/Sahar-claude-code-marketplace/plugin install plan-collab@sahar-claude-code-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
scripts/add-question.jsscripts/cli.jsscripts/get-feedback.jsscripts/lib/config-store.jsscripts/lib/feedback-store.jsscripts/lib/server-manager.jsscripts/on-plan-write.shscripts/open-plan.jsscripts/package.jsonscripts/set-status.jsscripts/start-server.jsscripts/status.jsscripts/stop-server.jsscripts/sync-plan.jssettings-template.jsonwebapp/README.mdwebapp/bun.lockbwebapp/components.jsonwebapp/eslint.config.jswebapp/index.htmlA web interface for reviewing and commenting on Claude's implementation plans. Users can select text and add inline comments (like Google Docs), answer questions in a dedicated panel, and track plan versions.
Use this skill when:
# Start the web server (finds available port automatically)
cd ~/.claude/skills/plan-collab/scripts
node cli.js start-server
# Open a plan in the browser
node cli.js open-plan ~/.claude/plans/my-feature.md
After user has reviewed and added comments:
# Fetch pending comments and answers
node cli.js get-feedback
Output:
{
"planPath": "~/.claude/plans/my-feature.md",
"planName": "my-feature",
"pending": {
"comments": [
{
"selectedText": "use Redis for caching",
"comment": "Can we use Memcached instead?",
"status": "OPEN"
}
],
"answers": []
},
"summary": {
"totalComments": 1,
"openComments": 1,
"pendingComments": 1
}
}
node cli.js status
Before starting the server, ALWAYS check if it's already running:
node cli.js status
If server is running (response shows "running": true):
start-server - use the existing instancehttp://localhost:3847)open-planIf server is not running (response shows "running": false):
node cli.js start-serverNote: The
start-servercommand is idempotent - if the server is already running, it returns{"status": "already_running", ...}and exits safely. However, checking status first is more efficient and avoids unnecessary startup attempts.
| Command | Description | Example |
|---|---|---|
start-server | Start web server | node cli.js start-server |
stop-server | Stop server | node cli.js stop-server |
open-plan <path> | Open plan in browser | node cli.js open-plan ~/.claude/plans/feature.md |
get-feedback | Get pending comments | node cli.js get-feedback |
sync-plan [path] | Sync plan content | node cli.js sync-plan |
set-status <id|path> <status> | Set plan status | node cli.js set-status ~/.claude/plans/feature.md done |
status | Check server status | node cli.js status |
Plans in the queue have a status that tracks their lifecycle:
| Status | Meaning | Visual |
|---|---|---|
pending | Plan pushed, waiting for work | Normal appearance |
working | Agent actively working on plan | Blue badge, pulsing border |
updated | Plan content has been updated | Orange badge |
done | Work complete or user dismissed | Green badge, muted appearance |
open-plan: Status automatically set to workingupdatedset-status <path> doneUsers can manually mark plans as done or reactivate them via hover buttons in the web UI.
# Start working on a plan (sets status to 'working')
node cli.js open-plan ~/.claude/plans/my-feature.md
# ... do work ...
# Mark plan as done when complete
node cli.js set-status ~/.claude/plans/my-feature.md done
Claude's questions appear in a dedicated sidebar panel. Questions should use this format in the plan:
> [!QUESTION]
> Which database should we use: PostgreSQL or MySQL?
> - Option A: PostgreSQL (better JSON support)
> - Option B: MySQL (team familiarity)
Toggle dark/light mode with the button in the header.
Cmd+Enter / Ctrl+Enter: Submit commentEscape: Cancel comment~/.claude/plans/<plan-name>.mdnode cli.js status"running": false): node cli.js start-servernode cli.js open-plan <path>node cli.js get-feedbackAdd to .claude/settings.json for automatic browser opening:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "~/.claude/skills/plan-collab/scripts/on-plan-write.sh",
"timeout": 10
}
]
}
]
}
}
This automatically opens the browser when you write to ~/.claude/plans/.
~/.claude/plans/*.md~/.plan-collab/plan-collab.db~/.claude/plans/<name>.feedback.json# Install CLI dependencies (none required - uses Node.js built-ins)
cd ~/.claude/skills/plan-collab/scripts
# Install webapp dependencies
cd ~/.claude/skills/plan-collab/webapp
npm install
# Build for production
npm run build
All CLI commands output JSON. Errors include:
{ "error": "Error message here" }
Common errors:
Server not running: Run start-server firstPlan not found: Check file path existsNo active plan: Run open-plan first> [!QUESTION] blocks for structured questionsInclude Mermaid diagrams in plans to visualize complex concepts. The plan-collab web UI renders them beautifully.
| Type | Use Case | Example |
|---|---|---|
flowchart | System architecture, decision trees | Component relationships |
sequenceDiagram | API interactions, data flow | Request/response cycles |
stateDiagram-v2 | State machines, workflows | Order status transitions |
erDiagram | Database schema | Data model visualization |
flowchart TD
subgraph Frontend
A[React App] --> B[API Client]
end
subgraph Backend
C[Server] --> D[Database]
end
B --> C
sequenceDiagram
participant U as User
participant A as API
participant D as Database
U->>A: POST /data
A->>D: INSERT
D-->>A: Success
A-->>U: 201 Created
CLI commands should be run from:
~/.claude/skills/plan-collab/scripts/
Or use full paths:
node ~/.claude/skills/plan-collab/scripts/cli.js <command>
Use when working with Payload CMS projects (payload.config.ts, collections, fields, hooks, access control, Payload API). Use when debugging validation errors, security issues, relationship queries, transactions, or hook behavior.