<?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/ko/tags/agent-skills/</link><description>Recent content in Agent Skills on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>ko</language><lastBuildDate>Fri, 08 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/ko/tags/agent-skills/index.xml" rel="self" type="application/rss+xml"/><item><title>AI 코딩 에이전트의 OS 레이어 — agentmemory와 agent-skills 같은 날 동시 등장</title><link>https://ice-ice-bear.github.io/ko/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/ko/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 AI 코딩 에이전트의 OS 레이어 — agentmemory와 agent-skills 같은 날 동시 등장" /&gt;&lt;h2 id="개요"&gt;개요
&lt;/h2&gt;&lt;p&gt;같은 시각 30초 간격으로 등장한 두 GitHub 링크. 둘 다 &amp;ldquo;AI 코딩 에이전트의 ergonomic 결함&amp;quot;을 풀려는 도구지만, &lt;strong&gt;노리는 결함이 다르다.&lt;/strong&gt; &lt;a class="link" href="https://github.com/rohitg00/agentmemory" target="_blank" rel="noopener"
 &gt;rohitg00/agentmemory&lt;/a&gt;는 세션 간 메모리 인프라를, &lt;a class="link" href="https://github.com/addyosmani/agent-skills" target="_blank" rel="noopener"
 &gt;addyosmani/agent-skills&lt;/a&gt;는 시니어 엔지니어의 워크플로 강제력을 푼다. 묶어서 보면 에이전트 시대의 OS 레이어가 모양을 갖추고 있다.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 Agent["AI 코딩 에이전트"] --&gt; Memory["메모리/상태 레이어"]
 Agent --&gt; Skills["워크플로/룰 레이어"]
 Agent --&gt; Model["모델 레이어"]
 Agent --&gt; UI["UI 레이어"]

 Memory --&gt; AM["agentmemory &amp;lt;br/&amp;gt; MCP + REST"]
 Skills --&gt; AS["agent-skills &amp;lt;br/&amp;gt; Markdown 스킬 번들"]
 Model --&gt; Claude["Claude / GPT / Gemini"]
 UI --&gt; CC["Claude Code / Cursor / Cline"]&lt;/pre&gt;&lt;h2 id="1-agentmemory--영속-메모리-mcp로-모든-에이전트와-공유"&gt;1. agentmemory — 영속 메모리, 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;는 &lt;em&gt;&amp;quot;#1 Persistent memory for AI coding agents based on real-world benchmarks&amp;rdquo;&lt;/em&gt; 를 표방한다. 2026-02-25 생성, 약 2,400 stars, Apache 2.0. 홈페이지는 &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="풀려는-문제"&gt;풀려는 문제
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;매 세션마다 아키텍처를 다시 설명해야 함&lt;/li&gt;
&lt;li&gt;같은 버그를 다시 발견함&lt;/li&gt;
&lt;li&gt;같은 선호(라이브러리 선택, 코드 스타일)를 다시 가르쳐야 함&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;나 &lt;code&gt;.cursorrules&lt;/code&gt; 같은 빌트인 메모리는 &lt;strong&gt;200줄 cap에 stale&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="작동-방식"&gt;작동 방식
&lt;/h3&gt;&lt;p&gt;에이전트가 한 일을 silently capture → 압축 → 검색 가능한 메모리로 저장 → 다음 세션 시작 시 적절한 컨텍스트만 inject. 핵심은 단일 &lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;MCP&lt;/a&gt; 서버 1개만 띄우면 16개 이상 에이전트가 같은 메모리를 공유한다는 것.&lt;/p&gt;
&lt;p&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://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;MCP가 안 되는 에이전트도 REST API로 붙음 (104개 endpoint)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;임베딩은 로컬 &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;를 사용 → API 키 필요 없음, 무료.&lt;/p&gt;
&lt;h3 id="벤치마크--longmemeval-s"&gt;벤치마크 — LongMemEval-S
&lt;/h3&gt;&lt;p&gt;&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;지표&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;임베딩 + 하이브리드가 단순 키워드 BM25보다 R@5 기준 &lt;strong&gt;9%p 높다.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="토큰-절감"&gt;토큰 절감
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;방식&lt;/th&gt;
 &lt;th&gt;연간 토큰&lt;/th&gt;
 &lt;th&gt;연간 비용&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;풀 컨텍스트 paste&lt;/td&gt;
 &lt;td&gt;19.5M+&lt;/td&gt;
 &lt;td&gt;컨텍스트 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 embed&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="시작"&gt;시작
