
oh-my-agent: 스킬이 자신의 유용성을 측정하고 최적화할 수 있도록
요약
oh-my-agent가 스킬의 유용성을 측정하고 최적화하는 eval-opt 루프 기능을 도입했습니다. 홀드아웃 태스크를 통해 스킬의 성능 향상을 검증하고, LLM이 스킬을 직접 수정하여 성능을 개선하며 네거티브 트랜스퍼와 스케일링 법칙 문제까지 관리합니다.
핵심 포인트
- eval-opt 루프를 통한 스킬 자동 최적화 및 검증
- 네거티브 트랜스퍼 방지를 위한 엄격한 성능 비교
- 블랙홀 스킬 탐지를 통한 라우팅 감쇠 감사 기능
- 비디오 생성 및 모바일 개발 등 다양한 스킬 워크플로우 지원
많은 스킬 라이브러리는 단순히 쌓아두기만 하면 성장합니다. SKILL.md를 하나 추가하고 '편리해 보인다'고 생각하면 그대로 남아있게 됩니다. 실제로 도움이 되는지, 아니면 해가 되는지를 아무도 증명할 수 없기 때문입니다. 이번 주 oh-my-agent는 그 빈틈을 메웠습니다. oma skills eval은 스킬을 로드했을 때 홀드아웃 태스크 (hold-out task)의 결과가 정말로 개선되는지 측정하며, oma skills opt는 그 수치를 높이도록 SKILL 자체를 다시 작성합니다. 194개의 커밋이 반영되어 CLI 버전은 8.41.0이지만, 주목해야 할 점은 eval → opt 루프입니다.
: 홀드아웃 태스크에서 oma skills eval을 통해 utilityLift (treatment와 baseline의 차이)를 측정합니다. --mock은 기록된 롤아웃 (rollout)을 결정적으로 재생하며, --live는 태스크마다 읽기 전용 (read-only) 에이전트 팔 (agent arm)을 2개 기동하고, --record로 롤아웃을 저장합니다. 기본 체커(checker)는 judge (LLM이 루브릭 (rubric)에 따라 출력을 채점)입니다. assert와 regex는 임의의 결정적 체크를 수행합니다.
: 옵티마이저 (optimizer) LLM이 oma skills opt를 통해 SKILL.md에 대한 add/delete/replace 편집을 제안하고, 각 후보를 eval로 재채점합니다. 홀드아웃 검증의 리프트 (lift)가 엄격하게 개선되고, 네거티브 트랜스퍼 (negative-transfer)에 의한 퇴보가 없는 경우에만 채택합니다 (SkillOpt, arXiv:2605.23904). 기본값은 --dry-run입니다. --apply는 원자적 (atomic)인 temp+rename 방식으로 쓰기를 수행하며 .bak 파일을 남깁니다.
네거티브 트랜스퍼 (Negative-transfer) 샘플링: --neg-transfer를 통해, 특정 스킬을 로드했을 때 다른 스킬의 eval 세트 상에 있는 무관한 동일 도메인 태스크가 퇴보하지 않는지 확인합니다.
스케일링 법칙 (Scaling law) 감사: oma skills audit이 블랙홀 (black-hole) 스킬 (너무 범용적이어서 라우팅을 독점하는 것)을 탐지하며, 라이브러리 크기에 따른 라우팅 감쇠 (routing-decay) 임계값을 초과하면 경고를 보냅니다 (Chen et al., arXiv:2605.16508).
: API 키를 사용하여 임의의 3단계 생성 (9:16 쇼츠, 16:9 해설, 임의 URL의 데모 캡처). 내레이션, 비주얼, 자막, 동봉된 Remotion compositor를 조합합니다. 각 프로바이더는 결정적 폴백 (fallback)으로 넘어가기 때문에, API 키가 0개라도 실행이 완료됩니다. oma-video 스킬과 /video 워크플로우 (workflow).
: oma-mobile의 Swift 네이티브 iOS swift-ios 변리언트 (variant) (SwiftUI + @Observable, Apple swift-openapi-generator, App/Core/Features/Shared 구성). /stack-set이 Swift / Flutter / React Native를 감지하여 해결된 스킬로 루트 (route)합니다. oma verify mobile은 스택 매니페스트 (stack manifest)에 따라 swift build / swift test를 실행합니다.
: GitHub의 README, 릴리스, 이슈를 수집하는 로컬 퍼스트 (local-first) 프로덕트 인텔리전스 파이프라인. 대립적인 멀티 렌즈 리뷰 게이트 (multi-lens review gate)를 거쳐 PRD와 gap report로 분할 출력합니다. oma intel.
3가지 새로운 런타임 (runtime): Kiro CLI, Pi (Earendil, 인프로세스 (in-process) .pi/extensions 경유), Antigravity (agy)의 .agents/hooks.json 후크 (hook) 통합.
: 병합된 options 객체로 인해 runAction이 위치 인자 (positional argument)를 뭉개고 args[0]를 덮어쓰고 있었기 때문에, oma state:emit decision.made '{...}'의 kind가 {category:"main",...}가 되어 state:verify가 항상 decision 누락을 보고했습니다. options를 위치 인자로 대체하여 오퍼랜드 (operand)가 남도록 수정했습니다.
: 래퍼 (wrapper)가 --yes를 핸들러 (handler)에 전달하지 못하던 command.opts() 문제를 해결했습니다.
(글로벌 분석 플래그를 해제함)을 전달하고 있었기 때문에, oma skills eval --live --yes 실행 시에도 비용 확인 단계에서 멈추는 문제가 있었습니다. optsWithGlobals()로 전환하여 CI 상에서 live skill-eval이 작동하도록 수정했습니다. -
AgentMemory가 프로젝트 하위로 유출됨: iii 엔진이 현재 작업 디렉토리 (cwd) 상대 경로인 ./data/를 실행 주체 프로젝트에 작성하고 있었습니다. daemon cwd를 ~/.agentmemory로 고정하고, daemon stop 시 agentmemory stop을 호출하여 포트 3111의 고아 엔진 (orphan engine)이 남지 않도록 했습니다. -
키리스 (keyless) market 소스가 조용히 403 에러 반환: 익명 reddit search.json과 Bluesky 공개 검색이 403을 반환하여, 기본 소스 4개 중 2개가 작동하지 않았습니다. Reddit은 pullpush.io를 통해, Bluesky는 api.bsky.app을 통해 접근하도록 변경하여 키리스 기본 커버리지 (coverage)를 2/4에서 4/4로 높였습니다. -
agy headless의 stdout이 비어 있음: Antigravity는 비 TTY (non-TTY)용 --print 옵션 사용 시 stdout에 아무것도 출력하지 않아, spawn된 서브에이전트 (subagent)의 캡처 내용이 공백이었습니다. 서브에이전트를 PTY (script(1)) 상에서 실행하여 출력을 캡처할 수 있도록 했습니다.
workflow를 직접 심볼릭 링크 (symlink) 처리: 각 workflow 파일이 name 및 disable-model-invocation 프론트매터 (frontmatter)를 가지며, .agents/workflows/<wf>.md로 직접 심볼릭 링크를 걸어 공개합니다. 이미 커밋된 래퍼 스킬 (wrapper skill) 18개를 삭제하고, pdf / oma-pdf 감사 (audit)의 거짓 양성 (false positive)을 수정했습니다. 실제 스킬 수는 30개입니다. -
: 1.4k 행의 market harvest를 endpoints / normalizers / sources로 분리했습니다. 약 400행의 harvest.ts를 분할하고, fetchSource 조건 분기를 source-handler 레지스트리 (registry) 방식으로 변경했습니다. 공개 파사드 (facade)는 변경되지 않았습니다. -
print stylesheet의 캐스케이드 (cascade) 충돌 해결: 슬라이드 PDF 내보내기 (export) 시 불필요한 !important를 제거하고, 충돌 원인(author style 뒤에 나타나는 scoped #slide-NN 리셋)을 수정했습니다. 남은 !important는 prefers-reduced-motion의 접근성 (a11y) 리셋뿐입니다. -
경로와 해시 집약: install, state, recap이 .agents 경로 상수를 공유하며, 매니페스트 체크섬 (manifest checksum)은 전체 SHA-256으로 일치합니다. -
기본 effort를 xhigh에서 high로 변경: install 시 Claude 설정 및 Anthropic 자동 기본값 (auto-default)을 적용했습니다. 기존의 더 높은 설정은 유지됩니다.
# 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는 스킬 라이브러리를 측정 가능한 자산으로 취급하고자 하는 팀을 위한 도구입니다. 다음 단계로는 oma skills opt에서 채택된 편집 사항을 eval fixture로 되돌려, 릴리스마다 라이브러리가 스스로 조정되는 흐름을 만들 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기