<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gpt on Yarang's Tech Lair</title><link>https://blog.fcoinfup.com/tags/gpt/</link><description>Recent content in Gpt on Yarang's Tech Lair</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 30 Mar 2026 00:33:34 +0900</lastBuildDate><atom:link href="https://blog.fcoinfup.com/tags/gpt/index.xml" rel="self" type="application/rss+xml"/><item><title>Multi-Model AI Agent Team Design: Composed Architecture and 5-Team Hierarchy</title><link>https://blog.fcoinfup.com/post/multi-model-ai-agent-team-design-composed-architecture-and-5-team-hierarchy/</link><pubDate>Mon, 30 Mar 2026 00:33:34 +0900</pubDate><guid>https://blog.fcoinfup.com/post/multi-model-ai-agent-team-design-composed-architecture-and-5-team-hierarchy/</guid><description>&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;For building a blog system, I designed a multi-model agent team consisting of &lt;strong&gt;14 AI specialists, 5 teams, and 4 LLM models&lt;/strong&gt;. The core innovations are two:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Composed Agent&lt;/strong&gt;: Separating role definitions from execution profiles for maximum reusability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hierarchical Bridge Leadership&lt;/strong&gt;: Dual membership of tech leads between upper and lower teams to resolve communication bottlenecks&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This post covers the final structure, model distribution strategy, and the composed architecture design process.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="background-why-multi-model"&gt;Background: Why Multi-Model?
&lt;/h2&gt;&lt;p&gt;Using a single LLM for all tasks creates two problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cost&lt;/strong&gt;: Running 14 specialists on a Claude Opus-level model makes costs uncontrollable&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fit&lt;/strong&gt;: Design needs fast reasoning, security analysis needs deep logic, implementation needs stable coding&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So we distributed models based on task characteristics.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="final-team-structure"&gt;Final Team Structure
&lt;/h2&gt;&lt;p&gt;5 teams, 14 specialists, 4 models.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 subgraph UPPER["Upper — Steering Team · consensus"]
 ORC["Orchestrator&lt;br/&gt;relay:steering-orchestrator"]
 DES["Architect&lt;br/&gt;gemini:gemini-2.5-flash"]
 SEC["Security Reviewer&lt;br/&gt;codex:gpt-4o"]
 STL["Backend Tech Lead&lt;br/&gt;relay:developer-zai"]
 FTL["Frontend Tech Lead&lt;br/&gt;relay:developer-zai"]
 DTL["Desktop Tech Lead&lt;br/&gt;relay:developer-zai"]
 INF["Infra Network&lt;br/&gt;gemini:gemini-2.5-flash"]
 SAD["Server Admin&lt;br/&gt;relay:developer-zai"]
 end

 subgraph LOWER_BE["Backend Team · leader_decides"]
 BTL["Backend Tech Lead"]
 BDEV["Backend Developer"]
 end

 subgraph LOWER_FE["Frontend Team · leader_decides"]
 FTL2["Frontend Tech Lead"]
 FDEV["Frontend Developer"]
 FUX["UX Designer"]
 end

 subgraph LOWER_DT["Desktop Team · leader_decides"]
 DTL2["Desktop Tech Lead"]
 DDEV["Desktop Developer"]
 DUX["UX Designer"]
 end

 subgraph LOWER_INFRA["Infra Team · leader_decides"]
 SAD2["Server Admin (Leader)"]
 INET["Cloud Network"]
 DBA["DB Architect"]
 end

 UPPER -.-&gt;|bridge| LOWER_BE
 UPPER -.-&gt;|bridge| LOWER_FE
 UPPER -.-&gt;|bridge| LOWER_DT
 UPPER -.-&gt;|bridge| LOWER_INFRA

 BTL --&gt; BDEV
 FTL2 --&gt; FDEV
 FTL2 --&gt; FUX
 DTL2 --&gt; DDEV
 DTL2 --&gt; DUX
 SAD2 --&gt; INET
 SAD2 --&gt; DBA&lt;/pre&gt;&lt;h3 id="team-details"&gt;Team Details
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Team&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Decision-Making&lt;/th&gt;
 &lt;th&gt;Leader&lt;/th&gt;
 &lt;th&gt;Members&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Steering Team&lt;/td&gt;
 &lt;td&gt;upper&lt;/td&gt;
 &lt;td&gt;consensus&lt;/td&gt;
 &lt;td&gt;Orchestrator&lt;/td&gt;
 &lt;td&gt;8 (including bridges)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Backend Team&lt;/td&gt;
 &lt;td&gt;lower&lt;/td&gt;
 &lt;td&gt;leader_decides&lt;/td&gt;
 &lt;td&gt;Backend Tech Lead&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Frontend Team&lt;/td&gt;
 &lt;td&gt;lower&lt;/td&gt;
 &lt;td&gt;leader_decides&lt;/td&gt;
 &lt;td&gt;Frontend Tech Lead&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Desktop Team&lt;/td&gt;
 &lt;td&gt;lower&lt;/td&gt;
 &lt;td&gt;leader_decides&lt;/td&gt;
 &lt;td&gt;Desktop Tech Lead&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Infra Team&lt;/td&gt;
 &lt;td&gt;lower&lt;/td&gt;
 &lt;td&gt;leader_decides&lt;/td&gt;
 &lt;td&gt;Server Admin&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="the-infra-team-separation-decision"&gt;The Infra Team Separation Decision
