TRENDSHIFT 딥다이브 · 2026-06-10

goose 딥다이브
— Rust로 만든 "어디서든 도는" 범용 AI 에이전트

goose는 내 컴퓨터에서 직접 도는 오픈소스 범용 AI 에이전트입니다. 데스크탑 앱·CLI·HTTP 서버라는 세 가지 얼굴을 모두 갖췄고, 코어는 Rust(64%), 데스크탑 UI는 TypeScript/React(29%)로 짜였습니다. 원래 결제 회사 Block(스퀘어)이 만들었지만 지금은 Linux Foundation 산하 AAIF(Agentic AI Foundation)로 이관된 중립 프로젝트입니다. 60개가 넘는 LLM 연결 방법과 MCP 확장 시스템, 그리고 "에이전트 설정을 통째로 공유하는" recipe 시스템이 코드 곳곳에 살아 있습니다. (저장소: aaif-goose/goose · Rust+TypeScript · ⭐45.2k · Apache-2.0 · v1.37.0 기준)
읽기 전에 · 동명이인 주의

이 인덱스에는 이름이 같은 goose가 둘 있습니다. 이 문서는 45.2k★ AI 에이전트 goose(aaif-goose/goose)를 다룹니다. WHOOP 5.0 밴드용 건강 앱인 b-nnett/goose는 별도 문서(goose-deep-dive.html)에서 다뤘습니다. 깃허브에서 레포 이름은 얼마든지 겹칠 수 있으니, 항상 owner/repo 풀네임으로 확인하는 습관이 좋습니다.

목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

한 문장으로 — 이게 뭐 하는 물건인가

"클라우드가 아니라 내 컴퓨터에서 직접 돌면서, 코드 작성부터 자료 조사·문서 작업·자동화까지 시켜먹을 수 있는 오픈소스 AI 에이전트"입니다. AI 에이전트란 단순히 질문에 답하는 챗봇이 아니라, 파일을 읽고·명령을 실행하고·도구를 골라 쓰면서 여러 단계의 작업을 스스로 진행하는 프로그램을 말합니다. goose는 그 에이전트를 macOS·Linux·Windows용 데스크탑 앱, 터미널 CLI, 그리고 어디에든 심을 수 있는 API 서버, 세 형태로 제공합니다.

가장 큰 특징은 "특정 회사에 묶이지 않는다"는 점입니다. Anthropic·OpenAI·Google·Ollama 등 15개 이상의 프로바이더를 API 키로 붙일 수 있고, 심지어 이미 결제 중인 Claude·ChatGPT·Gemini 구독을 ACP라는 프로토콜로 끌어와 쓸 수도 있습니다. 2026년 Block에서 Linux Foundation 산하 AAIF로 이관되면서 "한 회사의 제품"이 아니라 공공 인프라 성격의 에이전트 플랫폼으로 자리를 굳히는 중입니다.

핵심 비유

"아무 통신사 유심이나 꽂아 쓰는 자급제 폰" — 두뇌(LLM)를 갈아끼우는 에이전트 본체

통신사 약정폰은 그 통신사에서만 쓸 수 있지만, 자급제 폰은 아무 유심이나 꽂으면 됩니다. goose가 바로 자급제 폰입니다 — 본체(에이전트 루프·도구·UI)는 goose가 제공하고, 두뇌(LLM)는 Anthropic이든 OpenAI든 내 PC의 Ollama든 마음대로 꽂아 씁니다.

여기에 더해 "이미 쓰는 요금제(Claude·ChatGPT 구독)를 그대로 연결"하는 ACP까지 지원하니, 두뇌 선택의 자유가 이 프로젝트의 정체성입니다.