&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="의미"&gt;의미
&lt;/h3&gt;&lt;p&gt;이 도구의 핵심 베팅은 한 줄로 정리된다 — &lt;strong&gt;&amp;ldquo;메모리는 에이전트가 아니라 인프라 레이어에 있어야 한다.&amp;rdquo;&lt;/strong&gt; 에이전트별로 메모리를 짜는 대신 MCP 서버 1개로 모든 에이전트가 공유하면, Claude Code 세션에서 학습한 게 다음 Cursor 세션에 그대로 흘러간다. 50일 전쯤 viral한 GitHub gist(1,050 stars)에서 시작 → 그 디자인 문서를 코드로 구현한 형태. &lt;a class="link" href="https://github.com/karpathy" target="_blank" rel="noopener"
 &gt;Karpathy의 LLM Wiki 패턴&lt;/a&gt; + confidence scoring + lifecycle + knowledge graph + hybrid search.&lt;/p&gt;
&lt;h2 id="2-agent-skills--시니어-엔지니어의-워크플로를-스킬로-패키징"&gt;2. agent-skills — 시니어 엔지니어의 워크플로를 스킬로 패키징
&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;는 &lt;em&gt;&amp;ldquo;Production-grade engineering skills for AI coding agents.&amp;rdquo;&lt;/em&gt; 를 표방한다. 2026-02-15 생성, 약 33,500 stars, MIT. 동일 시점 비교에서 agentmemory보다 14배 많은 stars — 워크플로 표준 후보로 가장 빠르게 모이는 곳이다.&lt;/p&gt;
&lt;h3 id="풀려는-문제-1"&gt;풀려는 문제
&lt;/h3&gt;&lt;p&gt;&amp;ldquo;에이전트가 코드를 짜기는 짜는데, 시니어가 한 것 같지 않다.&amp;rdquo;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;스펙 없이 바로 코드 짠다&lt;/li&gt;
&lt;li&gt;테스트를 안 짠다&lt;/li&gt;
&lt;li&gt;보안 고려가 없다&lt;/li&gt;
&lt;li&gt;큰 PR을 한 번에 던진다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="6단계-라이프사이클"&gt;6단계 라이프사이클
&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;각 슬래시 커맨드 = 라이프사이클 한 단계 → 필요한 스킬을 자동 활성화.&lt;/p&gt;
&lt;h3 id="20개-스킬-분류"&gt;20개 스킬 분류
&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="어디서-동작하나"&gt;어디서 동작하나
&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; (marketplace 설치, 권장): &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;: &lt;code&gt;.cursor/rules/&lt;/code&gt;에 SKILL.md 복사&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;마크다운만 읽으면 다 동작&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 관점, &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, Prove-It 패턴&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="의미-1"&gt;의미
&lt;/h3&gt;&lt;p&gt;agent-skills의 베팅은 &lt;strong&gt;&amp;ldquo;에이전트는 LLM 무게가 아니라 워크플로의 강제력에서 차이가 난다.&amp;rdquo;&lt;/strong&gt; TDD를 &amp;ldquo;할 수 있다&amp;rdquo; 가 아니라 &amp;ldquo;Red-Green-Refactor를 안 하면 코드가 안 나간다&amp;rdquo; 같은 강제 흐름으로 만든다. 코드 리뷰도 5축 review, 100줄 단위 size, Nit/Optional/FYI severity 라벨 같은 구체 룰. Markdown만으로 풀어서 &lt;strong&gt;에이전트 종속성 zero&lt;/strong&gt; — Claude/Cursor/Gemini 다 같은 스킬을 쓸 수 있다. 33K 스타가 말해주듯 현재 &lt;strong&gt;에이전트 워크플로 표준에 가장 가까운 후보&lt;/strong&gt;다.&lt;/p&gt;
&lt;h2 id="3-두-도구-비교"&gt;3. 두 도구 비교
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;항목&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;누가&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;무엇&lt;/td&gt;
 &lt;td&gt;TypeScript 라이브러리 + MCP 서버&lt;/td&gt;
 &lt;td&gt;Markdown 스킬 번들&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;라이선스&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;생성&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;도메인&lt;/td&gt;
 &lt;td&gt;메모리/상태 인프라&lt;/td&gt;
 &lt;td&gt;엔지니어링 워크플로&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;종속성 끊는 방식&lt;/td&gt;
 &lt;td&gt;MCP 표준&lt;/td&gt;
 &lt;td&gt;Markdown 표준&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="4-묶어서-본-의미--에이전트-시대의-os-레이어"&gt;4. 묶어서 본 의미 — 에이전트 시대의 OS 레이어
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR
 M["메모리/상태"] --&gt; AM["agentmemory"]
 W["워크플로/룰"] --&gt; AS["agent-skills"]
 Mo["모델"] --&gt; LLM["Claude / GPT / Gemini"]
 UI["UI"] --&gt; Tools["Claude Code / Cursor / Cline"]&lt;/pre&gt;&lt;p&gt;3-4년 전 &amp;ldquo;어떤 IDE 쓰지?&amp;rdquo; 가 결정 포인트였다면, 이제는 &lt;strong&gt;&amp;ldquo;어떤 메모리 + 스킬 셋업?&amp;rdquo;&lt;/strong&gt; 이 결정 포인트가 되고 있다. 둘 다 모델 종속성을 의도적으로 끊어두고 (&lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;MCP&lt;/a&gt;와 Markdown), &lt;strong&gt;모델은 갈아치울 수 있어도 메모리/스킬은 누적되도록&lt;/strong&gt; 설계한 게 공통점이다.&lt;/p&gt;
