agentleFS
zakamezakame/brooks-agent-team/skills/assemble-with-hermes-team/SKILL.md

assemble-with-hermes-team

Skill4 starsChanged 51 days agoMITView on GitHub

Hermes Agent — Spawn a Brooks Surgical Team using Hermes's delegate_task tool for concurrent role dispatch, tracked on Hermes's native kanban board when your profile has the kanban toolset enabled, via the `hermes kanban` CLI dispatcher if requested and the toolset isn't there, or a plain/todo_list plan as a last resort. Use when running under the Hermes Agent harness and you want true parallel teammates.

The file

Show its rules and text

We split this skill into the rules it gives an agent

17 rules. About 0 are common, 10 are distinctive, and 7 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈10

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 7

    Very specific

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

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

    Default to delegate_task unless the user asked for the dispatcher, wants the plan to persist past this session, or dedicated per-role …

    line 19
  2. Distinctive:

    When invoked, execute the following steps in order.

    line 21
  3. Distinctive:

    Read just enough to understand the work ahead:

    line 36
  4. Very specific:

    Do not do a full orientation — this skill is about getting the team spawned quickly.

    line 44
  5. Distinctive:

    Wait for the user's explicit response before continuing.

    line 63
  6. Distinctive:

    Use the same tags the other platform skills use, so cards/notes read consistently across the project:

    line 94
  7. Very specific:

    If the artifact needs a CDN-hosted library, tell each child that "Cloudflare" means a real *.cloudflare.com URL (e.g.

    line 123
  8. Very specific:

    Treat the board as plan-of-record, not live status for anything not covered by that exception: create the cards up front for visibility and …

    line 129
  9. Distinctive:

    Copilot: read-only across the repo.

    line 133
  10. Distinctive:

    Language Lawyer: read-only research. May search the web.

    line 135
  11. Distinctive:

    Do not spawn the full team for tiny changes.

    line 170
  12. Distinctive:

    Do not spawn Copilot/Tester onto an empty tree — implement first, review/test second.

    line 171
  13. Very specific:

    Do not let two roles write the same files, and do not run two same-file [implement] cards concurrently.

    line 172
  14. Distinctive:

    Do not assign a kanban card to a role name that isn't an actual Hermes profile — it will silently never spawn a worker.

    line 173
  15. Distinctive:

    Do not trust a child's self-reported test results without re-running the suite yourself.

    line 174
  16. Very specific:

    Do not tell the user a card (or its underlying work) is done without checking the actual delegate_task result — the board itself won't …

    line 175
  17. Very specific:

    Do not assume a delegate_task child, or the Surgeon session, can mark a kanban card done/blocked or comment on it — those tools are …

    line 176

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “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

Assemble Hermes Surgical Team (Parallel)

<SUBAGENT-STOP> If you are already a `delegate_task` child, or a kanban-dispatched worker (`HERMES_KANBAN_TASK` set in your environment), you are already playing one of these roles. Do not invoke `assemble-with-hermes-team`, `assemble-with-fleet`, `assemble-with-grok-team`, `assemble-with-pi-team`, `using-brooks-team`, or `surgeon`. A `delegate_task` child cannot itself call `delegate_task` as long as it's spawned with the default `role` (omitted → `"leaf"`) and your profile's `delegation.max_spawn_depth` stays at its default of `1` — Hermes' own docs describe `role` (`"leaf"`/`"orchestrator"`) and `max_spawn_depth` as exactly what governs recursion, not something separate from it. Don't pass `role: "orchestrator"` here, and don't assume recursion is blocked if something else has raised `max_spawn_depth`. (Whether a given deployed Hermes version's live tool schema actually surfaces the `role` field to the model varies — one field-tested session saw only `goal`/`context`/`output_schema` on the live tool; check your version before depending on `role` being present at all.) </SUBAGENT-STOP>

Which Mode: delegate_task or the Kanban Dispatcher?

Two ways to run a Hermes team — pick based on the work, not habit:

  • delegate_task (default) — right when you're one Surgeon session shipping a single bounded artifact in this chat. Ephemeral, no board setup, fastest to start. Nothing survives the session ending except what you wrote down.
  • Kanban dispatcher — right when the plan needs to outlive this chat, or fan out across dedicated Hermes profiles. Needs either the kanban toolset on your profile, or the hermes kanban CLI (works even without the toolset — see Step 3), plus something actually advancing cards (the gateway, or you looping hermes kanban dispatch).

Default to delegate_task unless the user asked for the dispatcher, wants the plan to persist past this session, or dedicated per-role profiles already exist.

When invoked, execute the following steps in order.