용어
AI 에이전트 (AI Agent)
LLM(거대 언어 모델)에 도구 사용 능력과 반복 실행 루프를 붙인 프로그램. "답변 생성"에서 멈추지 않고, 파일 읽기·셸 명령·웹 조회 같은 도구를 호출하고 그 결과를 보고 다음 행동을 정하는 과정을 목표 달성까지 반복한다.
용어
MCP (Model Context Protocol)
에이전트와 외부 도구(파일시스템·DB·서비스)를 연결하는 표준 규격. "도구계의 USB 규격"이라 생각하면 된다. goose는 MCP 표준 덕분에 70개 이상의 확장(extension)을 꽂아 쓸 수 있고, 공식 Rust SDK인 rmcp로 구현했다.
용어
ACP (Agent Client Protocol)
에이전트끼리, 또는 에디터와 에이전트가 서로 대화하는 표준 프로토콜. goose는 ACP 서버도 되고(다른 도구가 goose를 부려먹기), ACP 클라이언트도 된다(goose가 Claude Code·Codex 같은 외부 에이전트를 "프로바이더"처럼 흡수). 구독 재사용의 비밀이 바로 이것.

2왜 주목받는가

트렌딩 이유 · 비슷한 도구 대비 위치

goose가 다시 트렌딩에 오른 직접적 계기는 Linux Foundation 산하 AAIF(Agentic AI Foundation)로의 이관입니다. README 첫 줄에 "block/goose에서 이사했다"는 공지가 붙어 있을 만큼 최근 일입니다. 한 기업(Block)의 사이드 프로젝트에서 쿠버네티스처럼 재단이 관리하는 중립 오픈소스로 격이 바뀐 것인데, 기업 입장에선 "벤더 종속 없이 도입할 수 있는 에이전트"라는 신뢰 신호가 됩니다.

두 번째 이유는 구독 재사용(ACP)입니다. 에이전트를 쓰려면 보통 API 키를 새로 발급받아 토큰당 비용을 내야 하는데, goose는 이미 결제 중인 Claude·ChatGPT·Gemini 구독을 ACP로 연결해 쓰는 길을 열었습니다. 개인 개발자에게는 추가 비용 0원으로 데스크탑 에이전트를 들이는 매력적인 선택지입니다.

비슷한 도구와의 위치

도구성격goose와의 차이
Claude CodeAnthropic의 코딩 CLI 에이전트Claude 전용·터미널 중심. goose는 멀티 프로바이더 + 데스크탑 앱이 기본
OpenHands오픈소스 코딩 에이전트(웹 UI)코딩 작업 특화. goose는 코딩 외 리서치·문서·자동화까지 범용 지향
goose로컬 우선 범용 에이전트데스크탑+CLI+API 서버 3면 제공, Rust 코어, 재단(AAIF) 거버넌스
함정
"에이전트 = 코딩 도구"라고만 생각하면 절반을 놓친다

코딩 에이전트 경쟁이 워낙 뜨겁다 보니 goose도 "또 하나의 코딩 CLI"로 오해받기 쉽다. 하지만 goose의 공식 소개 첫 문장은 "Not just for code"다. 스케줄러(예약 실행), recipe(작업 패키지), 메모리·튜토리얼 같은 내장 확장 구성을 보면 일상 업무 자동화 플랫폼을 목표로 설계됐음이 드러난다.

해결
"로컬에서 도는 범용 비서 + 두뇌 교체 자유"로 읽어야 구조가 보인다

이 관점으로 보면 왜 데스크탑 앱(Electron)에 공을 들이는지, 왜 프로바이더가 60개를 넘는지, 왜 recipe로 "에이전트 구성 공유"를 만들었는지가 한 줄로 꿰어진다. 비개발자 동료에게 "이 recipe 딥링크 눌러" 하고 건네는 시나리오까지 포함한 설계다.

3기술 스택 전체 지도

Rust 코어 · TypeScript UI · 빌드 인프라를 각각 뜯어본다

