<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agent Skills on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/tags/agent-skills/</link><description>Recent content in Agent Skills on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Fri, 08 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/tags/agent-skills/index.xml" rel="self" type="application/rss+xml"/><item><title>The OS Layer for AI Coding Agents — agentmemory and agent-skills Land the Same Day</title><link>https://ice-ice-bear.github.io/posts/2026-05-08-agent-os-layer-memory-skills/</link><pubDate>Fri, 08 May 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/posts/2026-05-08-agent-os-layer-memory-skills/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post The OS Layer for AI Coding Agents — agentmemory and agent-skills Land the Same Day" /&gt;&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;Two GitHub links, dropped 30 seconds apart at the same minute. Both target ergonomic gaps in AI coding agents, but &lt;strong&gt;they target different gaps.&lt;/strong&gt; &lt;a class="link" href="https://github.com/rohitg00/agentmemory" target="_blank" rel="noopener"
 &gt;rohitg00/agentmemory&lt;/a&gt; tackles cross-session memory infrastructure; &lt;a class="link" href="https://github.com/addyosmani/agent-skills" target="_blank" rel="noopener"
 &gt;addyosmani/agent-skills&lt;/a&gt; tackles senior-engineer workflow enforcement. Read together, they sketch out an emerging OS layer for the agent era.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 Agent["AI coding agent"] --&gt; Memory["Memory / state layer"]
 Agent --&gt; Skills["Workflow / rules layer"]
 Agent --&gt; Model["Model layer"]
 Agent --&gt; UI["UI layer"]

 Memory --&gt; AM["agentmemory &amp;lt;br/&amp;gt; MCP + REST"]
 Skills --&gt; AS["agent-skills &amp;lt;br/&amp;gt; Markdown skill bundle"]
 Model --&gt; LLM["Claude / GPT / Gemini"]
 UI --&gt; Tools["Claude Code / Cursor / Cline"]&lt;/pre&gt;&lt;h2 id="1-agentmemory--persistent-memory-shared-across-every-agent-via-mcp"&gt;1. agentmemory — Persistent Memory Shared Across Every Agent via MCP
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/rohitg00/agentmemory" target="_blank" rel="noopener"
 &gt;rohitg00/agentmemory&lt;/a&gt; brands itself as &lt;em&gt;&amp;quot;#1 Persistent memory for AI coding agents based on real-world benchmarks.&amp;quot;&lt;/em&gt; Created 2026-02-25, ~2,400 stars, Apache 2.0. Project home: &lt;a class="link" href="https://agent-memory.dev" target="_blank" rel="noopener"
 &gt;agent-memory.dev&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="the-problem-it-solves"&gt;The problem it solves
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Re-explaining the architecture to the agent every session&lt;/li&gt;
&lt;li&gt;Rediscovering the same bug&lt;/li&gt;
&lt;li&gt;Re-teaching the same preferences (library choices, code style)&lt;/li&gt;
&lt;li&gt;Built-in memory like &lt;code&gt;CLAUDE.md&lt;/code&gt; or &lt;code&gt;.cursorrules&lt;/code&gt; is &lt;strong&gt;capped at 200 lines and goes stale fast&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="how-it-works"&gt;How it works
&lt;/h3&gt;&lt;p&gt;The agent silently captures what it does → compresses → stores as searchable memory → injects only the relevant context at the start of the next session. The key trick: stand up a single &lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;MCP&lt;/a&gt; server and 16+ agents share the same memory.&lt;/p&gt;
&lt;p&gt;Supported clients:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; · &lt;a class="link" href="https://cursor.com/" target="_blank" rel="noopener"
 &gt;Cursor&lt;/a&gt; · &lt;a class="link" href="https://github.com/google-gemini/gemini-cli" target="_blank" rel="noopener"
 &gt;Gemini CLI&lt;/a&gt; · &lt;a class="link" href="https://openai.com/codex/" target="_blank" rel="noopener"
 &gt;Codex CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://cline.bot/" target="_blank" rel="noopener"
 &gt;Cline&lt;/a&gt; · &lt;a class="link" href="https://block.github.io/goose/" target="_blank" rel="noopener"
 &gt;Goose&lt;/a&gt; · &lt;a class="link" href="https://windsurf.com/" target="_blank" rel="noopener"
 &gt;Windsurf&lt;/a&gt; · &lt;a class="link" href="https://roocode.com/" target="_blank" rel="noopener"
 &gt;Roo Code&lt;/a&gt; · &lt;a class="link" href="https://opencode.ai/" target="_blank" rel="noopener"
 &gt;OpenCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Any agent without MCP can connect via REST (104 endpoints)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Embeddings run locally with &lt;a class="link" href="https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2" target="_blank" rel="noopener"
 &gt;&lt;code&gt;all-MiniLM-L6-v2&lt;/code&gt;&lt;/a&gt; — no API keys, free.&lt;/p&gt;
