<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agentic Workflows on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/ko/tags/agentic-workflows/</link><description>Recent content in Agentic Workflows on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>ko</language><lastBuildDate>Thu, 28 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/ko/tags/agentic-workflows/index.xml" rel="self" type="application/rss+xml"/><item><title>오케스트레이션은 앞서가는데 기반은 깨진다 — bmad-method와 같은 주에 보고된 두 개의 버그</title><link>https://ice-ice-bear.github.io/ko/posts/2026-05-28-orchestration-ahead-of-primitives/</link><pubDate>Thu, 28 May 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/ko/posts/2026-05-28-orchestration-ahead-of-primitives/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post 오케스트레이션은 앞서가는데 기반은 깨진다 — bmad-method와 같은 주에 보고된 두 개의 버그" /&gt;&lt;h2 id="개요"&gt;개요
&lt;/h2&gt;&lt;p&gt;에이전트 코딩 생태계는 지금 두 방향으로 동시에 움직인다. &lt;a class="link" href="https://github.com/bmad-code-org/bmad-method" target="_blank" rel="noopener"
 &gt;bmad-method&lt;/a&gt; 같은 프레임워크는 베이스 코딩 에이전트 위에 더 많은 페르소나와 워크플로를 얹어 오케스트레이션을 키운다. 그런데 같은 주에 보고된 두 개의 버그 — &lt;a class="link" href="https://github.com/openai/codex" target="_blank" rel="noopener"
 &gt;OpenAI Codex&lt;/a&gt;의 OAuth 크래시와 &lt;a class="link" href="https://github.com/anthropics/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt;의 세션 영구 손상 — 는 그 아래 깔린 기반 primitive가 여전히 깨지기 쉽다는 걸 보여준다.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 A["오케스트레이션 레이어 &amp;lt;br/&amp;gt; 더 많은 에이전트 더 많은 워크플로"] --&gt; B["bmad-method v6 &amp;lt;br/&amp;gt; 12+ 페르소나 Party Mode"]
 A --&gt; C["기반 코딩 에이전트 &amp;lt;br/&amp;gt; Claude Code / Codex / Cursor"]
 C --&gt; D["Codex OAuth &amp;lt;br/&amp;gt; NoneType not iterable"]
 C --&gt; E["Claude Code 세션 &amp;lt;br/&amp;gt; thinking 빈 텍스트 서명 유지"]
 D --&gt; F["팀 전체 사용 차단 &amp;lt;br/&amp;gt; HTTP status None"]
 E --&gt; G["resume 시 400 &amp;lt;br/&amp;gt; 세션 영구 손상"]
 B -.같은 주에 보고된.-&gt; D
 B -.같은 주에 보고된.-&gt; E&lt;/pre&gt;&lt;h2 id="위로-쌓는-쪽-bmad-method의-오케스트레이션"&gt;위로 쌓는 쪽: bmad-method의 오케스트레이션
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/bmad-code-org/bmad-method" target="_blank" rel="noopener"
 &gt;bmad-method&lt;/a&gt;는 &amp;ldquo;Breakthrough Method for Agile AI-Driven Development&amp;quot;의 약자로, GitHub 스타 4만 8천 개가 넘는 MIT 라이선스 &lt;a class="link" href="https://nodejs.org" target="_blank" rel="noopener"
 &gt;JavaScript&lt;/a&gt; 프로젝트다. 핵심 아이디어는 단일 코딩 에이전트를 호출하는 대신, 역할이 나뉜 다수의 AI 페르소나를 협업시키는 것이다. PM, 아키텍트, 개발자, UX 등 12개 이상의 전문 페르소나가 정의돼 있고, 여러 페르소나가 한 세션에서 동시에 대화하는 &lt;strong&gt;Party Mode&lt;/strong&gt;도 있다.&lt;/p&gt;