&lt;h2 id="인사이트"&gt;인사이트
&lt;/h2&gt;&lt;p&gt;같은 시각 같은 사람이 30초 간격으로 등장시킨 두 링크가 정확히 에이전트 OS 레이어의 다른 두 슬롯을 메우고 있다는 점이 이 디지스트의 핵심이다. agentmemory는 &lt;strong&gt;상태&lt;/strong&gt;를, agent-skills는 &lt;strong&gt;프로세스&lt;/strong&gt;를 인프라 레이어로 끌어내려 모델 위에 올라가는 공통 부품으로 만들었다. 두 도구가 모델 종속성을 의도적으로 끊는 방식 — MCP 서버 하나, Markdown 한 더미 — 도 같은 방향이다. 모델은 갈아치워도 메모리와 스킬은 누적된다는 베팅. 33K vs 2.4K stars 차이는 시점 차가 아니라 워크플로 표준 후보가 메모리 인프라보다 한발 앞서 모이고 있다는 신호로 읽힌다. &lt;strong&gt;다음 분기 흥미로운 질문은 두 가지&lt;/strong&gt; — 메모리 표준이 MCP 위에서 단일화될지, 그리고 agent-skills 같은 스킬 번들이 IDE 마켓플레이스의 새로운 SaaS 카테고리가 될지. 결정 포인트가 IDE 선택에서 메모리·스킬 셋업으로 옮겨가는 흐름은 이미 시작됐다.&lt;/p&gt;
&lt;h2 id="참고"&gt;참고
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;핵심 리포지토리&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; · 홈페이지 &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;관련 에이전트 / 클라이언트&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;프로토콜과 표준&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; — security-auditor 페르소나의 기준&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;벤치마크 / 임베딩&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;논문: &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; — agentmemory의 로컬 임베딩 모델&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>CODEX-R — Claude Code 세션을 Codex CLI로 가져오는 마이크로 스킬</title><link>https://ice-ice-bear.github.io/ko/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/ko/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 — Claude Code 세션을 Codex CLI로 가져오는 마이크로 스킬" /&gt;&lt;h2 id="개요"&gt;개요
&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;은 2026-05-01에 만들어진 별 3개짜리 MIT 라이선스 마이크로 도구다. 한 줄로 요약하면 &lt;strong&gt;&lt;a class="link" href="https://openai.com/codex/" target="_blank" rel="noopener"
 &gt;OpenAI Codex CLI&lt;/a&gt;에 &lt;code&gt;codex -r&lt;/code&gt; 한 명령으로 &lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; 세션을 picker로 골라 import하는 워크플로를 이식한 Markdown 전용 스킬&lt;/strong&gt;이다. 코드는 거의 없고 &lt;a class="link" href="https://github.com/anthropics/skills" target="_blank" rel="noopener"
 &gt;agent-skills&lt;/a&gt; 패턴을 그대로 차용한 SKILL.md 한 장이 본체다. 별 개수보다 흥미로운 건 &lt;strong&gt;누가 왜 이걸 만들었는가&lt;/strong&gt; 라는 질문 쪽이다.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph LR
 User["사용자"] --&gt;|"codex -r"| Wrapper["thin wrapper"]
 Wrapper --&gt; Picker["세션 picker"]
 Picker --&gt;|"~/.claude/projects/**/*.jsonl 스캔"| Claude["Claude Code 세션"]
 Picker --&gt;|"선택"| Import["externalAgentConfig/import"]
 Import --&gt; Ledger["~/.codex/external_agent_session_imports.json"]
 Ledger --&gt;|"codex resume threadId"| Resume["Codex 세션 재개"]&lt;/pre&gt;&lt;h2 id="풀려는-문제"&gt;풀려는 문제