&lt;h3 id="benchmark--longmemeval-s"&gt;Benchmark — LongMemEval-S
&lt;/h3&gt;&lt;p&gt;Numbers on &lt;a class="link" href="https://arxiv.org/abs/2410.10813" target="_blank" rel="noopener"
 &gt;LongMemEval&lt;/a&gt; (ICLR 2025, 500 questions):&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Metric&lt;/th&gt;
 &lt;th&gt;agentmemory&lt;/th&gt;
 &lt;th&gt;BM25 fallback&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;R@5&lt;/td&gt;
 &lt;td&gt;95.2%&lt;/td&gt;
 &lt;td&gt;86.2%&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;R@10&lt;/td&gt;
 &lt;td&gt;98.6%&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MRR&lt;/td&gt;
 &lt;td&gt;88.2%&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Hybrid embedding retrieval beats keyword-only BM25 by &lt;strong&gt;9 percentage points on R@5.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="token-cost"&gt;Token cost
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Approach&lt;/th&gt;
 &lt;th&gt;Annual tokens&lt;/th&gt;
 &lt;th&gt;Annual cost&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Full context paste&lt;/td&gt;
 &lt;td&gt;19.5M+&lt;/td&gt;
 &lt;td&gt;Exceeds context window&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LLM-summarized&lt;/td&gt;
 &lt;td&gt;~650K&lt;/td&gt;
 &lt;td&gt;~$500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;agentmemory&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;~170K&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;~$10&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;agentmemory + local embeddings&lt;/td&gt;
 &lt;td&gt;~170K&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;$0&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="quick-start"&gt;Quick start
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx @agentmemory/agentmemory
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="what-it-really-argues"&gt;What it really argues
&lt;/h3&gt;&lt;p&gt;The bet underneath agentmemory is one sentence — &lt;strong&gt;&amp;ldquo;memory belongs in the infrastructure layer, not the agent.&amp;rdquo;&lt;/strong&gt; Instead of every agent writing its own memory, one MCP server fans out to all of them. Whatever Claude Code learns flows into the next Cursor session intact. The project started about 50 days earlier as a viral GitHub gist (1,050 stars) and is essentially that design doc rendered into code: &lt;a class="link" href="https://github.com/karpathy" target="_blank" rel="noopener"
 &gt;Karpathy&amp;rsquo;s LLM Wiki pattern&lt;/a&gt; plus confidence scoring, lifecycle, knowledge graph, and hybrid search.&lt;/p&gt;
&lt;h2 id="2-agent-skills--senior-engineer-workflow-as-a-skill-bundle"&gt;2. agent-skills — Senior-Engineer Workflow as a Skill Bundle
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/addyosmani/agent-skills" target="_blank" rel="noopener"
 &gt;addyosmani/agent-skills&lt;/a&gt; calls itself &lt;em&gt;&amp;ldquo;Production-grade engineering skills for AI coding agents.&amp;rdquo;&lt;/em&gt; Created 2026-02-15, ~33,500 stars, MIT. At the same point in time it has 14× the stars of agentmemory — currently the strongest candidate for an agent-workflow standard.&lt;/p&gt;
&lt;h3 id="the-problem-it-solves-1"&gt;The problem it solves
&lt;/h3&gt;&lt;p&gt;&amp;ldquo;The agent writes code, but it doesn&amp;rsquo;t write code like a senior would.&amp;rdquo;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Skips the spec&lt;/li&gt;
&lt;li&gt;Skips the tests&lt;/li&gt;
&lt;li&gt;Doesn&amp;rsquo;t think about security&lt;/li&gt;
&lt;li&gt;Drops a giant PR all at once&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="a-six-stage-lifecycle"&gt;A six-stage lifecycle
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DEFINE → PLAN → BUILD → VERIFY → REVIEW → SHIP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/spec /plan /build /test /review /ship
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each slash command corresponds to one lifecycle stage and auto-activates the right skills.&lt;/p&gt;
&lt;h3 id="the-20-skills-by-stage"&gt;The 20 skills, by stage
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Define&lt;/strong&gt;: idea-refine, spec-driven-development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plan&lt;/strong&gt;: planning-and-task-breakdown&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build&lt;/strong&gt;: incremental-implementation, test-driven-development, context-engineering, source-driven-development, frontend-ui-engineering, api-and-interface-design&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify&lt;/strong&gt;: browser-testing-with-devtools, debugging-and-error-recovery&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review&lt;/strong&gt;: code-review-and-quality, code-simplification, security-and-hardening, performance-optimization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ship&lt;/strong&gt;: git-workflow-and-versioning, ci-cd-and-automation, deprecation-and-migration, documentation-and-adrs, shipping-and-launch&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="where-it-runs"&gt;Where it runs
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; (recommended, marketplace-installed): &lt;code&gt;/plugin marketplace add addyosmani/agent-skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://cursor.com/" target="_blank" rel="noopener"
 &gt;Cursor&lt;/a&gt;: copy SKILL.md into &lt;code&gt;.cursor/rules/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/google-gemini/gemini-cli" target="_blank" rel="noopener"
 &gt;Gemini CLI&lt;/a&gt; · &lt;a class="link" href="https://windsurf.com/" target="_blank" rel="noopener"
 &gt;Windsurf&lt;/a&gt; · &lt;a class="link" href="https://opencode.ai/" target="_blank" rel="noopener"
 &gt;OpenCode&lt;/a&gt; · &lt;a class="link" href="https://github.com/features/copilot" target="_blank" rel="noopener"
 &gt;GitHub Copilot&lt;/a&gt; · &lt;a class="link" href="https://kiro.dev/" target="_blank" rel="noopener"
 &gt;Kiro IDE&lt;/a&gt; · &lt;a class="link" href="https://openai.com/codex/" target="_blank" rel="noopener"
 &gt;Codex&lt;/a&gt; — &lt;strong&gt;anything that reads Markdown works&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="agent-personas"&gt;Agent personas
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;code-reviewer&lt;/code&gt; — Senior staff engineer lens, &amp;ldquo;would a staff engineer approve this?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;test-engineer&lt;/code&gt; — QA discipline, the Prove-It pattern&lt;/li&gt;
&lt;li&gt;&lt;code&gt;security-auditor&lt;/code&gt; — &lt;a class="link" href="https://owasp.org/" target="_blank" rel="noopener"
 &gt;OWASP&lt;/a&gt;, threat modeling&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="what-it-really-argues-1"&gt;What it really argues
