<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged cursor</title>
<link>https://coderlegion.com/tag/cursor</link>
<description>Powered by Question2Answer</description>
<item>
<title>Claude Code &amp; Cursor: Why Your AI Agent Lies to You (And Our 3-Tier Adversarial Tribunal Skill)</title>
<link>https://coderlegion.com/31433/claude-code-cursor-why-your-ai-agent-lies-to-you-and-our-3-tier-adversarial-tribunal-skill</link>
<description>&lt;p&gt;Last Tuesday at 2:14 AM, my autonomous coding agent proudly handed me a Python webhook ingestion worker and gave itself a &lt;strong&gt;98/100 confidence score&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&quot;Production-ready, fully idempotent, and resilient to network partitions,&quot;&lt;/em&gt; it assured me.&lt;/p&gt;
&lt;p&gt;Ten minutes later, under a simulated 50x concurrency spike, that same worker deadlocked two Redis streams, silently dropped 14% of the batch during a mid-transaction timeout, and swallowed the exception because it had wrapped the entire handler in a broad fallback block.&lt;/p&gt;
&lt;p&gt;If you build with AI coding agents (&lt;strong&gt;Hermes Agent&lt;/strong&gt;, &lt;strong&gt;Claude Code&lt;/strong&gt;, &lt;strong&gt;Cursor&lt;/strong&gt;, &lt;strong&gt;OpenCode&lt;/strong&gt;), you already know this pain. The problem isn't that frontier LLMs lack engineering knowledge. The problem is &lt;strong&gt;First-Draft Sycophancy&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Here is why asking an AI to &lt;em&gt;&quot;review its own code&quot;&lt;/em&gt; fails by design—and how I open-sourced &lt;strong&gt;&lt;code&gt;critic-refine&lt;/code&gt; v1.1.0&lt;/strong&gt;, a 3-tier adversarial verification skill that forces your agent into a ruthless internal tribunal before it writes a single line of production code.&lt;/p&gt;
&lt;p&gt;👉 &lt;strong&gt;GitHub Repository (MIT):&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/manny-ruesch/critic-refine-skill&quot;&gt;manny-ruesch/critic-refine-skill&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;1-the-anatomy-of-first-draft-sycophancy-&quot;&gt;1. The Anatomy of &quot;First-Draft Sycophancy&quot;&lt;/h3&gt;
&lt;p&gt;When you ask an LLM to solve a complex system design or concurrency problem in a single pass, two cognitive traps trigger immediately:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Retroactive Rationalization:&lt;/strong&gt; Autoregressive models commit to an architectural path within the first 150 tokens. Once the function signatures and boilerplate start streaming, the model spends the rest of its attention budget justifying why its initial choice is right.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confirmation Bias in Self-Review:&lt;/strong&gt; When you prompt &lt;em&gt;&quot;Now review your code for bugs,&quot;&lt;/em&gt; the model reads its own newly generated boilerplate &lt;strong&gt;alongside its own persuasive explanations&lt;/strong&gt;. It falls in love with its own prose and rubber-stamps the output (&lt;code&gt;LGTM!&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To get genuine staff-level engineering out of an agent, you have to break the single-persona loop.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-enter-critic-refine-v1-1-0-the-3-tier-adversarial-engine&quot;&gt;2. Enter &lt;code&gt;critic-refine&lt;/code&gt; v1.1.0: The 3-Tier Adversarial Engine&lt;/h3&gt;
&lt;p&gt;Instead of letting the agent jump straight into writing verbose code, &lt;code&gt;critic-refine&lt;/code&gt; hijacks the cognitive workflow and enforces a strict &lt;strong&gt;3-phase adversarial tribunal&lt;/strong&gt; inside the model's reasoning space (or across isolated sub-agents):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;+-------------------------------------------------------------------------+
| PHASE 1: THE GENERATOR (Dense Logical Blueprint v1)                     |
| -&amp;gt; Function signatures, state structs, concurrency locks, SQL/API flow  |
| -&amp;gt; Zero boilerplate, zero comments — preserves context window attention |
+------------------------------------+------------------------------------+
                                     |
                                     v
+-------------------------------------------------------------------------+
| PHASE 2: THE POLYMORPHIC CRITIC (Ruthless Domain Inspection)            |
| -&amp;gt; Dynamically instantiates the harshest domain persona:                |
|    (Principal Rust Systems Eng, Staff DBA, Lead SecOps, DistSys Arch)   |
| -&amp;gt; Anti-Complacency Rule: FORBIDDEN from approving Draft v1 as-is       |
| -&amp;gt; Must surface &amp;gt;= 3 concrete failure vectors (race conditions, O(n^2), |
|    partial network partitions, memory leaks, API hallucinations)        |
| -&amp;gt; Optional `mode:&amp;lt;focus&amp;gt;` allocates 80% of attack surface to 1 axis    |
+------------------------------------+------------------------------------+
                                     |
                                     v
+-------------------------------------------------------------------------+
| PHASE 3: THE ARBITRATING JUDGE (Mental Dry-Run &amp;amp; Deductive Scoring)     |
| -&amp;gt; Simulates hostile execution (null payloads, 100x concurrency spike,  |
|    mid-transaction disk crash)                                          |
| -&amp;gt; Patches the architecture (up to 2 internal feedback loops)           |
| -&amp;gt; Explicitly documents every technical trade-off sacrificed            |
| -&amp;gt; Applies a strict deductive rubric starting from 100 pts              |
+-------------------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;why-phase-1-forbids-boilerplate&quot;&gt;Why Phase 1 Forbids Boilerplate&lt;/h4&gt;
&lt;p&gt;If the Generator writes 300 lines of boilerplate in Phase 1, it pollutes the context window and anchors the Critic. By forcing &lt;strong&gt;Draft v1&lt;/strong&gt; to be a &lt;em&gt;dense logical blueprint&lt;/em&gt; (only signatures, lock boundaries, state transitions, and query complexity), the Critic has nowhere to hide and can attack pure architecture.&lt;/p&gt;
&lt;h4 id=&quot;the-anti-complacency-rule&quot;&gt;The Anti-Complacency Rule&lt;/h4&gt;
&lt;p&gt;In Phase 2, the Polymorphic Critic is &lt;strong&gt;explicitly forbidden&lt;/strong&gt; from validating Draft v1 as-is. Whether it adopts the persona of a &lt;em&gt;Staff DBA&lt;/em&gt; inspecting lock escalation or a &lt;em&gt;Lead SecOps Pentester&lt;/em&gt; auditing JWT middleware, it &lt;strong&gt;must&lt;/strong&gt; identify at least &lt;strong&gt;3 concrete failure vectors&lt;/strong&gt; before Phase 3 can begin.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-killing-confirmation-bias-the-zero-context-blind-audit-&quot;&gt;3. Killing Confirmation Bias: The &quot;Zero-Context Blind Audit&quot;&lt;/h3&gt;
&lt;p&gt;What happens when you are refactoring &lt;strong&gt;3 or more files&lt;/strong&gt; across a repository? Even an internal scratchpad can suffer from context bleed.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;v1.1.0&lt;/code&gt;, when &lt;code&gt;critic-refine&lt;/code&gt; detects &lt;code&gt;&amp;gt;= 3&lt;/code&gt; impacted files (or when you pass the &lt;code&gt;deep&lt;/code&gt; flag), it triggers a &lt;strong&gt;Zero-Context Blind Audit&lt;/strong&gt; via &lt;code&gt;delegate_task&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It spawns an &lt;strong&gt;isolated sub-agent&lt;/strong&gt; for the Critic.&lt;/li&gt;
&lt;li&gt;It passes &lt;strong&gt;ONLY&lt;/strong&gt; the user's original prompt and the raw Draft v1 blueprint.&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;strips out all of the Generator's justifications and reasoning&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because the sub-agent Critic has zero emotional or contextual attachment to &lt;em&gt;why&lt;/em&gt; the code was written that way, it tears the blueprint apart like a real adversarial code review.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;4-the-anti-sycophancy-deductive-rubric&quot;&gt;4. The Anti-Sycophancy Deductive Rubric&lt;/h3&gt;
&lt;p&gt;Ever notice how LLMs always rate their own solutions &lt;code&gt;95/100&lt;/code&gt; or &lt;code&gt;98/100&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;critic-refine&lt;/code&gt; v1.1.0, the Arbitrating Judge is banned from inventing arbitrary &quot;vibes-based&quot; scores. It starts at &lt;strong&gt;100 points&lt;/strong&gt; and must apply a strict mathematical deduction:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-5 pts&lt;/code&gt;&lt;/strong&gt; per unverified environment or infrastructure assumption (e.g., assuming Redis is configured with &lt;code&gt;noeviction&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-5 pts&lt;/code&gt;&lt;/strong&gt; per non-isolated critical external dependency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-10 pts&lt;/code&gt;&lt;/strong&gt; per edge case delegated to the caller instead of handled in-module.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Furthermore, every single flaw caught by the Critic must be mapped &lt;strong&gt;1:1&lt;/strong&gt; to its exact fix in the final output:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;[Concurrency]&lt;/strong&gt; : &lt;em&gt;Unbounded &lt;code&gt;asyncio.gather&lt;/code&gt; on webhook batch risks exhausting DB connection pool under 100x spike&lt;/em&gt; → &lt;strong&gt;Injected &lt;code&gt;asyncio.Semaphore(20)&lt;/code&gt; + exponential jitter backoff on pool acquisition.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;5-the-complete-skill-md-specification-v1-1-0-&quot;&gt;5. The Complete &lt;code&gt;SKILL.md&lt;/code&gt; Specification (v1.1.0)&lt;/h3&gt;
&lt;p&gt;You can drop this directly into &lt;strong&gt;Hermes Agent&lt;/strong&gt; (&lt;code&gt;~/.hermes/skills/software-development/critic-refine/SKILL.md&lt;/code&gt;), &lt;strong&gt;Claude Code&lt;/strong&gt; (&lt;code&gt;.claude/commands/critic-refine.md&lt;/code&gt;), or &lt;strong&gt;Cursor&lt;/strong&gt; (&lt;code&gt;.cursor/rules/&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;---
name: critic-refine
description: &quot;High-rigor 3-tier adversarial verification workflow (Generator, Polymorphic Critic, Judge). Trigger automatically on critical code, distributed architecture, concurrency, security-sensitive logic, complex algorithms, strategic technical trade-offs, or when the user invokes 'critic-refine', 'deep', or 'mode:&amp;lt;focus&amp;gt;'.&quot;
version: 1.1.0
author: Manny, Hermes Agent
license: MIT
platforms: [linux, macos, windows]
metadata:
  hermes:
    tags: [critic, debate, multi-agent, verification, audit, quality, trade-offs]
---

# Critic-Refine Skill (v1.1.0)

Workflow d'assurance qualité extrême simulant un comité d'experts adversariaux (Rédacteur, Critique Polymorphe, Juge Arbitre) pour délivrer des solutions certifiées niveau production.

## Protocole d'Exécution Interne (Le Moteur Adversarial 3-Tiers)

1. **Phase 1 : L'Agent Rédacteur (Blueprint Logique v1)** — Formalise un *Blueprint technique dense* (signatures, structures d'état, concurrence, flux algorithmiques) sans boilerplate.
2. **Phase 2 : Le Critique Polymorphe (Inspection Impitoyable Ciblée)** — Instancie l'expert le plus intransigeant du domaine. Concentre 80% de l'audit sur `mode:&amp;lt;critère&amp;gt;` si spécifié. **Interdiction formelle de valider le Draft v1 tel quel** : identifie au minimum 3 vecteurs de défaillance concrets.
3. **Phase 3 : Le Juge Arbitre (Dry-Run, Patching et Compromis)** — Simule l'exécution avec des entrées hostiles (null, débordements, pic 100x, crash disque à mi-transaction), applique les patchs (max 2 boucles) et explicite les compromis.
4. **Mode Sous-Agents Isolés (`delegate_task` — Deep-Dive)** — Si `&amp;gt;= 3 fichiers` ou flag `deep`, lance un **Zero-Context Blind Audit** en ne transmettant que le besoin initial et le Draft v1 sans les justifications du Rédacteur.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;(Full French and English documentation available in the &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/manny-ruesch/critic-refine-skill&quot;&gt;GitHub repo&lt;/a&gt;).&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-put-it-to-the-test-i-want-your-feedback-&quot;&gt;🧪 Put It to the Test (I Want Your Feedback!)&lt;/h3&gt;
&lt;p&gt;I open-sourced &lt;code&gt;critic-refine&lt;/code&gt; v1.1.0 today under the MIT License because I want to see where it breaks and how we can make the tribunal even sharper.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Install it in 10 seconds:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p ~/.hermes/skills/software-development/critic-refine
curl -sL https://raw.githubusercontent.com/manny-ruesch/critic-refine-skill/main/SKILL.md \
  -o ~/.hermes/skills/software-development/critic-refine/SKILL.md
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;I’d love your feedback in the comments or via GitHub Issues:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Throw your nastiest prompt at it&lt;/strong&gt; (distributed locks, race conditions, auth middleware) using &lt;code&gt;/critic-refine mode:security&lt;/code&gt; or &lt;code&gt;/critic-refine mode:low-latency&lt;/code&gt;—what flaws did the Polymorphic Critic catch that a normal prompt missed?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Deductive Rubric:&lt;/strong&gt; Are &lt;code&gt;-5&lt;/code&gt; / &lt;code&gt;-5&lt;/code&gt; / &lt;code&gt;-10&lt;/code&gt; the right penalties, or what other architectural sins should automatically dock points from the Judge's score?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;🔗 &lt;strong&gt;Star, fork, or roast the skill on GitHub:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/manny-ruesch/critic-refine-skill&quot;&gt;https://github.com/manny-ruesch/critic-refine-skill&lt;/a&gt;&lt;/p&gt;
</description>
<category>Tutorials</category>
<guid isPermaLink="true">https://coderlegion.com/31433/claude-code-cursor-why-your-ai-agent-lies-to-you-and-our-3-tier-adversarial-tribunal-skill</guid>
<pubDate>Fri, 16 Oct 2026 18:36:10 +0000</pubDate>
</item>
<item>
<title>Is AI Making Us Worse Developers?</title>
<link>https://coderlegion.com/23379/is-ai-making-us-worse-developers</link>
<description>&lt;p&gt;I use Cursor every day, and honestly, I can not imagine going back to writing everything manually. AI has made me much faster.&lt;/p&gt;
&lt;p&gt;But lately I have noticed something.&lt;/p&gt;
&lt;p&gt;When I used to write code myself, I knew my codebase inside out. If a bug came up, I could usually point to the exact file or logic because I had written it and understood how everything was connected.&lt;/p&gt;
&lt;p&gt;Now the workflow is simple. Describe the requirement, get the code, review it quickly, test it, and move on.&lt;/p&gt;
&lt;p&gt;The feature gets built faster, but I do not always build the same understanding of the code.&lt;/p&gt;
&lt;p&gt;What worries me more is the dependency I am seeing. I have come across developers who struggle to write even a few lines of code if Cursor or Claude isn't available. That doesn't feel right.&lt;/p&gt;
&lt;p&gt;AI should make us more productive, not replace our ability to think and solve problems.&lt;/p&gt;
&lt;p&gt;I am not saying we should stop using AI. I just think we should spend more time understanding the code it generates instead of accepting it blindly. Otherwise, we might become great at prompting but not so great at debugging or building things from scratch.&lt;/p&gt;
&lt;p&gt;Am I the only one feeling this, or have you noticed it too?&lt;/p&gt;
</description>
<category>Discussions</category>
<guid isPermaLink="true">https://coderlegion.com/23379/is-ai-making-us-worse-developers</guid>
<pubDate>Fri, 24 Jul 2026 04:45:27 +0000</pubDate>
</item>
<item>
<title>When the Agent First Picked Up Its Own Tools</title>
<link>https://coderlegion.com/17757/when-the-agent-first-picked-up-its-own-tools</link>
<description>&lt;hr&gt;
&lt;p&gt;title: When the Agent First Picked Up Its Own Tools&lt;br&gt;
published: true&lt;br&gt;
description: &quot;tool_calls_count 0 to 7 - how injecting fcop-mcp into the Cursor Agent SDK turned a passive file-scanner into an agent that receives notifications, calls tools, and files its own reports.&quot;&lt;br&gt;
tags: ai, agents, cursor, mcp&lt;br&gt;
cover_image: &lt;a rel=&quot;nofollow&quot; href=&quot;https://raw.githubusercontent.com/joinwell52-AI/FCoP/main/assets/when-the-agent-picked-up-its-tools-devto-cover.png&quot;&gt;https://raw.githubusercontent.com/joinwell52-AI/FCoP/main/assets/when-the-agent-picked-up-its-tools-devto-cover.png&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;canonical-url-https-github-com-joinwell52-ai-fcop-blob-main-essays-when-the-agent-picked-up-its-tools-en-md&quot;&gt;canonical_url: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/joinwell52-AI/FCoP/blob/main/essays/when-the-agent-picked-up-its-tools.en.md&quot;&gt;https://github.com/joinwell52-AI/FCoP/blob/main/essays/when-the-agent-picked-up-its-tools.en.md&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Cursor Agent SDK + FCoP: From Passive Scanning to Active Communication&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;This is a follow-up to a &lt;a rel=&quot;nofollow&quot; href=&quot;https://forum.cursor.com/t/feature-request-chat-notify-primitive-we-already-have-the-mailbox-files-we-just-need-the-doorbell/158480&quot;&gt;Cursor Forum feature request&lt;/a&gt; I posted in late April 2026: &lt;em&gt;&quot;we already have the mailbox (files), we just need the doorbell.&quot;&lt;/em&gt; Colin recommended the Agent SDK. We built CodeFlow on top of it. This is what happened 18 days later.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;i-three-stages-three-fundamentally-different-things&quot;&gt;I. Three stages — three fundamentally different things&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Stage One: OCR + CDP (passive scanning)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;FCoP's early multi-agent workflow ran on a Python script that used &lt;strong&gt;OCR + CDP&lt;/strong&gt; (Chrome DevTools Protocol) to simulate human clicks on the Cursor UI, forcing agents to &quot;see&quot; new tasks. It polled every few seconds. The screen had to stay on. The window couldn't be obscured.&lt;/p&gt;
&lt;p&gt;This was &lt;strong&gt;passive scanning&lt;/strong&gt;. The agent wasn't notified — it was pushed in front of a task by brute force. This wasn't communication. It was surveillance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stage Two: The SDK pipe worked — but the agent could only &quot;chat&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CodeFlow replaced OCR/CDP with the &lt;strong&gt;Cursor Agent SDK&lt;/strong&gt; (&lt;code&gt;@cursor/sdk&lt;/code&gt;): &lt;code&gt;InboxWatcher&lt;/code&gt; watches for files landing, &lt;code&gt;agent.send()&lt;/code&gt; delivers tasks directly to the agent. Real notification. No more scanning.&lt;/p&gt;
&lt;p&gt;But one line in every session JSON stayed the same:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;tool_calls_count&quot;: 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The agent received the message, &quot;replied&quot; with something, and exited. No files written. No reports created.&lt;/p&gt;
&lt;p&gt;The reason: &lt;code&gt;MCPInjector&lt;/code&gt; was in &lt;code&gt;mode=&quot;stub&quot;&lt;/code&gt; — no actual MCP server was injected into the SDK. The agent had no &lt;code&gt;write_report&lt;/code&gt;, no &lt;code&gt;write_task&lt;/code&gt;. No tools means no action. Only chat.&lt;/p&gt;
&lt;p&gt;The doorbell rang. The agent answered with empty hands.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stage Three: MCP injection — the first real communication&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Passive scanning → real notification → real notification + tool calls + filed report.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tool_calls_count: 0 → 7&lt;/code&gt; is not just a number changing — it's the qualitative shift from &quot;being pushed along&quot; to &quot;acting on its own.&quot;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;ii-finding-the-door&quot;&gt;II. Finding the door&lt;/h3&gt;
&lt;p&gt;The key was reading the Cursor SDK type definitions.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;agent.d.ts&lt;/code&gt;, &lt;code&gt;SendOptions&lt;/code&gt; had an easily-overlooked field:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;interface SendOptions {
    model?: ModelSelection;
    mcpServers?: Record&amp;lt;string, McpServerConfig&amp;gt;;  // ← here
    local?: { force?: boolean };
    // ...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;agent.send(text, options)&lt;/code&gt; can receive MCP server configuration at call time. No need to refactor anything. Every send, just pass the MCP server config directly.&lt;/p&gt;
&lt;p&gt;At the same time, &lt;code&gt;fcop-mcp&lt;/code&gt;'s entry point confirmed the other half:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# python -m fcop_mcp → stdio MCP server
# uses FCOP_PROJECT_DIR environment variable to locate the project root
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Solution: in &lt;code&gt;_buildSendOptions()&lt;/code&gt;, inject &lt;code&gt;fcop-mcp&lt;/code&gt; as a stdio MCP server.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;iii-three-changes-one-breakthrough&quot;&gt;III. Three changes, one breakthrough&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;AgentSdkAdapter.ts&lt;/code&gt;&lt;/strong&gt;: Add &lt;code&gt;mcpServers&lt;/code&gt; to &lt;code&gt;CursorSdkAdapterOptions&lt;/code&gt;; pass it into every &lt;code&gt;agent.send()&lt;/code&gt; call.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;sdk-factory.ts&lt;/code&gt;&lt;/strong&gt;: Automatically assemble the fcop-mcp stdio configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fcop: {
    type: &quot;stdio&quot;,
    command: pythonBin,
    args: [&quot;-m&quot;, &quot;fcop_mcp&quot;],
    env: { FCOP_PROJECT_DIR: projectRoot }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;main.ts&lt;/code&gt;&lt;/strong&gt;: Resolve &lt;code&gt;fcopProjectRoot&lt;/code&gt; before building the SDK adapter.&lt;/p&gt;
&lt;p&gt;And a fourth change — the easiest to overlook, and equally important:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;TaskDispatcher.ts&lt;/code&gt;&lt;/strong&gt;: Before each task dispatch, prepend a role context header to the task text — telling the agent who it is, what tools it has, and that it &lt;em&gt;must&lt;/em&gt; follow the FCoP 4-step workflow to completion.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;iv-tools-aren-t-enough-you-also-need-to-know-how-to-use-them&quot;&gt;IV. Tools aren't enough — you also need to know &lt;em&gt;how&lt;/em&gt; to use them&lt;/h3&gt;
&lt;p&gt;If you inject the MCP server but add no role context, the agent might not use the tools. It might &lt;em&gt;describe&lt;/em&gt; what files should be written, in natural language, and then exit.&lt;/p&gt;
&lt;p&gt;Tool injection solves the &quot;can&quot; problem. Context injection solves the &quot;how&quot; problem — what format, what fields, what protocol.&lt;/p&gt;
&lt;p&gt;Only when the agent simultaneously knows &quot;I have a &lt;code&gt;write_report&lt;/code&gt; tool&quot; &lt;em&gt;and&lt;/em&gt; &quot;FCoP requires me to write a report after completing work — and here's the exact format and fields&quot; will it actually call the tool and produce a properly structured file.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;v-that-number&quot;&gt;V. That number&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;tool_calls_count: 7
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On May 13, 2026, at 14:55 UTC+8, &lt;code&gt;session-1-mp3pfym2&lt;/code&gt; completed — the first session in CodeFlow's history with &lt;code&gt;tool_calls_count &amp;gt; 0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The agent (DEV-01) called fcop-mcp tools 7 times in 55 seconds and wrote:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fcop/reports/REPORT-20260513-014-DEV-to-PM-hello-world-smoke-task.md
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Below is the complete content of that file, archived verbatim, unmodified:&lt;/p&gt;
&lt;hr&gt;
&lt;pre&gt;&lt;code&gt;---
report_id: REPORT-20260513-014-DEV-to-PM-hello-world-smoke-task
date: 2026-05-13
from: DEV-01
to: PM
re: TASK-20260509-999-PM-to-DEV
status: DONE
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Receipt: Hello World — CodeFlow v0.1.0-rc.1 Smoke Task&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Task ID:&lt;/strong&gt; &lt;code&gt;TASK-20260509-999-PM-to-DEV&lt;/code&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Verify that CodeFlow v0.1.0-rc.1's nine-step end-to-end governance loop works correctly.&lt;/p&gt;
&lt;p&gt;DEV-01's self-constructed nine-step verification table:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Step &lt;/th&gt;&lt;th&gt;Component &lt;/th&gt;&lt;th&gt;Expected Behavior&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1   &lt;/td&gt;&lt;td&gt;InboxWatcher &lt;/td&gt;&lt;td&gt;chokidar &lt;code&gt;add&lt;/code&gt; event fires&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2   &lt;/td&gt;&lt;td&gt;TaskParser &lt;/td&gt;&lt;td&gt;reads YAML front-matter&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3   &lt;/td&gt;&lt;td&gt;TaskDispatcher &lt;/td&gt;&lt;td&gt;resolves &lt;code&gt;recipient: DEV&lt;/code&gt; → &lt;code&gt;DEV-01&lt;/code&gt;, starts session&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4   &lt;/td&gt;&lt;td&gt;InMemorySdkAdapter &lt;/td&gt;&lt;td&gt;&lt;code&gt;setImmediate&lt;/code&gt; synthetic settle&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5   &lt;/td&gt;&lt;td&gt;ReviewEngine &lt;/td&gt;&lt;td&gt;listens for &lt;code&gt;runtime.session_ended&lt;/code&gt;, starts &lt;code&gt;REVIEW-01&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6   &lt;/td&gt;&lt;td&gt;REVIEW-01 &lt;/td&gt;&lt;td&gt;settles (no &lt;code&gt;VERDICT:&lt;/code&gt; line → &lt;code&gt;decision=&quot;needs_human&quot;&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7   &lt;/td&gt;&lt;td&gt;NeedsHumanGate &lt;/td&gt;&lt;td&gt;prints human-push payload to stdout&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;8   &lt;/td&gt;&lt;td&gt;ReviewWriter &lt;/td&gt;&lt;td&gt;writes &lt;code&gt;REVIEW-*-REVIEW-on-TASK-*-HELLO.md&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9   &lt;/td&gt;&lt;td&gt;StateHistoryWriter &lt;/td&gt;&lt;td&gt;appends &lt;code&gt;## state_history&lt;/code&gt; section to task file&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Status: DONE&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;No one told it what format to use. It read the protocol, called the tools, and wrote the file.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;vi-the-first-complete-cycle&quot;&gt;VI. The first complete cycle&lt;/h3&gt;
&lt;p&gt;Three things happened together for the first time:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Notification received&lt;/strong&gt;: &lt;code&gt;InboxWatcher&lt;/code&gt; detected the task file landing — a real doorbell, not an OCR script simulating a click.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Autonomous communication&lt;/strong&gt;: DEV-01 received the task via the Cursor Agent SDK, understood what FCoP protocol required, and autonomously decided what to do and which tools to call. 7 fcop-mcp tool calls. 55 seconds.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Report filed&lt;/strong&gt;: A complete, protocol-compliant Markdown file appeared in &lt;code&gt;fcop/reports/&lt;/code&gt;. Not AI-generated text — a file written autonomously by an agent through protocol-driven tool calls.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Not &quot;the agent can run now.&quot; But: &lt;strong&gt;the agent was genuinely notified, genuinely communicated in protocol language, and genuinely wrote the result into a file.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;vii-where-it-all-started&quot;&gt;VII. Where it all started&lt;/h3&gt;
&lt;p&gt;In late April 2026, I posted a feature request on the Cursor Forum:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&quot;Feature request: chat-notify primitive — we already have the mailbox (files), we just need the doorbell&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Colin replied:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;Hi @joinwell52! While not a first-class feature in the IDE, the new &lt;strong&gt;Agent SDK&lt;/strong&gt; might get you partway there today. &lt;code&gt;Agent.create()&lt;/code&gt; gives you a long-lived agent with persistent context across multiple &lt;code&gt;.send()&lt;/code&gt; calls, and &lt;code&gt;Agent.resume(agentId)&lt;/code&gt; lets an external script pick up that same agent later. It can also run locally against your working tree too, not just cloud. Worth a look!&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;Agent.create()&lt;/code&gt;, &lt;code&gt;Agent.resume()&lt;/code&gt;, &lt;code&gt;agent.send()&lt;/code&gt; — those three functions became the skeleton of CodeFlow's entire pipeline. &lt;code&gt;InboxWatcher&lt;/code&gt; is the doorbell, FCoP task files are the mail, &lt;code&gt;@cursor/sdk&lt;/code&gt; is the postal service.&lt;/p&gt;
&lt;p&gt;From a feature-request post to the first &lt;code&gt;tool_calls_count: 7&lt;/code&gt;: approximately 18 days.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;viii-fcop-s-own-transformation&quot;&gt;VIII. FCoP's own transformation&lt;/h3&gt;
&lt;p&gt;As the agent transformed, so did FCoP.&lt;/p&gt;
&lt;p&gt;FCoP began as a &lt;strong&gt;pure text protocol&lt;/strong&gt; — conventions written in Markdown. Its enforcement relied on &lt;em&gt;reading&lt;/em&gt;. With &lt;code&gt;fcop-mcp&lt;/code&gt;, FCoP underwent a fundamental change:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Stage &lt;/th&gt;&lt;th&gt;FCoP's form &lt;/th&gt;&lt;th&gt;Agent's relationship to the protocol&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Early &lt;/td&gt;&lt;td&gt;Text specification &lt;/td&gt;&lt;td&gt;Agent reads files, generates text per convention&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;fcop-mcp &lt;/td&gt;&lt;td&gt;Tool set &lt;/td&gt;&lt;td&gt;Agent calls tools; protocol is enforced at write time&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Before, agents &lt;em&gt;knew&lt;/em&gt; the FCoP spec and decided whether to follow it. Now, the FCoP spec &lt;strong&gt;becomes the tools&lt;/strong&gt; — &lt;code&gt;write_report&lt;/code&gt;, &lt;code&gt;write_task&lt;/code&gt;, &lt;code&gt;write_issue&lt;/code&gt;. Calling the tool &lt;em&gt;is&lt;/em&gt; executing the protocol.&lt;/p&gt;
&lt;p&gt;This is the leap from &lt;strong&gt;specification&lt;/strong&gt; to &lt;strong&gt;infrastructure&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;epilogue-thank-you-cursor-agent-sdk&quot;&gt;Epilogue: Thank you, Cursor Agent SDK&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Long-lived agents&lt;/strong&gt;: &lt;code&gt;Agent.create()&lt;/code&gt; maintains context across multiple &lt;code&gt;.send()&lt;/code&gt; calls. PM, DEV, QA, OPS each carry their identity and state across tasks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;External resumability&lt;/strong&gt;: &lt;code&gt;Agent.resume(agentId)&lt;/code&gt; lets &lt;code&gt;InboxWatcher&lt;/code&gt; re-enter the same agent when a new task arrives. No amnesia, no cold starts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Local execution&lt;/strong&gt;: The SDK runs against your local working tree. FCoP's file protocol is inherently local — a natural match.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;mcpServers&lt;/code&gt; injection&lt;/strong&gt;: &lt;code&gt;agent.send(text, { mcpServers: {...} })&lt;/code&gt; accepts MCP server configuration at call time. This single field unlocked CodeFlow's entire tool layer.&lt;/p&gt;
&lt;p&gt;Together these design choices describe something fundamental: &lt;strong&gt;An agent is not a one-shot function. It's a long-lived entity with identity, memory, and the capacity to be coordinated by external systems.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That's almost exactly how FCoP defines an agent role.&lt;/p&gt;
&lt;p&gt;Thank you to the Cursor team. Thank you, Colin, for that reply.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/joinwell52-AI/FCoP&quot;&gt;FCoP on GitHub&lt;/a&gt; — Protocol spec, source, and all essays&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/joinwell52-AI/FCoP/blob/main/essays/when-the-agent-picked-up-its-tools.en.md&quot;&gt;Full essay (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://forum.cursor.com/t/when-the-agent-first-picked-up-its-own-tools-cursor-agent-sdk-fcop-from-passive-scanning-to-active-communication/160505&quot;&gt;Cursor Forum discussion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/joinwell52/when-agents-learn-from-their-own-wreckage-45p2&quot;&gt;When Agents Learn From Their Own Wreckage&lt;/a&gt; — A field report from the same project&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;*FCoP Maintainers · May 13, 2026&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/17757/when-the-agent-first-picked-up-its-own-tools</guid>
<pubDate>Wed, 13 May 2026 18:34:07 +0000</pubDate>
</item>
<item>
<title>I Paid for VS Code, Cursor, and Windsurf Simultaneously for 6 Months. Here's What I Actually Learned</title>
<link>https://coderlegion.com/16053/paid-for-code-cursor-and-windsurf-simultaneously-for-months-heres-what-actually-learned</link>
<description>&lt;h3 id=&quot;the-setup&quot;&gt;The Setup&lt;/h3&gt;
&lt;p&gt;So I did something maybe a bit crazy—I've been paying for all three AI code editors (VS Code + Copilot, Cursor, and Windsurf) at the same time for the last 6 months. Not for content, not for a review—I genuinely needed to figure out which one works best for different scenarios.&lt;/p&gt;
&lt;p&gt;My day job is Power Platform development (PCF controls, Dataverse schemas, Copilot Studio), so I've been using these in actual production codebases. Not toy examples. Not &quot;hello world&quot; demos. Real debugging sessions at 2 AM, real refactoring nightmares, real enterprise constraints.&lt;/p&gt;
&lt;p&gt;Here's what I learned that nobody's talking about.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full comparison with all the details:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://aidevme.com/vs-code-vs-windsurf-vs-cursor-my-honest-take-after-6-months-using-all-three/&quot;&gt;https://aidevme.com/vs-code-vs-windsurf-vs-cursor-my-honest-take-after-6-months-using-all-three/&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;architecture-matters-more-than-features&quot;&gt;Architecture Matters More Than Features&lt;/h3&gt;
&lt;p&gt;Everyone focuses on feature lists, but the architecture is what actually determines how you'll use the tool daily.&lt;/p&gt;
&lt;h4 id=&quot;vs-code-copilot-extension-api-model&quot;&gt;VS Code + Copilot: Extension API Model&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;┌─────────────────────────────────────────┐
│         VS Code + Copilot               │
│  ┌────────────────────────────────┐     │
│  │    Copilot Extension           │     │
│  │    (Separate Process)          │     │
│  │    Limited Editor Visibility   │     │
│  └────────────────────────────────┘     │
│         VS Code Core                    │
└─────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;What this means in practice:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Copilot can't see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your terminal output stream&lt;/li&gt;
&lt;li&gt;Your file navigation patterns&lt;/li&gt;
&lt;li&gt;Linter errors in real-time&lt;/li&gt;
&lt;li&gt;Debug session state&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You have to explicitly copy/paste context into chat. Every. Single. Time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real debugging session example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1. Build fails
2. Copy terminal error to Copilot chat
3. Copilot: &quot;What files are relevant?&quot;
4. You: List files
5. Copilot: Suggests fix
6. You: Apply changes manually
7. Build fails differently
8. Repeat from step 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It works, but you're the context manager. Copilot is a brilliant consultant who needs constant status updates.&lt;/p&gt;
&lt;h4 id=&quot;cursor-optimized-fork-model&quot;&gt;Cursor: Optimized Fork Model&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;┌─────────────────────────────────────────┐
│              Cursor                     │
│  ┌────────────────────────────────┐     │
│  │    Cursor AI (Built-in)        │     │
│  │    Enhanced Editor Hooks       │     │
│  │    Deeper Context Access       │     │
│  └────────────────────────────────┘     │
│    Modified VS Code Fork                │
└─────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cursor can modify VS Code internals, so the AI has deeper hooks into editor state. This enables their Tab feature (multi-line prediction) and better context assembly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trade-off:&lt;/strong&gt; You're locked to Cursor. Can't swap out the AI layer or use it in JetBrains.&lt;/p&gt;
&lt;h4 id=&quot;windsurf-integrated-agent-model&quot;&gt;Windsurf: Integrated Agent Model&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;┌─────────────────────────────────────────┐
│             Windsurf                    │
│  ┌────────────────────────────────┐     │
│  │    Cascade (Integrated)        │     │
│  │    First-Class Editor Access   │     │
│  │    Continuous Observation      │     │
│  │  + Devin Cloud Agent           │     │
│  └────────────────────────────────┘     │
│    AI-Native Fork                       │
└─────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cascade has privileged access to the rendering pipeline. It sees everything automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Terminal output (real-time)&lt;/li&gt;
&lt;li&gt;Linter errors (auto-fixes without asking)&lt;/li&gt;
&lt;li&gt;File navigation (infers intent)&lt;/li&gt;
&lt;li&gt;Test results&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Same debugging session with Windsurf:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1. Build fails
2. Cascade: &quot;I see the test failed. Here's what's wrong. Want me to fix it?&quot;
3. You: &quot;Yes&quot;
4. Done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Trade-off:&lt;/strong&gt; Higher resource consumption (always watching = always consuming RAM). My ThinkPad struggles. My MacBook is fine.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-tab-completion-battle&quot;&gt;The Tab Completion Battle&lt;/h3&gt;
&lt;p&gt;Let me be blunt: &lt;strong&gt;Cursor's Tab feature is the best multi-line autocomplete in the industry&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I'm not exaggerating. It predicts my next 5-10 lines with unsettling accuracy. Here's an example from actual React work:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I type:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-tsx&quot;&gt;const handleSubmit = async (e: FormEvent) =&amp;gt; {
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Cursor Tab suggests (correctly):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-tsx&quot;&gt;const handleSubmit = async (e: FormEvent) =&amp;gt; {
  e.preventDefault();
  setLoading(true);
  
  try {
    const response = await api.submitForm(formData);
    if (response.ok) {
      navigate('/success');
    }
  } catch (error) {
    setError(error.message);
  } finally {
    setLoading(false);
  }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;How did it know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I use &lt;code&gt;api.submitForm&lt;/code&gt;? (from other files)&lt;/li&gt;
&lt;li&gt;I have a &lt;code&gt;formData&lt;/code&gt; state? (from context)&lt;/li&gt;
&lt;li&gt;I navigate on success? (from routing patterns)&lt;/li&gt;
&lt;li&gt;I use try/catch/finally? (coding style)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windsurf's Supercomplete is also excellent. VS Code Copilot's inline suggestions are good but not this predictive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For flow state coding, Cursor wins. No contest.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-context-awareness-spectrum&quot;&gt;The Context Awareness Spectrum&lt;/h3&gt;
&lt;p&gt;Here's where these tools sit on the &quot;how much does the AI know about what I'm doing&quot; spectrum:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Low Context (VS Code + Copilot):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Only knows what you explicitly tell it&lt;/li&gt;
&lt;li&gt;Session-only memory&lt;/li&gt;
&lt;li&gt;Must rebuild context each conversation&lt;/li&gt;
&lt;li&gt;Pros: Predictable, controlled&lt;/li&gt;
&lt;li&gt;Cons: High prompt overhead&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Medium Context (Cursor):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Excellent codebase indexing&lt;/li&gt;
&lt;li&gt;Understands repo structure automatically&lt;/li&gt;
&lt;li&gt;Limited persistent memory&lt;/li&gt;
&lt;li&gt;Pros: Fast, accurate within known scope&lt;/li&gt;
&lt;li&gt;Cons: Still needs explicit prompting for complex tasks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;High Context (Windsurf):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Continuous observation&lt;/li&gt;
&lt;li&gt;Persistent memory across sessions&lt;/li&gt;
&lt;li&gt;Infers intent from behavior&lt;/li&gt;
&lt;li&gt;Pros: Autonomous, proactive&lt;/li&gt;
&lt;li&gt;Cons: Resource-heavy, can be unpredictable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Real example - Dataverse schema work:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With VS Code: &quot;I'm working on a Contacts table. I need to add three lookup columns to Account. Here's my publisher prefix. Here's the naming convention I use.&quot;&lt;/p&gt;
&lt;p&gt;With Cursor: &quot;Add three lookup columns to Contacts for Account&quot; (it knows the rest from codebase)&lt;/p&gt;
&lt;p&gt;With Windsurf: &lt;em&gt;Opens schema file, starts adding columns&lt;/em&gt; → Cascade: &quot;I see you're adding Account lookups to Contacts. Want me to generate the TypeScript interfaces too?&quot;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;performance-numbers-real-hardware-&quot;&gt;Performance Numbers (Real Hardware)&lt;/h3&gt;
&lt;p&gt;Tested on M2 MacBook Pro (16GB) and ThinkPad T490 (8GB):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cold Start Times:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code: 1-2 sec&lt;/li&gt;
&lt;li&gt;Cursor: 2-3 sec&lt;/li&gt;
&lt;li&gt;Windsurf: 3-5 sec&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;RAM Usage (Baseline):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code: 300-450 MB&lt;/li&gt;
&lt;li&gt;Cursor: 400-600 MB&lt;/li&gt;
&lt;li&gt;Windsurf: 500-900 MB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;RAM Usage (Heavy AI Work):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code: 600-800 MB&lt;/li&gt;
&lt;li&gt;Cursor: 800 MB - 1.2 GB&lt;/li&gt;
&lt;li&gt;Windsurf: 1.2-1.8 GB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;My ThinkPad (8GB RAM):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code: Good&lt;/li&gt;
&lt;li&gt;Cursor: Usable but occasionally slow&lt;/li&gt;
&lt;li&gt;Windsurf: Struggles (frequent swapping)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8GB or less → VS Code&lt;/li&gt;
&lt;li&gt;16GB → Any of the three&lt;/li&gt;
&lt;li&gt;32GB+ → Windsurf or Cursor (maximize AI capabilities)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-dev-container-problem&quot;&gt;The Dev Container Problem&lt;/h3&gt;
&lt;p&gt;This is huge for anyone doing PCF development or working with containerized environments:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VS Code:&lt;/strong&gt; Dev Containers are gold standard. Mature, reliable, well-documented.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cursor:&lt;/strong&gt; Dev Containers work well. Occasional quirks but generally solid.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windsurf:&lt;/strong&gt; NO DEV CONTAINER SUPPORT.&lt;/p&gt;
&lt;p&gt;This is a deal-breaker for PCF work where you need Node.js version isolation. I keep hoping they'll add this, but as of April 2026, still nothing.&lt;/p&gt;
&lt;p&gt;If your workflow requires Dev Containers: &lt;strong&gt;VS Code or Cursor only&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;real-workflow-scenarios&quot;&gt;Real Workflow Scenarios&lt;/h3&gt;
&lt;h4 id=&quot;scenario-large-typescript-refactoring&quot;&gt;Scenario: Large TypeScript Refactoring&lt;/h4&gt;
&lt;p&gt;Needed to rename an interface used across 40 files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cursor Composer:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Me: &quot;Rename ContactData to ContactEntity everywhere and update all imports&quot;
Cursor: [Shows preview of all 40 files]
Me: &quot;Apply&quot;
Cursor: [Executes cleanly]
Time: ~30 seconds
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Windsurf Cascade:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Me: &quot;Rename ContactData to ContactEntity everywhere&quot;
Cascade: [Analyzes repo, shows preview]
Me: &quot;Apply&quot;
Cascade: [Executes cleanly]
Time: ~30 seconds
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;VS Code Copilot Agent Mode:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Me: &quot;Rename ContactData to ContactEntity everywhere&quot;
Copilot: &quot;Which files should I check?&quot;
Me: &quot;All TypeScript files&quot;
Copilot: [Searches, proposes changes]
Me: &quot;Apply&quot;
Copilot: [Executes]
Time: ~2 minutes (more back-and-forth)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Winner for refactoring: Cursor&lt;/strong&gt; (slightly faster, cleaner preview)&lt;/p&gt;
&lt;h4 id=&quot;scenario-building-feature-from-figma-mockup&quot;&gt;Scenario: Building Feature from Figma Mockup&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Windsurf:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drop screenshot into Cascade&lt;/li&gt;
&lt;li&gt;Describe feature&lt;/li&gt;
&lt;li&gt;Cascade generates components + styles&lt;/li&gt;
&lt;li&gt;Live preview shows result&lt;/li&gt;
&lt;li&gt;Click element, describe changes&lt;/li&gt;
&lt;li&gt;Cascade auto-fixes linter errors&lt;/li&gt;
&lt;li&gt;Time: ~15 minutes (1 prompt beyond initial)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cursor:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Describe feature with reference to mockup&lt;/li&gt;
&lt;li&gt;Tab through implementation&lt;/li&gt;
&lt;li&gt;Use Composer for multi-file coordination&lt;/li&gt;
&lt;li&gt;Alt-tab to browser repeatedly for preview&lt;/li&gt;
&lt;li&gt;Time: ~30 minutes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;VS Code:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Describe feature&lt;/li&gt;
&lt;li&gt;Copilot generates initial code&lt;/li&gt;
&lt;li&gt;Manual copy/paste and refinement&lt;/li&gt;
&lt;li&gt;Alt-tab to browser for preview&lt;/li&gt;
&lt;li&gt;Multiple prompt rounds for iterations&lt;/li&gt;
&lt;li&gt;Time: ~45 minutes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Winner for greenfield features: Windsurf&lt;/strong&gt; (continuous context + live preview is unbeatable)&lt;/p&gt;
&lt;h4 id=&quot;scenario-debugging-production-bug-at-3-am&quot;&gt;Scenario: Debugging Production Bug at 3 AM&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;VS Code:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dev Container reproduces exact prod environment&lt;/li&gt;
&lt;li&gt;Mature debugger with breakpoints&lt;/li&gt;
&lt;li&gt;Copilot helps reason about stack traces&lt;/li&gt;
&lt;li&gt;Systematic step-through debugging&lt;/li&gt;
&lt;li&gt;Result: Fixed reliably&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cursor:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dev Container works&lt;/li&gt;
&lt;li&gt;Good debugging support&lt;/li&gt;
&lt;li&gt;AI helps with reasoning&lt;/li&gt;
&lt;li&gt;Result: Fixed reliably&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Windsurf:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No Dev Container (had to debug differently)&lt;/li&gt;
&lt;li&gt;Cascade saw errors automatically&lt;/li&gt;
&lt;li&gt;Suggested fixes quickly&lt;/li&gt;
&lt;li&gt;Result: Fixed but with more uncertainty about prod parity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Winner for production debugging: VS Code&lt;/strong&gt; (battle-tested tooling matters at 3 AM)&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;pricing-reality&quot;&gt;Pricing Reality&lt;/h3&gt;
&lt;p&gt;All three are around $20/month for the core paid tier:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VS Code + Copilot:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free tier: 2K completions/mo&lt;/li&gt;
&lt;li&gt;Individual: $10/mo&lt;/li&gt;
&lt;li&gt;Business: $19/user/mo&lt;/li&gt;
&lt;li&gt;Enterprise: $39/user/mo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cursor:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free trial: 2 weeks&lt;/li&gt;
&lt;li&gt;Pro: $20/mo (but 500 &quot;fast premium&quot; request limit)&lt;/li&gt;
&lt;li&gt;Business: $40/user/mo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Windsurf:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free: 25 credits/mo&lt;/li&gt;
&lt;li&gt;Pro: $20/mo&lt;/li&gt;
&lt;li&gt;Max: $200/mo (for heavy usage)&lt;/li&gt;
&lt;li&gt;Teams: $40/user/mo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Best value for solo dev: Cursor at $20/mo&lt;/strong&gt; (excellent tab + composer)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Best value for heavy AI usage: Windsurf Pro at $20/mo&lt;/strong&gt; (includes Devin cloud agent)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Best enterprise value: VS Code Copilot Enterprise&lt;/strong&gt; (proven compliance, mature tooling)&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-features-nobody-talks-about&quot;&gt;The Features Nobody Talks About&lt;/h3&gt;
&lt;h4 id=&quot;windsurf-s-turbo-mode&quot;&gt;Windsurf's Turbo Mode&lt;/h4&gt;
&lt;p&gt;You can literally tell Cascade &quot;Execute this 12-step workflow&quot; and it will autonomously:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Read files&lt;/li&gt;
&lt;li&gt;Identify changes&lt;/li&gt;
&lt;li&gt;Make edits&lt;/li&gt;
&lt;li&gt;Run tests&lt;/li&gt;
&lt;li&gt;Fix failing tests&lt;/li&gt;
&lt;li&gt;Commit changes&lt;/li&gt;
&lt;li&gt;All without asking for confirmation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It's powerful. It's also occasionally terrifying. Once deleted a test file I needed. Had to restore from git.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use with caution.&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;cursor-s-privacy-mode&quot;&gt;Cursor's Privacy Mode&lt;/h4&gt;
&lt;p&gt;Cursor can run models fully locally. For clients with strict data residency requirements, this is huge.&lt;/p&gt;
&lt;p&gt;Neither VS Code Copilot nor Windsurf offer full local execution.&lt;/p&gt;
&lt;h4 id=&quot;vs-code-s-multi-ide-coverage&quot;&gt;VS Code's Multi-IDE Coverage&lt;/h4&gt;
&lt;p&gt;Copilot works in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code&lt;/li&gt;
&lt;li&gt;JetBrains IDEs&lt;/li&gt;
&lt;li&gt;Visual Studio&lt;/li&gt;
&lt;li&gt;Neovim&lt;/li&gt;
&lt;li&gt;Xcode (limited)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you're polyglot across IDEs, only VS Code Copilot follows you everywhere.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;mcp-support-model-context-protocol-&quot;&gt;MCP Support (Model Context Protocol)&lt;/h3&gt;
&lt;p&gt;All three support MCP, but with wildly different UX:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VS Code:&lt;/strong&gt;&lt;br&gt;
Manual JSON config in &lt;code&gt;.vscode/mcp.json&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;servers&quot;: {
    &quot;dataverse-skills&quot;: {
      &quot;command&quot;: &quot;npx&quot;,
      &quot;args&quot;: [&quot;-y&quot;, &quot;@microsoft/dataverse-skills&quot;]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Cursor:&lt;/strong&gt;&lt;br&gt;
Same manual JSON approach. No plugin store.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windsurf:&lt;/strong&gt;&lt;br&gt;
Plugin Store with one-click installs for curated servers (Figma, Slack, GitHub, PostgreSQL, etc.)&lt;/p&gt;
&lt;p&gt;For custom MCP servers (like Dataverse Skills), all three require manual JSON config.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;power-platform-developers-here-s-what-matters&quot;&gt;Power Platform Developers: Here's What Matters&lt;/h3&gt;
&lt;h4 id=&quot;pcf-controls&quot;&gt;PCF Controls&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; VS Code or Cursor (both support Dev Containers)&lt;/p&gt;
&lt;p&gt;You need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dev Container for Node version isolation&lt;/li&gt;
&lt;li&gt;Power Platform Tools extension&lt;/li&gt;
&lt;li&gt;Jest + React DevTools&lt;/li&gt;
&lt;li&gt;PAC CLI integration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windsurf's lack of Dev Containers is a non-starter here.&lt;/p&gt;
&lt;h4 id=&quot;dataverse-schema-design&quot;&gt;Dataverse Schema Design&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; Windsurf or Cursor&lt;/p&gt;
&lt;p&gt;With Dataverse Skills MCP server configured:&lt;/p&gt;
&lt;p&gt;Windsurf + Cascade applies conventions automatically if you have &lt;code&gt;.windsurfrules&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Publisher prefix: aidevme_
Naming convention: PascalCase for logical names
Relationship naming: Related{EntityName}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cascade remembers this across sessions.&lt;/p&gt;
&lt;h4 id=&quot;pac-cli-workflows&quot;&gt;PAC CLI Workflows&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; VS Code&lt;/p&gt;
&lt;p&gt;Mature terminal integration, Dev Containers for environment consistency, better for scripted workflows.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-actually-use&quot;&gt;What I Actually Use&lt;/h3&gt;
&lt;p&gt;I don't pick just one. Multi-editor strategy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VS Code:&lt;/strong&gt; PCF dev, PAC CLI, enterprise work, anything requiring Dev Containers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cursor:&lt;/strong&gt; Daily TypeScript/React feature work, refactoring, learning new codebases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windsurf:&lt;/strong&gt; Dataverse schema design, rapid prototyping, multi-file scaffolding&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All three can be open simultaneously. Most extensions and settings transfer seamlessly.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-honest-trade-offs&quot;&gt;The Honest Trade-offs&lt;/h3&gt;
&lt;h4 id=&quot;vs-code-copilot&quot;&gt;VS Code + Copilot&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Choose if:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need Dev Containers&lt;/li&gt;
&lt;li&gt;You work across multiple IDEs&lt;/li&gt;
&lt;li&gt;You want maximum stability&lt;/li&gt;
&lt;li&gt;You need enterprise compliance&lt;/li&gt;
&lt;li&gt;You're on 8GB RAM or less&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Skip if:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You're frustrated by prompt overhead&lt;/li&gt;
&lt;li&gt;You want proactive AI behavior&lt;/li&gt;
&lt;li&gt;You need continuous context awareness&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;cursor&quot;&gt;Cursor&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Choose if:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You prioritize flow state and tab completion&lt;/li&gt;
&lt;li&gt;You do heavy refactoring work&lt;/li&gt;
&lt;li&gt;You want fast, predictable AI&lt;/li&gt;
&lt;li&gt;You need privacy mode (local execution)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Skip if:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need multi-IDE support&lt;/li&gt;
&lt;li&gt;You hit the 500 request/month limit&lt;/li&gt;
&lt;li&gt;You want autonomous agent capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;windsurf&quot;&gt;Windsurf&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Choose if:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You want cutting-edge AI capabilities&lt;/li&gt;
&lt;li&gt;You need cloud agent delegation (Devin)&lt;/li&gt;
&lt;li&gt;You have 16GB+ RAM&lt;/li&gt;
&lt;li&gt;You want continuous context awareness&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Skip if:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need Dev Containers&lt;/li&gt;
&lt;li&gt;You're on 8GB RAM or less&lt;/li&gt;
&lt;li&gt;You want battle-tested tooling&lt;/li&gt;
&lt;li&gt;You prefer explicit control over autonomy&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;my-recommendation&quot;&gt;My Recommendation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;If you're starting today:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start with &lt;strong&gt;VS Code + Copilot Individual ($10/mo)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Master the fundamentals&lt;/li&gt;
&lt;li&gt;Once comfortable, try &lt;strong&gt;Cursor's free trial&lt;/strong&gt; (2 weeks)&lt;/li&gt;
&lt;li&gt;If you love Tab completion → stay with Cursor&lt;/li&gt;
&lt;li&gt;If you want more autonomy → try &lt;strong&gt;Windsurf's free tier&lt;/strong&gt; (25 credits)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;If you're experienced:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cursor Pro ($20/mo)&lt;/strong&gt; for solo dev work&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windsurf Pro ($20/mo)&lt;/strong&gt; if you have good hardware and want bleeding-edge&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VS Code Copilot&lt;/strong&gt; if you need enterprise features or multi-IDE&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;discussion-questions-for-the-community&quot;&gt;Discussion Questions for the Community&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Are you using Cursor or Windsurf?&lt;/strong&gt; What made you switch from VS Code?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Has anyone successfully used Windsurf without Dev Containers?&lt;/strong&gt; How do you handle environment consistency?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cursor's 500 request limit&lt;/strong&gt; - have you hit it? How did you work around it?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Autonomous AI concerns&lt;/strong&gt; - how much autonomy are you comfortable with? Have you had Windsurf's Turbo Mode do something unexpected?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-editor workflows&lt;/strong&gt; - is anyone else using multiple editors for different tasks? What's your strategy?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP adoption&lt;/strong&gt; - are you using MCP servers? Which ones? What's your experience?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Drop your experiences in the comments. I'm genuinely curious what the community is finding.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Full deep-dive article:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://aidevme.com/vs-code-vs-windsurf-vs-cursor-my-honest-take-after-6-months-using-all-three/&quot;&gt;https://aidevme.com/vs-code-vs-windsurf-vs-cursor-my-honest-take-after-6-months-using-all-three/&lt;/a&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/16053/paid-for-code-cursor-and-windsurf-simultaneously-for-months-heres-what-actually-learned</guid>
<pubDate>Tue, 28 Apr 2026 09:44:49 +0000</pubDate>
</item>
<item>
<title>kasetto - declarative AI agent environment manager, written in Rust</title>
<link>https://coderlegion.com/15335/kasetto-declarative-ai-agent-environment-manager-written-in-rust</link>
<description>&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.kasetto.dev&quot;&gt;https://www.kasetto.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/pivoshenko/kasetto&quot;&gt;https://github.com/pivoshenko/kasetto&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hey community! &lt;/p&gt;
&lt;p&gt;I want to share an open-source tool I built for myself, and that I hope will be useful to other developers working with AI agents.&lt;/p&gt;
&lt;h3 id=&quot;the-problem&quot;&gt;The Problem&lt;/h3&gt;
&lt;p&gt;The more AI coding tools we adopted, the messier our setup got. Skills and MCP servers installed manually, via individual commands, or copy-pasted from docs. Scattered across Claude Code, Cursor, Codex, Windsurf - with no way to version any of it, no way to share it with teammates, no way to reproduce it on a new machine or project.&lt;/p&gt;
&lt;p&gt;Every new team member meant walking them through the same manual steps. Every new machine meant doing it all over again. And if someone changed a skill or added an MCP server, there was no way to propagate that to the rest of the team.&lt;/p&gt;
&lt;p&gt;Sound familiar?&lt;/p&gt;
&lt;h3 id=&quot;the-idea&quot;&gt;The Idea&lt;/h3&gt;
&lt;p&gt;I built &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/pivoshenko/kasetto&quot;&gt;kasetto&lt;/a&gt; to fix that. The idea is borrowed from things I already loved - the declarative reproducibility of dotfiles, the simplicity of &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/astral-sh/uv&quot;&gt;uv&lt;/a&gt; for Python packages. What uv did for Python, kasetto aims to do for AI agent skills.&lt;/p&gt;
&lt;p&gt;One YAML config describes your entire setup: skills, MCP servers, target agents. Commit it, share it, and everyone on the team gets the exact same environment. No manual editing, no drift between machines or teammates. New machine? One command.&lt;/p&gt;
&lt;h3 id=&quot;the-name&quot;&gt;The Name&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Kasetto&lt;/em&gt; (カセット) is the Japanese word for cassette - as in a cassette tape. A cassette was a self-contained, portable thing: you recorded something once, handed it to someone, and it played back exactly the same on any device. No setup, no drift, no &quot;works on my machine.&quot; That's exactly what kasetto does for your AI agent environment - package it once, share it, and it reproduces identically everywhere.&lt;/p&gt;
&lt;h3 id=&quot;why-kasetto&quot;&gt;Why kasetto&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Declarative&lt;/strong&gt; - one YAML config, version it, share it, bootstrap a whole team in seconds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-agent&lt;/strong&gt; - 21 built-in presets: Claude Code, Cursor, Codex, Windsurf, Copilot, Gemini CLI, and more&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-source&lt;/strong&gt; - pulls from GitHub, GitLab, Bitbucket, Codeberg including self-hosted and enterprise&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP management&lt;/strong&gt; - merges MCP servers into each agent's native settings file automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global and project scopes&lt;/strong&gt; - install skills globally or per-project, each with its own lockfile&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CI-friendly&lt;/strong&gt; - &lt;code&gt;--dry-run&lt;/code&gt; to preview, &lt;code&gt;--json&lt;/code&gt; for automation, non-zero exit on failure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Single binary&lt;/strong&gt; - no runtime dependencies, written in Rust, fast cold starts&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;how-it-works&quot;&gt;How It Works&lt;/h3&gt;
&lt;p&gt;Define your config:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;agent:
  - claude-code
  - cursor
  - codex

skills:
  - source: https://github.com/org/skill-pack
    skills: &quot;*&quot;
  - source: https://github.com/org/skill-pack-2
    skills:
      - product-design
  - source: https://github.com/org/skill-pack-3
    skills:
      - name: jupyter-notebook
        path: skills/.curated

mcps:
  - source: https://github.com/org/mcp-pack
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then sync:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kst sync
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That's it. Kasetto pulls the skills and MCP servers, installs them into the right agent directories, and merges MCP configs into each agent's native settings file. The next time you run &lt;code&gt;sync&lt;/code&gt;, only what changed gets updated.&lt;/p&gt;
&lt;h3 id=&quot;command-overview&quot;&gt;Command Overview&lt;/h3&gt;
&lt;p&gt;Kasetto ships with a focused set of commands - each does exactly one thing:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kst sync              # pull skills + MCP servers and install them
kst sync --dry-run    # preview what would change without touching anything
kst sync --json       # structured output for CI pipelines

kst list              # browse installed skills and MCPs interactively
kst list --json       # dump installed state as JSON

kst init              # scaffold a kasetto.yaml in the current directory
kst doctor            # check your environment and diagnose issues

kst clean             # remove all installed skills and MCP entries
kst self update       # update kasetto to the latest release
kst self uninstall    # remove kasetto and all its files
kst completions       # generate shell completions (bash, zsh, fish, etc.)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The binary is available as both &lt;code&gt;kasetto&lt;/code&gt; and &lt;code&gt;kst&lt;/code&gt; - the short alias makes daily use quick.&lt;/p&gt;
&lt;h3 id=&quot;install&quot;&gt;Install&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;macOS / Linux
curl -fsSL https://raw.githubusercontent.com/pivoshenko/kasetto/main/scripts/install.sh | sh

Homebrew
brew install pivoshenko/tap/kasetto

Cargo
cargo install kasetto
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;what-s-next&quot;&gt;What's Next&lt;/h3&gt;
&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/pivoshenko/kasetto#roadmap&quot;&gt;roadmap&lt;/a&gt; includes agents management and hooks management. If you have ideas or run into issues, &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/pivoshenko/kasetto/issues&quot;&gt;open an issue&lt;/a&gt; - feedback from real users shapes the direction.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/pivoshenko/kasetto&quot;&gt;github.com/pivoshenko/kasetto&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If kasetto saves you time, a GitHub star means a lot. And drop a comment below - I'd love to hear what your AI agent setup looks like today, and what pain points you're still hitting.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/15335/kasetto-declarative-ai-agent-environment-manager-written-in-rust</guid>
<pubDate>Mon, 20 Apr 2026 21:09:16 +0000</pubDate>
</item>
<item>
<title>Adding DepScope as an MCP tool inside Cursor in under 5 minutes</title>
<link>https://coderlegion.com/15199/adding-depscope-as-an-mcp-tool-inside-cursor-in-under-5-minutes</link>
<description>&lt;p&gt;Adding DepScope as an MCP tool inside Cursor in under 5 minutes&lt;br&gt;
Your AI assistant in Cursor is great at writing code. It's less great at knowing which packages are actually safe to install right now. Suggestions come from training data 6-12 months stale, so recent CVEs are invisible, deprecated libraries get recommended with enthusiasm, and sometimes the model just hallucinates a package name that never existed.&lt;/p&gt;
&lt;p&gt;DepScope fixes that with a shared-cache API. It also ships an MCP (Model Context Protocol) server so Cursor can call it automatically, in-context, every time it's about to suggest a dependency.&lt;/p&gt;
&lt;p&gt;Here's the full setup in under 5 minutes.&lt;/p&gt;
&lt;p&gt;Step 1 — install the MCP server&lt;br&gt;
Any terminal:&lt;/p&gt;
&lt;p&gt;npm install -g depscope-mcp&lt;/p&gt;
&lt;p&gt;That's the whole install. No API key, no signup, no config file.&lt;/p&gt;
&lt;p&gt;Step 2 — register it with Cursor&lt;br&gt;
Open Cursor's MCP config. On macOS:&lt;/p&gt;
&lt;p&gt;~/.cursor/mcp.json&lt;/p&gt;
&lt;p&gt;(Or Settings → MCP → Edit Config from the command palette.)&lt;/p&gt;
&lt;p&gt;Add the DepScope server:&lt;/p&gt;
&lt;p&gt;{&lt;br&gt;
  &quot;mcpServers&quot;: {&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;depscope&quot;: {
  &quot;command&quot;: &quot;npx&quot;,
  &quot;args&quot;: [&quot;depscope-mcp&quot;]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  }&lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;Save. Restart Cursor (the MCP servers are loaded on startup).&lt;/p&gt;
&lt;p&gt;Step 3 — verify&lt;br&gt;
Open a new chat in Cursor and ask something that would normally make the model guess:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Should I install request or axios for HTTP in my Node project?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cursor will now call the DepScope check_package and find_alternatives tools before answering. You'll see the tool invocations in the chat:&lt;/p&gt;
&lt;p&gt;→ Calling depscope / check_package&lt;br&gt;
   { ecosystem: &quot;npm&quot;, package: &quot;request&quot; }&lt;br&gt;
← { action: &quot;avoid&quot;, reason: &quot;deprecated since 2020&quot;,&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alternatives: [&quot;axios&quot;, &quot;node-fetch&quot;, &quot;undici&quot;] }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The answer you get back is based on live registry data plus OSV + GitHub Advisory Database lookups, not the model's stale training.&lt;/p&gt;
&lt;p&gt;What you actually get&lt;br&gt;
Fourteen MCP tools registered automatically. The ones that matter in day-to-day dev work:&lt;/p&gt;
&lt;p&gt;ToolWhen Cursor calls it&lt;br&gt;
&lt;code&gt;check_package&lt;/code&gt;&quot;Should I install X?&quot;&lt;br&gt;
&lt;code&gt;get_vulnerabilities&lt;/code&gt;&quot;Are there any known CVEs in Y?&quot;&lt;br&gt;
&lt;code&gt;get_latest_version&lt;/code&gt;&quot;What's the current stable version?&quot;&lt;br&gt;
&lt;code&gt;package_exists&lt;/code&gt;Safety-check before suggesting anything (anti-hallucination)&lt;br&gt;
&lt;code&gt;find_alternatives&lt;/code&gt;&quot;This is deprecated — what do I use instead?&quot;&lt;br&gt;
&lt;code&gt;compare_packages&lt;/code&gt;&quot;Express vs Fastify vs Hono?&quot;&lt;br&gt;
&lt;code&gt;resolve_error&lt;/code&gt;&quot;I got this &lt;code&gt;ModuleNotFoundError&lt;/code&gt; — how do I fix it?&quot;&lt;br&gt;
&lt;code&gt;check_compat&lt;/code&gt;&quot;Is Next 15 compatible with React 19?&quot;&lt;br&gt;
&lt;code&gt;search_packages&lt;/code&gt;&quot;I need a library for X&quot;&lt;br&gt;
&lt;code&gt;scan_project&lt;/code&gt;Audit all deps in one shot&lt;br&gt;
Works across 17 ecosystems: npm, PyPI, Cargo, Go, Maven, NuGet, RubyGems, Composer, Pub, Hex, Swift, CocoaPods, CPAN, Hackage, CRAN, Conda, Homebrew.&lt;/p&gt;
&lt;p&gt;Token efficiency note&lt;br&gt;
If you care about input-token cost, DepScope has a dedicated /api/prompt/{ecosystem}/{package} endpoint that returns a compact natural-language string instead of raw registry JSON. For the same install decision it's roughly 74% smaller than the raw registry response — less input for the model to parse, fewer tokens on your Claude / OpenAI bill per query.&lt;/p&gt;
&lt;p&gt;The MCP server uses this endpoint by default when the tool call doesn't need full structured data.&lt;/p&gt;
&lt;p&gt;Wrap-up&lt;br&gt;
After this setup, every time Cursor is about to suggest a dependency, it gets validated against live vulnerability data — no more suggestions from 2024, no more hallucinated packages, no more silently pulling in deprecated libraries.&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Website: depscope.dev&lt;/li&gt;
&lt;li&gt;All integrations (Claude Code, Windsurf, Copilot, Aider, raw HTTP): depscope.dev/agent-setup&lt;/li&gt;
&lt;li&gt;Source: github.com/cuttalo/depscope — MIT&lt;/li&gt;
&lt;li&gt;API docs: depscope.dev/api-docs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Open infrastructure, MIT, EU-hosted. Built solo by Vincenzo Rubino at Cuttalo srl.&lt;/p&gt;
</description>
<category>Tutorials</category>
<guid isPermaLink="true">https://coderlegion.com/15199/adding-depscope-as-an-mcp-tool-inside-cursor-in-under-5-minutes</guid>
<pubDate>Mon, 20 Apr 2026 01:17:42 +0000</pubDate>
</item>
<item>
<title>Beyond the Agents Window: Why Parallel Execution Is Not Enough</title>
<link>https://coderlegion.com/14374/beyond-the-agents-window-why-parallel-execution-is-not-enough</link>
<description>&lt;p&gt;&lt;em&gt;April 3, 2026 · &lt;a rel=&quot;nofollow&quot; href=&quot;https://lastkey.agency&quot;&gt;Lastkey&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;What if I told you that within months, your primary workspace won't be an IDE or a terminal — but an environment above them, where your native language is your command language and your core skill is making the right call at the right time?&lt;/p&gt;
&lt;p&gt;For those who've already shifted to multi-agent workflows, this isn't a prediction — it's Tuesday. But everyone who's made that leap and started running not two but five, ten, or more parallel streams has noticed something: the ceiling didn't disappear. It moved. It moved from the tooling to the operator. And while the industry is racing to ship more agents, faster agents, parallel agents — nobody yet has a product for what breaks when you actually run them.&lt;/p&gt;
&lt;p&gt;This year, IDE stops being the center of how we build. The shift to agentic development environments is already underway. But the shift reveals a deeper problem that new windows and tabs can't solve.&lt;/p&gt;
&lt;p&gt;So what if I told you more — you won't be a developer at the end of the year. You'll be an operator, and your main skill won't be coding — it will be governance.&lt;/p&gt;
&lt;h3 id=&quot;from-pair-programming-to-fleet-steering&quot;&gt;From Pair Programming to Fleet Steering&lt;/h3&gt;
&lt;p&gt;The IDE was home for decades, and for good reason. It gave you the widest possible context for making decisions — file tree, editor, terminal, git, all in one frame. When AI arrived as a coding assistant, it felt like a natural layer on top: autocomplete, inline chat, pair programming with a model. The environment stayed the same. Just faster.&lt;/p&gt;
&lt;p&gt;Then came agents. VS Code, Cursor put you in the reviewer's seat — one agent, one task, one conversation. It was manageable. You learned to guide instead of type.&lt;/p&gt;
&lt;p&gt;Then came parallel agents. Two worktrees. Four cloud sessions. Eight simultaneous streams across repos and environments. The thing that made IDE powerful — unified context for decisions — shattered into fragments. Each agent holds its own context. You're the only one holding the full picture. And you sit at the desk, trying to manage the ever-growing streams, wanting to expand further — and realize: huh, so it's me who's the bottleneck now?&lt;/p&gt;
&lt;p&gt;Andrej Karpathy in his recent interview said that everything now feels like not a possible/impossible dilemma, but a skill issue — you can do anything, but don't always know how. Garry Tan, CEO of Y Combinator, published &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/garrytan/gstack&quot;&gt;gstack&lt;/a&gt; — his personal Claude Code setup, now at 40K+ GitHub stars. And you can see that it is the same API everyone has access to, from CEO to beginner developer. And we together keep hitting the same productivity and cognitive walls at some point. Skill matters. But skill alone doesn't scale, and no UI will solve it. Because we start to realize it is beyond the infrastructure issue — it's about mindset.&lt;/p&gt;
&lt;h3 id=&quot;cursor-3-and-the-ade-moment&quot;&gt;Cursor 3 and the ADE Moment&lt;/h3&gt;
&lt;p&gt;As I was finishing this piece, &lt;a rel=&quot;nofollow&quot; href=&quot;https://cursor.com/blog/cursor-3&quot;&gt;Cursor shipped version 3.0&lt;/a&gt; — a new Agents Window with parallel execution across worktrees, cloud, and SSH.&lt;/p&gt;
&lt;p&gt;The concept of an Agentic Development Environment — ADE — was introduced by Warp last fall, describing a new class of tools built around agent orchestration rather than file editing. Since then, projects like &lt;a rel=&quot;nofollow&quot; href=&quot;https://emdash.ai&quot;&gt;Emdash&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/jeantech-dev/jean&quot;&gt;Jean&lt;/a&gt;, and dozens of open-source alternatives have explored the same pattern. Cursor 3 brings it to the most widely adopted AI development platform — expanding its ADE interface and continuing a confident move toward multi-agent orchestration.&lt;/p&gt;
&lt;p&gt;It's a genuine step forward. But open the new Agents Window, and you see what every ADE converges on: agents on the left, chat in the middle, output on the right.&lt;/p&gt;
&lt;p&gt;Cursor's marketing starts on a premise: &quot;the gap between imagination and reality is shrinking.&quot; But the gap between idea and execution is still there, and won't go away. The real distance from idea to implementation isn't about the perspective you look from at the agentic workflow. It's about whether your idea gets decomposed into a traceable command, broken down into verifiable parts, and executed in accordance not just with the letter, but with the intent behind it. A new window layout makes this gap more visible — but it doesn't close it.&lt;/p&gt;
&lt;h3 id=&quot;the-real-bottleneck&quot;&gt;The Real Bottleneck&lt;/h3&gt;
&lt;p&gt;You're keeping up with the times. You moved from the programmer's seat to the reviewer's seat. You trained yourself to verify code instead of writing it. You formulate precise instructions in English more than precise syntax in Python. You launch 2, 4, 8 agent streams in parallel, moving multiple projects forward at once.&lt;/p&gt;
&lt;p&gt;And then: what's beyond this? What happens when you want — or already need — to operate not eight agents, but fifty? A hundred and more? An ADE interface gives you a comfortable view that visualizes how much action you're missing and how little remains in your direct control or understanding.&lt;/p&gt;
&lt;p&gt;But this shift was never about doing less. It's about doing more — more effectively, with fewer mistakes, faster iterations. The question is: what do I need, beyond an interface that displays agentic flows, to feel not like a passive observer of independent processes — but like an engaged, briefed, and effective operator?&lt;/p&gt;
&lt;p&gt;No tool on the market answers this, because every tool optimizes for the introduction of agents into development — not for the fundamental switch in the operator's thinking that agents demand.&lt;/p&gt;
&lt;h3 id=&quot;three-gaps-that-break-the-flywheel&quot;&gt;Three Gaps That Break the Flywheel&lt;/h3&gt;
&lt;p&gt;Everyone building with multi-agent workflows runs into the same three walls. Plenty of tools address one. None address all three together — and without all three, the system doesn't compound. You build, but the flywheel doesn't spin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Planning Gap.&lt;/strong&gt; The moment you start assigning work to agents and tracking results, the obvious reference is task trackers — Linear, Jira, kanban boards, the recent wave of AI-native boards like Vibe Kanban. They help. But they were designed for humans coordinating with humans. The units of work, status models, and interfaces are human-native, not agent-native.&lt;/p&gt;
&lt;p&gt;They don't reflect the speed and intensity of execution that agents are capable of, and don't capitalize on the scope and form of metadata that agents can actually work through.&lt;/p&gt;
&lt;p&gt;They don't connect a morning's first action to a quarter's strategic goal. They don't help you decide what to delegate and what to hold. They don't know when human judgment is truly needed, or when and how to brief you on progress — rather than presenting a democratic corporate kanban board to a sole manager.&lt;/p&gt;
&lt;p&gt;Task tracking is a piece of the puzzle — but it was built for a different picture. The workforce changed. The tools haven't.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Memory Gap.&lt;/strong&gt; Every agent session starts from scratch. Decisions from yesterday, patterns from last week, mistakes from last month — gone. The operator, if disciplined and organized enough, might remember where to find the notes. The system out of the box doesn't.&lt;/p&gt;
&lt;p&gt;And it's not just a technical limitation. Providers aren't rushing to give you the full stream of data flowing from your interactions. Collecting prompts, curating reusable commands, configuring agent roles, monitoring real performance on basic metrics — token spend, tool usage, completion rates — for a modern operator, this is either a DIY assembly from OSS tools and personal practice, or something built behind closed corporate doors.&lt;/p&gt;
&lt;p&gt;Assembling these instruments is creative and rewarding work — learning to work with indexing, RAG, embeddings, recall, subagent playbooks and command prompt libraries. But it pulls you away from using them. You're building the workshop instead of working in it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Governance Gap.&lt;/strong&gt; Who verifies that agent 3 didn't break what agent 1 fixed? Who notices when quality degrades over weeks? Who improves the process itself?&lt;/p&gt;
&lt;p&gt;We've seen fascinating experiments recently — self-governing agent swarms, autonomous code city concepts, YOLO rogue AI-managed repositories. What these experiments reveal is that proper governance isn't overhead. It's the most reliable multiplier and cost reducer at scale.&lt;/p&gt;
&lt;p&gt;For generations, humanity's best minds worked on effective and fair systems for governing each other. We face the same challenge now with agent systems — each of us individually. Switching from the pilot's seat to the reviewer's is straightforward. Managing a small team of sub-agents is a skill and experience issue.&lt;/p&gt;
&lt;p&gt;But scaling to govern a growing empire of semi-autonomous, not-fully-observable clusters — no individual achieves that with practices alone. It requires institutions.&lt;/p&gt;
&lt;p&gt;The future operator rules not with a Scrum guide, but with a living codex connected to a real, functioning, agent-driven organization.&lt;/p&gt;
&lt;h3 id=&quot;ode-operator-development-environment&quot;&gt;ODE — Operator Development Environment&lt;/h3&gt;
&lt;p&gt;There is a layer that must exist within and beyond what ADEs currently offer. Today's ADEs are a surface-level response — necessary, but not deep enough for the real pains of operating agent fleets.&lt;/p&gt;
&lt;p&gt;Right now, every practitioner solves this differently — with whatever tools, approaches, and experience they have at hand. There's no standard, no unified solution. And that's exciting — because it means the practice and feedback of every builder is actively shaping what this layer becomes. In many places, the market lags behind the speed of OSS and community-driven solutions. This is a moment that shapes future standards — through practice and competition.&lt;/p&gt;
&lt;p&gt;So what is this layer that closes these gaps?&lt;/p&gt;
&lt;p&gt;I call it &lt;strong&gt;ODE — Operator Development Environment&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;What is it? ODE is not another ADE. An ADE optimizes agent overview — how many agents, how fast, how parallel. ODE optimizes operator cognition — how you think, plan, verify, remember, and improve through agents. Only from there stem the tools that make these streams of cognition actionable and translated to the agentic workforce. It's the layer between your intent and the agents' work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why introduce the term?&lt;/strong&gt; Because the gap described above — planning, memory, governance — isn't three separate problems with three separate products. It's one systemic gap: the absence of a coherent environment designed for the operator's mind, not the agent's runtime. Naming it opens the space where it can be envisioned — and put into form.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What does ODE consist of?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;planning engine&lt;/strong&gt; that goes beyond task tracking — connecting strategic goals to today's first action, routing work based on each task's nature, and building a statistical picture of velocity and accuracy that sharpens with every cycle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Institutional memory&lt;/strong&gt; that outlives every session — a knowledge graph, episodic memory, and source intelligence unified behind a single retrieval layer. The system remembers decisions, patterns, and mistakes so every new session starts with context, not from zero.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;governance framework&lt;/strong&gt; that watches the agents so you can watch the horizon — automated verification, adaptive trust calibrated to each agent's track record, and threshold-based escalation that acts before problems compound.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;unified input surface&lt;/strong&gt; — not a chat window per agent, but a single point where your intent enters the system and gets routed to the right stream.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why does it address the gaps?&lt;/strong&gt; The planning engine closes the planning gap — agent-native task management with intent hierarchy. Institutional memory closes the memory gap — persistent, structured, retrievable context across sessions and projects. The governance framework closes the governance gap — verification, trust, and self-improvement baked into the system, not bolted on by the operator's discipline.&lt;/p&gt;
&lt;p&gt;Together, these components form the flywheel: each completed cycle feeds the next. Memory grows. Governance tightens. Planning calibrates. The environment becomes a multiplier — carrying you from idea to implementation instead of demanding constant assembly of the vehicle itself.&lt;/p&gt;
&lt;p&gt;This isn't theory. Each component already exists in working code, built over months of daily use, managing and shipping over a dozen projects with the same tools available to everyone. It may not be &lt;em&gt;the&lt;/em&gt; implementation. But it is definitely &lt;em&gt;an&lt;/em&gt; implementation — one for each gap, derived from practice. I'll share the details and our insights for each subsystem and domain in the articles to come.&lt;/p&gt;
&lt;h3 id=&quot;the-operator-s-seat-throne-ready-&quot;&gt;The Operator's Seat (Throne-Ready)&lt;/h3&gt;
&lt;p&gt;The shift from developer to operator isn't about losing the craft. It's about the craft evolving. You still need to understand systems — the way a fleet commander needs to understand navigation, not the way a helmsman needs to hold the wheel.&lt;/p&gt;
&lt;p&gt;And here's what matters: an operator with the right environment doesn't just manage one ship. They scale from a single vessel to a flotilla — as their goals demand and ambitions grow. With ODE, scaling isn't a search for technology. It's a decision, supported by an environment that grows with you.&lt;/p&gt;
&lt;p&gt;Throne-ready — a term that emerged from the idea of being prepared for a qualitative shift: from managing agents to governing them. From coordinating a crew to administering an empire. The tooling you build today should anticipate that transition — because when it comes, the difference between a practitioner with institutions and one without will be the difference between a productive operator in control and someone drowning in tabs.&lt;/p&gt;
&lt;p&gt;The tools will catch up. Cursor is probably closer than most — introducing planning modes, autonomous cloud agents, now shipping a full ADE. But the question isn't whether these layers will exist. It's whether you'll have shaped them through practice and already know how to use them — or whether you'll be learning someone else's defaults while early adopters are compounding on months of built-up advantage. In this environment, the gap between those who internalized these patterns early and those who didn't won't be 2x. It'll be an order of magnitude. And for some — it already is.&lt;/p&gt;
&lt;h3 id=&quot;what-s-next-1&quot;&gt;What's Next&lt;/h3&gt;
&lt;p&gt;This is the first in a series exploring the Operator Development Environment concept — from academic foundations and emerging patterns to product-level implementations that address its parts.&lt;/p&gt;
&lt;p&gt;In the next piece, I'll share my own experience — one that I'm sure mirrors the journey of thousands of developers who, using the same tools available to everyone, from model APIs to OSS and vendor solutions, are trying to build their own thinking environment with agents. I'll show what I arrived at, how the understanding of what I was building crystallized along the way, and what I use today — something close enough to a working prototype that it feels worth writing about, inviting questions and critique as the series unfolds.&lt;/p&gt;
&lt;p&gt;Over the coming articles, I'll share the components that close each gap: the planning layer that makes multi-agent work manageable, the memory and observability foundation that makes it consistent and measurable, the governance framework that makes it scalable, and ultimately — the interface where it all comes together, where scattered thoughts and ideas become executable plans.&lt;/p&gt;
&lt;p&gt;I'll be releasing parts of the system as the series progresses, and the early alpha is already in the hands of first users.&lt;/p&gt;
&lt;p&gt;If any of this resonates — follow along.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Follow the series at &lt;a rel=&quot;nofollow&quot; href=&quot;https://lastkey.agency&quot;&gt;lastkey.agency&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;Concept and repo: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/lastkey-agency/ode&quot;&gt;github.com/lastkey-agency/ode&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;Reach out: &lt;a rel=&quot;nofollow&quot; href=&quot;mailto:hello@lastkey.agency&quot;&gt;hello@lastkey.agency&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Have you hit the same walls scaling your agent workflows? What does your setup look like at five or more parallel streams — and where does it start to crack? I'd genuinely like to know what others are building to solve these problems.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/14374/beyond-the-agents-window-why-parallel-execution-is-not-enough</guid>
<pubDate>Thu, 09 Apr 2026 20:56:37 +0000</pubDate>
</item>
<item>
<title>Cursor’s Cloud Agents: A Big Shift in AI-Assisted Development</title>
<link>https://coderlegion.com/12182/cursors-cloud-agents-a-big-shift-in-ai-assisted-development</link>
<description>&lt;p&gt;&lt;strong&gt;Cursor just introduced a major upgrade and it’s more than just a feature update.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Agents can now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Onboard directly to your repository&lt;/li&gt;
&lt;li&gt;Spin up a secure cloud-based Linux VM&lt;/li&gt;
&lt;li&gt;Make code changes&lt;/li&gt;
&lt;li&gt;Install dependencies&lt;/li&gt;
&lt;li&gt;Run tests and builds&lt;/li&gt;
&lt;li&gt;Push a branch and open a PR&lt;/li&gt;
&lt;li&gt;Even send a video demo of the finished work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;All of this happens inside an isolated sandbox not on your local machine.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What Problem Does This Solve?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Until now, most AI coding tools worked locally:&lt;/p&gt;
&lt;p&gt;They modified files on your machine&lt;/p&gt;
&lt;p&gt;Consumed your CPU and RAM&lt;/p&gt;
&lt;p&gt;Relied on your environment setup&lt;/p&gt;
&lt;p&gt;Risked breaking things if misconfigured&lt;/p&gt;
&lt;p&gt;For large codebases, microservices, Docker-based stacks, or CI-heavy workflows, this becomes limiting.&lt;/p&gt;
&lt;p&gt;Cloud agents solve that by:&lt;/p&gt;
&lt;p&gt;Running in a clean, reproducible environment&lt;/p&gt;
&lt;p&gt;Eliminating “works on my machine” problems&lt;/p&gt;
&lt;p&gt;Reducing risk to local files&lt;/p&gt;
&lt;p&gt;Enabling remote triggering via web, Slack, mobile, or API&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This isn’t just better autocomplete.&lt;/p&gt;
&lt;p&gt;It’s a shift from:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI as a coding assistant&lt;/strong&gt;&lt;br&gt;
to&lt;br&gt;
&lt;strong&gt;AI as an autonomous engineering worker&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When agents can clone repos, test changes, and open PRs independently, the development workflow fundamentally changes.&lt;/p&gt;
&lt;p&gt;The PR becomes the review boundary.&lt;br&gt;
The cloud VM becomes the execution layer.&lt;br&gt;
The developer becomes the decision-maker.&lt;/p&gt;
&lt;p&gt;We’re moving toward AI-native software workflows — and this is an important step in that direction.&lt;/p&gt;
&lt;p&gt;Curious how this will reshape CI/CD, code review culture, and engineering team structure over the next few years.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What are your thoughts?&lt;/strong&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/12182/cursors-cloud-agents-a-big-shift-in-ai-assisted-development</guid>
<pubDate>Wed, 25 Feb 2026 19:26:56 +0000</pubDate>
</item>
<item>
<title>Speeding Up Layout from Figma with MCP and Cursor</title>
<link>https://coderlegion.com/11589/speeding-up-layout-from-figma-with-mcp-and-cursor</link>
<description>&lt;p&gt;Converting a design from Figma into code is an unavoidable stage of development, one that's often tedious and time-consuming. Even when we work with design systems where colors, fonts, and spacing are standardized, and layers and components are neatly named, transferring styles and double-checking every detail still eats up a lot of time and energy.&lt;/p&gt;
&lt;p&gt;If you're still stuck in the copy-paste loop and are thoroughly tired of this routine - it's high time to look towards AI and the useful tools it can offer. In this article, I'll show you how to leverage the full power of AI assistants in the design implementation process, using the duo of Cursor IDE and an MCP Server as an example.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://modelcontextprotocol.io/docs/getting-started/intro&quot;&gt;MCP (Model Context Protocol)&lt;/a&gt; is a tool that burst onto the scene in 2025 and quickly found its place in the AI tool ecosystem. Its emergence was a logical step in the evolution of AI agents, which outgrew the limited context of a single model. &lt;br&gt;
MCP is an open-source standard that describes how AI agents and applications interact with each other and with external systems. Simply put, MCP acts as a language interpreter between products and Large Language Models (LLMs). It receives data in a specific service's &quot;language&quot; and translates it into a format the AI can understand. &lt;br&gt;
In other words, MCP allows AI agents to expand their capabilities by gaining access to a broader context. Through MCP, an AI can safely fetch data via API, search for information, perform analytics based on external services, and complete other tasks beyond the base model's reach. &lt;br&gt;
Companies like Figma can create their own MCP servers for their products by implementing this standard. Such a server knows how to call the product's API, extract the necessary context, and pass it to the agent in a structured way. In Figma's case, an MCP server directly integrates Figma into the workflow, providing AI agents with design information and the context needed to generate code based on Figma design files.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;requirements&quot;&gt;Requirements&lt;/h3&gt;
&lt;p&gt;Integrating such a tool into your workflow isn't complicated. You'll need: a code editor with MCP support (VS Code, Cursor, Claude Code, Codex, etc.) and access to a Figma project.&lt;/p&gt;
&lt;p&gt;Of course, there are nuances, such as design requirements, Figma's pricing plan, and other details. We'll discuss those a bit later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What the Process Looks Like from a User's Perspective&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In broad strokes, the workflow is like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Setting up an MCP server inside your editor.&lt;/li&gt;
&lt;li&gt;Connecting to Figma via automatic browser authorization or manually using an access token (depending on the chosen MCP).&lt;/li&gt;
&lt;li&gt;Prompting the AI agent to implement the layout for the desired component.&lt;/li&gt;
&lt;li&gt;Reviewing the result, making edits, correcting the code.&lt;/li&gt;
&lt;li&gt;Clarifying requirements and expanding the context.&lt;/li&gt;
&lt;li&gt;Getting the result (rapid layout).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I've tried different MCPs in practice; they are all functional options with their own quirks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/grab/cursor-talk-to-figma-mcp&quot;&gt;MCP Cursor Talk To Figma&lt;/a&gt; - a bit more demanding to set up (you need to set up a local server following the instructions and run the &quot;Cursor Talk To Figma&quot; plugin in Figma; works even without Dev Mode access).&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/GLips/Figma-Context-MCP&quot;&gt;Framelink MCP for Figma&lt;/a&gt; - convenient to set up, works even without Dev Mode access.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://developers.figma.com/docs/figma-mcp-server&quot;&gt;Figma MCP Server&lt;/a&gt; - official from Figma (but there's a nuance regarding Dev Mode).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let's take a closer look at the process using the official Figma MCP Server as an example.&lt;/p&gt;
&lt;h3 id=&quot;the-process&quot;&gt;The Process&lt;/h3&gt;
&lt;p&gt;First, log into Figma and open your design project.&lt;br&gt;
Then, follow the &lt;a rel=&quot;nofollow&quot; href=&quot;https://developers.figma.com/docs/figma-mcp-server/remote-server-installation/#cursor&quot;&gt;installation instructions&lt;/a&gt; for the server in your IDE settings. It's genuinely simple and quick, taking just a couple of minutes. After installation and OAuth authorization, the server will show as 'enabled'.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=13968880122841124170&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Now the editor (in my case is Cursor) has access to a ready MCP server.&lt;br&gt;
Select the desired component in the design and copy its link:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=16315475571632974778&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Write your prompt. It can be concise:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&quot;Implement the component design from &lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.figma.com/design/&amp;lt;link-to-your-selection&amp;gt;&quot;&gt;https://www.figma.com/design/&amp;lt;link-to-your-selection&amp;gt;&lt;/a&gt;&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Or more detailed (this makes the agent's job easier and reduces the number of operations):&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&quot;@feature.tsx Implement the component design from &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.figma.com/design/&amp;lt;link-to-your-selection&amp;gt;&quot;&gt;https://www.figma.com/design/&amp;lt;link-to-your-selection&amp;gt;&lt;/a&gt; according to the @always.md. Use Tailwind for layout, spacing and typography. Do not download images. Use placeholders from @images&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Executing such a prompt is quite fast - from 20 seconds for small components (card, quote, hero block) to a couple of minutes for an entire page.&lt;/p&gt;
&lt;p&gt;After that, the foundation is ready:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=14890077267598576030&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Then we ask the AI agent to adjust its approach:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&quot;- Replace custom Tailwind values with standard utility classes. For example, avoid arbitrary values like&lt;/em&gt; &lt;code&gt;p-[40px]&lt;/code&gt; or &lt;code&gt;text-[64px]&lt;/code&gt;; &lt;em&gt;use default Tailwind spacing and font sizes&lt;/em&gt; (&lt;code&gt;p-10, text-4xl&lt;/code&gt;, etc.) &lt;em&gt;instead.- Replace custom CSS variable references in class names with design-system aliases. For example,&lt;/em&gt; &lt;code&gt;text-[var(--color-text-light-gray)]&lt;/code&gt; &lt;em&gt;should be written as&lt;/em&gt; &lt;code&gt;text-light-gray&lt;/code&gt;.&quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=7482121036680301127&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Depending on the AI model and the complexity of the design and the existing codebase, the AI can produce different results. So, you need to help the agent with context. This is where rules come in - you can create and expand them as you see fit. The documentation offers some &lt;a rel=&quot;nofollow&quot; href=&quot;https://developers.figma.com/docs/figma-mcp-server/add-custom-rules/&quot;&gt;tips&lt;/a&gt; on this.&lt;/p&gt;
&lt;p&gt;The rules I used for a project with a React+Tailwind stack look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Cursor Project Rules &amp;amp; Guidelines
## Always Rules
## HTML / Accessibility (Component-Level Default)
- Use semantic tags (`section`, `article`, `nav`, `header`, `footer`) where relevant.  
- Follow proper heading hierarchy inside components (don’t start with `&amp;lt;h1&amp;gt;` unless it’s a full page).  
- Every image must have an `alt` attribute.  
- Make interactive elements (buttons, links, menus) keyboard accessible.  
## Code Generation &amp;amp; Architecture (JS/TS + React)
- Use **TypeScript** in strict mode; avoid `any`.  
- Prefer **type** over `interface` (except for classes).  
- Use **named exports only**; avoid default exports.  
- Prefer **guard expressions** instead of nested conditions.  
- Use **union types** instead of enums; `as const` objects are allowed.  
## CSS / Styling (General)
- Use Tailwind for styling.
- Use a **mobile-first** approach.  
- Prefer flexible dimensions (`min/max-width`) over fixed ones
## Color &amp;amp; Design System
- Extract exact colors from Figma data; do not approximate.
- If brand colors or repeated colors appear for the first time, create CSS variables in src/index.css.
- Use exact hex or rgba values from Figma; do not approximate with Tailwind.
- Font families and other constants should be defined in src/index.css.
- Use Tailwind responsive breakpoints for layout.
## Images and icons
- Do not attempt to download images, use a placeholder from `src/assets/images/`.  
- Always specify `alt`, `width`, and `height` attributes.  
- Use descriptive `alt` text based on the component’s purpose or content.  
## Development Workflow Optimization
- **Avoid redundant checks** - Don't check linter, existing configurations, or dependencies unless specifically requested
- **Skip obvious validations** - If package.json shows dependencies are installed, don't verify setup
- **Minimal todo lists** - Only create todos for complex multi-step tasks (3+ distinct steps)
- **Focus on core task** - Complete the main objective first, then add refinements if needed
- **Assume working environment** - Don't verify basic project setup unless errors occur
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It's convenient to place the rules in a separate directory. For example, create a .cursor folder in the project root and put all rules inside a rules folder within it. Be sure to give the AI agent a link to the rules.&lt;br&gt;
Here's also an example of a detailed set of rules from another project configured with &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/GLips/Figma-Context-MCP&quot;&gt;Framelink MCP&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=4613196500788850491&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;It's important to understand that the agent may selectively ignore formal rules. Sometimes, it makes sense to duplicate important requirements directly in the prompt. It doesn't hurt to add a reminder at the beginning of the dialogue like: &quot;Respect all rules from .cursor/rules&quot;.&lt;/p&gt;
&lt;p&gt;Another topic is the AI agent's analysis of existing styles and components. Even if the agent correctly navigates the project structure and understands current UI patterns, it doesn't guarantee the generated code will fully meet your requirements and expectations.&lt;/p&gt;
&lt;p&gt;Here's a list of what positively affects the quality of the AI agent's output:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you're creating a project from scratch - set up the basic CSS settings for html, body, variables, media breakpoints, fonts, mixins, etc., yourself. On this foundation, the AI can help you pull missing colors, fonts, sizes, spacing from Figma into the project, and form styles for basic UI components, placing what you need into variables.&lt;/li&gt;
&lt;li&gt;Reference existing project files as a guide for structure, patterns, and code styles in TS/JS.&lt;/li&gt;
&lt;li&gt;Rules should be concise, clear, and consistent.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The fuller the context available to the AI agent, the more organically the design integration into code will proceed. Context includes not only rules and component examples but also basic project settings, existing files, styles, patterns, and any documentation that helps the agent correctly navigate the structure and development approaches.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;You can expand the context not only with rules and component examples. I highly recommend checking out Figma's Code Connect feature. It's only available for Organization and Enterprise plans, but it links real components from your repository with components in Figma - this way, the agent sees not only the design structure but also the actual code, import paths, props, and usage examples. If the Figma project is a true design system, such a tool seems like a must-have for a team planning to use MCP.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I also want to mention the topic of responsive design separately. AI handles generating the necessary layout based on provided responsive designs quite well. Example prompt:&lt;/p&gt;
&lt;p&gt;&quot;&lt;em&gt;@feature.tsx Implement the component design from Figma:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- Mobile: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.figma.com/design/&amp;lt;link-to-your-selection&amp;gt;&quot;&gt;https://www.figma.com/design/&amp;lt;link-to-your-selection&amp;gt;&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- Desktop: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.figma.com/design/&amp;lt;link-to-your-selection&amp;gt;&quot;&gt;https://www.figma.com/design/&amp;lt;link-to-your-selection&amp;gt;&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Ensure responsive design: switch to desktop layout at 1024px width.&lt;/em&gt;&quot;&lt;/p&gt;
&lt;p&gt;Here are a couple of visual examples for a project with only the most minimal basic settings so far, and a UI component base still being formed:&lt;/p&gt;
&lt;p&gt;Example of a website card:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=12856205679418381313&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;And here's an entire page:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=13553787104930712108&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;As you can see, AI + MCP handle such tasks as well: it took me about a minute to formulate the request and generate the code. We got a result even with a raw, unconfigured project. However, this is more of a theoretical example. In practical development, this approach isn't justified. Converting an entire page at once creates an extra intermediary layer - code that will inevitably need to be redesigned, parsing and rethinking a large volume of already generated markup.&lt;/p&gt;
&lt;h3 id=&quot;nuances-and-limitations&quot;&gt;Nuances and Limitations&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Tokens&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You'll notice that executing requests consumes tokens, using up your editor's pricing plan limit. You can't avoid spending tokens altogether. But you can observe the dialogue with the AI to see what extra steps it's taking and then experiment with different models. For example, you can skip linter checks and intermediate code reports in the rules, etc.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=9842673222452529181&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Real examples:&lt;br&gt;
Implementing a card component: 161.9k tokens – $0.10&lt;br&gt;
Implementing a home page (6 sections): 433.6k tokens – $0.21&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Figma API Limits&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After a couple of hours of work on a free plan, you'll likely get a &quot;429 – too many requests&quot; system message. This is a Figma API limitation, not MCP. As explained on &lt;a rel=&quot;nofollow&quot; href=&quot;https://help.figma.com/hc/en-us/articles/34963238552855-What-if-I-m-rate-limited&quot;&gt;Figma's site&lt;/a&gt;, this happens because applications and integrations are only allowed to send a certain number of requests to the REST API on your behalf. The limit depends on your pricing plan, license, and file location.&lt;/p&gt;
&lt;p&gt;In other words, using MCP on Figma's free plan will only work sporadically, a little, in test mode. Full-fledged work requires access to a paid plan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Dev Mode&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For the official Figma MCP, you need Dev Mode - a paid feature. Their site says the remote server is available for &lt;a rel=&quot;nofollow&quot; href=&quot;https://help.figma.com/hc/en-us/articles/360040328273-Figma-plans-and-features&quot;&gt;all seats and plans&lt;/a&gt;, and the desktop server is available for &lt;a rel=&quot;nofollow&quot; href=&quot;https://help.figma.com/hc/en-us/articles/27468498501527-Updates-to-Figma-s-pricing-seats-and-billing-experience#h_01JCPBM8X2MBEXTABDM92HWZG4&quot;&gt;Dev or Full seat&lt;/a&gt; on &lt;a rel=&quot;nofollow&quot; href=&quot;https://help.figma.com/hc/en-us/articles/360040328273-Figma-plans-and-features&quot;&gt;all paid plans&lt;/a&gt;. In practice, I only managed to connect to the remote MCP after activating Dev Mode access.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Design Requirements&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With a messy design, you might get nowhere. Or rather, you might get something, but fixing the errors will take longer than if you did everything manually.&lt;/p&gt;
&lt;p&gt;The main recommendations for the design are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Layers should be grouped logically, their names should correspond to the context, and the correct structure of frames/components must be maintained.&lt;/li&gt;
&lt;li&gt;Layer and variable names should be clear, consistent, and reflect the element's role (e.g., color-primary, font-heading-lg, spacing-md).&lt;/li&gt;
&lt;li&gt;Auto-layout is used.&lt;/li&gt;
&lt;li&gt;Constraints are set for layers.&lt;/li&gt;
&lt;li&gt;Layers don't overlap.&lt;/li&gt;
&lt;li&gt;Alignment and spacing follow consistent rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;when-not-to-use-mcp&quot;&gt;When NOT to Use MCP&lt;/h3&gt;
&lt;p&gt;I wouldn't use MCP when the design is poor - layers aren't grouped and are chaotic, colors and text styles are scattered and inconsistent, text is split into separate layers. Also, don't waste time converting designs for complex components, components with multi-layered elements and special animations. Or when the volume of work is small and targeted - in this case, it's probably easier to work with components manually.&lt;/p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;In this article, we looked at what converting a design into code looks like with AI and MCP. Of course, refining components remains a separate process. The ready code proposed by the AI requires careful review, correction, and in some cases, a complete rewrite. Often, it's easier to just create a component manually from the start than to try to get a result automatically.&lt;/p&gt;
&lt;p&gt;And yet, it's impossible to deny that a properly configured MCP and correct interaction with it gives a powerful boost to frontend development. With skillful integration, the effort and time a developer spends on transferring and checking styles can be redirected towards architecture and logic. The main thing is not to rely blindly on the assistant. MCP is just an additional tool that helps speed up work, but the responsibility for code quality remains with the developer.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Author: Liya Vasilkova, frontend developer at ByteMinds&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/11589/speeding-up-layout-from-figma-with-mcp-and-cursor</guid>
<pubDate>Fri, 13 Feb 2026 11:21:32 +0000</pubDate>
</item>
</channel>
</rss>