Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
138a9d0
feat(bin): encode project AGENTS.md authoring bar with canonical self…
kunchenguid Jul 7, 2026
463cb51
feat(skills): add captain-invocable bearings status-report skill (#300)
Ballestar Jul 7, 2026
49ffe5d
fix(watcher): make PID identity locale-invariant (#285)
pchuri Jul 7, 2026
0a7cb88
docs: document codex app backend contract (#222)
Jul 7, 2026
a790a20
docs: add Codex Desktop coordination skill (#275)
Jul 7, 2026
f5e89b9
fix(afk): stop herdr escalation redelivery loop (#317)
kunchenguid Jul 7, 2026
01dca33
fix(backends): confirm Herdr submits with native agent state (#323)
kunchenguid Jul 7, 2026
7a42707
feat: add quota-balanced crew dispatch selection (#327)
kunchenguid Jul 8, 2026
121b902
fix(session-start): respawn dead secondmate agents conservatively
kunchenguid Jul 8, 2026
28a3b0e
fix: emit stable secondmate nudge selectors (#331)
kunchenguid Jul 8, 2026
c9e5ba3
feat: require bootstrap detection for AXI tools (#332)
kunchenguid Jul 8, 2026
2061c37
bearings: delete today's report before recreating (#333)
kunchenguid Jul 8, 2026
228963d
feat: guard primary turn ends across harnesses (#339)
kunchenguid Jul 8, 2026
a894c3a
fix: resolve backend selectors by exact task id first (#342)
kunchenguid Jul 8, 2026
091384b
fix: scale bootstrap fleet-sync timeout (#341)
kunchenguid Jul 8, 2026
0f9b7cc
feat: add fleet snapshot and view commands (#343)
kunchenguid Jul 8, 2026
d8a2ff1
fix(fm-send): fail loudly on unresolvable send targets (#254)
mielyemitchell Jul 8, 2026
95dd1a0
fix: deliver AFK escalations through herdr supervisors (#353)
kunchenguid Jul 8, 2026
090483e
feat: add harness-aware supervision (#367)
kunchenguid Jul 8, 2026
4790bc5
fix: split X-mode replies by platform (#369)
kunchenguid Jul 8, 2026
af5361e
fix: make stow memory writes inspect before update (#372)
kunchenguid Jul 9, 2026
7302a95
fix(watcher): wait when arm attaches to a healthy watcher (#375)
kunchenguid Jul 9, 2026
1b5a9f5
feat(pi): simplify primary session launch (#386)
kunchenguid Jul 9, 2026
766f772
feat(supervision): prevent unsafe watcher-arm commands (#387)
kunchenguid Jul 9, 2026
80ecc8d
fix(pi): restore primary watcher supervision lifecycle (#397)
kunchenguid Jul 10, 2026
7525a37
fix: keep persistent secondmates out of the main backlog (#398)
kunchenguid Jul 10, 2026
600075e
fix(backlog-handoff): move full item blocks including indented bodies…
kunchenguid Jul 10, 2026
4bc0824
feat(herdr): make Herdr lab lifecycle safety deterministic for briefs…
kunchenguid Jul 10, 2026
22b1d71
fix(watcher): classify arm-command seatbelt by execution position (#403)
kunchenguid Jul 10, 2026
96244f4
fix: reconcile existing AGENTS.md safely (#405)
kunchenguid Jul 10, 2026
08453f9
feat: support project-less secondmate homes (#409)
kunchenguid Jul 10, 2026
31afb8c
fix: delegate backlog handoffs to tasks-axi (#411)
kunchenguid Jul 10, 2026
171207c
fix: ignore secondmate home marker during sync (#417)
kunchenguid Jul 10, 2026
a955a05
fix(composer): prevent dead-shell message injection (#416)
kunchenguid Jul 10, 2026
7788fa3
feat(watcher): add paused external-wait supervision (#421)
kunchenguid Jul 10, 2026
5f808cc
fix: preserve X-mode follow-up platform limits (#425)
kunchenguid Jul 10, 2026
0eaf293
fix(composer): handle ANSI ghost text safely (#429)
kunchenguid Jul 10, 2026
6d90240
fix(spawn): make tmux window handling robust under non-default config…
Deeds67 Jul 10, 2026
3e3dff6
test: isolate session-start suite from ambient harness markers (#432)
kunchenguid Jul 10, 2026
38086ea
fix(teardown): retry transient index locks during worktree return (#435)
kunchenguid Jul 10, 2026
492c937
fix: complete brief help and consolidate documentation (#438)
kunchenguid Jul 10, 2026
bc558c6
fix: detect Git and centralize backend configuration (#445)
kunchenguid Jul 10, 2026
52241a5
feat(daemon): add backend-independent wedge alerts (#444)
kunchenguid Jul 10, 2026
8cd90fe
docs: centralize firstmate operating contracts (#447)
kunchenguid Jul 11, 2026
3f549c1
fix(cmux): close last workspace during teardown (#449)
kunchenguid Jul 11, 2026
0daf674
fix: recover orphaned packed-refs locks during fleet sync (#453)
kunchenguid Jul 11, 2026
1fb1e30
feat(herdr): escalate blocked panes immediately (#472)
kunchenguid Jul 11, 2026
ad39e49
docs(readme): reposition firstmate as an agent distro (#473)
kunchenguid Jul 11, 2026
a6508b7
feat: add deterministic bounded bearings snapshots (#475)
kunchenguid Jul 11, 2026
78f9cce
fix: enforce deterministic ShellCheck parity (#481)
kunchenguid Jul 11, 2026
88e38ea
feat: guard primary shells from persistent cd commands (#483)
kunchenguid Jul 12, 2026
cb6e8ed
brief: add no-mistakes shared-daemon rule to ship and scout scaffolds…
mielyemitchell Jul 12, 2026
9ecd7c4
feat: make bearings concise and accurate (#485)
kunchenguid Jul 12, 2026
ad9f3a7
fix: harden away-mode daemon lifecycle (#490)
kunchenguid Jul 12, 2026
d7183f9
Merge upstream/main
mielyemitchell Jul 12, 2026
1525246
no-mistakes(review): Restore docs for fleet freeze, dispatch-ack, rec…
mielyemitchell Jul 12, 2026
1899da5
no-mistakes(document): docs: add fm-lint.sh to bin/ toolbelt inventory
mielyemitchell Jul 12, 2026
1273606
fix: restore fork-local upstream merge guardrails
mielyemitchell Jul 12, 2026
f25a784
no-mistakes(document): docs: reconcile scripts/README/AGENTS.md with …
mielyemitchell Jul 12, 2026
672692c
no-mistakes(document): docs: restore bin/fm-tasks-axi.sh as canonical…
mielyemitchell Jul 12, 2026
74dd161
no-mistakes(document): docs: restore FM_HOME ownership guard section …
mielyemitchell Jul 12, 2026
f2a4d87
fix: restore bootstrap tasks-axi cwd trap
mielyemitchell Jul 12, 2026
0b7a092
test: expect tasks-axi wrapper in stow contract
mielyemitchell Jul 12, 2026
3ecc6d9
no-mistakes(document): docs: document restored tasks-axi cwd-trap war…
mielyemitchell Jul 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
174 changes: 82 additions & 92 deletions .agents/skills/afk/SKILL.md

Large diffs are not rendered by default.

76 changes: 76 additions & 0 deletions .agents/skills/bearings/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
name: bearings
description: Generate a "pick up where I left off" status report from firstmate's live fleet state. Use when the captain invokes /bearings or asks for a bearings report, morning brief, status report, catch-up, "where did I leave off", or "what's in the works". Reads bounded local fleet state cheaply, optionally checks open PRs when requested, composes a scannable dated report to data/status-report-<YYYY-MM-DD>.md, and surfaces a concise version in chat; it is read-mostly and must not tear down, merge, or mutate task state as a side effect of producing the brief.
user-invocable: true
metadata:
internal: true
---

# bearings

Generate a "pick up where I left off" report from the fleet's live state, so the captain can resume in one read after a break, a night, or a context reset.
The deliverable is a dated markdown file plus a concise chat summary; this is the reusable version of the worked example at `data/status-report-2026-07-06.md` when that file is present in this home.
This skill is read-mostly.
It reads fleet state and writes exactly one report file.
It never tears down a task, merges a PR, dispatches new work, or mutates any task state as a side effect of producing the brief - those belong to the captain's explicit word and the normal task lifecycle.

## What it does

1. **Gather live fleet state with one deterministic command.**
Run `bin/fm-bearings-snapshot.sh` and read its compact output.
It is the single bounded, deterministic source for this report and renders TOON by default.
Do not hand-probe the snapshot schema and do not make ad-hoc `gh-axi`/`gh` calls to assemble fleet facts; this command already assembles them.
The command's header and `--help` output own its exact fields, bounds, opt-ins, and output contract.
When the captain asks to include PRs, use the command's live-PR opt-in; otherwise keep the default local-only read.
If the command is unavailable, fall back to `bin/fm-fleet-snapshot.sh --json` and `bin/fm-crew-state.sh <id>`; never infer current state from a raw `tail` of `state/<id>.status`, which is append-only wake-event history whose last line goes stale.
A queued item under `gates` only becomes "next work" when its blocker is gone and its time/date gate has arrived; until then it stays queued with the reason.

2. **Compose the detailed report file around the four-section spine, adding the richer detail the chat leaves out.**
The gather step is deterministic; your judgment is scoped to the last mile only - ranking the command's facts by what matters right now and writing the scannable prose.
The exemplar is `data/status-report-2026-07-06.md` in this home's `data/` when present; match its scannability, not a raw state dump.
The report uses the same four sections as the chat (see the chat-response contract below), in the same order, each always present, and adds the detail the chat omits:
- **Title** - `# Bearings - <day> <YYYY-MM-DD>` (use "Morning status" only when the captain specifically asks for a morning brief), followed by two or three sentences framing where things stand.
- **Captain's Call** - every open decision relayed verbatim with its options, plus each PR ready to merge and each needed credential or login, every PR with the full `https://...` URL, never a bare `#number`.
- **Recently Landed** - merged PRs, completed scouts, and finished local-only work since the last report, across the main fleet and every registered secondmate home.
- **Underway** - each live direct report making progress, with its current state, and the plans / main pickup pointers worth reopening (`data/<id>/report.md` files, `.lavish/*.html` boards).
- **Charted Next** - queued or gated next work, with each item's blocker or date reason.

3. **Write the dated report file so it persists, then surface the mandatory four-section digest in chat.**
- Write the full report to `data/status-report-<YYYY-MM-DD>.md` using today's date.
This is the required artifact; it lives in gitignored `data/` alongside the worked example.
If today's file already exists, delete it first, then create a new file from scratch.
- The chat response is the concise four-section digest defined by the contract below: materially shorter than the report file, and it links to that file for the full picture.
- For a richer review surface, optionally offer a Lavish board with `lavish-axi` when the report has enough structure to deserve one, but the markdown file is the required artifact and the four-section chat digest is the required minimum.

## Chat-response contract

This skill is the one owner of the `/bearings` chat-response format; the snapshot and classifier own the data that feeds it, and no other file restates this contract.
Every `/bearings` chat response renders EXACTLY these four sections, in THIS order, and nothing else structural (there is no At Anchor section):

1. **Captain's Call** - ONLY items that need the captain's own action now: a decision to make, a PR to approve or merge, a credential or login to provide, or a blocker only the captain can clear.
Empty-state: "Nothing needs your action right now."
2. **Recently Landed** - work completed since the prior report: merged PRs, completed scouts, and finished local-only merges, across the main fleet and every registered secondmate home.
Empty-state: "Nothing has landed since your last report."
3. **Underway** - live work progressing on its own, one line of current state per direct report.
Empty-state: "Nothing is underway."
4. **Charted Next** - queued or gated work waiting on the fleet or a date, never on the captain.
Empty-state: "Nothing is queued."

Rules that keep the contract unambiguous:

- Every section ALWAYS renders, even when empty, with its short empty-state sentence; never omit a section.
- The four buckets are mutually exclusive, so every item is forced into exactly one: needs-your-action is Captain's Call, done is Recently Landed, self-progressing is Underway, not-yet-started is Charted Next.
- The strict boundary keeps action-free items OUT of Captain's Call: a working or validating task, a queued item blocked on another task or a date, landed work, a completed scout's report pointer, a declared `paused:` external wait, and a bare recorded PR with no merge-ready signal each belong to one of the other three sections, never Captain's Call.
- The chat carries one scannable line per item, each PR as the full `https://...` URL; the verbatim decisions, plans, full gate reasons, and evidence live only in the report file, which the chat links to, so the chat stays materially shorter than that file.

## Tone and content rules

- This report is a private, captain-facing internal artifact that lives in gitignored `data/`, so unlike normal captain chat it MAY reference task ids, PR URLs, and repo names - the captain works with these directly and needs them to resume; keep it organized and scannable, not a raw dump.
- Every PR reference is a full `https://...` URL, never a bare `#number`; a shorthand `#number` is fine only as a back-reference after the full URL has already appeared in the same report.
- Never include PHI or secret values; the report is an operational artifact, but it is still subject to the same security and compliance rules that govern everything else in this fleet.

## Supervision discipline

This skill is read-mostly and changes no fleet state.
Do not tear down a task, merge a PR, dispatch queued work, or mutate any `state/` or `data/` file other than the single report file as a side effect of generating the brief.
If the state you read suggests an action - a PR ready to merge, a queued item whose gate has arrived, a needs-decision finding - name it in its section (a captain action under "Captain's Call", queued or gated work under "Charted Next") and let the captain decide, rather than taking the action from inside this skill.
49 changes: 49 additions & 0 deletions .agents/skills/bootstrap-diagnostics/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
name: bootstrap-diagnostics
description: >-
Agent-only handling playbook for session-start bootstrap diagnostics.
Use whenever the session-start digest's bootstrap section prints any diagnostic or capability line - MISSING, NEEDS_GH_AUTH, TANGLE, CREW_HARNESS_OVERRIDE, CREW_DISPATCH, FLEET_SYNC, SECONDMATE_SYNC, SECONDMATE_LIVENESS, TASKS_AXI, NUDGE_SECONDMATES, or FMX - or when a standalone bin/fm-bootstrap.sh run prints one.
A silent bootstrap section means all good and needs no skill load.
user-invocable: false
metadata:
internal: true
---

# bootstrap-diagnostics

Handle each printed line as below, before dispatching work that depends on it.
The line formats themselves are owned by `bin/fm-bootstrap.sh`'s header; this playbook owns the response.
The inline rules in `AGENTS.md` section 3 still bind: detect, then consent, then install - never install anything the captain has not approved in this session - and no work is dispatched until the tools it needs are present and GitHub auth is good.

- `MISSING: <tool> (install: <command>)` - list the missing tools to the captain with a one-line purpose each plus the printed install commands, wait for consent (one approval may cover the list), then run `bin/fm-bootstrap.sh install <approved tools...>`.
For `treehouse`, this also covers an installed version whose `treehouse get` lacks `--lease`; treat it as an upgrade request.
For `no-mistakes`, this also covers an installed version older than 1.31.2, because crewmate validation briefs delegate gate mechanics to no-mistakes' version-matched guidance.
For `tasks-axi`, this also covers an installed build that fails the compatibility probe (`docs/configuration.md` "Backlog backend" owns the definition); `config/backlog-backend=manual` only suppresses the `TASKS_AXI: available` capability line, not this missing-tool report.
For `quota-axi`, bootstrap requires it because crew-dispatch `quota-balanced` may call it; `bin/fm-dispatch-select.sh` still degrades at runtime when quota data is unavailable.
- `NEEDS_GH_AUTH` - ask the captain to run `! gh auth login` (interactive; you cannot run it for them).
- `TANGLE: <remediation>` - the primary checkout is stranded on a feature branch instead of its default branch; `AGENTS.md` section 8 explains why this guard exists and what it protects.
The work is safe on that branch ref; restore the primary to its default branch with the printed `git -C <root> checkout <default>`, then re-validate that branch in a proper worktree.
This is the only sanctioned firstmate-initiated git write to the primary, and it is a non-destructive branch switch that strands nothing.
- `CREW_HARNESS_OVERRIDE: <name>` - record and use the override silently; surface a harness fact only if it actually blocks work or the captain asks.
- `CREW_DISPATCH: invalid config/crew-dispatch.json - <reason>` - the optional dispatch profile file exists but failed low-cost bootstrap validation; continue with the normal fallback chain, resolve and pass the chosen fallback harness explicitly while the file remains present, fix the malformed schema, unverified harness name, unknown selector, or invalid harness/effort pair when convenient, and do not select a bad profile.
- `CREW_DISPATCH: active config/crew-dispatch.json` - bootstrap validated the optional dispatch profile file and printed its active rules and `default:` when present.
Keep this block top-of-mind during intake; it is the reminder that every crewmate or scout dispatch must consult the rules before spawning (`AGENTS.md` section 4).
- `FLEET_SYNC: <repo>: skipped: <reason>` - a benign one-off skip (offline, no origin, local-only); bootstrap continued, investigate only if it blocks work.
A skip can also report the bounded fleet-refresh timeout (`FM_FLEET_SYNC_BOOTSTRAP_TIMEOUT`, or a fleet-size-aware default with a 20 second floor); a timeout never blocks startup.
- `FLEET_SYNC: <repo>: recovered: <detail>` - the clone had drifted onto a clean detached HEAD holding no unique commits and the sync self-healed it (re-attached the default branch and fast-forwarded); no action needed, it is reported only so the self-heal is visible.
- `FLEET_SYNC: <repo>: STUCK: on <state>, N commits behind <base> - needs attention` - the clone is dirty, on a non-default branch, detached with unique commits, or diverged, so the sync left it untouched (never forcing or discarding); it will keep falling behind until you look.
A loud STUCK, especially a growing N across bootstraps, means that clone needs hands-on attention; dispatch a crewmate or resolve it before it strands work.
- `SECONDMATE_SYNC: secondmate <id>: skipped: <reason>` - the local-HEAD secondmate sync left a live secondmate home on its existing checkout because the home was dirty, diverged, unsafe, on the wrong branch, missing the primary target commit, or otherwise not fast-forwardable, or because inheritable-config propagation failed; bootstrap continued, but inspect the reason because the secondmate's tracked instructions or inherited settings may be stale after a primary update.
- `SECONDMATE_LIVENESS: secondmate <id>: already-live|respawned|skipped: <reason>|respawn failed: <reason>` - the session-start liveness sweep checked a live secondmate's recorded endpoint for a real agent process.
Treat `already-live` and `respawned` as handled; investigate `skipped` or `respawn failed` because that secondmate is not guaranteed live.
- `TASKS_AXI: repo-root data/backlog.md differs from FM_HOME backlog - use bin/fm-tasks-axi.sh so tasks-axi runs from <home>` - the repo root and the active `FM_HOME` already have diverged backlog files; a bare `tasks-axi` invoked from the repo root would discover the wrong `.tasks.toml` and mutate the wrong home (`docs/configuration.md` "Backlog backend" owns the mechanism).
Always invoke `bin/fm-tasks-axi.sh` instead of bare `tasks-axi`; no captain-facing action needed unless a mutation was already misdirected before this warning was seen.
- `TASKS_AXI: available` - a default-backend capability fact, not a problem; record it silently and use `AGENTS.md` section 10 for backlog mutations.
It prints only when `config/backlog-backend` is absent or set to `tasks-axi` and the shared compatibility probe passes (`docs/configuration.md` "Backlog backend").
If the backend is not opted out and `tasks-axi` is missing or incompatible, bootstrap reports the `MISSING: tasks-axi` line but firstmate still hand-edits routine backlog updates and never blocks work.
If `config/backlog-backend=manual`, firstmate hand-edits routine backlog updates and bootstrap does not suggest installing `tasks-axi`.
- `NUDGE_SECONDMATES: fm-<id>...` - the secondmate sweep fast-forwarded one or more _running_ secondmate homes to firstmate's current version and their instruction surface (`AGENTS.md`, `bin/`, or `.agents/skills/`) actually changed; send a one-line re-read nudge with `FM_HOME=<this-firstmate-home> bin/fm-send.sh <id> 'firstmate was updated to the latest - please re-read your AGENTS.md to pick up the new instructions.'` unless `FM_HOME` is already set to the active firstmate home.
This mirrors `/updatefirstmate`'s `nudge-secondmates:` report: it is a gentle steer, never an interruption, and the fast-forward already landed safely.
A secondmate that was skipped, already current, or whose advance changed no instructions is not listed and must not be disturbed.
- `FMX: X mode on ...` / `FMX: X mode off ...` - bootstrap confirmed or removed the local X-mode poll artifacts (`docs/configuration.md` "X mode (.env)").
Only when a running watcher needs the cadence transition applied immediately, restart the home-scoped watcher through the emitted harness supervision protocol; bootstrap deliberately never restarts the watcher itself.
Loading