&lt;/h3&gt;&lt;p&gt;agent-skills&amp;rsquo; bet is &lt;strong&gt;&amp;ldquo;the difference between agents isn&amp;rsquo;t model weight — it&amp;rsquo;s how strictly the workflow is enforced.&amp;rdquo;&lt;/strong&gt; TDD here isn&amp;rsquo;t &amp;ldquo;you can do TDD&amp;rdquo; — it&amp;rsquo;s &amp;ldquo;no Red-Green-Refactor, no code.&amp;rdquo; Code review isn&amp;rsquo;t a vibe; it&amp;rsquo;s five-axis review, 100-line size limits, explicit Nit/Optional/FYI severity labels. By expressing all of this in Markdown, it stays &lt;strong&gt;agent-agnostic&lt;/strong&gt; — the same skill bundle works in Claude, Cursor, and Gemini. 33K stars is the market saying this is the closest thing to a workflow standard right now.&lt;/p&gt;
&lt;h2 id="3-side-by-side"&gt;3. Side by side
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Dimension&lt;/th&gt;
 &lt;th&gt;agentmemory&lt;/th&gt;
 &lt;th&gt;agent-skills&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Author&lt;/td&gt;
 &lt;td&gt;rohitg00&lt;/td&gt;
 &lt;td&gt;addyosmani&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Form&lt;/td&gt;
 &lt;td&gt;TypeScript library + MCP server&lt;/td&gt;
 &lt;td&gt;Markdown skill bundle&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;License&lt;/td&gt;
 &lt;td&gt;Apache 2.0&lt;/td&gt;
 &lt;td&gt;MIT&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Stars (2026-05)&lt;/td&gt;
 &lt;td&gt;~2,400&lt;/td&gt;
 &lt;td&gt;~33,500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Created&lt;/td&gt;
 &lt;td&gt;2026-02-25&lt;/td&gt;
 &lt;td&gt;2026-02-15&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Domain&lt;/td&gt;
 &lt;td&gt;Memory / state infrastructure&lt;/td&gt;
 &lt;td&gt;Engineering workflow&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Decoupling mechanism&lt;/td&gt;
 &lt;td&gt;MCP standard&lt;/td&gt;
 &lt;td&gt;Markdown standard&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="4-the-combined-picture--an-os-layer-for-agents"&gt;4. The Combined Picture — An OS Layer for Agents
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR
 M["Memory / state"] --&gt; AM["agentmemory"]
 W["Workflow / rules"] --&gt; AS["agent-skills"]
 Mo["Model"] --&gt; LLM["Claude / GPT / Gemini"]
 UI["UI"] --&gt; Tools["Claude Code / Cursor / Cline"]&lt;/pre&gt;&lt;p&gt;Three or four years ago &amp;ldquo;which IDE do you use?&amp;rdquo; was the deciding question. Now it&amp;rsquo;s becoming &lt;strong&gt;&amp;ldquo;what&amp;rsquo;s your memory and skills setup?&amp;rdquo;&lt;/strong&gt; Both projects deliberately decouple from any one model — &lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;MCP&lt;/a&gt; for one, plain Markdown for the other — designed so that &lt;strong&gt;models can be swapped, but the memory and skills accumulate.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="insights"&gt;Insights
&lt;/h2&gt;&lt;p&gt;The headline of this digest isn&amp;rsquo;t either tool individually — it&amp;rsquo;s that two links shared 30 seconds apart fill exactly two distinct slots in the agent OS layer. agentmemory pulls &lt;strong&gt;state&lt;/strong&gt; down into the infrastructure; agent-skills pulls &lt;strong&gt;process&lt;/strong&gt; down into the infrastructure. The fact that both decouple from models in similar ways — one MCP server, one Markdown bundle — is the same bet from two angles: models are interchangeable but memory and skills must compound. The 33K vs 2.4K stars gap probably isn&amp;rsquo;t about timing; it&amp;rsquo;s a signal that the workflow-standard candidate is consolidating faster than the memory-infrastructure candidate. &lt;strong&gt;Two open questions for next quarter&lt;/strong&gt; — does memory standardize on MCP, and do skill bundles like agent-skills become a new SaaS category inside IDE marketplaces? The decision point has already started shifting from IDE choice to memory and skill setup.&lt;/p&gt;
&lt;h2 id="references"&gt;References
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Core repos&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/rohitg00/agentmemory" target="_blank" rel="noopener"
 &gt;rohitg00/agentmemory&lt;/a&gt; · home: &lt;a class="link" href="https://agent-memory.dev" target="_blank" rel="noopener"
 &gt;agent-memory.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/addyosmani/agent-skills" target="_blank" rel="noopener"
 &gt;addyosmani/agent-skills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Related agents and clients&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; · &lt;a class="link" href="https://cursor.com/" target="_blank" rel="noopener"
 &gt;Cursor&lt;/a&gt; · &lt;a class="link" href="https://cline.bot/" target="_blank" rel="noopener"
 &gt;Cline&lt;/a&gt; · &lt;a class="link" href="https://windsurf.com/" target="_blank" rel="noopener"
 &gt;Windsurf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/google-gemini/gemini-cli" target="_blank" rel="noopener"
 &gt;Gemini CLI&lt;/a&gt; · &lt;a class="link" href="https://openai.com/codex/" target="_blank" rel="noopener"
 &gt;Codex&lt;/a&gt; · &lt;a class="link" href="https://opencode.ai/" target="_blank" rel="noopener"
 &gt;OpenCode&lt;/a&gt; · &lt;a class="link" href="https://block.github.io/goose/" target="_blank" rel="noopener"
 &gt;Goose&lt;/a&gt; · &lt;a class="link" href="https://roocode.com/" target="_blank" rel="noopener"
 &gt;Roo Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/features/copilot" target="_blank" rel="noopener"
 &gt;GitHub Copilot&lt;/a&gt; · &lt;a class="link" href="https://kiro.dev/" target="_blank" rel="noopener"
 &gt;Kiro IDE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Protocols and standards&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;Model Context Protocol (MCP)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://owasp.org/" target="_blank" rel="noopener"
 &gt;OWASP&lt;/a&gt; — basis for the security-auditor persona&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Benchmarks and embeddings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paper: &lt;a class="link" href="https://arxiv.org/abs/2410.10813" target="_blank" rel="noopener"
 &gt;LongMemEval (arXiv:2410.10813, ICLR 2025)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2" target="_blank" rel="noopener"
 &gt;&lt;code&gt;sentence-transformers/all-MiniLM-L6-v2&lt;/code&gt;&lt;/a&gt; — local embedding model used by agentmemory&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>CODEX-R — A Micro Skill That Imports Claude Code Sessions Into Codex CLI</title><link>https://ice-ice-bear.github.io/posts/2026-05-07-codex-r-claude-code-bridge/</link><pubDate>Thu, 07 May 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/posts/2026-05-07-codex-r-claude-code-bridge/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post CODEX-R — A Micro Skill That Imports Claude Code Sessions Into Codex CLI" /&gt;&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/thedalbee/codex-r" target="_blank" rel="noopener"
 &gt;&lt;code&gt;thedalbee/codex-r&lt;/code&gt;&lt;/a&gt; is a three-star, MIT-licensed micro tool created on 2026-05-01. In one line: it is a &lt;strong&gt;Markdown-only skill that ports the &lt;code&gt;claude -r&lt;/code&gt; workflow into &lt;a class="link" href="https://openai.com/codex/" target="_blank" rel="noopener"
 &gt;OpenAI Codex CLI&lt;/a&gt;, so a single &lt;code&gt;codex -r&lt;/code&gt; command opens a picker over your &lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; sessions and imports the one you choose.&lt;/strong&gt; There is almost no code — the artifact is a single SKILL.md following the &lt;a class="link" href="https://github.com/anthropics/skills" target="_blank" rel="noopener"
 &gt;agent-skills&lt;/a&gt; pattern. The interesting question is not the star count; it is &lt;strong&gt;why someone built this and what it signals.&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph LR
 User["user"] --&gt;|"codex -r"| Wrapper["thin wrapper"]
 Wrapper --&gt; Picker["session picker"]
 Picker --&gt;|"scans ~/.claude/projects/**/*.jsonl"| Claude["Claude Code sessions"]
 Picker --&gt;|"selection"| Import["externalAgentConfig/import"]
 Import --&gt; Ledger["~/.codex/external_agent_session_imports.json"]
 Ledger --&gt;|"codex resume threadId"| Resume["Codex session resumed"]&lt;/pre&gt;&lt;h2 id="the-problem"&gt;The Problem
