본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 17. 22:41

oh-my-agent: Kimi 및 OpenCode 대응, 에이전트를 시간 단위로 구동하는 스케줄러 추가

요약

oh-my-agent가 Kimi 및 OpenCode 벤더 지원과 시간 기반 에이전트 스케줄러 기능을 추가했습니다. 에이전트의 런타임 독립성을 강화하고, 리소스 누수를 방지하기 위한 자동 정리(reaper) 및 메모리 관리 기능을 도입했습니다.

핵심 포인트

  • Kimi Code 및 OpenCode 벤더 지원을 통한 크로스 벤더 하네스 확장
  • OS 레벨 스케줄러를 추상화한 시간 기반 에이전트 작업 기능 추가
  • 유휴 상태의 LSP 스택 자동 중지 및 세션 데이터 정리 기능 도입
  • refactor-engineer, research-explorer 등 신규 에이전트 추가

이번 주에는 2개의 새로운 벤더(Vendor)와 OS 레벨의 스케줄러(Scheduler)가 머지(Merge)되었습니다. 지금까지 에이전트는 프롬프트를 입력했을 때만 동작했지만, 앞으로는 시간에 따라 자동으로 동작할 수 있습니다. 커밋(Commit)은 135건이며, 그 대부분을 관통하는 하나의 공통 테마가 있습니다. 바로 에이전트를 단일 런타임(Runtime)에 묶어두지 않는 것, 그리고 세션을 넘나들며 리소스를 누수시키지 않는 것입니다.

oh-my-agent는 크로스 벤더 하네스(Cross-vendor harness)입니다. 워크플로우(Workflow), 스킬(Skill), 서브 에이전트(Sub-agent)의 디스패치(Dispatch) 모두 하단의 CLI가 무엇인지 의식하지 않고 사용할 수 있다는 개념으로 만들어졌습니다. 이번 주에 그 방침을 크게 진전시켰습니다.

Kimi Code CLI가 퍼스트 클래스(First-class) 벤더가 되었습니다. OAuth와 KIMI_API_KEY를 통한 인증, ~/.kimi-code/config.toml로의 TOML 훅(Hook) 설치, 모드(Mode) 대응 Serena 및 chrome-devtools MCP, 그리고 kimi -p를 통한 외부 디스패치를 지원합니다.

OpenCode가 확장 클래스(Extension class) 벤더로 합류하여 프로세스 내에서 플러그인(Plugin)을 브릿지(Bridge)합니다. 서브 에이전트 디스패치는 opencode run --agent <id>를 통해 이루어지며, 모델 슬러그(Slug)는 하드코딩된 카탈로그가 아닌 opencode models로 검증합니다.

어떤 런타임과도 독립적으로 발화하는 시간 기반의 정기 에이전트 작업(Agent job)이 추가되었습니다. 하나의 oma schedule:* SchedulerPort가 launchd, systemd --user, crontab, Windows의 schtasks를 추상화하며, --cron 또는 자연어인 --every로 간격을 지정할 수 있습니다.

유휴(Idle) 상태의 언어 서버(Language Server)를 중지합니다. Serena는 프로젝트마다 LSP 스택을 워밍(Warm) 상태로 유지하기 때문에, 유휴 시 자동으로 중지되지 않습니다. 이로 인해 여러 프로젝트를 열기만 해도 1.5GB 이상을 점유하게 됩니다. reaper가 이를 정리하며, 다음 도구 호출 시 Serena가 재시작됩니다. oma serena reap

프로젝트 로컬의 세션 상태와 오래된 Serena의 실행 결과물을 정리합니다 (기본값은 세션 100건, 50일 유지). 반면 decisions나 designs와 같이 큐레이션된 지식에는 전혀 손을 대지 않습니다. oma memory:gc

새로운 에이전트가 2개 추가되었습니다. refactor-engineer (예산 기반으로 동작을 유지하는 리팩토링)와 research-explorer (인용 및 신뢰 라벨이 포함된 크로스 소스 통합)이며, 둘 다 새로운 oma-refactor 스킬이 뒷받침합니다.

oma-mobile에 Flutter와 React Native의 풀 배리언트(Full variant)가 추가되었습니다. 둘 다 리포지토리(Repository) 계층의 응답 캐시(Response cache)를 필수적으로 사용합니다 (Flutter는 Drift를 통한 오프라인 퍼스트, React Native는 TanStack Query와 MMKV).

oma update가 매번 벤더 스킬의 심볼릭 링크(Symbolic link)를 일괄 삭제하는 것을 중단했습니다. 업데이트 도중 다운로드에 실패하더라도 스킬 디렉토리가 비게 되는 일은 더 이상 없습니다.

업데이트 시, 이미 배포된 에이전트가 의존하는 스킬을 정리하지 않도록 했습니다. refactor-engineeroma-refactor 없이 전달되는 허점을 막았습니다.

cleanupPeriodDays를 Claude Code 설정의 최상위 레벨로 옮겼습니다. env 하위에 중첩되어 있었을 때는 no-op(아무 동작도 하지 않음) 상태였습니다.

/hooks UI에서 등록된 Antigravity의 훅을 link와 update 시마다 덮어쓰지 않고 유지하도록 했습니다.

문서 검증(Documentation verification) 노이즈가 크게 줄었습니다. 리포지토리 전체의 oma docs verify 결과, 깨진 참조(Broken reference)가 6,611건에서 394건으로, web/docs 서브셋은 491건에서 29건으로 감소했습니다. 나머지는 실제 드리프트(Drift)입니다.

oma hook

oma hook은 매 프롬프트마다 실행되기 때문에, argv의 패스트 패스(fast path)를 제거하고 커맨드 트리(command tree)를 지연 로드(lazy load)하도록 수정했습니다. 호출 시간이 약 0.54s에서 0.32s로 단축되었습니다.

UserPromptSubmit

핸들러(handler)의 예산을 p95 373ms에 맞춰 재조정하였으며, 집계 타임아웃(aggregation timeout)의 상한을 21s에서 15s로 낮추는 동시에, 2s의 AgentMemory 리콜(recall) 예산에 대한 여유를 유지했습니다.

규모가 큰 구조적 경로(structural path)에서, 500행을 초과하는 비테스트 파일 28개 전부를 집중화된 모듈로 분할하였고(남은 최대 행수는 491행), 중복된 헬퍼(helper)(타입 가드(type guard), 안전한 쓰기(safe write), 벤더 유니온 타입(vendor union type), 종료 코드(exit code))를 동작 변경 없이 통합했습니다.

AgentMemory의 리콜(recall) 시 기본적으로 30일보다 오래된 팩트(fact)를 제외하도록 변경되었습니다. 이로 인해 이미 해결된 결정이 경계 스냅샷(boundary snapshot)에 다시 로드되는 일이 발생하지 않습니다.

Gemini CLI는 현재 서비스 종료(sunset) 과정에 있으므로(2026년 6월 18일), GEMINI.md 생성 및 독립형(standalone) gemini 프리셋을 삭제하였으며, 레거시 설정은 antigravity로 소프트 리다이렉트(soft redirect)되도록 했습니다.

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.ps1 | iex

oh-my-agent는 각기 다른 인증 상태를 가진 CLI 간에도 동일한 워크플로우를 실행하고자 하는 팀을 위해 만들어졌습니다. 다음 단계로는 이번에 추가된 벤더(vendor)를 아우르는, 더욱 세밀한 에이전트 단위의 모델 라우팅(model routing) 작업에 착수할 예정입니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0