블로그코딩 에이전트9분 읽기

OpenCode 2, 에이전트가 만든 도구를 같은 턴에 바로 씁니다

OpenCode 2는 에이전트가 만든 도구를 재시작 없이 같은 턴에 불러옵니다.

OpenCode 2, 에이전트가 만든 도구를 같은 턴에 바로 씁니다 대표 이미지

에이전트에게 글 한 편을 맡깁니다. 에이전트는 초안을 쓰다가 단어 수를 알아야 해서 플러그인 파일을 직접 만들고, 같은 턴에 그 도구를 불러 1,248단어라고 알려 줍니다. 이어서 읽는 시간을 계산하는 도구를 하나 더 만들고 "6분"이라고 답하죠.

OpenCode 팀이 새 글 「OpenCode Reloaded」에서 보여 준 예시 세션입니다. 그동안 OpenCode에서 플러그인을 바꾸려면 프로그램을 껐다 켜거나 /reload를 쳐야 했어요. OpenCode 2는 그 과정 없이 바뀐 내용을 모든 세션에 바로 반영합니다.

OpenCode 2는 설정, MCP 서버, 플러그인, 스킬, 도구를 대화 도중에 다시 불러옵니다. 팀은 이 과정에서 프롬프트 캐시도 깨지 않는다고 설명해요. 다만 터미널 화면(TUI)으로 쓰면 여전히 답답합니다. 사용자들이 새 버전에서 생긴 버그를 여럿 신고했고요.

OpenCode 2는 도구를 바꿔도 멈추지 않습니다

OpenCode 팀은 핫 리로드(hot reload)가 되는 범위를 이렇게 적었습니다.

  • 설정 파일을 고치면 바로 반영합니다.
  • MCP 서버를 연결하면 바로 씁니다.
  • 플러그인을 새로 쓰면 곧바로 불러옵니다.
  • 에이전트가 도구를 직접 만들고 같은 턴에 호출합니다.

이제 프로그램을 끄지도, /reload를 치지도, 새 세션을 열지도 않아도 됩니다. 예시 세션에서 에이전트는 도구를 3개에서 5개로, 스킬을 2개에서 3개로 늘렸습니다. 그동안 대화를 한 번도 끊지 않았고요.

사용자들은 캐시가 자꾸 깨진다고 불평했습니다

올여름 한 개발자가 「OpenCode를 그만 쓰세요」라는 글을 올렸고, 해커뉴스에서 420점을 받았습니다. 글쓴이는 OpenCode가 매 턴 AGENTS.md를 다시 읽고 시스템 프롬프트에 오늘 날짜를 넣는다고 짚었어요. 그러면 OpenCode가 매번 다른 앞부분을 보내고, 모델 회사는 캐시를 못 씁니다. 사용자는 같은 내용을 비싼 값에 다시 보내게 되죠.

OpenCode 2 개발에 참여한 킷 랭턴은 7월에 X에서 이 문제를 직접 언급했습니다. "캐시를 깨지 않고 컨텍스트를 바꿀 수 있게 만들었다"는 내용이에요.

킷 랭턴의 설명 영상 첫 화면. 왼쪽에 AGENTS.md 내용 Use Bun.과 오늘 날짜 Jul 9를 넣는 입력 칸이 있고, 오른쪽에 이벤트 기록과 모델에 보내는 요청 칸이 비어 있습니다

영상에서 킷은 AGENTS.md 한 줄과 오늘 날짜가 프롬프트에 어떻게 들어가는지부터 보여 줍니다. 팀도 새 글 첫머리에서 "캐시는 당연히 깨지 않는다"고 강조합니다.

한 가지는 구분해 둡니다. 팀은 캐시를 지킨다고 설명하지만, 새 버전의 캐시 적중률을 따로 측정한 공개 자료는 아직 찾지 못했어요. 구버전은 제3자인 시스티마(systima.ai)가 한 번 측정했습니다. 사용자가 입력하기 전에 들어가는 기본 토큰을 클로드 코드 약 3만 3천 개, OpenCode 약 7천 개로 집계했어요.

플러그인들이 같은 목록을 서로 고쳤습니다

