Skip to content

Claude Code Tooling

Reference of the Claude Code configuration versioned in this repository, and of the MCP servers it expects you to provide yourself.

Versioned files

Path Role
CLAUDE.md Project instructions loaded into every session
.claude/settings.json Project hooks, permissions and MCP server enablement
.claude/local-qa.md Recipes for running QA and tests on a dev machine, loaded on demand by /check and /sprint
.claude/skills/<name>/SKILL.md The four project skills below
.claudeignore Paths kept out of Claude's context (dependencies, lock files, binaries, secrets)
.github/workflows/claude.yml, claude-code-review.yml Claude on GitHub (see below)

There is no project-level .mcp.json: MCP servers are configured per user (see MCP servers).

Settings (.claude/settings.json)

Key Value
includeCoAuthoredBy false: no AI attribution in commits
enableAllProjectMcpServers, enabledMcpjsonServers enable an openapi-spec MCP server when one is defined
permissions.allow read-only shell commands, git, gh, make, composer, docker compose, curl to localhost, web search
permissions.deny rm, and reading .env, api/.env.local*, api/config/secrets/*, pwa/.env*
permissions.defaultMode acceptEdits

Hooks

Event Matcher Effect
PreToolUse Write\|Edit Blocks any edit to a path containing .env, schema.d.ts, compose.override, vendor/, node_modules/, .claude/settings.json or .claude/settings.local.json
PostToolUse Write\|Edit For a .php file, runs make php-cs-fixer then make rector; for a .ts/.tsx file, runs make prettier. Skipped for files under .claude/worktrees/

The formatting targets do not read a file argument: make php-cs-fixer and make rector process the whole api/ and provisioner/ trees, and make prettier only checks formatting.

Skills

Command What it does
/pick <issue-number> [base-branch] Implements a GitHub issue end to end: branch, code, tests, pull request, then up to 3 surveillance cycles (CI, review comments) until the PR is READY or NEEDS ATTENTION. Never merges.
/sprint <sprint-number> Implements every issue of a sprint in parallel with one worktree agent per issue, picks the model per issue (Opus by default, Sonnet for mechanical changes), runs the same bounded loop on each PR and records the result in TRACKING.md through a dedicated branch
/check [qa\|test\|all] Runs the QA and/or test suites, fixes failures and retries, 3 runs at most, and reports the real output. Default all
/close [sprint-number] Closes a sprint: removes local worktrees and branches after confirmation, fast-forwards main, runs a retrospective that proposes configuration changes without applying them

Claude on GitHub

Trigger Workflow Effect
@claude pick [base-branch] in an issue comment claude.yml, job pick Same flow as /pick, in CI and without Docker: creates feature/<issue>, implements, opens the PR, follows CI
@claude <instruction> in an issue or PR comment, a review, or an issue body/title claude.yml, job claude Follows the free-form instruction
Pull request opened, synchronized or marked ready for review claude-code-review.yml Automated review in Conventional Comments format; the bot resolves its own threads once a fix is pushed

MCP servers

None is versioned. These are the servers the project workflow assumes, configured in your user settings or as Claude Code plugins:

Server Used for Source
GitHub Issues, pull requests, reviews and CI results (mcp__github__*) https://github.com/github/github-mcp-server
Context7 Up-to-date library documentation (Symfony, API Platform, Next.js, Expo...) https://github.com/upstash/context7
Playwright Driving a browser against the local stack https://github.com/microsoft/playwright-mcp
openapi-spec Loading the backend's OpenAPI document as context for example https://docs.apidog.com/apidog-mcp-server, pointed at https://localhost/docs.jsonopenapi

openapi-spec needs the local stack to be running. The name matters: it is the one .claude/settings.json enables.

This backend also exposes its own MCP server at /mcp, for end users' AI agents rather than for development. See Connect an AI agent and MCP tools.