&lt;/h2&gt;&lt;p&gt;In the initial design, DB Architect and Server Admin were part of the backend team. But we separated them based on &lt;strong&gt;workspace&lt;/strong&gt;.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph LR
 subgraph BackendTeam["Backend Team"]
 B["API Code Writing&lt;br/&gt;FastAPI, Python&lt;br/&gt;workspace: VS Code / SSH"]
 end

 subgraph InfraTeam["Infra Team"]
 S["Server Management&lt;br/&gt;Docker, Ubuntu, Nginx&lt;br/&gt;workspace: SSH Terminal"]
 N["Cloud Network&lt;br/&gt;Cloudflare Dashboard&lt;br/&gt;workspace: Web Console"]
 D["DB Management&lt;br/&gt;PostgreSQL, Migrations&lt;br/&gt;workspace: psql / SSH"]
 end

 B -.-&gt;|API deployment| S
 B -.-&gt;|Query optimization| D&lt;/pre&gt;&lt;p&gt;When workspaces differ, separation is more natural than keeping them together.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="model-distribution-strategy"&gt;Model Distribution Strategy
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;pie title Specialists by Model
 "relay:developer-zai (GLM)" : 10
 "gemini:gemini-2.5-flash" : 2
 "codex:gpt-4o" : 1
 "zai:glm-4" : 1&lt;/pre&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Model&lt;/th&gt;
 &lt;th&gt;Specialists&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;th&gt;Why Chosen&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;relay:developer-zai&lt;/td&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;td&gt;Implementation, ops, leads&lt;/td&gt;
 &lt;td&gt;Cost-effective, stable coding&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;gemini:gemini-2.5-flash&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Design, infra network&lt;/td&gt;
 &lt;td&gt;Fast response, easy external API calls&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;codex:gpt-4o&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Security review&lt;/td&gt;
 &lt;td&gt;High reasoning, OWASP knowledge&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;zai:glm-4&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Context compression&lt;/td&gt;
 &lt;td&gt;Free tier, text summarization specialized&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;By assigning 10 implementation specialists to GLM, we achieved &lt;strong&gt;60-70% total cost reduction&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="composed-agent-architecture"&gt;Composed Agent Architecture
