/self-diagnose
Sutando introspection — read logs + git + memory + build log for a chosen time window and produce a concise narrative of what the agent has been doing, what's broken, and what to prioritize next.
$ npx -y skills add sonichi/sutando --skill self-diagnose --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/self-diagnose
Context preview
The summary Claude sees to decide when to auto-load this skill.
Sutando introspection — read logs + git + memory + build log for a chosen time window and produce a concise narrative of what the agent has been doing, what's broken, and what to prioritize next.
SKILL.md
self-diagnose.SKILL.mdname: self-diagnose
description: "Sutando introspection — read logs + git + memory + build log for a chosen time window and produce a concise narrative of what the agent has been doing, what's broken, and what to prioritize next."
user-invocable: true
Self-Diagnose
Read Sutando's own observable state (logs, git, memory, build log, pending questions, health check, cold-review log) over a chosen window and produce a structured narrative:
- **What's been happening** — significant events, PRs shipped, tasks processed, user interactions
- **What's broken** — errors in logs, pending questions, health-check failures, 1006/1011/1007 transport events, unresolved bugs surfaced in logs
- **What I'd do next** — concrete prioritized actions grounded in what was observed
**Usage**: `/self-diagnose [--since 24h]`
ARGUMENTS: `$ARGUMENTS`
Flow
1. **Gather.** Run `bash skills/self-diagnose/scripts/gather.sh [window]` — collects log tails, git log, build_log.md tail, pending-questions, health-check output, cold-review-log, and recent Discord activity into `/tmp/sutando-diagnose-<ts>/`. 2. **Synthesize.** Read each gathered file. Group findings under the three headings above. Be concrete: cite log lines, PR numbers, timestamps. Skip speculation. 3. **Save.** Write the report to `notes/diagnose-YYYY-MM-DD-HHMM.md` with frontmatter (`title`, `date`, `tags: [diagnose, self]`). 4. **Summarize.** Reply to the caller with a 5–10 line executive summary + path to the full report.
Cross-node mode (resolves #421)
When Sutando works on one machine but is broken on another, the helper script runs `gather.sh` on both sides over SSH and produces a structured comparison:
bash skills/self-diagnose/scripts/gather-remote.sh <ssh-target> [window]
# e.g.
bash skills/self-diagnose/scripts/gather-remote.sh mac-mini
bash skills/self-diagnose/scripts/gather-remote.sh user@macbook.local 6h
Output: `/tmp/sutando-diagnose-cross-<ts>/{local,remote,diff.md}` plus a persisted copy at `notes/diagnose-cross-node-<YYYY-MM-DD>.md`. The comparison report surfaces commit drift, health-check differences, voice-agent error counts, quota state, and PR-view divergence per side.
Override the remote sutando path via `SUTANDO_REMOTE_REPO=/path/on/peer` if the failing node's checkout isn't at the default `~/Desktop/sutando`.
**Security posture** (per #421): read-only on the remote (only gather.sh runs there, no mutation), allowlist enforced by gather.sh's existing scope (no `.env`, no tokens), per-session SSH (no daemon, no persistent state on the remote).
Default window
24 hours if unspecified. Accept: `24h`, `3d`, `1w`. Longer windows = broader scope, higher token cost.
What a good report looks like
- Cites specific log timestamps (`18:28:16 — transport 1006 after NoteView injection`) rather than "some errors happened"
- Lists PRs by number + status (`#394 mergeable no reviews`, `#354 retention sweep open`)
- Separates recurring from one-off issues
- Prioritizes "what I'd do next" by impact and blocking, not by what's most recent
What to skip
- Verbose log dumps — the gathered files are on disk already; just reference them
- Speculation without log evidence — "maybe the Gemini server is..." should be backed by a log line showing the close code and preceding event
- Restating CLAUDE.md / build_log.md content — those are already durable; only surface what's NEW in the window
Related
- `notes/cold-review-capability.md` — sister capability for PR-level review
- `notes/voice-transport-1006-hypothesis.md` — example of the depth of analysis a self-diagnose report should match
- `build_log.md` — the canonical "what has been built" log; complements but doesn't replace
Read more
name: self-diagnose description: "Sutando introspection — read logs + git + memory + build log for a chosen time window and produce a concise narrative of what the agent has been doing, what's broken, and what to prioritize next." user-invocable: true
Self-Diagnose
Read Sutando's own observable state (logs, git, memory, build log, pending questions, health check, cold-review log) over a chosen window and produce a structured narrative:
- **What's been happening** — significant events, PRs shipped, tasks processed, user interactions
- **What's broken** — errors in logs, pending questions, health-check failures, 1006/1011/1007 transport events, unresolved bugs surfaced in logs
- **What I'd do next** — concrete prioritized actions grounded in what was observed
**Usage**: `/self-diagnose [--since 24h]`
ARGUMENTS: `$ARGUMENTS`
Flow
1. **Gather.** Run `bash skills/self-diagnose/scripts/gather.sh [window]` — collects log tails, git log, build_log.md tail, pending-questions, health-check output, cold-review-log, and recent Discord activity into `/tmp/sutando-diagnose-<ts>/`. 2. **Synthesize.** Read each gathered file. Group findings under the three headings above. Be concrete: cite log lines, PR numbers, timestamps. Skip speculation. 3. **Save.** Write the report to `notes/diagnose-YYYY-MM-DD-HHMM.md` with frontmatter (`title`, `date`, `tags: [diagnose, self]`). 4. **Summarize.** Reply to the caller with a 5–10 line executive summary + path to the full report.
Cross-node mode (resolves #421)
When Sutando works on one machine but is broken on another, the helper script runs `gather.sh` on both sides over SSH and produces a structured comparison:
bash skills/self-diagnose/scripts/gather-remote.sh <ssh-target> [window] # e.g. bash skills/self-diagnose/scripts/gather-remote.sh mac-mini bash skills/self-diagnose/scripts/gather-remote.sh user@macbook.local 6h
Output: `/tmp/sutando-diagnose-cross-<ts>/{local,remote,diff.md}` plus a persisted copy at `notes/diagnose-cross-node-<YYYY-MM-DD>.md`. The comparison report surfaces commit drift, health-check differences, voice-agent error counts, quota state, and PR-view divergence per side.
Override the remote sutando path via `SUTANDO_REMOTE_REPO=/path/on/peer` if the failing node's checkout isn't at the default `~/Desktop/sutando`.
**Security posture** (per #421): read-only on the remote (only gather.sh runs there, no mutation), allowlist enforced by gather.sh's existing scope (no `.env`, no tokens), per-session SSH (no daemon, no persistent state on the remote).
Default window
24 hours if unspecified. Accept: `24h`, `3d`, `1w`. Longer windows = broader scope, higher token cost.
What a good report looks like
- Cites specific log timestamps (`18:28:16 — transport 1006 after NoteView injection`) rather than "some errors happened"
- Lists PRs by number + status (`#394 mergeable no reviews`, `#354 retention sweep open`)
- Separates recurring from one-off issues
- Prioritizes "what I'd do next" by impact and blocking, not by what's most recent
What to skip
- Verbose log dumps — the gathered files are on disk already; just reference them
- Speculation without log evidence — "maybe the Gemini server is..." should be backed by a log line showing the close code and preceding event
- Restating CLAUDE.md / build_log.md content — those are already durable; only surface what's NEW in the window
Related
- `notes/cold-review-capability.md` — sister capability for PR-level review
- `notes/voice-transport-1006-hypothesis.md` — example of the depth of analysis a self-diagnose report should match
- `build_log.md` — the canonical "what has been built" log; complements but doesn't replace
My AI Stand — Realtime by Day, Rewriting Itself by Night. Summon my AI superpower. Voice, vision, screen, meetings, calls when I'm engaged. Learns my patterns, ships its own code when I'm not. Runs across my Macs, interacts with people & their Stands.
Repo: sonichi/sutando
Other skills on sutando.
- /agent-registry
Local Agent Registry — a standalone, dependency-free service that tracks running Claude Code (and other) agent instances. Agents self-register on startup and heartbeat while alive; the Electron overlay and Sutando dashboard read the live list. Use when you need to know which
Open skill - /agent-room-ops
**One skill, multiple tools.** Everything an agent does in a room beyond its task inbox lives here as a tool, so the parity capabilities are self-evidently *one collection* (not N scattered skills). Each tool is a thin **gateway-only** client verb sharing `_gateway.py`; the
Open skill - /audio-transcribe
Transcribes audio files and voice notes to text via Gemini 2.5-flash. Integrates with Slack, Discord, and Telegram bridges so voice clips surface as readable text in tasks.
Open skill - /bot2bot-post
Post a coordination message from this bot to the shared bot2bot channel — @-mentioning a specific peer via --to, auto-mentioning only in single-peer fleets, never guessing.
Open skill - /call-diagnostics
Analyze phone call observability data, detect problems, track them across calls, and recommend systematic repairs.
Open skill - /claude-codex
Bash wrapper around the local Codex CLI for non-interactive runs from inside Sutando (bridges, cron, scripts). For interactive code review or task hand-off from this Claude Code session, prefer the official `/codex:*` plugin commands; this skill is the file-bridge-compatible
Open skill

