Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
f5ab708
perf: shard portable serial tests across CI runners (#1544)
kunchenguid Aug 2, 2026
88b2a94
fix(bin): correct session lock and attached watcher supervision (#1545)
kunchenguid Aug 2, 2026
33a4287
fix(bin): harden Claude supervision auto-arm recovery (#1495)
kunchenguid Aug 2, 2026
4ee4a0a
feat(bin): require an explicit per-task delivery contract (#1563)
kunchenguid Aug 3, 2026
7809ab9
feat(bin): support remote secondmate homes (#1576)
kunchenguid Aug 3, 2026
976d97f
feat: add per-task trace context propagation (#995)
allstargg Aug 3, 2026
cf95112
fix(bin): harden tmux agent liveness across harnesses (#1577)
kunchenguid Aug 3, 2026
3d9d12d
feat(bin): propagate trace context to remote secondmates (#1609)
kunchenguid Aug 3, 2026
733a504
feat(bin): preflight remote runtime tool paths (#1623)
kunchenguid Aug 4, 2026
e5e8a67
feat: gate remote second mates on Herdr readiness (#1639)
kunchenguid Aug 4, 2026
c8edff3
fix: isolate remote secondmates in shared Herdr session (#1659)
kunchenguid Aug 4, 2026
a83be60
feat: route remote commands through an Aqua job worker (#1660)
kunchenguid Aug 4, 2026
fc3684a
fix: clarify remote doctor bootstrap path (#1691)
kunchenguid Aug 4, 2026
1939785
fix(bin): bound remote SSH dead-peer detection (#1699)
kunchenguid Aug 4, 2026
4a9979a
fix: report stale AXI tools during bootstrap (#1701)
kunchenguid Aug 4, 2026
d0461e4
fix: prevent false watcher-down alarms in Claude sessions (#1661)
karotkriss Aug 4, 2026
1cd97c0
test: prevent fixture temporary directory leaks (#1704)
kunchenguid Aug 4, 2026
3089a57
feat(herdr): enable presentation spaces by default (#1708)
kunchenguid Aug 4, 2026
bb352e7
fix(bin): surface fleet-wide open decisions on every wake drain (#1711)
kunchenguid Aug 5, 2026
7ef26c4
fix(bin): abort parked runs and reap leaked processes before teardown…
kunchenguid Aug 5, 2026
bea3d23
fix: resolve fm-remote-entrypoint.sh SCRIPT_DIR through a PATH symlin…
kunchenguid Aug 5, 2026
71f0b3f
fix(pi): gate Calm built-in overrides by activation state (#1724)
kunchenguid Aug 5, 2026
30b18b9
fix(bin): persist secondmate parent bindings for cleanup (#1727)
kunchenguid Aug 5, 2026
ef2c3a2
feat(bin): enforce latest AXI-family tool floors (#1733)
kunchenguid Aug 5, 2026
bf01a42
fix(bin): bound open decision scans with incremental cursors (#1737)
kunchenguid Aug 5, 2026
6f0f87f
fix(bin): prevent remote polls from blocking session startup (#1754)
kunchenguid Aug 5, 2026
3a8d63e
docs: present X mode as the X and Discord public surface (#1778)
kunchenguid Aug 6, 2026
3b6ee03
fix(bin): run session start deterministically from hooks (#1781)
kunchenguid Aug 6, 2026
5d77b48
fix: rename X mode to Relay in user-facing docs (#1784)
kunchenguid Aug 6, 2026
930ca76
feat: add Muse Code crewmate adapter (#1786)
kunchenguid Aug 6, 2026
8387039
fix(herdr): require 0.8.0 for default presentation spaces (#1787)
kunchenguid Aug 6, 2026
8ec3e94
fix(bin): classify settled Muse session logs as idle (#1788)
kunchenguid Aug 6, 2026
2cf0283
docs(agents): read the persisted digest when only a preview is shown …
kunchenguid Aug 6, 2026
345de4e
fix: preserve fleet state in truncated session-start digests (#1798)
kunchenguid Aug 6, 2026
6c206ed
feat(send): close answered decisions at answer time via --resolve-key…
kunchenguid Aug 6, 2026
fb368dc
fix(bin): seed remote secondmates from supplied origins (#1836)
kunchenguid Aug 7, 2026
91fa548
fix(tests): restore reliable fm-send backend parity coverage (#1851)
kunchenguid Aug 7, 2026
990753a
fix(bin): mirror remote secondmate status streams (#1846)
kunchenguid Aug 7, 2026
199cb79
docs(agents): describe the digest's fleet-state-before-context order …
kunchenguid Aug 7, 2026
4cdd0bd
fix(bin): fail closed on NUL bytes in the durable parent binding (#1847)
kunchenguid Aug 7, 2026
8398d31
fix(skills): reconcile inherited secondmate plans with shipped state …
kunchenguid Aug 7, 2026
4b6b89d
fix: move network checks off the session-start blocking path (#1860)
kunchenguid Aug 7, 2026
d8bb074
fix(procevent): apply remote replies during capture (#1831)
kunchenguid Aug 7, 2026
073cb30
feat(skills): port internal stow curation disciplines to the public s…
kunchenguid Aug 7, 2026
70aeba8
chore(bootstrap): raise lavish-axi version floor to 0.1.46 (#1865)
kunchenguid Aug 7, 2026
06b33aa
fix(bin): keep tracked Claude hook entries inert under grok 1.0.0 (#1…
jayjongcheolpark Aug 7, 2026
60eb534
feat(startup-network): record per-step elapsed times for the deferred…
kunchenguid Aug 7, 2026
167ff42
feat(stow): cascade the internal /stow to every registered secondmate…
kunchenguid Aug 8, 2026
be32879
fix(remote-job): stop workers abandoned by a pruned code root (#1927)
kunchenguid Aug 8, 2026
833a9a2
feat(bin): lint only the changed shard locally, full lint in CI (#1925)
kunchenguid Aug 8, 2026
2d2be63
feat(bin): add deterministic agent lifecycle control (#1568)
kunchenguid Aug 9, 2026
5ade9ef
feat(stow): add tiered decaying memory management (#1984)
kunchenguid Aug 9, 2026
74230fc
docs: add project vision (#1997)
kunchenguid Aug 9, 2026
fffe91e
fix(spawn): force regular Pi TUI for crews (#2005)
roelofb Aug 9, 2026
85e750a
fix(cmux): classify borderless Claude composers (#2029)
kunchenguid Aug 10, 2026
53ecbc7
docs(stow): generalize read-before-write in the public stow skill (#2…
kunchenguid Aug 10, 2026
f9b9d43
fix: resurface durable supervision work after re-arm (#2065)
kunchenguid Aug 10, 2026
9068958
ci: measure Herdr automation on Windows runners (#2100)
kunchenguid Aug 10, 2026
f74d9e4
feat(ahoy): guide captains through open decisions (#2099)
kunchenguid Aug 10, 2026
7f828ea
fix(stow): enforce startup-memory budget decisions (#2110)
kunchenguid Aug 11, 2026
fc5f164
fix(spawn): refresh pooled worktrees from origin before launch (#2116)
kunchenguid Aug 11, 2026
7f05100
fix(composer): unify safe classification across backends (#2102)
kunchenguid Aug 11, 2026
e836a7f
fix(spawn): gate Pi TUI mode by CLI capability (#2117)
kunchenguid Aug 11, 2026
76355e2
docs(vision): elevate experience, pain narrative, and distro virtues …
kunchenguid Aug 11, 2026
2d550fe
feat(bin): reconcile inactive terminal crew outcomes (#2167)
kunchenguid Aug 11, 2026
07450b9
ci: raise Herdr test timeout (#2191)
kunchenguid Aug 11, 2026
e8c7645
fix: refresh stale Pi instructions after compaction (#2163)
kunchenguid Aug 11, 2026
81ce6dc
feat: add deterministic condition-to-action watcher (#2200)
kunchenguid Aug 11, 2026
614fae6
fix(bin): honor a decision key stated after the verb colon (#2202)
kunchenguid Aug 11, 2026
c42cfe0
fix(bin): prevent watcher recovery acknowledgement livelock (#2212)
kunchenguid Aug 12, 2026
b5d430d
feat(fmx-respond): consume Relay conversation chains (#2206)
kunchenguid Aug 12, 2026
b91016f
fix: parse decision verbs before status metadata tags (#2280)
kunchenguid Aug 12, 2026
b0ad61e
fix(bin): collapse duplicate supervision wakes (#2287)
kunchenguid Aug 13, 2026
4930d2c
feat: add Cursor CLI crew harness (#2238)
kunchenguid Aug 13, 2026
96876db
fix(bin): require quota-axi 0.1.25 (#2300)
kunchenguid Aug 13, 2026
85cefa9
fix(bin): prevent false Pi watcher alarms during hand-offs (#2304)
kunchenguid Aug 13, 2026
81f7020
feat: support Cursor Agent CLI as a primary harness (#2305)
kunchenguid Aug 13, 2026
5521323
feat(bin): add decline and repair paths for decision holds (#2330)
kunchenguid Aug 13, 2026
db0280f
fix(bin): surface buried wake status lines once (#2331)
kunchenguid Aug 13, 2026
88d0f2e
feat: add max Calm presentation level (#2334)
kunchenguid Aug 13, 2026
9823ff8
feat(calm): hide mid-turn working notes by default (#2339)
kunchenguid Aug 13, 2026
1238402
chore: store no-mistakes test evidence in the repo (#2355)
kunchenguid Aug 14, 2026
6789876
chore: ignore scratchpad/ at the repo root (#2359)
kunchenguid Aug 14, 2026
f1a4af4
fix(ci): fail hung Herdr behavior runs in 20 minutes (#2413)
kunchenguid Aug 15, 2026
7a3259e
fix: keep the public promise reachable when work is routed to a secon…
kunchenguid Aug 16, 2026
196fb65
docs(skills): add remote-secondmate recovery hint for false-negative …
kunchenguid Aug 16, 2026
ef35d79
fix(calm): keep Pi's export confirmation visible (#2461)
kunchenguid Aug 16, 2026
e518906
feat(stow): add open-record persistence to /stow before reset (#2488)
kunchenguid Aug 16, 2026
362c508
fix(decisions): close decision holds at answer time via one general k…
kunchenguid Aug 17, 2026
4913723
fix(memory): emit a real @AGENTS.md pointer instead of a CLAUDE.md sy…
kunchenguid Aug 17, 2026
bdae21e
fix(ci): keep CLAUDE.md pointer check valid (#2515)
kunchenguid Aug 17, 2026
0ae14af
ci: gate GitHub workflows with pinned actionlint (#2517)
kunchenguid Aug 17, 2026
ac55d39
fix: install pinned lint tools across supported platforms (#2546)
kunchenguid Aug 17, 2026
312871d
docs: reconcile test-evidence docs with store_in_repo: true (#2548)
kunchenguid Aug 17, 2026
64d61ae
docs: clarify test evidence branch storage (#2549)
kunchenguid Aug 17, 2026
d023c45
docs: hint that live scouts may host their own Lavish review loop (#2…
kunchenguid Aug 18, 2026
d843712
fix(bin): report remote secondmate delivery and state truthfully (#2570)
kunchenguid Aug 18, 2026
d9ee8ea
feat: adopt spendPriority for quota dispatch (#2574)
kunchenguid Aug 18, 2026
862c532
docs: add GROK_BOT.md Grok Bot system prompt (#2590)
kunchenguid Aug 18, 2026
9d2ad81
docs: update GROK_BOT.md nautical terms and self-improvement (#2592)
kunchenguid Aug 18, 2026
f758e51
doc: Update language in GROK_BOT.md for clarity
kunchenguid Aug 18, 2026
ed66b85
fix(bin): preserve inactive reconciliation scan progress (#2595)
kunchenguid Aug 18, 2026
63362d2
doc: Revise Firstmate delegation and communication guidelines
kunchenguid Aug 18, 2026
03bb1d8
doc: Update work delegation and secret management instructions
kunchenguid Aug 18, 2026
c54c448
test(procevent): make the process-event suite's detached-runner asser…
kunchenguid Aug 19, 2026
7f5255a
fix: preserve pending replies and defer remote reposts (#2618)
kunchenguid Aug 19, 2026
b57c4d6
fix(bin): honor declared pauses in busy-pane wedge checks (#2619)
kunchenguid Aug 19, 2026
f242264
doc: Enhance communication guidelines for decision-making
kunchenguid Aug 19, 2026
7b38a2f
doc: Update task delegation and communication guidelines
kunchenguid Aug 19, 2026
87681a4
fix(bin): reliably confirm herdr steer submission (#2647)
kunchenguid Aug 19, 2026
1cb900c
feat(bearings): add interactive Lavish fleet board (#2659)
kunchenguid Aug 20, 2026
427d758
chore: snapshot upstream main
withally Aug 21, 2026
43fba21
fix(spawn): restore filesystem identity guard
withally Aug 21, 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
102 changes: 43 additions & 59 deletions .agents/skills/afk/SKILL.md

Large diffs are not rendered by default.

15 changes: 13 additions & 2 deletions .agents/skills/ahoy/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: ahoy
description: Recap visible session events since the prior real captain message plus visibly unanswered captain decisions when the captain explicitly invokes /ahoy, with a Bearings fallback when /ahoy is the session's first real captain message.
description: Recap visible session events and guide the captain through visibly unanswered decisions when the captain explicitly invokes /ahoy, with a Bearings fallback when /ahoy is the session's first real captain message.
user-invocable: true
metadata:
internal: true
Expand All @@ -10,6 +10,11 @@ metadata:

Give the captain a concise session-only recap without gathering fresh state.

0. Before anything else, check whether this session has already taken the helm: a `SESSION START` digest for this home must be visible in the session history.
If it is not, run `bin/fm-session-start.sh` once and read its digest before producing any recap.
Run-tier harness surfaces run it automatically at session open, so this step is normally already satisfied and costs one glance; it is the safety net for surfaces that cannot run it on a hook, and for any path where a skill would otherwise act first.
Taking the helm always precedes this skill's own logic, and the digest it produces is operational input, never a captain message or a recap event.

1. Inspect only conversation or session history already visible to the current first mate.
2. Find the most recent real captain-authored message before the current `/ahoy` invocation.
A captain boundary is an ordinary user-role message unless it matches one of the narrow operational exclusions below.
Expand All @@ -32,12 +37,18 @@ Give the captain a concise session-only recap without gathering fresh state.
A later unrelated captain message establishes a recap boundary but does not close an earlier decision.
Treat a decision as closed only when a later visible response substantively resolves it, chooses an option, declines it, grants or denies the requested approval, or otherwise directly addresses that decision.
Include every visibly supported open decision once, and deduplicate by the decision's substance when the ordinary interval recap already represents it or its wording differs.
6. The normal recap branch is session-history-only.
6. The normal recap branch is session-history-only, apart from the step 0 helm check.
Do not call Bearings, shell commands, fleet snapshots, status readers, GitHub or browser APIs, tools, or file reads or writes.
Create no report, persist nothing, and do not guess current live state beyond the last visible event.
7. If no ordinary events occurred after the previous captain message but an older visibly open decision exists, report that decision instead of claiming nothing happened.
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.
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.

The current `/ahoy` message is outside the recap interval.
A previous `/ahoy` is a real captain message and may be the next interval boundary.
If context compaction makes the prior boundary unavailable, state that the exact session boundary is unavailable and summarize only visibly supported events.
Expand Down
63 changes: 51 additions & 12 deletions .agents/skills/bearings/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ name: bearings
description: >-
Generate a "pick up where I left off" fleet digest 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".
Plain /bearings is chat-only by default, while /bearings file explicitly writes the dated data/status-report-<YYYY-MM-DD>.md artifact; live PR enrichment remains opt-in and composes with file mode.
Plain /bearings is chat-only by default, /bearings file explicitly writes the dated data/status-report-<YYYY-MM-DD>.md artifact, and /bearings lavish additionally builds and arms the interactive fleet board; live PR enrichment remains opt-in and composes with the other modes.
Also load this skill's board-wake handling when a procevent lavish wake's source id matches the canonical source id of the stable bearings board path.
user-invocable: true
metadata:
internal: true
Expand All @@ -14,18 +15,21 @@ metadata:
Generate a complete current snapshot from the fleet's current state, so the captain can resume in one read after a break, a night, or a context reset.
Plain `/bearings` returns only the concise four-section chat digest.
Only `/bearings file` writes the dated markdown report artifact and then returns the concise four-section chat digest linked to that report.
This skill is operationally read-only in both modes.
It never tears down a task, merges a PR, dispatches new work, steers a worker, answers a decision, cleans up work, mutates backlog or task state, or writes any file except the single dated report in explicit file mode.
Only `/bearings lavish` builds the interactive fleet board beside that digest, through `bin/fm-bearings-board.sh` (its header owns every board mechanic and the fm-bearings-board.v1 payload contract).
A digest/build invocation is operationally read-only apart from those explicit per-mode artifacts: the dated report in file mode, and in lavish mode the board file plus the answer binding and source registration that `bin/fm-bearings-board.sh build` records through their own owners.
During that invocation it never tears down a task, merges a PR, dispatches new work, steers a worker, answers a decision, cleans up work, or mutates backlog or task state.
Board answers are acted on later under the normal authority rules; this skill's board-wake section explicitly owns the guarded routing at that time.

## Invocation modes

- Plain `/bearings` gathers a fresh bounded snapshot and renders the four-section chat digest without creating, deleting, reading, or replacing `data/status-report-<YYYY-MM-DD>.md`.
- `/bearings file` gathers a fresh bounded snapshot, replaces today's `data/status-report-<YYYY-MM-DD>.md` from scratch, and renders the four-section chat digest with a link or path to that report.
- Treat `file` only as an explicit invocation option in the slash command.
- Do not treat natural-language requests such as "write a report", "save this", "persist it", or "make a file" as file mode unless the invocation explicitly includes the standalone `file` option.
- `/bearings lavish` gathers a fresh bounded snapshot, rebuilds and arms the interactive fleet board (the "Lavish board mode" section below), and renders the four-section chat digest with the board's URL inside it.
- Treat `file` and `lavish` only as explicit invocation options in the slash command.
- Do not treat natural-language requests such as "write a report", "save this", "persist it", "make a file", or "make a board" as file or lavish mode unless the invocation explicitly includes the standalone option.
- When the captain asks to include PRs, pass the snapshot command's live-PR opt-in.
- `/bearings include PRs` remains chat-only and makes the live-PR opt-in.
- `/bearings file include PRs` writes the dated report and makes the live-PR opt-in.
- `/bearings file include PRs` and `/bearings lavish include PRs` compose the same way.

## What it does

Expand Down Expand Up @@ -54,15 +58,48 @@ It never tears down a task, merges a PR, dispatches new work, steers a worker, a
Never read an earlier `data/status-report-*.md` to decide what to omit, include, describe as changed, or call current.
Write the full report to `data/status-report-<YYYY-MM-DD>.md` using today's date.
If today's file already exists, delete it first, then create a new file from scratch.
This is the only write allowed by the skill.
This is the only file-mode write allowed by the skill.
The detailed report includes:
- **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 summarized with its options from the structured decision record, 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** - the bounded current recent-completions baseline from structured state across the main fleet and every registered secondmate home, rendered in full on every run.
- **Underway** - each live direct report making progress, with its current state, and the plans or main pickup pointers worth reopening (`data/<id>/report.md` files, `.lavish/*.html` boards).
- **Charted Next** - queued or gated work, including any main-inventory integrity warning, with each item's blocker, date, or integrity reason.
After writing the file, return the concise four-section chat digest and include the report path or link without adding a fifth section.
For a richer review surface, optionally offer a Lavish board by loading `lavish-review` when the report has enough structure to deserve one, but only after the required digest is ready.
For a richer review surface, offer `/bearings lavish` when the report has enough structure to deserve one, but only after the required digest is ready.

## Lavish board mode

`/bearings lavish` adds one deliverable beside the unchanged chat digest: the interactive fleet board, a myfirstmate-styled Lavish page where the captain answers Captain's Call items directly instead of replying in chat.
`bin/fm-bearings-board.sh` owns every board mechanic - the stable board path, fm-bearings-board.v1 payload validation, template injection, Lavish session establishment, the any-origin answer binding, and arm-if-absent registration - so the per-invocation work is composing the payload and running its `build`.

Compose the payload from the same snapshot with the same ranking judgment as the chat digest, plus these board rules:

- A Captain's Call decision key is the FULL hold identity from `decisions_open`; a merge card's key is `merge.<task-id>`; the Charted Next dispatch picker's key is `dispatch.charted`.
- Decision cards carry agent-authored copy: a short noun-phrase title, one-line `about` and `decide` context rows, and option labels with hints, with the recommended option marked.
- Every Captain's Call item and every Underway, Recently Landed, and Charted Next row carries an explicit `repo` field. Fill it from the snapshot and task records wherever known; use null or an empty string only as the deliberate genuinely-no-repo marker, in which case the template may show the internal id. Ids otherwise stay in the payload only as the routing channel, and composed reasons name blockers in plain words.

Run `build` once after composing the payload.
Its serve-first sequence publishes the board, establishes or resumes its Lavish session with `lavish-axi`, and only then binds and arms the polling source; use the session URL it prints in the chat digest.
Never bind or arm the board before that session exists.
Never run `lavish-axi poll` for the board yourself: the armed source's supervised runner owns the blocking poll, and the watcher's ordinary reconcile restarts it, so no conversational turn ever blocks on the board.

### Handling a board wake

A board answer arrives as an ordinary `procevent lavish <source-id> <sequence>` check wake. Identify it by comparing the wake source id with `bin/fm-procevent-lavish.sh source-id "$(bin/fm-bearings-board.sh path)"`, regardless of which answer kinds the result contains; then load `process-event-sources` and follow its contract for the result read, adapter classification, and the handled acknowledgement.
Decision answers need no routing from you: the runner feeds the board's any-origin binding into `bin/fm-decision-hold.sh`'s one keyed-answer intake, which closes each full-identity hold at answer time; reconcile any `skipped:` key yourself, using `resolve` when routed work exists.
Route the non-decision keys yourself:

- `merge.<task-id>` is the captain's explicit merge order; follow the merge ruling below.
- `dispatch.charted` carries comma-separated task ids the captain picked to start now; verify each id against the current backlog - still queued, blocker and time gate actually clear - then dispatch through the normal lifecycle, and report any id that no longer qualifies instead of forcing it.

After handling, rebuild the board from a fresh snapshot so acted-on items leave Captain's Call, and echo every action taken in chat so the board and chat never diverge silently.

### The merge-click ruling (captain-decided)

A board "Merge now" answer IS the captain's explicit merge word for that one exact PR; ask no second confirmation.
The safeguards are mandatory, not optional: resolve the PR from the task's own `state/<task-id>.meta` `pr=` record, never from board bytes; re-verify at wake time that the PR is still open and CI-green; refuse and report a red or changed PR rather than merging it; merge only through `bin/fm-pr-merge.sh`; and echo every merge in chat with the full PR URL.
Only the exact answer value `merge` authorizes a merge; an answer carrying a freeform note is the captain's instruction text to read and act on with judgment, never an auto-merge.

## Chat-response contract

Expand Down Expand Up @@ -90,8 +127,9 @@ Rules that keep the contract unambiguous:
- Include the required direct address to the captain inside one item or empty-state sentence.
- Every PR appears as the full `https://...` URL; a shorthand `#number` is fine only as a back-reference after the full URL has already appeared in the same digest.
- The chat follows `AGENTS.md` section 9 and carries one scannable line per item.
- Detailed decisions, plans, full gate reasons, and evidence belong in the file only when file mode is explicit, so plain chat stays concise and file-mode chat stays materially shorter than that file.
- Detailed decisions, plans, full gate reasons, and evidence stay out of chat; file mode puts them in the report, while lavish mode puts only its payload-backed interactive detail on the board.
- In file mode, include the report path or link inside the four-section digest without adding another heading.
- In lavish mode, include the board URL inside the four-section digest the same way.

## Tone and content rules

Expand All @@ -102,6 +140,7 @@ Rules that keep the contract unambiguous:

## Supervision discipline

This skill changes no fleet state.
Do not tear down a task, merge a PR, dispatch queued work, steer a worker, answer a queued decision, clean up work, or mutate any `state/` or `data/` file other than the single report file in explicit file mode.
If the state you read suggests an action - a PR ready to merge, a queued item whose gate has arrived, or a needs-decision finding - name it in its section and leave the action to the normal lifecycle and configured authority rather than taking it from inside this skill.
During a digest/build invocation, this skill changes no fleet state beyond its explicit report or board artifacts, binding, and source registration.
Do not tear down a task, merge a PR, dispatch queued work, steer a worker, answer a queued decision, clean up work, or mutate any other `state/` or `data/` file during that invocation.
If the state gathered for the digest suggests an action, name it in its section and leave it to the normal lifecycle and configured authority.
On a later board wake, this read-only invocation rule yields to "Handling a board wake" and its guarded authority for captain-selected dispatches and merges.
Loading
Loading