Swift로 Claude Code 스타일 Coding Agent 처음부터 만들기
Building a coding agent in Swift from scratch
TL;DR Highlight
Claude Code의 핵심 구조를 Swift로 9단계에 걸쳐 재구현함으로써 '도구는 적게, 모델에게 더 많이 맡겨라'는 설계 철학의 유효성을 검증했다.
Who Should Read
LLM 기반 코딩 에이전트를 직접 구현해보고 싶은 백엔드/iOS 개발자, 또는 Claude Code 같은 AI 에이전트가 내부적으로 어떻게 동작하는지 원리 수준에서 이해하고 싶은 개발자.
Core Mechanics
- 이 프로젝트의 핵심 가설은 '도구가 많을수록 에이전트가 좋아진다'는 통념에 반론을 제기한다. Claude Code가 효과적인 이유는 복잡한 오케스트레이션이 아니라 검색 도구, 파일 편집 도구처럼 단순하지만 품질 높은 소수의 도구와 모델에 대한 높은 신뢰 덕분이라는 것이 저자의 주장이다.
- 에이전트 루프 설계 원칙으로 5가지를 제시한다: ① 소수의 고품질 도구 > 방대한 도구 카탈로그, ② 얇은 오케스트레이션(모델이 직접 판단), ③ 명시적인 태스크 상태 관리로 신뢰성 향상, ④ 영속 메모리보다 제어된 컨텍스트 주입이 더 중요, ⑤ Context Compaction(컨텍스트 압축)은 단순한 토큰 절약이 아니라 실제 제품 기능이다.
- 총 9개 단계(Stage)로 구성된 학습 시리즈 형태로 구현되었고, 각 단계가 루프, 도구 디스패치, 상태 유지, 서브에이전트/스킬/컨텍스트 압축 등 하나의 메커니즘을 격리해서 실험하도록 설계되었다. 덕분에 어떤 아키텍처 결정이 실제로 차이를 만드는지 직접 눈으로 확인할 수 있다.
- 구현 언어로 Swift를 선택한 이유가 단순한 취향 이상이다. Swift의 Structured Concurrency(구조화된 동시성, async/await 기반으로 작업 생명주기를 명확하게 관리하는 방식)가 에이전트 루프 구조와 자연스럽게 맞아떨어지고, 강타입 시스템 덕분에 도구 스키마를 정의할 때 다른 언어에서 흔한 JSON 문자열 파싱 오류가 줄어든다.
- 프로젝트 구조는 Sources, Tests, docs, skills/example 디렉토리로 구성되어 있으며, .env.example 파일과 Package.swift가 포함되어 있어 Swift Package Manager로 바로 빌드할 수 있다. GitHub Actions 워크플로우도 포함되어 있다.
- 저자는 '대부분의 마법은 상태 관리와 제어 흐름에 있다'고 결론 내린다. 즉, LLM 자체의 능력보다 에이전트가 언제 무엇을 하는지 명확하게 통제하는 설계가 품질을 좌우한다는 주장이다.
- 전체 9부 학습 시리즈가 ivanmagda.dev에 공개되어 있어 단순히 코드를 읽는 것을 넘어 단계별 설계 의도와 실험 결과를 글로도 확인할 수 있다.
Evidence
- 긴 세션에서의 컨텍스트 관리가 가장 어려운 부분이라는 실전 경험이 공유됐다. 한 댓글 작성자는 하드 컨텍스트 한계에 도달하기 훨씬 전부터 도구 호출 히스토리가 쌓이면 '다시 확인해볼게요' 루프나 모호한 도구 선택 같은 품질 저하가 발생한다고 지적했다. 이를 해결하기 위해 ① 완료된 서브태스크 출력을 요약해서 compact한 작업 메모리 블록으로 교체, ② 정보를 추출한 후 중간 파일 읽기 결과는 공격적으로 드롭, ③ 초기 시스템 프롬프트에 '완료' 상태의 명확한 정의를 포함시키는 방법이 도움이 됐다고 한다.
- CLI 컴포넌트 이름을 'claude'라고 지은 것에 대해 법적 문제를 우려하는 댓글이 있었다. Anthropic의 상표와 충돌할 수 있으므로 테이크다운 요청을 받을 수 있다는 실질적인 경고였다.
- 에이전트 루프의 핵심 부분을 처리하는 Swift 라이브러리 'Operator'(github.com/bensyverson/Operator)를 직접 만들었다는 개발자가 링크를 공유했다. 비슷한 작업을 하는 사람에게 시간을 아껴줄 수 있다고 소개했다.
- 단계별 빌드 방식이 실패 모드를 명확하게 만든다는 점을 높이 평가하는 댓글이 있었다. 루프 → 도구 디스패치 → 상태 유지 → 서브에이전트/스킬/압축 순서로 쌓아가면서 '대부분의 마법이 상태 관리와 제어 흐름에 있다'는 것을 상기시켜줬다는 반응이다.
- Apple Intelligence가 Gemini를 코어로 사용하게 되면 이 프로젝트에 드롭인해서 100% 로컬 AI 에이전트를 만들 수 있을지 묻는 댓글도 있었다. 직접적인 답변은 없었지만 Swift 생태계에서 로컬 모델 연동에 대한 관심이 있음을 보여준다.
How to Apply
- Claude Code 같은 코딩 에이전트를 직접 만들어보고 싶다면, 이 레포의 9단계 시리즈를 처음부터 따라가면서 각 단계에서 하나의 메커니즘(루프 → 도구 디스패치 → 컨텍스트 관리 순)만 집중적으로 구현해보면 된다. 한 번에 전체를 구현하려는 것보다 실패 원인을 훨씬 빠르게 격리할 수 있다.
- 긴 세션에서 에이전트 품질이 떨어지는 문제를 겪고 있다면, 도구 호출 히스토리 전체를 컨텍스트에 유지하는 대신 완료된 서브태스크는 요약 블록으로 교체하고 이미 정보를 추출한 파일 읽기 결과는 즉시 드롭하는 방식을 적용해볼 것. 댓글 경험에 따르면 하드 컨텍스트 한계 이전에 품질이 먼저 떨어지는 문제를 크게 줄여준다.
- 새 코딩 에이전트를 설계할 때 도구 수를 늘리기 전에 기존 도구의 품질을 먼저 높이는 방향을 검토해볼 것. 이 프로젝트의 가설처럼, 검색 도구 하나와 파일 편집 도구 하나라도 각 도구가 정확하게 동작한다면 20개의 허술한 도구보다 낫다는 것을 실험을 통해 직접 검증해볼 수 있다.
- Swift로 에이전트를 구현하려는 경우, 댓글에서 소개된 'Operator' 라이브러리(github.com/bensyverson/Operator)를 먼저 살펴보면 에이전트 루프 보일러플레이트 코드를 줄일 수 있다.
Terminology
관련 논문
프로덕션 AI 에이전트를 GPT-5.6으로 마이그레이션: 2.2배 빠르고 27% 저렴
마케팅 웹사이트를 자동 생성하는 프로덕션 AI 에이전트를 Claude Opus 4.8에서 GPT-5.6 Sol로 전환한 실전 경험담으로, 단순 모델 교체가 아니라 eval 하네스, 툴 스키마, 캐싱, 추론 리플레이까지 손봐야 했던 과정을 구체적인 수치와 함께 정리했다.
xAI Grok Build CLI가 xAI 서버로 전송하는 데이터: 네트워크 레벨 분석
xAI의 공식 코딩 CLI 도구 Grok Build가 사용자 동의 없이 전체 Git 저장소와 .env 시크릿 파일을 xAI 서버로 업로드한다는 사실이 네트워크 트래픽 분석으로 밝혀졌다.
중요할 때 기억하라: Long-Horizon 에이전트를 위한 Proactive Memory Agent
LLM 에이전트가 긴 작업 중 중요한 정보를 잊어버리는 문제를 별도의 메모리 에이전트가 '적절한 타이밍에' 끼어들어 해결하는 방법
WebSwarm: 깊고 넓은 웹 검색을 위한 재귀적 Multi-Agent Orchestration
복잡한 웹 검색을 재귀적으로 분해하고 각 노드에 적합한 검색 모드를 동적으로 할당하는 멀티에이전트 프레임워크
웹 앱을 리버스 엔지니어링해서 AI Agent 도구로 자동 변환하기
로그인된 웹 앱의 API 호출을 브라우저에서 감시해 자동으로 MCP 도구로 변환하는 에이전트를 만들었다. 소스 코드나 공식 API 문서 없이도 Jira, Spotify 같은 서비스에 AI 어시스턴트를 붙일 수 있다.
FableCut – AI 에이전트가 조작할 수 있는 브라우저 기반 비디오 에디터 (zero deps)
타임라인 전체를 JSON 파일 하나로 표현하고 MCP/REST로 AI 에이전트가 직접 편집할 수 있는 브라우저 비디오 에디터로, Claude 같은 AI가 프롬프트 하나로 영상을 자동 컷편집하고 결과를 실시간으로 UI에 반영해준다.