goose는 "성능이 필요한 코어는 Rust, 화면은 웹 기술"이라는 요즘 데스크탑 앱의 정석 분업을 따릅니다. 다만 Tauri가 아니라 Electron을 쓰고, Rust 코어를 라이브러리로 링크하는 대신 goosed라는 별도 서버 프로세스로 띄워 HTTP로 통신한다는 점이 독특합니다(4장에서 자세히).

Rust 워크스페이스 (crates 10개 + vendored V8)

crate역할
goose코어. 에이전트 루프·세션·프로바이더·recipe·ACP·스케줄러 (.rs 295개로 전체의 67%)
goose-cli터미널 명령 goose — session/run/recipe/schedule/acp/mcp/tui 등 서브커맨드
goose-serverHTTP API 서버 goosed — axum 기반, 데스크탑 앱의 백엔드
goose-mcp내장 MCP 서버 모음 (memory·tutorial·computercontroller 등)
goose-providers프로바이더 공통 타입(대화 포맷·에러)
goose-sdk(+types)Rust SDK — uniffi로 Python/Kotlin 바인딩 생성 가능
vendor/v8V8 자바스크립트 엔진 래퍼 — LLM이 만든 코드를 샌드박스에서 실행하는 용도

Rust 주요 의존성 (workspace 기준, 버전은 v1.37.0 시점)

크레이트버전쓰임
tokio1.48비동기 런타임 — 에이전트 루프·스트리밍의 토대
axum0.8goosed HTTP 서버 프레임워크
rmcp1.4MCP 공식 Rust SDK — 확장 연결
agent-client-protocol0.11ACP — 외부 에이전트/에디터와의 표준 대화
sqlx (sqlite)0.8.5세션 영속화 — SQLite WAL 모드
utoipa4.2OpenAPI 스펙 자동 생성 → UI 클라이언트 코드젠의 출발점
candle-core/nn0.10로컬 ML 추론 (HuggingFace의 Rust ML 프레임워크)
tree-sitter 계열코드 구조 분석 확장(analyze) — 언어별 파서
keyring3.6.3API 키를 OS 키체인에 안전 보관
reqwest / rustls0.13 / 0.23HTTP 클라이언트 · TLS

데스크탑 UI 스택 (ui/desktop)

기술버전역할
Electron41데스크탑 셸 (Tauri 아님 — Chromium 내장)
React19.2UI 컴포넌트
Vite + TypeScript7.3 / 5.9빌드·타입 체크
Tailwind CSS + Radix UI4.2스타일·접근성 컴포넌트
@hey-api/openapi-tsgoosed의 OpenAPI 스펙에서 API 클라이언트 자동 생성
vitest + Playwright4 / 1.58단위·E2E 테스트

빌드 인프라

도구내용
Justfile태스크 러너 — just run-ui(데스크탑 개발), just run-server(goosed), just release-binary
Nix flakeflake.nix + rust-overlay — 재현 가능한 개발 환경
Dockerfile멀티스테이지: rust 빌더 → debian-slim 런타임(digest 고정)
pnpm workspaceui/ 아래 sdk·desktop 등 4패키지 모노레포
설계 포인트
서버가 OpenAPI를 "발행"하고, UI는 그걸 "받아쓰기"한다

goosed는 utoipa로 자기 API의 OpenAPI 명세를 자동 생성하고, 데스크탑 앱은 @hey-api/openapi-ts로 그 명세에서 TypeScript 클라이언트를 생성한다(generate-api 스크립트). Rust와 TypeScript라는 다른 언어 사이에서 API 타입이 어긋날 수 없는 구조를 만든 것 — 프론트·백엔드 분리 프로젝트라면 어디든 훔쳐올 만한 패턴이다.

4아키텍처 심화 분석

세 개의 얼굴, 하나의 코어 — 그리고 메시지 한 통의 여행

먼저 독수리 시점입니다. goose의 큰 그림은 "하나의 Rust 코어(goose crate)를 세 가지 껍데기가 둘러싼 구조"입니다. CLI는 코어를 직접 부르고, 데스크탑 앱은 goosed 서버를 자식 프로세스로 띄워 HTTP로 이야기합니다.

