레퍼런스
레퍼런스
프론티어 비교
GEODE를 Hermes, OpenClaw, Claude Code, Codex CLI, Karpathy autoresearch와 나란히 놓습니다. 아키텍처부터 프롬프트 시스템 내부까지 비교합니다.
시스템 수준 포지셔닝
GEODE는 종합입니다. 아래 표의 각 행은 적어도 하나의 frontier 시스템에서 빌려온 패턴입니다. 소스에 명시적으로 인용된 것은 Claude Code의 while(tool_use), Codex CLI의 sandbox-default, OpenClaw의 Policy Chain과 Lane Queue, Karpathy P1-P10입니다.
| 축 | Claude Code | Codex CLI | OpenClaw | Hermes | autoresearch | GEODE |
|---|
| 목적 | Coding assist | Code automation | Multi-channel gateway | Self-learning agent | Autonomous ML loop | 장기 실행 자율 실행 |
| 도메인 | code | code | chat routing | open-domain | ML loop | 범용. 리서치, 분석, 자동화, 스케줄 |
| 주요 기본 단위 | while(tool_use) | sandbox + approve | gateway + lane | skill loop | branchless dumb platform | while(tool_use) AgenticLoop + LaneQueue |
| 계층 구조 | 단일 CLI | 단일 CLI | gateway 중심 | agent + skills | 3-파일 계약 | 5계층. Model / Runtime / Harness / Agent / Self-Improving |
| 메모리 | CLAUDE.md 계층 + auto memory (~/.claude) | AGENTS.md 계층 + memories 파이프라인 | 채널별 저장소 | persistent + skill 카탈로그 | program.md | 5-tier. Identity / User Profile / Org / Project / Session (core/memory/context.py) |
| 자기 검증 | 없음 | sandbox | policy chain | 없음 | ratchet | Petri 적대 감사 + margin 게이트 + 프롬프트 해시 ratchet |
| 자동화 트리거 | 훅 + scheduled cloud agents | lifecycle 훅 (cron 없음) | cron + standing order | skill auto-generate | overnight 루프 | 훅 이벤트 + 스케줄러 + auto-trigger 사이드카 |
| 멀티 LLM | Anthropic 모델 전용 (API/Bedrock/Vertex 백엔드) | OpenAI 중심 + model_providers 확장 (Bedrock 포함) | 9개 model API 계열 | Anthropic-centric | (single) | 3-프로바이더 라우팅 (Anthropic / OpenAI+Codex / GLM), PAYG·OAuth·CLI 어댑터 레인 |
| 서브에이전트 | Task tool | thread fork (spawn_subagent) | spawn + announce | delegate 병렬 spawn | 없음 | 차용. Task tool + OpenClaw Spawn+Announce (core/agent/sub_agent.py) |
| 샌드박스 | bash 샌드박스 (opt-in) | OS 수준 | gateway 격리 | 없음 | 제약 루프 | 6계층 PolicyChain (core/tools/policy.py) |
GEODE만의 조합
- 명시적 자기개선 계층. 다섯 번째 계층이 일곱 behaviour kinds의 스캐폴드를 변이하고, Petri 22-dim 감사와 margin 게이트로 선택하며, 계보를 git champion chain으로 보존합니다(
core/self_improving/). 가중치나 파라미터 갱신은 없습니다. 메커니즘은 선택입니다. - MCP 양방향.
core/mcp/가 외부 MCP 서버를 붙이는 클라이언트이고, geode-mcp(core/mcp_server.py)가 GEODE 자체를 외부 호스트의 도구로 노출하는 1급 서버입니다. Codex CLI도 양방향을 출하합니다(mcp-server + mcp_servers). 차이는 GEODE가 자기개선 루프 상태(self_improving_*)까지 도구로 노출한다는 점입니다. - 폴백 없는 기본값.
[model.fallbacks]의 기본값은 전부 빈 배열입니다. 프라이머리 실패는 조용한 교차-프로바이더 스왑 대신 정직한 오류로 표면화되고, 체인은 ~/.geode/routing.toml에서 opt-in합니다 (core/llm/router/calls/_failover.py). - ChatGPT Plus JWT 검증. OAuth 시점에 access token의
chatgpt_plan_type claim을 추출해 플랜 레코드에 임베드합니다(core/auth/oauth_login.py). 엔타이틀먼트 확인에 별도 API 호출이 없습니다.
프롬프트 정의 계층
| 축 | GEODE | Hermes | OpenClaw | Claude Code |
|---|
| 소스 위치 | core/llm/prompts/*.md (외부 markdown) | agent/prompt_builder.py (Python const) | src/agents/system-prompt.ts (TS const) | src/core/system-prompt.ts (TS 조립) |
| 빌드 시점 | 모듈 임포트 시 해시, 턴마다 조립 | 세션 시작 (캐시) | 호출별 모듈식 | 턴별 동적 |
| 사용자 메모리 | 5-tier ~/.geode/memory/ | Frozen JSON 스냅샷 | Workspace HEARTBEAT.md | CLAUDE.md 4계층 + auto MEMORY.md |
| 스킬 포맷 | XML <available_skills> (core/skills/skills.py, {skill_context} 치환) | XML <available_skills> | XML <available_skills> | SKILL.md markdown + JSON manifest |
해싱과 무결성
| 축 | GEODE | Hermes | OpenClaw | Claude Code |
|---|
| 알고리즘 | SHA-256[:12] | 없음 | SHA-256 (전체) | 없음 (소스에서 미확인) |
| 핀 / CI 게이트 | 예. _PINNED_HASHES + verify_prompt_integrity (core/llm/prompts/__init__.py) | 없음 | 탐지만 | 없음 |
| 정규화 | UTF-8 / json sort_keys | mtime + size manifest | CRLF strip + sort + lowercase | 해당 없음 |
프롬프트 캐싱
| 축 | GEODE | Hermes | OpenClaw | Claude Code |
|---|
| Anthropic ephemeral | 예. static/dynamic 경계 분할 | 예. system_and_3 | 예. 경계 마커 | 예 |
| 경계 마커 | PROMPT_CACHE_BOUNDARY = <dynamic_context> (core/agent/system_prompt.py) | 없음 | <!-- OPENCLAW_CACHE_BOUNDARY --> | SYSTEM_PROMPT_DYNAMIC_BOUNDARY |
| 메시지 히스토리 캐시 | 예. 최근 user 메시지 rolling breakpoint (apply_messages_cache_control, core/llm/providers/anthropic.py) | 예. 직전 3 | 예. 직전 user 메시지 | 예. 직전 user 블록 |
캐시 안정성의 나머지 반쪽은 시스템 리마인더 위치입니다. GEODE는 리마인더를 요청별 사본의 마지막 메시지로 append합니다 (core/agent/system_injection.py). 공유 히스토리를 건드리지 않아 prefix가 라운드 간 바이트 단위로 안정됩니다.
비동기 런타임 규율
2026-06-12 이벤트 루프 오염 사건(v0.99.183~185) 이후 워크스페이스 소스를 직접 실측한 비교입니다. 세 시스템의 수렴점은 하나입니다. 런타임에 일회용 이벤트 루프를 만들지 않는다. 루프에 귀속되는 자원(httpx 연결 풀)은 만든 루프 안에서만 쓴다.
| 축 | GEODE | Hermes | OpenClaw |
|---|
| 루프 토폴로지 | 다중 영속 루프. 메인 serve + CLI 포러 + 채널 포러별 (asyncio.Runner 스레드) | 단일 게이트웨이 루프. 채널 어댑터는 그 위의 async task (gateway/run.py) | Node 단일 루프 + lane 동시성 (command-queue.ts) |
| 스레드 → 루프 브리지 | run_coroutine_threadsafe. 웹훅 스레드가 메인 serve 루프로 마샬링 (core/cli/typer_serve.py) | run_coroutine_threadsafe. cron 스레드가 메인 루프로 마샬링 | 해당 없음. 단일 루프 |
| sync 브리지의 루프 | 일회용 0. 진짜 프로세스 경계만 asyncio.run, 위반은 run_process_coroutine 카나리아가 WARNING (core/async_runtime.py) | 영속 per-thread 루프 캐시. 일회용 금지 (model_tools.py _run_async) | 해당 없음 |
| SDK 클라이언트 스코프 | 루프별. LoopAffineClientCache가 루프를 약참조 키로 클라이언트를 분리 (core/llm/loop_affinity.py) | 생성 루프 귀속. 영속 루프와 수명을 같이함 | 전역. 단일 루프라 안전 |
| 행(hang) 방어 | 도구·MCP wall-clock deadline (asyncio.wait_for) + 시간상수 정합 부등식 가드 | 개별 도구 timeout | lane 동시성 한도 |
| 회귀 가드 | 25-테스트 가드레일 (핸들러 async 핀, 클라이언트 캐시 ratchet, deadline 정합) + 런타임 카나리아 | 없음 | 없음 |
GEODE만 다중 루프를 유지합니다. 채널별 스레드 격리는 설계 선택이고, 그 대가였던 루프 귀속 자원의 교차 공유 문제(도구 호출별 일회용 루프 × 전역 클라이언트 캐시가 만든 web_search 즉사·무한 행)는 v0.99.183~185에서 핸들러 async화, 루프별 클라이언트, deadline의 3겹으로 닫았습니다. 일회용 루프 잔재는 도구 경로, 웹훅, verify judge에서 전부 제거됐고 가드레일 테스트가 재발을 막습니다.
관측성
| 축 | GEODE | Hermes | OpenClaw | Claude Code |
|---|
| 주 채널 | PROMPT_ASSEMBLED 훅 payload (core/agent/loop/agent_loop.py) | 툴 라인 preview 로그 (가변 길이) | cache-trace.ts JSONL | logEvent('tengu_*') 텔레메트리 |
| 외부 트레이싱 | OTLP optional (core/observability/otel_export.py) | Langfuse 플러그인 | 자체 JSONL | 자체 텔레메트리 |
보안
| 축 | GEODE | Hermes | OpenClaw | Claude Code |
|---|
| 프롬프트 인젝션 스캔 | 없음 (열린 GAP) | 10 패턴 + invisible Unicode 10종 | 경로 / URL 정화 | 사용자 의도 신뢰 |
| 오버라이드 정책 | append-only (호출자 system_suffix) | append-only | append-only | 우선순위 체인 |
왜 GEODE만 ratchet으로 갈 수 있었나
GEODE의 프롬프트는 markdown 파일에 삽니다. Hermes, OpenClaw, Claude Code는 프롬프트를 TypeScript나 Python 소스의 인라인 문자열로 유지합니다. 인라인 문자열은 자동 포맷터, IDE 리네임, 머지 충돌 해소 과정에서 해시 기반 ratchet과 싸우게 됩니다. 외부 markdown은 파일을 변경 단위로 만들고, 그래서 해시가 의미를 갖습니다.
비용도 분명합니다. 의도된 프롬프트 변경마다 재핀 커밋 한 단계를 더 지불합니다. 그 대가로 의도하지 않은 변경이 출시되지 않는다는 CI 강제 보장을 얻습니다. 자세한 형태는 왜 ratchet 규율인가에 있습니다.