&lt;/h2&gt;&lt;p&gt;Codex CLI 0.128.0 added &lt;code&gt;external agent session import&lt;/code&gt;, but the trigger is awkward.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The TUI prompt only appears when the &lt;code&gt;external_migration&lt;/code&gt; feature flag is on and the session enters the trust onboarding flow.&lt;/li&gt;
&lt;li&gt;In projects that are already trusted, you may never see the prompt.&lt;/li&gt;
&lt;li&gt;A large &lt;code&gt;~/.claude/projects&lt;/code&gt; folder makes home-wide detection slow.&lt;/li&gt;
&lt;li&gt;Existing shell aliases route &lt;code&gt;codex -r&lt;/code&gt; straight to the real Codex binary, which exits with &lt;code&gt;unexpected argument '-r'&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The feature exists, but &lt;strong&gt;the path to use it is a scavenger hunt.&lt;/strong&gt; CODEX-R turns the hunt into a single picker behind a thin wrapper.&lt;/p&gt;
&lt;h2 id="what-codex-r-does"&gt;What CODEX-R Does
&lt;/h2&gt;&lt;p&gt;The whole skill is one SKILL.md. Invoking &lt;code&gt;$codex-r&lt;/code&gt; from a Codex session teaches Codex three things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;How to set up a &lt;code&gt;codex&lt;/code&gt; thin wrapper&lt;/li&gt;
&lt;li&gt;The Claude Code session picker behavior&lt;/li&gt;
&lt;li&gt;The safety verification commands&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -r &lt;span class="c1"&gt;# open picker, import on selection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -r daybreak &lt;span class="c1"&gt;# show only ~/ws/daybreak sessions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -r --cwd ~/ws/kb &lt;span class="c1"&gt;# sessions for a specific directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -r --recursive &lt;span class="c1"&gt;# include child directories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -r --all daybreak &lt;span class="c1"&gt;# text-search all sessions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -r --list --limit &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="c1"&gt;# list only, no import&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -r --dry-run --limit &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="safety-contract"&gt;Safety Contract
&lt;/h2&gt;&lt;p&gt;The author is explicit about &lt;strong&gt;one rule: setup verification must never import.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--list&lt;/code&gt; and &lt;code&gt;--dry-run&lt;/code&gt; never import, period.&lt;/li&gt;
&lt;li&gt;An import only happens after the user explicitly selects a session.&lt;/li&gt;
&lt;li&gt;The default shows only Claude sessions whose recorded cwd exactly matches the current directory.&lt;/li&gt;
&lt;li&gt;If Codex later ships an official &lt;code&gt;-r&lt;/code&gt;, the wrapper steps aside.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CODEX-R does not copy Claude&amp;rsquo;s settings, &lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;MCP&lt;/a&gt; servers, plugins, or skills. &lt;strong&gt;It only imports session JSONL files through Codex&amp;rsquo;s own app-server migration API.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="how-it-works-codex-internals"&gt;How It Works (Codex Internals)
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TD
 A["~/.claude/projects/**/*.jsonl"] --&gt;|"file scan"| B["picker UI"]
 B --&gt;|"user selects"| C["externalAgentConfig/import RPC"]
 C --&gt;|"SESSIONS migration item"| D["Codex app-server"]
 D --&gt;|"externalAgentConfig/import/completed"| E["update import ledger"]
 E --&gt;|"extract threadId"| F["codex resume threadId"]
 F -.-&gt;|"on failure"| G["codex resume --all fallback"]&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Feature flag — &lt;code&gt;external_migration&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Claude session source — &lt;code&gt;~/.claude/projects/**/*.jsonl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Import RPC — &lt;code&gt;externalAgentConfig/import&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Completion event — &lt;code&gt;externalAgentConfig/import/completed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Import ledger — &lt;code&gt;~/.codex/external_agent_session_imports.json&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A single session is imported as a SESSIONS migration item; the helper reads the threadId from the ledger and runs &lt;code&gt;codex resume &amp;lt;threadId&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="install"&gt;Install
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/thedalbee/codex-r.git ~/ws/codex-r
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ln -sfn ~/ws/codex-r ~/.codex/skills/codex-r
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# in a fresh Codex session:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$codex&lt;/span&gt;-r
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No installer script. One symlink and a skill invocation, and you are done.&lt;/p&gt;
&lt;h2 id="why-this-matters"&gt;Why This Matters
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;A clean example of &lt;strong&gt;users wrapping an official feature in an ergonomic shell&lt;/strong&gt;. The 0.128.0 import RPC was already there; the surface was missing; a user wrote a 30-line thin wrapper to expose it.&lt;/li&gt;
&lt;li&gt;The Markdown-only-skill shape is the real story. It is a signal that Codex has adopted the &lt;a class="link" href="https://github.com/anthropics/skills" target="_blank" rel="noopener"
 &gt;Anthropic agent-skills&lt;/a&gt; pattern, and that compatibility lets a single person ship a working tool in a day.&lt;/li&gt;