[사용자] | +---------------------------+ | 클릭/입력 | Electron 데스크탑 앱 | +--------------▶ | (React 19 / ui/desktop) | | | goosed.ts가 자식 프로세스 | | | 로 goosed를 spawn ★ | | +------------|--------------+ | | HTTP + SSE 스트리밍 | v | +---------------------------+ | 터미널 | goosed (goose-server) | +--------------▶ | axum 라우트 20종 이상: | | goose CLI | reply·session·recipe· | | (goose-cli) | schedule·agent ... | | +------------|--------------+ | | 함수 호출 v v +=====================================================+ | goose 코어 crate (agents/agent.rs 중심) | | Agent::reply() → 멀티턴 루프 (try_stream!) | | ├─ Provider.stream() ← 두뇌 호출 (60+ 종) | | ├─ ExtensionManager ← MCP 도구 실행 (rmcp) | | ├─ context_mgmt ← 컨텍스트 압축(compaction)| | └─ session (sqlx+SQLite WAL) ← 대화 영속화 | +=====================================================+ | | | v v v [LLM API들] [MCP 확장 서버들] [ACP 외부 에이전트] Anthropic·OpenAI stdio/HTTP/내장… Claude Code·Codex…

흐름 한 줄기 따라가기 — "데스크탑에서 메시지를 보내면"

부품 이름만 외우면 금방 길을 잃으니, 대표 흐름 하나를 입구부터 출구까지 따라가 봅니다. 해피패스(정상 경로)만 봅니다 — 에러 처리·재시도는 생략.

# 메시지 한 통의 여행 (해피패스)
1. 입력      → Electron UI에서 메시지 전송
2. HTTP      → goosed의 routes/reply.rs 가 받음
3. 루프 시작 → 코어 Agent::reply() 호출 → AgentEvent 스트림 반환
4. 두뇌      → Provider.stream() 으로 LLM에 메시지+도구 목록 전달
5. 도구?     → LLM이 "도구 쓰겠다" 하면 ExtensionManager가
              MCP로 해당 확장 실행 (진행 알림도 스트림에 합류)
6. 반복      → 도구 결과를 다시 4번으로 (max_turns 한도까지)
7. 출력      → 이벤트가 SSE(text/event-stream)로 UI에 실시간 전달
8. 저장      → 대화는 sqlx로 SQLite에 기록 (다음 세션에 복원)
비유

레스토랑으로 치면 Electron 앱은 홀, goosed는 주문 창구, 코어의 Agent는 주방장입니다. 주방장은 레시피(프롬프트)를 보고 → 필요한 재료를 창고(MCP 도구)에서 가져오고 → 맛을 보고 부족하면 다시 가져오기를 반복한 뒤 → 접시가 완성되는 과정을 실시간 중계(SSE)로 홀에 흘려보냅니다. 손님은 요리가 끝날 때까지 깜깜이로 기다리지 않아도 됩니다.

핵심 설계 패턴 ① — 스트리밍이 기본, 일괄 응답은 특수 케이스

프로바이더 추상화(providers/base.rs)의 trait를 보면 필수 메서드는 stream() 하나뿐이고, 한 번에 다 받는 complete()스트림을 끝까지 모아서 만드는 디폴트 구현입니다. "스트리밍을 나중에 덧붙이는" 흔한 설계를 뒤집은 것으로, LLM 시대 API 설계의 모범 답안입니다.

// crates/goose/src/providers/base.rs (개념 발췌)
trait Provider {
    async fn stream(&self, ...) -> Result<MessageStream, ProviderError>;  // 필수
    async fn complete(&self, ...) -> ... {
        collect_stream(self.stream(...)).await   // 디폴트: 스트림을 모아서 반환
    }
}

