Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
55c512b
feat: add default-off agent account routing
ruby-dlee Jul 14, 2026
28a6d3f
no-mistakes(review): Captain: harden Agent Fleet routing and continua…
ruby-dlee Jul 14, 2026
415ae98
no-mistakes(review): Captain: harden Agent Fleet lifecycle ownership
ruby-dlee Jul 14, 2026
ca8f735
no-mistakes(review): Captain: harden managed recovery lifecycle owner…
ruby-dlee Jul 14, 2026
33bc9e0
no-mistakes(review): Captain, harden managed account routing lifecycle
ruby-dlee Jul 14, 2026
fa81be8
no-mistakes(review): Captain, harden agent routing lifecycle invariants
ruby-dlee Jul 14, 2026
06f5ca0
feat: add durable completion report stack
ruby-dlee Jul 14, 2026
d3ddd4c
no-mistakes(review): Captain, harden agent lifecycle and report retries
ruby-dlee Jul 14, 2026
82cce4c
no-mistakes(review): Captain, harden fleet lifecycle and audit durabi…
ruby-dlee Jul 14, 2026
81f93c4
no-mistakes(review): Captain, harden fleet lifecycle and report publi…
ruby-dlee Jul 14, 2026
e43523f
no-mistakes(review): Captain, harden fleet locks and report safety
ruby-dlee Jul 14, 2026
e02b47d
no-mistakes(review): Captain, preserve respawn metadata and reject st…
ruby-dlee Jul 14, 2026
1810367
no-mistakes(review): Captain, harden fleet recovery and control-plane…
ruby-dlee Jul 14, 2026
115161a
no-mistakes(review): Captain, harden fleet lifecycle and report safety
ruby-dlee Jul 14, 2026
4f9d47f
no-mistakes(review): Captain, harden fleet recovery, locks, timeouts,…
ruby-dlee Jul 14, 2026
7cf6afe
fix: complete fleet recovery and report enforcement
ruby-dlee Jul 14, 2026
43a506e
no-mistakes(review): Captain, harden fleet lifecycle safety and porta…
ruby-dlee Jul 14, 2026
5b9ef61
no-mistakes(review): Captain, harden fleet lifecycle and report safety
ruby-dlee Jul 14, 2026
c61812d
no-mistakes(review): Captain, harden fleet and report crash recovery
ruby-dlee Jul 14, 2026
0a56edd
no-mistakes(review): Captain, serialize metadata writes and cmux reco…
ruby-dlee Jul 14, 2026
3c5ebdc
no-mistakes(review): Captain, move PR lookup outside metadata lock
ruby-dlee Jul 15, 2026
fedddbf
no-mistakes(review): Captain, preserve ship completion reports across…
ruby-dlee Jul 15, 2026
cb59312
no-mistakes(review): Captain, fix Herdr absent-pane recovery
ruby-dlee Jul 15, 2026
033522e
no-mistakes(review): Captain, harden lifecycle locking and endpoint r…
ruby-dlee Jul 15, 2026
8fb36b1
no-mistakes(review): Captain, harden Herdr identity and AFK gate safety
ruby-dlee Jul 15, 2026
4ee95e6
no-mistakes(review): Captain, harden fleet lifecycle safety boundaries
ruby-dlee Jul 15, 2026
560ac1c
no-mistakes(review): Captain, harden AFK and secondmate recovery life…
ruby-dlee Jul 15, 2026
747b016
no-mistakes(review): Captain, harden fleet lifecycle and continuation…
ruby-dlee Jul 15, 2026
61f2033
no-mistakes(review): Captain, bound continuation snapshots before ass…
ruby-dlee Jul 15, 2026
950a546
no-mistakes(review): Captain, harden continuation and report teardown…
ruby-dlee Jul 15, 2026
f3eea14
no-mistakes(review): Captain, harden backend creation rollback safety
ruby-dlee Jul 15, 2026
b42adcd
no-mistakes(review): Captain, harden fleet lifecycle and reporting sa…
ruby-dlee Jul 15, 2026
fbcc0c9
no-mistakes(review): Captain, harden fleet lifecycle and reporting sa…
ruby-dlee Jul 15, 2026
c327e57
no-mistakes(review): Captain, harden fleet lifecycle and artifact safety
ruby-dlee Jul 15, 2026
8b37225
no-mistakes(review): Captain, harden rollback, context, and wake stag…
ruby-dlee Jul 15, 2026
8eff6be
no-mistakes(review): Captain, harden recovery locks and native launch…
ruby-dlee Jul 15, 2026
5ca9e5c
no-mistakes(review): Captain, harden recovery locks and bounded state…
ruby-dlee Jul 15, 2026
df364aa
no-mistakes(review): Captain, harden lifecycle, AFK, and artifact safety
ruby-dlee Jul 15, 2026
e235bfe
no-mistakes(review): Captain, harden fleet controls and artifact safety
ruby-dlee Jul 15, 2026
2ec66a7
no-mistakes(review): Captain, harden X context and report reads
ruby-dlee Jul 15, 2026
9f1ff4e
no-mistakes(review): Captain, harden lifecycle locks and artifact pro…
ruby-dlee Jul 15, 2026
e905064
no-mistakes(review): Captain, harden lifecycle locks and AFK safety
ruby-dlee Jul 15, 2026
4124837
no-mistakes(review): Captain, harden AFK marker validation and preser…
ruby-dlee Jul 15, 2026
39d56a9
no-mistakes(review): Captain, reject malformed Herdr verification rec…
ruby-dlee Jul 15, 2026
3ed15e6
no-mistakes(test): Captain: fix teardown ordering and refresh endpoin…
ruby-dlee Jul 15, 2026
264b7c4
no-mistakes(test): Captain: fix AFK reclaim race and stale fixtures
ruby-dlee Jul 15, 2026
2eb4224
no-mistakes(test): Captain: fix Herdr tripwire and stale e2e fixtures
ruby-dlee Jul 15, 2026
a3e7374
no-mistakes(test): Captain: guard account-routing failures against er…
ruby-dlee Jul 15, 2026
d787792
no-mistakes(document): Document Agent Fleet and completion reports
ruby-dlee Jul 15, 2026
f31b88a
no-mistakes(lint): Captain: Fix secondmate liveness lint conditional
ruby-dlee Jul 15, 2026
49b8cc6
no-mistakes: apply CI fixes
ruby-dlee Jul 15, 2026
7910fce
no-mistakes: apply CI fixes
ruby-dlee Jul 15, 2026
288c3bf
fix report section fence parsing
ruby-dlee Jul 15, 2026
29a71ac
no-mistakes(review): Captain, harden report parsing and contract writes
ruby-dlee Jul 15, 2026
37a0178
no-mistakes(review): Captain, harden report parsing and steering pers…
ruby-dlee Jul 15, 2026
d999046
no-mistakes(review): Captain, harden report and steering race handling
ruby-dlee Jul 15, 2026
a3cf22e
no-mistakes(review): Captain, harden reports and lifecycle transactions
ruby-dlee Jul 15, 2026
fcbf49d
no-mistakes(review): Captain, harden lease, visual, and steering safety
ruby-dlee Jul 15, 2026
8f26f11
no-mistakes(review): Captain, harden recovery, continuation, sync, an…
ruby-dlee Jul 16, 2026
891005d
no-mistakes(review): Captain, harden continuation, sync, parsing, and…
ruby-dlee Jul 16, 2026
9257ad3
no-mistakes(review): Captain, harden containment, sync fairness, and …
ruby-dlee Jul 16, 2026
ab0a5fd
no-mistakes(review): Captain, harden fleet lifecycle and report reten…
ruby-dlee Jul 16, 2026
c93f08f
no-mistakes(review): Captain, harden retention, artifacts, and fleet …
ruby-dlee Jul 16, 2026
efa6c7e
no-mistakes(review): Captain, harden fleet recovery and report retent…
ruby-dlee Jul 16, 2026
e54209f
no-mistakes(review): Captain, harden retention and recovery race safety
ruby-dlee Jul 16, 2026
4230a09
no-mistakes(review): Captain, harden fleet recovery and retention tra…
ruby-dlee Jul 16, 2026
a0acb47
no-mistakes(review): Captain, harden continuation and fleet recovery …
ruby-dlee Jul 16, 2026
bd453fd
no-mistakes(review): Captain, harden fleet recovery and retention safety
ruby-dlee Jul 16, 2026
3d65620
no-mistakes(review): Captain, harden fleet lifecycle and retention tr…
ruby-dlee Jul 16, 2026
7fc86d2
no-mistakes(review): Captain, harden retention and tmux lifecycle safety
ruby-dlee Jul 16, 2026
69fb52f
no-mistakes(review): Captain, harden retention fencing and continuati…
ruby-dlee Jul 16, 2026
d1c6adc
no-mistakes(review): Captain, harden fleet identity, continuation, an…
ruby-dlee Jul 16, 2026
3c7d373
no-mistakes(review): Captain, harden fleet continuation and retention…
ruby-dlee Jul 16, 2026
38c32e0
no-mistakes(review): Captain, harden retention and lifecycle race safety
ruby-dlee Jul 16, 2026
264a43f
no-mistakes(review): Captain, harden retention and artifact provenanc…
ruby-dlee Jul 16, 2026
ae23fb3
no-mistakes(review): Captain: fix fleet continuation and retention de…
ruby-dlee Jul 16, 2026
6e18561
no-mistakes(review): Captain, enforce retention minimums and legacy P…
ruby-dlee Jul 16, 2026
7ab8f86
no-mistakes(review): Captain, harden continuation transport and reten…
ruby-dlee Jul 16, 2026
f7a0b5f
test: preserve expected routing failure under errexit
ruby-dlee Jul 16, 2026
7b0cbc2
fix: complete managed spawn rollback
ruby-dlee Jul 16, 2026
0d91cc4
test: isolate routing behavior cases
ruby-dlee Jul 16, 2026
428bd68
fix: bound AFK signal cleanup tests
ruby-dlee Jul 16, 2026
e78af11
no-mistakes(review): Bound retention drift and continuation repositor…
ruby-dlee Jul 16, 2026
aa09956
no-mistakes(review): Bound continuation child-process cleanup
ruby-dlee Jul 16, 2026
2336d55
no-mistakes(test): Captain, bound continuation cleanup and refresh te…
ruby-dlee Jul 16, 2026
9f76f8d
no-mistakes(test): Captain, stabilize fleet teardown and report lifec…
ruby-dlee Jul 17, 2026
de1030c
no-mistakes(document): Document fleet routing and report lifecycle
ruby-dlee Jul 17, 2026
221f686
no-mistakes(lint): Suppress intentional ShellCheck single-quote warning
ruby-dlee Jul 17, 2026
648c73f
no-mistakes: apply CI fixes
ruby-dlee Jul 17, 2026
407752b
no-mistakes: apply CI fixes
ruby-dlee Jul 17, 2026
a7e7c20
fix: close agent fleet finalization blockers
ruby-dlee Jul 17, 2026
949fc85
no-mistakes(review): Harden agent fleet lifecycle and report safety
ruby-dlee Jul 17, 2026
40748cb
no-mistakes(test): Restore serialized continuation endpoint revalidation
ruby-dlee Jul 17, 2026
411c5a0
no-mistakes(document): Align fleet routing and report documentation
ruby-dlee Jul 17, 2026
f42a5b4
no-mistakes: apply CI fixes
ruby-dlee Jul 17, 2026
367b699
no-mistakes: apply CI fixes
ruby-dlee Jul 17, 2026
6c9b383
no-mistakes: apply CI fixes
ruby-dlee Jul 17, 2026
acb8906
fix: harden agent fleet lock recovery
ruby-dlee Jul 17, 2026
3fee4bb
no-mistakes(review): Enforce actionable reports and native continuati…
ruby-dlee Jul 17, 2026
9d243ea
no-mistakes(document): Align fleet routing and report documentation
ruby-dlee Jul 17, 2026
d9c4b0c
fix: complete fleet report and tmux contracts
ruby-dlee Jul 17, 2026
8b93512
no-mistakes(review): Reject bare Markdown container markers in comple…
ruby-dlee Jul 17, 2026
c5f00a0
no-mistakes(document): Align fleet report and Orca documentation
ruby-dlee Jul 17, 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
5 changes: 4 additions & 1 deletion .agents/skills/bootstrap-diagnostics/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
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, MISSING_MANUAL, BACKEND_INVALID, 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.
Use whenever the session-start digest's bootstrap section prints any diagnostic or capability line - MISSING, MISSING_MANUAL, BACKEND_INVALID, ACCOUNT_ROUTING, NEEDS_GH_AUTH, TANGLE, CREW_HARNESS_OVERRIDE, CREW_DISPATCH, FLEET_SYNC, SECONDMATE_SYNC, SECONDMATE_LIVENESS, TASKS_AXI, NUDGE_SECONDMATES, REPORT_RETENTION, 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:
Expand All @@ -22,6 +22,7 @@ The inline rules in `AGENTS.md` section 3 still bind: detect, then consent, then
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.
- `MISSING_MANUAL: <tool> (instructions: <url>)` - tell the captain why the tool is required and give them the printed instructions URL, but do not pass the tool to `bin/fm-bootstrap.sh install`; wait for the captain to complete the manual installation, then rerun session start to confirm the dependency is present.
- `BACKEND_INVALID: <name> (known: <names>)` - the resolved runtime backend has no verified dependency or lifecycle contract, so do not dispatch work until the invalid `FM_BACKEND` or `config/backend` value is corrected to one of the listed backends.
- `ACCOUNT_ROUTING: invalid routing policy - <reason>` - the environment or `config/account-routing-mode` cannot resolve to exactly one of `off`, `observe`, or `enforce`; fix the reported source before dispatch because managed spawns will fail closed on the same policy error.
- `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.
Expand All @@ -45,5 +46,7 @@ The inline rules in `AGENTS.md` section 3 still bind: detect, then consent, then
- `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.
- `REPORT_RETENTION: unavailable: <reason>` - the machine-global report-retention LaunchAgent is absent, stale, unloaded, or has not reported a recent successful prune, so opportunistic bounded pruning remains available but post-minimum-age cleanup is not guaranteed to run while Firstmate is idle.
Surface the failure, wait for the captain's consent, then run `bin/fm-bootstrap.sh install report-retention`; never install or activate it without that consent.
- `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.
34 changes: 17 additions & 17 deletions .agents/skills/firstmate-orca/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: firstmate-orca
description: Agent-only operator checklist for Firstmate's Orca runtime backend. Use when switching to Orca, spawning or supervising Orca-backed work, smoke-testing Orca backend behavior, debugging Orca task state, or reconciling Orca-backed task metadata.
description: Agent-only operator checklist for Firstmate's Orca runtime backend. Use when recovering or supervising eligible legacy Orca-backed work, testing Orca backend behavior, debugging Orca task state, or reconciling Orca-backed task metadata.
user-invocable: false
metadata:
internal: true
Expand All @@ -25,18 +25,19 @@ Use raw `orca` only when the helper surface cannot answer the inspection questio
Work from the current firstmate home or repo root.
If `FM_HOME` is set, remember that operational state lives under `$FM_HOME` while the helper scripts still run from this repo's `bin/`.

Before switching or spawning against Orca:
Before recovering a task onto Orca:

- Confirm Orca is intentionally selected through `--backend orca`, `FM_BACKEND=orca`, or local `config/backend`.
- Confirm the Orca app is running and the backend readiness checks pass before expecting spawn to work.
- Confirm the task meets the eligibility contract in `docs/orca-backend.md`; new work must use tmux, Herdr, zellij, or cmux.
- Confirm Orca is intentionally selected for this eligible recovery through `--backend orca` or `FM_BACKEND=orca`.
- Confirm the Orca app is running and the backend readiness checks pass before expecting the respawn to work.
- Inspect active `state/*.meta` records before changing backend selection.
- Treat a backend switch as affecting future spawns only; existing tasks keep their recorded backend.
- Do not set Orca as the durable backend for a home that launches new tasks.
- Reconcile watcher wakes before unrelated work, especially if Orca tasks are already in flight.

## Spawn

Use `bin/fm-spawn.sh` so firstmate creates the brief, worktree, terminal, metadata, status file, and watcher surface together.
Pass `--backend orca` for a one-off Orca task, or rely on the already-selected Orca backend when that selection is intentional.
Use `bin/fm-spawn.sh` for an eligible pre-cutover respawn so firstmate creates the worktree, terminal, metadata, status file, and watcher surface together.
New task spawns refuse `backend=orca` before any owned mutation; `docs/orca-backend.md` owns the rationale and exact legacy eligibility rule.

After spawn, check the task with firstmate helpers:

Expand All @@ -45,7 +46,7 @@ After spawn, check the task with firstmate helpers:
- `bin/fm-crew-state.sh <id>` when the current run state matters.
- `bin/fm-watch.sh` whenever there are tasks in flight and this session owns supervision.

Do not manually create the Orca worktree or terminal for a normal firstmate task.
Do not manually create the Orca worktree or terminal for an eligible firstmate recovery.
Do not manually patch metadata to make an externally-created Orca terminal look like a firstmate task.

## Supervision
Expand Down Expand Up @@ -73,19 +74,18 @@ For a messy Orca-backed task:
5. Avoid raw deletion of Orca worktrees or manual branch cleanup.
6. Stop and inspect if the recorded worktree path, Orca worktree id, or project checkout no longer matches expectations.

Teardown remains governed by the normal firstmate landing rules.
Scout work can be torn down after the report exists.
Ship work can be torn down only after the work is landed by its project mode.
Teardown remains governed by `docs/orca-backend.md`'s eligible legacy task contract; follow its report and landing rules exactly.

## Smoke Test
## Regression Verification

Keep Orca smoke tests focused on lifecycle plumbing:
Do not synthesize legacy metadata or spawn a disposable Orca task merely to smoke-test the backend.
Run the focused fake-Orca suite in `docs/orca-backend.md` to verify lifecycle plumbing.
When an actual eligible legacy recovery is already required, verify it through the normal lifecycle:

1. Select Orca intentionally for a disposable task or scout.
2. Spawn through `bin/fm-spawn.sh`.
1. Confirm the task metadata has no `report_required` marker and select Orca for that recovery.
2. Respawn through `bin/fm-spawn.sh`.
3. Confirm metadata records the Orca backend, terminal, Orca worktree id, and isolated worktree path.
4. Verify `bin/fm-peek.sh`, a short `bin/fm-send.sh` steer, watcher wake behavior, and `bin/fm-crew-state.sh`.
5. Tear down through `bin/fm-teardown.sh` after the task is safely disposable or landed.
6. Restore the previous backend selection if Orca was selected only for the smoke test.

Do not mix a backend smoke test with unrelated feature work.
Do not mix adapter verification with unrelated feature work.
5 changes: 3 additions & 2 deletions .agents/skills/fmx-respond/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ Treat `state/x-inbox/` as the source of truth and process **every** file you fin
**Destructive, irreversible, or security-sensitive work is the exception** (X mode is a public, relayed channel and does not carry full in-session trust): do not execute it from the mention. Flag it to the captain through the normal trusted channel first - the same carve-out as `yolo` (AGENTS.md §1, §7) - act only on the captain's word, and in step 2d say only that it has been flagged for the captain.
**If the request spawned a real, longer-running task** (you ran `bin/fm-spawn.sh`), link that task to this mention so milestone and completion follow-ups can be posted: `bin/fm-x-link.sh <task-id> <request_id>`.
**Link here, in step 2c, before the step 2f inbox cleanup** - `bin/fm-x-link.sh` can copy both the mention's reply platform and explicit budget from the still-present inbox payload without a relay lookup.
If that local context is incomplete it uses the durable resolution contract in `docs/configuration.md` and warns loudly, while the follow-up path refuses to post unless both values can be resolved authoritatively.
If that local context is incomplete it uses the durable resolution contract in `docs/configuration.md` and warns loudly, while the follow-up path proceeds when either the platform or a valid explicit budget of at least 50 characters is resolved authoritatively and refuses only when neither is available.
Then step 2d's reply is an **acknowledgement** ("on it, captain"), and genuine milestone updates plus the final outcome come later as follow-ups (see "Completion follow-up" below), with the terminal one posted using `--final`.
If the work completed in this turn (a backlog item filed, a question answered), there is no task to link and step 2d reports the outcome directly.
d. **Compose the reply.** For a **question**, answer `.text` from the fleet state gathered in step 1. For an **actionable request that completed now**, report the outcome of step 2c (what was done, or - for escalated work - that it has been flagged for the captain). For an **actionable request that spawned a linked task**, acknowledge that you have the order and are on it - milestone updates and the final outcome follow later as completion follow-ups, so do not promise a result you do not yet have. Either way keep it short, in firstmate's voice, and public-safe.
Expand Down Expand Up @@ -199,7 +199,8 @@ This skill's own responsibility during the mention-handling turn is linking the
When the update carries one real visual artifact, add `--image <path>`; the helper forwards it to `bin/fm-x-reply.sh --followup` so the same image contract used for ordinary replies applies here too.
- On a terminal wake (PR merged / scout report / local merge / failed), firstmate posts the task's **final** outcome ("done, here's the result"; for a failure, an honest "this one didn't pan out") with `bin/fm-x-followup.sh <task-id> --final --text-file <path>`, which always clears the link after that post regardless of how many follow-ups remain under the cap.
- Every follow-up is held to the exact same public-safety bar as every reply here: outcomes only, no task ids, internals, captain-private material, or secrets. Past the window, past the cap, or on the relay's own rejection of an exhausted binding, a follow-up attempt is skipped silently and the link is cleared - never treated as a failure worth retrying.
- If either a follow-up's platform or explicit budget cannot be authoritatively resolved from per-request context, inbox payload, or relay answer, `bin/fm-x-followup.sh` does NOT post it: the fail-safe holds it (the link is kept, exit non-zero) rather than use a local default. This is a retryable hold - a later milestone wake retries it once both values are recoverable.
- If neither a follow-up's platform nor a valid explicit budget of at least 50 characters can be authoritatively resolved from per-request context, inbox payload, or relay answer, `bin/fm-x-followup.sh` does NOT post it: the fail-safe holds it (the link is kept, exit non-zero) rather than use a local default.
This is a retryable hold - a later milestone wake retries it once either value is recoverable.

## Notes

Expand Down
22 changes: 22 additions & 0 deletions .agents/skills/reports/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
name: reports
description: Browse, search, open, or summarize Firstmate's durable completion report stack. Use when the captain asks what Firstmate or its crews finished, wants a completion report or visual evidence, asks to review recent work, or invokes /reports.
user-invocable: true
metadata:
internal: true
---

# Completion reports

Use `bin/fm-report-stack.mjs` from the Firstmate installation that loaded this skill.

Run `bin/fm-report-stack.mjs open` to regenerate and open the searchable offline stack.
Run `bin/fm-report-stack.mjs list` for a concise inventory, or add `--json` when structured filtering or summarization is needed.
Run `bin/fm-report-stack.mjs path <task-id>` to locate one report without opening it.
Run `bin/fm-report-stack.mjs open <task-id>` to open one report directly.

When the captain asks for a summary in chat, read the selected entry's `manifest.json` and `report.md`, then summarize the outcome, verification, visual evidence, and follow-ups.
Do not inspect provider account homes or raw session state for report browsing.
Treat the report stack as the durable completion ledger and the source task state as volatile.

Read `docs/report-stack.md` only when diagnosing publication, explaining the storage contract, or intentionally publishing a pre-cutover task.
4 changes: 4 additions & 0 deletions .agents/skills/reports/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Completion Reports"
short_description: "Browse completed Firstmate task reports"
default_prompt: "Use $reports to open and summarize the Firstmate report stack."
Loading
Loading