Mushi Health Check
Degree of freedom: MIXED. First-red diagnosis [HIGH freedom];
Steps 1–6 in order [LOW freedom — run exactly].
How to reason
- Observe —
doctor,deploy check, keys, logs, cron — in that order - Interpret — first red is root vs downstream symptom
- Classify — creds / functions-down / keys / logs / cron-missing
- Severity — paused project or invalid API key outranks a quiet QA cron on a new project
Worked example
Observe:
mushi doctorgreen;mushi deploy check✗qa-story-runner;qa_story_runsempty for 2h. Interpret: first red is the runner; empty cron is downstream. Classify: function-down — checkget_logsforqa-story-runner; do not add keys yet. Verify: stop at Step 2; fix the runner; continue remaining steps only after it is green.
Self-critique before reporting
- In order — did not skip ahead of the first ❌
- Evidence — each row cites command output or a query, not memory
- Stopped to fix — first red was remediated before later steps
- Right owner — e2e loop proof →
mushi-integration; targeted diagnosis →diagnose_setup
Run these checks in order. Stop and fix at the first ❌ before continuing.
Component map
| # | Component | How to check |
|---|---|---|
| 1 | CLI credentials | mushi doctor |
| 2 | API + edge functions | mushi deploy check |
| 3 | Project overview | mushi status |
| 4 | BYOK key pool | mushi keys list or MCP list_byok_keys |
| 5 | Supabase logs | Supabase MCP get_logs |
| 6 | QA cron running | DB query on qa_story_runs |
Step 1 — CLI credentials [LOW freedom — run exactly]
mushi doctor
Expected output — all lines green:
✓ ~/.mushirc found
✓ MUSHI_API_KEY valid (mushi_...)
✓ MUSHI_API_ENDPOINT reachable (200 OK)
✓ MUSHI_PROJECT_ID matches a live project
✓ Feature flags fetched
Fix if red: Re-run mushi login --api-key mushi_... --endpoint https://<ref>.supabase.co/functions/v1/api --project-id <pid>.
Step 2 — API + edge functions [LOW freedom — run exactly]
mushi deploy check
Probes each edge function with a lightweight ping. Healthy output:
✓ api
✓ classify-report
✓ fix-worker
✓ story-mapper
✓ test-gen-from-story # Mushi edge function, not a pack skill
✓ pdca-runner
✓ qa-story-runner
A ✗ on any line means that function is down. Check its logs in Step 5.
Step 3 — Project overview [LOW freedom — run exactly]
mushi status
Confirm:
- Report count is non-zero (or expected zero for a brand-new project).
autofix_agentshows the expected agent (cursor_cloud,mcp, etc.).- No
billing: quota_exceededwarning.
Step 4 — BYOK key pool [LOW freedom — run exactly]
Via CLI:
mushi keys list
Via MCP (if the Mushi MCP server is active in Cursor):
list_byok_keys(projectId)
Healthy: at least one anthropic key with status=active, at least one firecrawl key with status=active.
Fix: Add a missing or exhausted key:
mushi keys add --provider anthropic --key sk-ant-... --label "primary" --priority 100
mushi keys add --provider firecrawl --key fc-... --label "primary" --priority 100
Step 5 — Supabase edge function logs [LOW freedom — run exactly]
Use the Supabase MCP (requires SUPABASE_ACCESS_TOKEN in MCP config):
get_logs(service: 'api')
Look for ERROR lines in the last 15 minutes, especially from these
Mushi edge functions (not pack skills):
story-mapper— Firecrawl timeout or Claude quotatest-gen-from-story— LLM key exhaustedpdca-runner— failed PDCA cycleqa-story-runner— Browserbase quota or Firecrawl error
If the Supabase MCP is not wired in Cursor, use the CLI:
supabase functions logs story-mapper --project-ref <ref>
supabase functions logs qa-story-runner --project-ref <ref>
Step 6 — QA cron running [LOW freedom — run exactly]
Verify scheduled tests are executing (requires Supabase MCP):
SELECT status, COUNT(*)
FROM qa_story_runs
WHERE created_at > NOW() - INTERVAL '2 hours'
GROUP BY status;
Healthy output: at least one completed row in the last 2 hours (if you have enabled stories).
If qa_story_runs is empty:
- Confirm at least one story has
enabled = trueandapproval_status = 'approved'. - Confirm the pg_cron job is registered:
SELECT jobname, schedule FROM cron.job WHERE jobname LIKE 'qa%'; - Manually trigger:
mushi tdd run <qa-story-id>and re-check.
Pass/Fail Summary Template [LOW freedom — do not skip]
After running all steps, record results:
| Component | Status | Notes |
|---|---|---|
| CLI credentials | ✅ / ❌ | |
| Edge functions | ✅ / ❌ | Which ones failed? |
| Project overview | ✅ / ❌ | Billing ok? |
| BYOK key pool | ✅ / ❌ | Missing providers? |
| Supabase logs | ✅ / ❌ | Any ERRORs? |
| QA cron | ✅ / ❌ | Last run at? |
If all ✅ → pipeline is healthy.
If any ❌ → run the mushi MCP diagnose_setup tool for targeted diagnosis.
Common causes of all-red [HIGH freedom]
| Symptom | Likely cause | Fix |
|---|---|---|
mushi doctor can't reach endpoint |
Wrong MUSHI_API_ENDPOINT in ~/.mushirc |
Re-run mushi login --endpoint https://... |
| All edge functions ❌ | Supabase project paused (free tier) | Restore the project in the Supabase dashboard |
BYOK keys all quota_exhausted |
Rate limits hit on all keys | Add a backup key for each provider |
| QA cron never fires | pg_cron job missing | Re-run migration 20260602000003_pdca_qa_improve_cron.sql |