fix: strip skills: from agent frontmatter for Gemini compatibility (#1045)

* fix: remove dangling skills: from agent frontmatter and strip in Gemini converter (closes #1023, closes #953, closes #930)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: invert skills frontmatter test to assert absence (fixes CI)

The PR deliberately removed skills: from agent frontmatter (breaks
Gemini CLI), but the test still asserted its presence. Inverted the
assertion to ensure skills: stays removed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
TÂCHES
2026-03-14 21:25:02 -06:00
committed by GitHub
parent 278414a0a7
commit 1d3d1f3f5e
13 changed files with 5 additions and 41 deletions

View File

@@ -3,8 +3,6 @@ name: gsd-codebase-mapper
description: Explores codebase and writes structured analysis documents. Spawned by map-codebase with a focus area (tech, arch, quality, concerns). Writes documents directly to reduce orchestrator context load.
tools: Read, Bash, Grep, Glob, Write
color: cyan
skills:
- gsd-mapper-workflow
# hooks:
# PostToolUse:
# - matcher: "Write|Edit"

View File

@@ -3,8 +3,6 @@ name: gsd-debugger
description: Investigates bugs using scientific method, manages debug sessions, handles checkpoints. Spawned by /gsd:debug orchestrator.
tools: Read, Write, Edit, Bash, Grep, Glob, WebSearch
color: orange
skills:
- gsd-debugger-workflow
# hooks:
# PostToolUse:
# - matcher: "Write|Edit"

View File

@@ -3,8 +3,6 @@ name: gsd-executor
description: Executes GSD plans with atomic commits, deviation handling, checkpoint protocols, and state management. Spawned by execute-phase orchestrator or execute-plan command.
tools: Read, Write, Edit, Bash, Grep, Glob
color: yellow
skills:
- gsd-executor-workflow
# hooks:
# PostToolUse:
# - matcher: "Write|Edit"

View File

@@ -3,8 +3,6 @@ name: gsd-integration-checker
description: Verifies cross-phase integration and E2E flows. Checks that phases connect properly and user workflows complete end-to-end.
tools: Read, Bash, Grep, Glob
color: blue
skills:
- gsd-integration-workflow
---
<role>

View File

@@ -9,8 +9,6 @@ tools:
- Glob
- Grep
color: "#8B5CF6"
skills:
- gsd-nyquist-auditor-workflow
---
<role>

View File

@@ -3,8 +3,6 @@ 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.
tools: Read, Write, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*
color: cyan
skills:
- gsd-researcher-workflow
# hooks:
# PostToolUse:
# - matcher: "Write|Edit"

View File

@@ -3,8 +3,6 @@ name: gsd-plan-checker
description: Verifies plans will achieve phase goal before execution. Goal-backward analysis of plan quality. Spawned by /gsd:plan-phase orchestrator.
tools: Read, Bash, Glob, Grep
color: green
skills:
- gsd-plan-checker-workflow
---
<role>

View File

@@ -3,8 +3,6 @@ name: gsd-planner
description: Creates executable phase plans with task breakdown, dependency analysis, and goal-backward verification. Spawned by /gsd:plan-phase orchestrator.
tools: Read, Write, Bash, Glob, Grep, WebFetch, mcp__context7__*
color: green
skills:
- gsd-planner-workflow
# hooks:
# PostToolUse:
# - matcher: "Write|Edit"

View File

@@ -3,8 +3,6 @@ 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.
tools: Read, Write, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*
color: cyan
skills:
- gsd-researcher-workflow
# hooks:
# PostToolUse:
# - matcher: "Write|Edit"

View File

@@ -3,8 +3,6 @@ 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.
tools: Read, Write, Bash
color: purple
skills:
- gsd-synthesizer-workflow
# hooks:
# PostToolUse:
# - matcher: "Write|Edit"

View File

@@ -3,8 +3,6 @@ name: gsd-roadmapper
description: Creates project roadmaps with phase breakdown, requirement mapping, success criteria derivation, and coverage validation. Spawned by /gsd:new-project orchestrator.
tools: Read, Write, Bash, Glob, Grep
color: purple
skills:
- gsd-roadmapper-workflow
# hooks:
# PostToolUse:
# - matcher: "Write|Edit"

View File

@@ -3,8 +3,6 @@ name: gsd-verifier
description: Verifies phase goal achievement through goal-backward analysis. Checks codebase delivers what phase promised, not just that tasks completed. Creates VERIFICATION.md report.
tools: Read, Write, Bash, Grep, Glob
color: green
skills:
- gsd-verifier-workflow
# hooks:
# PostToolUse:
# - matcher: "Write|Edit"

View File

@@ -3,7 +3,7 @@
*
* Validates that all agent .md files have correct frontmatter fields:
* - Anti-heredoc instruction present in file-writing agents
* - skills: field in all agents
* - skills: field absent from all agents (breaks Gemini CLI)
* - Commented hooks: pattern in file-writing agents
* - Spawn type consistency across workflows
*/
@@ -62,29 +62,17 @@ describe('HDOC: anti-heredoc instruction', () => {
// ─── Skills Frontmatter ──────────────────────────────────────────────────────
describe('SKILL: skills frontmatter', () => {
describe('SKILL: skills frontmatter absent', () => {
for (const agent of ALL_AGENTS) {
test(`${agent} has skills: in frontmatter`, () => {
test(`${agent} does not have skills: in frontmatter`, () => {
const content = fs.readFileSync(path.join(AGENTS_DIR, agent + '.md'), 'utf-8');
const frontmatter = content.split('---')[1] || '';
assert.ok(
frontmatter.includes('skills:'),
`${agent} missing skills: in frontmatter`
!frontmatter.includes('skills:'),
`${agent} has skills: in frontmatter — skills: breaks Gemini CLI and must be removed`
);
});
}
test('skill references follow naming convention', () => {
for (const agent of ALL_AGENTS) {
const content = fs.readFileSync(path.join(AGENTS_DIR, agent + '.md'), 'utf-8');
const frontmatter = content.split('---')[1] || '';
const skillLines = frontmatter.split('\n').filter(l => l.trim().startsWith('- gsd-'));
for (const line of skillLines) {
const skillName = line.trim().replace('- ', '');
assert.match(skillName, /^gsd-[\w-]+-workflow$/, `Invalid skill name: ${skillName}`);
}
}
});
});
// ─── Hooks Frontmatter ───────────────────────────────────────────────────────