Skip to content

Configuration

Gregor Biswanger edited this page Aug 3, 2026 · 1 revision

Configuration

FeatherSpec ships with almost no configuration on purpose. This page covers the few knobs that exist, and the two integrations (MCP, hooks) that ship as documentation so you can add them yourself.

DocLanguage

Lives in AGENTS.md, and only there:

DocLanguage: English # default; /sdd-setup may change this

It governs the language of your project documentation — the Memory Bank, your specs and plans, your README — not FeatherSpec's own wiring, which stays English. /sdd-setup sets it as its very first question; you can also edit the line directly.

Every command writes its output in DocLanguage, including the interviews and reports.

The architecture: snapshot

Also in AGENTS.md, also only there:

architecture:
  style: 'TBD'
  entrypoints:
    - 'TBD'
  modules: []
  shared: []
  boundaries:
    - 'TBD'

/sdd-setup fills it in for the first time; /sdd-architecture-update reconciles it with the real tree later. The assistant also runs a best-effort drift check at the start of any task that creates, moves or deletes files: obvious drift is fixed immediately, ambiguous drift is summarised and confirmed with you first.

Shared vs. local Claude settings

File Scope Committed
.claude/settings.json everyone who clones the repository yes
.claude/settings.local.json your machine, your user no — git-ignored
CLAUDE.local.md your machine, your user no — git-ignored

Claude Code writes settings.local.json when you grant a permission with "don't ask again", so it holds machine- and user-specific rules. Committing it would push your personal permission set onto the whole team. The shipped .gitignore excludes it, along with CLAUDE.local.md, the documented local-only memory variant (which VS Code also detects).

Put anything the team should share in .claude/settings.json and AGENTS.md.

Note that VS Code reads hooks from .claude/settings.local.json too — so a local hook affects both tools on your machine.

Auto memory is off on purpose

{
  "autoMemoryEnabled": false
}

Claude Code's auto memory is a machine-local, per-repository note store at ~/.claude/projects/<project>/memory/ — effectively a second, invisible Memory Bank. It is not in your repository, your teammates never see it, it is not reviewable in a pull request, and Copilot has no equivalent. This template keeps exactly one visible source of truth.

To re-enable it, set the key to true or remove it. Copilot ignores the setting entirely.

MCP

FeatherSpec ships no MCP servers. If you add some, each tool reads its own file — neither reads the other, and no setting relocates them:

Tool File Root key
Claude Code .mcp.json mcpServers
VS Code Copilot .vscode/mcp.json servers

The server definitions inside are otherwise identical, so maintaining both is a copy of the same object under a different key.

Hooks

FeatherSpec ships none, but a hooks block in .claude/settings.json is read by both tools. Three caveats if you add one:

  1. VS Code ignores matcher values. Hooks fire on every tool invocation, so any shared hook must filter on tool_name inside the script itself.
  2. The input shape differs. VS Code uses camelCase (tool_input.filePath) and its own tool names; Claude Code uses snake_case (tool_input.file_path). A shared hook has to handle both.
  3. Hooks are a Preview feature in VS Code. If yours do not fire, check the chat.useClaudeHooks setting.

Copilot also has its own hooks file at .github/hooks/hooks.json if you decide to go Copilot-only later — see Committing to One Tool.

.vscode/settings.json

Every path FeatherSpec relies on is already a VS Code default. The shipped file restates them so the setup survives a changed default or an overriding workspace:

{
  "chat.useAgentsMdFile": true,
  "chat.useClaudeMdFile": false,
  "chat.instructionsFilesLocations": { ".claude/rules": true },
  "chat.promptFilesLocations": { ".github/prompts": true },
  "chat.agentFilesLocations": { ".github/agents": true, ".claude/agents": true }
}

chat.useClaudeMdFile is off because Copilot reads AGENTS.md natively — the one-line CLAUDE.md import file would be redundant for it. See Interop Matrix.

Clone this wiki locally