&lt;li&gt;Three stars is small, but the pattern is big — &lt;strong&gt;agent session portability is becoming load-bearing.&lt;/strong&gt; The same week that surfaced this also brought &lt;a class="link" href="https://github.com/AutonomousResearchGroup/agentmemory" target="_blank" rel="noopener"
 &gt;agentmemory&lt;/a&gt;, another user-led standardization attempt for agent memory.&lt;/li&gt;
&lt;li&gt;The agent infrastructure layer is standardizing fast, and users are gluing it together before model vendors do.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="insights"&gt;Insights
&lt;/h2&gt;&lt;p&gt;The meaning of this tool is not in the 30 lines of wrapper; it is in &lt;strong&gt;the fact that the wrapper exists at all.&lt;/strong&gt; Within days of Codex shipping its import RPC, a user had built a picker on top of it and packaged the recipe as a SKILL.md. That timing tells you the agent tool market is no longer locked to a single vendor: Claude Code session JSONL is effectively a portable format, and Codex now exposes a stable RPC to import it. The same pattern is playing out for memory, skills, and MCP servers — and agent-skills as a standard means a single person can ship a compatibility layer in a day. Micro tools like this do not need to grow stars to be valuable; if the model vendor ships an official command, the wrapper steps aside, and that is fine. &lt;strong&gt;The real asset here is the pattern, not the tool.&lt;/strong&gt; When users define ergonomics before the official feature does, the official feature ends up following them.&lt;/p&gt;
&lt;h2 id="references"&gt;References
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Repo&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/thedalbee/codex-r" target="_blank" rel="noopener"
 &gt;thedalbee/codex-r&lt;/a&gt; — MIT, three stars, created 2026-05-01&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/thedalbee/codex-r/blob/main/README.md" target="_blank" rel="noopener"
 &gt;README.md / SKILL.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Related tools&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://openai.com/codex/" target="_blank" rel="noopener"
 &gt;OpenAI Codex CLI&lt;/a&gt; — the external agent session import in 0.128.0 is the foundation this skill builds on&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; — source of the &lt;code&gt;~/.claude/projects/**/*.jsonl&lt;/code&gt; files used for import&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/anthropics/skills" target="_blank" rel="noopener"
 &gt;Anthropic agent-skills&lt;/a&gt; — the Markdown-only-skill pattern this project follows&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;MCP (Model Context Protocol)&lt;/a&gt; — the broader agent standards layer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/AutonomousResearchGroup/agentmemory" target="_blank" rel="noopener"
 &gt;agentmemory&lt;/a&gt; — a same-period user-led memory standardization attempt (covered in a related post)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.claude.com/en/docs/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code documentation&lt;/a&gt; — JSONL transcript structure used by the picker&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Bun Is Being Ported From Zig to Rust — A 30KB PORTING.md That Claude Follows</title><link>https://ice-ice-bear.github.io/posts/2026-05-06-bun-zig-to-rust-porting/</link><pubDate>Wed, 06 May 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/posts/2026-05-06-bun-zig-to-rust-porting/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post Bun Is Being Ported From Zig to Rust — A 30KB PORTING.md That Claude Follows" /&gt;&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;The JavaScript runtime &lt;a class="link" href="https://bun.com" target="_blank" rel="noopener"
 &gt;Bun&lt;/a&gt; has a suspiciously named branch on its GitHub repo &lt;a class="link" href="https://github.com/oven-sh/bun" target="_blank" rel="noopener"
 &gt;oven-sh/bun&lt;/a&gt; called &lt;a class="link" href="https://github.com/oven-sh/bun/tree/claude/phase-a-port" target="_blank" rel="noopener"
 &gt;&lt;code&gt;claude/phase-a-port&lt;/code&gt;&lt;/a&gt;. Inside it lives &lt;a class="link" href="https://github.com/oven-sh/bun/blob/claude/phase-a-port/docs/PORTING.md" target="_blank" rel="noopener"
 &gt;&lt;code&gt;docs/PORTING.md&lt;/code&gt;&lt;/a&gt;, a 30KB+ guide that translates Bun&amp;rsquo;s &lt;a class="link" href="https://ziglang.org/" target="_blank" rel="noopener"
 &gt;Zig&lt;/a&gt; codebase into &lt;a class="link" href="https://www.rust-lang.org/" target="_blank" rel="noopener"
 &gt;Rust&lt;/a&gt; one file at a time — a complete type map, idiom map, and crate map. The &lt;code&gt;claude/&lt;/code&gt; prefix is the giveaway: this is almost certainly being driven by &lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Anthropic&amp;rsquo;s Claude Code&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR
 Zig[".zig source tree"] --&gt; PhaseA["Phase A &amp;lt;br/&amp;gt; emit .rs next to .zig &amp;lt;br/&amp;gt; compilation NOT required"]
 Guide["docs/PORTING.md &amp;lt;br/&amp;gt; type/idiom/crate map"] --&gt; PhaseA
 Lifetimes["docs/LIFETIMES.tsv &amp;lt;br/&amp;gt; per-field ownership class"] --&gt; PhaseA
 PhaseA --&gt; Markers["// TODO(port) &amp;lt;br/&amp;gt; // PERF(port) &amp;lt;br/&amp;gt; // PORT NOTE"]
 Markers --&gt; PhaseB["Phase B &amp;lt;br/&amp;gt; crate-by-crate compile &amp;lt;br/&amp;gt; one grep handles each marker"]
 PhaseB --&gt; Rust["bun_str / bun_sys &amp;lt;br/&amp;gt; bun_jsc / bun_uws &amp;lt;br/&amp;gt; bun_alloc / bun_bundler"]&lt;/pre&gt;&lt;h2 id="what-was-found"&gt;What Was Found
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/oven-sh/bun" target="_blank" rel="noopener"
 &gt;oven-sh/bun&lt;/a&gt; (89K+ stars, &amp;ldquo;Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one&amp;rdquo;) has a live &lt;a class="link" href="https://github.com/oven-sh/bun/tree/claude/phase-a-port" target="_blank" rel="noopener"
 &gt;&lt;code&gt;claude/phase-a-port&lt;/code&gt;&lt;/a&gt; branch.&lt;/li&gt;
