Daily commands
The six slash commands you actually type — /bearings, /ahoy, /afk, /quiet, /stow, /updatefirstmate — with what each does step by step.
Most of the time you just talk to the first mate in plain language. Six built-in skills are user-invocable. Claude Code and Grok use the slash form; Codex uses $afk, $bearings, and so on.
| Command | Use it to |
|---|---|
/bearings |
Get the fleet status digest ("where did I leave off?") |
/ahoy |
Recap what happened since your last message and clear open decisions one at a time |
/afk [words] |
Step away and leave standing instructions |
/quiet |
Stay, but only hear about decisions, failures and review-ready work |
/stow |
Save what the session learned before a reset |
/updatefirstmate |
Pull the latest firstmate and restart every mate onto it |
/bearings — where do we stand?#
The first mate runs one deterministic snapshot, bin/fm-bearings-snapshot.sh --json. It is the only source allowed: no ad-hoc probes and no scraping reports. It renders four sections, always in this order, always present:
| Section | Contains | Empty state |
|---|---|---|
| Captain's Call | Live questions and approvals waiting on you | "Nothing needs your action right now" |
| Recently Landed | Merged PRs, finished scouts | "No recent completions are in the current baseline." |
| Underway | Running tasks and their current state | "Nothing is underway." |
| Charted Next | Queued work, plus holds that are dated, blocked or aged, each with the reason | "Nothing is queued." |
PRs always appear as full https:// URLs.
Variants. Only the literal option words trigger these. "Make me a board" does not.
/bearings chat digest only
/bearings file + replace data/status-report-<YYYY-MM-DD>.md
/bearings lavish + interactive HTML fleet board via lavish-axi
/bearings include PRs + live GitHub PR enrichment (--include-prs)
/bearings file include PRs combinations work
The lavish board (bin/fm-bearings-board.sh) renders one card per held decision, merge and dispatch. You answer by clicking. Board answers come back as process events and flow into the same decision intake as chat. A board "Merge now" click is your explicit merge word for that exact PR. It is still verified green before merging.
/ahoy — what did I miss?#
It reads only the visible conversation: no shell, no files.
- It finds your last real message, skipping injected operational rows.
- It recaps outcomes since then: landed work, failures, decisions made, new decisions needed, what is still running.
- It scans the whole visible history for decisions you never answered. A later, unrelated message doesn't close an earlier question.
- It then walks you through open decisions one at a time, most impactful first. Each comes with the decision, why it matters, the options, and its recommendation.
If /ahoy is the first thing you type in a session, there is nothing to recap, so it runs /bearings instead.
/afk — step away#
/afk
/afk merge anything green in xyz; hold everything else for me; back around 6pm
- Same turn, no confirmation. It runs
bin/fm-afk-launch.sh enter --words-file <f> [--expected-return <UTC>]. That writesstate/.afk-contractwith your words verbatim. "No parser, tokenizer, classifier, or grammar reads them." They are applied with judgment, through guarded scripts. - Sub-supervision starts.
- On Pi, the in-process supervision branch takes over.
- Where the home runs the supervision host, the host does. A Claude primary runs it by default unless
config/supervision-hostsaysoff; Cursor, OpenCode, omp, Grok and Codex run it only when that file exists. - Otherwise a hidden daemon,
bin/fm-supervise-daemon.sh, handles routine wakes. It injects one batched, single-line digest into your pane, and only when the pane is idle and the input box is empty.
- It reads back its understanding of your words in plain sentences, and says which ones it could not act on. This is informational only. It doesn't wait for a reply.
While you're away:
- PRs green at their live head may merge under away authority.
- Destructive, irreversible or security-sensitive actions can never be pre-authorized, whatever your words say.
- If a digest can't be delivered within
FM_MAX_DEFER_SECS(300s), the wedge alarm fires (config/wedge-alarm). That can be a macOS notification, Herdr, or any command, such as an ntfy.sh push to your phone:
# config/wedge-alarm
osascript
command: curl -fsS -H "Title: firstmate wedge alarm" -d "$1" https://ntfy.sh/replace-with-your-topic
Coming back: there is no /back. Your first genuine message is the return. Before acting on it, the first mate runs bin/fm-afk-return.sh. That shuts down the daemon, archives the posture, presents the wakes that queued up, and keeps every open blocked: item live until it is dealt with. Then it tears down whatever landed.
/quiet — stay, but less noise#
First it checks whether quiet mode is needed at all. On Pi, and wherever bin/fm-afk-launch.sh quiet-check exits 0 because an attended supervision host is already running (the default on a Claude primary), it enters nothing: no record, no flag, no daemon. The first mate tells you that routine events already stay out of the chat, and /quiet off then needs nothing either.
Only when quiet-check exits 1 does it use the same machinery as /afk (FM_AFK_MODE=quiet, so state/.afk reads quiet). The difference is that ordinary chat does not exit it. Only /quiet off does.
Captain, quiet mode is active; I will batch routine updates and surface only decisions, failures, credentials, or review-ready work — ordinary chat will not exit this, say
/quiet offwhen you want normal per-wake responses back. — the skill's acknowledgement
It changes presentation only. It never hides a decision, a failure, a credential need or review-ready work, and it grants no extra authority. It also holds nothing for a return: you are present, so a merge, dispatch or landing you ask for goes ahead now, under normal attended authority. Running /afk during quiet mode replaces the quiet record with an away record, and hold-for-return starts.
/stow — save what this session learned#
Kun's description: "different from compaction which summarizes and drops context, /stow persists it" (2026-07-03).
Inside firstmate it curates three files within a token budget (config/startup-memory-budget, default 7,500 estimated tokens), because they load at every session start:
| File | Holds | Default tier |
|---|---|---|
data/captain.md |
your preferences and working style (this home) | pinned |
data/captain-shared.md |
preferences shared read-only to secondmates | pinned |
data/learnings.md |
fleet-local facts and gotchas | aging (30 days) |
Tiers. Entries carry trailing markers: <!--P--> pinned, <!--a:YYYY-MM-DD--> aging, <!--p:YYYY-MM-DD--> perishable (7 days, with a named expiry condition). An entry is reinforced only on real evidence from this session; plausibility doesn't count. Stale entries move to data/memory-archive.md. They are never deleted.
Every pass:
- Report the budget.
- Read all three files.
- Plan retention.
- Reinforce what this session proved.
- Expire what is past its clock.
- Consolidate.
- If still over budget: archive, then offload to a private untracked skill, then evict the oldest aging entries.
- Re-check the budget.
It ends by saying whether it is safe to reset. In a primary home it cascades to every secondmate (bin/fm-stow-cascade.sh).
Use /stow outside firstmate too
A standalone public version lives at skills/stow. Install it into any project:
npx skills add kunchenguid/firstmate --skill stow.
It routes findings to your explicit instruction first, then an existing convention (CLAUDE.md, AGENTS.md, TODO), then a private gitignored .stow-notes.md. It ends with a copy-pasteable RESUME POINTER.
/updatefirstmate — pull the latest distro#
bin/fm-update.shfast-forwards the checkout. After a squash-merge it can also do a guardedreset --keepwhen the local result already exists upstream. It updates every registered secondmate the same way, and skips and reports anything dirty, diverged or offline.- It prints
reread-firstmate: yes|no,restart-secondmates: ...andnudge-secondmates: .... - It re-reads
AGENTS.md, then restarts each live secondmate withbin/fm-secondmate-restart.sh. Each mate first writes down its open work.
It restarts even secondmates whose files didn't change. Launch-time wiring (hooks, harness flags) only re-resolves in a fresh process, so "no tracked files changed" doesn't prove the running agent is current. It never touches data/, state/, config/ or projects/.
Plain-language requests that just work#
You don't need commands for these. Say them:
- "add github.com/me/repo as a direct-PR project" / "give xyz yolo"
- "what's blocking PR 42?" / "peek at the dark-mode worker"
- "relaunch the stuck one on codex high"
- "set up a remote secondmate on my mac mini for iOS work"
- "later" (to a decision). This defers it to a date instead of dropping it.
- "why did you do X?" The first mate can read its own
AGENTS.md, skills and scripts to answer, and can change them.