ワンクリックで
dashboard
Launch the browser-based dev dashboard — live git status, service log viewer, and external service health monitoring.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Launch the browser-based dev dashboard — live git status, service log viewer, and external service health monitoring.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Create an Azure DevOps pull request from the current branch. Default target is development, but if on development branch, creates PR to main. Extracts work item ID from branch name, generates PR title and description from commits, and links the work item to the PR.
Generate cross-repo release notes by scanning git logs across montra-via-api, montra-via-web, and montra-via-db. Enriches entries with ADO work item titles, bumps the web repo version, generates release notes markdown, updates releases.json, and creates a release PR targeting development.
Show a snapshot of all sibling repos — current branch, changed file count, and untracked/uncommitted file status. Also provides a standalone live dashboard script.
| name | dashboard |
| description | Launch the browser-based dev dashboard — live git status, service log viewer, and external service health monitoring. |
| allowed-tools | Bash |
Launch the Montra.io dev dashboard in the browser. The dashboard runs as a fully detached process — it survives Claude session restarts, context compression, and new conversations. Installs dependencies on first run.
Arguments: $ARGUMENTS
if [[ -d "/c/Users/Ryan Gordon/Projects/claude-shared" ]]; then
DASHBOARD_DIR="/c/Users/Ryan Gordon/Projects/claude-shared/scripts/dev-dashboard"
elif [[ -d "/Volumes/ext2G/Developer/montraio/claude-shared" ]]; then
DASHBOARD_DIR="/Volumes/ext2G/Developer/montraio/claude-shared/scripts/dev-dashboard"
else
echo "ERROR: Cannot locate claude-shared directory" && exit 1
fi
$ARGUMENTS contains a number, use it as the port. Otherwise default to 3333.$ARGUMENTS contains stop or kill, stop any running dashboard process and exit.$ARGUMENTS contains status, check if the dashboard is running and report back.Before launching, check if the dashboard port is already in use.
On Windows:
netstat -ano 2>/dev/null | grep ":$PORT " | grep "LISTENING" | awk '{print $5}' | head -1
On macOS (use -sTCP:LISTEN to match only the server, not browser clients):
lsof -t -i :$PORT -sTCP:LISTEN 2>/dev/null
If the port is in use and the user did NOT ask to stop/kill/restart:
http://localhost:<PORT> and exit.If the user asked to stop, kill, or restart the dashboard:
On macOS (only kill the LISTEN process, not browser clients connected to it):
lsof -t -i :$PORT -sTCP:LISTEN 2>/dev/null | xargs kill 2>/dev/null || true
On Windows:
PID=$(netstat -ano 2>/dev/null | grep ":$PORT " | grep "LISTENING" | awk '{print $5}' | head -1)
if [[ -n "$PID" ]]; then
cmd //c "taskkill /T /F /PID $PID" 2>/dev/null || true
fi
If the user only asked to stop/kill, report that the dashboard was stopped and exit. If the user asked to restart, continue to the Launch step.
cd "$DASHBOARD_DIR"
if [[ ! -d "node_modules" ]]; then
npm install
fi
The dashboard MUST be launched as a fully detached process that is NOT tied to Claude Code's process tree. This is critical — using run_in_background: true will cause the dashboard to die when the Claude session ends.
Both Windows (Git Bash) and macOS use the same approach — background with & and disown:
cd "$DASHBOARD_DIR" && PORT=$PORT node server.mjs > dashboard.log 2>&1 &
disown $! 2>/dev/null || true
Run this using the Bash tool (NOT run_in_background: true — let the launch command return immediately on its own). The & backgrounds the process and disown detaches it from the shell so it survives session cleanup.
Wait 2 seconds, then verify the port is now in use (same check as "Check if Already Running"). If the port is not in use, read the last 20 lines of dashboard.log and report the error.
After the dashboard is confirmed running, check if the Web and API dev servers are already running by checking their ports (8080 for web, 7600 for API).
On Windows:
WEB_PID=$(netstat -ano 2>/dev/null | grep ":8080 " | grep "LISTENING" | awk '{print $5}' | head -1)
API_PID=$(netstat -ano 2>/dev/null | grep ":7600 " | grep "LISTENING" | awk '{print $5}' | head -1)
On macOS:
WEB_PID=$(lsof -t -i :8080 -sTCP:LISTEN 2>/dev/null)
API_PID=$(lsof -t -i :7600 -sTCP:LISTEN 2>/dev/null)
For services that are NOT already running, launch them in split panes within a single terminal tab so they're grouped together. The first service opens a new tab; subsequent services split within that tab.
On Windows (Git Bash):
FIRST_LAUNCH=""
if [[ -z "$WEB_PID" ]]; then
wt.exe -w 0 new-tab --title "Montra Services" "C:\Program Files\Git\bin\bash.exe" "C:\Users\Ryan Gordon\Projects\claude-shared\scripts\dev-dashboard\run-web.sh"
FIRST_LAUNCH="done"
sleep 1
fi
if [[ -z "$API_PID" ]]; then
if [[ -z "$FIRST_LAUNCH" ]]; then
wt.exe -w 0 new-tab --title "Montra Services" "C:\Program Files\Git\bin\bash.exe" "C:\Users\Ryan Gordon\Projects\claude-shared\scripts\dev-dashboard\run-api.sh"
else
wt.exe -w 0 split-pane --horizontal --title "Montra API" "C:\Program Files\Git\bin\bash.exe" "C:\Users\Ryan Gordon\Projects\claude-shared\scripts\dev-dashboard\run-api.sh"
fi
fi
On macOS:
if [[ -z "$WEB_PID" ]]; then
osascript -e "tell application \"Terminal\" to do script \"bash '$DASHBOARD_DIR/run-web.sh'\""
fi
if [[ -z "$API_PID" ]]; then
osascript -e "tell application \"Terminal\" to do script \"bash '$DASHBOARD_DIR/run-api.sh'\""
fi
Report which services were launched and which were already running.
After a successful launch, tell the user:
Dev Dashboard running at http://localhost:<PORT> (detached — survives session restarts)
Services (split panes in a single "Montra Services" tab):
- Web :8080 — <launched | already running>
- API :7600 — <launched | already running>
Features:
- Git status for all core repos (refreshes every 5s)
- External service monitoring: Montra Dev/Prod, Azure DevOps, Claude (refreshes every 30s)
- Alarm sounds when a service goes down — mute per-service from the dashboard
- Live log streaming from Web and API (via ~/.montra/logs/)
- Live-reload: CSS changes hot-swap instantly, JS/HTML changes auto-refresh the browser
Stop with: /dashboard stop
run_in_background: true — the process must be detached from Claude's process treedashboard.log in the dashboard directory for debugging~/.montra/logs/web.log and ~/.montra/logs/api.logrun-web.sh, run-api.sh) run as split panes in a single "Montra Services" terminal tab — closing the tab stops both servicesfs.watch + polling fallback--watch with the dashboard — it causes EADDRINUSE crashes when files are edited during a session. If you need to restart after code changes, use /dashboard stop then /dashboard.