[{"data":1,"prerenderedAt":660},["ShallowReactive",2],{"blog-browser-agents-e2e-testing-playwright-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":25,"sources":34,"cover":50,"og":51,"expertise":52,"locales":53,"lang":54,"title":57,"description":58,"coverAlt":59,"metaTitle":60,"takeaways":61,"faq":67,"toc":83,"blocks":108,"others":369},"browser-agents-e2e-testing-playwright","2026-10-16",7,"agents",[9,10,11,12,13],"Playwright","E2E testing","Coding agents","MCP","Test automation",[15,16,17,18,19,20,21,22,23,24],"playwright test agents","playwright planner generator healer","ai e2e testing","playwright mcp","llm generated playwright tests","self-healing tests","browser agent testing","playwright init-agents","ai test automation 2026","playwright cli skills",[26,28,31],{"name":9,"url":27},"https:\u002F\u002Fplaywright.dev\u002F",{"name":29,"url":30},"End-to-end testing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSystem_testing",{"name":32,"url":33},"Model Context Protocol","https:\u002F\u002Fmodelcontextprotocol.io\u002F",[35,38,41,44,47],{"title":36,"url":37},"Playwright docs: Test agents (planner, generator, healer)","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Ftest-agents",{"title":39,"url":40},"Microsoft: Playwright MCP README (MCP vs CLI, accessibility snapshots)","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fplaywright-mcp",{"title":42,"url":43},"Playwright docs: Best practices","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Fbest-practices",{"title":45,"url":46},"Playwright docs: Locators","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Flocators",{"title":48,"url":49},"Browserbase: Stagehand README (act, extract, observe)","https:\u002F\u002Fgithub.com\u002Fbrowserbase\u002Fstagehand","\u002Fimages\u002Fblog\u002Fbrowser-agents-e2e-testing-playwright\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fbrowser-agents-e2e-testing-playwright\u002Fog.jpg","ai-engineer",[54,55,56],"en","de","hu","Browser agents for E2E testing: let agents write Playwright tests, not run them","Where AI agents help with end-to-end tests: Playwright planner, generator and healer, MCP or CLI, and the guardrails that keep healed tests honest.","An agent explores a web app, writes a Markdown test plan, turns it into Playwright tests, and a healer repairs locators while assertions stay under review.","Browser agents for E2E tests with Playwright · Balázs Csorba",[62,63,64,65,66],"Use agents to write and maintain deterministic Playwright tests; CI should run plain test files, not an LLM deciding what passed.","Playwright ships planner, generator and healer agents that turn a seed test and a request into a Markdown plan and then into test files.","For coding agents, Playwright's own docs now point to the CLI with skills as more token-efficient than the MCP server.","A healer may update locators and waits on its own; any change to an assertion or a skipped test needs a human review.","Accessible markup is the contract: role-based locators are what both agents and resilient tests rely on.",[68,71,74,77,80],{"q":69,"a":70},"Can an AI agent replace my E2E test suite?","Not as the thing that runs in CI. An agent that clicks through the app at test time is slower, costs tokens on every run and can judge the same result differently twice. Use agents to write, extend and repair a normal Playwright suite, and run that suite deterministically.",{"q":72,"a":73},"What are Playwright test agents?","Playwright ships three agent definitions: a planner that explores the app and writes a Markdown test plan, a generator that turns the plan into Playwright test files while verifying selectors live, and a healer that runs failing tests and suggests patches. You add them with npx playwright init-agents for VS Code, Claude Code, Codex or OpenCode.",{"q":75,"a":76},"Should I use Playwright MCP or the Playwright CLI?","For coding agents working in a repository, the Playwright MCP README recommends the CLI with skills, because it avoids loading large tool schemas and accessibility trees into the context. MCP fits long-running exploratory or self-healing loops that benefit from a persistent browser session.",{"q":78,"a":79},"Are self-healing tests safe?","Only with limits. Fixing a renamed button locator is fine. Changing what a test asserts, or marking it skipped because the feature seems broken, can hide a real regression. Let the healer change locators and waits, and send assertion changes and skips to review.",{"q":81,"a":82},"When does a runtime browser agent make sense?","For exploratory testing, quick smoke checks on pages you do not control, and tasks where the UI changes too often for fixed selectors. Tools like Stagehand mix natural-language actions with Playwright-style code for these cases.",[84,87,90,93,96,99,102,105],{"id":85,"title":86},"three-ways-agents-meet-e2e","What are the three ways to use agents in E2E testing?",{"id":88,"title":89},"playwright-test-agents","How do Playwright's test agents work?",{"id":91,"title":92},"mcp-or-cli","Should coding agents use Playwright MCP or the CLI?",{"id":94,"title":95},"accessibility-is-the-contract","Why is accessible markup the contract for agents and tests?",{"id":97,"title":98},"healer-guardrails","How do you keep self-healing tests honest?",{"id":100,"title":101},"runtime-agents","When does a runtime browser agent still make sense?",{"id":103,"title":104},"setup-checklist","What does a practical setup look like?",{"id":106,"title":107},"sources","Sources",[109,113,116,119,158,161,162,175,184,211,213,214,220,234,235,250,258,259,262,281,283,295,296,319,322,323,343,351,352],{"type":110,"content":111},"paragraph",[112],"Browser agents can now open an app, read the page, click through a checkout and tell you whether it worked. It is tempting to turn that into the test suite: describe the flows in plain language and let a model check them on every pull request. I think that is the wrong place for the model. The better split is to let agents do the expensive human work, exploring the app, writing tests and fixing broken locators, and let CI run plain Playwright tests that give the same answer every time.",{"type":110,"content":114},[115],"This article compares the three ways agents meet E2E testing, walks through Playwright's own test agents, covers MCP versus CLI for coding agents, and sets the guardrails I use so that a self-healing test cannot quietly heal away a real bug.",{"type":117,"level":118,"id":85,"text":86},"heading",2,{"type":120,"head":121,"rows":130},"table",[122,124,126,128],[123],"Approach",[125],"What the agent does",[127],"Runs in CI?",[129],"Main risk",[131,140,149],[132,134,136,138],[133],"Agent writes tests",[135],"Explores the app, writes a plan and Playwright test files",[137],"No, the tests do",[139],"Tests that assert the wrong thing",[141,143,145,147],[142],"Agent repairs tests",[144],"Runs failing tests, inspects the UI, patches locators and waits",[146],"Optional, as a separate job",[148],"Healing away a real regression",[150,152,154,156],[151],"Agent is the test",[153],"Follows natural-language steps in a live browser and judges the result",[155],"Yes",[157],"Slow, costly, non-deterministic verdicts",{"type":110,"content":159},[160],"A test is useful because it is a fixed oracle: the same code, the same data and the same assertion give the same result. A model judging a screenshot is a second opinion, not an oracle. It is useful for exploration, but a red build should mean the product changed, not that the model changed its mind.",{"type":117,"level":118,"id":88,"text":89},{"type":110,"content":163},[164,165,169,170,174],"Playwright ships three ",{"tag":166,"href":37,"children":167},"a",[168],"test agents"," as agent definitions you add to the repository with ",{"tag":171,"children":172},"code",[173],"npx playwright init-agents",", with loops for VS Code, Claude Code, Codex and OpenCode. The docs say to regenerate them whenever Playwright is updated, so they pick up new tools and instructions.",{"type":176,"attrs":177,"inner":181,"caption":182},"diagram",{"viewBox":178,"role":179,"aria-labelledby":180},"0 0 720 170","img","pwa1-t pwa1-d","\u003Ctitle id=\"pwa1-t\">Playwright test agents\u003C\u002Ftitle>\u003Cdesc id=\"pwa1-d\">A seed test sets up the environment. The planner explores the app and writes a Markdown plan in specs. The generator turns the plan into test files in tests, verifying selectors live. CI runs the tests. When a test fails, the healer replays it and proposes a patch, which goes to review.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"pwa1-ah\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"79\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Seed test\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">fixtures, login\u003C\u002Ftext>\u003Cpath d=\"M138 85H158\" class=\"d-line\" marker-end=\"url(#pwa1-ah)\" \u002F>\u003Crect x=\"160\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"220\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Planner\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">specs\u002F*.md\u003C\u002Ftext>\u003Cpath d=\"M279 85H299\" class=\"d-line\" marker-end=\"url(#pwa1-ah)\" \u002F>\u003Crect x=\"301\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"360\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Generator\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">tests\u002F*.spec.ts\u003C\u002Ftext>\u003Cpath d=\"M419 85H439\" class=\"d-line\" marker-end=\"url(#pwa1-ah)\" \u002F>\u003Crect x=\"441\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"500\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">CI\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">plain Playwright\u003C\u002Ftext>\u003Cpath d=\"M560 85H580\" class=\"d-line\" marker-end=\"url(#pwa1-ah)\" \u002F>\u003Crect x=\"582\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"641\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Healer\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">patch → review\u003C\u002Ftext>",[183],"Every agent output is a file in the repository: plans, tests and patches all go through normal code review.",{"type":185,"items":186},"list",[187,197,206],[188,192,193,196],{"tag":189,"children":190},"strong",[191],"Planner:"," takes a request such as \"plan guest checkout\", a seed test that sets up fixtures and login, and optionally a requirements document. It runs the seed test, explores the app and writes a Markdown plan into ",{"tag":171,"children":194},[195],"specs\u002F",".",[198,201,202,205],{"tag":189,"children":199},[200],"Generator:"," turns the plan into Playwright tests under ",{"tag":171,"children":203},[204],"tests\u002F",", verifying selectors and assertions live while it performs the scenarios. The docs note that generated tests may include initial errors.",[207,210],{"tag":189,"children":208},[209],"Healer:"," given a failing test, it replays the steps, inspects the current UI for equivalent elements, suggests a patch such as a locator update, a wait adjustment or a data fix, and re-runs until the test passes or guardrails stop it. Its output is a passing test, or a skipped test if it believes the functionality is broken.",{"type":171,"code":212},"# Add the agent definitions for your coding agent (regenerate after Playwright upgrades)\nnpx playwright init-agents --loop=claude\n\n# tests\u002Fseed.spec.ts: everything the agents need to reach a logged-in state\nimport { test, expect } from '.\u002Ffixtures'\ntest('seed', async ({ page }) => {\n  await page.goto('\u002F')\n  await expect(page.getByRole('navigation')).toBeVisible()\n})\n",{"type":117,"level":118,"id":91,"text":92},{"type":110,"content":215},[216,219],{"tag":166,"href":40,"children":217},[218],"Playwright MCP"," lets a model drive a browser through structured accessibility snapshots instead of screenshots, so it needs no vision model and avoids the ambiguity of clicking on pixels. Its own README now draws a line, though: for coding agents it recommends the Playwright CLI with skills, because CLI calls avoid loading large tool schemas and verbose accessibility trees into the context. MCP remains the better fit for loops that benefit from a persistent browser session, such as exploratory automation and self-healing tests.",{"type":110,"content":221},[222,223,228,229,233],"That matches the general trade-off in ",{"tag":224,"to":225,"children":226},"link","\u002Fblog\u002Fagents-md-skills-mcp-cli-decision-matrix",[227],"AGENTS.md, skills, MCP or CLI",": every resident tool schema and every page snapshot costs context on each turn. If a test session needs only a few page reads, the CLI is cheaper; the techniques in ",{"tag":224,"to":230,"children":231},"\u002Fblog\u002Ftoken-saving-tools-coding-agents-top-20",[232],"cutting coding-agent tokens"," apply here too.",{"type":117,"level":118,"id":94,"text":95},{"type":110,"content":236},[237,238,241,242,245,246,249],"Playwright's ",{"tag":166,"href":43,"children":239},[240],"best practices"," recommend user-facing locators such as ",{"tag":171,"children":243},[244],"getByRole('button', { name: 'Submit' })"," over CSS classes and XPath, because the DOM structure changes more often than what users see. Playwright MCP reads the same accessibility tree. So the work that makes a site usable with a screen reader also makes it easier for an agent to explore and produces tests that survive redesigns. A button that is a styled ",{"tag":171,"children":247},[248],"div"," without a role is invisible to all three.",{"type":110,"content":251},[252,253,257],"For shops in the EU this is not optional anyway; see ",{"tag":224,"to":254,"children":255},"\u002Fblog\u002Feuropean-accessibility-act-b2b-shop",[256],"the European Accessibility Act for B2B shops",". Fixing roles and labels pays for compliance, agents and test stability at once.",{"type":117,"level":118,"id":97,"text":98},{"type":110,"content":260},[261],"The healer's job description contains the risk: it re-runs until the test passes, and if it believes the feature is broken, it marks the test skipped. Both outcomes are fine when a button was renamed. Both are bad when the button disappeared because of a real bug. The rule I use is simple: the healer may change how a test finds things, never what a test checks.",{"type":263,"variant":264,"title":265,"body":266},"callout","warn","A healed test that no longer fails is not a fixed test",[267],[268,269,272,273,276,277,280],"Treat every healer patch that touches an ",{"tag":171,"children":270},[271],"expect(...)"," line, removes a step, or adds ",{"tag":171,"children":274},[275],"test.skip"," or ",{"tag":171,"children":278},[279],"test.fixme"," as a possible product bug. Route it to a person, with the failing trace attached.",{"type":171,"code":282},"#!\u002Fusr\u002Fbin\u002Fenv bash\n# CI gate for agent-made test changes: locator and wait edits pass, assertion edits need review\nset -euo pipefail\nchanged=$(git diff --unified=0 origin\u002Fmain -- 'tests\u002F**\u002F*.spec.ts' | grep -E '^[-+][^-+]' || true)\nif echo \"$changed\" | grep -Eq 'expect\\(|test\\.(skip|fixme)\\(|\\.toHave|\\.toBe'; then\n  echo \"Assertions or skips changed in tests\u002F: needs a human reviewer (label: test-assertions)\"\n  exit 1\nfi\n",{"type":110,"content":284},[285,286,290,291,196],"The same applies to tests an agent writes for a bug fix. A regression test is only worth something if it fails when the fix is reverted; I check that in every bug-fix PR, as described in ",{"tag":224,"to":287,"children":288},"\u002Fblog\u002Fagent-loop-explained",[289],"the agent loop"," and in my ",{"tag":224,"to":292,"children":293},"\u002Fblog\u002Fcoding-agent-skills-workflow",[294],"bug-to-PR workflow",{"type":117,"level":118,"id":100,"text":101},{"type":110,"content":297},[298,299,302,303,306,307,310,311,314,315,196],"There are cases where fixed selectors are the wrong tool. Exploratory testing before a release, where an agent tries unusual paths and reports what looked wrong. Smoke checks on third-party pages you do not control, such as a payment provider's redirect. Internal back-office flows that change weekly. For these, libraries like ",{"tag":166,"href":49,"children":300},[301],"Stagehand"," combine natural-language ",{"tag":171,"children":304},[305],"act",", ",{"tag":171,"children":308},[309],"extract"," and ",{"tag":171,"children":312},[313],"observe"," calls with Playwright-style page and locator APIs, so a script can be mostly deterministic with a few flexible steps. I compare it in more detail in the ",{"tag":224,"to":316,"children":317},"\u002Ftools\u002Fbrowserbase-stagehand",[318],"Stagehand review",{"type":110,"content":320},[321],"Keep these runs out of the merge gate. Report their findings as issues or as new deterministic tests, and keep the pass or fail decision on code you can read.",{"type":117,"level":118,"id":103,"text":104},{"type":185,"ordered":324,"items":325},true,[326,328,333,335,341],[327],"A seed test with fixtures for login and test data, so agents start from a known state.",[329,330,332],"Plans in ",{"tag":171,"children":331},[195]," reviewed like requirements: a wrong plan produces correct-looking tests for the wrong behavior.",[334],"Generated tests use role-based locators only; CSS selectors fail lint.",[336,337,340],"CI runs plain ",{"tag":171,"children":338},[339],"npx playwright test"," with traces on failure; no model in the merge gate.",[342],"The healer runs as a separate job that opens a PR; assertion changes and skips are blocked for review.",{"type":110,"content":344},[345,346,350],"This is ",{"tag":224,"to":347,"children":348},"\u002Fblog\u002Fharness-engineering-coding-agents",[349],"harness engineering"," applied to testing: the agent gets guides (seed test, plans, locator rules) and sensors (the test run, the assertion gate), and the human review sits where the decisions are, not on every line.",{"type":117,"level":118,"id":106,"text":107},{"type":185,"ordered":324,"items":353},[354,357,360,363,366],[355],{"tag":166,"href":37,"children":356},[36],[358],{"tag":166,"href":40,"children":359},[39],[361],{"tag":166,"href":43,"children":362},[42],[364],{"tag":166,"href":46,"children":365},[45],[367],{"tag":166,"href":49,"children":368},[48],[370,441,500,584],{"slug":371,"published":5,"minutes":372,"category":7,"tags":373,"keywords":379,"about":391,"sources":401,"cover":435,"og":436,"expertise":52,"locales":437,"lang":54,"title":438,"description":439,"coverAlt":440},"context-rot-compaction-long-running-agents",10,[374,375,376,377,378],"Context rot","Compaction","Context engineering","Long-running agents","Agent memory",[380,381,382,383,384,385,386,387,388,389,390],"context rot","context rot LLM","compaction AI agents","context engineering","long-running agents context window","Claude compaction API","context editing clear tool results","OpenAI responses compaction","lost in the middle LLM","agent context management","sub-agents context isolation",[392,395,398],{"name":393,"url":394},"Context window","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model#Context_window",{"name":396,"url":397},"Attention (machine learning)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAttention_(machine_learning)",{"name":399,"url":400},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",[402,405,408,411,414,417,420,423,426,429,432],{"title":403,"url":404},"Chroma: Context Rot: How Increasing Input Tokens Impacts LLM Performance (Jul 2025)","https:\u002F\u002Fresearch.trychroma.com\u002Fcontext-rot",{"title":406,"url":407},"Liu et al.: Lost in the Middle: How Language Models Use Long Contexts (2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2307.03172",{"title":409,"url":410},"Modarressi et al.: NoLiMa: Long-Context Evaluation Beyond Literal Matching (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.05167",{"title":412,"url":413},"Anthropic: Effective context engineering for AI agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-context-engineering-for-ai-agents",{"title":415,"url":416},"Anthropic: Effective harnesses for long-running agents (Nov 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-harnesses-for-long-running-agents",{"title":418,"url":419},"Claude API docs: Compaction at a token threshold","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-threshold",{"title":421,"url":422},"Claude API docs: Compaction on demand","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-on-demand",{"title":424,"url":425},"Claude API docs: Context editing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcontext-editing",{"title":427,"url":428},"Claude API docs: Memory tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fmemory-tool",{"title":430,"url":431},"OpenAI API docs: Compaction","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fcompaction",{"title":433,"url":434},"Cognition: Don't Build Multi-Agents","https:\u002F\u002Fcognition.ai\u002Fblog\u002Fdont-build-multi-agents","\u002Fimages\u002Fblog\u002Fcontext-rot-compaction-long-running-agents\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontext-rot-compaction-long-running-agents\u002Fog.jpg",[54,55,56],"Context rot in long-running agents: clearing, compaction, memory and sub-agents","Why LLM accuracy drops as context grows, and how clearing tool results, compaction, notes and sub-agents keep long-running agents on track.","An agent's context size rising over turns, kept in a band by clearing old tool results and compaction instead of growing to the window limit.",{"slug":442,"published":5,"minutes":443,"category":7,"tags":444,"keywords":449,"about":461,"sources":469,"cover":494,"og":495,"expertise":52,"locales":496,"lang":54,"title":497,"description":498,"coverAlt":499},"a2a-protocol-agent-interoperability",12,[445,446,12,447,448],"A2A","AI agents","Interoperability","Agent security",[450,451,452,453,454,455,456,457,458,459,460],"a2a protocol","agent2agent protocol","a2a vs mcp","a2a agent card","agent-card.json well-known","a2a protocol 1.0","a2a task lifecycle","agent to agent communication protocol","a2a security","a2a json-rpc grpc","agent session smuggling",[462,465,466],{"name":463,"url":464},"Agent2Agent protocol","https:\u002F\u002Fa2a-protocol.org\u002F",{"name":32,"url":33},{"name":467,"url":468},"Linux Foundation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLinux_Foundation",[470,473,476,479,482,485,488,491],{"title":471,"url":472},"A2A Protocol Specification (latest, v1.0)","https:\u002F\u002Fa2a-protocol.org\u002Flatest\u002Fspecification\u002F",{"title":474,"url":475},"A2A: a2a.proto, the normative data model (GitHub)","https:\u002F\u002Fgithub.com\u002Fa2aproject\u002FA2A\u002Fblob\u002Fmain\u002Fspecification\u002Fa2a.proto",{"title":477,"url":478},"A2A docs: A2A and MCP","https:\u002F\u002Fa2a-protocol.org\u002Flatest\u002Ftopics\u002Fa2a-and-mcp\u002F",{"title":480,"url":481},"A2A docs: Agent discovery","https:\u002F\u002Fa2a-protocol.org\u002Flatest\u002Ftopics\u002Fagent-discovery\u002F",{"title":483,"url":484},"Google Developers Blog: Announcing the Agent2Agent Protocol (Apr 2025)","https:\u002F\u002Fdevelopers.googleblog.com\u002Fen\u002Fa2a-a-new-era-of-agent-interoperability\u002F",{"title":486,"url":487},"Linux Foundation: Launch of the Agent2Agent Protocol Project (Jun 2025)","https:\u002F\u002Fwww.linuxfoundation.org\u002Fpress\u002Flinux-foundation-launches-the-agent2agent-protocol-project-to-enable-secure-intelligent-communication-between-ai-agents",{"title":489,"url":490},"Linux Foundation: A2A surpasses 150 organizations in its first year (Apr 2026)","https:\u002F\u002Fwww.linuxfoundation.org\u002Fpress\u002Fa2a-protocol-surpasses-150-organizations-lands-in-major-cloud-platforms-and-sees-enterprise-production-use-in-first-year",{"title":492,"url":493},"Unit 42: Agent Session Smuggling in Agent2Agent Systems (Oct 2025)","https:\u002F\u002Funit42.paloaltonetworks.com\u002Fagent-session-smuggling-in-agent2agent-systems\u002F","\u002Fimages\u002Fblog\u002Fa2a-protocol-agent-interoperability\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fa2a-protocol-agent-interoperability\u002Fog.jpg",[54,55,56],"The A2A protocol explained: agent cards, tasks, and where it fits next to MCP","What the Agent2Agent protocol standardizes in v1.0: agent cards, tasks, bindings, security, how it differs from MCP, and when it is worth using.","Two AI agents from different organizations exchange tasks over A2A, each connected to its own tools through MCP, with an agent card published at a well-known URL.",{"slug":501,"published":502,"minutes":503,"category":7,"tags":504,"keywords":510,"about":519,"sources":529,"cover":578,"og":579,"expertise":52,"locales":580,"lang":54,"title":581,"description":582,"coverAlt":583},"ai-assisted-development-economics","2026-10-01",11,[505,506,507,508,509],"AI coding agents","Developer productivity","Engineering economics","Team cost","GDPR",[511,512,513,514,515,516,517,518],"AI coding agents cost","developer productivity AI study","METR AI developer slowdown","AI coding break-even cost model","one senior engineer vs team","AI coding agent vs agency","DORA AI adoption report","GDPR processor contract AI coding tools",[520,523,526],{"name":521,"url":522},"General Data Protection Regulation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",{"name":524,"url":525},"Randomized controlled trial","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRandomized_controlled_trial",{"name":527,"url":528},"Bus factor","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBus_factor",[530,533,536,539,542,545,548,551,554,557,560,563,566,569,572,575],{"title":531,"url":532},"METR: early-2025 AI and experienced open-source developers","https:\u002F\u002Fmetr.org\u002Fblog\u002F2025-07-10-early-2025-ai-experienced-os-dev-study\u002F",{"title":534,"url":535},"Becker et al.: arXiv 2507.09089","https:\u002F\u002Farxiv.org\u002Fabs\u002F2507.09089",{"title":537,"url":538},"METR: developer productivity experiment design, February 2026","https:\u002F\u002Fmetr.org\u002Fblog\u002F2026-02-24-uplift-update\u002F",{"title":540,"url":541},"Peng et al.: GitHub Copilot controlled experiment, arXiv 2302.06590","https:\u002F\u002Farxiv.org\u002Fhtml\u002F2302.06590v1",{"title":543,"url":544},"Cui et al.: three field experiments with software developers","https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fresearch\u002F?p=1148213",{"title":546,"url":547},"DORA: State of AI-assisted Software Development 2025","https:\u002F\u002Fresearch.google\u002Fpubs\u002Fdora-2025-state-of-ai-assisted-software-development-report\u002F",{"title":549,"url":550},"Google Cloud: highlights from the 2024 DORA report","https:\u002F\u002Fcloud.google.com\u002Fblog\u002Fproducts\u002Fdevops-sre\u002Fannouncing-the-2024-dora-report",{"title":552,"url":553},"Stack Overflow: Developer Survey 2025, AI","https:\u002F\u002Fsurvey.stackoverflow.co\u002F2025\u002Fai",{"title":555,"url":556},"Ziftci et al.: Migrating Code At Scale With LLMs At Google","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.09691",{"title":558,"url":559},"Alshahwan et al.: Automated Unit Test Improvement using Large Language Models at Meta","https:\u002F\u002Farxiv.org\u002Fabs\u002F2402.09171",{"title":561,"url":562},"GitClear: AI Copilot Code Quality: 2025 Look Back at 12 Months of Data","https:\u002F\u002Fwww.gitclear.com\u002Fai_assistant_code_quality_2025_research",{"title":564,"url":565},"GDPR, Regulation (EU) 2016\u002F679, Article 28","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2016\u002F679\u002Foj\u002Feng",{"title":567,"url":568},"Anthropic: Commercial Terms of Service","https:\u002F\u002Fwww.anthropic.com\u002Flegal\u002Fcommercial-terms",{"title":570,"url":571},"Claude: pricing","https:\u002F\u002Fclaude.com\u002Fpricing",{"title":573,"url":574},"Claude Platform: data residency","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fdata-residency",{"title":576,"url":577},"GitHub Copilot: plans and pricing","https:\u002F\u002Fgithub.com\u002Ffeatures\u002Fcopilot\u002Fplans","\u002Fimages\u002Fblog\u002Fai-assisted-development-economics\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fai-assisted-development-economics\u002Fog.jpg",[54,55,56],"One senior with coding agents versus a team: what the evidence says","The METR, DORA, Microsoft and GitHub studies on AI coding tools, what they do not prove, and a break-even cost model for one senior versus a team or agency.","Cover art for AI coding economics: a draft-to-ship pipeline where agents speed up drafting, and review and quality costs take part of the gain back.",{"slug":585,"published":586,"minutes":503,"category":7,"tags":587,"keywords":592,"about":601,"sources":613,"cover":654,"og":655,"expertise":52,"locales":656,"lang":54,"title":657,"description":658,"coverAlt":659},"spec-driven-development-coding-agents","2026-09-30",[588,11,589,590,591],"Spec-driven development","Acceptance criteria","Plan mode","AI engineering",[593,594,595,596,597,598,599,600],"spec-driven development","spec driven development coding agents","acceptance criteria for coding agents","AI coding agent plan mode","GitHub Spec Kit","Kiro specs requirements design tasks","vibe coding vs spec-driven development","EARS requirements syntax",[602,605,607,610],{"name":603,"url":604},"Vibe coding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVibe_coding",{"name":597,"url":606},"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fspec-kit",{"name":608,"url":609},"EARS (Easy Approach to Requirements Syntax)","https:\u002F\u002Falistairmavin.com\u002Fears\u002F",{"name":611,"url":612},"Kiro","https:\u002F\u002Fkiro.dev",[614,617,619,622,625,628,630,633,636,639,641,643,646,648,651],{"title":615,"url":616},"Birgitta Böckeler: Understanding Spec-Driven-Development: Kiro, spec-kit, and Tessl (martinfowler.com, 15 October 2025)","https:\u002F\u002Fmartinfowler.com\u002Farticles\u002Fexploring-gen-ai\u002Fsdd-3-tools.html",{"title":618,"url":606},"GitHub Spec Kit: README",{"title":620,"url":621},"GitHub Spec Kit: spec-driven.md methodology","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fspec-kit\u002Fblob\u002Fmain\u002Fspec-driven.md",{"title":623,"url":624},"Kiro documentation: specs","https:\u002F\u002Fkiro.dev\u002Fdocs\u002Fspecs\u002F",{"title":626,"url":627},"Kiro: Introducing Kiro","https:\u002F\u002Fkiro.dev\u002Fblog\u002Fintroducing-kiro\u002F",{"title":629,"url":609},"Alistair Mavin: EARS, the Easy Approach to Requirements Syntax",{"title":631,"url":632},"Anthropic: Best practices for Claude Code","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fbest-practices",{"title":634,"url":635},"Cline documentation: Plan and Act","https:\u002F\u002Fdocs.cline.bot\u002Ffeatures\u002Fplan-and-act",{"title":637,"url":638},"OpenAI: Codex slash command reference","https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Freference\u002Fslash-commands",{"title":640,"url":532},"METR: early-2025 AI and experienced open-source developer productivity (July 2025)",{"title":642,"url":538},"METR: We are changing our developer productivity experiment design (February 2026)",{"title":644,"url":645},"Thoughtworks Technology Radar: Spec-driven development","https:\u002F\u002Fwww.thoughtworks.com\u002Fradar\u002Ftechniques\u002Fspec-driven-development",{"title":647,"url":604},"Wikipedia: Vibe coding",{"title":649,"url":650},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":652,"url":653},"Anthropic: Prompt caching","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fprompt-caching","\u002Fimages\u002Fblog\u002Fspec-driven-development-coding-agents\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fspec-driven-development-coding-agents\u002Fog.jpg",[54,55,56],"Spec-driven development for coding agents: agree the plan before the code","Vibe coding breaks on real codebases. Write a spec with acceptance criteria, a plan and tasks, let the agent tick them off, and review before the first line of code.","Cover art for spec-driven development: a pipeline from spec and plan to tasks and verification, with a review gate before any code is written.",1792177152186]