&lt;li&gt;It contains &lt;a class="link" href="https://github.com/oven-sh/bun/blob/claude/phase-a-port/docs/PORTING.md" target="_blank" rel="noopener"
 &gt;&lt;code&gt;docs/PORTING.md&lt;/code&gt;&lt;/a&gt;, a 1:1 Zig-to-Rust translation guide. Tens of thousands of lines, with complete type maps, idiom maps, and crate maps.&lt;/li&gt;
&lt;li&gt;Phase A&amp;rsquo;s goal is precise: &lt;strong&gt;&amp;ldquo;a draft &lt;code&gt;.rs&lt;/code&gt; lands next to each &lt;code&gt;.zig&lt;/code&gt;. Compilation is NOT required. Logic must be faithful.&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Phase B is where everything is forced through the compiler, crate by crate.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="why-it-matters"&gt;Why It Matters
&lt;/h2&gt;&lt;p&gt;Bun is the &lt;strong&gt;largest infrastructure project ever built in &lt;a class="link" href="https://ziglang.org/" target="_blank" rel="noopener"
 &gt;Zig&lt;/a&gt;&lt;/strong&gt;: runtime, bundler, package manager all in one binary, with a single domain at &lt;a class="link" href="https://bun.com" target="_blank" rel="noopener"
 &gt;bun.com&lt;/a&gt;. Zig still ships frequent 0.x breakage and is generally seen as not-yet-stable on ABI and language semantics. The biggest codebase on top of it deciding to port to Rust is itself an &lt;strong&gt;industry signal&lt;/strong&gt;. Zig-to-Rust is not the usual direction.&lt;/p&gt;
&lt;p&gt;And the branch name is the tell. No human team names a working branch &lt;code&gt;claude/phase-a-port&lt;/code&gt;. That&amp;rsquo;s the shape of &amp;ldquo;hand phase A to the &lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; agent and watch.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="inside-the-guide"&gt;Inside the Guide
&lt;/h2&gt;&lt;h3 id="ground-rules"&gt;Ground rules
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Each &lt;code&gt;.rs&lt;/code&gt; lives in the same directory and has the same basename as its &lt;code&gt;.zig&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cross-area types are referenced as &lt;code&gt;bun_&amp;lt;area&amp;gt;::Type&lt;/code&gt; (Cargo.toml wireup happens in Phase B).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Forbidden&lt;/strong&gt;: tokio, rayon, hyper, async-trait, futures, &lt;code&gt;std::fs&lt;/code&gt;/&lt;code&gt;net&lt;/code&gt;/&lt;code&gt;process&lt;/code&gt;. Bun has its own event loop and goes straight to syscalls.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Forbidden&lt;/strong&gt;: &lt;code&gt;async fn&lt;/code&gt;. Everything is a callback plus state machine.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unsafe&lt;/code&gt; is OK wherever Zig was unsafe. Every &lt;code&gt;unsafe&lt;/code&gt; block needs &lt;code&gt;// SAFETY: &amp;lt;why&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If unsure, leave a &lt;code&gt;// TODO(port): &amp;lt;reason&amp;gt;&lt;/code&gt;.&lt;/strong&gt; A flag beats a guess.&lt;/li&gt;
&lt;li&gt;Zig perf idioms (&lt;code&gt;appendAssumeCapacity&lt;/code&gt;, arena bulk-free, comptime monomorphization) become plain Rust with a &lt;code&gt;// PERF(port): ...&lt;/code&gt; comment, then Phase B greps and benches them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="crate-map-excerpt"&gt;Crate map (excerpt)
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Zig namespace&lt;/th&gt;
 &lt;th&gt;Rust crate&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bun.String&lt;/code&gt;, &lt;code&gt;bun.strings&lt;/code&gt;, &lt;code&gt;ZigString&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;bun_str&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bun.sys&lt;/code&gt;, &lt;code&gt;bun.FD&lt;/code&gt;, &lt;code&gt;Maybe(T)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;bun_sys&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bun.jsc&lt;/code&gt;, &lt;code&gt;JSValue&lt;/code&gt;, &lt;code&gt;JSGlobalObject&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;bun_jsc&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bun.uws&lt;/code&gt;, &lt;code&gt;us_socket_t&lt;/code&gt;, &lt;code&gt;Loop&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;bun_uws_sys&lt;/code&gt; / &lt;code&gt;bun_uws&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bun.allocators&lt;/code&gt;, &lt;code&gt;MimallocArena&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;bun_alloc&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bun.shell&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;bun_shell&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bun.bake&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;bun_bake&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bun.install&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;bun_install&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bun.bundle_v2&lt;/code&gt;, &lt;code&gt;Transpiler&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;bun_bundler&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;MimallocArena&lt;/code&gt; is an arena allocator built on top of &lt;a class="link" href="https://github.com/microsoft/mimalloc" target="_blank" rel="noopener"
 &gt;mimalloc&lt;/a&gt;; &lt;code&gt;bun.uws&lt;/code&gt; is Bun&amp;rsquo;s own event loop binding (uSockets). Critically, neither uses an async runtime like &lt;a class="link" href="https://tokio.rs/" target="_blank" rel="noopener"
 &gt;tokio&lt;/a&gt; — and the porting guide forbids one explicitly.&lt;/p&gt;