핵심 설계 패턴 ② — 프로바이더 60+종을 감당하는 2단 등록

프로바이더는 두 방식으로 등록됩니다. Anthropic·OpenAI처럼 로직이 필요한 34종은 providers/init.rs에서 registry.register::<T>()타입 등록하고, groq·deepseek·mistral처럼 OpenAI 호환 API면 providers/declarative/JSON 파일 하나만 두면 끝(29종)입니다. 코드를 안 짜고도 프로바이더를 추가하는 길을 따로 닦아둔 것 — 플러그인 시스템 설계에서 배울 만한 "쉬운 길/어려운 길" 이원화입니다.

핵심 설계 패턴 ③ — Electron + Rust 사이드카

데스크탑 앱이 Rust 코어를 쓰는 방법으로 goose는 FFI(언어 간 직접 호출)가 아니라 사이드카(sidecar)를 골랐습니다. ui/desktop/src/goosed.ts가 goosed 실행 파일을 자식 프로세스로 띄우고 HTTP로 대화합니다. 결합도가 낮아져 같은 goosed에 CLI·웹·외부 도구도 붙을 수 있고, 원격 goosed에 접속하는 옵션까지 자연스럽게 열립니다.

핵심 설계 패턴 ④ — LLM이 쓴 코드는 V8 샌드박스에 가둔다

에이전트가 생성한 코드를 그냥 셸에서 돌리면 위험합니다. goose는 vendor/v8로 V8 엔진을 직접 묶고(deno_core 경유), platform_extensions/code_execution.rs의 "코드 모드"에서 격리된 자바스크립트 샌드박스 안에 LLM 생성 코드를 가둬 실행합니다. 보안과 기능을 맞바꾸지 않으려는 의지가 빌드 비용(V8 vendoring)을 감수하게 한 사례입니다.

5디렉토리 구조 해부

어디에 무엇이 있나 — 모노레포 한 바퀴
goose/ # Cargo workspace + pnpm workspace 모노레포 ├── Cargo.toml # members = ["crates/*", "vendor/v8"] ├── Justfile # 개발 태스크 모음 ★ 여기부터 읽기 ├── rust-toolchain.toml # Rust 1.92 고정 ├── flake.nix / Dockerfile # Nix 환경 · 컨테이너 빌드 ├── crates/ │ ├── goose/ # ▼ 코어 (전체 Rust의 2/3) ★★ │ │ └── src/ │ │ ├── agents/ # agent.rs(루프)·extension_manager.rs(MCP) ★★ │ │ ├── providers/ # base.rs(trait)·init.rs(등록)·declarative/ ★ │ │ ├── session/ # SQLite 세션 영속화 │ │ ├── recipe/ # 에이전트 구성 패키징·공유 │ │ ├── acp/ # goose를 ACP 서버로 노출 │ │ └── context_mgmt/ # 컨텍스트 압축(compaction) │ ├── goose-cli/ # 터미널 명령 `goose` │ ├── goose-server/ # `goosed` — axum routes/ 20종 이상 │ └── goose-mcp/ # 내장 MCP 서버들 ├── ui/ # pnpm workspace │ └── desktop/ # Electron 앱 (goosed.ts가 사이드카 spawn) ★ ├── vendor/v8/ # V8 엔진 vendoring (코드 샌드박스용) ├── documentation/ # Docusaurus 공식 문서 └── workflow_recipes/ # recipe 실전 예제 모음

코드 탐색 출발점 3곳

파일왜 여기부터
Justfile빌드·실행 명령이 다 모여 있어 프로젝트의 "조작 패널"을 한눈에 파악
crates/goose/src/agents/agent.rs에이전트 루프의 심장. reply()부터 읽으면 전체 흐름이 보임
crates/goose/src/providers/base.rsProvider trait — "두뇌 교체 자유"가 코드로 어떻게 구현되는지
탐색 팁
이 레포에서 "정상"인 모양새

