<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Seulki's AI Dev Log]]></title><description><![CDATA[Seulki's AI Dev Log]]></description><link>https://seulki-i.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 12 Nov 2026 08:17:20 GMT</lastBuildDate><atom:link href="https://seulki-i.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[I A/B Tested 10 Coding-Agent Skills. None Cleared the Adopt Bar]]></title><description><![CDATA["Ten comparisons on 12 November 2026, all n=1. None met the pre-registered adopt rule." This follows Running Claude, Codex & Grok as One Team on a…]]></description><link>https://seulki-i.hashnode.dev/i-a-b-tested-10-coding-agent-skills-none-cleared-the-adopt-bar</link><guid isPermaLink="true">https://seulki-i.hashnode.dev/i-a-b-tested-10-coding-agent-skills-none-cleared-the-adopt-bar</guid><category><![CDATA[AI coding]]></category><category><![CDATA[agent-skills]]></category><category><![CDATA[ab testing]]></category><dc:creator><![CDATA[CHOI SEULKI]]></dc:creator><pubDate>Thu, 12 Nov 2026 04:41:46 GMT</pubDate><content:encoded><![CDATA[<p>"Ten comparisons on 12 November 2026, all n=1. None met the pre-registered adopt rule."</p>
<p>This follows <a href="https://seulki-i.hashnode.dev/running-claude-codex-grok-as-one-team-on-a-locked-down-enterprise-project-day-0">Running Claude, Codex &amp; Grok as One Team on a Locked-Down Enterprise Project (Day 0)</a>.</p>
<p>Agent skill directories keep growing, and it is easy to believe that dropping in a planning skill, a TDD skill, or a wiki skill will make a coding agent noticeably better. I am a backend developer with four years of experience in SI work, mostly on commerce-style services. I wanted a number, not a vibe.</p>
<p>So I ran the same fixed tasks twice: once with skills forbidden, once with the agent required to follow a single skill document. I registered the pass/fail rule before looking at outcomes.</p>
<p>The short version: <strong>on 12 November 2026 (Asia/Seoul) I completed ten comparisons. None met the pre-registered adopt bar.</strong> A couple came close. Several burned a lot more tokens for a tiny quality bump, or none at all. This post is the write-up.</p>
<h2>1. Method</h2>
<p>Each comparison is one published agent skill.</p>
<ul>
<li><strong>Arm A</strong> could not read any skill document.</li>
<li><strong>Arm B</strong> had to read and follow that skill's document.</li>
<li>The task prompt was identical except for a run tag.</li>
<li>Every run was a fresh session of the same model (Grok, grok-4.7-build) in headless mode. I did not steer the agent mid-run.</li>
</ul>
<p>When several skills shared a task, I ran A once and compared every B against that same baseline. That keeps the prompt and the day constant, but it also means one lucky or unlucky A is reused. I treat that as a limitation, not a feature.</p>
<p>I measured the same things every time:</p>
<ul>
<li><strong>Non-cache tokens:</strong> input minus cache reads, plus output. This is the cost number used in the verdict. I also logged total tokens including cache, but I did not judge on them.</li>
<li><strong>Active time:</strong> time the model was actually working, idle excluded.</li>
<li><strong>Quality (1–5):</strong> the mean of accuracy, completeness, actionability, concision, and scope discipline. Before grading I stripped skill names and run tags and shuffled the labels. A separate Grok session, seeing the work for the first time, did the scoring.</li>
<li><strong>Review rejects:</strong> defects a reviewer would send back, tagged as actual error, spec misunderstanding, missing context, or out-of-scope.</li>
<li><strong>Tests:</strong> implementation task only — 13 hidden tests the agent never saw.</li>
<li><strong>Contamination and compliance:</strong> if A had read a skill, that pair would be voided. I also checked that B actually opened the skill. All ten pairs were clean, and every B read its skill.</li>
<li><strong>Repo guard:</strong> each run was checked so the experiment did not modify the work repositories. All guards passed.</li>
</ul>
<p>There were four tasks. I kept client identifiers and production data out of the prompts, and I describe the tasks only in general terms here.</p>
<ol>
<li><strong>Plan.</strong> Write one implementation plan for wiring a partial loyalty-points recovery action into an e-commerce admin screen. Repositories are read-only.</li>
<li><strong>Analysis.</strong> In a Spring/MyBatis e-commerce backend, trace how that recovery API should flow and write a short analysis with evidence. Read-only again.</li>
<li><strong>Implementation.</strong> Implement a small Node.js module from a written spec — the verdict function used by this lab itself. Scoring is backed by those 13 hidden tests.</li>
<li><strong>Wiki.</strong> Ingest one source document into a local markdown wiki copy and answer one question, citing only that source. This is not a test of "wiki versus no wiki." Both arms ingested into a wiki. The only difference was whether a wiki skill was loaded.</li>
</ol>
<h2>2. Verdict rules (written first)</h2>
<p>I did not want to invent a story after seeing the table, so the rule was fixed in code before the runs.</p>
<ul>
<li><strong>Adopt (<code>써야 함</code>):</strong> quality stays within −0.3 of A, tests pass, rejects do not go up, and non-cache tokens <em>or</em> active time drop by at least 20%. Alternatively, quality rises by 1 or more while tokens rise by no more than 30%.</li>
<li><strong>Drop (<code>빼기</code>):</strong> quality falls by 0.5 or more, or tokens rise by 50% or more while the quality gain is under 0.3.</li>
<li><strong>Hold (<code>보류</code>):</strong> everything in between. A nicer-looking answer that costs too much still lands here.</li>
</ul>
<p>I also decided in advance that n=1 is only directional. I will not treat a result as settled until the same task has been repeated at least three times. Every figure below is <strong>n=1, indicative</strong>.</p>
<h2>3. Results</h2>
<p>All runs are from 12 November 2026. Token counts use the rounded thousands from the result cards. Percentages are the recorded values computed from the raw counts.</p>
<table>
<thead>
<tr>
<th>Skill</th>
<th>Source</th>
<th>Task</th>
<th>Verdict</th>
<th>Quality A→B</th>
<th>Non-cache tokens</th>
<th>Active time</th>
<th>Rejects A→B</th>
</tr>
</thead>
<tbody><tr>
<td>test-driven-development</td>
<td>obra/superpowers</td>
<td>impl</td>
<td>Hold</td>
<td>4.8→5 (+0.2)</td>
<td>137k→123k (−10.2%)</td>
<td>7m 18s→9m 35s (+31.3%)</td>
<td>2→0</td>
</tr>
<tr>
<td>incremental-implementation</td>
<td>addyosmani/agent-skills</td>
<td>impl</td>
<td>Hold</td>
<td>4.8→4.8 (0)</td>
<td>137k→143k (+4.5%)</td>
<td>7m 18s→9m 28s (+29.7%)</td>
<td>2→1</td>
</tr>
<tr>
<td>graphify</td>
<td>safishamsi/graphify</td>
<td>analysis</td>
<td>Hold</td>
<td>4.8→5 (+0.2)</td>
<td>158k→181k (+14.2%)</td>
<td>4m 35s→8m 30s (+85.5%)</td>
<td>0→0</td>
</tr>
<tr>
<td>planning-and-task-breakdown</td>
<td>addyosmani/agent-skills</td>
<td>plan</td>
<td>Hold</td>
<td>4.4→4.8 (+0.4)</td>
<td>97k→145k (+48.8%)</td>
<td>5m 29s→10m 58s (+100%)</td>
<td>1→1</td>
</tr>
<tr>
<td>improve (plan)</td>
<td>shadcn/improve</td>
<td>plan</td>
<td>Hold</td>
<td>4.4→4.8 (+0.4)</td>
<td>97k→164k (+68.6%)</td>
<td>5m 29s→11m 28s (+109.1%)</td>
<td>1→1</td>
</tr>
<tr>
<td>improve (impl, two sessions summed)</td>
<td>shadcn/improve</td>
<td>impl</td>
<td>Drop</td>
<td>4.8→5 (+0.2)</td>
<td>137k→242k (+77.1%)</td>
<td>7m 18s→14m 41s (+101.1%)</td>
<td>2→0</td>
</tr>
<tr>
<td>karpathy-llm-wiki</td>
<td>Astro-Han/karpathy-llm-wiki</td>
<td>wiki</td>
<td>Drop (removed same day)</td>
<td>5→5 (0)</td>
<td>64k→120k (+89.1%)</td>
<td>2m 11s→4m 27s (+103.8%)</td>
<td>0→0</td>
</tr>
<tr>
<td>grill-me</td>
<td>mattpocock/skills</td>
<td>plan</td>
<td>Drop (removed same day)</td>
<td>4.4→4 (−0.4)</td>
<td>97k→211k (+116.7%)</td>
<td>5m 29s→11m 44s (+114%)</td>
<td>1→3</td>
</tr>
<tr>
<td>tdd</td>
<td>mattpocock/skills</td>
<td>impl</td>
<td>Drop (removed same day)</td>
<td>4.8→5 (+0.2)</td>
<td>137k→308k (+125.2%)</td>
<td>7m 18s→10m 40s (+46.1%)</td>
<td>2→0</td>
</tr>
<tr>
<td>writing-plans</td>
<td>obra/superpowers</td>
<td>plan</td>
<td>Drop (removed same day)</td>
<td>4.4→4.6 (+0.2)</td>
<td>97k→259k (+166.1%)</td>
<td>5m 29s→13m 42s (+149.8%)</td>
<td>1→1</td>
</tr>
</tbody></table>
<p>Non-cache token change versus the no-skill baseline (left is a cut, right is an increase):</p>
<pre>test-driven-development      −10.2%  ██
incremental-implementation    +4.5%  █
graphify                     +14.2%  ███
planning-and-task-breakdown  +48.8%  ██████████
improve (plan)               +68.6%  █████████████
improve (impl)               +77.1%  ███████████████
karpathy-llm-wiki            +89.1%  ██████████████████
grill-me                    +116.7%  ███████████████████████
tdd                         +125.2%  █████████████████████████
writing-plans               +166.1%  █████████████████████████████████</pre>

