godotz.ai 설계 철학
godotz.ai는 단순한 AI 프레임워크가 아닙니다. 자율 에이전트 플리트를 위한 인프라 하네스입니다. 이 철학은 모든 설계 결정의 기반이 됩니다.
1. Cattle, Not Pets (소가 아닌 가축)
핵심 개념
전통적인 서버 관리에서 비롯된 이 원칙은 godotz.ai에서 에이전트 노드에 적용됩니다.
- Pet(애완동물) 방식: 각 노드에 고유한 이름을 부여하고, 수동으로 설정하며, 장애 시 복구를 위해 노력
- Cattle(가축) 방식: 노드는 교체 가능하고, 선언적으로 정의되며, 장애 시 즉시 교체
godotz.ai의 구현
# 잘못된 방식 (Pet)
node:
name: "my-special-ai-server"
config: "/etc/omp/manual-config.conf"
# 올바른 방식 (Cattle)
fleet:
nodes:
- role: worker
count: 3
flake: "github:omp-team/omp-fleet#worker"
Nix flake를 통해 모든 노드는 동일한 선언적 정의에서 빌드됩니다. 노드 장애는 시스템이 자동으로 교체하는 이벤트일 뿐입니다.
적용 범위
- 에이전트 인스턴스: 특정 에이전트 프로세스에 의존하지 않음
- 모델 API 키: 가상 키 추상화로 개별 키에 종속되지 않음
- 메모리 저장소: Mnemopi는 어떤 노드에서도 동일한 인터페이스 제공
2. Fail-Closed (실패 시 폐쇄)
핵심 개념
기본값은 항상 거부입니다. 명시적으로 허용된 것만 허용됩니다.
“보안 시스템에서 불확실성의 올바른 기본값은 허용이 아닌 거부다.”
godotz.ai의 구현
보안 게이트 체인:
플러그인 실행 요청
↓
[plugin-eval] ← 정적 분석 + 서명 검증
↓ PASS
[mcp-scan] ← CVE 데이터베이스 확인
↓ PASS
[sandbox] ← 격리 환경에서 실행
↓ PASS
실제 실행
위 중 하나라도 FAIL → 즉시 종료, 에이전트 차단
Hardcore Mode
Hardcore 모드는 fail-closed를 최대로 강화합니다:
| 설정 | 기본 | Hardcore |
|---|---|---|
| 실패 시 동작 | 폴백 모델 시도 | 즉시 중단 |
| 미검증 플러그인 | 경고 후 허용 | 거부 |
| 예산 초과 | 경고 발행 | 즉시 차단 |
| 자기 수정 | 인간 승인 필요 | 인간 승인 + 2인 검토 |
omp:
hardcore: true # 모든 폴백 비활성화
3. Honest Reporting (정직한 보고)
핵심 개념
에이전트는 성공을 과장하거나 실패를 숨기지 않습니다. 모든 결과는 검증 가능한 증거와 함께 보고됩니다.
문제: AI Slop 패턴
많은 AI 시스템이 실제 작업 없이 완료를 선언하는 패턴을 보입니다:
❌ 잘못된 에이전트 보고:
"파일을 성공적으로 업데이트했습니다."
(실제로는 파일 경로조차 확인하지 않음)
✓ OMP 에이전트 보고:
"파일 업데이트 완료.
증거: src/config.ts:42 수정됨
검증: LSP 오류 0개, 테스트 3개 통과
명령어: bun test src/__tests__/config.test.ts → PASS"
구현
godotz.ai의 에이전트 출력 형식은 구조화된 보고를 요구합니다:
## Changes Made
- `file.ts:42-55`: [무엇을 왜 변경했는지]
## Verification
- Build: [command] → [pass/fail]
- Tests: [command] → [X passed, Y failed]
- Diagnostics: [N errors, M warnings]
## Summary
[실제로 달성한 것, 1-2문장]
Langfuse 추적
모든 에이전트 작업은 Langfuse에서 추적됩니다:
- 전체 프롬프트/응답 기록
- 도구 호출 시퀀스
- 토큰 소비 및 비용
- 성공/실패 근거
# 모든 에이전트 작업에 자동 추적
langfuse:
enabled: true
project: "omp-fleet"
trace_all_tools: true
4. Idempotency (멱등성)
핵심 개념
모든 godotz.ai 작업은 여러 번 실행해도 동일한 결과를 보장합니다.
“완료된 작업을 다시 실행하면 no-op이어야 한다.”
구현 계층
L5 — beads 태스크
# 동일 태스크를 두 번 실행해도 안전
bd run task-id-123 # 처음 실행: 작업 수행
bd run task-id-123 # 두 번째 실행: "이미 완료됨" 반환
L3 — Temporal 워크플로우
Temporal은 워크플로우 히스토리를 사용해 재실행 시 이전 결과를 재생합니다. 프로세스 재시작 후에도 상태가 완벽히 복원됩니다.
L6 — 메모리 작업
Mnemopi와 Knowledge Gardener는 upsert 의미론을 사용합니다:
# 동일한 키에 두 번 쓰기 — 마지막 값으로 업데이트, 중복 없음
memory.upsert(key="project/analysis", value=result)
L2 — 모델 게이트웨이 캐시
Redis 캐시는 동일한 프롬프트에 대한 두 번째 요청을 캐시 히트로 처리합니다:
프롬프트 해시 → Redis 확인
↓ HIT (40%+ 목표)
캐시된 응답 즉시 반환 (API 호출 없음, 비용 없음)
5. Heterogeneity (이종성)
핵심 개념
단일 모델 패밀리, 단일 OS, 단일 아키텍처에 종속되지 않습니다.
모델 이종성
| 역할 | 모델 패밀리 | 이유 |
|---|---|---|
| 오케스트레이터 | Antigravity (claude-opus-4-6) | 복잡한 추론, 고비용 |
| 실행자 | GLM (glm-5.1, glm-4.7) | 빠른 실행, 저비용 |
| 비평가 | Antigravity (claude-sonnet-4-6) | 오케스트레이터와 다른 가중치 |
| 비전 처리 | gemini-3.1-pro-low | 멀티모달 폴백 |
이것이 중요한 이유: ReConcile 논문(2024)은 이종 모델 패널이 동종 패널 대비 체계적 오류를 31% 줄임을 보였습니다.
OS 이종성
| 플랫폼 | 아키텍처 | 역할 |
|---|---|---|
| Ubuntu 22.04+ | x86_64 | 기본 워크스테이션 |
| Raspberry Pi OS | aarch64 | 엣지 노드 |
| macOS | aarch64-darwin | 개발자 머신 |
Nix flake는 systems 배열로 모든 플랫폼을 단일 정의에서 지원합니다.
관련 문서
- Anti-Patterns — 이 철학을 위반하는 패턴들
- Echo Chamber Prevention — 이종성 철학의 실제 적용
- Architecture Overview — L0-L6 계층 설계
- Hardcore Mode Guide — Fail-Closed 최대화