Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions .agents/skills/harness-adapters/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ The supervision knowledge lives here: busy state, exit command, interrupt, dialo
Each adapter's `Busy state` row names only which semantic source that harness uses; `bin/fm-busy-lib.sh` owns the contract itself, including verdicts, source attribution, and the verification gates that keep an unverified harness at unknown.

Never dispatch a crewmate or secondmate on an unverified adapter.
User-installed skills are not part of Firstmate's bundled adapter guarantee.
Before dispatching instructions that require one, confirm that the selected worker runtime can discover the exact installed skill in its current environment.
If no verified runtime can, report the blocker rather than omitting the requirement or substituting a stale project copy.
If `config/crew-harness` or `config/secondmate-harness` names an unverified adapter, tell the captain under `AGENTS.md` section 9 that the requested worker runtime is not verified yet, use firstmate's own verified runtime for current work, and ask only whether to verify the requested runtime before future use.
Do not pause current work for that future-verification choice, and never launch an unverified adapter.
If the captain asks for a new harness, propose verifying it first: spawn a trivial supervised task using `fm-spawn`'s raw-launch-command escape hatch, confirm every fact empirically, then record the mechanics in `fm-spawn`, its semantic busy source and trust gate in `bin/fm-busy-lib.sh`, any needed `FM_COMPOSER_IDLE_RE` empty-composer override plus any novel bare agent prompt glyph in `bin/fm-composer-lib.sh`'s shared composer classifier (the one fleet-wide owner of the empty/dead-shell/pending decision, so a new harness's own idle composer is not misread as a dead shell), the tmux agent-process liveness classification in `bin/backends/tmux.sh` when the harness can launch a secondmate, and the verified knowledge here.
Expand Down
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,8 @@ Route durable knowledge to its most specific owner:
- Knowledge useful to almost every contributor to one project belongs in that project's committed `AGENTS.md`.
- Knowledge general to every firstmate user belongs in this repo's shared tracked surface.

When an installed skill will create or update this repository's GitHub Issues or triage labels, or will read or update root `CONTEXT.md` or `docs/adr/`, load the matching guide before acting: [issue tracker](docs/agents/issue-tracker.md), [triage labels](docs/agents/triage-labels.md), [domain documentation](docs/agents/domain.md).

Firstmate never writes a project's `AGENTS.md` directly.
A crewmate creates or updates it lazily through the project's selected delivery path, using `bin/fm-ensure-agents-md.sh` and preferring pointers to authoritative sources over copied detail.
Keep fleet delivery posture and captain-private strategy out of project memory.
Expand Down
16 changes: 16 additions & 0 deletions docs/agents/domain.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Domain documentation for installed skills

An installed skill that will read or update root `CONTEXT.md` or `docs/adr/` uses this repository's domain documentation when it explores the codebase.

## Sources

Read root `CONTEXT.md` before exploration when it exists.
Read applicable records under `docs/adr/` before working in an area when that directory exists.
If either source is absent, continue silently rather than proposing it up front.
The domain-modeling skill creates these sources lazily when accepted terminology or decisions need a durable owner.
Classify every newly tracked `CONTEXT.md` or `docs/adr/` Markdown surface in [`docs/documentation-audiences.json`](../documentation-audiences.json) as `agent-runtime` or `maintainer-architecture` in the same change that adds it.

## Vocabulary and decisions

Use the terms defined in `CONTEXT.md` rather than synonyms it explicitly rejects.
Surface a conflict with an existing architecture decision record instead of silently overriding it.
33 changes: 33 additions & 0 deletions docs/agents/issue-tracker.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Issue tracker for installed skills

An installed skill that will create or update issues for this repository uses GitHub Issues on `yelenplays/firstmate`, the captain's fork, and only when the captain explicitly authorizes issue-tracker work.
That target is an intentional bounded convention tracked for the captain's fork rather than a portable upstream default, because the local `origin` remote may point at upstream `kunchenguid/firstmate`.
Do not publish these issues to upstream `kunchenguid/firstmate` unless the captain explicitly redirects that concrete operation.
Pull requests are not a request or triage surface for this work.

## Tracker prerequisite

GitHub Issues must be enabled on `yelenplays/firstmate` before any operation in this guide can run.
Confirm the surface is live with `gh-axi api repos/yelenplays/firstmate` and read `has_issues`, because a `false` value makes every read and write fail with `error: the 'yelenplays/firstmate' repository has disabled issues`.
Enabling issues is a repository-settings change the captain owns, so report that blocker instead of changing the setting or retargeting the work to another repository.

## GitHub workflow

Use `gh-axi` for every GitHub read or write, and pass `-R yelenplays/firstmate` so the operation never depends on the local `origin` remote.
Consult `gh-axi issue --help` and, when labels are involved, `gh-axi label --help` immediately before acting because those help surfaces own the current commands and flags.
A read-only request does not authorize creating, editing, commenting on, labelling, assigning, closing, or otherwise mutating an issue.
Do not interpret a skill's generic suggestion to publish as captain authorization for a GitHub write.

## Wayfinding operations

A wayfinding map is one issue labelled `wayfinder:map`, with sections for notes, decisions so far, and fog.
Each ticket is a child issue when native subissues are available, or is linked from a task list on the map and names `Part of #<map>` otherwise.
Ticket labels use `wayfinder:<type>`, where the type is `research`, `prototype`, `grilling`, or `task`.
Use native issue dependencies when available, or record `Blocked by: #<number>` in the dependent issue otherwise.
Resolving a ticket means recording its answer, closing it, and adding a pointer to the map's decisions-so-far section.
All wayfinding writes remain subject to the explicit authorization rule above.

## Firstmate backlog boundary

Firstmate's operational queue remains `data/backlog.md` through the configured backlog backend.
Do not mirror routine fleet work into GitHub Issues unless the captain explicitly requests that separate tracking record.
15 changes: 15 additions & 0 deletions docs/agents/triage-labels.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Triage labels for installed skills

An installed skill that will create or update triage labels for this repository uses the five canonical roles below on `yelenplays/firstmate`, under the fork convention stated in [`issue-tracker.md`](issue-tracker.md).
The tracker label string is identical to each role name.

| Role | Tracker label | Meaning |
| --- | --- | --- |
| `needs-triage` | `needs-triage` | A maintainer needs to evaluate the issue. |
| `needs-info` | `needs-info` | The issue is waiting for more information from the reporter. |
| `ready-for-agent` | `ready-for-agent` | The issue is fully specified and ready for an autonomous agent. |
| `ready-for-human` | `ready-for-human` | The issue requires human implementation. |
| `wontfix` | `wontfix` | The issue will not be actioned. |

When a skill names a role descriptively, apply the corresponding exact label above.
Create a missing label only when the captain has explicitly authorized that GitHub mutation, and use the `gh-axi` workflow in [`issue-tracker.md`](issue-tracker.md).
24 changes: 24 additions & 0 deletions docs/documentation-audiences.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,18 @@
"source": ".no-mistakes.yaml",
"target": "docs/documentation-audiences.md"
},
{
"source": "AGENTS.md",
"target": "docs/agents/issue-tracker.md"
},
{
"source": "AGENTS.md",
"target": "docs/agents/triage-labels.md"
},
{
"source": "AGENTS.md",
"target": "docs/agents/domain.md"
},
{
"source": "CONTRIBUTING.md",
"target": "docs/documentation-audiences.md"
Expand Down Expand Up @@ -195,6 +207,18 @@
"path": "README.md",
"audience": "public-product"
},
{
"path": "docs/agents/domain.md",
"audience": "agent-runtime"
},
{
"path": "docs/agents/issue-tracker.md",
"audience": "agent-runtime"
},
{
"path": "docs/agents/triage-labels.md",
"audience": "agent-runtime"
},
{
"path": "docs/architecture.md",
"audience": "maintainer-architecture"
Expand Down