<p>On the implementation task, the hidden tests were 13/13 for A and for every B. On the wiki task, citation accuracy was 2/2 for A and 3/3 for B (both 1.0). Total tokens including cache rose even more on the B arms; those totals were recorded, not used for the verdict.</p>
<p>One summing rule is worth flagging. The <code>improve</code> implementation comparison adds a planning session that used the skill and a follow-up implementation session that did not. The other implementation skills are single sessions.</p>
<h2>4. How I read the table</h2>
<p><strong>Adopt 0, hold 5, drop 5.</strong> After a drop verdict I uninstalled <code>writing-plans</code>, <code>grill-me</code> (and the companion <code>grilling</code> skill), <code>tdd</code>, and <code>karpathy-llm-wiki</code> on the same day. <code>improve</code> split: drop on the implementation task, hold on the planning task.</p>
<p>The closest call was <code>test-driven-development</code> from obra/superpowers. Quality went 4.8→5, rejects 2→0, and non-cache tokens fell 10.2%. Active time, though, rose 31.3%, so it missed the 20% cost cut, and a +0.2 quality bump is far from the +1 alternative. Hence hold. A different skill also named <code>tdd</code>, from mattpocock/skills, reached the same quality of 5 but at +125.2% tokens, which is a drop. The label on the skill is not the result.</p>
<p>The four planning skills either ticked quality up slightly (+0.2 to +0.4) or down (<code>grill-me</code>, −0.4). Tokens rose between 48.8% and 166.1%, and active time roughly doubled. Rejects did not fall (1→1) and in one case rose (1→3). A generic planning skill did not make this review cheaper.</p>
<p><code>graphify</code> looks harmless at +0.2 quality and no rejects, but tokens were +14.2% and time +85.5%, so it stays on hold. The wiki skill kept quality at 5 vs 5 and nearly doubled tokens (+89.1%) and time (+103.8%), so it was dropped. Again: this is the cost of loading the skill on top of a wiki workflow, not a verdict on keeping a wiki.</p>
<h2>5. What was actually useful, and when a skill is worth it</h2>
<p>I cannot point to a skill and say "this is the one you need," because nothing in this sample cleared the adopt bar. The only candidate I would rerun with a larger n is <code>test-driven-development</code>.</p>
<p>The more useful artifact was the lab itself: freeze the task, change only whether a skill is loaded, and look at tokens, time, rejects, and blinded quality together. Writing the drop rule in code before the first run mattered. Hidden tests on the implementation task also mattered. They caught that every arm could pass the suite while still disagreeing on the edges of the spec.</p>
<p>I did not measure the next idea, so I will not pretend it is a result. On the planning task, the no-skill arm and several planning-skill arms stumbled on the same project-specific review points. A short checklist of known reject reasons in the prompt may be a cheaper fix than installing a generic planning skill. That comparison is still to do.</p>
<p>Until a skill beats the rule below, I will not leave it on by default just because it is popular or well named:</p>
<ul>
<li>keep quality within 0.3 of the baseline, keep tests green, do not add rejects, and cut tokens or time by 20% or more, or</li>
<li>raise quality by a full point without growing tokens more than 30%.</li>
</ul>
<p>A +0.2 quality bump does not pay for a doubled token bill.</p>
<h2>6. Limits</h2>
<p>The numbers only make sense with these limits attached.</p>
<ul>
<li>Every comparison is n=1. Until a task is repeated at least three times, this is indicative only.</li>
<li>Grading was blinded, but it was a single grader session, and it used the same model family as the runner. Blinding removes labels, not shared taste.</li>
<li>A was reused across skills on the same task, so one baseline affects several pairs.</li>
<li>I only ran Grok. The same skill may behave differently in another coding agent.</li>
<li><code>grill-me</code> is designed to ask a human questions. In headless mode I assumed the recommended answers were approved. An interactive run could look different.</li>
<li>The <code>improve</code> implementation figure sums two sessions.</li>
<li>Four task types are not a career. I would not generalize this to longer work, other domains, or runs where a person interrupts mid-task.</li>
<li>I generalized the work tasks and left identifying names, paths, and business rules out of this post.</li>
</ul>
<p>The next measurements are straightforward: repeat the closest hold with a larger n, and A/B a reject-reason checklist against "just add another skill." Until then, a new skill is a hypothesis, not a default.</p>
<hr />
<p><em>Every figure in this post comes from the 12 November 2026 lab records. I did not add estimates.</em></p>
<p>Korean version: <a href="https://po-p.tistory.com/40">https://po-p.tistory.com/40</a></p>
]]></content:encoded></item><item><title><![CDATA[Running Claude, Codex & Grok as One Team on a Locked-Down Enterprise Project (Day 0)]]></title><description><![CDATA["A 2-week experiment: can a tiny, measured AGENTS.md cut token cost and agent mistakes?" I'm a backend developer in Korea with 4 years of experience. I…]]></description><link>https://seulki-i.hashnode.dev/running-claude-codex-grok-as-one-team-on-a-locked-down-enterprise-project-day-0</link><guid isPermaLink="true">https://seulki-i.hashnode.dev/running-claude-codex-grok-as-one-team-on-a-locked-down-enterprise-project-day-0</guid><category><![CDATA[AI coding]]></category><category><![CDATA[agent-skills]]></category><category><![CDATA[ab testing]]></category><category><![CDATA[llm]]></category><category><![CDATA[developer productivity]]></category><dc:creator><![CDATA[CHOI SEULKI]]></dc:creator><pubDate>Thu, 12 Nov 2026 04:37:51 GMT</pubDate><content:encoded><![CDATA[<p>"A 2-week experiment: can a tiny, measured AGENTS.md cut token cost and agent mistakes?" I'm a backend developer in Korea with 4 years of experience. I work at a system integration (SI) company, which means I'm dispatched to client sites and build what the client asks for.</p>
<p>That comes with constraints most AI-coding blog posts don't have:</p>
<p>No direct DB access. I work from exported files, screens, and what the client allows. Legacy code everywhere. A lot of the existing code was copied from other projects and is not "the right answer". Multiple repos. A backend, a new Next.js frontend (read-only for me), and a legacy service I migrate from. Over the past months I've been using three agents together: Claude Code as the implementer, Codex for review and verification, and Grok to challenge facts and designs. This post is Day 0 of a 2-week experiment to find out whether my setup actually helps, or just feels like it helps.</p>
<p>The problem: my instructions grew, and so did the cost My backend repo had a detailed CLAUDE.md: DB-first workflow, known pitfalls, verified facts, agent roles. It works. But when I measured my agent logs for the last two weeks, I found this:</p>
<p>Claude Code (3 working days) Total tokens ~208M Share that was cache reads ~98% Tool calls 760 Search calls (grep/glob/rg) ~23% of tool calls 98% cache reads means most of the cost is the agent re-reading long context every turn, not doing new work. Nearly a quarter of tool calls were searches, which suggests agents were rediscovering things that were already written down.</p>
<p>Why this setup, and why run the experiment</p>
<p>Starting point: Matt Pocock's "Home Repo" pattern The home-folder layout isn't my idea. I took it from Matt Pocock's "Home Repo" pattern on X: keep skills, rule files, and a wiki in one home repo, run the agents from there, and list the other repos' locations in AGENTS.md so the agents can work across several repos at once.</p>
<p>My project is split into three repos: a backend, a new frontend, and a legacy service. On top of that, I work in an SI client environment with no direct DB access. That's why the pattern looked like a good fit.</p>
<p>But does it actually help? A popular post doesn't prove the pattern works. Three reasons to test it:</p>
<p>Different environment. The original assumes agents can freely read and edit everything. Mine has read-only repos, no DB access, and legacy code that can't be trusted as ground truth. The cost is measurable. On day 0, cache reads were about 98% of tokens. Putting the rules in one home folder and keeping them short should lower that, and I can compare before and after. Separating "feels better" from "is better." I'm tracking tokens, the share of search calls, and logged agent mistakes instead of going on gut feeling. In the results post on Nov 25, I'll answer with numbers whether this was the right call. If it didn't help, I'll say so and explain what I removed and why.</p>
<p>References Matt Pocock on X: The Home Repo The setup I'm testing</p>
<p>One "home" folder above all repos All repos live under one workspace/ folder. A single root AGENTS.md holds only cross-repo rules:</p>
<p>Which repo is writable (backend) and which are read-only (frontend, legacy) Where to run each agent. Codex only reads AGENTS.md from the git root down, so it has to start in workspace/. Claude Code also reads parent folders. Who does what (implementer ≠ verifier) A legacy → new-service mapping table, where every row carries its evidence file Repo-specific rules stay in the repo. The same rule is written in exactly one place.</p>
<p>"Short request → fixed procedure" I don't want to type "design first, then ask me" every time. So the root file maps request types to procedures:</p>
<p>"Design a points API" → search existing code → check real DB columns → write docs/-design.md → wait for my approval → implement → build + .http request check → review by a different agent.</p>
<p>A mistake log, not a trend log Every time an agent edits the wrong repo, claims a column exists when it doesn't, re-investigates a documented fact, or reports "done" without verification, it gets one line in agent-misses.md.</p>
<p>Instruction changes are only allowed if they cite a line in that log or a measurement. A new trend alone is not a reason. The root file has a one-page limit: add one rule, remove or merge one.</p>
<p>Measuring it A small Node script reads local Claude Code and Codex session logs and outputs daily tokens, cache reads, tool calls, and search calls per session to a CSV. Twice a week, a review compares the numbers with the baseline above.</p>
<p>What I'll report in 2 weeks Tokens per session and per tool call: before vs. after Search-call ratio Number of logged agent mistakes, and whether repeated ones disappear What I removed from the instructions, and what broke when I did My honest hypothesis: fewer, shorter rules in the right place beat a long, careful instruction file. But I've measured only 3 working days so far, so I could easily be wrong. That's the point of the experiment.</p>
<p>If you work in a constrained enterprise environment with AI agents, I'd love to hear how you handle it.</p>
<p>Part 1 of a series. Results on Nov 25.</p>
]]></content:encoded></item></channel></rss>