Files
msd-core/scripts/research-profiles.cjs
Tom Boucher 3aed02822d chore(#771): convert agent color: hex/magenta values to documented named colors (#823)
* chore(#771): convert agent color: hex/magenta values to documented named colors

Claude Code's sub-agent `color:` field documents only 8 named colors
(red, blue, green, yellow, purple, orange, pink, cyan). Twelve agent
files used hex values and two used the undocumented `magenta`; convert
each to the nearest documented named color so the intended per-agent
TUI color differentiation is spec-compliant.

- agents/*.md: 14 color values hex/magenta -> nearest named color
- scripts/research-profiles.cjs: update the 3 generated research-agent
  profiles (source of truth) so gen-research-agents stays in sync
- docs/AGENTS.md: update documented colors; add missing Color rows for
  gsd-nyquist-auditor, gsd-project-researcher, gsd-phase-researcher
- tests/agent-frontmatter.test.cjs: add regression guard asserting every
  agent color: is in the documented named-color set

Closes #771

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(#771): add changeset

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 18:50:50 -04:00

150 lines
5.8 KiB
JavaScript

#!/usr/bin/env node
'use strict';
/**
* research-profiles.cjs — hand-authored profile table for the 7 researcher agents.
*
* Each profile field is derived verbatim from the agent's current committed state so
* that the initial --check in gen-research-agents.cjs is green by construction.
*
* Fields:
* name — verbatim frontmatter `name:` value
* description — verbatim frontmatter `description:` value
* color — verbatim frontmatter `color:` value
* tools — verbatim frontmatter `tools:` value (single string, comma-separated)
* requiredIncludes — @~/.claude/gsd-core/references/<file>.md strings the body MUST contain
* requiredSeamCalls — `gsd-tools query <cmd>` strings the body MUST contain
* outputContract — strings the body MUST contain (output path, return marker, etc.)
*/
const PROFILES = [
{
name: 'gsd-project-researcher',
description:
'Researches domain ecosystem before roadmap creation. Produces files in .planning/research/ consumed during roadmap creation. Spawned by /gsd:new-project or /gsd:new-milestone orchestrators.',
color: 'cyan',
tools:
'Read, Write, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*, mcp__firecrawl__*, mcp__exa__*, mcp__tavily__*, mcp__ref__*, mcp__jina__*',
requiredIncludes: [
'@~/.claude/gsd-core/references/research-documentation-lookup.md',
'@~/.claude/gsd-core/references/research-philosophy.md',
'@~/.claude/gsd-core/references/research-verification-protocol.md',
],
requiredSeamCalls: [
'gsd-tools query research-plan',
'gsd-tools query research-store put',
'gsd-tools query classify-confidence',
],
outputContract: [
'.planning/research/',
'## RESEARCH COMPLETE',
],
},
{
name: 'gsd-phase-researcher',
description:
'Researches how to implement a phase before planning. Produces RESEARCH.md consumed by gsd-planner. Spawned by /gsd:plan-phase orchestrator.',
color: 'cyan',
tools:
'Read, Write, Edit, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*, mcp__firecrawl__*, mcp__exa__*, mcp__tavily__*, mcp__ref__*, mcp__jina__*',
requiredIncludes: [
'@~/.claude/gsd-core/references/research-documentation-lookup.md',
'@~/.claude/gsd-core/references/research-philosophy.md',
'@~/.claude/gsd-core/references/research-verification-protocol.md',
],
requiredSeamCalls: [
'gsd-tools query research-plan',
'gsd-tools query research-store put',
'gsd-tools query classify-confidence',
'gsd-tools query package-legitimacy check',
],
outputContract: [
'.planning/phases/XX-name/{phase_num}-RESEARCH.md',
'## RESEARCH COMPLETE',
],
},
{
name: 'gsd-advisor-researcher',
description:
'Researches a single gray area decision and returns a structured comparison table with rationale. Spawned by discuss-phase advisor mode.',
color: 'cyan',
tools: 'Read, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*',
requiredIncludes: [
'@~/.claude/gsd-core/references/research-documentation-lookup.md',
],
requiredSeamCalls: [],
outputContract: [
'| Option | Pros | Cons | Complexity | Recommendation |',
'**Rationale:**',
],
},
{
name: 'gsd-ai-researcher',
description:
'Researches a chosen AI framework\'s official docs to produce implementation-ready guidance — best practices, syntax, core patterns, and pitfalls distilled for the specific use case. Writes the Framework Quick Reference and Implementation Guidance sections of AI-SPEC.md. Spawned by /gsd:ai-integration-phase orchestrator.',
color: 'green',
tools:
'Read, Write, Edit, Bash, Grep, Glob, WebFetch, WebSearch, mcp__context7__*',
requiredIncludes: [
'@~/.claude/gsd-core/references/research-documentation-lookup.md',
],
requiredSeamCalls: [],
outputContract: [
'AI-SPEC.md',
'Section 3',
'Section 4',
],
},
{
name: 'gsd-domain-researcher',
description:
'Researches the business domain and real-world application context of the AI system being built. Surfaces domain expert evaluation criteria, industry-specific failure modes, regulatory context, and what "good" looks like for practitioners in this field — before the eval-planner turns it into measurable rubrics. Spawned by /gsd:ai-integration-phase orchestrator.',
color: 'purple',
tools:
'Read, Write, Edit, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*',
requiredIncludes: [
'@~/.claude/gsd-core/references/research-documentation-lookup.md',
],
requiredSeamCalls: [],
outputContract: [
'AI-SPEC.md',
'Section 1b',
],
},
{
name: 'gsd-ui-researcher',
description:
'Produces UI-SPEC.md design contract for frontend phases. Reads upstream artifacts, detects design system state, asks only unanswered questions. Spawned by /gsd:ui-phase orchestrator.',
color: 'purple',
tools:
'Read, Write, Edit, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*, mcp__firecrawl__*, mcp__exa__*, mcp__tavily__*, mcp__ref__*, mcp__jina__*',
requiredIncludes: [
'@~/.claude/gsd-core/references/research-documentation-lookup.md',
],
requiredSeamCalls: [
'gsd-tools query commit',
],
outputContract: [
'UI-SPEC.md',
'## UI-SPEC COMPLETE',
],
},
{
name: 'gsd-research-synthesizer',
description:
'Synthesizes research outputs from parallel researcher agents into SUMMARY.md. Spawned by /gsd:new-project after 4 researcher agents complete.',
color: 'purple',
tools: 'Read, Write, Bash',
requiredIncludes: [],
requiredSeamCalls: [
'gsd-tools query commit',
],
outputContract: [
'.planning/research/SUMMARY.md',
'## SYNTHESIS COMPLETE',
],
},
];
module.exports = { PROFILES };