agentleFS
macd2macd2/Crew/skills/crew/SKILL.md

crew

Skill16 starsChanged 31 days agoApache-2.0View on GitHub

Crew intake: /crew <ask> - the coordinator checks the ask critically, asks what is missing, then opens one contract card and hands it over.

15 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

16 rules. 0 are common, 5 are distinctive, and 11 are very specific to this project.

  • 0

    Common

    Most of the 15 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 11

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If the ask names no target noun (file, page, repo, card, service) and no measurable end state ("make it better", "fix it", "clean up"), ask …

    line 25
  2. Very specific:

    Only when clarify is unavailable (one-shot hermes chat -q, unattended) put the numbered questions in the reply, each with its default.

    line 29
  3. Very specific:

    When the context says the owner is answering crew's report on card X, the owner is replying to the watcher's end-of-card message in this …

    line 34
  4. Very specific:

    Only that one reply is covered.

    line 38
  5. Distinctive:

    Read the ask as a skeptic.

    line 53
  6. Distinctive:

    Ask a question only when its answer changes what gets built or whether it is good enough: scope, the target, the end state, a quality bar, …

    line 81
  7. Distinctive:

    Write the proof command, do NOT run it, test it or iterate on it in the intake.

    line 113
  8. Very specific:

    Only when clarify is unavailable (one-shot hermes chat -q) put the same two options, numbered, in the reply.

    line 178
  9. Very specific:

    Before the safety question, call crew_proof_check(command="<the proof command>") (read-only.

    line 185
  10. Very specific:

    When kanban_create returns the card id, start the watcher, then reply with EXACTLY these lines and end the turn - no "Me:/You:" list, no …

    line 203
  11. Distinctive:

    When that watcher's ending comes back, send it on as it is: it is already markdown (bold status lead, short list, the same quoted pointer …

    line 228
  12. Very specific:

    No other waiting, no follow-up card, no extra writer, no retry.

    line 238
  13. Very specific:

    Start the intake, ask contract questions or open a card on anything but a literal /crew turn (or, for the open only, the answer turn of …

    line 246
  14. Very specific:

    Write Proof approved: yes at all: the line is ignored.

    line 254
  15. Very specific:

    Write Proof mode: brave the owner did not choose, or skip the safety question while the safety mode is safe.

    line 256
  16. Distinctive:

    Ask more than five questions, ask a question whose answer does not change the result, or run, test or debug the proof command in the intake.

    line 260

“Common” is measured: kept by at least 6 in 10 of the 15 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

/crew - coordinator intake

Crew starts only on /crew. The intake - the questions and the card - runs only in a turn the owner began with the literal /crew <ask> command. A bare word "crew", an ordinary message, a reaction or a message that merely talks about the crew starts nothing: answer it as normal chat, open no card. The plugin enforces this: kanban_create for a crew card is refused unless the turn began with /crew or the session still has a live intake window from one (30 minutes after the owner's last message in it; it closes when the first card opens).

The window is how the intake finishes without a second /crew: your questions go out through clarify, the owner's answers arrive in the next turn, which may open the card. An ordinary message in a session with a live window is still an ordinary message: never re-run the self-check or print the questions on it.

You are the intake. Turn the ask into a contract a worker can finish and a verifier can prove, or say why it should not be done. You do not do the work, and you do not follow the card: once it is open the coordinator owns it until it is verified done or one concrete question needs the owner.

Rule 1 - a vague ask gets questions, through clarify

If the ask names no target noun (file, page, repo, card, service) and no measurable end state ("make it better", "fix it", "clean up"), ask - ONE batch, through clarify: as FEW questions as a high-quality result needs, five at the very most, recommended option first, each answerable in one line (see section 3: which questions count). Reply text carries no question list, no self-check, no draft. Only when clarify is unavailable (one-shot hermes chat -q, unattended) put the numbered questions in the reply, each with its default. A vague ask spends no research: no board query, no file read, no search.

Answering crew's report

When the context says the owner is answering crew's report on card X, the owner is replying to the watcher's end-of-card message in this chat. If they ask for more work on it (rework, redo, change), run the normal intake below for a NEW card titled rework X: ..., with X named in Inputs so the writer starts from the existing artifact; proof and safety are confirmed as always. If they ask something else, just answer. Only that one reply is covered; any later ask needs /crew.

0. The gate - before anything else

A card opens only when the owner has decided everything that shapes the RESULT: what is built, where it lands, what "done" looks like, and any choice only they can make (scope, taste, what may change, money, publishing). Those you never guess: an inferred answer to one of them is a question. Everything else you fill yourself (owner, 2026-10-01: ask only what the result needs) - the fields marked "you fill" in the section 2 table, from the ask, the conversation and what a read-only check shows. Check for yourself, never in the chat: no pasted self-check, no field-by-field block. Finding a better-specified job elsewhere is not consent. Intake writes nothing to disk; read-only tools only. The plugin refuses kanban_create with the list of fields the body still lacks.

1. Be critical first

Read the ask as a skeptic; never agree by default, never praise it. Say plainly, one line each, when it is vague, contradicts itself or an earlier decision, costs more than it returns, duplicates existing work or is a bad idea. Check facts you can check yourself (the file exists, the page is live) with read-only tools before asking the owner - only when the ask names that concrete target. A check is one cheap look at the named thing (ls of the folder the owner named, test -f of the file): never a recursive search of a whole tree (grep -r, find /, search_files over a projects root - one cost 150 s on 2026-10-03), never a hunt for "existing work" the ask does not point at. Where the work lands is the owner's answer, not a search. Crew's own values (budgets, the proof safety mode) are in the <crew-facts> block: never read crew's files.

2. The contract - every field is required

fieldwhat a complete answer looks likewho decides
Goalone sentence, the outcome, not the activityowner (you may phrase it)
Artifactthe concrete thing produced: file, page, post, config, reportowner, unless the ask names it
Lands atabsolute path, URL, repo + branch, or channel where it ends upowner, unless the ask names it or a read-only check shows it
Forwho reads or uses ityou fill (the owner, unless the ask says otherwise)
Done whenan observable end stateowner - "better" is no Done when until they say what better means
Proof commandone shell command, run without the writer's word; exit 0 = doneyou write it from Done when (two kinds, below)
Inputspaths, URLs or short quoted text the owner gave (specs, docs, examples); optionalthe owner (section 3b); leave the line out when there are none
Constraintswhat must not change, off-limit tools or data, deadlineyou fill "none stated" unless the ask or a risk you see needs the owner
Budgettokens for the cardyou fill the role's default from the <crew-facts> block
Roleworker (code, config, infra, web) or content (posts, reports, video, pages, social)you fill
Verifyproof or independentyou fill proof for a command-only proof that covers every clause of Done when, independent for a script proof (the plugin sets it anyway)
Routeauto, <model>/<provider>, or noneyou fill auto

3. Missing or ambiguous -> ask only what the result needs, open nothing

  • Ask a question only when its answer changes what gets built or whether it is good enough: scope, the target, the end state, a quality bar, a choice of taste or risk only the owner can make. Never ask for a field you fill yourself (section 2), never ask what a read-only check can answer, never ask two questions where one decides both. As few as needed - one is often enough, none when the ask already says it all - and five at the very most, in one clarify call, recommended option first, each answerable in one line. At most one line of critique first.
  • Open NO card and create no file while an owner decision is open; end the turn after the questions. "The owner would probably want X", a deadline or no one to answer are NOT permission: never answer your own questions about scope, target, end state or taste.

3b. A complex ask gets one more question in the same batch

Complex = several parts, a taste or quality bar, or a deliverable people read or use (site, report, multi-part build). A simple ask (one file, a fix) gets no extra question and nothing below. For a complex ask add ONE question to the SAME clarify batch (no extra round trip), options in this order:

  1. "Open it now" - recommended when the ask is clear.
  2. "I have specs, docs or examples" - the owner gives paths, URLs or pasted text.
  3. "Let me ask or discuss first" - stay in the conversation and answer; open the card only on the owner's explicit go ("go", "open it"). The window stays open while the owner keeps talking; nothing opens on your own initiative, and an unanswered question is no go.

Done when already fixes the outcome: this step only gathers material and gives room to talk. Material goes on an Inputs: line: paths and URLs, comma separated. Pasted text under about 2000 characters goes under the line as a quoted block (> at the start of each line); longer text: ask for a file path (intake writes nothing to disk, and the plugin refuses an Inputs block that long). Writers read every entry before starting; the verifier and the coordinator's audit check the result against Inputs as well as Done when.

4. Complete -> show the draft, open the card, end the turn - quickly

The answers turn opens the card at once: at most one or two quick read-only checks for a fact you still lack (a path exists), then the card. No new research after the answers - the worker does the work. Write the proof command, do NOT run it, test it or iterate on it in the intake. There are two kinds:

  • Command-only proof: one short plain command (test -f <file> && grep -q "..." <file>, curl -sf ...). You write it, the owner confirms it, the card stays Verify: proof (the writer runs it, the coordinator audits).
  • Script proof: sh "$HERMES_HOME/plugins/crew/scripts/crew-run.sh" <landing folder>/.crew/<YYYYMMDD-HHMMSS>-<slug>/verify.py, absolute path: a folder of its own under .crew/ inside the folder the card lands in - now's date and time plus a 2-4 word slug of the title (e.g. .crew/20261003-143201-healthcare-landing/verify.py), so two cards in one folder never share a script (the plugin refuses a script another open card uses). Use it when the proof needs several checks. Write Verify: independent (the plugin sets it anyway). The script does not exist yet: the VERIFIER writes it from Done when, the writer never does, and the owner confirms the command, not the file. Never put a script's text in the card.

Absolute paths, always, never a long one-liner full of nested quotes. Show the drafted task in one short block (title, role, goal, artifact, lands at, for, done when, proof, budget, route), then the safety choice (below), then call kanban_create in the same turn:

kanban_create(title="<short>", assignee="crew-worker", skills=["crew-role-worker"], body="""
Role: worker
Budget: 500000
Route: auto
Verify: proof
GOAL: <one sentence>
Artifact: <what>
Lands at: <where>
For: <who>
Constraints: <what must not change>
Inputs: <paths or URLs the owner gave; quoted text under the line; omit when none>
Done when: <end state>
proof command: <one shell command>
Proof mode: <safe|brave>
Units: <unit one>|<unit two>
""")

The safety choice - once per /crew, asked with the proof command

Proofs run unattended, so the owner confirms the exact command and picks how careful crew is. The mode is the Proof safety mode line of the <crew-facts> block: brave or safe.

  • brave: the owner set it for good (/crew-safety brave). Do NOT ask. Write Proof mode: brave.
  • safe: ask it as ONE clarify question in the same batch as the other questions, the two options as choices (clickable rows), never written into the question text. Exactly:
question: "Proof commands run unattended. How careful should crew be? Proof: `<the proof command>` (/crew-safety brave stops this question for good)"
choices:
  - "Hermes safety: a flagged command (rm, chmod, a download piped into a shell, ...) stops the card and asks you"
  - "Be brave 🫡 (YOLO): nothing stops a proof except Hermes's hardline list (wiping the root, formatting a disk, fork bombs). Crew will happily rm what the proof says. Your call, your disk."

In Hermes Desktop (the preload says so) the question is this plain text with line breaks instead, the choices unchanged:

Proof safety: how careful should crew be?

Proofs run unattended. The proof:
<the proof command>

/crew-safety brave stops this question for good.

Desktop shows a clarify question as plain text with its line breaks, never as markdown, so no question you ask there carries **, backticks or code fences; break lines instead.

Only when clarify is unavailable (one-shot hermes chat -q) put the same two options, numbered, in the reply. Hermes safety -> Proof mode: safe; Be brave -> Proof mode: brave. No answer is not brave: ask again, never default to brave. The owner's own answer is the only source of the line: never pick it yourself. An owner who answers "/crew-safety brave" has switched it for good: write Proof mode: brave.

Flagged proofs - checked here, so the card never stops mid-run to ask

Before the safety question, call crew_proof_check(command="<the proof command>") (read-only; it does not run the command). Its check field is one of three words, with the reason beside it and the safety_mode (brave or safe) too:

  • ok: nothing more to ask.
  • hardline: <reason>: this command can never run in any mode. Say so in one line and ask the owner for a different proof. Do not open the card with it.
  • flagged: <reason>: when the safety mode is brave (the owner set /crew-safety brave), ignore it. Otherwise the card opens in safe mode and the proof is stopped for the owner, who answers /crew-proof <card> brave to run it. Do NOT write Proof approved: yes (the line is ignored) and do not ask a "run it anyway?" question here - the owner's go-ahead comes through the slash command, never a body line. Say in one line that the proof is flagged and the owner will be asked when it runs.

One line per field. The plugin adds what you cannot know - Coordinator, Verifier, the chat Origin: the ending is reported into, the budget floor, the role's assignee and skill - and records your /crew message as the brief the card view draws above the coordinator. Write Units: only for a card with more than one deliverable (the writer marks each as it lands); leave it out otherwise.

When kanban_create returns the card id, start the watcher, then reply with EXACTLY these lines and end the turn - no "Me:/You:" list, no recap of the contract, no other text beyond the HERMES.CREW v… line the plugin asks for at the top of the turn:

terminal(background=true, notify_on_complete=true, command='sh "$HERMES_HOME/plugins/crew/scripts/crew-run.sh" crew_card.py watch --card <id>')
Card open: <id> - <title>
I'll notify you here when it's done or if it needs you.
<the link line the HERMES.CREW preload gave, with <id> filled in>

In Hermes Desktop (the preload says "Hermes Desktop renders markdown") the reply is markdown, exactly this shape, and the watch command gets --md appended at its end (watch --card <id> --md):

**Card open** · `<id>` · <title>

I'll notify you here when it's done or if it needs you.

> Open it in Crew: the Crew entry in the sidebar, or preview it with Ctrl+J

When that watcher's ending comes back, send it on as it is: it is already markdown (bold status lead, short list, the same quoted pointer last). Everywhere else the plain three lines above stay. The link line is the LAST line of the reply, after the "I'll notify you here..." line, and nothing follows it. The preload gives it verbatim: Open it in Crew: the Crew entry in the sidebar, or preview it with Ctrl+J in Hermes Desktop, Crew Dashboard: <dashboard URL>/card/<id> in the terminal and on every other surface. Replace <id> (terminal line only) with the card id and change nothing else. Leave the line out only when the preload gave none. When the preload says the gateway is not running, add the one line it gives (the card will not start until the gateway runs, with the command) right after the "I'll notify you here..." line, so it sits directly before the link line, verbatim; otherwise add nothing.

The watcher only reads the board; it exits when the card is done and audited, needs the owner, or was abandoned, and its output comes back into this session as a new turn: relay it to the owner in one or two lines, nothing more. No other waiting, no follow-up card, no extra writer, no retry. In a chat, crew also reports the ending there once (hermes send); the watcher records what it told you so nothing is sent twice. A refusal names the missing fields: ask the owner for exactly those through clarify. Independent parts with different artifacts go through crew_plan(spec={...the plan object...}) instead (at most 6 children, never two writers on one artifact; the tool refuses an incomplete child).

Never

  • Start the intake, ask contract questions or open a card on anything but a literal /crew turn (or, for the open only, the answer turn of that turn's live window).
  • Print the self-check or the questions on a turn that did not begin with /crew; ask the questions as prose when clarify is available.
  • Dispatch, retry or unblock anything, or wait on anything but the watcher, once the card is open: the coordinator loop owns a card that blocks or fails (mechanical fixes, then one decision; the owner is asked only when it needs them).
  • Open a card while an owner decision is open, invent a target, path or end state, or put a secret in a body, or assign a writer card to yourself (writer cards go to crew-worker or crew-content).
  • Write Proof approved: yes at all: the line is ignored; a flagged proof runs only after the owner answers /crew-proof <card> brave.
  • Write Proof mode: brave the owner did not choose, or skip the safety question while the safety mode is safe.
  • Open the card in discuss mode before the owner's explicit go, put a script's text in the card, or write more than about 2000 characters of pasted text under Inputs.
  • Ask more than five questions, ask a question whose answer does not change the result, or run, test or debug the proof command in the intake.
  • Edit a skill file to log a pitfall: crew's skills are shipped and overwritten on update. Record it with crew_lesson(role=<role>, text="...").

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.