&lt;/h2&gt;&lt;p&gt;The core innovation is &lt;strong&gt;separating role definitions (Expert) from execution profiles (Definition)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;With the traditional approach, role and execution logic are coupled — any change requires a full rewrite, and reuse is impossible.&lt;/p&gt;
&lt;h3 id="composed-approach"&gt;Composed Approach
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 DEF["Definition&lt;br/&gt;Backend Developer"]
 DEF --&gt; BASE["Base: backend-core"]
 DEF --&gt; CAP["Capabilities:&lt;br/&gt;rest-api, crud, auth-jwt"]
 DEF --&gt; PLAT["Platform: fastapi"]
 DEF --&gt; POL["Policy: blog-default"]

 BASE --&gt; |"compose"| RUN["Runtime Agent"]
 CAP --&gt; |"compose"| RUN
 PLAT --&gt; |"compose"| RUN
 POL --&gt; |"compose"| RUN&lt;/pre&gt;&lt;h3 id="module-structure"&gt;Module Structure
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;agent-library/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── definitions/ ← 14 agent definitions
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── modules/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── base/ ← 6 base modules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── capabilities/ ← 15 capability modules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── platforms/ ← 5 platform modules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── policies/ ← 1 policy
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── runs/ ← execution history
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="advantages"&gt;Advantages
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reusability&lt;/strong&gt;: &lt;code&gt;rest-api&lt;/code&gt; capability module shared by backend developer and backend tech lead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Platform swap&lt;/strong&gt;: Change &lt;code&gt;platform: fastapi&lt;/code&gt; to &lt;code&gt;platform: django&lt;/code&gt; for instant switching&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Capability extension&lt;/strong&gt;: Add a new capability module and connect it to the Definition&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy unification&lt;/strong&gt;: All agents follow the same &lt;code&gt;blog-default&lt;/code&gt; policy&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="expert-definition-mapping"&gt;Expert-Definition Mapping
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Expert&lt;/th&gt;
 &lt;th&gt;Definition&lt;/th&gt;
 &lt;th&gt;Base&lt;/th&gt;
 &lt;th&gt;Capabilities&lt;/th&gt;
 &lt;th&gt;Platform&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Backend Developer&lt;/td&gt;
 &lt;td&gt;backend-developer&lt;/td&gt;
 &lt;td&gt;backend-core&lt;/td&gt;
 &lt;td&gt;rest-api, crud, auth-jwt&lt;/td&gt;
 &lt;td&gt;fastapi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Backend Tech Lead&lt;/td&gt;
 &lt;td&gt;backend-tech-lead&lt;/td&gt;
 &lt;td&gt;backend-core&lt;/td&gt;
 &lt;td&gt;rest-api, crud, code-review&lt;/td&gt;
 &lt;td&gt;fastapi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Frontend Developer&lt;/td&gt;
 &lt;td&gt;frontend-developer&lt;/td&gt;
 &lt;td&gt;frontend-core&lt;/td&gt;
 &lt;td&gt;markdown-renderer, list-filter-sort&lt;/td&gt;
 &lt;td&gt;nextjs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Server Admin&lt;/td&gt;
 &lt;td&gt;server-administrator&lt;/td&gt;
 &lt;td&gt;server-core&lt;/td&gt;
 &lt;td&gt;docker-management, nginx-config, postgres-admin&lt;/td&gt;
 &lt;td&gt;ubuntu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Infra Network&lt;/td&gt;
 &lt;td&gt;infra-network-admin&lt;/td&gt;
 &lt;td&gt;infra-core&lt;/td&gt;
 &lt;td&gt;dns-management, ssl-certificates, rate-limiting&lt;/td&gt;
 &lt;td&gt;cloudflare&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Security Reviewer&lt;/td&gt;
 &lt;td&gt;security-auditor&lt;/td&gt;
 &lt;td&gt;specialist-core&lt;/td&gt;
 &lt;td&gt;security-audit&lt;/td&gt;
 &lt;td&gt;fastapi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Context Compressor&lt;/td&gt;
 &lt;td&gt;context-compressor&lt;/td&gt;
 &lt;td&gt;specialist-core&lt;/td&gt;
 &lt;td&gt;context-compression&lt;/td&gt;
 &lt;td&gt;markdown&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="tls-certificate-strategy-cloudflare-origin-ca"&gt;TLS Certificate Strategy: Cloudflare Origin CA
