{"apiVersion":"v1","available":true,"lastUpdated":"2026-08-15T18:00:00.000Z","timelineLastUpdated":"2026-08-15T12:30:59.049Z","thesis":"Vendors are not copying MCP or Plan Mode as brand names. They are copying machinery that already proved it can change a behavior that matters for agent products: trust enough to delegate, lower the cost of letting the agent cook, make work pick-up-able, and extend the product without rewriting the core.","behaviors":[{"id":"delegate-with-trust","name":"Delegate with trust","thesis":"People hand an agent more important work when they can inspect, constrain, and undo it."},{"id":"reduce-commit-anxiety","name":"Reduce commit anxiety","thesis":"Unfinished or agent-proposed work is cheap to share and cheap to revert, so people actually let the agent run."},{"id":"make-work-multiplayer","name":"Make work multiplayer","thesis":"Work becomes visible, reviewable, and pick-up-able by a human or another agent without a meeting."},{"id":"extend-without-rewriting","name":"Extend without rewriting","thesis":"Third parties add capability so the product compounds instead of waiting on the vendor's roadmap."},{"id":"keep-context-alive","name":"Keep context alive","thesis":"The next session does not start from zero — the project, the web, and the user's intent survive."},{"id":"meet-user-in-habitat","name":"Meet the user in habitat","thesis":"The agent shows up where work already happens: the editor, git, CI, and the login people already pay for."}],"mechanics":[{"id":"propose-then-approve","name":"Propose, then approve","behaviorIds":["delegate-with-trust","reduce-commit-anxiety"],"featureIds":["planning-mode","todo-tasklist"],"whyItTravels":"The interesting part is not a Plan button. Someone proposes a piece of work, the work becomes visible before it becomes a change, feedback attaches to the proposal, and approval is what moves state. That is the pull-request mechanic wearing an agent costume. It lowers the cost of letting an agent cook because the human is reviewing a plan, not an already-mutated repo. Every tool that copied planning mode was copying that sequence, not a menu label.","features":[{"featureId":"planning-mode","name":"Planning Mode","category":"Agentic","description":"A dedicated mode that plans/proposes before editing or executing.","leader":"windsurf","shippedByCount":7,"spreadDays":393,"shipments":[{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2025-06-10T04:00:00.000Z","version":"1.10.1","releaseId":"windsurf-1.10.1","rank":1,"lagDaysFromLeader":0},{"tool":"cursor","toolDisplayName":"Cursor","date":"2025-09-29T05:08:58.822Z","version":"1.7","releaseId":"cursor-1.7","rank":2,"lagDaysFromLeader":111},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2025-12-18T05:00:00.000Z","version":"1.23.0","releaseId":"kiro-1.23.0","rank":3,"lagDaysFromLeader":191},{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2026-01-15T23:59:29.275Z","version":"2.1.9","releaseId":"claude-code-2.1.9","rank":4,"lagDaysFromLeader":220},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-01-20T01:27:40.000Z","version":"v0.0.387","releaseId":"github-copilot-v0.0.387","rank":5,"lagDaysFromLeader":224},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2026-01-25T16:37:37.000Z","version":"rust-v0.90.0","releaseId":"openai-codex-rust-v0.90.0","rank":6,"lagDaysFromLeader":230},{"tool":"antigravity-cli","toolDisplayName":"Antigravity CLI","date":"2026-07-08T03:25:54.000Z","version":"1.1.0","releaseId":"antigravity-cli-1.1.0","rank":7,"lagDaysFromLeader":393}]},{"featureId":"todo-tasklist","name":"Todo / Task List","category":"UX","description":"A visible, tracked task/todo list the agent maintains.","leader":"claude-code","shippedByCount":3,"spreadDays":386,"shipments":[{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-04-30T18:14:42.819Z","version":"0.2.93","releaseId":"claude-code-0.2.93","rank":1,"lagDaysFromLeader":0},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-02-05T19:08:11.000Z","version":"v0.0.404","releaseId":"github-copilot-v0.0.404","rank":2,"lagDaysFromLeader":281},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2026-05-21T16:48:03.000Z","version":"rust-v0.133.0","releaseId":"openai-codex-rust-v0.133.0","rank":3,"lagDaysFromLeader":386}]}]},{"id":"undo-as-verb","name":"Undo as a first-class verb","behaviorIds":["reduce-commit-anxiety","delegate-with-trust"],"featureIds":["checkpoints"],"whyItTravels":"Stories did not win because photos disappeared. They won because they lowered the pressure to create. Checkpoints do the same job for agents. If you can rewind the session, you do not have to be sure before you delegate. The mechanic is a cheap undo that makes ambitious runs feel reversible. Tools that shipped rewind were not adding a setting — they were buying the user permission to take a bigger risk.","features":[{"featureId":"checkpoints","name":"Checkpoints / Rewind","category":"Safety","description":"Snapshotting session state to roll back to an earlier point.","leader":"openai-codex","shippedByCount":4,"spreadDays":191,"shipments":[{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2025-12-15T22:38:50.000Z","version":"rust-v0.73.0","releaseId":"openai-codex-rust-v0.73.0","rank":1,"lagDaysFromLeader":0},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-01-23T15:32:27.000Z","version":"v0.0.393","releaseId":"github-copilot-v0.0.393","rank":2,"lagDaysFromLeader":39},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2026-06-12T20:00:00.000Z","version":"2.7.0","releaseId":"kiro-2.7.0","rank":3,"lagDaysFromLeader":179},{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2026-06-24T18:54:40.112Z","version":"2.1.191","releaseId":"claude-code-2.1.191","rank":4,"lagDaysFromLeader":191}]}]},{"id":"permission-envelopes","name":"Permission envelopes","behaviorIds":["delegate-with-trust"],"featureIds":["sandbox-permissions"],"whyItTravels":"Delegation dies when the only options are 'trust everything' or 'approve every call'. An envelope — sandbox, allow-list, read-only, ask-once — lets people hand over more work without raising the blast radius. The mechanic is a fence you can see, not a terms-of-service paragraph. Once one vendor proved users would grant broader autonomy inside a fence, the rest of the category had to ship a fence too.","features":[{"featureId":"sandbox-permissions","name":"Sandboxing / Permission Modes","category":"Safety","description":"Sandboxed execution or granular permission/approval modes.","leader":"claude-code","shippedByCount":7,"spreadDays":489,"shipments":[{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-04-09T22:17:47.830Z","version":"0.2.67","releaseId":"claude-code-0.2.67","rank":1,"lagDaysFromLeader":0},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2025-08-07T17:29:06.000Z","version":"rust-v0.15.0","releaseId":"openai-codex-rust-v0.15.0","rank":2,"lagDaysFromLeader":120},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-01-13T18:58:23.000Z","version":"v0.0.381","releaseId":"github-copilot-v0.0.381","rank":3,"lagDaysFromLeader":279},{"tool":"cursor","toolDisplayName":"Cursor","date":"2026-02-17T00:00:00.000Z","version":"2.5","releaseId":"cursor-2.5","rank":4,"lagDaysFromLeader":313},{"tool":"antigravity-cli","toolDisplayName":"Antigravity CLI","date":"2026-06-03T21:37:06.000Z","version":"1.0.5","releaseId":"antigravity-cli-1.0.5","rank":5,"lagDaysFromLeader":420},{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2026-06-16T00:00:00.000Z","version":"3.2.16","releaseId":"windsurf-3.2.16","rank":6,"lagDaysFromLeader":432},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2026-08-11T21:00:00.000Z","version":"2.17.0","releaseId":"kiro-2.17.0","rank":7,"lagDaysFromLeader":489}]}]},{"id":"show-the-thinking","name":"Show the thinking","behaviorIds":["delegate-with-trust"],"featureIds":["extended-thinking"],"whyItTravels":"Verification gets more likely when the reasoning is inspectable. Visible thinking is not a party trick — it is a way to check the agent's work without standing up a second reviewer. People trust a long, consequential run more when they can watch the argument form. That is why extended-thinking toggles traveled: they turn a black box into something you can audit while it is still running.","features":[{"featureId":"extended-thinking","name":"Extended Thinking","category":"Reasoning","description":"A visible/toggleable extended-reasoning (\"thinking\") mode.","leader":"windsurf","shippedByCount":6,"spreadDays":511,"shipments":[{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2025-02-25T05:00:00.000Z","version":"1.3.9","releaseId":"windsurf-1.3.9","rank":1,"lagDaysFromLeader":0},{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-03-15T01:04:24.513Z","version":"0.2.44","releaseId":"claude-code-0.2.44","rank":2,"lagDaysFromLeader":18},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2025-07-09T07:06:51.000Z","version":"rust-v0.4.0","releaseId":"openai-codex-rust-v0.4.0","rank":3,"lagDaysFromLeader":134},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-01-07T16:11:21.000Z","version":"v0.0.375","releaseId":"github-copilot-v0.0.375","rank":4,"lagDaysFromLeader":316},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2026-06-05T04:00:00.000Z","version":"2.6.0","releaseId":"kiro-2.6.0","rank":5,"lagDaysFromLeader":465},{"tool":"antigravity-cli","toolDisplayName":"Antigravity CLI","date":"2026-07-21T02:33:39.000Z","version":"1.1.5","releaseId":"antigravity-cli-1.1.5","rank":6,"lagDaysFromLeader":511}]}]},{"id":"spawn-a-worker","name":"Spawn a worker","behaviorIds":["make-work-multiplayer"],"featureIds":["subagents","background-tasks"],"whyItTravels":"A pull request makes work visible to other people. Subagents and background tasks make work visible to other workers. The human stays on one thread; the extra labor happens off to the side, with its own state, and reports back. The mechanic is fan-out without forcing the user to become a process manager. Once Cursor and Claude Code showed that parallel agents felt like more throughput rather than more chaos, every rival had to answer it.","features":[{"featureId":"subagents","name":"Subagents / Parallel Agents","category":"Agentic","description":"Spawning independent sub-agents or running multiple agents in parallel.","leader":"claude-code","shippedByCount":8,"spreadDays":461,"shipments":[{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-04-18T22:33:26.843Z","version":"0.2.74","releaseId":"claude-code-0.2.74","rank":1,"lagDaysFromLeader":0},{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2025-10-16T04:00:00.000Z","version":"1.12.20","releaseId":"windsurf-1.12.20","rank":2,"lagDaysFromLeader":180},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2025-12-18T05:00:00.000Z","version":"1.23.0","releaseId":"kiro-1.23.0","rank":3,"lagDaysFromLeader":243},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-01-02T20:06:50.000Z","version":"v0.0.374","releaseId":"github-copilot-v0.0.374","rank":4,"lagDaysFromLeader":259},{"tool":"cursor","toolDisplayName":"Cursor","date":"2026-01-22T00:00:00.000Z","version":"2.4","releaseId":"cursor-2.4","rank":5,"lagDaysFromLeader":278},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2026-01-25T16:37:37.000Z","version":"rust-v0.90.0","releaseId":"openai-codex-rust-v0.90.0","rank":6,"lagDaysFromLeader":282},{"tool":"gemini-cli","toolDisplayName":"Gemini CLI","date":"2026-04-01T20:29:23.000Z","version":"v0.36.0","releaseId":"gemini-cli-v0.36.0","rank":7,"lagDaysFromLeader":348},{"tool":"antigravity-cli","toolDisplayName":"Antigravity CLI","date":"2026-07-24T03:02:18.000Z","version":"1.1.6","releaseId":"antigravity-cli-1.1.6","rank":8,"lagDaysFromLeader":461}]},{"featureId":"background-tasks","name":"Background Tasks","category":"Automation","description":"Long-running work executed in the background/async.","leader":"claude-code","shippedByCount":6,"spreadDays":369,"shipments":[{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-08-07T21:33:10.140Z","version":"1.0.71","releaseId":"claude-code-1.0.71","rank":1,"lagDaysFromLeader":0},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2025-10-28T17:07:14.000Z","version":"v0.0.353","releaseId":"github-copilot-v0.0.353","rank":2,"lagDaysFromLeader":82},{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2026-04-15T00:00:00.000Z","version":"2.0.44","releaseId":"windsurf-2.0.44","rank":3,"lagDaysFromLeader":250},{"tool":"cursor","toolDisplayName":"Cursor","date":"2026-04-24T00:00:00.000Z","version":"3.2","releaseId":"cursor-3.2","rank":4,"lagDaysFromLeader":259},{"tool":"antigravity-cli","toolDisplayName":"Antigravity CLI","date":"2026-07-01T22:59:00.000Z","version":"1.0.15","releaseId":"antigravity-cli-1.0.15","rank":5,"lagDaysFromLeader":328},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2026-08-11T21:00:00.000Z","version":"2.17.0","releaseId":"kiro-2.17.0","rank":6,"lagDaysFromLeader":369}]}]},{"id":"protocol-not-plugin","name":"Protocol, not plugin","behaviorIds":["extend-without-rewriting"],"featureIds":["mcp-support"],"whyItTravels":"A plugin marketplace is a vendor's garden. A protocol is a pipe anyone can attach to. MCP traveled because it let tools inherit the rest of the internet's connectors instead of rebuilding each one. The mechanic is interoperability as the product: once users could plug the same server into two agents, staying on a tool that could not speak the protocol started to feel like a tax. That is network-density machinery, which is why it copied faster than most features on this list.","features":[{"featureId":"mcp-support","name":"MCP Support","category":"Extensibility","description":"Model Context Protocol client/server support to connect external tools & data.","leader":"windsurf","shippedByCount":6,"spreadDays":384,"shipments":[{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2025-02-13T05:00:00.000Z","version":"1.3.3","releaseId":"windsurf-1.3.3","rank":1,"lagDaysFromLeader":0},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2025-07-23T01:00:57.000Z","version":"rust-v0.9.0","releaseId":"openai-codex-rust-v0.9.0","rank":2,"lagDaysFromLeader":160},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2025-12-18T05:00:00.000Z","version":"1.23.0","releaseId":"kiro-1.23.0","rank":3,"lagDaysFromLeader":308},{"tool":"gemini-cli","toolDisplayName":"Gemini CLI","date":"2026-01-07T02:07:44.000Z","version":"v0.23.0","releaseId":"gemini-cli-v0.23.0","rank":4,"lagDaysFromLeader":328},{"tool":"cursor","toolDisplayName":"Cursor","date":"2026-03-03T00:00:00.000Z","version":"2.6","releaseId":"cursor-2.6","rank":5,"lagDaysFromLeader":383},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-03-03T18:12:57.000Z","version":"v0.0.421","releaseId":"github-copilot-v0.0.421","rank":6,"lagDaysFromLeader":384}]}]},{"id":"packaged-recipes","name":"Packaged recipes","behaviorIds":["extend-without-rewriting"],"featureIds":["skills-plugins","slash-commands","hooks"],"whyItTravels":"Custom slash commands, skills, and lifecycle hooks are not power-user chrome. They let a behavior get written once and reused without opening the agent's internals. Contribution happens as a byproduct of solving your own problem, then sharing the recipe. The mechanic increases contribution without a giant reward — the same reason Stories and sticker packs spread. Tools that shipped a skill, command, or hook format were copying a way to let the crowd extend the product.","features":[{"featureId":"skills-plugins","name":"Skills / Plugins","category":"Extensibility","description":"Packaged, reusable skills or a plugin system.","leader":"claude-code","shippedByCount":7,"spreadDays":250,"shipments":[{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-10-09T15:43:28.593Z","version":"2.0.12","releaseId":"claude-code-2.0.12","rank":1,"lagDaysFromLeader":0},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2025-12-10T22:28:39.000Z","version":"rust-v0.69.0","releaseId":"openai-codex-rust-v0.69.0","rank":2,"lagDaysFromLeader":62},{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2026-01-12T05:00:00.000Z","version":"1.13.6","releaseId":"windsurf-1.13.6","rank":3,"lagDaysFromLeader":95},{"tool":"gemini-cli","toolDisplayName":"Gemini CLI","date":"2026-01-21T05:15:12.000Z","version":"v0.25.0","releaseId":"gemini-cli-v0.25.0","rank":4,"lagDaysFromLeader":104},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-01-22T02:31:11.000Z","version":"v0.0.389","releaseId":"github-copilot-v0.0.389","rank":5,"lagDaysFromLeader":104},{"tool":"cursor","toolDisplayName":"Cursor","date":"2026-02-17T00:00:00.000Z","version":"2.5","releaseId":"cursor-2.5","rank":6,"lagDaysFromLeader":130},{"tool":"antigravity-cli","toolDisplayName":"Antigravity CLI","date":"2026-06-17T02:48:46.000Z","version":"1.0.9","releaseId":"antigravity-cli-1.0.9","rank":7,"lagDaysFromLeader":250}]},{"featureId":"slash-commands","name":"Custom Slash Commands","category":"UX","description":"User-definable \"/command\" shortcuts / reusable prompts.","leader":"claude-code","shippedByCount":8,"spreadDays":497,"shipments":[{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-03-05T17:48:20.869Z","version":"0.2.31","releaseId":"claude-code-0.2.31","rank":1,"lagDaysFromLeader":0},{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2025-05-06T04:00:00.000Z","version":"1.8.2","releaseId":"windsurf-1.8.2","rank":2,"lagDaysFromLeader":61},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2025-08-20T05:48:52.000Z","version":"rust-v0.23.0","releaseId":"openai-codex-rust-v0.23.0","rank":3,"lagDaysFromLeader":168},{"tool":"cursor","toolDisplayName":"Cursor","date":"2025-09-12T01:25:00.000Z","version":"1.6","releaseId":"cursor-1.6","rank":4,"lagDaysFromLeader":190},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2025-09-29T18:59:51.000Z","version":"v0.0.329","releaseId":"github-copilot-v0.0.329","rank":5,"lagDaysFromLeader":208},{"tool":"gemini-cli","toolDisplayName":"Gemini CLI","date":"2026-02-10T21:59:54.000Z","version":"v0.28.0","releaseId":"gemini-cli-v0.28.0","rank":6,"lagDaysFromLeader":342},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2026-06-12T20:00:00.000Z","version":"2.7.0","releaseId":"kiro-2.7.0","rank":7,"lagDaysFromLeader":464},{"tool":"antigravity-cli","toolDisplayName":"Antigravity CLI","date":"2026-07-16T01:01:57.000Z","version":"1.1.3","releaseId":"antigravity-cli-1.1.3","rank":8,"lagDaysFromLeader":497}]},{"featureId":"hooks","name":"Hooks","category":"Extensibility","description":"User-defined scripts that run on lifecycle events (pre/post tool, etc.).","leader":"claude-code","shippedByCount":7,"spreadDays":381,"shipments":[{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-06-30T20:29:03.323Z","version":"1.0.38","releaseId":"claude-code-1.0.38","rank":1,"lagDaysFromLeader":0},{"tool":"cursor","toolDisplayName":"Cursor","date":"2025-09-29T05:08:58.822Z","version":"1.7","releaseId":"cursor-1.7","rank":2,"lagDaysFromLeader":90},{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2025-12-10T05:00:00.000Z","version":"1.12.41","releaseId":"windsurf-1.12.41","rank":3,"lagDaysFromLeader":162},{"tool":"gemini-cli","toolDisplayName":"Gemini CLI","date":"2026-01-14T13:27:15.000Z","version":"v0.24.0","releaseId":"gemini-cli-v0.24.0","rank":4,"lagDaysFromLeader":198},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-02-03T21:35:14.000Z","version":"v0.0.402","releaseId":"github-copilot-v0.0.402","rank":5,"lagDaysFromLeader":218},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2026-05-08T23:09:55.000Z","version":"rust-v0.130.0","releaseId":"openai-codex-rust-v0.130.0","rank":6,"lagDaysFromLeader":312},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2026-07-17T00:00:00.000Z","version":"2.13.0","releaseId":"kiro-2.13.0","rank":7,"lagDaysFromLeader":381}]}]},{"id":"persistent-instructions","name":"Persistent instructions","behaviorIds":["keep-context-alive"],"featureIds":["memory-files"],"whyItTravels":"AGENTS.md and CLAUDE.md are not documentation features. They are a way for work to leave enough context behind that the next session — or the next person — can pick it up without another meeting. The mechanic is memory that lives in the repo, not in a chat transcript that dies when you close the tab. Once one tool taught users to keep a file the agent always reads, every other tool had to honor the same file or lose the project's accumulated taste.","features":[{"featureId":"memory-files","name":"Project Memory Files","category":"Context","description":"Persistent instruction/memory files (AGENTS.md, CLAUDE.md, rules).","leader":"windsurf","shippedByCount":6,"spreadDays":610,"shipments":[{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2024-12-11T05:00:00.000Z","version":"1.1.0","releaseId":"windsurf-1.1.0","rank":1,"lagDaysFromLeader":0},{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-03-25T20:44:47.993Z","version":"0.2.54","releaseId":"claude-code-0.2.54","rank":2,"lagDaysFromLeader":105},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-01-19T18:54:45.000Z","version":"v0.0.385","releaseId":"github-copilot-v0.0.385","rank":3,"lagDaysFromLeader":405},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2026-02-12T18:29:57.000Z","version":"rust-v0.100.0","releaseId":"openai-codex-rust-v0.100.0","rank":4,"lagDaysFromLeader":429},{"tool":"antigravity-cli","toolDisplayName":"Antigravity CLI","date":"2026-07-24T03:02:18.000Z","version":"1.1.6","releaseId":"antigravity-cli-1.1.6","rank":5,"lagDaysFromLeader":590},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2026-08-12T21:00:00.000Z","version":"2.18.0","releaseId":"kiro-2.18.0","rank":6,"lagDaysFromLeader":610}]}]},{"id":"live-world-input","name":"Live world input","behaviorIds":["keep-context-alive"],"featureIds":["web-search","image-input","voice-input"],"whyItTravels":"An agent trapped in the repo is guessing. Web fetch, screenshots, and voice are the same mechanic in different costumes: let the model see the world the user is already looking at. That collapses the 'paste more context' ritual and makes the next turn cheaper. Vision and search copied quickly because users felt the absence immediately — a coding agent that cannot look at the error screenshot or the live docs is doing half a job.","features":[{"featureId":"web-search","name":"Web Search / Fetch","category":"Context","description":"Built-in web search or fetching a URL for live context.","leader":"windsurf","shippedByCount":4,"spreadDays":509,"shipments":[{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2025-01-17T05:00:00.000Z","version":"1.2.1","releaseId":"windsurf-1.2.1","rank":1,"lagDaysFromLeader":0},{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-03-21T18:04:02.580Z","version":"0.2.53","releaseId":"claude-code-0.2.53","rank":2,"lagDaysFromLeader":64},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-01-02T20:06:50.000Z","version":"v0.0.374","releaseId":"github-copilot-v0.0.374","rank":3,"lagDaysFromLeader":351},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2026-06-09T20:13:29.000Z","version":"rust-v0.139.0","releaseId":"openai-codex-rust-v0.139.0","rank":4,"lagDaysFromLeader":509}]},{"featureId":"image-input","name":"Image / Vision Input","category":"Multimodal","description":"Pasting or attaching images as input.","leader":"windsurf","shippedByCount":5,"spreadDays":580,"shipments":[{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2024-11-27T05:00:00.000Z","version":"1.0.5","releaseId":"windsurf-1.0.5","rank":1,"lagDaysFromLeader":0},{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-04-02T00:24:59.952Z","version":"0.2.59","releaseId":"claude-code-0.2.59","rank":2,"lagDaysFromLeader":126},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2025-10-02T21:51:01.000Z","version":"v0.0.333","releaseId":"github-copilot-v0.0.333","rank":3,"lagDaysFromLeader":310},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2025-12-02T22:15:06.000Z","version":"rust-v0.64.0","releaseId":"openai-codex-rust-v0.64.0","rank":4,"lagDaysFromLeader":371},{"tool":"antigravity-cli","toolDisplayName":"Antigravity CLI","date":"2026-06-30T02:28:33.000Z","version":"1.0.14","releaseId":"antigravity-cli-1.0.14","rank":5,"lagDaysFromLeader":580}]},{"featureId":"voice-input","name":"Voice Input","category":"Multimodal","description":"Speaking to the tool (speech-to-text input).","leader":"windsurf","shippedByCount":5,"spreadDays":392,"shipments":[{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2025-07-17T04:00:00.000Z","version":"1.11.0","releaseId":"windsurf-1.11.0","rank":1,"lagDaysFromLeader":0},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2026-02-25T17:21:45.000Z","version":"rust-v0.105.0","releaseId":"openai-codex-rust-v0.105.0","rank":2,"lagDaysFromLeader":224},{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2026-03-06T22:47:03.532Z","version":"2.1.71","releaseId":"claude-code-2.1.71","rank":3,"lagDaysFromLeader":233},{"tool":"cursor","toolDisplayName":"Cursor","date":"2026-04-13T00:00:00.000Z","version":"3.1","releaseId":"cursor-3.1","rank":4,"lagDaysFromLeader":270},{"tool":"kiro","toolDisplayName":"Kiro CLI","date":"2026-08-12T21:00:00.000Z","version":"2.18.0","releaseId":"kiro-2.18.0","rank":5,"lagDaysFromLeader":392}]}]},{"id":"native-habitat","name":"Native habitat","behaviorIds":["meet-user-in-habitat"],"featureIds":["vscode-extension","jetbrains","git-pr-integration","headless-mode","subscription-plan-auth"],"whyItTravels":"The mechanic is not 'we built an IDE plugin'. It is showing up in the habitat where the work already lives so using the agent does not feel like switching products. Editor extensions, git/PR actions, CI headless mode, and 'log in with the plan you already pay for' are all the same move: remove a context switch. Consumer apps learned this with sharing sheets and camera rolls. Agent tools learned it by embedding in VS Code, JetBrains, GitHub, and the subscription people already have.","features":[{"featureId":"vscode-extension","name":"VS Code Extension","category":"IDE","description":"A first-party Visual Studio Code integration.","leader":"claude-code","shippedByCount":2,"spreadDays":136,"shipments":[{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-09-29T14:41:14.895Z","version":"2.0.0","releaseId":"claude-code-2.0.0","rank":1,"lagDaysFromLeader":0},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-02-12T22:09:48.000Z","version":"v0.0.409","releaseId":"github-copilot-v0.0.409","rank":2,"lagDaysFromLeader":136}]},{"featureId":"jetbrains","name":"JetBrains Support","category":"IDE","description":"IntelliJ/PyCharm/WebStorm (JetBrains) integration.","leader":"windsurf","shippedByCount":1,"spreadDays":0,"shipments":[{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2024-11-13T05:00:00.000Z","version":"1.0.2","releaseId":"windsurf-1.0.2","rank":1,"lagDaysFromLeader":0}]},{"featureId":"git-pr-integration","name":"Git / PR Integration","category":"VCS","description":"First-class git operations or opening/reviewing pull requests.","leader":"windsurf","shippedByCount":4,"spreadDays":401,"shipments":[{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2025-04-02T04:00:00.000Z","version":"1.6.1","releaseId":"windsurf-1.6.1","rank":1,"lagDaysFromLeader":0},{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2026-01-27T00:39:43.153Z","version":"2.1.20","releaseId":"claude-code-2.1.20","rank":2,"lagDaysFromLeader":300},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-02-27T18:47:56.000Z","version":"v0.0.420","releaseId":"github-copilot-v0.0.420","rank":3,"lagDaysFromLeader":332},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2026-05-07T17:02:13.000Z","version":"rust-v0.129.0","releaseId":"openai-codex-rust-v0.129.0","rank":4,"lagDaysFromLeader":401}]},{"featureId":"headless-mode","name":"Headless / Non-interactive Mode","category":"Automation","description":"Running non-interactively for scripting/CI (print mode, -p, exec).","leader":"claude-code","shippedByCount":5,"spreadDays":475,"shipments":[{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-04-09T00:04:46.906Z","version":"0.2.66","releaseId":"claude-code-0.2.66","rank":1,"lagDaysFromLeader":0},{"tool":"openai-codex","toolDisplayName":"OpenAI Codex CLI","date":"2025-07-19T00:35:28.000Z","version":"rust-v0.8.0","releaseId":"openai-codex-rust-v0.8.0","rank":2,"lagDaysFromLeader":101},{"tool":"github-copilot","toolDisplayName":"GitHub Copilot CLI","date":"2026-04-20T17:05:34.000Z","version":"v1.0.33","releaseId":"github-copilot-v1.0.33","rank":3,"lagDaysFromLeader":377},{"tool":"windsurf","toolDisplayName":"Devin Desktop","date":"2026-04-28T00:00:00.000Z","version":"2.1.29","releaseId":"windsurf-2.1.29","rank":4,"lagDaysFromLeader":384},{"tool":"antigravity-cli","toolDisplayName":"Antigravity CLI","date":"2026-07-28T00:59:10.000Z","version":"1.1.8","releaseId":"antigravity-cli-1.1.8","rank":5,"lagDaysFromLeader":475}]},{"featureId":"subscription-plan-auth","name":"Subscription Login (Pro/Max)","category":"Access","description":"Signing in with a consumer subscription instead of an API key.","leader":"claude-code","shippedByCount":1,"spreadDays":0,"shipments":[{"tool":"claude-code","toolDisplayName":"Claude Code","date":"2025-05-01T16:23:49.548Z","version":"0.2.96","releaseId":"claude-code-0.2.96","rank":1,"lagDaysFromLeader":0}]}]}]}