Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
"playwright@claude-plugins-official": true
},
"enabledMcpjsonServers": [
"context7"
"context7",
"symfony-ai-mate"
],
"permissions": {
"allow": [
"mcp__symfony-ai-mate",
"Bash(docker compose:*)",
"WebFetch(domain:api-platform.com)",
"Bash(grep:*)",
Expand Down
8 changes: 8 additions & 0 deletions .markdownlintignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,11 @@
# https://github.com/igorshubovych/markdownlint-cli?tab=readme-ov-file#ignoring-files
vendor/
node_modules/

# AI Mate generates AGENTS.md (maintained between the AI_MATE_INSTRUCTIONS
# markers by the composer plugin) and ships its own agent docs under mate/.
# Both follow Mate's own format, not this project's Markdown conventions, so
# they are excluded from markdownlint rather than hand-fixed (the generated
# parts would be overwritten anyway).
AGENTS.md
mate/
13 changes: 13 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,19 @@
"context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp"
},
"symfony-ai-mate": {
"type": "stdio",
"command": "docker",
"args": [
"compose",
"exec",
"-T",
"phpfpm",
"vendor/bin/mate",
"serve",
"--force-keep-alive"
]
}
}
}
6 changes: 6 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!-- BEGIN AI_MATE_INSTRUCTIONS -->
AI Mate Summary:
- Role: MCP-powered, project-aware coding guidance and tools.
- Required action: Read and follow `mate/AGENT_INSTRUCTIONS.md` before taking any action in this project, and prefer MCP tools over raw CLI commands whenever possible.
- Installed extensions: symfony/ai-mate, symfony/ai-monolog-mate-extension.
<!-- END AI_MATE_INSTRUCTIONS -->
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file.

## [Unreleased]

- Added Symfony AI Mate (`symfony/ai-mate`, dev-only) as a project-aware MCP server for AI coding
agents; wired in `.mcp.json` to run inside the `phpfpm` container via `docker compose exec`.
Includes the Monolog bridge (`symfony/ai-monolog-mate-extension`) exposing log search/tail tools.
- Sped up the Playwright CI job: it now runs in parallel (3 workers, sized to the 4-vCPU public
GitHub runner) instead of the default 2, added `ipc: host` to the `playwright` Compose
service so parallel Chromium does not exhaust Docker's default 64 MB `/dev/shm`, pulls the
Expand Down
4 changes: 4 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ A few things teammates install once on their host so the project's hooks, auto-e
across the Entity ↔ DTO ↔ Provider/Processor chain. Static analyser only — does not need host PHP.
- **context7 MCP** — auto-enabled via `.mcp.json` + `.claude/settings.json` `enabledMcpjsonServers`. No
install step; Claude Code fetches it on first use. Used for live Symfony/API Platform/Doctrine docs lookup.
- **Symfony AI Mate MCP** — auto-enabled via `.mcp.json` + `enabledMcpjsonServers`. No host install; the
stdio server runs inside the `phpfpm` container, so it just needs the compose stack up. Project-aware PHP
tools (see `mate/AGENT_INSTRUCTIONS.md`); after changing Mate extensions, run
`task compose -- exec phpfpm vendor/bin/mate discover`.

## The `/v2/` API is versioned — no breaking changes allowed

Expand Down
15 changes: 14 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@
"phpstan/phpstan-symfony": "^2.0",
"phpunit/phpunit": "^9.5",
"rector/rector": "^2.4",
"symfony/ai-mate": "^0.9.0",
"symfony/ai-monolog-mate-extension": "^0.9.0",
"symfony/browser-kit": "~6.4.0",
"symfony/css-selector": "~6.4.0",
"symfony/debug-bundle": "~6.4.0",
Expand Down Expand Up @@ -91,7 +93,8 @@
"autoload-dev": {
"psr-4": {
"App\\PhpStan\\": "tools/phpstan/",
"App\\Tests\\": "tests/"
"App\\Tests\\": "tests/",
"Mate\\": "mate/src/"
}
},
"config": {
Expand All @@ -110,6 +113,16 @@
"sort-packages": true
},
"extra": {
"ai-mate": {
"extension": false,
"includes": [
"mate/config.php"
],
"instructions": "mate/INSTRUCTIONS.md",
"scan-dirs": [
"mate/src"
]
},
"symfony": {
"allow-contrib": false,
"require": "~6.4.0"
Expand Down
Loading
Loading