Step 0: Prerequisites

  • Skill discovery. This repo's skills live in skills/ (mirrored at .agents/skills/), a project-local directory Hermes recognizes per the Agent Skills standard. Project-local skill directories require a one-time trust step before Hermes loads them:
    hermes skills trust <path-to-this-repo>
    Run once per clone; skip if already trusted. Run it against the repo you're implementing in, not the skills repo itself if they differ. For a permanent setup that needs no trust step and works from any project, add this repo's skills/ path to skills.external_dirs in ~/.hermes/config.yaml instead (supports ~/${VAR} expansion) — see the README's Hermes Agent section.
  • Kanban toolset (check before relying on Step 3, Path A). A regular hermes chat session has zero kanban_* tools by default — per Hermes' own docs, they only appear if "the active profile explicitly enables the kanban toolset for orchestrator work." Check now whether kanban_create/kanban_list/kanban_link/kanban_unblock are actually in your tool list.
  • CLI kanban, independent of the toolset above. Even with no kanban_* tools, the hermes kanban shell CLI may still work (hermes kanban create, list, dispatch, assignees, etc. — check hermes kanban --help for your version). If the user asked for the dispatcher, use the CLI path in Step 3 rather than dropping straight to notes.
  • Kanban dispatcher. Cards only advance on their own if something is actually driving them — on by default via kanban.dispatch_in_gateway: true in ~/.hermes/config.yaml (siblings: dispatch_interval_seconds: 60, review_dispatch: true). If that's true but no gateway process is actually running, or it's false, cards will sit in ready forever: tell the user, then either help start the gateway or loop hermes kanban dispatch yourself until the board drains.

Step 1: Quick Project Survey

Read just enough to understand the work ahead:

  • Project name / primary language / framework (README, package.json, Cargo.toml, pyproject.toml, etc.)
  • Recent activity: git log --oneline -5 and current branch
  • Presence of tests/, docs/, AGENTS.md, or similar
  • Any obvious large modules or risky areas from the top-level structure
  • Whether there's anything to review yet: an empty or near-empty tree means there's no diff for Copilot and no code-vs-spec for Tester to check — see the greenfield rule in Step 4.

Do not do a full orientation — this skill is about getting the team spawned quickly. Record a one-paragraph summary for use in delegate_task calls.

Step 2: Decide the Team Composition

Skip this question if the user's invocation already named the team or mode (said "default", "go", "dispatcher", or gave a single bounded spec with no team discussion) — proceed straight to Step 3 with the core team. You can still offer additional roles later if new work surfaces (a research question, docs, tooling); don't gate on it up front.

Otherwise, ask the user one focused question:

I'll spawn the core surgical team now (Surgeon = you + Copilot + Tester).

Do you want any additional teammates?

  • Language Lawyer — for tricky language, framework, or version edge cases
  • Editor — for documentation-heavy work
  • Toolsmith — if you need new automation or scripts
  • Program Clerk — if the codebase needs reorganization alongside the work

Reply with the roles to add, or say "default" (or just "go") to proceed with Copilot + Tester only.

Wait for the user's explicit response before continuing.

Core team (always spawned): Copilot (read-only review), Tester (adversarial tests).

Step 3: Initialize the Shared Task Board

Hermes has no in-memory shared-list tool like Claude Code's TaskCreate/TaskList/TaskUpdate/TaskGet or Grok's todo_write. Depending on what's actually available in this session, use one of three paths:

Path A — kanban toolset enabled (kanban_create/kanban_list/kanban_link/kanban_unblock are in your tool list):

  • kanban_create(title, assignee) — one card per unit of work. Set assignee to the role name (copilot, tester, language-lawyer, editor, ...).
  • kanban_link(parent_id, child_id) — add a dependency edge after creation, e.g. blocking a [review] card on its [implement] card.
  • kanban_list(...) — check board state (supports filters, exact set undocumented — inspect what your Hermes version accepts).
  • kanban_unblock(task_id) — release a card once its blocker resolves.

Card states flow triage → todo → ready → running → blocked → review → done → archived; a kanban_link edge auto-promotes a card from todo to ready once every parent card reaches done. Create the [implement] card, then its dependent [review]/[test] cards, then kanban_link each to its parent, before spawning anyone — the auto-promotion depends on that order.

Path B — no kanban toolset, but the user asked for the dispatcher (or per-role profiles already exist):

