{
  "markdown": "# Symfony Contributions Skills\n\n**Contribute to Symfony like a regular, with your AI agent already knowing the house rules.** 🤖\n\nA small plugin that teaches [Claude Code](https://docs.claude.com/en/docs/claude-code/overview), [OpenAI Codex](https://developers.openai.com/codex), and [Gemini CLI](https://github.com/google-gemini/gemini-cli) the official Symfony contribution rules, so your pull requests land clean on the first try instead of bouncing through three rounds of review. The rules are distilled from Symfony's own [contribution docs](https://symfony.com/doc/current/contributing/index.html) and stay traceable to the exact `.rst` sources they came from.\n\n[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) · Works with **Claude Code** · **OpenAI Codex** · **Gemini CLI**\n\n## ✨ Why\n\nOpen a PR on [`symfony/symfony`](https://github.com/symfony/symfony) or [`symfony/symfony-docs`](https://github.com/symfony/symfony-docs) and a reviewer will (kindly) point out that your comparison should be Yoda-style, your deprecation is missing its `UPGRADE-*.md` note, or your `.rst` used single backticks instead of double. These skills front-load all of it, so your agent gets it right while writing the code, not after someone flags it.\n\n## 🧩 Skills\n\n| Skill | Reach for it when | Distilled from |\n|---|---|---|\n| [**symfony-code-contribution**](skills/symfony-code-contribution/SKILL.md) | You're writing or reviewing **PHP** for Symfony core, a bundle, UX (PHP side), AI, etc. Coding standards, naming, deprecations, the backward-compatibility promise, and the patch-version policy. | [standards](https://symfony.com/doc/current/contributing/code/standards.html) · [conventions](https://symfony.com/doc/current/contributing/code/conventions.html) · [bc](https://symfony.com/doc/current/contributing/code/bc.html) · [maintenance](https://symfony.com/doc/current/contributing/code/maintenance.html) |\n| [**symfony-docs-contribution**](skills/symfony-docs-contribution/SKILL.md) | You're writing or editing **`.rst`** docs for symfony-docs or a package. reStructuredText format, the writing standards, and the doc PR workflow. | [format](https://symfony.com/doc/current/contributing/documentation/format.html) · [standards](https://symfony.com/doc/current/contributing/documentation/standards.html) |\n\n> 💡 Working on a JS/TS project like [Webpack Encore](https://github.com/symfony/webpack-encore)? These skills don't apply: follow that project's own `CONTRIBUTING`.\n\n## 🚀 Install\n\nPick your agent. Each one loads the same [`skills/`](skills/) through its own mechanism.\n\n### 🟣 Claude Code\n\nAdd the marketplace and enable the plugin in `settings.json`:\n\n```json\n{\n  \"extraKnownMarketplaces\": {\n    \"symfony-contribution-skills\": {\n      \"source\": { \"source\": \"github\", \"repo\": \"kocal/symfony-contribution-skills\" }\n    }\n  },\n  \"enabledPlugins\": {\n    \"symfony-contribution-skills@symfony-contribution-skills\": true\n  }\n}\n```\n\nOr do it interactively, then reload:\n\n```\n/plugin marketplace add kocal/symfony-contribution-skills\n/plugin install symfony-contribution-skills@symfony-contribution-skills\n/reload-plugins\n```\n\n### 🟢 OpenAI Codex\n\nCodex reads the very same `skills/<name>/SKILL.md` format. Register the marketplace, then install from the plugin browser:\n\n```\ncodex plugin marketplace add kocal/symfony-contribution-skills\n```\n\n```\n/plugins   # open the browser, install \"symfony-contribution-skills\", then start a new session\n```\n\nWant zero setup? Codex also reads [`AGENTS.md`](AGENTS.md). Append the highlights to your global file and every project inherits them:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/kocal/symfony-contribution-skills/main/AGENTS.md >> ~/.codex/AGENTS.md\n```\n\n### 🔵 Gemini CLI\n\nInstall the repo as an extension. Gemini loads [`GEMINI.md`](GEMINI.md) into context automatically:\n\n```bash\ngemini extensions install https://github.com/kocal/symfony-contribution-skills\n```\n\nManage it anytime with `/extensions`.\n\n## 🔄 Keep the skills fresh\n\nThe skills are a **distillation** of the Symfony docs, not a verbatim copy, so upstream can drift. [`bin/update`](bin/update) keeps that visible instead of silent:\n\n```bash\nbin/update                 # fetch the referent .rst into references/, show what changed upstream\nbin/update --regenerate    # rewrite the SKILL.md files + AGENTS/GEMINI cheat-sheets via `claude -p`\nbin/update --branch 8.2    # target another symfony-docs branch (default: 8.1)\n```\n\nThe default run is deterministic: it only downloads the `.rst` files and prints the diff, nothing gets rewritten. Regeneration is a separate, explicit step that uses the `claude` CLI to rewrite the two skills from the updated `.rst`, then rebuilds the `AGENTS.md` and `GEMINI.md` cheat-sheets from those skills so every agent stays in sync. Since that step is LLM-based, review it with `git diff` before committing. When Symfony opens a newer stable branch, bump `BRANCH` in the script or pass `--branch`.\n\n## 🗂️ Layout\n\n```\n.\n├── .claude-plugin/           # Claude Code manifests\n│   ├── marketplace.json\n│   └── plugin.json\n├── .codex-plugin/            # OpenAI Codex manifest\n│   └── plugin.json\n├── gemini-extension.json     # Gemini CLI extension manifest (contextFileName -> GEMINI.md)\n├── AGENTS.md                 # cross-agent cheat-sheet (Codex + generic agents)\n├── GEMINI.md                 # cross-agent cheat-sheet (Gemini context file)\n├── llms.txt                  # index of skills + sources (llms.txt convention)\n├── skills/\n│   ├── symfony-code-contribution/\n│   │   └── SKILL.md\n│   └── symfony-docs-contribution/\n│       └── SKILL.md\n├── references/               # vendored upstream .rst, baseline for bin/update diffs\n│   ├── code/\n│   │   ├── bc.rst\n│   │   ├── conventions.rst\n│   │   ├── maintenance.rst\n│   │   └── standards.rst\n│   └── documentation/\n│       ├── format.rst\n│       └── standards.rst\n├── bin/\n│   └── update                # refresh references/ and optionally regenerate the skills\n├── README.md\n└── LICENSE\n```\n\nEvery agent points at the same two `SKILL.md` files, so there's one source of truth to maintain. 🎯\n\n## 🙌 Credits\n\n- Built around the [Symfony contribution guidelines](https://symfony.com/doc/current/contributing/index.html) 💚\n- Inspired by [`smnandre/symfony-ux-skills`](https://github.com/smnandre/symfony-ux-skills), skills for writing Symfony UX code by Simon Andre \n\n## 📄 License\n\n[MIT](LICENSE) for the plugin. The Symfony documentation these skills distill is licensed [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/).\n",
  "bytes": 6579,
  "sha": "ef9eff61a408cdd113f8a8dfaecc76d24ec28c897c75c5d643e15fad8d51b929",
  "repo_slug": "kocal/symfony-contribution-skills",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_kocal_symfony_contribution_skills_d105a8de/readme"
}