&lt;/h2&gt;&lt;p&gt;Codex CLI 0.128.0이 &lt;code&gt;Added external agent session import&lt;/code&gt;를 넣었지만, 이 기능은 트리거가 까다롭다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TUI 프롬프트는 &lt;code&gt;external_migration&lt;/code&gt; feature flag가 켜지고 trust onboarding flow에 진입할 때만 뜬다.&lt;/li&gt;
&lt;li&gt;이미 trusted된 프로젝트에서는 평생 그 프롬프트를 못 본다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.claude/projects&lt;/code&gt; 폴더가 크면 home-wide 탐지가 느려진다.&lt;/li&gt;
&lt;li&gt;셸 alias가 &lt;code&gt;codex -r&lt;/code&gt;을 진짜 Codex 바이너리로 보내면 &lt;code&gt;unexpected argument '-r'&lt;/code&gt; 에러가 난다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;결과적으로 &lt;strong&gt;기능은 있지만 사용 경로가 보물찾기&lt;/strong&gt;다. CODEX-R는 이 보물찾기를 picker 한 번에 끝내는 thin wrapper로 바꾼다.&lt;/p&gt;
&lt;h2 id="codex-r가-하는-것"&gt;CODEX-R가 하는 것
&lt;/h2&gt;&lt;p&gt;스킬 본체는 SKILL.md 한 장이다. Codex 세션에서 &lt;code&gt;$codex-r&lt;/code&gt;을 부르면 다음 동작을 가르친다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;codex&lt;/code&gt; thin wrapper 셋업&lt;/li&gt;
&lt;li&gt;Claude Code 세션 picker&lt;/li&gt;
&lt;li&gt;안전 검증 커맨드&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;# picker 열고 선택하면 import&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;# ~/ws/daybreak 세션만 보기&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;# 특정 디렉토리 세션&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;# 자식 디렉토리 포함&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;# 전 세션 텍스트 검색&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;# 보기만, 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="안전-컨트랙트"&gt;안전 컨트랙트
&lt;/h2&gt;&lt;p&gt;저자가 강조한 &lt;strong&gt;딱 하나의 규칙: setup verification은 절대 import 하지 않는다.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--list&lt;/code&gt;와 &lt;code&gt;--dry-run&lt;/code&gt;은 절대 import 안 함&lt;/li&gt;
&lt;li&gt;import는 사용자가 명시적으로 세션을 선택했을 때만&lt;/li&gt;
&lt;li&gt;기본값은 현재 cwd와 정확히 일치하는 Claude 세션만 노출&lt;/li&gt;
&lt;li&gt;Codex가 나중에 official &lt;code&gt;-r&lt;/code&gt; 지원을 내면 wrapper는 양보하고 물러남&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CODEX-R는 Claude의 settings, &lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;MCP&lt;/a&gt; 서버, 플러그인, 스킬은 복사하지 않는다. &lt;strong&gt;순수하게 세션 JSONL만 Codex의 app-server migration API로 import한다.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="동작-원리-codex-내부-api"&gt;동작 원리 (Codex 내부 API)
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TD
 A["~/.claude/projects/**/*.jsonl"] --&gt;|"파일 스캔"| B["picker UI"]
 B --&gt;|"사용자 선택"| C["externalAgentConfig/import RPC"]
 C --&gt;|"SESSIONS migration item"| D["Codex app-server"]
 D --&gt;|"externalAgentConfig/import/completed"| E["import ledger 갱신"]
 E --&gt;|"threadId 추출"| F["codex resume threadId"]
 F -.-&gt;|"실패 시"| 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;세션 1개를 SESSIONS migration item으로 import하고, ledger에서 threadId를 읽어 &lt;code&gt;codex resume &amp;lt;threadId&amp;gt;&lt;/code&gt;를 실행하는 흐름이다.&lt;/p&gt;
&lt;h2 id="설치"&gt;설치
&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;# Codex 새 세션에서:&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;설치 스크립트 없음. 심볼릭 링크 한 줄과 스킬 호출만으로 끝난다.&lt;/p&gt;
&lt;h2 id="의미"&gt;의미
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;공식이 만든 기능을 사용자가 ergonomic 셸로 감싸는 패턴&lt;/strong&gt;의 깨끗한 사례. 0.128.0의 import RPC는 이미 있는데 노출이 부족했고, 사용자가 직접 30줄짜리 thin wrapper로 풀어버렸다.&lt;/li&gt;
&lt;li&gt;Markdown 전용 스킬이라는 형태가 중요하다. &lt;a class="link" href="https://github.com/anthropics/skills" target="_blank" rel="noopener"
 &gt;Anthropic agent-skills&lt;/a&gt; 패턴을 Codex가 그대로 받아들이고 있다는 신호이며, 이 호환성 덕분에 한 사람이 하루 만에 도구를 만들 수 있었다.&lt;/li&gt;
