Comad World 가이드

loopy-era — Always-on Self-Evolution Harness

사용자가 명시적으로 "tick" 한 번 안 쳐도 시스템이 스스로 측정·학습·정리되도록 만든 3개 LaunchAgent 모음. 30분마다 점수 갱신, 2시간마다 메모리 그래프 동기화, 매일 새벽 한 번 깊은 정리(dream). 모든 결과가 Claude·Codex 양쪽에서 공유되며 메타 변경이력이 GitHub Pages에 라이브 게시됩니다.

always-on 3 LaunchAgents 15-phase tick zero deps

개요

loopy-era는 "진짜 자가진화하는 시스템"을 목표로 하는 하네스입니다. comad의 다른 모듈들(brain·ear·sleep·…)이 각자 역할을 수행한다면, loopy-era는 그 모듈들을 주기적으로 측정·갱신·통합하는 메타 레이어입니다.

사용자 개입 없이 다음이 자동으로 일어납니다:

정체성loopy-era는 코드(이 모듈)와 런타임(~/.comad/loopy-era/)을 명확히 분리한 첫 모듈입니다. 다른 모듈도 점진적으로 같은 패턴으로 정리될 예정.

3개 LaunchAgent

macOS launchd에 등록되는 백그라운드 데몬 3개. 사용자 머신이 켜져 있는 한 항상 돕니다.

Label주기실행 대상LLM
com.comad.loopy-era30분 (StartInterval 1800s)bin/supervisor.py tickphase 04만 사용
com.comad.kb-sleep2시간 (StartInterval 7200s)bin/kb-sleep-tick.py❌ 무사용 (rule-only)
com.comad.auto-dream매일 03:15 KST (Calendar)bin/auto-dream.sh✅ Claude (mutex 가드)

supervisor 15-phase

supervisor.py가 매 30분 깨어나서 다음 phase를 순서대로 실행합니다. 각 phase는 stdin으로 payload(loopy_dir, state, iteration)를 받고 stdout으로 JSON을 돌려줍니다.

PHASE_ORDER (loopy-era/bin/phases/):
01-init-project          # context bootstrap (project metadata)
02-qa-scenario-gen       # derive QA scenarios from current state
03-self-improve-trigger  # pick the highest-priority pending signal
04-self-improve-worker-initial  # LLM 호출 → kb_facts 자동 적재
05-verify-initial        # lightweight verification (qa-evidence count)
13-verify-final          # final state validation
15-closeout              # results.tsv +1 row + embed/consolidate kb_facts

phase 04와 15가 memory-bank 통합 지점. phase 04는 LLM이 distill한 패턴을 kb_facts에 직접 insert하고, phase 15는 cycle 끝에 embed.py+consolidate.py를 incremental 모드로 실행합니다.

kb-sleep tick (2시간)

메모리 본문 동기화 + 임베딩 + GitHub Pages 게시를 한 번에 처리하는 워커. destructive 작업 없음(rule-only consolidate, archive 등 본격 정리는 auto-dream 또는 사용자 명시 dream에 맡김).

kb-sleep-tick.py 의 흐름:
1. extract-facts.py 모든 ~/.claude/projects/*/memory/*.md → kb_facts (idempotent)
2. embed.py          새 fact만 incremental embedding (Ollama nomic-embed-text)
3. consolidate.py    SUPPORTS edge 추가 (rule-based, --apply 없음)
4. dream_pending check  임계 도달 시 sleep_state.dream_pending=true
5. publish           메타정보를 _posts/YYYY-MM-DD-mem-log.md 에 append
6. git push          stash → pull --rebase → add → commit → push

결과는 /memory-log/YYYY-MM-DD/에서 즉시 확인 가능. 본문은 비공개·메타 통계만.

auto-dream (매일 03:15 KST)

사용자가 "dream" 한 마디 안 해도 매일 새벽 한 번 임계 도달 여부를 체크합니다.

auto-dream.sh 의 결정 트리:
sleep_state.json.dream_pending == true ?
├─ NO  → exit 0   "no work to do"
└─ YES
   ├─ ~/.comad/active-bot.json 의 pid 가 살아있나? (mutex)
   │   ├─ YES → skip   ccd/cdx와 충돌 회피
   │   └─ NO
   └─ headless `claude -p --dangerously-skip-permissions "comad-sleep agent를 실행해 메모리를 정리해줘…"`
       → 15분 timeout, 결과 마지막 50줄을 logs/auto-dream.log 에 기록
왜 03:15? 대부분의 사용자가 잠들어 있어 ccd/cdx 활성 가능성이 가장 낮은 시점. mutex 가드까지 있어 충돌 시 자동 skip → 사용자 작업 절대 방해 안 함.

소스 vs 런타임 분리

loopy-era는 comad-world의 첫 "코드는 git, 상태는 런타임" 패턴 모듈.

위치역할git 추적
comad-world/loopy-era/bin/supervisor / phases / hooks / kb-sleep-tick / auto-dream
~/.comad/loopy-era/bin/위 디렉토리로 가는 symlink (호환성)
~/.comad/loopy-era/{logs,pending,phase_history,…}tick 누적 상태, 로그, 메트릭, 결과 TSV
~/.claude/.comad/memory/facts.sqlitekb_facts/relations/embeddings (단일 SoT, Claude·Codex 공유)

설치 / 제어

comad-world 루트의 install.sh가 처리하지만, 수동으로도 가능:

# 설치 (interactive)
./install.sh                # "Install always-on loopy-era harness?" → y

# 수동 제어
loopy-era/bin/start-harness.sh status   # 현재 iteration / metric / state
loopy-era/bin/start-harness.sh tick     # 한 번 즉시 실행 (15-phase)
loopy-era/bin/kb-sleep-tick.py --no-push # kb tick (push 안 함)
loopy-era/bin/auto-dream.sh             # dream 임계 체크 + 실행

# LaunchAgent on/off
launchctl unload ~/Library/LaunchAgents/com.comad.kb-sleep.plist
launchctl load   ~/Library/LaunchAgents/com.comad.kb-sleep.plist

환경변수

변수기본값의미
COMAD_LOOPY_DIR~/.comad/loopy-era런타임 디렉토리 (state, logs, pending, phase_history)
COMAD_LOOPY_LLMautoclaude / codex / auto — dispatcher 분기 (no fallback)
KB_SLEEP_NO_PUSH01이면 kb-sleep-tick의 git push 비활성화 (로컬 파일 생성만)
OLLAMA_URLhttp://localhost:11434임베딩용 Ollama 엔드포인트

관련 모듈: Sleep (kb_facts + 5 MCP 툴 / dream 정책) · Brain (MCP 등록 위치) · Ear (T6 pending 큐 공급)