<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Johannes Wachter · Writing</title><description>Writing about what building open source actually teaches me, and what we can all learn from it.</description><link>https://johanneswachter.dev/</link><language>en</language><item><title>Joining the Symfony AI Core Team</title><link>https://johanneswachter.dev/blog/symfony-ai-core-team/</link><guid isPermaLink="true">https://johanneswachter.dev/blog/symfony-ai-core-team/</guid><description>Chris Hertel asked me to join the new Symfony AI Core Team alongside Fabien Potencier and Oskar Stark. What that actually means to me.</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate><category>ai</category><category>symfony</category><category>career</category></item><item><title>Kill the MCP</title><link>https://johanneswachter.dev/blog/kill-the-mcp/</link><guid isPermaLink="true">https://johanneswachter.dev/blog/kill-the-mcp/</guid><description>I deleted the MCP server from a Mate prototype and kept the tools. What that cost, what it bought, and why the reflex is the thing worth killing.</description><pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate><category>ai</category><category>mcp</category><category>php</category><category>symfony</category><category>opinion</category></item><item><title>Vibe coding is no-code without a custodian</title><link>https://johanneswachter.dev/blog/vibe-coding-without-a-custodian/</link><guid isPermaLink="true">https://johanneswachter.dev/blog/vibe-coding-without-a-custodian/</guid><description>Vibe coding can produce maintainable software. The harder question is who owns its dependencies, decisions and failures after launch.</description><pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>vibe-coding</category><category>ownership</category><category>maintenance</category><category>opinion</category></item><item><title>The wrong debate: what PHP taught me about agentic software</title><link>https://johanneswachter.dev/blog/the-wrong-debate/</link><guid isPermaLink="true">https://johanneswachter.dev/blog/the-wrong-debate/</guid><description>MCP or CLI is the wrong fight. What PHP with Composer, PSR and Symfony already learned about building things together, one layer down.</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>mcp</category><category>php</category><category>symfony</category><category>opinion</category></item><item><title>The last mile: distributing Agent Skills to real agents</title><link>https://johanneswachter.dev/blog/the-last-mile/</link><guid isPermaLink="true">https://johanneswachter.dev/blog/the-last-mile/</guid><description>The polyfill that bridges where the Agent Skills standard is heading and what agents can read today, and why distribution, not the protocol, was the real problem.</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>skills</category><category>symfony</category><category>mate</category><category>mcp</category></item><item><title>Skills over MCP: shipping Symfony know-how with Mate</title><link>https://johanneswachter.dev/blog/skills-over-mcp/</link><guid isPermaLink="true">https://johanneswachter.dev/blog/skills-over-mcp/</guid><description>What an Agent Skill actually is, how you serve one over MCP, and lessons from building a reference implementation against a spec that kept moving.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>mcp</category><category>skills</category><category>symfony</category><category>mate</category></item><item><title>What happens to innovation when implementation becomes almost free?</title><link>https://johanneswachter.dev/blog/when-implementation-becomes-free/</link><guid isPermaLink="true">https://johanneswachter.dev/blog/when-implementation-becomes-free/</guid><description>When code, design and content all get cheaper, maybe implementation was never the bottleneck. A note from the classroom on friction, the statistical mean, and where excellence shows up.</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>innovation</category><category>teaching</category><category>opinion</category></item><item><title>Giving AI assistants eyes</title><link>https://johanneswachter.dev/blog/giving-ai-assistants-eyes/</link><guid isPermaLink="true">https://johanneswachter.dev/blog/giving-ai-assistants-eyes/</guid><description>Highlights from the Symfony Mate Q&amp;A: the dev-only MCP server that lets AI assistants look inside your running app, and why better context beats more context.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>symfony</category><category>mcp</category><category>mate</category></item><item><title>Why six people are enough and what coding agents have to do with it</title><link>https://johanneswachter.dev/blog/why-six-people-are-enough/</link><guid isPermaLink="true">https://johanneswachter.dev/blog/why-six-people-are-enough/</guid><description>Six developers run Sulu, its enterprise projects and its cloud services. That only works because of ownership and context, and those are exactly what coding agents need too.</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><category>ai</category><category>teams</category><category>ownership</category><category>opinion</category><category>sulu</category></item></channel></rss>