&lt;li&gt;별 3개짜리 마이크로 도구지만, &lt;strong&gt;에이전트 세션 휴대성이 중요해지는 시대의 신호&lt;/strong&gt;다. Claude Code와 Codex 사이의 세션 호환성 문제를 사용자가 직접 풀고 있다는 점에서, 같은 시기에 공유된 &lt;a class="link" href="https://github.com/AutonomousResearchGroup/agentmemory" target="_blank" rel="noopener"
 &gt;agentmemory&lt;/a&gt; 같은 메모리 표준화 시도와 같은 맥락에 있다.&lt;/li&gt;
&lt;li&gt;에이전트 인프라 레이어가 빠르게 표준화 중이다. 모델 회사들이 official 도구를 내기 전에 사용자가 먼저 글루를 짠다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="인사이트"&gt;인사이트
&lt;/h2&gt;&lt;p&gt;이 도구의 의미는 30줄짜리 wrapper에 있지 않고, &lt;strong&gt;그 wrapper가 만들어졌다는 사실 자체&lt;/strong&gt;에 있다. Codex가 import RPC를 추가한 시점과 거의 동시에 사용자가 picker를 직접 만들어 SKILL.md로 묶은 것은, 에이전트 도구 시장이 더 이상 단일 vendor에 묶이지 않는다는 신호다. Claude Code 세션 JSONL이 사실상 휴대 가능한 포맷이 됐고, Codex는 이를 import하는 표준 RPC를 노출했다. 같은 패턴이 메모리, 스킬, MCP 서버에서도 일어나고 있고, agent-skills 같은 표준 덕에 한 사람이 하루 만에 호환 레이어를 짤 수 있게 됐다. 이런 마이크로 도구는 별이 안 늘어도 OK다 — 모델 회사가 official 명령을 내면 wrapper는 조용히 양보하면 그만이다. &lt;strong&gt;결국 진짜 자산은 도구가 아니라 패턴이다.&lt;/strong&gt; 사용자가 만든 thin wrapper가 official 기능보다 먼저 ergonomic을 정의하면, 다음 official 기능은 그 ergonomic을 따라가게 된다.&lt;/p&gt;
&lt;h2 id="참고"&gt;참고
&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, 별 3개, 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;SKILL.md / README.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; — Codex 0.128.0의 external agent session import가 본 스킬의 토대&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; — &lt;code&gt;~/.claude/projects/**/*.jsonl&lt;/code&gt;이 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; — Markdown-only 스킬 패턴의 출처&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; — 에이전트 표준 레이어&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; — 같은 시기 공유된 에이전트 메모리 표준화 시도 (관련 포스트의 다른 항목)&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 세션 포맷 문서&lt;/a&gt; — JSONL 트랜스크립트 구조&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Bun이 Zig에서 Rust로 포팅 중이다 — Claude가 따라가는 30KB짜리 PORTING.md</title><link>https://ice-ice-bear.github.io/ko/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/ko/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이 Zig에서 Rust로 포팅 중이다 — Claude가 따라가는 30KB짜리 PORTING.md" /&gt;&lt;h2 id="개요"&gt;개요
&lt;/h2&gt;&lt;p&gt;JavaScript 런타임 &lt;a class="link" href="https://bun.com" target="_blank" rel="noopener"
 &gt;Bun&lt;/a&gt;의 GitHub 레포 &lt;a class="link" href="https://github.com/oven-sh/bun" target="_blank" rel="noopener"
 &gt;oven-sh/bun&lt;/a&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;&lt;/a&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;라는 30KB+짜리 포팅 가이드가 들어 있고, 내용은 &lt;a class="link" href="https://ziglang.org/" target="_blank" rel="noopener"
 &gt;Zig&lt;/a&gt;로 짜인 Bun 코드베이스를 &lt;a class="link" href="https://www.rust-lang.org/" target="_blank" rel="noopener"
 &gt;Rust&lt;/a&gt;로 1:1 번역하기 위한 type map / idiom map / crate map이다. 브랜치 이름이 &lt;code&gt;claude/&lt;/code&gt;로 시작한다는 점에서 &lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Anthropic Claude Code&lt;/a&gt;를 써서 자동 포팅 중일 가능성이 매우 높다.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR
 Zig[".zig 소스 트리"] --&gt; PhaseA["Phase A &amp;lt;br/&amp;gt; .zig 옆에 .rs 생성 &amp;lt;br/&amp;gt; 컴파일 안 돼도 OK"]
 Guide["docs/PORTING.md &amp;lt;br/&amp;gt; type/idiom/crate map"] --&gt; PhaseA
 Lifetimes["docs/LIFETIMES.tsv &amp;lt;br/&amp;gt; 필드별 소유권 클래스"] --&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별 컴파일 통과 &amp;lt;br/&amp;gt; grep 한 번으로 일괄 처리"]
 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="발견된-사실"&gt;발견된 사실