&lt;p&gt;V6는 계획 깊이를 작업 규모에 맞춰 조정하는 &lt;strong&gt;scale-adaptive planning&lt;/strong&gt;을 내세운다. 모듈 생태계도 넓다 — 34개 이상의 워크플로를 담은 BMM 코어, BMad Builder, Test Architect, Game Dev, Creative Intelligence Suite가 함께 배포된다. 설치는 &lt;code&gt;npx bmad-method install&lt;/code&gt; 한 줄로 &lt;a class="link" href="https://github.com/anthropics/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://www.npmjs.com/package/bmad-method" target="_blank" rel="noopener"
 &gt;npm&lt;/a&gt;에 올라와 있고, 문서는 &lt;a class="link" href="https://docs.bmad-method.org" target="_blank" rel="noopener"
 &gt;docs.bmad-method.org&lt;/a&gt;에 정리돼 있다.&lt;/p&gt;
&lt;p&gt;여기서 핵심은 bmad-method가 &lt;em&gt;기반 에이전트를 대체하지 않는다&lt;/em&gt;는 점이다. 그 위에 얹히는 조정 레이어다. 페르소나 12개와 워크플로 34개가 잘 돌아가려면, 그 아래의 모델 호출과 세션 상태 관리가 먼저 견고해야 한다. 그런데 바로 그 아래에서 같은 주에 두 건의 고장이 보고됐다.&lt;/p&gt;
&lt;h2 id="아래에서-깨지는-쪽-1-codex-oauth가-토하는-nonetype"&gt;아래에서 깨지는 쪽 1: Codex OAuth가 토하는 NoneType
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/openai/codex/issues/24665" target="_blank" rel="noopener"
 &gt;OpenAI Codex 이슈 #24665&lt;/a&gt;(현재 CLOSED)는 한 팀 전체가 &lt;a class="link" href="https://github.com/openai/codex" target="_blank" rel="noopener"
 &gt;Codex&lt;/a&gt;를 못 쓰게 된 사례다. 핵심은 인증 경로다 — API 키가 아니라 ChatGPT/Codex &lt;strong&gt;OAuth&lt;/strong&gt;를 쓰는 구성이었다. 로그상 provider는 &lt;code&gt;openai-codex&lt;/code&gt;, 모델은 &lt;code&gt;gpt-5.5&lt;/code&gt;, 엔드포인트는 &lt;code&gt;[&amp;quot;chatgpt.com/backend-api/codex&amp;quot;]&lt;/code&gt;였고, 다음 에러가 떴다.&lt;/p&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;TypeError: &amp;#39;NoneType&amp;#39; object is not iterable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HTTP status: None
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Non-retryable client error (HTTP None). Aborting.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;증상의 모양이 의미심장하다. HTTP status가 숫자가 아니라 &lt;code&gt;None&lt;/code&gt;이고, 에러는 재시도 불가(non-retryable)로 분류돼 곧장 중단된다. 이건 전형적으로 &lt;strong&gt;백엔드가 null/malformed 데이터를 돌려줬거나, 클라이언트가 누락된 필드를 처리하지 못해&lt;/strong&gt; 파싱 단계에서 &lt;code&gt;None&lt;/code&gt;을 순회하려다 터지는 패턴이다. HTTP 레이어가 정상 응답 코드조차 못 채웠다는 건, 실패가 응답 본문 검증이 아니라 그 이전 — 응답 객체 자체를 만드는 단계 — 에서 났음을 시사한다.&lt;/p&gt;
&lt;p&gt;가장 아픈 부분은 영향 범위다. 한 사용자가 아니라 OAuth를 공유하는 팀 전체가 동시에 막혔다. 오케스트레이션 프레임워크가 아무리 페르소나를 잘 나눠도, 그 모든 페르소나가 결국 같은 OAuth 백엔드를 통해 모델을 호출한다면, 백엔드가 &lt;code&gt;None&lt;/code&gt; 하나를 잘못 흘리는 순간 위층 전체가 함께 멈춘다.&lt;/p&gt;
&lt;h2 id="아래에서-깨지는-쪽-2-claude-code가-세션을-영구히-오염시키는-법"&gt;아래에서 깨지는 쪽 2: Claude Code가 세션을 영구히 오염시키는 법
&lt;/h2&gt;&lt;p&gt;기술적으로 더 흥미로운 건 &lt;a class="link" href="https://github.com/anthropics/claude-code/issues/63147" target="_blank" rel="noopener"
 &gt;Claude Code 이슈 #63147&lt;/a&gt;(현재 OPEN, Claude Code 2.1.153)이다. extended thinking과 tool call을 함께 쓴 세션을 &lt;strong&gt;resume/continue 하면 영구적으로 망가진다.&lt;/strong&gt; 한번 시작되면 새 프롬프트는 물론 no-op조차 똑같은 400을 돌려준다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-mysql" data-lang="mysql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;thinking&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;redacted_thinking&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;blocks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;latest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assistant&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cannot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;modified&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;근본 원인은 transcript 영속화 방식에 있다. Claude Code는 thinking 블록을 세션 transcript jsonl(&lt;code&gt;[&amp;quot;projects/&amp;lt;slug&amp;gt;/&amp;lt;id&amp;gt;.jsonl&amp;quot;]&lt;/code&gt;)에 저장하는데, &lt;strong&gt;&lt;code&gt;thinking&lt;/code&gt; 텍스트는 빈 문자열 &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;로 비우면서 &lt;code&gt;signature&lt;/code&gt; 필드는 원본 그대로 유지한다.&lt;/strong&gt; 디스크에 남는 블록은 이렇게 생겼다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;thinking&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;thinking&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;signature&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;base64, 약 600~4000자&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;resume 시 Claude Code는 이 블록을 그대로 API에 다시 보낸다 — &lt;code&gt;{type:&amp;quot;thinking&amp;quot;, thinking:&amp;quot;&amp;quot;, signature:&amp;lt;원본&amp;gt;}&lt;/code&gt;. 그런데 signature는 &lt;strong&gt;원래의 비어 있지 않던 thinking 텍스트에 대해 계산된 값&lt;/strong&gt;이다. API는 signature를 (지금은 빈) 텍스트에 대해 검증하고, 둘이 안 맞으니 400을 던진다. 원본 텍스트는 이미 디스크에서 사라졌기 때문에 요청을 유효한 형태로 복원할 길이 없다 — &lt;strong&gt;세션은 영구히 오염된다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;이슈 작성자는 &lt;code&gt;jq&lt;/code&gt;로 깨진 transcript를 떠서, 모든 thinking 블록의 텍스트 길이는 0인데 signature 길이는 수백~수천 자임을 보여준다.&lt;/p&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;$ jq ... &amp;#39;select(.type==&amp;#34;thinking&amp;#34;)|[(.thinking|length),(.signature|length)]&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0 3932
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0 1196
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0 620
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;더 무서운 대목: 정상적으로 보이는 수많은 세션에서도 &lt;em&gt;맨 끝&lt;/em&gt; thinking 블록은 똑같이 &amp;ldquo;빈 텍스트 + 서명 유지&amp;rdquo; 상태로 저장돼 있다. 즉 멀쩡해 보이는 세션 다수가 &lt;strong&gt;나중에 resume되는 순간 터지는 잠재적 지뢰&lt;/strong&gt;다. 제안된 수정은 세 갈래다 — (1) 서명된 thinking 텍스트를 통째로 보존해 round-trip이 깨지지 않게 하거나, (2) 재구성된 과거 턴에서 thinking 블록을 아예 빼버리거나(API는 이전 턴 thinking 생략을 허용한다), (3) 요청 빌드 시 &amp;ldquo;빈 텍스트 + 서명&amp;rdquo; 블록을 감지해 보내기 전에 제거하는 방어 가드를 두는 것.&lt;/p&gt;
&lt;h2 id="인사이트"&gt;인사이트
&lt;/h2&gt;&lt;p&gt;두 버그를 나란히 놓으면 한 가지 긴장이 또렷해진다. 오케스트레이션 레이어는 빠르게 앞서가는데, 그게 올라타고 있는 primitive의 신뢰성은 그 속도를 못 따라간다. &lt;a class="link" href="https://github.com/bmad-code-org/bmad-method" target="_blank" rel="noopener"
 &gt;bmad-method&lt;/a&gt;는 페르소나 12개와 워크플로 34개를 조율하지만, 그 모든 호출은 결국 OAuth 토큰 하나와 transcript 파일 하나라는 가느다란 기반 위에서 돈다. &lt;a class="link" href="https://github.com/openai/codex" target="_blank" rel="noopener"
 &gt;Codex&lt;/a&gt;의 &lt;code&gt;None&lt;/code&gt; 크래시는 &lt;em&gt;백엔드가 약속한 형태를 어겼을 때 클라이언트가 우아하게 죽지 못하는&lt;/em&gt; 문제고, &lt;a class="link" href="https://github.com/anthropics/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt;의 thinking 버그는 &lt;em&gt;클라이언트가 자기 상태를 비가역적으로 잘못 직렬화하는&lt;/em&gt; 문제다. 전자는 입력 검증, 후자는 상태 영속화 — 둘 다 화려한 에이전트 기능이 아니라 30년 된 소프트웨어 공학의 기본기다.&lt;/p&gt;