OpenCode는 모델, 도구, 에이전트, 스킬을 전부 플러그인으로 조립합니다. 기본 동작도 대부분 내장 플러그인이 맡고, 사용자는 플러그인을 더 깔거나 직접 쓰거나 OpenCode에게 써 달라고 할 수 있어요.

팀은 모델 목록을 예로 들어 문제를 설명합니다. 내장 플러그인 하나는 models.dev에서 모델 정보를 받아 목록을 채우고, 실행 중에 주기적으로 새로 받아옵니다. 다른 플러그인은 그 목록에서 특정 회사를 빼거나 출력 한도를 절반으로 줄이죠.

플러그인들이 목록 하나를 제자리에서 고치면, OpenCode는 몇 번 어떤 순서로 돌았느냐에 따라 매번 다른 목록을 내놓습니다. 새로 고침 플러그인이 한 번 돌면 빼 둔 회사를 다시 넣고, 한도를 줄이는 플러그인은 돌 때마다 절반씩 또 줄여요.

두 메서드로 목록을 매번 새로 만듭니다

OpenCode 2는 플러그인에게 목록을 직접 고치지 말라고 합니다. 각 플러그인은 목록을 어떻게 바꿀지 적은 함수만 등록하고, OpenCode는 그 함수들을 순서대로 보관해요.

다시 불러올 때마다 OpenCode는 빈 목록에서 출발합니다. 등록된 함수를 차례로 한 번씩만 통과시키고, 완성된 목록을 모든 세션에 내보내요. 몇 번을 다시 돌려도 OpenCode는 빼 둔 회사를 다시 넣지 않고, 한도도 딱 한 번만 절반으로 줄입니다.

팀은 이 방식을 메서드 두 개짜리 State라는 작은 틀로 묶었습니다.

메서드하는 일
transform바꾸는 함수를 등록합니다
reload빈 상태에서 등록된 함수를 순서대로 다시 돌립니다

OpenCode는 스킬, 명령, 에이전트, 도구, MCP 서버, 코드 포매터 등록부를 전부 이 틀로 만들었습니다. v2.0.18 저장소의 packages/core/src/state.ts에서도 같은 구조를 확인할 수 있어요.

파일 감시도 내장 플러그인이 맡습니다. 새 플러그인 파일이 생기면 OpenCode가 바로 실행하고, 파일을 지우면 그 플러그인이 등록한 함수를 걷어 냅니다. 파일을 고치면 지웠다가 새로 실행한 것처럼 처리해요.

팀은 OpenCode 2를 이미 다른 이름으로 배포하고 있습니다

팀은 아직 공식 발표를 하지 않았습니다. 같은 사이트에 「OpenCode 2.0」이라는 글 주소만 만들어 두고 본문은 비워 뒀어요.

그래도 지금 바로 설치할 수 있습니다.

패키지최신 버전비고
@opencode/cli2.0.18공식. 설치하면 opencode와 opencode2 명령이 생김
opencode-ai1.18.32기존 공식 패키지. 아직 1.x
opencode2비공식제3자 재포장본. 이름만 비슷함

팀은 9월 11일 2.0.0을 올린 뒤 2주 만에 열여덟 번 더 배포했습니다. 설치 전에 패키지 이름부터 확인하세요. 제3자가 공식 명령과 똑같은 opencode2라는 이름으로 npm에 재포장본을 올려 뒀거든요.

OpenCode 팀은 올해 막힐 때마다 다른 길을 열었습니다

1월 초 DHH는 자기 리눅스 배포판 오마키(Omarchy)에 OpenCode를 기본 탑재했습니다. 며칠 뒤 사용자들이 "클로드 Max 연결이 끊겼다"는 이슈를 열었고, 댓글을 386개나 달았어요. 개발자 댁스 라드는 그 이슈에 "OpenCode만 콕 집어 막았을 수도 있다"고 적었습니다.

팀은 다른 길을 바로 열었습니다. 다음 날 챗GPT 요금제로 로그인하는 기능을 넣었고, 1월 중순 깃허브는 코파일럿에서 OpenCode를 공식 지원한다고 알렸어요. 3월에는 댁스가 "앤트로픽의 법적 요청"이라는 제목으로 앤트로픽 관련 코드를 걷어 냈습니다.

