---
description: Show the health of launch-kit's daemon-style MCPs (today just launch-recall). Default output is a terse one-line summary per daemon; pass `full` for expanded details — PID, pidfile, last snapshot, debounce, shadow repo size, recent activity. Read-only; never mutates state.
---

# /kit:show-mcp-status

Reports the liveness and recent activity of launch-kit's long-running MCP daemons. The recall watcher is the only daemon today; this command is structured so additional daemons can be added without changing its interface.

Read $ARGUMENTS to decide output verbosity:
- empty (`/kit:show-mcp-status`) → terse one-liner per daemon. Goal: fits in one or two visual lines.
- `full` (`/kit:show-mcp-status full`) → expanded report per daemon. Goal: enough detail to diagnose health problems.

## Preflight

1. Verify the launch-recall MCP is wired by attempting `mcp__launch-recall__recall_status` (or `mcp__local-launch-recall__recall_status` for dev repos). If neither is callable, **alert the user verbatim**: `"launch-recall MCP not wired in this project — nothing to report. (Skill is MCP-first; no shell fallback for daemon status.)"` and stop.
2. Pick whichever recall MCP is available. Prefer the project-level published one (`mcp__launch-recall__*`) unless only the local dev one is wired.

## Daemons

Today: **launch-recall** (the shadow-git file watcher).

Structure your output so adding more daemons later is a copy-paste — one section per daemon, same shape.

## Default output (no arguments)

Call `mcp__launch-recall__recall_status`. Format as ONE LINE per daemon, then a single summary line. Example:

```
recall    ✓ alive  pid 12456  last snap 2m ago

All daemons healthy.
```

Or if dead:

```
recall    ✗ dead   pidfile missing/stale

1 daemon down. Run /kit:show-mcp-status full for details, or restart the watcher (kill any stale pid, then either start a new Claude Code session — the SessionStart hook respawns it — or run `npx -y -p @launchsecure/launch-kit launch-recall watch` from the project root).
```

Rules for the default view:
- One line per daemon — name, glyph, status word, key metric.
- `✓` (green) for alive, `✗` (red) for dead.
- "X ago" for timestamps — relative time, easier to scan than ISO.
- Summary line on a fresh line at the end. If anything is wrong, include a one-sentence recovery hint.
- No JSON, no PID files paths, no debug info — that's for `full`.

## Full output (`/kit:show-mcp-status full`)

For each daemon, call BOTH `recall_status` AND `recall_report`. Combine into a per-daemon block:

```
recall — launch-recall watcher (shadow-git backup)

  Status:        ✓ alive
  PID:           12456
  Watch tree:    /Users/prajyot/Documents/Work/AutomateWithUs/launchsecure-v2
  Shadow repo:   /Users/prajyot/Documents/Work/AutomateWithUs/launchsecure-v2/.recall/repo.git

  Last snapshot: 2026-05-21T12:05:45+05:30 (2m ago)
  Total snaps:   1,247
  Shadow size:   1.4 MB
  Debounce:      3000ms
  Retention:     keepLast 5000, maxAgeDays 30

  Recent activity (last 5 snaps):
    a1b2c3d  2m ago     snap 2026-05-21T06:35:45Z
    9f8e7d6  14m ago    snap 2026-05-21T06:21:42Z
    2557799  53m ago    snap 2026-05-21T05:52:35Z
    8349edb  17h ago    snap 2026-05-20T13:36:39Z
    e5a05cf  17h ago    snap 2026-05-20T13:32:05Z

All daemons healthy.
```

If a daemon is dead, the block should still appear but with status `✗ dead` and as many fields as can be derived from the on-disk shadow repo + pidfile. Include a concrete recovery command at the end of the block (the same SessionStart restart path from the default view, plus the manual command for impatient users).

Rules for the full view:
- Two-column field labels — visually aligned, easier to skim.
- Times: ISO timestamp + relative ("2m ago") in parens.
- Sizes: human-readable (KB/MB), not bytes.
- Last 5 snapshots only — newer first.
- One blank line between daemon blocks (for when there are more than one).
- Summary line at the end, same as the default view.

## Health classification

Use these rules to decide alive vs dead vs degraded:

- **alive**: `recall_status.running === true` AND `lastSnapshotAt` is within the last 6 hours (heuristic — for an active repo, snaps happen every few minutes; 6h of silence suggests the watcher is wedged or no files have changed, both worth surfacing).
- **dead**: `recall_status.running === false` OR `recall_status` errors out.
- **degraded** (still print as alive but note it): `running === true` BUT `lastSnapshotAt` is older than 6h. Add a single inline note `(no activity in 6h — possibly idle or wedged)`.

Don't over-warn — if a repo has genuinely been idle (e.g. you opened it for the first time today after a week), a 6h+ gap is normal. The note is informational, not an error.

## Constraints

- **Read-only.** This command never mutates state, never restarts watchers, never modifies config. Recovery is a recommendation in the output, not an automatic action.
- **Fast.** Default view should be sub-second. The MCP tools are cheap; don't add scrubbing or heavy formatting.
- **Plain text.** No markdown headers, no fenced blocks in the actual output — Claude Code renders them but the human eye scans monospace plain text fastest.
- **Output what the user asked for.** If they ran the default, don't dump the full report "just in case." If they ran `full`, don't abbreviate.

## Notes for the assistant

- **MCP-first, no shell fallback.** Use the wired `launch-recall` MCP tools — do NOT shell out to `node packages/cli/dist/server/recall-entry.js status` or `ps`-based liveness checks. If the MCP isn't wired, the preflight step already stops the skill — no silent grep/find.
- When listing recent snaps, use the `recentSnapshots` array from `recall_report`. It's already sorted newest-first; just truncate.
- For "X ago" formatting, do the math yourself. Don't fetch any time service.
- If you find yourself wanting to add features beyond status display (restart the watcher, prune snaps, etc.) — stop. Those belong in separate `/kit:*` skills. This one is a status pane.
