skills/snapshot-sessions/SKILL.md
Danger-first snapshot of all live Claude Code sessions before a restart or shutdown. Scans running `claude` processes (NOT transcript timestamps, which miss idle/week-old tabs), resolves each to its folder + branch + uncommitted/unpushed/open-PR state, and writes a danger-first list to ~/.claude/session-snapshot.md so you know what unsaved work you are walking away from and exactly which `cd <folder> && claude --resume <id>` to run after reboot. Also lists orphaned worktrees with no attached session as a reap signal. Use when the user says "save my open sessions", "save the open claude tabs", "snapshot my sessions", "save my session statuses before I restart", "what should I reopen after I restart", "before I restart my computer", "capture my open tabs", or "snapshot-show" (just reads the saved file back).
npx skillsauth add RonanCodes/ronan-skills snapshot-sessionsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A pre-restart / pre-shutdown safety sweep across every live Claude Code session on the machine. It is a fire-alarm, not a dashboard and not a resume system: its one irreducible value is the cross-session view that no single session can produce (each session only sees its own cwd, and /ro:close-session only sweeps the repo it runs in).
You have N Claude sessions open across repos and worktrees in iTerm tabs. You need to restart the machine. Three things are true:
~/.claude/projects/<slug>/<session-id>.jsonl; claude --resume <id> replays one verbatim. Uncommitted files are on disk and survive reboot. So you lose almost nothing on a clean restart.This skill solves #2 by keying off live processes, so it catches every open session regardless of how long it has been idle.
Run the bundled script:
python3 "$(dirname "$0")/scripts/snapshot.py" # or: python3 "${CLAUDE_PLUGIN_ROOT:-$HOME/Dev/ronan-skills}/skills/snapshot-sessions/scripts/snapshot.py"
It:
pgrep -fl 'claude --dangerously-skip-permissions' for live session pids.lsof -p <pid> -a -d cwd -Fn for the working directory (Claude does NOT hold the transcript open continuously, so key off cwd, then map to the newest transcript in ~/.claude/projects/<slug>/; slug = every non-alphanumeric char replaced with -)..claude/RESUME.md, .swarm/, .nightshift/, .ralph/, .claude/worktrees/, the snapshot file itself), unpushed commits (@{u}..HEAD), open PR for the branch (gh pr list --head), and a one-line "what" (prefers a .claude/RESUME.md / .swarm/run-state.md summary line, falls back to the last real user instruction).~/.claude/session-snapshot.md danger-first: rows with uncommitted/unpushed/open-PR work at the top, clean rows next, orphaned worktrees, then a paste-ready resume block.After writing, open it so the user sees it:
open ~/.claude/session-snapshot.md
"snapshot-show" / "show my saved sessions" is the read-back half. After a restart the live processes are gone, but the file persists, so just:
cat ~/.claude/session-snapshot.md # or: open ~/.claude/session-snapshot.md
No re-scan needed (and impossible anyway, the sessions are closed). Capture needs live processes; show just reads the saved file.
/ro:snapshot-sessions while the sessions are still alive (it needs the processes)./ro:close-session in that tab rather than just relying on --resume.~/.claude/session-snapshot.md, recreate tabs, run the resume command per row./ro:close-session), you rarely need it. It earns its keep digging out of session sprawl and as a crash safety net./ro:close-session per tab (durable capture: issues, ADRs, wiki, memory), then start fresh and light (Pocock's <100k-token sessions). This skill does not replace that./ro:close-session — the per-session durability sweep; the disciplined front door this skill is the fallback for./ro:handoff — compacts one session into a rich handoff doc; its summary line is what this skill's "what" column reads when present./ro:worktree — reap mode audits the orphaned worktrees this skill surfaces before removing them.Created 2026-06-14 after a multi-repo night-shift run left 10 sessions open across repos and worktrees with a forced restart pending. Built from a proven script written live that session. Named "snapshot" deliberately: the file is read AFTER the sessions close (so "open-sessions" would be wrong), and "checkpoint" collides with /ro:way-of-working's commit-cadence vocabulary. See ronan-skills#77.
testing
--- name: linear-pipeline description: The Fable orchestrator for a single dispatched Linear ticket. Holds almost no context itself; it receives `--issue <ID> --detached`, decides the stage sequence, and fans out a sub-agent per stage, passing forward only each stage's artifact (never re-derived, never inlined into its own context). Step zero, before any planning or stage routing, is a boundary triage against `canon/security-boundary.md` (#199): a match tags Ronan Connolly and stops the run, no
development
--- name: in-your-face description: Capture a chat-only answer into a durable artifact (markdown + HTML, PDF when cheap) and launch it automatically so the user cannot miss it. Use when user says "in your face", "don't let me lose this", "save that answer", "make that durable", or right after answering a substantive side question (a recipe, comparison, how-to, or generated prompt) that would otherwise die with the context. category: workflow argument-hint: [--no-open] [--vault <short>] [hint of
tools
One-shot headless OpenAI Codex CLI calls for background/admin AI tasks — summaries, classification, extraction, admin glue. The default engine for anything that runs AI constantly in the background (daemon-driven, per-event), because it bills the flat ChatGPT subscription instead of Claude usage or per-token API spend, and it keeps working while Claude is rate-limited. NEVER for coding — coding stays Claude. Use when a skill or daemon needs a cheap always-on AI call, when the user says "use codex", "ask codex", "codex as backup", or when building a background summarizer/classifier into a listener or loop. Reads auth from ~/.codex/auth.json (ChatGPT account, no API key).
research
Turn a warranty rejection, repair quote, or RMA email into a cited decision brief — legal read (NL/EU consumer law), is the part user-serviceable, live part and new-unit prices, repair-vs-DIY-vs-new economics, before-you-send-it checklist, deadlines. Use when the user pastes or screenshots a repair quote, warranty rejection, "not covered" email, onderzoekskosten fee, or asks "should I repair or replace this".