개발자들은 지금까지 OpenCode 저장소에 별을 21만 개 눌렀습니다. 홈페이지에는 한 달에 1,600만 명의 개발자가 쓴다고 적어 뒀어요. 팀이 직접 집계한 숫자입니다.

터미널 화면에서는 아직 속이 터집니다

제가 써 보니 팀이 OpenCode를 확실히 많이 다듬었더라고요. 그래도 터미널 화면으로 쓰면 여전히 답답해요. 저장소 이슈를 보면 그 답답함을 저만 느끼지는 않습니다.

  • 팀은 새 버전으로 옮길 때 터미널 설정을 따로 빼 두고 안 읽는 버그를 아직 못 고쳤습니다(#50842).
  • 플러그인은 1.x에서 터미널 화면에 알림을 띄웠지만, 2.0에서는 아직 못 띄웁니다(#50984).
  • 사용자들은 플러그인 관련 충돌도 여러 건 신고했어요.
  • 긴 글을 붙여 넣으면 키 한 번 누를 때마다 수십 밀리초씩 밀리는데, 팀은 이것도 아직 못 고쳤습니다(#49635).

저장소에서 제목이나 본문에 "TUI"가 들어간 새 이슈를 2주 단위로 집계해 보면, 2.0 배포 전 두 구간(8월 13일부터 26일, 8월 27일부터 9월 10일)과 배포 후 구간(9월 11일부터 26일) 모두 전체 새 이슈의 22-24%였습니다. 팀은 2.0으로 터미널 불편을 더 키우지는 않았지만, 줄이지도 못했어요.

남는 생각

OpenCode 팀은 에이전트가 자기 환경을 스스로 고치는 쪽으로 방향을 잡았습니다. 플러그인에게 목록을 직접 고치지 말고 바꾸는 함수만 등록하게 한 뒤, 빈 상태에서 매번 다시 돌립니다. 플러그인을 직접 만드는 분이라면 이 설계 하나만 가져가도 순서 버그를 크게 줄일 수 있습니다.

저는 당분간 두 가지를 나눠 쓰려고 합니다. 에이전트에게 도구를 만들어 쓰게 하는 실험은 OpenCode 2로 하고, 매일 붙잡고 일하는 터미널 작업은 화면 버그가 정리될 때까지 지켜보겠습니다.


원문·소스

FAQ

자주 묻는 질문

OpenCode 2의 핫 리로드는 무엇인가요?
설정, MCP 서버, 플러그인, 스킬, 도구를 대화 도중에 바꿔도 재시작이나 /reload 없이 모든 세션에 바로 반영하는 기능입니다. 에이전트가 도구를 직접 만들고 같은 턴에 바로 호출할 수도 있어요.
설정을 바꾸면 프롬프트 캐시가 깨지지 않나요?
OpenCode 팀은 캐시를 깨지 않고 다시 불러온다고 설명합니다. 다만 새 버전에서 캐시 적중률을 따로 측정해 공개한 자료는 아직 찾지 못했어요.
OpenCode 2는 어떻게 설치하나요?
팀은 정식 발표 전인데도 공식 npm 패키지 @opencode/cli로 2.0 버전을 배포하고 있습니다. 설치하면 opencode와 opencode2 두 명령을 쓸 수 있어요. 기존 opencode-ai는 아직 1.18 버전이고, npm의 opencode2 패키지는 제3자가 올린 비공식 재포장본이니 조심하세요.
OpenCode 2의 터미널 화면(TUI)은 좋아졌나요?
팀은 내부 설계를 크게 바꿨지만 터미널 화면 버그는 아직 많이 못 고쳤습니다. 새 버전으로 옮길 때 설정을 빠뜨리는 버그, 플러그인 관련 충돌, 긴 입력에서 생기는 지연이 대표적이에요.
원고, 봉투, 책자가 오렌지 리본 하나로 이어진 모습

SEASON 3

시즌3 「콘텐츠로 팔기」

AI와 콘텐츠를 만들고 고객에게 연결하는 4주

제가 에이전트로 조사하고 쓰고 파는 과정을 그대로 보여 드려요. 그다음 각자의 주제로 같이 만들어 봐요.

10월 2일 OT · 10월 5일부터 월·수 4주 · 10월 31일 오프라인

시즌3 커리큘럼 보기