CLI·앱
193.7k stars, 23개 모노레포 패키지, Bun + SST + Tauri + SolidJS로 짜인 풀스택 AI 코딩 도구. Claude Code와 비슷한 자리에 있지만 모든 게 오픈되어 있다.
한 마디로, 터미널에서 도는 오픈소스 Claude Code.
OpenCode는 anoma.ly(SST 팀이 만든 회사)에서 공개한 오픈소스 AI 코딩 에이전트다. 터미널에서 opencode 한 줄로 띄우면, 내 코드베이스를 이해하고, 파일을 수정하고, 테스트를 돌리고, git 워크플로우까지 자연어 명령으로 처리해 준다.
Claude Code, Cursor, Codex, Gemini CLI처럼 "코딩 에이전트 CLI" 카테고리에 들어가지만, 결정적 차이가 두 가지 있다. 첫째, MIT 라이선스로 코드가 전부 열려 있어 어떤 LLM 공급자든 갈아 끼울 수 있다. 둘째, 단순 CLI가 아니라 TUI · 데스크탑 · 웹 · IDE 익스텐션 · SDK · Slack 봇 · GitHub/GitLab 자동화까지 같은 코어 위에서 돌아가는 모노레포 플랫폼이다.
이 글의 핵심 메시지.
같은 코딩 에이전트 카테고리에서, 한쪽은 모델·UI·툴이 한 회사에 묶여 있고, 다른 한쪽은 LLM 공급자·UI 폼팩터·도구 시스템·플러그인까지 전부 교체 가능한 오픈 플랫폼이다. "바이브 코딩"을 하면서 동시에 내부 구조까지 학습 재료로 쓸 수 있는 보기 드문 레포다.
트렌딩에 머무는 이유 세 가지.
2026년 들어 코딩 에이전트 시장은 폭발적으로 커졌다. 트렌딩 상위에는 Claude Code, Codex, cc-switch, opencode가 거의 매일 같이 떠 있다. 그 중 OpenCode가 193.7k stars · 24.7k forks · 15,318 commits · 855 releases까지 올라온 데에는 명확한 이유가 있다.
Anthropic, OpenAI, Google, OpenRouter, AWS Bedrock, Groq, Mistral, 로컬 Ollama 등 어떤 공급자든 opencode.json 한 줄로 갈아 끼울 수 있다. 자체 큐레이션 모델 묶음인 "OpenCode Zen"도 제공하지만, 강제하지 않는다.
같은 OpenCode 엔진이 터미널 TUI · 데스크탑 앱(Tauri, BETA) · 웹 인터페이스 · VS Code/JetBrains 익스텐션 · Slack 봇 · GitHub/GitLab Action · 외부 SDK로 동시에 노출된다. 23개 패키지 모노레포가 그 증거.
Claude Code가 정의한 "Agent Skills" 표준은 그대로 호환되고, MCP(Model Context Protocol), ACP(Agent Client Protocol), LSP(Language Server Protocol)까지 별도 어댑터 없이 설정 한 줄로 붙는다. 결과적으로 한번 짠 도구를 어떤 에이전트에서든 재사용할 수 있다.
안드로이드 vs 아이폰을 떠올리면 쉽다. Claude Code가 "공식 펌웨어가 가장 매끄러운 아이폰"이라면, OpenCode는 "AOSP(Android Open Source Project)처럼 누구나 분기·수정·재배포할 수 있는 오픈 플랫폼"이다. 두 진영 다 살아남을 수밖에 없는 이유와 정확히 같다.
백엔드 · 프론트엔드 · 인프라 · 데스크탑.
OpenCode는 단일 언어 단일 프레임워크가 아니다. TypeScript 65.7% · MDX 30.9% · CSS 2.9%로 구성되며, 핵심 런타임은 Bun, 빌드 시스템은 Turbo, 인프라 코드는 SST를 쓴다.
Bun.file() 같은 자체 API가 풍부하다. OpenCode는 가능하면 Node 표준 API보다 Bun 네이티브 API를 쓰는 게 코딩 규칙이다.bun turbo typecheck 한 줄이 23개 패키지 전체 타입 체크.sst.config.ts의 home: 'cloudflare'가 기반이며, AWS 리소스(Lambda 등)는 일부 서비스에 병행 사용된다. OpenCode가 Anomaly 사의 클라우드 기능(Share, Zen, GitHub App)을 운영하는 기반.hono-openapi로 라우트에서 자동으로 OpenAPI 스펙을 뽑아 SDK까지 생성한다. ./packages/sdk/js/script/build.ts로 JS SDK가 자동 재생성되는 게 이 흐름.packages/effect-drizzle-sqlite에 Effect와의 통합 레이어가 따로 있다.ai는 Vercel AI SDK, OpenAI/Anthropic/Google 등 공급자를 통합 인터페이스로 호출하는 추상화 계층. OpenCode는 자체 LLM 추상화 + ai SDK를 같이 쓴다.packages/docs는 Starlight(=Astro 기반 문서 사이트 빌더). MDX 30.9%가 여기서 나온다. opencode.ai/docs가 그 결과.packages/effect-drizzle-sqlite에 Drizzle 어댑터가 별도 존재한다는 점에서, Effect가 OpenCode의 코어 비즈니스 로직을 지탱하는 패러다임임을 알 수 있다.시스템 구조도 + 핵심 설계 패턴.
OpenCode의 아키텍처를 한 장으로 그리면 이렇게 된다. 왼쪽은 사용자가 보는 폼팩터, 가운데는 공통 코어, 오른쪽은 외부 통합점이다.
┌──────────────────────────────────────────────────────────────────┐
│ 사용자 폼팩터 (Frontend) │
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ TUI(CLI) │ │ Desktop │ │ Web App │ │ IDE Ext. │ │
│ │ Bun+ANSI │ │ Tauri+Rust│ │ SolidStart │ │ vscode/zed │ │
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │
│ └────────┬───────┴───────┬──────┴────────┬──────┘ │
└─────────────────┼───────────────┼───────────────┼───────────────┘
│ Hono + zod │ SSE/WS │
▼ ▼ ▼
┌──────────────────────────────────────────────────────────────────┐
│ OpenCode Core (packages/opencode + packages/core) │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Session Manager ──▶ Drizzle ORM ──▶ SQLite (로컬) │ │
│ │ Agent Runner ──▶ Build / Plan / General / Explore │ │
│ │ Tool Executor ──▶ read/edit/grep/bash/task/webfetch │ │
│ │ Permission Layer ──▶ ask / allow / deny (글로브 매칭) │ │
│ │ Plugin Host ──▶ @opencode-ai/plugin (workspace:*) │ │
│ │ Skill Registry ──▶ AGENTS.md + .opencode/agents/*.md │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────┐ │
│ │ LLM Router (ai SDK) │ │
│ └─────────┬────────────┘ │
└────────────────────────┼─────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌────────┐ ┌──────────┐ ┌────────────┐
│Anthropic│ │ OpenAI │ │ Google / │
│ Claude │ │ GPT-5 │ │ Groq / │
│ │ │ │ │ Bedrock / │
└────────┘ └──────────┘ │ OpenRouter │
└────────────┘
▲
│ 외부 통합 (MCP · ACP · LSP)
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌────────┐ ┌──────────┐ ┌────────────┐
│ MCP │ │ ACP │ │ LSP │
│ Server │ │ Server │ │ Server │
│ (any) │ │ (Zed) │ │ (any lang)│
└────────┘ └──────────┘ └────────────┘
packages/opencode + packages/core 가 모든 비즈니스 로직을 들고 있고, TUI/Desktop/Web은 같은 코어 위에 얇은 UI 레이어만 얹는다. 새로운 UI 폼팩터를 추가해도 에이전트 동작은 그대로 재사용되는 구조.
이게 가능한 이유는 코어가 자체 HTTP 서버를 띄우기 때문이다. opencode serve 한 번이면 SDK·웹·IDE가 같은 엔드포인트로 붙는다.
사용자가 직접 대화하는 Primary Agent(build, plan)와, 그 안에서 자동으로 호출되는 Subagent(general, explore, scout)가 분리되어 있다. Primary는 Tab 키로, Subagent는 @general 같은 @멘션으로 호출.
거기에 사용자에게 보이지 않는 Hidden 시스템 에이전트 세 종(compaction, title, summary)이 백그라운드로 도는데, 각각 긴 컨텍스트 요약 · 세션 제목 자동 생성 · 종료 후 회고를 담당한다.
에이전트가 어떤 툴을 쓰는지 다 opencode.json의 permission 으로 통제된다. edit · bash · webfetch · websearch · skill · task 같은 키마다 "allow" / "ask" / "deny" 셋 중 하나. 글로브 패턴까지 받아서 "git push": "ask" 같은 세밀한 룰이 가능하다.
package.json의 workspaces.catalog 에 모든 외부 의존성 버전을 한 곳에 못 박는다. 각 패키지는 "zod": "catalog:" 처럼 가리키기만 한다. 버전 드리프트를 한 파일로 막는 단순하면서 강력한 패턴.
23개 패키지가 각자 무엇을 하는가.
레포 루트의 packages/ 아래에 23개 워크스페이스가 들어 있다. 역할에 따라 묶어 보면 이렇다.
opencode는 사용자가 실제로 실행하는 CLI 엔트리. core는 그 안에서 쓰이는 도메인 로직(세션 · 메시지 · 툴 호출 · 컨텍스트 압축). 모든 폼팩터가 이 둘에 의존한다.
LLM 공급자 추상화 레이어. provider/model-id 형식의 모델 ID를 받아 Anthropic/OpenAI/Google/Groq/Bedrock/OpenRouter 등 어떤 백엔드로든 라우팅. @openrouter/ai-sdk-provider는 패치까지 적용되어 있다.
app은 SolidStart 웹 앱(opencode.ai의 일부). web은 랜딩/문서 자산. ui는 Kobalte + Tailwind 기반 공용 컴포넌트. console은 Anomaly 대시보드. storybook은 UI 컴포넌트 카탈로그.
Tauri 데스크탑 앱. bun --cwd packages/desktop tauri dev 한 줄로 개발 모드 실행. .dmg / .exe / .deb / .rpm / .AppImage 멀티 플랫폼 빌드.
Astro Starlight 기반 공식 문서 사이트(opencode.ai/docs). 20+ 개 언어 번역. README의 README.ko.md 등 21개 언어 README가 여기서 관리된다.
Slack 봇 패키지. 채널에서 멘션으로 OpenCode를 호출할 수 있게 해 준다(예: @opencode "main 브랜치 머지 충돌 좀 봐줘").
tui는 터미널 UI 패키지 — Bun + ANSI 렌더링으로 키보드만으로 조작하는 인터페이스. cli는 커맨드라인 진입점 패키지. IDE 통합(VS Code · Zed)은 독립 패키지가 아니라 레포 루트의 .vscode/·.zed/ 에디터 설정 파일로 구현된다.
plugin은 외부 개발자가 OpenCode 동작을 후킹할 수 있는 플러그인 API. script는 빌드/배포 자동화. sdk는 자동 생성되는 JS SDK(./packages/sdk/js/script/build.ts로 재생성).
containers는 격리된 코드 실행 샌드박스. function은 서버리스 핸들러. http-recorder는 LLM 호출/네트워크 트래픽 기록(디버깅·재현용). identity는 사용자 인증(OpenAuth 기반). enterprise는 SSO·감사 로그 등 유료 기능.
Effect + Drizzle ORM + SQLite의 조합을 깔끔하게 추상화한 어댑터. 다른 OpenCode 패키지가 로컬 SQLite와 상호작용할 때 이걸 통한다.
OpenCode 자기 자신의 코딩 규칙. "Bun 네이티브 API 우선", "try/catch 회피", "any 금지", "destructuring 자제", "Drizzle snake_case", "테스트는 mock 회피" 같은 룰이 적혀 있다. 이게 사용자 프로젝트에 /init으로 생성되는 AGENTS.md의 본보기다.
인프라 정의(SST) · Nix 빌드 환경 · Turbo 파이프라인 · Bun 락파일 · Bun 런타임 설정. "같은 코드가 어떤 OS, 어떤 머신에서도 똑같이 빌드되도록" 굳히는 데 들어간 정성이 보인다.
@standard-community/standard-openapi, solid-js, @ai-sdk/google 등 총 9개 패키지에 직접 패치 적용(@openrouter/ai-sdk-provider는 패치 목록에 없음). 외부 의존성에 버그가 있으면 fork가 아니라 patches/로 우회한다 — Bun의 patchedDependencies 기능 활용.
이 레포에서 뽑아낼 수 있는 학습 모듈.
OpenCode의 가치는 "써 보기"보다 "코드를 읽기"에 있다. 다음 7가지 학습 트랙은 각자 별개의 책 한 권 분량이고, 이 한 레포에서 다 만져 볼 수 있다.
packages/* 23개를 workspaces.catalog로 묶어 버전 드리프트를 막는 패턴은 어떤 풀스택 회사에서도 그대로 적용 가능. Turbo의 캐시 키 설계 · 원격 캐시 · dryrun도 같이 학습.
실습 아이디어: 본인의 작은 모노레포를 만들고, catalog 패턴을 적용해 zod 버전을 한 곳에서 바꾸면 모든 패키지가 따라가게 만들기.
라우트 정의 → OpenAPI 스펙 → JS SDK 자동 생성의 파이프라인이 packages/sdk/js/script/build.ts에 통째로 들어 있다. 토이 프로젝트 한 개로 그대로 모방 가능.
실습 아이디어: Hono + zod + hono-openapi로 "할 일" REST API를 짜고, 거기서 자동 생성된 SDK를 프론트엔드에서 호출.
React에 익숙한 사람에게는 "왜 useEffect가 필요 없는가"가 충격. createSignal/createMemo/createResource 만으로 상태/계산/비동기를 다룬다. 번들 크기도 React의 1/4 수준.
실습 아이디어: Counter → Todo → Chat UI 순으로 SolidStart 앱을 만들어 보고, 같은 걸 React로도 짜서 번들 크기·렌더 횟수 비교.
packages/desktop이 어떻게 멀티 OS 바이너리를 짜내는지(서명·공증·자동 업데이트 포함) 그대로 따라할 수 있는 청사진. Electron이 무겁다고 느꼈다면 Tauri가 답.
실습 아이디어: SolidJS로 만든 작은 메모 앱을 Tauri로 감싸 macOS .dmg + Windows .exe까지 빌드해 보기. GitHub Actions의 release 워크플로우까지 모방.
sst.config.ts에 람다·CloudFront·도메인을 코드로 정의. Pulumi와 비슷한 흐름이지만 풀스택 친화적. "vercel이 너무 비싸지면 SST로 AWS 직접 띄우는 게 답"이라는 결론에 자연스럽게 도달한다.
실습 아이디어: Next.js 사이드 프로젝트 하나를 Vercel에서 SST의 OpenNext로 옮겨 보고, 비용·콜드스타트·배포 시간 비교.
3대 프로토콜이 한 레포에 다 들어 있다. MCP 서버 만들기 → OpenCode 에 붙이기 → 다른 에이전트(Claude Code, Cursor)에서 재사용까지 한 번에 학습 가능.
실습 아이디어: 사내 위키 검색 MCP 서버를 만들고, OpenCode·Claude Code 둘 다에 등록해서 같은 도구가 양쪽에서 동작하는지 확인.
.opencode/agents/*.md에 마크다운 프론트매터로 에이전트를 선언하는 방식은 Claude Code의 Skills 표준과 거의 동일. 권한 글로브 매칭("git push": "ask") 같은 패턴은 사내 에이전트 운영 룰북에 그대로 쓰일 수 있다.
실습 아이디어: 보안 감사용 read-only 에이전트, 문서 작성용 docs-writer 에이전트, 디버깅용 debug 에이전트 3개를 만들고 권한을 다르게 설정.
실제로 돌리려면 뭐가 필요한가.
OpenCode 자체는 LLM을 로컬에서 돌리지 않는다(=Ollama처럼 모델 가중치를 들고 다니지 않는다). 따라서 요구사항은 가볍다. 진짜 비용은 "어떤 LLM 공급자에 얼마를 쓰느냐"에서 결정된다.
macOS / Linux / Windows(WSL 권장) 모두 지원. 터미널은 WezTerm, Alacritty, Ghostty, Kitty 같은 현대적 에뮬레이터 권장(ANSI · 트루컬러 · 마우스 이벤트가 잘 처리되어야 함). cmd.exe / PowerShell 기본 콘솔은 TUI 렌더가 깨질 수 있다.
설치 자체는 100MB 미만. 메모리도 200~500MB면 충분. $HOME/.opencode/bin이 기본 설치 경로이고, $OPENCODE_INSTALL_DIR / $XDG_BIN_DIR 로 커스터마이즈 가능.
적어도 한 곳의 LLM 공급자 API 키가 필요. 권장은 OpenCode Zen(자체 큐레이션 모델 묶음) 또는 Anthropic Claude / OpenAI GPT-5 / OpenRouter. 로컬 Ollama도 붙일 수 있어서 인터넷 없이 돌리는 시나리오도 가능하지만, 코딩 품질은 모델에 강하게 의존.
OpenCode는 MIT 오픈소스지만, 코딩 에이전트의 핵심 가치는 LLM 추론에서 나오고 그건 거의 항상 유료다. Claude Sonnet 으로 풀스택 코딩 하루를 풀가동하면 수십~수백 달러도 가능. 월간 한도와 예산 알람을 먼저 설정하고 시작.
새 코드베이스 탐색은 plan 에이전트(읽기 전용)로 시작하고, build 모드는 자신 있는 시나리오에만 사용. steps: 5 같은 max-step으로 의도치 않은 에이전트 루프 비용 차단.
난이도별 5단계 코스.
"읽기만 해도 배운다"는 말은 절반만 맞다. 다음 과제 5개를 차례로 해 보면 OpenCode의 거의 모든 기능을 만져 보게 된다.
본인이 잘 아는 (혹은 잘 모르는) 작은 레포에 cd 한 뒤 opencode 실행. Tab으로 plan 모드 전환 후 "이 프로젝트 구조 설명해줘"로 시작. plan은 파일 수정 권한이 없어서 안전.
배우는 것: Primary/Subagent 전환, @멘션, /undo, /share.
본인 사이드 프로젝트 루트에서 /init 실행. OpenCode가 자동 분석한 AGENTS.md를 사람이 다듬는다. 코딩 스타일·테스트 정책·금지 패턴을 명시적으로 적어 두면, 이후 모든 에이전트 호출의 품질이 올라간다.
배우는 것: AGENTS.md = 에이전트 컨텍스트 부트스트랩. 좋은 AGENTS.md의 형식 감각.
.opencode/agents/security-auditor.md를 만들고 마크다운 프론트매터로 permission.edit: deny 적용. 그 다음 @security-auditor 인증 모듈 좀 봐줘로 호출.
배우는 것: 마크다운 에이전트 정의, 권한 글로브 매칭, 모델별 분기.
@modelcontextprotocol/sdk 로 미니 MCP 서버 작성(예: "사내 위키 검색"). opencode.json의 mcp 섹션에 등록하고 plan 모드에서 호출. Claude Code에도 같은 서버를 등록해 양쪽 도구 호환성 확인.
배우는 것: MCP 프로토콜 본체, 도구 정의, 사용자 정의 통합의 표준 진입로.
packages/llm을 fork 해서 신규 공급자(예: 사내 LLM 게이트웨이) 어댑터를 짠다. ai SDK의 패턴을 따르고, opencode.json에서 "mycompany/llama3-70b"로 지목 가능하게.
배우는 것: OpenCode 내부 LLM 추상화, 공급자 SDK와 자체 인터페이스의 분리, 패치 vs fork 의사결정.
매주 한 트랙씩, 두 달 코스.
OpenCode가 빨아들이고 있는 기술 스택은 너무 넓어서 한 번에 다 못 본다. 8주 로드맵으로 잘게 나누면 부담이 줄어든다.
Bun 공식 문서 워크스루 + workspaces.catalog + Turbo 파이프라인 만들기. 작은 모노레포 토이 빌드.
REST API 작성 → OpenAPI 자동 추출 → SDK 자동 생성. Hono Adapter로 Bun · Cloudflare · Vercel 셋 다 배포.
Drizzle 스키마 → 마이그레이션 → Effect로 비즈니스 로직 합성. effect-drizzle-sqlite 패턴 분석.
Counter → Todo → Realtime Chat. React와 비교 학습. 시그널 · createResource · 서버 함수.
SolidJS 앱 → Tauri 래핑 → 자동 업데이트 + 코드사이닝. macOS notarize까지.
AWS 계정 발급 → SST로 Next.js/SolidStart 배포. 비용 알람 · 도메인 · CDN 캐싱 설정.
Anthropic의 mcp-builder 스킬을 기반으로 사내용 MCP 서버 작성. OpenCode/Claude Code 둘 다 등록.
레포 issue 중 "good first issue" 라벨 찾아 PR. AGENTS.md의 코딩 스타일 따르기 — destructuring 자제, try/catch 회피, Bun API 우선.
검색 · 면접 · 사내 토론에서 그대로 쓰는 용어들.
SKILL.md(YAML 프론트매터 + 마크다운) + 옵션 references/·scripts/·assets/로 구성. OpenCode는 이 표준을 그대로 받아 .opencode/agents/에 마크다운 에이전트로 로드./connect 한 번이면 opencode.ai/auth로 가서 결제 후 API 키 한 줄 받음. 어떤 모델을 쓸지 모를 때의 기본 옵션.$schema: "https://opencode.ai/config.json"으로 IDE 자동완성도 지원./init 명령으로 자동 분석되며, 모든 에이전트 호출의 첫 컨텍스트로 주입된다. git 커밋 권장 — 팀 전체가 에이전트 응답 품질을 공유.{ "git *": "ask", "git status *": "allow" }처럼 같은 명령군 안에서 안전한 것만 자동 허용 가능. 마지막 매칭 규칙이 우선.공식 + 비공식.
이 글을 읽고 나서 다음 자료들을 순서대로 따라가면 OpenCode의 거의 모든 측면을 직접 확인할 수 있다.
· 공식 사이트 — opencode.ai
· 공식 문서 — opencode.ai/docs
· 한국어 README — github.com/anomalyco/opencode/README.ko.md
· 디스코드 — opencode.ai/discord
· Bun — bun.com/docs
· Turbo — turborepo.com/docs
· SST — sst.dev/docs
· SolidStart — docs.solidjs.com/solid-start
· Tauri — tauri.app
· Drizzle ORM — orm.drizzle.team
· Hono — hono.dev
· Effect — effect.website
· Claude Code (Anthropic 공식) — github.com/anthropics/claude-code
· OpenAI Codex CLI — github.com/openai/codex
· cc-switch (5종 코딩 CLI 통합 매니저) — github.com/farion1231/cc-switch
· chrome-devtools-mcp (구글의 표준 MCP) — github.com/ChromeDevTools/chrome-devtools-mcp
· anthropics/skills (Skills 레퍼런스) — github.com/anthropics/skills
curl -fsSL https://opencode.ai/install | bash 한 줄 후 익숙한 폴더에서 opencode 실행. Tab 키로 plan 모드 잡고 "이 프로젝트 진입점 어디야?"부터 시작./init으로 자동 분석된 초안을 다듬어 코딩 스타일·테스트 정책·금지 패턴을 명문화. 팀 공유 시 에이전트 응답 일관성이 눈에 띄게 올라간다..opencode/agents/reviewer.md를 만들어 mode: subagent + permission.edit: deny로 세팅. @reviewer 호출로 PR 전 셀프 리뷰 자동화."bash": { "*": "ask", "git status *": "allow", "git diff *": "allow" }처럼 안전한 명령만 자동 허용. 무심결의 git push를 ask로 묶어 사고 예방.packages/opencode나 packages/llm 중 한 곳만 골라 코드를 읽고, 본인의 사이드 프로젝트에 비슷한 패턴을 적용. 23개 다 보려 들지 말 것 — 한 패키지만 깊이 보는 게 더 남는다.