Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
7cbaf8a
Add fleet model index and catalog-checked role dispatch
MrGTV-love Sep 30, 2026
144bb68
no-mistakes(review): Scope model-index checks to selected entry and w…
MrGTV-love Sep 30, 2026
dafa7b4
no-mistakes(review): Resolve model roles everywhere and gate index pu…
MrGTV-love Sep 30, 2026
1fad0fb
no-mistakes(review): Check pushed model index under pinned accounts; …
MrGTV-love Sep 30, 2026
3d76b39
no-mistakes(review): Check index per harness account; guard relaunch;…
MrGTV-love Sep 30, 2026
3b78d70
no-mistakes(review): Validate model index schema before config-push c…
MrGTV-love Sep 30, 2026
15ee85f
no-mistakes(review): Validate dispatch roles against index before con…
MrGTV-love Sep 30, 2026
6af3162
no-mistakes(test): Match Claude catalog ids by base, ignoring context…
MrGTV-love Sep 30, 2026
fe0fa1f
no-mistakes(document): Sync model-index docs with final push and rela…
MrGTV-love Oct 1, 2026
2c3cef7
no-mistakes(lint): Fix ShellCheck array-name collision and unquoted h…
MrGTV-love Oct 1, 2026
5ad94bd
no-mistakes(ci): Four CI checks failed. Two came from this PR, and I …
MrGTV-love Oct 1, 2026
5444096
no-mistakes(review): Fix model propagation snapshots and worker catal…
MrGTV-love Oct 6, 2026
37f7f02
no-mistakes(review): Preserve routing pairs and restore non-entry mod…
MrGTV-love Oct 6, 2026
40302f5
no-mistakes(document): Align model-index documentation and catalog ev…
MrGTV-love Oct 6, 2026
09848ad
no-mistakes(ci): Fixed both code-caused CI failures. Behavior portabl…
MrGTV-love Oct 6, 2026
b132703
fix: share relaunch account selection after rebase
MrGTV-love Oct 6, 2026
a1c2a40
no-mistakes(review): Fix remote notifications, live skip accounting, …
MrGTV-love Oct 6, 2026
08b19db
no-mistakes(review): Validate routing-pair coherence across shared in…
MrGTV-love Oct 6, 2026
456dfe7
no-mistakes(review): Freeze inherited routing pairs before validation…
MrGTV-love Oct 6, 2026
682b0bd
no-mistakes(review): Require single-object model index and catalog va…
MrGTV-love Oct 6, 2026
e1a7713
no-mistakes(test): Verify Claude isolation; authenticated rerun requi…
MrGTV-love Oct 7, 2026
9be7b44
no-mistakes(document): Correct model-index guidance and consolidate r…
MrGTV-love Oct 7, 2026
769760b
no-mistakes(lint): Fix ShellCheck empty assignments and subshell expo…
MrGTV-love Oct 7, 2026
29d8020
no-mistakes(review): Isolate catalog fixtures and preserve resolved P…
MrGTV-love Oct 7, 2026
264863b
no-mistakes(document): Align model-index documentation with routing a…
MrGTV-love Oct 7, 2026
e557362
Preserve prior relaunch fixture merge resolution after rebase
MrGTV-love Oct 7, 2026
c7fb4f4
no-mistakes(review): Converge routing pairs before remote secondmate …
MrGTV-love Oct 7, 2026
1eb1758
no-mistakes(review): Preserve remote reread intent across failed rela…
MrGTV-love Oct 7, 2026
c104dea
no-mistakes(review): Freeze routing generations across spawn and rela…
MrGTV-love Oct 7, 2026
d543bad
no-mistakes(review): Preserve default launches and reject malformed d…
MrGTV-love Oct 7, 2026
7a6f6e7
no-mistakes(document): Correct model-index documentation and consolid…
MrGTV-love Oct 7, 2026
c635550
no-mistakes(lint): Fix ShellCheck warnings in secondmate restart and …
MrGTV-love Oct 7, 2026
840abf8
no-mistakes(ci): Fixed the timeout’s fixture-runtime causes across al…
MrGTV-love Oct 7, 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
2 changes: 1 addition & 1 deletion .agents/skills/bootstrap-diagnostics/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ When any diagnostic needs captain attention, report the plain consequence and re
This is the only sanctioned firstmate-initiated git write to the primary, and it is a non-destructive branch switch that strands nothing.
- `STARTUP_MEMORY_BUDGET: invalid config/startup-memory-budget - <reason>` - the visible startup-memory budget is not a safe one-line positive decimal file; do not infer the default or propagate it.
Correct the local primary file, then rerun session start so the normal convergence path can deliver the validated value to secondmate homes.
- `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.
- `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, invalid harness/effort pair, or a [model index](../../../docs/configuration.md#fleet-model-index-configmodel-indexjson) failure such as a malformed index, unconfigured role, or retired id 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.
Expand Down
10 changes: 3 additions & 7 deletions .agents/skills/harness-adapters/references/common/dispatch.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,11 @@ Load this with the selected tool reference for dispatch, start, or adapter verif
## Resolution

Use the router's detection and safety sections for static crew and secondmate harness resolution and all explicit overrides.
`config/crew-dispatch.json` can override that static default for one crewmate or scout with concrete harness, model, and effort axes.
`config/crew-dispatch.json` can override that static default for one crewmate or scout with a profile under the [dispatch configuration contract](../../../docs/configuration.md#crew-dispatch-profiles-configcrew-dispatchjson).
For a profile array, load `quota-array-dispatch` after establishing harness and provider facts here.
When the opt-in `bin/fm-dispatch-resolve.sh` is on, its `clear` answer already names the concrete axes; `docs/configuration.md` "Typed dispatch resolution" owns that contract.

`../secondmate-provisioning/SKILL.md` owns inherited local material.
Its harness consequence is that a secondmate's workers receive literal `config/crew-harness` and `config/crew-dispatch.json`, while the primary-only `config/secondmate-harness` is never inherited because secondmates do not spawn secondmates.
A concrete crew value such as `codex` carries that runtime into the secondmate home.
Unset or `default` carries no concrete value, so its workers use that home's own or detected harness rather than the primary's effective crew harness.
The inherited dispatch file applies the same best-fit profiles there.
[`secondmate-provisioning`](../secondmate-provisioning/SKILL.md) owns inherited harness defaults and routing configuration.

## Skill advice at intake

Expand All @@ -24,7 +20,7 @@ Follow [advisory skill selection](../../../docs/configuration.md#advisory-skill-
## Owners

`../../../bin/fm-spawn.sh` owns launch, autonomy, concrete flags, task-kind compatibility, and worker turn-end wiring.
Natural-language rules stay with firstmate, while scripts receive concrete axes.
Natural-language rules stay with firstmate; model references follow the [fleet model-index contract](../../../docs/configuration.md#fleet-model-index-configmodel-indexjson).

`../../../bin/fm-busy-lib.sh` owns semantic busy trust.
Composer shapes, glyphs, placeholders, popups, rendered delivery signals, and the `empty` / `pending` / `pending-unproven` / `unknown` decision belong only to `../../../bin/fm-composer-lib.sh`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Add `references/common/dispatch.md` for configured profile precedence.

## Axes and precedence

`../../../bin/fm-spawn.sh` accepts concrete `--harness`, `--model`, and `--effort` values selected at intake; scripts never parse natural-language dispatch rules.
`../../../bin/fm-spawn.sh` accepts model and effort values selected at intake, including the role references defined by the [fleet model index](../../../docs/configuration.md#fleet-model-index-configmodel-indexjson); scripts never parse natural-language dispatch rules.
The tool reference records verified flags, accepted values, omission behavior, and discovery.

Effort precedence is a per-task captain instruction, then applicable dispatch profile or secondmate pin, then the fallback below.
Expand Down Expand Up @@ -34,10 +34,10 @@ Establish it from the tool's discovery surface and `quota-axi auth --json` per-p
## Discovery

Treat model and provider knowledge as current discovery, not a permanent namespace or mapping.
Use the selected tool reference's authoritative surface in the current authenticated environment because availability changes by version, account, and configuration.
Use the selected tool reference's authoritative surface in the effective worker's authenticated environment because availability changes by version, account, and configuration.

For an unfamiliar namespace, establish support and provider identity from that harness's CLI help, model listing, or current documentation.
An account-reaching listing that omits a model is concrete unsupported evidence; block the candidate and quote it.
Catalog verdicts follow the [fleet model-index evidence boundary](../../../docs/configuration.md#fleet-model-index-configmodel-indexjson).
An unreachable surface establishes nothing; report uncertainty instead of a verdict.

For a matched profile array, return to `quota-array-dispatch` only after establishing every candidate's harness support, provider relationship, and uncertainty.
2 changes: 1 addition & 1 deletion .agents/skills/harness-adapters/references/harness/agy.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Verified as a CREWMATE and SCOUT adapter only; `../../../bin/fm-spawn.sh` refuse
| Autonomy | `--dangerously-skip-permissions` auto-approves tool calls for the run. |
| Marker | None; a live TUI carries no `AGY_*` or `ANTIGRAVITY_*` variable. |
| Resume | `--continue` and `--conversation` exist but carry no verified pane-resume contract; use deterministic relaunch. |
| Model | `--model <id>` with the bare catalog id from `agy models` (for example `gemini-3.8-flash-high`); `bin/fm-spawn.sh` refuses a requested id a reachable listing omits. The listing is a remote fetch, so the probe runs stdin-detached under the shared hard bound and an unreachable or hung listing launches unvalidated with a notice. |
| Model | `--model <id>` uses a bare id from `agy models`; native non-entry literals refuse when a reachable listing omits the id and launch with a notice when it is unreachable, while indexed selections follow the [fleet model-index contract](../../../docs/configuration.md#fleet-model-index-configmodel-indexjson). |
| Effort | `--effort low\|medium\|high`; `xhigh` and `max` stay in task metadata under the record-and-omit contract. |
| Composer | Borderless bare `>` row, which the shared classifier reads as `unknown` under the dead-shell rule, never `empty`; steering confirms delivery through native agent-state and the delivery footer instead, the cursor precedent. |

Expand Down
4 changes: 2 additions & 2 deletions .agents/skills/harness-adapters/references/harness/omp.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ Cross-harness provider and credential identity is owned by `references/common/mo
| Exit command | `/quit` (`/exit` and `/q` are aliases). |
| Interrupt | Single Escape; the composer is left empty, no clear key. |
| Skill invocation | No separate verified form beyond normal command behavior; use natural language when the exact command is uncertain. |
| Model flag | `--model <provider>/<id>` (fuzzy patterns are accepted by omp but bypass Firstmate's pre-launch check). |
| Model flag | `--model <provider>/<id>`; omp also accepts fuzzy patterns. Firstmate selection follows the [fleet model-index contract](../../../docs/configuration.md#fleet-model-index-configmodel-indexjson), and native non-entry validation is owned by [`fm-spawn.sh --help`](../../../bin/fm-spawn.sh). |
| Effort flag | `--thinking <off\|minimal\|low\|medium\|high\|xhigh\|max\|auto>`, a superset of the shared vocabulary, so every level including `max` maps straight across. |
| Model discovery | `omp models [--json]` lists built-in and auto-discovered providers only; extension-registered providers such as `claude-bridge` never appear, so those models pass through the spawn unvalidated with a stderr notice. `omp usage` shows provider windows; `quota-axi` covers the `claude` provider when the bridge is in use. |
| Model discovery | `omp models [--json]` lists built-in and auto-discovered providers only; extension-registered providers such as `claude-bridge` never appear. `omp usage` shows provider windows; `quota-axi` covers the `claude` provider when the bridge is in use. |
| Marker | None of omp's own (verified: `PI_CODING_AGENT` absent from the binary, no `PI_CODING_AGENT_DIR` or `OMP_PROFILE` in the default profile). `FM_OMP_HARNESS=omp` is Firstmate's launch marker; ancestry matches the exact process name `omp`. |
| Composer | See [`fm-spawn.sh --help`](../../../bin/fm-spawn.sh) for the composer posture pin; busy text is `Working…` (U+2026), the only spelling the omp busy regex accepts (the three-dot form its headless `-p` mode writes never reaches a supervised pane), with the status row's braille spinner plus elapsed cell as the second signal; box-shape support and overlay live-reload evidence are recorded in [omp box composer through Herdr](../../../docs/verification/runtime-backends.md#2026-10-06-omp-box-composer-through-herdr). |
| Autonomy | Approval and unattended-session posture are owned by [`fm-spawn.sh --help`](../../../bin/fm-spawn.sh). |
Expand Down
3 changes: 2 additions & 1 deletion .agents/skills/operational-home-layout/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ config/claude-permission-mode optional one-token permission posture for every C
config/claude-launcher optional Claude worker launcher; see docs/configuration.md "Claude launcher" for selection, proxy requirements, and inheritance
config/compact-adviser optional worker compact-adviser policy; LOCAL, gitignored; see docs/configuration.md "Compact adviser setting" for its format, defaults, and inheritance
config/claude-account config/pi-account optional per-home worker account pin for Claude and Pi launches; LOCAL, gitignored, not inherited; absent keeps today's ambient account; present refuses a launch unless the pinned account resolves and is signed in (section 4 owns the refusal rule); see docs/configuration.md "Worker account pin"
config/crew-dispatch.json optional crewmate dispatch profiles; LOCAL, gitignored; firstmate-maintained but human-editable natural-language rules that choose a per-task harness/model/effort profile (section 4). Inherited by secondmate homes
config/crew-dispatch.json optional crewmate dispatch profiles; LOCAL, gitignored, firstmate-maintained but human-editable; see docs/configuration.md "Crew dispatch profiles" for selection and secondmate-provisioning for inheritance
config/model-index.json optional fleet model index; see docs/configuration.md "Fleet model index"
config/secondmate-harness harness the PRIMARY uses to launch SECONDMATE agents, optionally followed by a model and effort token on the same line ("<harness> [<model>] [<effort>]"; section 4); LOCAL, gitignored; absent or "default" harness falls back to config/crew-harness then firstmate's own. The primary's own setting; NOT inherited into secondmate homes (secondmates do not spawn secondmates)
config/backlog-backend backlog backend override; LOCAL, gitignored; absent or "tasks-axi" = the configured tasks-axi backend, "manual" = force routine backlog updates to hand-editing; inherited by secondmate homes (section 10)
config/backend runtime session-provider backend override for new tasks; LOCAL, gitignored; absent = falls through to runtime auto-detection (the runtime firstmate itself is executing inside), then tmux; tmux is the verified reference backend (docs/tmux-backend.md), herdr has its own required CI lane (docs/herdr-backend.md), while zellij, orca, and cmux remain experimental with no dedicated real-backend CI lane (docs/zellij-backend.md, docs/orca-backend.md, docs/cmux-backend.md) - herdr and cmux can also be selected by runtime auto-detection, zellij and orca never are (always explicit), and codex-app is not accepted; see docs/codex-app-backend.md; inherited by secondmate homes under the primary-authoritative contract in secondmate-provisioning
Expand Down
6 changes: 4 additions & 2 deletions .agents/skills/quota-array-dispatch/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ It never removes this skill's authority, and its `ambiguous`, `escalate`, and `e

## Read the default TOON

Resolve configured candidates under the [fleet model-index contract](../../../docs/configuration.md#fleet-model-index-configmodel-indexjson) before applying this procedure.

Start each intake by running `quota-axi` once with no `--json`, and reuse that TOON for every candidate.
Post-consolidation quota-axi (the floor owned by `bin/fm-quota-axi-lib.sh`) puts `spendPriority` in the default `quota[]` block beside `effectivePercentRemaining`, `runway`, `confidence`, `limitedBy`, and `resetsAt`.
Sparse `exhaustion[]` carries finite-runway seconds only for `projected_exhaustion` and `exhausted_now`.
Expand Down Expand Up @@ -66,8 +68,8 @@ It cannot override a hard-gate failure, and it is never hidden inside a new comp
Outside those documented mappings, deterministic shell must not infer a provider family or credential store from a harness, model, or source name.
You establish the remaining relations yourself, in the open, from the candidate's own authoritative catalog (`harness-adapters` owns the per-harness discovery surface) plus the one intake snapshot.

Confirm the catalog lists the candidate's model and record the provider family it reports.
A model the catalog does not list is concrete contradictory evidence: block that candidate and quote the catalog result.
Read the candidate's model-support and provider evidence from its authoritative discovery surface, and record unavailable evidence as uncertainty.
Apply the [fleet model-index catalog-evidence boundary](../../../docs/configuration.md#fleet-model-index-configmodel-indexjson) before treating an omitted model as contradictory evidence; block a proven-unsupported candidate and quote the authoritative catalog result.
Apply quota at the granularity the vendor actually supplies.
A provider-level or `all_models`/`all_products` scope bounds every model you established in that family within the candidate's matched account, including one with no window of its own.
A named-model or named-product scope is an additional bound for that model alone.
Expand Down
Loading
Loading