Skip to content

Team Recipes

A team recipe is a Markdown file with YAML frontmatter that declares who is on the team, what safety floor it runs under, and when to use it. Recipes live in your mission repo under orchestrator/teams/<slug>/team.md and are loaded automatically when bnerd discovers the mission repo.

Recipe format

---
name: pr-review
description: Run a multi-role review of a pull request.
lead: product-orchestrator
roles: [product-orchestrator, code-reviewer, security-reviewer]
size: 3
mode: in-process
plan_approval: false
workspace: cloud/app
repos: [cloud/app/hq]
when_to_use: >
  Reviewing a pull request that touches the API, the CLI, or both.
  Use instead of a single-AI review when you want distinct code and security lenses.
---

# PR Review Team

…markdown body describing the team's working contract…

Frontmatter fields

Field Required Description
name yes Human-readable display name
description yes One-line summary shown in bnerd team list
lead yes Slug of the role that acts as the workflow coordinator (not a special runtime privilege — it is just the role whose system prompt is wired for coordination)
roles yes All roles the team may ever use (always-on and on-demand)
size no Expected always-on headcount including the lead (informational)
mode no Currently always in-process
plan_approval no When true, every teammate that has permissionMode: plan in its role file enters plan-mode on spawn and must have its plan approved by the team-lead before executing
workspace no Relative path to the working directory (resolved against the mission repo root)
repos no List of repo paths the team operates on (informational; used by the TUI to set context)
when_to_use no Guidance shown in bnerd team describe to help you pick the right recipe

The Markdown body after the frontmatter is the team's working contract: norms, safety guardrails, role summaries, and any fixed workflow steps. The Coordinator injects it into the team-lead's system prompt at spawn.

Role files

Each role slug referenced in a recipe must have a matching file at orchestrator/roles/<slug>.md. The role file's frontmatter drives the teammate's spawn configuration:

---
name: code-reviewer
description: Correctness pass on diffs.
tools: [Read, Grep, Glob, Bash, Skill, SendMessage, TaskCreate, TaskList, TaskUpdate, TaskGet]
model: sonnet
---

Role frontmatter fields

Field Description
name Display name (shown in the roster and event stream)
description One-line summary
tools Claude Code tool names the role may use (translated to bnerd tool names at spawn; unknown names are dropped with a warning)
disallowedTools Tool names explicitly blocked (applied after the tools allowlist)
model opus, sonnet, haiku, or inherit (inherits the lead's model)
skills List of skill slugs preloaded into the teammate's system prompt
permissionMode "plan" to start the teammate in plan-mode (must have its plan approved before executing); omit for normal mode
color Display colour in the roster

Fields mcpServers and hooks are read but ignored in phase 1 (logged as warnings).

Built-in team recipes

The mission repo ships these recipes out of the box:

cli

Deep-dive CLI work: Cobra commands, the Bubbletea TUI, AI chat and MCP surfaces, and Go internals. Lead: product-orchestrator. Roles: go-cli-dev, ux-designer, app-qa, security-reviewer, code-reviewer (on-demand), docs-engineer (on-demand).

Use when: a CLI-internal effort that does not pivot on the cross-surface API contract.

cloud-app

Full cross-surface product team: API, dashboard, CLI, Terraform provider, and docs. Lead: product-orchestrator. One developer per surface, plus QA, security review, code review, and observability as on-demand specialists.

Use when: a feature or change that spans hq / dashboard / CLI / provider.

pr-review

Focused PR review with a code-reviewer and a security-reviewer working concurrently against the same commit. Both roles satisfy their respective gates (code-review, security-review) at the same commit SHA; tip-alignment is checked before the task is marked complete.

incident-response

Read-only triage. An ops-investigator gathers logs, metrics, k8s events, and OpenProject context; a security-reviewer checks for security implications. Safe to run with --auto-approve=safe.

Schema loading and precedence

bnerd loads recipes and roles from three locations in this order (first match wins; conflicts log a warning naming both sources):

  1. Mission repo (<missionRepo>/orchestrator/{roles,teams}/) — canonical source
  2. Global fallback (~/.bnerd/{agents,teams}/) — your personal defaults
  3. Project-local additive (<workDir>/.bnerd/{agents,teams}/) — repo-specific additions only; cannot override mission or global definitions

The additive model means a project can add a new role without touching the mission repo. It cannot silently shadow an existing one — bnerd warns and the mission-repo definition wins.