&lt;h3 id="type-map-excerpt"&gt;Type map (excerpt)
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Zig&lt;/th&gt;
 &lt;th&gt;Rust&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;[]const u8&lt;/code&gt; (struct field)&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;&lt;code&gt;Box&amp;lt;[u8]&amp;gt;&lt;/code&gt; / &lt;code&gt;Vec&amp;lt;u8&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;amp;'static [u8]&lt;/code&gt; / arena raw ptr&lt;/strong&gt; — decide by reading &lt;code&gt;deinit&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;[:0]const u8&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;amp;ZStr&lt;/code&gt; (length-carrying NUL-terminated)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;?T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Option&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;anyerror!T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Result&amp;lt;T, bun_core::Error&amp;gt;&lt;/code&gt; (always, in Phase A)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;comptime T: type&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;T&amp;gt;&lt;/code&gt; (generic + trait bound)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;comptime n: uN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;const N: uN&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;inline for&lt;/code&gt; over tuple&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;const [T; N]&lt;/code&gt; + &lt;code&gt;for&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;for (slice, 0..) |x, i|&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;for (i, x) in slice.iter().enumerate()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;defer x.deinit()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;delete&lt;/strong&gt; — handled implicitly by &lt;code&gt;impl Drop&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;errdefer alloc.free(x)&lt;/code&gt; (just-built local)&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;delete&lt;/strong&gt; — &lt;code&gt;?&lt;/code&gt; drops it for you&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;errdefer { side effects }&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a class="link" href="https://docs.rs/scopeguard/" target="_blank" rel="noopener"
 &gt;&lt;code&gt;scopeguard::guard(...)&lt;/code&gt;&lt;/a&gt; and disarm on the success path&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="notable-micro-rules"&gt;Notable micro-rules
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bun_core::Error&lt;/code&gt; is &lt;strong&gt;&lt;code&gt;#[repr(transparent)] NonZeroU16&lt;/code&gt;&lt;/strong&gt; — a heap-free Copy-able error newtype with a link-time-registered name table. &lt;code&gt;anyhow::Error&lt;/code&gt; and &lt;code&gt;Box&amp;lt;dyn Error&amp;gt;&lt;/code&gt; are banned because of heap allocation, lack of &lt;code&gt;Copy&lt;/code&gt;, and broken &lt;code&gt;@errorName&lt;/code&gt; snapshot compatibility.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bun.Wyhash11&lt;/code&gt; is &lt;strong&gt;kept distinct from &lt;code&gt;std.hash.Wyhash&lt;/code&gt; (seed 0) for on-disk compatibility.&lt;/strong&gt; Lockfiles, npm manifest cache, and integrity all depend on it — the Rust port keeps the separate implementation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;defer pool.put(x)&lt;/code&gt; becomes a Drop-guard pattern in Rust. &lt;strong&gt;Manual defer is forbidden.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;scopeguard::guard((), \|_\| ...)&lt;/code&gt; &amp;ldquo;unit state&amp;rdquo; pattern is &lt;strong&gt;forbidden&lt;/strong&gt; — it usually means a missing RAII type.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@errorName(e)&lt;/code&gt; becomes an &lt;code&gt;IntoStaticStr&lt;/code&gt; derive. &lt;strong&gt;Never &lt;code&gt;Display&lt;/code&gt; or &lt;code&gt;format!(&amp;quot;{e:?}&amp;quot;)&lt;/code&gt;&lt;/strong&gt; — JS &lt;code&gt;error.code&lt;/code&gt;, snapshot tests, and crash-handler traces depend on the exact string.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;for (a, b) \|x, y\|&lt;/code&gt; becomes &lt;code&gt;for (x, y) in a.iter().zip(b)&lt;/code&gt; plus a &lt;strong&gt;&lt;code&gt;debug_assert_eq!(a.len(), b.len())&lt;/code&gt;&lt;/strong&gt;. Zig asserts; Rust&amp;rsquo;s &lt;code&gt;zip&lt;/code&gt; silently truncates.&lt;/li&gt;
&lt;li&gt;TLS code stays on &lt;a class="link" href="https://boringssl.googlesource.com/boringssl/" target="_blank" rel="noopener"
 &gt;BoringSSL&lt;/a&gt; via FFI — not rewritten as pure-Rust RustTLS.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="phase-a-vs-phase-b"&gt;Phase A vs Phase B
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phase A&lt;/strong&gt; = one &lt;code&gt;.zig&lt;/code&gt; → one &lt;code&gt;.rs&lt;/code&gt;. Doesn&amp;rsquo;t have to compile. Logic faithful, idiomatic Rust shape.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phase B&lt;/strong&gt; = crate-by-crate compile pass. Sweep &lt;code&gt;// TODO(port)&lt;/code&gt; and &lt;code&gt;// PERF(port)&lt;/code&gt; markers in batch.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This split is the load-bearing piece. Try to do everything at once and the LLM&amp;rsquo;s context collapses; carve it into one-zig-to-one-rs units and a single session can finish one. Compilation correctness is deferred entirely to Phase B.&lt;/p&gt;
&lt;h2 id="what-this-means--agent-skills-in-production"&gt;What This Means — agent-skills, In Production
&lt;/h2&gt;&lt;p&gt;The PORTING.md document itself is the interesting artifact.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A guide written by humans for an LLM to follow.&lt;/strong&gt; Producing a 30KB+ map up front isn&amp;rsquo;t &amp;ldquo;Claude, port this for me&amp;rdquo; — it&amp;rsquo;s &amp;ldquo;&lt;strong&gt;Claude, here&amp;rsquo;s exactly what to translate to what&lt;/strong&gt;.&amp;rdquo; It&amp;rsquo;s the &lt;a class="link" href="https://www.anthropic.com/news/skills" target="_blank" rel="noopener"
 &gt;agent-skills&lt;/a&gt; idea applied in production.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type-by-type decisions are nailed down in advance.&lt;/strong&gt; Whether &lt;code&gt;[]const u8&lt;/code&gt; (as a struct field) becomes &lt;code&gt;Box&amp;lt;[u8]&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;amp;'static [u8]&lt;/code&gt; is not left to the LLM&amp;rsquo;s judgment — there&amp;rsquo;s a meta-rule (&amp;ldquo;look at &lt;code&gt;deinit&lt;/code&gt;&amp;rdquo;) that forces the decision.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A &lt;code&gt;docs/LIFETIMES.tsv&lt;/code&gt; file&lt;/strong&gt; is referenced explicitly: per-field OWNED / SHARED / BORROW_PARAM / STATIC / JSC_BORROW / BACKREF / INTRUSIVE / FFI / ARENA / UNKNOWN classes pre-classified by hand. The LLM is told to copy that column verbatim. &lt;strong&gt;The cross-file analysis is precomputed and handed to the model.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Three markers (&lt;code&gt;PORT NOTE&lt;/code&gt;, &lt;code&gt;TODO(port)&lt;/code&gt;, &lt;code&gt;PERF(port)&lt;/code&gt;)&lt;/strong&gt; are the phase handoff. Whoever (or whichever future LLM session) picks up Phase B can &lt;code&gt;grep&lt;/code&gt; once and have a queue of work.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="insights"&gt;Insights
