Ai Assistants
Feature: AI Assistant Configuration Files
As a software engineer
I want AI assistant configuration files generated for the tools I use
So that each assistant is pre-configured with project-specific coding guidelines
Background:
Given a project for any language or artifact type is to be generated
Scenario: Claude Code files are always generated
When the project is initialized without the --assistant flag
Then the following files are generated:
| File |
| CLAUDE.md |
| .claude/ |
# ---------------------------------------------------------------------------
# Process-discipline SessionStart hook — reminds the assistant to check
# .claude/skills/ before acting; settings.json.tmpl wires it via `bash <path>`
# since generated files are always written 0644 (no executable bit to rely on).
# ---------------------------------------------------------------------------
Scenario: SessionStart hook is generated and wired into settings.json
When the project is initialized without the --assistant flag
Then the following files are generated:
| File |
| .claude/hooks/session-start.sh |
And the file ".claude/settings.json" contains "SessionStart"
Scenario Outline: Each AI assistant generates its own configuration file
When the project is initialized with "--assistant <assistant>"
Then the file "<file>" is generated
And the following Claude Code files are generated in any case:
| File |
| CLAUDE.md |
| .claude/ |
Examples:
| assistant | file |
| copilot | .github/copilot-instructions.md |
| cursor | .cursor/rules/guidelines.md |
| duo | .gitlab/duo_instructions.md |
Scenario: Multiple AI assistants generate all their configuration files
When the project is initialized with "--assistant copilot --assistant cursor --assistant duo"
Then the following files are generated:
| File |
| .github/copilot-instructions.md |
| .cursor/rules/guidelines.md |
| .gitlab/duo_instructions.md |
| CLAUDE.md |
| .claude/ |
Scenario: An unrecognized assistant value is rejected
When the project is initialized with "--assistant unknown"
Then initialization fails with an error indicating the valid values
# ---------------------------------------------------------------------------
# Per-guideline scoped rule files (ADR-008) — Copilot and Cursor each get one
# native rule file per applicable guideline, extracted from that guideline's
# "## Directives" section, in addition to Claude Code's own .claude/rules/ copy.
# ---------------------------------------------------------------------------
Scenario: Copilot generates one scoped instructions file per applicable guideline
When the project is initialized with "--assistant copilot"
Then the following files are generated:
| File |
| .github/instructions/general_coding.instructions.md |
| .github/instructions/error_handling.instructions.md |
| .github/instructions/testing.instructions.md |
Scenario: Cursor generates one scoped rule file per applicable guideline
When the project is initialized with "--assistant cursor"
Then the following files are generated:
| File |
| .cursor/rules/general_coding.mdc |
| .cursor/rules/error_handling.mdc |
| .cursor/rules/testing.mdc |
# ---------------------------------------------------------------------------
# Copilot prompt translation (ADR-008) — every applicable Claude Code command
# and skill is translated into a .github/prompts/*.prompt.md file.
# ---------------------------------------------------------------------------
Scenario: Copilot translates Claude Code commands and skills into prompt files
When the project is initialized with "--assistant copilot"
Then the following files are generated:
| File |
| .github/prompts/new-domain-object.prompt.md |
| .github/prompts/commit.prompt.md |
| .github/prompts/update-versions.prompt.md |
| .github/prompts/test-coverage.prompt.md |
| .github/prompts/arch-check.prompt.md |
| .github/prompts/adr.prompt.md |
| .github/prompts/review.prompt.md |
| .github/prompts/security-review.prompt.md |
| .github/prompts/tdd.prompt.md |
| .github/prompts/systematic-debugging.prompt.md |
| .github/prompts/verification-before-completion.prompt.md |
Scenario: Copilot generates chat modes approximating the code-reviewer and security-auditor Claude agents
When the project is initialized with "--assistant copilot"
Then the following files are generated:
| File |
| .github/chatmodes/code-reviewer.chatmode.md |
| .github/chatmodes/security-auditor.chatmode.md |
# ---------------------------------------------------------------------------
# Cursor command translation (ADR-008) — every applicable Claude Code command
# and skill is translated into a .cursor/commands/*.md file. Cursor has no
# confirmed subagent equivalent, so it gets no chat-mode-style file.
# ---------------------------------------------------------------------------
Scenario: Cursor translates Claude Code commands and skills into command files
When the project is initialized with "--assistant cursor"
Then the following files are generated:
| File |
| .cursor/commands/new-domain-object.md |
| .cursor/commands/commit.md |
| .cursor/commands/update-versions.md |
| .cursor/commands/test-coverage.md |
| .cursor/commands/arch-check.md |
| .cursor/commands/adr.md |
| .cursor/commands/review.md |
| .cursor/commands/security-review.md |
| .cursor/commands/tdd.md |
| .cursor/commands/systematic-debugging.md |
| .cursor/commands/verification-before-completion.md |
# ---------------------------------------------------------------------------
# review/security-review are degraded, never omitted (ADR-008): both Copilot
# prompts and Cursor commands for these two skills still get generated, since
# neither tool has a confirmed subagent-isolation equivalent to fall back on
# silently dropping them would remove the two highest-value skills instead.
# ---------------------------------------------------------------------------
Scenario Outline: Degraded skills are still generated for assistants without subagent isolation
When the project is initialized with "--assistant <assistant>"
Then the file "<file>" is generated
Examples:
| assistant | file |
| copilot | .github/prompts/review.prompt.md |
| copilot | .github/prompts/security-review.prompt.md |
| cursor | .cursor/commands/review.md |
| cursor | .cursor/commands/security-review.md |
# ---------------------------------------------------------------------------
# MCP config duplication (undocumented in ADR-008 beyond the always-on root
# .mcp.json) — Copilot and Cursor each get their own copy of the MCP config in
# the directory their tooling actually reads it from.
# ---------------------------------------------------------------------------
Scenario Outline: Assistant-specific MCP config is duplicated alongside the always-on root config
When the project is initialized with "--assistant <assistant>"
Then the following files are generated:
| File |
| .mcp.json |
| <mcp_copy> |
Examples:
| assistant | mcp_copy |
| copilot | .vscode/mcp.json |
| cursor | .cursor/mcp.json |
# ---------------------------------------------------------------------------
# Duo intentionally stays on the single condensed digest file only (ADR-008
# scopes the richer, per-guideline/prompt/chatmode treatment to Copilot and
# Cursor) — no .gitlab/instructions/*, no prompt or command translation.
# ---------------------------------------------------------------------------
Scenario: Duo does not receive per-guideline, prompt, or command files
When the project is initialized with "--assistant duo"
Then the following files are generated:
| File |
| .gitlab/duo_instructions.md |