goose 코어는 도메인별 폴더 + mod.rs 컨벤션을 따른다. 폴더 이름이 곧 기능(agents·providers·session·recipe)이고, 큰 파일이 꽤 있다(agent.rs 3,400줄·extension_manager.rs 2,900줄). Rust 프로젝트에서 "파일이 크다 = 나쁘다"가 아니라 관련 로직을 한 모듈에 모으는 스타일도 흔하다는 걸 보여주는 사례다.

6학습 포인트 (기술별)

각 기술에서 무엇을 배울 수 있나 + 실습 아이디어

① Rust 워크스페이스로 큰 프로젝트 쪼개기

crate 10개가 "코어 라이브러리 / CLI / 서버 / SDK"로 책임을 나눠 갖고, 의존성 버전은 루트의 [workspace.dependencies] 한 곳에서 관리됩니다. 실습: 작은 Rust 프로젝트를 lib + cli + server 3-crate 워크스페이스로 쪼개고, 공통 의존성을 workspace로 끌어올려 보기.

② trait 기반 추상화 — "두뇌 교체"의 코드화

Provider trait 하나로 60개 넘는 LLM 서비스를 갈아끼우는 구조는 전략 패턴(Strategy Pattern)의 대규모 실전 사례입니다. 실습: "텍스트 요약기" trait를 정의하고 OpenAI 호환 API용 구현과 로컬 더미 구현 두 개를 만들어, 런타임에 골라 쓰는 미니 레지스트리 작성하기.

③ MCP/ACP — 에이전트 생태계의 두 표준

goose는 MCP(도구 연결)와 ACP(에이전트 간 대화)를 모두 1급으로 구현한 드문 레포입니다. 특히 ExtensionConfig enum이 stdio·HTTP 스트리밍·내장·인라인 파이썬 등 7가지 연결 방식을 하나의 타입으로 다루는 부분이 교재감입니다. 실습: rmcp(Rust)나 공식 Python SDK로 "오늘 날씨를 알려주는" MCP 서버를 만들어 goose에 stdio 확장으로 연결해 보기.

④ Electron + 사이드카 — 웹 UI와 네이티브 코어의 동거

FFI 대신 자식 프로세스 + HTTP를 택한 trade-off(결합도↓ vs 프로세스 관리 비용↑)를 ui/desktop/src/goosed.ts에서 직접 확인할 수 있습니다. 실습: 아무 언어로 짠 로컬 HTTP 서버를 Electron(또는 Tauri)에서 spawn하고, 종료 시 자식 프로세스를 깨끗이 정리하는 수명주기 코드 작성하기.

⑤ OpenAPI 계약 기반 풀스택 — 타입이 어긋날 수 없는 구조

Rust(utoipa) → OpenAPI → TypeScript(@hey-api/openapi-ts)로 이어지는 단일 진실원 파이프라인은 어떤 풀스택 프로젝트에도 이식 가능한 패턴입니다. 실습: FastAPI나 axum+utoipa로 작은 API를 만들고, 그 OpenAPI 스펙에서 프론트엔드 클라이언트를 자동 생성해 수동 fetch 코드와 비교하기.

7시스템 요구사항

그냥 쓸 때는 가볍게, 빌드할 때는 묵직하게
항목요구사항
그냥 쓰기macOS · Linux · Windows용 데스크탑 앱 설치(권장), 또는 CLI 설치 스크립트
LLM 연결프로바이더 API 키 1개 이상, 로컬이면 Ollama, 또는 Claude/ChatGPT/Gemini 구독(ACP)
소스 빌드 — Rustrust-toolchain.toml 기준 Rust 1.92 (workspace 최소 1.91.1)
소스 빌드 — UINode 24.10+ · pnpm 10.30+ (ui/desktop engines 기준)
빌드 체감V8 vendoring 때문에 첫 빌드가 무겁다 — 시간·디스크 여유 필요. Nix flake로 환경 재현 가능
데이터 저장세션은 로컬 SQLite(WAL), API 키는 OS 키체인(keyring)
함정
에이전트에게 셸을 쥐여준다는 것의 의미