&lt;/h2&gt;&lt;p&gt;This is the first publicly visible attempt to migrate a major codebase between systems languages using LLM automation, and the interesting takeaway is that &lt;strong&gt;the leverage is in the guide, not the model.&lt;/strong&gt; PORTING.md pre-decides type maps and idiom maps, LIFETIMES.tsv pre-decides ownership per field, and TODO/PERF/PORT NOTE markers pre-design the phase-to-phase handoff. The LLM is intentionally left no room to be creative — it just executes &amp;ldquo;this line becomes that line.&amp;rdquo; Banning tokio, rayon, async-trait, and the rest of the canonical Rust async stack reflects the same instinct: Bun has its own event loop and FFI assets like &lt;a class="link" href="https://boringssl.googlesource.com/boringssl/" target="_blank" rel="noopener"
 &gt;BoringSSL&lt;/a&gt; that an LLM &amp;ldquo;Rust-ifying&amp;rdquo; would silently break. PORTING.md may end up the &lt;strong&gt;textbook example&lt;/strong&gt; of an LLM-driven port. If massive codebase migrations become economically tractable as LLM spend, the deciding cost factor isn&amp;rsquo;t going to be GPUs or model choice — it&amp;rsquo;s going to be &lt;strong&gt;how much guide you wrote before you pressed Run.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="references"&gt;References
&lt;/h2&gt;&lt;h3 id="bun-and-the-porting-branch"&gt;Bun and the porting branch
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://bun.com" target="_blank" rel="noopener"
 &gt;Bun homepage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/oven-sh/bun" target="_blank" rel="noopener"
 &gt;oven-sh/bun GitHub repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/oven-sh/bun/tree/claude/phase-a-port" target="_blank" rel="noopener"
 &gt;&lt;code&gt;claude/phase-a-port&lt;/code&gt; branch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/oven-sh/bun/blob/claude/phase-a-port/docs/PORTING.md" target="_blank" rel="noopener"
 &gt;&lt;code&gt;docs/PORTING.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="languages-and-ecosystems"&gt;Languages and ecosystems
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://ziglang.org/" target="_blank" rel="noopener"
 &gt;Zig language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.rust-lang.org/" target="_blank" rel="noopener"
 &gt;Rust language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Anthropic Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.anthropic.com/news/skills" target="_blank" rel="noopener"
 &gt;Anthropic agent-skills announcement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="tooling--crates-referenced"&gt;Tooling / crates referenced
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.rs/scopeguard/" target="_blank" rel="noopener"
 &gt;scopeguard crate&lt;/a&gt; — RAII guard standing in for &lt;code&gt;errdefer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/microsoft/mimalloc" target="_blank" rel="noopener"
 &gt;mimalloc&lt;/a&gt; — backing allocator for &lt;code&gt;MimallocArena&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://boringssl.googlesource.com/boringssl/" target="_blank" rel="noopener"
 &gt;BoringSSL&lt;/a&gt; — TLS dependency kept on FFI&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://tokio.rs/" target="_blank" rel="noopener"
 &gt;tokio&lt;/a&gt; — async runtime explicitly forbidden in Phase A&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>