Field-verified from a live Hermes TUI session — use the hermes kanban CLI directly:

  • Discover real assignees first: hermes profile list and/or hermes kanban assignees. Never assign a card to a role name that isn't an actual profile (copilot, tester are not profiles unless someone created them) — an unknown assignee silently never spawns a worker. If no per-role profiles exist, assign everything to default and paste the role's SKILL.md body into the card so the worker knows which contract to play (--skill copilot, --skill tester, etc., as your version supports).
  • Set --parent at creation time, not a separate link step afterward — e.g. hermes kanban create --parent <parent-id> --assignee <profile> --workspace dir:<path> --json .... A child created and only linked later can briefly read as unblocked and race its still-running parent. Use an idempotency key if your version supports one, so a retried create doesn't duplicate the graph.
  • Same-file cards can't fan out. If two [implement] cards would touch the same file, chain them with --parent instead of running them concurrently — two workers on one file will race. Copilot/Tester cards should depend on the last card in that chain, not each [implement] card individually.
  • Board pin. A Hermes TUI session pins HERMES_KANBAN_BOARD at chat boot. hermes kanban boards create --switch (or boards switch) only updates ~/.hermes/kanban/current, which loses to that pinned env var — a newly created board can sit empty while cards keep landing on default. Export it explicitly and pass it on every mutating call: export HERMES_KANBAN_BOARD=<slug> and --board <slug>.
  • See the dispatcher-gate note in Step 0 — check it before assuming cards will move on their own.

Path C — no kanban toolset, dispatcher not requested:

Use Hermes' todo_list tool if it's in your tool list — it's a real fallback when the plugin is loaded, not "no list tool at all." Otherwise, enumerate the plan with the same tags in your own working notes and pass the relevant items into each delegate_task call's context in Step 4 — the plan lives in what you tell each child.

Use the same tags the other platform skills use, so cards/notes read consistently across the project:

  • [implement] — Surgeon (you)
  • [review] — Copilot
  • [test] — Tester
  • [research] — Language Lawyer (if spawned)
  • [docs] — Editor (if spawned)
  • [tooling] — Toolsmith (if spawned)
  • [structure] — Program Clerk (if spawned)

Step 4: Spawn the Team

Greenfield rule: if there's no implementation yet (empty or near-empty tree), build it yourself first. Spawn Copilot/Tester only once there's an actual file or diff for them to check — spawning either onto an empty tree burns a call and reviews nothing. The order that works: implement → spawn review/test → fix from findings.