goose의 developer 확장은 파일 편집·셸 실행 도구를 제공한다. 즉 LLM의 판단으로 내 컴퓨터에서 명령이 실행될 수 있다. 권한 설정(permission 모듈)과 도구 확인(confirmation) 기능을 끄지 말고, 중요한 작업 폴더는 git으로 보호한 상태에서 쓰는 습관이 안전하다.

# 가장 빠른 시작 — CLI 설치 (macOS/Linux)
curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash

# 소스로 개발해 보고 싶다면
git clone --depth 1 https://github.com/aaif-goose/goose
cd goose
just run-server     # goosed 서버 띄우기
just run-ui         # Electron 데스크탑 개발 모드 (pnpm 필요)

8직접 해볼 수 있는 실습 과제

난이도별 — 사용 → 코드 읽기 → 재구현 순서로
난이도 ★☆☆ 입문

데스크탑 앱으로 첫 에이전트 작업 돌려보기

데스크탑 앱을 설치하고 프로바이더 하나를 연결한 뒤, "이 폴더의 파일들을 정리해 README 초안을 써줘" 같은 멀티스텝 작업을 시켜 본다. 에이전트가 도구를 고르고 반복하는 과정을 화면에서 관찰하며 4장의 흐름도와 대조하기.

난이도 ★☆☆ 입문

recipe 해부하기

workflow_recipes/의 YAML 레시피 하나를 열어 instructions·extensions·파라미터가 어떻게 선언되는지 분석하고, 내 업무 하나(예: 주간 보고 초안)를 recipe로 작성해 goose recipe validate로 검증해 본다.

난이도 ★★☆ 중급

나만의 MCP 확장 연결

Python 공식 MCP SDK로 도구 1개짜리 MCP 서버(예: 사내 위키 검색 흉내)를 만들고, goose에 stdio 확장으로 등록해 에이전트가 실제로 호출하게 만든다. 어떤 스키마를 줘야 LLM이 도구를 "잘 고르는지" 설명문을 다듬어 보기.

난이도 ★★☆ 중급

declarative 프로바이더 추가

crates/goose/src/providers/declarative/의 JSON 하나를 본떠, OpenAI 호환 API를 제공하는 다른 서비스(또는 로컬 vLLM)를 코드 수정 없이 JSON만으로 등록해 본다. "쉬운 확장 경로"가 어떻게 설계됐는지 체감하는 과제.

난이도 ★★★ 고급

Agent::reply() 루프 정독·도식화

agents/agent.rsreply()reply_internal()을 읽고, max_turns·컨텍스트 압축·도구 호출 분기를 포함한 상태 다이어그램을 직접 그린다. tokio::select!로 알림과 결과를 한 스트림에 합치는 tool_stream()까지 따라가면 비동기 Rust 실전 독해 완성.

난이도 ★★★ 고급

미니 에이전트 루프 재구현

아무 언어로 "LLM 호출 → 도구 호출 파싱 → 실행 → 결과 재투입"을 도는 100줄짜리 에이전트 루프를 짜 본다. goose가 왜 스트리밍 우선 trait·이벤트 enum·세션 영속화를 뒀는지, 직접 만들며 결핍으로 배우는 과제.

9관련 기술 심화 학습 로드맵

