Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
198 commits
Select commit Hold shift + click to select a range
7111081
fix(bin): report verified PR state for passed runs (#4624)
jokim1 Sep 16, 2026
af1f2ea
fix: restore published contribution follow-up (Fixes #4469) (#4627)
mremond Sep 16, 2026
36c9814
fix(bin): make remote report transfers explicit and fail-open (#4658)
kunchenguid Sep 16, 2026
6483df6
fix(calm): preserve substantive mid-turn responses (#4655)
kunchenguid Sep 16, 2026
baede47
fix(bin): preserve PR merge polls across volume remounts (#4656)
mremond Sep 16, 2026
9f8ad95
fix(bin): keep contribution records when the poll budget runs out (fo…
mremond Sep 16, 2026
b0877b4
fix(bin): clear parent pending-replies on local secondmate retirement…
thelad-dev Sep 16, 2026
795e5e4
fix(bin): accept Orca's composite worktree id when tearing down a tas…
JuanJoseGonGi Sep 16, 2026
69d660a
feat(bin): add opt-in typed dispatch resolution (#4692)
kunchenguid Sep 17, 2026
334fa12
fix(bin): read the latest status event so buried declarations and ope…
tiago-peixoto Sep 17, 2026
fa93097
fix(bin): launch codex crewmates with codex's hook layer disabled (#4…
codyjohnsontx Sep 17, 2026
3eb5b63
fix(bin): settle terminal contribution observations (Fixes #4669, Fix…
mremond Sep 17, 2026
f5d7f5f
fix: select authoritative no-mistakes runs (#4476)
mremond Sep 17, 2026
a221640
fix: distinguish captain outcomes from no-op updates (#4738)
kunchenguid Sep 17, 2026
5e879ba
fix(bin): let non-owner Claude Stops exit safely (#4777)
kunchenguid Sep 17, 2026
e213343
fix(bin): survive bash 3.2 empty-array expansion in watcher churn abs…
0x7067 Sep 17, 2026
b752ced
Make the foreign-owner turn-end repro create a Linux-readable session…
kunchenguid Sep 17, 2026
8d9d5da
fix: require complete captain-facing final responses (#4779)
kunchenguid Sep 17, 2026
888871d
fix: preserve substantive mid-turn text in Pi Calm (#4788)
kunchenguid Sep 17, 2026
4055cbd
fix: harden mail checks and rebalance full-coverage CI (#4800)
kunchenguid Sep 18, 2026
5d3acc8
fix(bin): answer Kimi 2.0.0 folder-trust dialog during spawn (#4799)
Shazellb Sep 18, 2026
9bc051f
fix(bin): report a dead-agent record once instead of escalating forev…
umeranjum17 Sep 18, 2026
daaffdb
fix(bin): create captain-hold rows when Beads requires due (#4854)
RooseveltAdvisors Sep 18, 2026
1bb72cc
fix: disable compact adviser for spawned agents (#4877)
kunchenguid Sep 18, 2026
4812db8
fix(bin): preserve Claude lock ownership after helper recycling (#4894)
kunchenguid Sep 19, 2026
65a3bac
feat: park main under the away posture on Pi (#4889)
kunchenguid Sep 19, 2026
2bcb88c
ci: standardize workflow timeouts into three tiers (#4910)
kunchenguid Sep 19, 2026
b6930db
fix(bin): keep supervisor status closes from waking the same home (#4…
tiago-peixoto Sep 19, 2026
1b1b6e0
fix(bin): stop labeling Herdr as experimental (#4972)
kunchenguid Sep 19, 2026
dd9b2ef
fix(bin): treat a live no-mistakes run as current after rebase (#4973)
rovermike Sep 20, 2026
a452a79
fix(bin): prevent long worker launch command truncation (#4994)
kunchenguid Sep 20, 2026
a0b2f34
test: authorize isolated Herdr lab validation (#4998)
kunchenguid Sep 20, 2026
90cd351
docs(vision): accept vendor-semantics and 9k AGENTS ceiling (#4873) (…
kunchenguid Sep 20, 2026
9aabe3b
feat(bin): defer the wedge escalation for a lane parked at a supervis…
aminry Sep 20, 2026
1b1b3cd
fix(bin): reclaim a task whose herdr endpoint was destroyed (#5007)
RooseveltAdvisors Sep 20, 2026
a09090d
feat(bin): stamp status events with their emission time (#3764)
tiago-peixoto Sep 20, 2026
c443d8c
fix(bin): unify Lavish host and disconnect handling (#5060)
kunchenguid Sep 20, 2026
dee119b
feat: act on captain's away words during AFK supervision (#5076)
kunchenguid Sep 20, 2026
804394e
fix(bin): render the remote charter's steering-inbox path host-local …
kesslerio Sep 21, 2026
bd65e4a
feat: route Lavish feedback directly to owning workers (#5099)
kunchenguid Sep 21, 2026
b8ab735
fix(bin): fit pull observation within the contribution poll budget (#…
sdivanl Sep 21, 2026
631bc26
feat(bin): add idempotent inbox capture, replies, receipts, and readi…
cliflacata-svg Sep 21, 2026
d08e327
fix(bin): stop harness footer rows below a composer from reading as p…
puntkoen Sep 21, 2026
fcbaa73
feat(bin): append optional home-local include to briefs (#5115)
guanchengh-lgtm Sep 21, 2026
43bf6d3
fix(bin): report a branch with no validation run as absent instead of…
Authentis Sep 21, 2026
dbc0bc4
fix(bin): require a non-draft pull request before a PR-based done rep…
mremond Sep 21, 2026
259a669
fix: support quota-axi schema 6 snapshots (#4904)
pedromuller-del Sep 21, 2026
aec043c
test: fix Claude session-start drain live E2E (#5165)
kunchenguid Sep 21, 2026
8c1cdb7
ci: pin the no-mistakes required check to v1.80.1 (#5195)
kunchenguid Sep 21, 2026
3fcbc6c
fix(bin): retain Pi watcher predecessor to stop false down alarms (#5…
sdivanl Sep 22, 2026
da9607d
fix(bin): allow cleanup of windowless legacy task records (#5236)
kunchenguid Sep 22, 2026
f9f74a1
ci: exempt kunchenguid from the no-mistakes required check (#5256)
kunchenguid Sep 22, 2026
6f0f139
fix(bin): surface launches parked on an interactive prompt as not-sta…
sdivanl Sep 22, 2026
f5735dc
fix: record away posture immediately on /afk (#5260)
kunchenguid Sep 22, 2026
c5131a3
fix(bin): recognize passed-with-override as a passing outcome (#5294)
mremond Sep 22, 2026
ada21f5
fix: clean up workers after their pull requests land (#5317)
kunchenguid Sep 22, 2026
d92cea0
fix: surface green no-mistakes PRs awaiting merge (#5327)
kunchenguid Sep 22, 2026
884d76b
fix: derive Lavish polling route from board session (#5334)
kunchenguid Sep 22, 2026
dd9f2b4
fix(bin): stop secondmate relaunch failing when watcher scratch files…
tiago-peixoto Sep 22, 2026
39f4c2a
fix(bin): stop each keyed answer from re-waking this home (#4907)
tiago-peixoto Sep 22, 2026
706254d
fix: deliver failed public follow-ups with updated AXI floors (#5350)
kunchenguid Sep 23, 2026
a8a2959
fix(bin): refuse ship done: when the named head exists only in the wo…
tiago-peixoto Sep 23, 2026
82dec2e
fix(bin): ring a proven-idle secondmate before raising a wake-loop st…
tiago-peixoto Sep 23, 2026
a5d78f8
test(watch-arm): size re-arm waits off the real loaded recovery cost …
tiago-peixoto Sep 23, 2026
52fca51
fix: stop watchers reliably during blocked polls (#5362)
kunchenguid Sep 23, 2026
c576c2b
fix: submit stuck inbox doorbells instead of skipping them (#5374)
kunchenguid Sep 23, 2026
f2ab14a
feat: add opt-in fleet activity ledger (#5375)
kunchenguid Sep 23, 2026
e7cb23e
fix: validate public follow-up deliverables and wake on rejection (#5…
kunchenguid Sep 23, 2026
697d94d
feat: add Devin CLI crewmate and scout adapter (#5380)
kunchenguid Sep 23, 2026
7c8f9ee
fix(bin): recognize passed-with-skips as a passing outcome (#5322)
mremond Sep 23, 2026
2efa581
fix(bin): refuse unavailable backend adapters before sourcing (#5382)
Lakescape Sep 23, 2026
77e5af9
test: repair base-red liveness, export-DOM, and wake-queue self-tests…
blackxwhite88 Sep 23, 2026
fef37b9
fix: keep watcher status classification bounded to new log spans (#5383)
kunchenguid Sep 23, 2026
f0da72c
test: close pr-check watcher test gaps (original flake already fixed …
kunchenguid Sep 23, 2026
c00d5e1
feat: record fleet status immediately and emit PR-ready events (#5385)
kunchenguid Sep 23, 2026
1e0e773
test: synchronize foreign queue stall checks with watcher progress (#…
kunchenguid Sep 23, 2026
8c47279
test: isolate the bearings render fixture from the shared Lavish stor…
kunchenguid Sep 23, 2026
7e0e60a
fix(bin): prune a torn-down task's wake rows at teardown (#5390)
blackxwhite88 Sep 23, 2026
9296f9b
test: align portable test expectations with resolved host paths and f…
sandeepsalwan1 Sep 23, 2026
5df1294
test: make sibling secondmate stall tests wait for watcher observatio…
kunchenguid Sep 23, 2026
1d3ac67
fix(bin): refuse a Herdr Claude submit that would send only a message…
tiago-peixoto Sep 23, 2026
fdd3687
feat(bin): publish and watch Gerrit changes on forge-bound projects (…
slnkjthien Sep 23, 2026
0afc6b4
feat(bin): opt-in per-home Claude and Pi worker account pin (#5358)
tiago-peixoto Sep 23, 2026
5bbb978
fix(bin): keep Herdr lab session selection before passthrough argumen…
yasuhito Sep 23, 2026
ac2ed3b
fix: enforce supervision guards across harnesses (#5471)
kunchenguid Sep 23, 2026
67130f1
feat(bin): make the ship-branch prefix configurable per project (#2648)
wesleymatosdev Sep 24, 2026
795e4b5
feat(bin): send dispatch router only the brief's task sections and ad…
zachlandes Sep 24, 2026
9284978
feat: add opt-in Claude away supervision host (#5488)
kunchenguid Sep 24, 2026
d4f3b78
docs: correct the Grok harness reference on folder trust, training op…
Courtneyezra Sep 24, 2026
5842d42
fix(bin): bound the startup-network worker's lock waits by its budget…
karotkriss Sep 24, 2026
e1d6cf9
fix(bin): make the ps-fallback watcher identity immune to terminal wi…
karotkriss Sep 24, 2026
474c6ee
fix(bin): ignore fenced and indented Captain lines when extracting au…
karotkriss Sep 24, 2026
0d983d2
fix(bin): forbid administering the shared worktree pool in crewmate b…
karotkriss Sep 24, 2026
977a81e
fix(bin): refuse tasks-axi add/create --start so In flight always has…
karotkriss Sep 24, 2026
e1b7f4f
feat: extend opt-in away supervision to non-Pi primaries (#5503)
kunchenguid Sep 24, 2026
d1ce6b6
fix: auto-relaunch dead secondmates during supervision (#5496)
kunchenguid Sep 24, 2026
31c47af
fix(bin): start a successor when the Claude Stop-hook arm's attached …
karotkriss Sep 24, 2026
b42d4fa
fix(bin): report a Lavish source armed only after its listener is run…
tiago-peixoto Sep 24, 2026
52e679b
fix(bin): stop repeating unknown-wake escalations that were already d…
tiago-peixoto Sep 25, 2026
c6e816f
fix(bin): keep a stated default-key retraction from cancelling a keyl…
tiago-peixoto Sep 25, 2026
a8572f6
fix(bin): terminate a remote job worker that lost ownership on TERM (…
tiago-peixoto Sep 25, 2026
4be8a40
docs: make configuration settings easier to find and understand (#5589)
tmchow Sep 25, 2026
b52d401
fix: limit project memory edits to factual corrections (#5636)
kunchenguid Sep 25, 2026
ca8c293
feat: permit gate lifecycle calls against disposable lab homes (#5635)
kunchenguid Sep 25, 2026
b575497
fix(bin): evict a watcher whose beacon stalls past a hard bound inste…
karotkriss Sep 25, 2026
5cec4e2
fix(pi): hide queued Firstmate inputs under Calm only when the sessio…
tiago-peixoto Sep 25, 2026
756f64e
fix(bin): refuse teardown when a required source disappears (#5548)
tiago-peixoto Sep 25, 2026
4e99de7
docs: make supervision-host easier to read (#5605)
tmchow Sep 25, 2026
660fa4a
docs: make the Herdr backend guide easier to read (#5606)
tmchow Sep 25, 2026
5323582
docs: make pi-supervision-branch easier to read (#5607)
tmchow Sep 25, 2026
d18a220
docs: make watcher-continuity easier to read (#5608)
tmchow Sep 25, 2026
70e41a8
docs: make sessionstart-nudge easier to read (#5609)
tmchow Sep 25, 2026
7c501a1
docs: make captain-hold-lifecycle easier to read (#5610)
tmchow Sep 25, 2026
c60f0ab
docs: make remote-secondmates easier to read (#5612)
tmchow Sep 25, 2026
683b3eb
fix(bin): bound the away digest and log why a delivery failed (#5554)
Sophylax Sep 25, 2026
dbe124d
test: add a gated harness seam and stabilize lifecycle fixtures (#5638)
kunchenguid Sep 25, 2026
1a814e4
fix(bin): refuse watchers from disposable checkouts and exit when the…
karotkriss Sep 25, 2026
84362f6
fix(bin): surface unrecognized status prefixes instead of reading the…
tiago-peixoto Sep 25, 2026
e97390a
fix(bin): report the failing item when remote inheritance fails (#5658)
karotkriss Sep 25, 2026
c643b57
fix(bin): stand down the Claude Stop auto-arm on pi-code-delivered pa…
karotkriss Sep 25, 2026
d1abcd6
fix(bin): match whole multi-word project names in the registry lookup…
karotkriss Sep 25, 2026
b805823
fix(bin): classify shell stdin payloads after -s operands (#5546)
coreldh Sep 25, 2026
83a4bbd
fix(bin): strip AI co-author trailers from fleet-launched commits (#5…
tiago-peixoto Sep 25, 2026
67f6c27
fix(bin): treat Pi's dollar-first cost footer as furniture (#5683)
tiago-peixoto Sep 25, 2026
8d2ee29
fix(bin): refuse merges with unreported required checks (#5534)
mremond Sep 25, 2026
0154324
fix: keep persistent secondmates out of landed-work cleanup (#5696)
kunchenguid Sep 25, 2026
f54aa00
fix: reject invalid X reply and follow-up arguments before posting (#…
kunchenguid Sep 25, 2026
3c14a54
fix: pause broken supervision-host sessions between engine probes (#5…
kunchenguid Sep 25, 2026
97365aa
fix(bin): absorb routine secondmate working and paused status appends…
karotkriss Sep 25, 2026
c4c9d63
fix(bin): use gh-axi for the ship DoD draft check (#5519)
karotkriss Sep 25, 2026
f1ea9ed
fix(bin): bind inactive-outcome receipt identity to structured fields…
karotkriss Sep 25, 2026
4299683
feat: record the Claude and Cursor dialog for the supervision host (#…
kunchenguid Sep 25, 2026
c33b3f6
fix(bin): retire check-row receipts on branch acknowledgement so away…
kunchenguid Sep 26, 2026
1fe1a67
fix(bin): deliver Claude-bound operational input as a record-backed d…
kunchenguid Sep 26, 2026
ef595d8
test: isolate lint fixture from tracked suite (#5727)
kunchenguid Sep 26, 2026
e789e52
fix(bin): republish parent metadata after a remote secondmate relaunc…
tiago-peixoto Sep 26, 2026
9a4cfbb
fix(bin): give slow watcher suites headroom under the changed-suite b…
karotkriss Sep 26, 2026
df4ae5d
fix(bin): stop nested steal-lock recursion and mid-steal watcher TERM…
kunchenguid Sep 26, 2026
873c923
test: make supervision-host park-boundary tests deterministic (#5710)
kunchenguid Sep 26, 2026
ea7c7f7
fix: stage remote home clones before publication (#5733)
kunchenguid Sep 26, 2026
920a7d9
fix: preserve Herdr status on Pi relaunch (#5161)
sdivanl Sep 26, 2026
65c53fb
Seed the relaunch-ordering PR poll fixture without fm-pr-check.sh (#5…
kunchenguid Sep 26, 2026
9b52cf5
feat: add attended supervision for Claude and Cursor hosts (#5748)
kunchenguid Sep 26, 2026
72b63ee
fix(bin): dedup directed source expansions in fm-pending-reply-lib (#…
kunchenguid Sep 26, 2026
d1a332c
fix(bin): avoid bash 5.2 sibling $() in recovery mint and delivery lo…
Lakescape Sep 26, 2026
3948170
fix(bin): name the recovery for a declined Claude imports dialog and …
karotkriss Sep 26, 2026
062d7a8
fix(bin): report the newest status event in the voice status reader (…
karotkriss Sep 26, 2026
e9a6675
fix(bin): gate a self-announcing tool's update-available report on a …
karotkriss Sep 26, 2026
cf20836
fix(bin): pass the dispatch profile effort to OpenCode workers throug…
karotkriss Sep 26, 2026
9d56cf6
fix: stop cancelled validation runs from reporting false failures (#5…
mremond Sep 26, 2026
bb69be6
fix: require declared waits for workers awaiting their own work (#5812)
mremond Sep 26, 2026
503ba82
fix: bound ShellCheck to one canonical root per process (#5770)
kunchenguid Sep 26, 2026
5700baa
fix: bound watcher cleanup wait on the downtime-marker lock (#5732)
kunchenguid Sep 26, 2026
62d643c
test: stop the remote secondmate e2e watcher before temp-root cleanup…
aminry Sep 26, 2026
30ef650
fix(bin): stop reporting untouched shared-captain copies as drift (#4…
tiago-peixoto Sep 26, 2026
f62a7d9
docs: restructure calm.md for readability (#5604)
tmchow Sep 27, 2026
3b68997
docs: restructure turnend-guard.md for readability (#5611)
tmchow Sep 27, 2026
49a218b
docs: move situational AGENTS.md sections into on-demand skills (#5872)
kunchenguid Sep 27, 2026
5a9880b
fix: route second-mate signal wakes by presented status span (#5879)
kunchenguid Sep 27, 2026
fd88ea0
fix(bin): take the source lock before the lifecycle lock in register-…
FocalFactotum Sep 27, 2026
b4561ad
fix: chain repository hooks under git -c overrides (#5877)
FocalFactotum Sep 27, 2026
fba81cb
fix(bin): withhold never-send values from dispatch resolver requests …
zachlandes Sep 27, 2026
6839202
feat(jev): add the guard framework contract and the memory RSS/swap t…
RooseveltAdvisors Sep 27, 2026
d051e6f
fix: prevent contribution poll starvation on slow GitHub reads (#5900)
0x7067 Sep 27, 2026
bff6454
feat(bin): add config/keep-ai-trailers opt-out to keep AI co-author t…
kiatng Sep 27, 2026
050a446
fix(bin): capture the full viewport for Herdr composer reads so a sla…
andrewesweet Sep 27, 2026
8a18fe2
fix(bin): isolate per-task endpoint reads in bounded children with a …
andrewesweet Sep 27, 2026
f93f0d3
fix: keep lab tmux sockets private and short under deep worktrees (#5…
kunchenguid Sep 27, 2026
ade7133
fix: silence routine no-change supervision outcomes (#5808)
jcpoyser Sep 27, 2026
8c5493a
feat: make /quiet a statement when attended supervision is ready (#5928)
kunchenguid Sep 27, 2026
c19c240
fix: grant Claude workers access to Firstmate task channels (#5884)
kunchenguid Sep 27, 2026
90e88d7
fix(bin): prevent idle recovery loops without stranding wakes (#4819)
jokim1 Sep 27, 2026
3d14792
fix: reduce remote worker and polling helper process churn (#5889)
kunchenguid Sep 27, 2026
022250d
fix: keep remote reply listeners and watcher cycles running (#5941)
kunchenguid Sep 27, 2026
3c2a91d
fix: make attended cutover outcome re-presentation check-first (#5925)
kunchenguid Sep 28, 2026
1b82b77
fix: restore primary rewakes after attended main-only closes (#5961)
kunchenguid Sep 28, 2026
9096504
Clarify live Claude login for opted-in tests (#5975)
kunchenguid Sep 28, 2026
fa48367
fix(bin): ensure resumed worker launches enter their recorded worktre…
mehulbhagwani Sep 28, 2026
6b0f5a0
fix(bin): retire task-keyed watcher markers and orphan journals at te…
karotkriss Sep 28, 2026
29213a0
test: guard the live harness gate against Claude Code's auto-updater …
karotkriss Sep 28, 2026
d5c2507
fix(bin): ring the worker inbox doorbell only for a newly written pro…
karotkriss Sep 28, 2026
b3dbc67
fix: prevent manual Claude Stop hook calls from arming supervision (#…
kunchenguid Sep 28, 2026
a256cb5
feat(firstmate-calm): show supervision notes in Claude Code (#6039)
kunchenguid Sep 28, 2026
4e158e6
fix: stop quiet mode from holding requested actions for return (#6033)
kunchenguid Sep 28, 2026
d9a89b2
Say ahoy impact order is the first mate's pick. (#6065)
kunchenguid Sep 28, 2026
eb219c8
fix(bin): accept a task's next PR after its bound PR merges in fm-pr-…
karotkriss Sep 28, 2026
2d833ff
fix: treat quiet records as attended across supervision (#6064)
kunchenguid Sep 29, 2026
00679ae
fix: report supervision host latches accurately in away return briefs…
kunchenguid Sep 29, 2026
40e981d
fix: shorten Claude Code Calm supervision note label (#6086)
kunchenguid Sep 29, 2026
b5fdf74
feat(bin): add a disposable live supervision lab builder (#6037)
kunchenguid Sep 29, 2026
0deb804
Merge upstream main b5fdf74d into the fork
Sep 29, 2026
bf98302
no-mistakes(ci): Fixed both failing CI shards. Restored Claude Automi…
Sep 29, 2026
57fc7ff
no-mistakes(ci): Fixed the flaky Pi Calm reload geometry E2E wait. It…
Sep 29, 2026
ebe65c9
no-mistakes(ci): Fixed Pi Calm reload geometry at the shared session_…
Sep 29, 2026
9b303e7
no-mistakes(ci): Fixed Pi Calm reload geometry by restoring persisted…
Sep 29, 2026
6c10b6a
no-mistakes(ci): Fixed Calm toggling to reload after persisting eithe…
Sep 29, 2026
353c75c
fix: restore upstream Pi Calm rendering and take upstream Pi 0.99 fix
Sep 29, 2026
cb3f3b7
no-mistakes(document): Correct Pi Calm rendering documentation
Sep 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
125 changes: 70 additions & 55 deletions .agents/skills/afk/SKILL.md

Large diffs are not rendered by default.

28 changes: 28 additions & 0 deletions .agents/skills/agent-skill-trigger-index/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
name: agent-skill-trigger-index
description: Load only when auditing or maintaining the complete agent-only skill trigger index.
user-invocable: false
metadata:
internal: true
---

# Agent-only reference skills

These skills are not captain-invocable; load them only at their precise triggers.

- `bootstrap-diagnostics` - load whenever the session-start digest's bootstrap or network-checks section prints an actionable diagnostic line (`MISSING:`, `MISSING_MANUAL:`, `PRESENTATION_UNAVAILABLE:`, `BACKEND_INVALID:`, `NEEDS_GH_AUTH`, `TANGLE:`, `STARTUP_MEMORY_BUDGET:`, `CREW_DISPATCH: invalid`, `FLEET_SYNC:`, `NETWORK_CHECKS:`, `HOME_SUMMARY:`, `BACKLOG_RECONCILE:`, `SECONDMATE_SYNC:`, `SECONDMATE_LIVENESS:`, `SECONDMATE_HANDOFF:`, `NUDGE_SECONDMATES:`, or `FMX:`), or when `BOOTSTRAP_INFO:` says an interrupted backlog cleanup may have left an endpoint or local copy; silence and other `BOOTSTRAP_INFO:` facts need no load.
- `diagnostic-reasoning` - load before scoping a reported bug and before acting on a diagnostic report.
- `ask-user-authority` - load before deciding any ask-user finding.
- `quota-array-dispatch` - load before choosing among a matched crew-dispatch profile array from current quota-axi default TOON.
- `harness-adapters` - load before spawning or recovering a crewmate or secondmate, handling a trust dialog, sending a harness-specific skill invocation, interrupting or exiting an agent, resuming an exited agent, or verifying a new harness adapter.
- `firstmate-orca` - load before switching to Orca, spawning or supervising Orca-backed work, smoke-testing Orca backend behavior, debugging Orca task state, or reconciling Orca-backed task metadata.
- `project-management` - load before adding, creating, removing, initializing, parking, un-parking, or archiving a project.
Cloning or registering a project is add intake and uses the same trigger.
- `stuck-crewmate-recovery` - load when the session-start digest reports an ordinary direct report's endpoint dead or its metadata has no window, after a stale wake, looping pane, repeated confusion, an answered-by-brief question, an unresponsive crewmate, or a failed steer, and whenever a live worker reports its no-mistakes pipeline dead, unreachable, or timed out.
- `secondmate-provisioning` - load before creating, seeding, validating, launching, handing backlog to, recovering, pushing inherited local material into, or retiring a secondmate home, and before editing `data/secondmates.md`.
- `captain-hold-lifecycle` - load before treating an investigation or visual review as complete, before ending a visual review that exposed a captain decision, when recording or routing the captain's answer, and on any `RECORD DIVERGENCE` line from the wake drain.
- `process-event-sources` - load before arming a long-polling source, before registering a deterministic condition->action watch (do X as soon as Y is true), on any `procevent <adapter> <source-id> <sequence>` check wake, and on any `process-event source stranded` or `process-event source failed to start` check wake.
Never run a registered source's blocking command yourself in a conversational turn.
- `fmx-respond` - load on an `x-mention <request_id>` `check:` wake to handle the mention, on an `x-mode-error ...` `check:` wake to report the Relay configuration blocker, on a `public-followup ...` `check:` wake or a startup-surfaced public commitment, and on any milestone or terminal wake for a Relay-linked task before posting its completion follow-up; relevant only when Relay is on.
- `firstmate-codexapp` - load before coordinating a visible Codex Desktop thread, evaluating a Codex App backend request, or reconciling Codex Desktop host-tool smoke evidence for Firstmate work.
- `firstmate-coding-guidelines` - load before changing firstmate's shared, tracked material, as defined by section 1's list, whether editing directly or briefing a crewmate for a firstmate-repo task.
3 changes: 2 additions & 1 deletion .agents/skills/ahoy/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Give the captain a concise session-only recap without gathering fresh state.
A captain boundary is an ordinary user-role message unless it matches one of the narrow operational exclusions below.
Exclude messages that begin with the current U+2063 `FIRSTMATE_OP:` injection prefix.
Exclude legacy bare-marker away-mode injections only when U+2063 is immediately followed by `Supervisor escalate (`.
Exclude a message that is exactly a record-backed operational doorbell that `bin/fm-operational-input.sh doorbell-kind` recognizes from its stdin; Claude Code, which strips U+2063, receives away-mode escalations this way.
Exclude the exact legacy unmarked session-start payload ``Run `bin/fm-session-start.sh` now, exactly once, before executing any other instructions.``
Custom-role messages such as Pi's `firstmate-sessionstart-nudge` are not captain messages.
System, developer, tool, watcher, guard, away-mode, and other injected operational messages are not captain messages.
Expand All @@ -44,7 +45,7 @@ Give the captain a concise session-only recap without gathering fresh state.
If neither ordinary events nor visibly open decisions exist, say directly in one sentence that nothing happened after the previous captain message.

8. After the normal recap, when the existing visibly open decision inventory contains decisions, begin a guided decision-clearing flow by presenting only the single open decision judged most impactful by the first mate.
Make clear that impact ordering is the first mate's judgment rather than a mechanical score.
Say the ordering is the first mate's pick.
Give enough escalation-quality context to decide easily: the decision, why it matters, the options, and a recommendation.
9. When the captain answers the presented decision, present the next highest-impact decision from that existing inventory in the same form.
Continue one decision at a time until none remain, without starting this flow when the inventory is empty.
Expand Down
24 changes: 24 additions & 0 deletions .agents/skills/away-quiet-supervision/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
name: away-quiet-supervision
description: Load whenever /afk or /quiet is invoked, an away or quiet record exists, or a marked away-supervisor message arrives.
user-invocable: false
metadata:
internal: true
---

# Away and quiet supervision safety

The `/afk` and `/quiet` skills own their respective entry procedures and share the daemon machinery; [architecture](../../../docs/architecture.md) owns the captain-held recheck difference between their postures.
These safety facts apply to both:

- Every current daemon injection uses the `away-supervisor` kind from `bin/fm-operational-input.sh` after `FM_OPERATIONAL_PREFIX` (U+2063 INVISIBLE SEPARATOR followed by `FIRSTMATE_OP: `), except that a Claude Code primary, which strips U+2063, receives that owner's record-backed doorbell and it counts as marked only when `bin/fm-operational-input.sh open <path>` verifies its record; the `/afk` skill owns legacy bare-marker compatibility.
- `state/.afk-contract` is the away posture, written in the same turn as `/afk` before any other work, because `/afk` is itself the go: no read-back gates entry or waits for a go; entry announces hold-for-return only, and the away session acts on those words by its own judgment through the guarded scripts under standing authority, holding for the return on doubt.
A record carrying quiet mode (`bin/fm-afk-contract.sh mode`) is quiet mode's instead: the captain is present, it holds nothing for a return, and requested actions proceed under ordinary attended authority.
- While `state/.afk` exists, the daemon owns supervision; do not arm a separate watcher.
The daemon is never launched on Pi, where the ordinary supervision session continues under the record with main parked: the branch takes every safe actionable wake it can, and only a declined wake (including a broken branch or unsafe scan) or a watcher failure wakes main.
Away mode on a non-Pi home with `config/supervision-host` works the same way with the supervision host as the branch; a wake it hands back arrives through that harness's own wake path and is never the captain's return.
- A marked message while away or quiet mode is active is internal escalation and does not exit that mode.
- A message beginning `/afk` refreshes away mode; a message beginning `/quiet` refreshes quiet mode.
- Any other unmarked message means the captain returned in away mode (load `/afk`, run the return owner, and do not process that message as ordinary work until its durable catch-up gate clears), or, in quiet mode, is simply answered as ordinary work with the flag and daemon left untouched until an explicit `/quiet off`.
- Away and quiet mode never expand approval authority for merges, ask-user findings, destructive actions, irreversible actions, or security-sensitive choices.
- Bias ambiguous input toward exit because a present captain takes precedence.
3 changes: 2 additions & 1 deletion .agents/skills/bootstrap-diagnostics/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ metadata:

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 to actionable lines.
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.
The session-start rules in `session-start-recovery` 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.
When any diagnostic needs captain attention, report the plain consequence and requested action using `AGENTS.md` section 9's captain-facing translation contract; do not name the diagnostic label unless the captain needs to paste it into a command or issue.

- `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...>`.
Expand All @@ -40,6 +40,7 @@ When any diagnostic needs captain attention, report the plain consequence and re
- `CREW_DISPATCH: invalid config/crew-dispatch.json - <reason>` - the optional dispatch profile file exists but failed low-cost bootstrap validation; stop profile-based dispatch, report the actionable error, and require correction of the malformed schema, unverified harness name, or invalid harness/effort pair rather than falling back around it or selecting a bad profile.
- `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.
`skipped: registry entry does not resolve to a delivery posture` is the one skip that is not one-off: the clone is left alone on every bootstrap until `data/projects.md` is corrected, so run the printed `bin/fm-project-mode.sh <repo>` to read the refusal and fix the entry.
- `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.
Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/captain-hold-lifecycle/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Only `answer` with the captain's words or an evidence-backed `reconcile close` m
Never close anything the captain owns without recording what he actually said: `bin/fm-captain-hold.sh answer` writes his exact words into the task and closes a question-shaped call, while `--release` frees a captain-gated work item to proceed.
A merge approval uses that existing release path because approval permits the merge to proceed; cleanup closes the work only after it lands and records what shipped.
Closing a held row at merge approval instead records completion before landing, so the backlog claims completion before the work actually ships.
When the answer changes what a task must build, follow `AGENTS.md` section 7's Validate contract to preserve the captain's words in the brief and steer the worker.
When the answer changes what a task must build, follow `AGENTS.md` section 7's mid-task ask rule to preserve the captain's words in the brief and steer the worker.
When the captain says "later", that is an answer too: re-hold with `bin/fm-captain-hold.sh hold <id> --reason "<reason>" --until <date>` so the item leaves the live Captain's Call and resurfaces on its date, instead of leaving a live-looking card or fabricating a closure.
"A keyed answer resolves its matching captain-held task" is one capability with one owner, `bin/fm-captain-hold.sh answers`, and every channel that carries a captain answer feeds it the same task id and answer; a channel never maps keys to tasks, records a decision, or resolves anything itself.
Chat already feeds it through `bin/fm-send.sh --resolve-key`, and a captured-answer source feeds it once bound with `bin/fm-captain-hold.sh bind <source-id>`; bind before arming the source, and key each structured question by the held task's id.
Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/firstmate-codexapp/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ For a Firstmate-managed task, include an explicit status instruction:
```text
Append supervisor-visible status lines to <absolute-firstmate-home>/state/<task-id>.status.
Use only these prefixes for status changes: working:, needs-decision:, blocked:, paused:, done:, failed:.
Use paused: only for a deliberate known external wait that should be rechecked later, never for a blocker that needs firstmate to act.
Follow the task brief's status-reporting rule for declaring and resolving waits; bin/fm-brief.sh owns that rule.
Before doing substantive work, append "working: Codex Desktop thread started".
```

Expand Down
7 changes: 4 additions & 3 deletions .agents/skills/firstmate-coding-guidelines/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Before writing a new fact anywhere in this repo, ask where it belongs, in this o
1. Does the firstmate AGENT need this on every session or every turn to operate?
If yes: `AGENTS.md`, inline.
2. Does the agent need it only in a nameable situation - a spawn, a recovery, a specific wake type, a specific lifecycle step?
If yes: an agent-only skill under `.agents/skills/`, plus a one-line trigger pointer left inline in `AGENTS.md` (usually section 13).
If yes: an agent-only skill under `.agents/skills/`, whose description states its load trigger; leave a one-line inline pointer in `AGENTS.md` only when an always-loaded rule must name the skill.
3. Is it public product, setup, or user/operator reference?
If yes: the surface classified for that audience in [`docs/documentation-audiences.md`](../../../docs/documentation-audiences.md), limited to current behavior, setup, supported limits, stable invariants, concise rationale, and current verification entry points.
4. Is it contributor/maintainer architecture?
Expand Down Expand Up @@ -53,7 +53,7 @@ That is the trigger condition for loading the skill, plus any safety-critical fa
Everything else - the procedure, the mechanism, the surrounding detail - moves out completely.
Do not leave a partial restatement behind "just in case".
A partial copy is exactly the duplication the one-owner rule forbids.
The model to copy is `AGENTS.md` section 8's "Away-mode and quiet-mode stub": it keeps only the marker format, the ownership-transfer rule, and the exit condition inline, and points everything else at the `/afk` and `/quiet` skills.
The model to copy is `AGENTS.md` section 8's "Away-mode and quiet-mode stub": it keeps only the skill-invocation triggers inline and points everything else at the `/afk`, `/quiet`, and `away-quiet-supervision` skills.

## Size discipline

Expand All @@ -66,7 +66,7 @@ When in doubt, write the fact into the skill or doc first by patching that owner
## Trigger hygiene

A new skill is dead weight if nothing loads it.
Every new skill needs its load trigger declared inline: section 13 for agent-only reference skills, or the relevant operating section for anything else.
Every new skill needs its load trigger declared in its description, which is the always-loaded trigger index; add an inline `AGENTS.md` pointer only in the operating section whose always-loaded rule must name it.
State the trigger as a condition ("load before X", "load on Y wake"), never as a vague pointer.
Briefs for tasks that touch firstmate's own tracked material should tell the crewmate to load this skill.
`bin/fm-brief.sh`'s `REPO` argument is a caller-supplied string with no reliable signal that it names firstmate's own repo, unlike a project registered in `data/projects.md`, so there is no clean point inside the scaffold to detect this case automatically.
Expand Down Expand Up @@ -125,6 +125,7 @@ Firstmate PR #3644 demonstrated the cost: pinning a 75-162-script walk took 32.7
- Plain dash `-`, never an em dash.
- Never add an agent name as a commit co-author.
- `bin/*.sh` and `bin/backends/*.sh` must pass `shellcheck`.
- Run Firstmate production-library tests and commands that source `bin/` scripts under `bash` explicitly, never through the tool shell's default interpreter.
- Run `bin/fm-lint.sh` before treating a script change as done; it is the single owner of the lint definition that CI and the no-mistakes pre-push gate both invoke, its own header owns what that definition covers, and it refuses to run under any other version of either linter.
- When a task names a specific tool, implement the work with that tool, or explicitly flag the substitution and its new dependency footprint for review before shipping.
- Colocate tests with the existing pattern in `tests/`, name them `<subject>.test.sh`, and extend an existing script rather than inventing a new runner.
Expand Down
Loading
Loading