GEODE . 문서
GitHub
개요
레퍼런스

5-계층 스택

Model, Runtime, Harness, Agent, Self-Improving. 각 계층이 무엇을 맡고, 책임이 어디서 끝나는지 설명합니다.

The GEODE 5-layer stack: SELF-IMPROVING, AGENT, HARNESS, RUNTIME, MODEL, with the components each layer owns
5-계층 스택과 각 계층이 소유한 구성 요소.

왜 4가 아니라 5인가

GEODE는 오랫동안 4-계층(Model, Runtime, Harness, Agent)으로 서술됐습니다. 그런데 자기개선 코드는 그 어디에도 깔끔하게 들어가지 않았고, 문서 밖에 떠 있었습니다. 실제로 존재하고 별도의 책임을 갖는 계층이라면 다이어그램에도 있어야 합니다. 그래서 지금의 공식 스택은 5-계층입니다. 기존의 4-계층 서술은 모두 이 페이지로 대체됩니다.

진입점은 둘입니다. geode(Typer CLI, core/cli)와 geode-mcp(MCP 서버, core/mcp_server.py). 어느 쪽으로 들어와도 요청은 아래 계층들을 같은 순서로 지납니다. 흐름 관점의 추적은 작업 처리 흐름에 있고, 이 페이지는 경계 관점입니다.

MODEL. 외부 세계와 닿는 유일한 계층

모델 계층만 외부 네트워크를 호출합니다. 프로바이더 구현은 core/llm/providers/(anthropic, openai, codex, glm)에 있고, 결제 경로별 어댑터(PAYG, 구독 OAuth, CLI)는 core/llm/adapters/registry.py에 등록됩니다. 어떤 모델이 어떤 프로바이더로 가는지는 라우팅 매니페스트 (core/config/routing.toml)가 정하고, 호출 표면은 core/llm/router/가 통일합니다.

폴백 체인은 기본값이 비어 있습니다. 주 모델이 실패하면 자동으로 다른 프로바이더로 넘어가는 대신 정직하게 실패를 돌려주고, 사용자가 /model로 다음 모델을 고릅니다. 체인은 ~/.geode/routing.toml에서 옵트인으로 켭니다.

책임의 끝: 이 계층은 "모델을 호출한다"까지만 압니다. 언제, 어떤 도구와 함께, 어떤 컨텍스트로 호출할지는 위 계층의 일입니다.

RUNTIME. 능력의 창고

런타임 계층은 에이전트가 쓸 수 있는 능력을 보관하고 제공합니다. 네이티브 도구 정의와 레지스트리(core/tools/), 도구가 많을 때 일부만 미리 싣고 나머지는 검색으로 가져오는 deferred loading, 외부 MCP 서버 연결과 도구 발견(core/mcp/manager.py), 스킬(core/skills/), 5-계층 메모리 (core/memory/context.py, Identity부터 Session까지 아래 계층이 위를 덮어쓰는 병합), 리포트 생성이 여기에 삽니다.

책임의 끝: 런타임은 능력을 제공할 뿐, 호출 여부를 결정하지 않습니다. 도구를 언제 부를지는 모델이, 불러도 되는지는 하네스의 정책이 정합니다.

HARNESS. 규율과 관측

하네스 계층은 실행에 규율을 부과합니다. 동시성은 SessionLane과 LaneQueue(core/orchestration/lane_queue.py)가 맡습니다. 같은 세션 키의 요청은 직렬, 다른 키는 병렬입니다. 도구 접근 권한은 PolicyChain(core/tools/policy.py)이 프로파일부터 서브에이전트 위임까지 층층이 해석합니다. 서브 작업의 의존성 그래프는 TaskGraph (core/orchestration/task_system.py)가 추적하고, 라이프사이클 이벤트는 HookSystem(core/hooks/system.py) 이 발행해 핸들러가 관찰, 개입, 차단할 수 있게 합니다. 핸들러는 core/wiring/bootstrap.py에 등록되어야 실제로 발화합니다.

책임의 끝: 하네스는 무엇이 실행되는지에 관심이 없습니다. 어떤 순서로, 어떤 권한으로, 얼마나 관측 가능하게 실행되는지만 책임집니다.

AGENT. 결정하는 계층

에이전트 계층의 핵심은 단 하나의 primitive, while stop_reason == "tool_use"입니다. AgenticLoop(core/agent/loop/agent_loop.py)가 멀티턴 실행을 주도하고, 프롬프트 조립과 도구 실행과 오류 복구는 아래 계층에 위임합니다. 병렬 위임은 SubAgentManager (core/agent/sub_agent.py)가 맡고, 입구 두 갈래인 CLIPoller(core/server/ipc_server/poller.py)와 메신저 게이트웨이(core/messaging/binding.py)도 이 계층에서 요청을 루프에 연결합니다.

책임의 끝: 에이전트는 한 작업을 끝내는 데까지만 책임집니다. 작업을 처리하는 시스템 자체를 고치는 일은 다음 계층의 몫입니다.

SELF-IMPROVING. 시스템을 고치는 계층

맨 위 계층은 아래 네 계층 전체를 피험자로 다룹니다. 루프 드라이버는 core/self_improving/train.py입니다. 파일명은 Karpathy autoresearch의 3-파일 관습에서 빌린 것으로, 이 안에서 모델 훈련은 일어나지 않습니다. 갱신 대상은 모델이 아니라 모델을 감싼 스캐폴드, 곧 시스템 프롬프트 섹션과 behaviour kinds입니다.

메커니즘은 선택입니다. 스캐폴드를 변이하고, 적대적 안전 감사 (Petri)로 측정하고, fitness 스칼라를 margin 게이트에 통과시켜 이긴 변이만 승격하고 나머지는 되돌립니다. 측정과 판정 장비는 measure.py, fitness.py, gate.py, ledger.py에 있고, 런타임 쪽 배선은 core/self_improving/loop/의 mutate, observe, inject 경로가 맡습니다. 전체 루프는 Closed-Loop에서 다룹니다.

책임의 끝: 이 계층은 개별 작업의 답을 만들지 않습니다. 답을 만드는 시스템의 다음 버전을 고를 뿐입니다.

경계가 주는 것

계층 경계는 변경 비용의 지도입니다. 원칙적으로 각 계층은 위 계층을 건드리지 않고 교체할 수 있습니다.

하고 싶은 것닿는 계층위치
프로바이더 추가MODELcore/llm/providers/ + core/llm/adapters/registry.py
도구 추가RUNTIMEcore/tools/definitions.json + 핸들러
훅 핸들러 추가HARNESS핸들러 작성 + core/wiring/bootstrap.py 등록
루프 의미 변경AGENTcore/agent/loop/agent_loop.py. 드물고, 리뷰 게이트를 거칩니다.
변이 대상 추가SELF-IMPROVINGcore/self_improving/loop/mutate/

서브시스템 전체 목록은 시스템 색인, 두 루프의 관계는 두 개의 루프에서 이어집니다.