&lt;p&gt;특히 Claude Code 버그는 분산 시스템의 고전적 함정을 압축해서 보여준다. 서명(signature)은 데이터에 대한 무결성 약속인데, 그 데이터를 지우면서 서명만 남기면 약속은 거짓이 된다. 게다가 실패가 &lt;em&gt;저장 시점이 아니라 resume 시점에&lt;/em&gt; 드러나기 때문에, 사용자는 경고도 복구 경로도 없이 긴 작업 세션을 통째로 잃는다. 오케스트레이션이 길고 복잡한 세션을 권장할수록, 이런 잠재 지뢰의 폭발 반경은 커진다. 정직한 결론은 이렇다 — 에이전트를 더 쌓기 전에, 토큰을 새로고침하는 코드와 대화 기록을 직렬화하는 코드가 먼저 지루할 만큼 견고해져야 한다. 화려한 Party Mode보다, &lt;code&gt;None&lt;/code&gt;을 만났을 때 죽지 않는 파서와 서명과 텍스트를 함께 round-trip하는 영속화 계층이 지금 더 시급하다.&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/bmad-code-org/bmad-method" target="_blank" rel="noopener"
 &gt;bmad-method (GitHub)&lt;/a&gt; — 12+ 페르소나, Party Mode, scale-adaptive planning, MIT, 스타 4만 8천+&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.bmad-method.org" target="_blank" rel="noopener"
 &gt;bmad-method 문서&lt;/a&gt; — 모듈·워크플로 레퍼런스&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.npmjs.com/package/bmad-method" target="_blank" rel="noopener"
 &gt;bmad-method (npm)&lt;/a&gt; — &lt;code&gt;npx bmad-method install&lt;/code&gt;로 배포되는 패키지&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/bmad-code-org" target="_blank" rel="noopener"
 &gt;bmad-code-org&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://github.com/openai/codex/issues/24665" target="_blank" rel="noopener"
 &gt;OpenAI Codex 이슈 #24665&lt;/a&gt; — OAuth NoneType 크래시, 팀 전체 사용 차단 (CLOSED)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/anthropics/claude-code/issues/63147" target="_blank" rel="noopener"
 &gt;Claude Code 이슈 #63147&lt;/a&gt; — thinking 빈 텍스트 + 서명 유지로 인한 세션 영구 손상 (OPEN, 2.1.153)&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://github.com/anthropics/claude-code" target="_blank" rel="noopener"
 &gt;Claude Code&lt;/a&gt; · &lt;a class="link" href="https://docs.claude.com/en/docs/claude-code/overview" target="_blank" rel="noopener"
 &gt;Claude Code 문서&lt;/a&gt; — extended thinking과 tool call을 지원하는 에이전트 CLI&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/openai/codex" target="_blank" rel="noopener"
 &gt;OpenAI Codex&lt;/a&gt; — gpt-5.5 기반 코딩 에이전트&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://cursor.com" target="_blank" rel="noopener"
 &gt;Cursor&lt;/a&gt; — bmad-method 설치 대상이 되는 에디터 기반 에이전트&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://nodejs.org" target="_blank" rel="noopener"
 &gt;Node.js&lt;/a&gt; · &lt;a class="link" href="https://docs.astral.sh/uv/" target="_blank" rel="noopener"
 &gt;uv&lt;/a&gt; — JS/Python 에이전트 도구 체인 런타임&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.anthropic.com" target="_blank" rel="noopener"
 &gt;Anthropic&lt;/a&gt; · &lt;a class="link" href="https://openai.com" target="_blank" rel="noopener"
 &gt;OpenAI&lt;/a&gt; — 기반 모델 제공자&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>