&lt;/h2&gt;&lt;p&gt;For production TLS certificates, we chose &lt;strong&gt;Cloudflare Origin CA&lt;/strong&gt; over Let&amp;rsquo;s Encrypt.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;sequenceDiagram
 participant Client as Visitor
 participant CF as Cloudflare (Proxy)
 participant Nginx as Nginx (Origin)
 participant API as FastAPI

 Client-&gt;&gt;CF: HTTPS request
 CF-&gt;&gt;CF: Terminate with Cloudflare-managed cert
 CF-&gt;&gt;Nginx: Encrypt with Origin CA cert
 Nginx-&gt;&gt;API: HTTP (local)
 API--&gt;&gt;Nginx: Response
 Nginx--&gt;&gt;CF: Encrypted with Origin CA
 CF--&gt;&gt;Client: Response&lt;/pre&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Item&lt;/th&gt;
 &lt;th&gt;Let&amp;rsquo;s Encrypt&lt;/th&gt;
 &lt;th&gt;Cloudflare Origin CA&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Validity&lt;/td&gt;
 &lt;td&gt;90 days (renewal required)&lt;/td&gt;
 &lt;td&gt;15 years (no renewal)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Issuance&lt;/td&gt;
 &lt;td&gt;ACME automation required&lt;/td&gt;
 &lt;td&gt;Manual from Dashboard&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Complexity&lt;/td&gt;
 &lt;td&gt;certbot setup&lt;/td&gt;
 &lt;td&gt;Copy cert files only&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Production architecture:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Oracle Cloud ARM (4 OCPU, 24GB)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── PostgreSQL (installed directly on host)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── Docker Compose
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── blog-api (FastAPI)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── blog-frontend (Next.js standalone)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── MinIO (S3-compatible storage)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── Nginx (Cloudflare Origin CA)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── Cloudflare Proxy (Full Strict SSL)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="relay-plugin-agent-invocation-mechanism"&gt;Relay Plugin: Agent Invocation Mechanism
&lt;/h2&gt;&lt;p&gt;The team structure runs in Claude Code through the &lt;strong&gt;Relay plugin&lt;/strong&gt;.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;sequenceDiagram
 participant User as User
 participant Claude as Claude Code
 participant Plugin as Relay Plugin
 participant MCP as MCP Server
 participant LLM as External LLM

 User-&gt;&gt;Claude: /relay:invoke-agent
 Claude-&gt;&gt;Plugin: Load definition by expert slug
 Plugin-&gt;&gt;Plugin: Compose Definition (base + capabilities + platform + policy)
 Plugin-&gt;&gt;Plugin: Check backed_by

 alt relay:developer-zai
 Plugin-&gt;&gt;Claude: Run internal agent
 else gemini:*
 Plugin-&gt;&gt;MCP: Call gemini_mcp server
 MCP-&gt;&gt;LLM: Gemini API
 LLM--&gt;&gt;MCP: Response
 MCP--&gt;&gt;Plugin: Result
 else codex:*
 Plugin-&gt;&gt;MCP: Call codex_mcp server
 MCP-&gt;&gt;LLM: OpenAI API
 LLM--&gt;&gt;MCP: Response
 MCP--&gt;&gt;Plugin: Result
 end

 Plugin--&gt;&gt;Claude: Final result
 Claude--&gt;&gt;User: Response&lt;/pre&gt;&lt;h3 id="backed_by-namespaces"&gt;backed_by Namespaces
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Namespace&lt;/th&gt;
 &lt;th&gt;MCP Server&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;relay:developer-zai&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;internal agent&lt;/td&gt;
 &lt;td&gt;Implementation, ops (low cost)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;relay:steering-orchestrator&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;internal agent&lt;/td&gt;
 &lt;td&gt;Coordination, final decisions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gemini:gemini-2.5-flash&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;gemini_mcp&lt;/td&gt;
 &lt;td&gt;Design, external APIs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;codex:gpt-4o&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;codex_mcp&lt;/td&gt;
 &lt;td&gt;Security analysis&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;zai:glm-4&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;zai_mcp&lt;/td&gt;
 &lt;td&gt;Context compression&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="design-decision-log"&gt;Design Decision Log
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Decision&lt;/th&gt;
 &lt;th&gt;Alternative&lt;/th&gt;
 &lt;th&gt;Rationale&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Separate infra team&lt;/td&gt;
 &lt;td&gt;Include in backend&lt;/td&gt;
 &lt;td&gt;Different workspaces (SSH vs IDE)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cloudflare Origin CA&lt;/td&gt;
 &lt;td&gt;Let&amp;rsquo;s Encrypt&lt;/td&gt;
 &lt;td&gt;15-year validity, no renewal&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PostgreSQL on host&lt;/td&gt;
 &lt;td&gt;Docker container&lt;/td&gt;
 &lt;td&gt;Memory efficiency on single server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Composed agent&lt;/td&gt;
 &lt;td&gt;Single-definition agent&lt;/td&gt;
 &lt;td&gt;Module reusability, easy platform swap&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Assign many GLM&lt;/td&gt;
 &lt;td&gt;Assign many Claude&lt;/td&gt;
 &lt;td&gt;60-70% cost reduction&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="retrospective-what-i-learned"&gt;Retrospective: What I Learned
&lt;/h2&gt;&lt;h3 id="1-executable-structure-over-perfect-structure"&gt;1. &amp;ldquo;Executable Structure&amp;rdquo; over &amp;ldquo;Perfect Structure&amp;rdquo;
&lt;/h3&gt;&lt;p&gt;Trying to design everything perfectly can prevent you from ever starting. It&amp;rsquo;s better to compromise and improve as you execute.&lt;/p&gt;
&lt;h3 id="2-workspace-defines-team-boundaries"&gt;2. Workspace Defines Team Boundaries
&lt;/h3&gt;&lt;p&gt;People who write code and people who manage servers have different physical work environments — that&amp;rsquo;s a natural team boundary.&lt;/p&gt;
&lt;h3 id="3-the-value-of-composed-architecture"&gt;3. The Value of Composed Architecture
&lt;/h3&gt;&lt;p&gt;In an environment with 14 specialists, 5 teams, and 4 models interacting, module separation is essential. It minimizes the scope of changes and maximizes reusability.&lt;/p&gt;
&lt;h3 id="4-cost-is-determined-at-design-time"&gt;4. Cost is Determined at Design Time
&lt;/h3&gt;&lt;p&gt;Asking &amp;ldquo;does this task really need a high-cost model?&amp;rdquo; every time naturally optimizes costs.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="next-steps"&gt;Next Steps
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Start Phase 1 implementation: DB, Auth, Post/Category CRUD, Docker&lt;/li&gt;
&lt;li&gt;Share team operation experience: Problems encountered during actual execution&lt;/li&gt;
&lt;li&gt;Performance monitoring: Response time per model, cost vs quality analysis&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

 &lt;blockquote&gt;
 &lt;p&gt;This post summarizes my experience building an AI agent team using Claude Code + Relay plugin.
It reflects learnings from applying this to a real project — different approaches may be more suitable depending on your situation.&lt;/p&gt;

 &lt;/blockquote&gt;</description></item></channel></rss>