&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;)에 &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; 브랜치가 살아 있다.&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;는 Zig 코드를 Rust로 옮기기 위한 1:1 번역 가이드다. 분량은 수만 줄급, 완전한 type map / idiom map / crate map을 포함한다.&lt;/li&gt;
&lt;li&gt;Phase A의 목표는 명확하다. &lt;strong&gt;&amp;ldquo;draft &lt;code&gt;.rs&lt;/code&gt;가 &lt;code&gt;.zig&lt;/code&gt; 옆에 생긴다. 컴파일 안 돼도 OK. 로직만 정확하게.&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Phase B에서 crate-by-crate 컴파일 통과를 시킨다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="왜-의미-있나"&gt;왜 의미 있나
&lt;/h2&gt;&lt;p&gt;Bun은 &lt;a class="link" href="https://ziglang.org/" target="_blank" rel="noopener"
 &gt;Zig&lt;/a&gt;로 만들어진 가장 큰 인프라 프로젝트다. 런타임, 번들러, 패키지 매니저까지 한 바이너리에 들어 있고 &lt;a class="link" href="https://bun.com" target="_blank" rel="noopener"
 &gt;홈페이지&lt;/a&gt;도 단일 도메인으로 통일됐다. Zig는 0.x 메이저 변경이 잦고 ABI/언어 안정성에서 reservation을 받는 언어인데, 그 위에 쌓인 가장 큰 코드베이스가 Rust로 옮겨가는 결정 자체가 &lt;strong&gt;industry signal&lt;/strong&gt;이다. Zig에서 Rust로 가는 포팅은 일반적이지 않은 방향이다.&lt;/p&gt;
&lt;p&gt;브랜치 이름이 &lt;code&gt;claude/phase-a-port&lt;/code&gt;라는 점은 강력한 단서다. 인간이 다 짜는 거라면 이런 식으로 네이밍하지 않는다. 이건 &lt;a class="link" href="https://www.anthropic.com/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; 에이전트에게 &amp;ldquo;phase A를 너가 처리해라&amp;rdquo; 라고 던지는 형태에 가깝다.&lt;/p&gt;
&lt;h2 id="가이드의-구조-portingmd-발췌"&gt;가이드의 구조 (PORTING.md 발췌)
&lt;/h2&gt;&lt;h3 id="ground-rules"&gt;Ground rules
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.rs&lt;/code&gt;는 &lt;code&gt;.zig&lt;/code&gt;와 같은 디렉토리, 같은 basename&lt;/li&gt;
&lt;li&gt;크로스 area 타입은 &lt;code&gt;bun_&amp;lt;area&amp;gt;::Type&lt;/code&gt;으로 참조 (Phase B에서 Cargo.toml 와이어업)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;금지&lt;/strong&gt;: tokio, rayon, hyper, async-trait, futures, std::fs/net/process — Bun은 자체 이벤트 루프 + 시스템콜&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;금지&lt;/strong&gt;: &lt;code&gt;async fn&lt;/code&gt; — 모두 콜백 + 상태머신&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unsafe&lt;/code&gt;는 Zig가 unsafe였던 곳에서 OK. 모든 unsafe block에 &lt;code&gt;// SAFETY: &amp;lt;why&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;확신 안 서면 &lt;code&gt;// TODO(port): &amp;lt;reason&amp;gt;&lt;/code&gt; 남기기&lt;/strong&gt; — 추측보다 플래그가 낫다&lt;/li&gt;
&lt;li&gt;Zig의 perf 이디엄 (&lt;code&gt;appendAssumeCapacity&lt;/code&gt;, arena bulk-free, comptime monomorphization)은 평범한 Rust로 → &lt;code&gt;// PERF(port): ...&lt;/code&gt; 마킹 후 Phase B에서 grep + 벤치&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="crate-map-예시"&gt;Crate map (예시)
&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;는 &lt;a class="link" href="https://github.com/microsoft/mimalloc" target="_blank" rel="noopener"
 &gt;mimalloc&lt;/a&gt; 위에 올린 arena allocator고, &lt;code&gt;bun.uws&lt;/code&gt;는 Bun 자체 이벤트 루프(uSockets) 바인딩이다. 두 곳 모두 Rust 표준의 &lt;a class="link" href="https://tokio.rs/" target="_blank" rel="noopener"
 &gt;tokio&lt;/a&gt; 같은 async 런타임을 쓰지 않는다는 점이 결정적이다.&lt;/p&gt;
