Skip to content

Slash commands

All scrubjay commands live in commands/*.md and are symlinked into ~/.claude/commands/ by claude-sync.sh, so they're available in every session as /<name>. Because they ship with the app (not your private data repo), every machine that installs scrubjay gets them out of the box. They fall into two groups: archive/recall commands are thin wrappers that drive the read-only sjmcp MCP tools; lifecycle commands just run the same scripts the SessionStart/SessionEnd hooks do, on demand.

Archive & recall (drive the sjmcp tools)

Command Calls under the hood Typically useful for
/sjrecall <topic> [host= project= since=] sj_recallsj_get "I discussed X somewhere, ages ago — which machine even?" Semantic recall across all machines: ranks candidates by topic, then pulls the one you pick (or a slice) into context. Start here when you remember the gist but not the where/when.
/sjbrowse [transcript\|plan\|memory\|note] [host= project= since=] sj_listsj_get Eyeballing a date-sorted list and grabbing one, when you have no search term in mind — "show me the last few plans on laptop."
/sjfind <topic> in <session-id\|topic-words> [context=N] sj_search_within (+ sj_recall/sj_get) You know which session and want the exact spot a subject came up — returns turn/line anchors inside that one transcript instead of the whole thing.
/sjget <sid \| path \| sj://uri> [turns=A-B \| lines=A-B] [full] sj_get (one call, no search) You already know the item and just want it pulled in — cheapest way, no recall/ranking. A session id works as the 8-char handle or the whole --resume id. Named with no slice, it fetches the session condensed — every word of the conversation, tool calls and their output folded to a couple of lines — which is what gets a whole session into one call; full asks for the tool traffic too. Its other edge is slicing: lines=1200-1300 or turns=5-10 of a huge transcript, fetched verbatim.
/sjtable [head=N \| tail=N \| [a:b] \| all] [host= project= harness= model= topic= since= until=] bin/sj-table.sh (no MCP) Reading the catalogue as a table, not picking one item out of it. Filters apply before slices, so harness=opencode head=20 is "the newest 20 opencode sessions". It costs no MCP round-trip — it queries the rendered logs/CATALOGUE.md. Bare /sjtable prints a summary, not ~600 rows.

For pulling a whole small doc with even less overhead than /sjget, @-mention it from the sjmcp resource picker (match on the title, e.g. plan: … — <date> · <host>) — the harness injects it directly with no tool call at all.

Lifecycle & sync (run the hook scripts on demand)

Command Mirrors Does
/sjsync SessionStart Pull the data repo + cross-machine memory, then re-apply config into ~/.claude. Grab changes another machine just pushed, mid-session, instead of waiting for the next start.
/sjlog SessionEnd Publish now without ending the session: log line + chats index + push data repo + push memory + relay this session's transcript/plans/history/tasks to the NAS. Handy so another machine (or /sjrecall) can see it right away.
/sjresume [sid8 \| words] Continue a session from another machine here (hand-off). Stages the archived transcript — plus its subagents, tasks and file history — into this machine's ~/.claude/projects/, rewriting the other host's paths to this one's, so Claude Code's own /resume can pick it up. Run it from the project dir; then /resume.
/sjonboard [hint] Guided wrapper around bin/onboard.sh (gathers choices in chat, then runs it unattended). For onboarding or reconfiguring (e.g. "switch backend to rsync-wg"). For a brand-new machine without scrubjay yet, run bin/onboard.sh in a terminal instead.
/sjmemory Enable/repair cross-machine memory on this machine (idempotent — runs bin/onboard-memory.sh). First-time memory setup, or when memory sync looks broken.
/sjnote [what to capture \| /path/to/file] Keep a written artefact — an analysis, a briefing, a design rationale (runs bin/sj-note.sh). Writes it to <memory>/<project>/notes/ and publishes immediately, so it survives the session and reaches every machine. Invoke it before the work too: it stands for the rest of the session, so durable output goes there instead of the scratchpad. Notes are not loaded into future sessions — read them back with /sjrecall or /sjbrowse note.
/sjpaste [name] Put the clipboard into this project's assets and read it. For the thing a terminal can't do: a screenshot, a copied PDF, a diagram. Writes to $SCRUBJAY_ASSETS/<project-slug>/ (machine-local, not synced) and hands the path straight to the session. Needs a clipboard on the machine running the session — over SSH use cat <file> \| bin/sj-paste.sh - instead.
/sjdoctor [section…] Check that this machine's sync actually works (runs bin/sj-doctor.sh). With no argument it verifies everything: config, the data repo, the memory clone, relay reachability, adapters and the last recorded outcomes. Name sections — config, data, memory, relay, harnesses, outcomes — to check just those, which skips the slow network probes for the rest. Read-only and safe to run any time; reach for it when something should have synced and didn't.