주차별 — 이 레포를 발판으로 더 멀리
주차학습 주제실천 목표
1주차에이전트 개념·goose 사용데스크탑+CLI 설치, 프로바이더 연결, 멀티스텝 작업 5개 실행
2주차MCP 표준MCP 스펙 읽기, 도구 1개짜리 서버 제작·연결
3주차비동기 Rust 기초tokio·async-stream 튜토리얼, 작은 스트리밍 CLI 작성
4주차goose 코어 정독agent.rs·providers/base.rs·extension_manager.rs 독해·도식화
5주차axum 서버 패턴SSE 스트리밍 엔드포인트 + utoipa OpenAPI 생성 실습
6주차Electron 사이드카웹 UI + 네이티브 백엔드 프로세스 관리 미니앱
7주차ACP·에이전트 상호운용goose acp 모드 실험, 에디터(Zed 등)와 연결 구조 이해
8주차나만의 에이전트recipe+MCP 확장 조합으로 실제 업무 자동화 1건 완성

10핵심 키워드 사전

이 프로젝트에 등장하는 주요 용어
용어
goosed
goose-server crate가 만드는 HTTP 서버 실행 파일. 데스크탑 앱의 백엔드이자, 외부 시스템이 goose를 API로 쓰는 관문. 이름은 "goose daemon"의 줄임.
용어
MCP (Model Context Protocol)
에이전트와 도구를 잇는 표준 규격. goose는 rmcp(공식 Rust SDK)로 구현하며 stdio·HTTP 스트리밍·내장 등 7가지 연결 방식을 지원한다.
용어
ACP (Agent Client Protocol)
에이전트-클라이언트 간 표준 대화 프로토콜. goose는 ACP 서버(부려지기)와 클라이언트(Claude Code 등 외부 에이전트를 프로바이더로 흡수) 양방향을 모두 구현.
용어
프로바이더 (Provider)
LLM 연결 어댑터. trait 기반 정적 등록 34종 + JSON 선언형 29종. "두뇌 교체 자유"를 코드로 구현한 계층.
용어
recipe
프롬프트·확장·파라미터를 YAML/JSON 한 벌로 묶은 "에이전트 구성 패키지". 딥링크로 설치 공유가 가능해 비개발자에게 작업 자동화를 배포하는 통로가 된다.
용어
extension (확장)
goose에 도구를 더하는 단위(= MCP 서버). developer(셸·파일), memory, computercontroller 같은 내장 확장과 외부 MCP 서버 모두 포함.
용어
compaction (컨텍스트 압축)
대화가 길어져 LLM 컨텍스트 한도에 가까워지면 과거 내용을 요약해 줄이는 기법. context_mgmt 모듈이 담당하며, 긴 에이전트 세션의 생존 비결.
용어
사이드카 (Sidecar)
메인 앱 옆에 보조 프로세스를 별도로 띄워 협력시키는 구조. Electron 앱이 goosed를 spawn해 HTTP로 통신하는 방식이 전형적 예.
용어
SSE (Server-Sent Events)
서버가 클라이언트로 텍스트 이벤트를 실시간으로 흘려보내는 HTTP 표준. goosed가 에이전트 진행 상황을 UI에 중계하는 수단.
용어
AAIF (Agentic AI Foundation)
Linux Foundation 산하의 에이전틱 AI 재단. goose가 Block에서 이관된 곳으로, 중립 거버넌스가 기업 도입의 심리적 장벽을 낮춘다.
용어
uniffi
Rust 코드에서 Python·Kotlin 등 다른 언어 바인딩을 자동 생성하는 Mozilla 도구. goose-sdk가 이를 옵션으로 지원해 타 언어에서 goose 코어를 재사용할 길을 연다.

11참고 링크

더 깊이 파고들 때
링크설명
GitHub 저장소소스 전체. Justfile·crates/goose/가 출발점
공식 Quickstart설치·첫 실행 가이드
ACP 프로바이더 가이드Claude/ChatGPT/Gemini 구독 연결 방법
AAIF (Agentic AI Foundation)goose가 속한 Linux Foundation 산하 재단
MCP 공식 사이트도구 연결 표준 스펙·SDK
GOVERNANCE.md재단 이관 후의 프로젝트 운영 구조
CUSTOM_DISTROS.md나만의 goose 배포판 만들기(프로바이더·브랜딩 프리셋)