Hermes has no persistent per-role agent-definition file the way Codex's .codex/agents/*.toml, OpenCode's .opencode/agents/*.md, or Grok's .grok/agents/*.md do. delegate_task is fully ephemeral: goal, context, and output_schema are passed at call time only, with no on-disk registry to point at. Hermes "profiles" do provide named, persistent identities, but each is a full separate Hermes home directory (own config, skills, memory, state db) — too heavy to stand in for a lightweight role file here.

Spawn each role with delegate_task, and the target skill's full body pasted into context — since there's no named agent to reference, the skill content itself is the role contract:

delegate_task(
  goal: "Review the [FEATURE] implementation against its design intent; report Blocking/Important/Suggestions findings.",
  context: "<paste skills/copilot/SKILL.md body>\n\nProject: [one-paragraph summary]. Diff/files to review: [...]. Do not edit source.",
  output_schema: { ... }
)

(Some documentation mentions a role field on delegate_task — omit it unless your Hermes version's live tool definition actually lists it; goal/context/output_schema are the parameters that are field-verified to work.)

Repeat per selected role: tester → skills/tester/SKILL.md, language-lawyer → skills/language-lawyer/SKILL.md, editor → skills/editor/SKILL.md, toolsmith → skills/toolsmith/SKILL.md, program-clerk → skills/program-clerk/SKILL.md. Give each child its full task up front (project summary, the card it owns, file ownership, the concrete diff/spec/question) — there is no lightweight-first-turn/resume split to rely on.

If the artifact needs a CDN-hosted library, tell each child that "Cloudflare" means a real *.cloudflare.com URL (e.g. cdnjs) — if a library isn't actually hosted there, inline it or skip it. Don't let a child invent a URL.

delegation.max_concurrent_children (default 10, set in the user's ~/.hermes/config.yaml, not a repo file) governs how many of these run at once. Once there's something to review, issue all selected roles' delegate_task calls together rather than waiting on each in turn.

Reconciling with the kanban board (if you have one): delegate_task children are not spawned by the kanban dispatcher. No Hermes doc directly addresses whether they inherit your profile's orchestrator-side kanban toolset (kanban_create/kanban_list/kanban_link/kanban_unblock). The general subagent-inheritance rule (children inherit the parent's enabled toolsets, with only delegate_task, clarify, memory, send_message, and cronjob named as blocked — kanban isn't on that list) suggests it likely could. Don't rely on a child being unable to touch the board either way — tell it explicitly not to call kanban_create/kanban_link/kanban_unblock even if they show up in its tool list. What a delegate_task child definitely does not get is the separate HERMES_KANBAN_TASK-gated worker tools (kanban_show, kanban_complete, kanban_block, kanban_request_review, kanban_comment, etc. — those exist only for a task the dispatcher itself launched, whatever the assignee). So even with the orchestrator toolset enabled, nothing in the default delegate_task flow can mark a card done, blocked, or commented-on directly. A Path B card the dispatcher itself actually launches — any assignee, a shared default profile included, not only a dedicated per-role one — is the exception: it gets HERMES_KANBAN_TASK and the full lifecycle, and closes its own card.

Treat the board as plan-of-record, not live status for anything not covered by that exception: create the cards up front for visibility and dependency tracking, kanban_list to check them, and kanban_unblock a card once its delegate_task result confirms it's actually done.

File Ownership Rules (Include in Every delegate_task Context)

  • Copilot: read-only across the repo. Never edits source.
  • Tester: owns tests/, **/*.test.*, **/*.spec.*, and test utilities. Assert only observable spec behavior — don't let a test lock in an incidental implementation detail (e.g., one specific UI dismiss gesture) that a legitimate fix would then have to break to pass Copilot's review.
  • Language Lawyer: read-only research. May search the web. Never edits files.
  • Editor: owns docs/, README*, *.md (except code-adjacent notes).
  • Toolsmith: owns scripts/, tooling configs, Makefiles, new automation. Every tool needs --help and tests.
  • Program Clerk: proposes structure changes only; executes renames/refactors only after Surgeon approval.

No worktree isolation is documented for delegate_task children — these rules are enforced by convention and Surgeon review, the same as on OpenCode and Copilot CLI, not by a platform-level sandbox. Never run two roles with overlapping ownership at once, and never run two same-file [implement] cards concurrently — chain them (see Step 3, Path B).

Step 5: Handoff

If your harness backgrounds delegate_task children, give the user a one-line status here and stop — don't poll for completion. When a child's result comes back, treat any self-reported outcome (e.g. "33/33 passed") as a claim, not a fact: re-run the suite yourself before telling the user it's done. A child can fail at the transport level (e.g. a broken pipe) minutes after doing real work, with its own success claim being the only thing that came back.

Then tell the user:

Team is live. You are the Surgeon: continue the critical path while your teammates run as delegate_task children.

[If a Path B card is actually running under the dispatcher (gateway or hermes kanban dispatch active) — any assignee, default included:] That worker closes its own card (kanban_complete) — kanban_list() reflects live status.

[Otherwise, if the kanban toolset is enabled:] The plan is on the kanban board (kanban_list() any time for state — durable, survives this session ending), but it's plan-of-record only — neither your teammates nor this session can mark a card done or comment on it, since those tools are dispatcher-gated. Treat each delegate_task result as the real completion signal, and use kanban_unblock to release anything it was blocking.

[If there's no board at all:] There's no shared task-list tool here — the plan lives in what you told each teammate (or your todo_list, if you have one). Track completion from each delegate_task result as it returns.

No worktree isolation here — respect the file-ownership rules above; never let two roles touch the same files.

Run assemble-team any time for the full role reference.

Optional: Re-Review Loop (Deferred)

Field notes proposed an automatic loop: after Copilot/Tester return, enqueue their Blocking + Important findings and any failing tests as new [implement] cards, re-dispatch Copilot/Tester once fixed, and ignore Suggestions unless the user asks for them. That's not wired into the steps above — deciding whether and how to automate it (kanban-only, since a delegate_task round has no card to re-enqueue against) is deferred to a future revision. For now, do it by hand: read the findings, fix them yourself or spawn a fresh delegate_task round, and only loop back to Copilot/Tester when there's something new to check.

Advanced: fully autonomous kanban workers (optional)

If dedicated Hermes profiles already exist for these roles (~/.hermes/profiles/<role>/), the kanban dispatcher can spawn and run those profiles against kanban_created cards directly — this is the same worker lifecycle Path B already gets even against a shared default profile (any dispatcher-launched card gets HERMES_KANBAN_TASK and the full kanban_show/kanban_complete/kanban_block/kanban_request_review toolset). What dedicated profiles add is a persistent, named identity per role instead of everyone sharing default. Setting this up means a full separate Hermes home directory per role, which is out of scope for a quick team assembly; consider it only if Hermes teams are run often enough to justify it.

Anti-Patterns to Prevent

  • Do not spawn the full team for tiny changes.
  • Do not spawn Copilot/Tester onto an empty tree — implement first, review/test second.
  • Do not let two roles write the same files, and do not run two same-file [implement] cards concurrently.
  • Do not assign a kanban card to a role name that isn't an actual Hermes profile — it will silently never spawn a worker.
  • Do not trust a child's self-reported test results without re-running the suite yourself.
  • Do not tell the user a card (or its underlying work) is done without checking the actual delegate_task result — the board itself won't reflect it, except for a Path B card the dispatcher itself actually launched (any assignee, default included).
  • Do not assume a delegate_task child, or the Surgeon session, can mark a kanban card done/blocked or comment on it — those tools are dispatcher-gated; only a dedicated profile-based worker gets them.

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.