From 36eed057ec047f8e0c50cdecadf61946997868f4 Mon Sep 17 00:00:00 2001 From: Gary Burns <37640177+gaburn@users.noreply.github.com> Date: Fri, 1 May 2026 16:18:41 -0700 Subject: [PATCH] fix: replace hardcoded Brady in template examples with generic placeholders Closes #977 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .changeset/fix-brady-bug.md | 6 ++++++ .copilot/skills/init-mode/SKILL.md | 6 +++--- .github/agents/squad.agent.md | 8 ++++---- .squad-templates/squad.agent.md | 8 ++++---- .squad/agents/eecom/history.md | 10 ++++++++++ packages/squad-cli/templates/skills/init-mode/SKILL.md | 6 +++--- packages/squad-cli/templates/squad.agent.md.template | 8 ++++---- packages/squad-sdk/templates/skills/init-mode/SKILL.md | 6 +++--- packages/squad-sdk/templates/squad.agent.md.template | 8 ++++---- templates/squad.agent.md.template | 8 ++++---- 10 files changed, 45 insertions(+), 29 deletions(-) create mode 100644 .changeset/fix-brady-bug.md diff --git a/.changeset/fix-brady-bug.md b/.changeset/fix-brady-bug.md new file mode 100644 index 000000000..edd91bb0e --- /dev/null +++ b/.changeset/fix-brady-bug.md @@ -0,0 +1,6 @@ +--- +'@bradygaster/squad-cli': patch +'@bradygaster/squad-sdk': patch +--- + +Fix hardcoded "Brady" in template files — LLMs now use actual git username instead of example name (closes #977) diff --git a/.copilot/skills/init-mode/SKILL.md b/.copilot/skills/init-mode/SKILL.md index 4dce6628c..430c6ae15 100644 --- a/.copilot/skills/init-mode/SKILL.md +++ b/.copilot/skills/init-mode/SKILL.md @@ -20,7 +20,7 @@ Init Mode activates when `.squad/team.md` does not exist, or exists but has zero No team exists yet. Propose one — but **DO NOT create any files until the user confirms.** -1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey Brady, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** +1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey {user}, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** 2. Ask: *"What are you building? (language, stack, what it does)"* 3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section): - Determine team size (typically 4–5 + Scribe). @@ -82,8 +82,8 @@ The `union` merge driver keeps all lines from both sides, which is correct for a **Example flow:** 1. Coordinator detects no team.md → Init Mode -2. Runs `git config user.name` → "Brady" -3. Asks: *"Hey Brady, what are you building?"* +2. Runs `git config user.name` → "{user}" +3. Asks: *"Hey {user}, what are you building?"* 4. User: *"TypeScript CLI tool with GitHub API integration"* 5. Coordinator runs casting algorithm → selects "The Usual Suspects" universe 6. Proposes: Keaton (Lead), Verbal (Prompt), Fenster (Backend), Hockney (Tester), Scribe, Ralph diff --git a/.github/agents/squad.agent.md b/.github/agents/squad.agent.md index 01e18dfad..221be47b7 100644 --- a/.github/agents/squad.agent.md +++ b/.github/agents/squad.agent.md @@ -32,7 +32,7 @@ Check: Does `.squad/team.md` exist? (fall back to `.ai-team/team.md` for repos m No team exists yet. Propose one — but **DO NOT create any files until the user confirms.** -1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey Brady, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** +1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey {user}, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** 2. Ask: *"What are you building? (language, stack, what it does)"* 3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section): - Determine team size (typically 4–5 + Scribe). @@ -242,12 +242,12 @@ The routing table determines **WHO** handles work. After routing, use Response M | Names someone ("Ripley, fix the button") | Spawn that agent | | Personal agent by name (user addresses a personal agent) | Route to personal agent in consult mode — they advise, project agent executes changes | | "Team" or multi-domain question | Spawn 2-3+ relevant agents in parallel, synthesize | -| Human member management ("add Brady as PM", routes to human) | Follow Human Team Members (see that section) | +| Human member management ("add {name} as PM", routes to human) | Follow Human Team Members (see that section) | | Issue suitable for @copilot (when @copilot is on the roster) | Check capability profile in team.md, suggest routing to @copilot if it's a good fit | | Ceremony request ("design meeting", "run a retro") | Run the matching ceremony from `ceremonies.md` (see Ceremonies) | | Issues/backlog request ("pull issues", "show backlog", "work on #N") | Follow GitHub Issues Mode (see that section) | | PRD intake ("here's the PRD", "read the PRD at X", pastes spec) | Follow PRD Mode (see that section) | -| Human member management ("add Brady as PM", routes to human) | Follow Human Team Members (see that section) | +| Human member management ("add {name} as PM", routes to human) | Follow Human Team Members (see that section) | | Ralph commands ("Ralph, go", "keep working", "Ralph, status", "Ralph, idle") | Follow Ralph — Work Monitor (see that section) | | General work request | Check routing.md, spawn best match + any anticipatory agents | | Quick factual question | Answer directly (no spawn) | @@ -292,7 +292,7 @@ After routing determines WHO handles work, select the response MODE based on tas | **Full** | Multi-agent work, complex tasks touching 3+ concerns, "Team" requests | Parallel fan-out, full ceremony, Scribe included | ~40-60s | **Direct Mode exemplars** (coordinator answers instantly, no spawn): -- "Where are we?" → Summarize current state from context: branch, recent work, what the team's been doing. Brady's favorite — make it instant. +- "Where are we?" → Summarize current state from context: branch, recent work, what the team's been doing. A user favorite — make it instant. - "How many tests do we have?" → Run a quick command, answer directly. - "What branch are we on?" → `git branch --show-current`, answer directly. - "Who's on the team?" → Answer from team.md already in context. diff --git a/.squad-templates/squad.agent.md b/.squad-templates/squad.agent.md index 01e18dfad..221be47b7 100644 --- a/.squad-templates/squad.agent.md +++ b/.squad-templates/squad.agent.md @@ -32,7 +32,7 @@ Check: Does `.squad/team.md` exist? (fall back to `.ai-team/team.md` for repos m No team exists yet. Propose one — but **DO NOT create any files until the user confirms.** -1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey Brady, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** +1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey {user}, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** 2. Ask: *"What are you building? (language, stack, what it does)"* 3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section): - Determine team size (typically 4–5 + Scribe). @@ -242,12 +242,12 @@ The routing table determines **WHO** handles work. After routing, use Response M | Names someone ("Ripley, fix the button") | Spawn that agent | | Personal agent by name (user addresses a personal agent) | Route to personal agent in consult mode — they advise, project agent executes changes | | "Team" or multi-domain question | Spawn 2-3+ relevant agents in parallel, synthesize | -| Human member management ("add Brady as PM", routes to human) | Follow Human Team Members (see that section) | +| Human member management ("add {name} as PM", routes to human) | Follow Human Team Members (see that section) | | Issue suitable for @copilot (when @copilot is on the roster) | Check capability profile in team.md, suggest routing to @copilot if it's a good fit | | Ceremony request ("design meeting", "run a retro") | Run the matching ceremony from `ceremonies.md` (see Ceremonies) | | Issues/backlog request ("pull issues", "show backlog", "work on #N") | Follow GitHub Issues Mode (see that section) | | PRD intake ("here's the PRD", "read the PRD at X", pastes spec) | Follow PRD Mode (see that section) | -| Human member management ("add Brady as PM", routes to human) | Follow Human Team Members (see that section) | +| Human member management ("add {name} as PM", routes to human) | Follow Human Team Members (see that section) | | Ralph commands ("Ralph, go", "keep working", "Ralph, status", "Ralph, idle") | Follow Ralph — Work Monitor (see that section) | | General work request | Check routing.md, spawn best match + any anticipatory agents | | Quick factual question | Answer directly (no spawn) | @@ -292,7 +292,7 @@ After routing determines WHO handles work, select the response MODE based on tas | **Full** | Multi-agent work, complex tasks touching 3+ concerns, "Team" requests | Parallel fan-out, full ceremony, Scribe included | ~40-60s | **Direct Mode exemplars** (coordinator answers instantly, no spawn): -- "Where are we?" → Summarize current state from context: branch, recent work, what the team's been doing. Brady's favorite — make it instant. +- "Where are we?" → Summarize current state from context: branch, recent work, what the team's been doing. A user favorite — make it instant. - "How many tests do we have?" → Run a quick command, answer directly. - "What branch are we on?" → `git branch --show-current`, answer directly. - "Who's on the team?" → Answer from team.md already in context. diff --git a/.squad/agents/eecom/history.md b/.squad/agents/eecom/history.md index cf00ea8ac..eeb76054c 100644 --- a/.squad/agents/eecom/history.md +++ b/.squad/agents/eecom/history.md @@ -4,6 +4,16 @@ ## Learnings +### Template Brady contamination fix (#977) (2026-05-01) + +**Context:** Template files (squad.agent.md, init-mode/SKILL.md) contained hardcoded "Brady" examples in greetings, routing examples, and comments. LLMs treated these as patterns, greeting every user as "Brady" regardless of their actual `git config user.name`. + +**Fix:** Replaced all hardcoded "Brady" in template examples with generic `{user}` / `{name}` placeholders. Canonical sources: `.squad-templates/squad.agent.md` and `.copilot/skills/init-mode/SKILL.md`. Template sync (`node scripts/sync-templates.mjs`) propagated squad.agent.md to `.github/agents/` but did NOT sync init-mode SKILL.md to package templates — those required manual edits in both `packages/squad-cli/templates/skills/init-mode/SKILL.md` and `packages/squad-sdk/templates/skills/init-mode/SKILL.md`. + +**Key distinction:** Only template files that get copied to user repos were changed. Brady references in project docs (history-hygiene, release-process, humanizer, architectural-proposals, reskill) are legitimate content about the project founder and were left unchanged. + +**Pattern:** When fixing template contamination, verify which files are covered by `sync-templates.mjs` and which require manual propagation. The init-mode SKILL.md lives in `.copilot/skills/` (not `.squad-templates/`), so sync doesn't touch its package copies. + ### PR #942 rebase — cherry-pick from insider-based fork branch (2026-04-12) **Context:** PR #942 from tamirdresher's fork was retargeted from `insider` to `dev`, causing 29 files in the diff when only 3 commits (4 files relevant to dev) were the actual fix. Cherry-picked the 3 fix commits onto a clean `squad/942-rebase-type-safety` branch from dev, resolving conflicts where insider-only files (skill.ts, cross-package-exports.test.ts) didn't exist on dev. Dropped the `escapeYamlValue` import and APM YAML generation function from init.ts since skill.ts doesn't exist on dev. Opened #963 as the clean replacement, closed #942. diff --git a/packages/squad-cli/templates/skills/init-mode/SKILL.md b/packages/squad-cli/templates/skills/init-mode/SKILL.md index 4dce6628c..430c6ae15 100644 --- a/packages/squad-cli/templates/skills/init-mode/SKILL.md +++ b/packages/squad-cli/templates/skills/init-mode/SKILL.md @@ -20,7 +20,7 @@ Init Mode activates when `.squad/team.md` does not exist, or exists but has zero No team exists yet. Propose one — but **DO NOT create any files until the user confirms.** -1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey Brady, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** +1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey {user}, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** 2. Ask: *"What are you building? (language, stack, what it does)"* 3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section): - Determine team size (typically 4–5 + Scribe). @@ -82,8 +82,8 @@ The `union` merge driver keeps all lines from both sides, which is correct for a **Example flow:** 1. Coordinator detects no team.md → Init Mode -2. Runs `git config user.name` → "Brady" -3. Asks: *"Hey Brady, what are you building?"* +2. Runs `git config user.name` → "{user}" +3. Asks: *"Hey {user}, what are you building?"* 4. User: *"TypeScript CLI tool with GitHub API integration"* 5. Coordinator runs casting algorithm → selects "The Usual Suspects" universe 6. Proposes: Keaton (Lead), Verbal (Prompt), Fenster (Backend), Hockney (Tester), Scribe, Ralph diff --git a/packages/squad-cli/templates/squad.agent.md.template b/packages/squad-cli/templates/squad.agent.md.template index 01e18dfad..221be47b7 100644 --- a/packages/squad-cli/templates/squad.agent.md.template +++ b/packages/squad-cli/templates/squad.agent.md.template @@ -32,7 +32,7 @@ Check: Does `.squad/team.md` exist? (fall back to `.ai-team/team.md` for repos m No team exists yet. Propose one — but **DO NOT create any files until the user confirms.** -1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey Brady, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** +1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey {user}, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** 2. Ask: *"What are you building? (language, stack, what it does)"* 3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section): - Determine team size (typically 4–5 + Scribe). @@ -242,12 +242,12 @@ The routing table determines **WHO** handles work. After routing, use Response M | Names someone ("Ripley, fix the button") | Spawn that agent | | Personal agent by name (user addresses a personal agent) | Route to personal agent in consult mode — they advise, project agent executes changes | | "Team" or multi-domain question | Spawn 2-3+ relevant agents in parallel, synthesize | -| Human member management ("add Brady as PM", routes to human) | Follow Human Team Members (see that section) | +| Human member management ("add {name} as PM", routes to human) | Follow Human Team Members (see that section) | | Issue suitable for @copilot (when @copilot is on the roster) | Check capability profile in team.md, suggest routing to @copilot if it's a good fit | | Ceremony request ("design meeting", "run a retro") | Run the matching ceremony from `ceremonies.md` (see Ceremonies) | | Issues/backlog request ("pull issues", "show backlog", "work on #N") | Follow GitHub Issues Mode (see that section) | | PRD intake ("here's the PRD", "read the PRD at X", pastes spec) | Follow PRD Mode (see that section) | -| Human member management ("add Brady as PM", routes to human) | Follow Human Team Members (see that section) | +| Human member management ("add {name} as PM", routes to human) | Follow Human Team Members (see that section) | | Ralph commands ("Ralph, go", "keep working", "Ralph, status", "Ralph, idle") | Follow Ralph — Work Monitor (see that section) | | General work request | Check routing.md, spawn best match + any anticipatory agents | | Quick factual question | Answer directly (no spawn) | @@ -292,7 +292,7 @@ After routing determines WHO handles work, select the response MODE based on tas | **Full** | Multi-agent work, complex tasks touching 3+ concerns, "Team" requests | Parallel fan-out, full ceremony, Scribe included | ~40-60s | **Direct Mode exemplars** (coordinator answers instantly, no spawn): -- "Where are we?" → Summarize current state from context: branch, recent work, what the team's been doing. Brady's favorite — make it instant. +- "Where are we?" → Summarize current state from context: branch, recent work, what the team's been doing. A user favorite — make it instant. - "How many tests do we have?" → Run a quick command, answer directly. - "What branch are we on?" → `git branch --show-current`, answer directly. - "Who's on the team?" → Answer from team.md already in context. diff --git a/packages/squad-sdk/templates/skills/init-mode/SKILL.md b/packages/squad-sdk/templates/skills/init-mode/SKILL.md index 4dce6628c..430c6ae15 100644 --- a/packages/squad-sdk/templates/skills/init-mode/SKILL.md +++ b/packages/squad-sdk/templates/skills/init-mode/SKILL.md @@ -20,7 +20,7 @@ Init Mode activates when `.squad/team.md` does not exist, or exists but has zero No team exists yet. Propose one — but **DO NOT create any files until the user confirms.** -1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey Brady, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** +1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey {user}, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** 2. Ask: *"What are you building? (language, stack, what it does)"* 3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section): - Determine team size (typically 4–5 + Scribe). @@ -82,8 +82,8 @@ The `union` merge driver keeps all lines from both sides, which is correct for a **Example flow:** 1. Coordinator detects no team.md → Init Mode -2. Runs `git config user.name` → "Brady" -3. Asks: *"Hey Brady, what are you building?"* +2. Runs `git config user.name` → "{user}" +3. Asks: *"Hey {user}, what are you building?"* 4. User: *"TypeScript CLI tool with GitHub API integration"* 5. Coordinator runs casting algorithm → selects "The Usual Suspects" universe 6. Proposes: Keaton (Lead), Verbal (Prompt), Fenster (Backend), Hockney (Tester), Scribe, Ralph diff --git a/packages/squad-sdk/templates/squad.agent.md.template b/packages/squad-sdk/templates/squad.agent.md.template index 01e18dfad..221be47b7 100644 --- a/packages/squad-sdk/templates/squad.agent.md.template +++ b/packages/squad-sdk/templates/squad.agent.md.template @@ -32,7 +32,7 @@ Check: Does `.squad/team.md` exist? (fall back to `.ai-team/team.md` for repos m No team exists yet. Propose one — but **DO NOT create any files until the user confirms.** -1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey Brady, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** +1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey {user}, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** 2. Ask: *"What are you building? (language, stack, what it does)"* 3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section): - Determine team size (typically 4–5 + Scribe). @@ -242,12 +242,12 @@ The routing table determines **WHO** handles work. After routing, use Response M | Names someone ("Ripley, fix the button") | Spawn that agent | | Personal agent by name (user addresses a personal agent) | Route to personal agent in consult mode — they advise, project agent executes changes | | "Team" or multi-domain question | Spawn 2-3+ relevant agents in parallel, synthesize | -| Human member management ("add Brady as PM", routes to human) | Follow Human Team Members (see that section) | +| Human member management ("add {name} as PM", routes to human) | Follow Human Team Members (see that section) | | Issue suitable for @copilot (when @copilot is on the roster) | Check capability profile in team.md, suggest routing to @copilot if it's a good fit | | Ceremony request ("design meeting", "run a retro") | Run the matching ceremony from `ceremonies.md` (see Ceremonies) | | Issues/backlog request ("pull issues", "show backlog", "work on #N") | Follow GitHub Issues Mode (see that section) | | PRD intake ("here's the PRD", "read the PRD at X", pastes spec) | Follow PRD Mode (see that section) | -| Human member management ("add Brady as PM", routes to human) | Follow Human Team Members (see that section) | +| Human member management ("add {name} as PM", routes to human) | Follow Human Team Members (see that section) | | Ralph commands ("Ralph, go", "keep working", "Ralph, status", "Ralph, idle") | Follow Ralph — Work Monitor (see that section) | | General work request | Check routing.md, spawn best match + any anticipatory agents | | Quick factual question | Answer directly (no spawn) | @@ -292,7 +292,7 @@ After routing determines WHO handles work, select the response MODE based on tas | **Full** | Multi-agent work, complex tasks touching 3+ concerns, "Team" requests | Parallel fan-out, full ceremony, Scribe included | ~40-60s | **Direct Mode exemplars** (coordinator answers instantly, no spawn): -- "Where are we?" → Summarize current state from context: branch, recent work, what the team's been doing. Brady's favorite — make it instant. +- "Where are we?" → Summarize current state from context: branch, recent work, what the team's been doing. A user favorite — make it instant. - "How many tests do we have?" → Run a quick command, answer directly. - "What branch are we on?" → `git branch --show-current`, answer directly. - "Who's on the team?" → Answer from team.md already in context. diff --git a/templates/squad.agent.md.template b/templates/squad.agent.md.template index 01e18dfad..221be47b7 100644 --- a/templates/squad.agent.md.template +++ b/templates/squad.agent.md.template @@ -32,7 +32,7 @@ Check: Does `.squad/team.md` exist? (fall back to `.ai-team/team.md` for repos m No team exists yet. Propose one — but **DO NOT create any files until the user confirms.** -1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey Brady, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** +1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey {user}, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.** 2. Ask: *"What are you building? (language, stack, what it does)"* 3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section): - Determine team size (typically 4–5 + Scribe). @@ -242,12 +242,12 @@ The routing table determines **WHO** handles work. After routing, use Response M | Names someone ("Ripley, fix the button") | Spawn that agent | | Personal agent by name (user addresses a personal agent) | Route to personal agent in consult mode — they advise, project agent executes changes | | "Team" or multi-domain question | Spawn 2-3+ relevant agents in parallel, synthesize | -| Human member management ("add Brady as PM", routes to human) | Follow Human Team Members (see that section) | +| Human member management ("add {name} as PM", routes to human) | Follow Human Team Members (see that section) | | Issue suitable for @copilot (when @copilot is on the roster) | Check capability profile in team.md, suggest routing to @copilot if it's a good fit | | Ceremony request ("design meeting", "run a retro") | Run the matching ceremony from `ceremonies.md` (see Ceremonies) | | Issues/backlog request ("pull issues", "show backlog", "work on #N") | Follow GitHub Issues Mode (see that section) | | PRD intake ("here's the PRD", "read the PRD at X", pastes spec) | Follow PRD Mode (see that section) | -| Human member management ("add Brady as PM", routes to human) | Follow Human Team Members (see that section) | +| Human member management ("add {name} as PM", routes to human) | Follow Human Team Members (see that section) | | Ralph commands ("Ralph, go", "keep working", "Ralph, status", "Ralph, idle") | Follow Ralph — Work Monitor (see that section) | | General work request | Check routing.md, spawn best match + any anticipatory agents | | Quick factual question | Answer directly (no spawn) | @@ -292,7 +292,7 @@ After routing determines WHO handles work, select the response MODE based on tas | **Full** | Multi-agent work, complex tasks touching 3+ concerns, "Team" requests | Parallel fan-out, full ceremony, Scribe included | ~40-60s | **Direct Mode exemplars** (coordinator answers instantly, no spawn): -- "Where are we?" → Summarize current state from context: branch, recent work, what the team's been doing. Brady's favorite — make it instant. +- "Where are we?" → Summarize current state from context: branch, recent work, what the team's been doing. A user favorite — make it instant. - "How many tests do we have?" → Run a quick command, answer directly. - "What branch are we on?" → `git branch --show-current`, answer directly. - "Who's on the team?" → Answer from team.md already in context.