&lt;h3 id="type-map-예시"&gt;Type map (예시)
&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; / 아레나 raw ptr&lt;/strong&gt; — &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; (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; (제네릭 + 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;삭제&lt;/strong&gt; — &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; (방금 만든 로컬)&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;삭제&lt;/strong&gt; — &lt;code&gt;?&lt;/code&gt;가 알아서 drop&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; + 성공 경로에서 disarm&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="인상적인-미시-규칙"&gt;인상적인 미시 규칙
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bun_core::Error&lt;/code&gt;가 &lt;strong&gt;&lt;code&gt;#[repr(transparent)] NonZeroU16&lt;/code&gt;&lt;/strong&gt; — 힙 할당 없는 Copy 가능 에러 newtype + link-time 등록 name table. &lt;code&gt;anyhow::Error&lt;/code&gt; / &lt;code&gt;Box&amp;lt;dyn Error&amp;gt;&lt;/code&gt; 금지 이유는 heap-alloc, !Copy, &lt;code&gt;@errorName&lt;/code&gt; snapshot 호환성 깨짐.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bun.Wyhash11&lt;/code&gt;은 &lt;strong&gt;on-disk 호환성 때문에&lt;/strong&gt; &lt;code&gt;std.hash.Wyhash&lt;/code&gt; (seed 0)와 별개로 유지. lockfile, npm manifest cache, integrity 모두 이거 의존 → Rust로 갈 때도 별도 구현 유지.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;defer pool.put(x)&lt;/code&gt; → Rust pool은 Drop 가드 반환. &lt;strong&gt;수동 defer 금지.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scopeguard::guard((), \|_\| ...)&lt;/code&gt; 같은 unit-state 패턴 &lt;strong&gt;금지&lt;/strong&gt; — RAII 누락의 신호.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@errorName(e)&lt;/code&gt; → &lt;code&gt;IntoStaticStr&lt;/code&gt; derive. &lt;strong&gt;&lt;code&gt;Display&lt;/code&gt; / &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 test, crash-handler trace가 정확한 string에 의존.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;for (a, b) \|x, y\|&lt;/code&gt; → &lt;code&gt;for (x, y) in a.iter().zip(b)&lt;/code&gt; + &lt;strong&gt;&lt;code&gt;debug_assert_eq!(a.len(), b.len())&lt;/code&gt;&lt;/strong&gt; (Zig는 assert, Rust zip은 silent truncate)&lt;/li&gt;
&lt;li&gt;TLS 코드는 &lt;a class="link" href="https://boringssl.googlesource.com/boringssl/" target="_blank" rel="noopener"
 &gt;BoringSSL&lt;/a&gt; FFI 그대로 유지. RustTLS 같은 풀-Rust로 다시 짜지 않는다.&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; = 한 &lt;code&gt;.zig&lt;/code&gt; → 한 &lt;code&gt;.rs&lt;/code&gt;. 컴파일 안 돼도 됨. 로직 충실성 + idiomatic 형태.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phase B&lt;/strong&gt; = crate별 컴파일 통과. &lt;code&gt;// TODO(port)&lt;/code&gt;, &lt;code&gt;// PERF(port)&lt;/code&gt; grep으로 일괄 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 분리가 핵심이다. 한 번에 다 짜려고 하면 LLM 컨텍스트가 무너지지만, 하나의 &lt;code&gt;.zig&lt;/code&gt; 파일을 하나의 &lt;code&gt;.rs&lt;/code&gt;로 바꾸는 단위로 쪼개면 한 세션 안에서 끝낼 수 있다. 컴파일 통과 강제는 다음 phase로 미룬다.&lt;/p&gt;
&lt;h2 id="의미--agent-skills의-실전-적용"&gt;의미 — agent-skills의 실전 적용
&lt;/h2&gt;&lt;p&gt;이 PORTING.md 자체가 흥미로운 사례다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;LLM이 따라야 할 가이드를 인간이 미리 만들어 둔 형태&lt;/strong&gt;다. 30KB+ 분량을 미리 작성한 건, &amp;ldquo;Claude가 알아서 포팅해라&amp;quot;가 아니라 &amp;ldquo;&lt;strong&gt;Claude에게 정확히 무엇을 어떻게 번역할지 강제하기 위함&lt;/strong&gt;&amp;ldquo;이다. &lt;a class="link" href="https://www.anthropic.com/news/skills" target="_blank" rel="noopener"
 &gt;Anthropic이 말하는 agent-skills&lt;/a&gt; 사상의 실전 적용이다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;type-by-type 결정을 미리 박아둠&lt;/strong&gt; — &lt;code&gt;[]const u8&lt;/code&gt; (필드)을 &lt;code&gt;Box&amp;lt;[u8]&amp;gt;&lt;/code&gt;으로 갈지 &lt;code&gt;&amp;amp;'static [u8]&lt;/code&gt;으로 갈지를 LLM이 자기 마음대로 정하게 두지 않고, &lt;strong&gt;&amp;ldquo;deinit 보고 결정하라&amp;rdquo;&lt;/strong&gt; 는 메타-규칙으로 못박았다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;docs/LIFETIMES.tsv&lt;/code&gt;&lt;/strong&gt; 라는 사전 분석 파일을 가이드가 명시한다. 필드별 OWNED / SHARED / BORROW_PARAM / STATIC / JSC_BORROW / BACKREF / INTRUSIVE / FFI / ARENA / UNKNOWN 클래스를 미리 매겨두고 그 컬럼 그대로 쓰라는 형태. &lt;strong&gt;LLM에게 줄 cross-file analysis를 사전에 만들어두는 패턴&lt;/strong&gt;이다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&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; 세 마커로 phase 간 핸드오프 — 다음 단계 작업자(또는 다른 LLM 세션)가 grep 한 번으로 일거리를 잡을 수 있게 설계됐다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="인사이트"&gt;인사이트
&lt;/h2&gt;&lt;p&gt;Bun처럼 큰 코드베이스의 언어 마이그레이션을 LLM 자동화로 시도하는 케이스가 처음으로 공개적으로 등장했다. 흥미로운 점은 &lt;strong&gt;핵심 노하우가 모델 자체가 아니라 가이드의 정밀도&lt;/strong&gt; 라는 사실이다. PORTING.md는 type map과 idiom map을 미리 박아두고, LIFETIMES.tsv로 필드별 소유권을 사전 분석해두며, TODO/PERF/PORT NOTE 세 마커로 phase 간 핸드오프를 설계했다. 결과적으로 LLM은 창의적인 결정을 하지 않고 &lt;strong&gt;&amp;ldquo;이 줄을 이 줄로 바꾼다&amp;rdquo;&lt;/strong&gt; 는 기계적 작업만 한다. tokio / rayon / async-trait 같은 흔한 Rust async 스택을 아예 금지한 것도 같은 맥락 — Bun은 자체 이벤트 루프와 &lt;a class="link" href="https://boringssl.googlesource.com/boringssl/" target="_blank" rel="noopener"
 &gt;BoringSSL&lt;/a&gt; 같은 FFI 자산을 유지하기 때문에 LLM이 멋대로 &amp;ldquo;Rust답게&amp;rdquo; 바꾸면 인프라가 깨진다. 이 PORTING.md는 LLM-driven port의 일종의 &lt;strong&gt;교과서&lt;/strong&gt; 가 될 가능성이 있다. 거대 코드베이스 마이그레이션이 LLM 비용으로 풀린다면, 그 비용 효율을 결정하는 것은 GPU도 모델도 아니라 &lt;strong&gt;사전에 짜둔 가이드의 두께&lt;/strong&gt; 다.&lt;/p&gt;
&lt;h2 id="참고"&gt;참고
&lt;/h2&gt;&lt;h3 id="bun과-포팅-브랜치"&gt;Bun과 포팅 브랜치
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://bun.com" target="_blank" rel="noopener"
 &gt;Bun 홈페이지&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 레포&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; 브랜치&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="언어와-생태계"&gt;언어와 생태계
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://ziglang.org/" target="_blank" rel="noopener"
 &gt;Zig 언어&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 언어&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 발표&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="도구--crate-레퍼런스"&gt;도구 / crate 레퍼런스
&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; — &lt;code&gt;errdefer&lt;/code&gt; 대응 RAII 가드&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; — &lt;code&gt;MimallocArena&lt;/code&gt; 의존 allocator&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 FFI 유지 대상&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://tokio.rs/" target="_blank" rel="noopener"
 &gt;tokio&lt;/a&gt; — Phase A에서 명시적으로 금지된 async 런타임&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>