본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 05. 14:26

oh-my-agent: 이제 스킬이 스스로의 효용성을 측정하고 최적화합니다

요약

oh-my-agent가 스킬의 효용성을 스스로 측정하고 최적화하는 새로운 기능을 출시했습니다. eval-to-opt 루프를 통해 스킬 라이브러리의 성능을 검증하고, 부정적 전이를 방지하며 자동으로 스킬을 개선합니다.

핵심 포인트

  • oma skills eval을 통한 스킬 유용성(utilityLift) 측정
  • oma skills opt를 활용한 스킬 자동 작성 및 최적화
  • 부정적 전이(Negative-transfer) 방지 샘플링 기능
  • 스케일링 법칙 감사 및 블랙홀 스킬 탐지 기능
  • 비디오 생성 및 모바일/제품 인텔리전스 워크플로우 지원

대부분의 스킬 라이브러리는 점진적으로 축적되며 성장합니다. 유용해 보이는 SKILL.md를 추가하면, 그것이 도움이 되는지 해가 되는지 아무도 증명할 수 없기에 영원히 남게 됩니다. 이번 주 oh-my-agent는 그 간극을 메웠습니다: oma skills eval은 스킬을 로드하는 것이 실제로 홀드아웃 태스크 (held-out task) 결과물을 개선하는지 측정하며, oma skills opt는 그 수치를 높이기 위해 스킬을 다시 작성합니다. 194개의 커밋이 반영되었고 CLI 버전은 8.41.0이지만, 주의를 기울여야 할 부분은 바로 eval-to-opt 루프입니다.

새로운 기능

  • oma skills eval: 홀드아웃 태스크에서 utilityLift (대조군 vs 기준군)를 측정합니다. --mock은 기록된 롤아웃 (rollouts)을 결정론적으로 재생하며, --live는 태스크당 두 개의 읽기 전용 에이전트 암 (agentic arms)을 생성하고, --record는 롤아웃을 캡처합니다. 기본 검사기는 judge (LLM이 루브릭에 따라 출력을 채점)이며, assertregex는 선택 사항인 결정론적 검사입니다.

  • oma skills opt: 최적화 LLM이 SKILL.md에 대해 제한된 범위 내의 추가/삭제/교체 편집을 제안하고, eval을 통해 각 후보의 점수를 다시 매기며, 홀드아웃 검증에서의 상승폭이 부정적 전이 (negative-transfer) 퇴보 없이 엄격하게 개선될 때만 수용합니다 (SkillOpt, arXiv:2605.23904). --dry-run이 기본값이며, --apply.bak 백업과 함께 원자적 임시 파일 생성 후 이름 변경 (atomic temp+rename) 방식으로 기록합니다.

  • 부정적 전이 샘플링 (Negative-transfer sampling): --neg-transfer는 하나의 스킬을 로드하는 것이 다른 스킬의 eval 세트에 포함된 관련 없는 동일 도메인 태스크를 퇴보시키는지 확인합니다.

  • 스케일링 법칙 감사 체크 (Scaling-law audit checks): oma skills audit은 이제 블랙홀 스킬 (지나치게 일반적인 라우팅 하이재커)을 표시하고, 보정된 라이브러리 크기 라우팅 감쇠 (routing-decay) 임계값을 넘어서면 경고를 보냅니다 (Chen et al., arXiv:2605.16508).

  • oma-video 스킬 및 /video 워크플로우: 내레이션, 비주얼, 자막 및 포함된 Remotion 컴포지터를 구성하는 핵심 선택형 3단계 생성 (9:16 쇼츠, 16:9 설명 영상, 모든 URL의 데모 캡처) 기능을 제공합니다. 모든 프로바이더 (provider)는 결정론적 폴백 (fallback)으로 전환되므로, API 키가 전혀 없어도 실행을 완료할 수 있습니다.

  • oma-mobile 내 Swift 네이티브 iOS: swift-ios 변체 (SwiftUI + @Observable, Apple swift-openapi-generator, App/Core/Features/Shared 레이아웃). /stack-set은 이제 Swift, Flutter, React Native를 감지하여 해결된 스킬 (skill)로 라우팅합니다; oma verify mobile은 스택 매니페스트 (stack manifest)에 따라 swift build / swift test를 실행합니다.

  • oma intel: GitHub README, 릴리스 (releases), 이슈 (issues)를 수집하고, 적대적 다중 렌즈 리뷰 게이트 (adversarial multi-lens review gate)를 실행하며, 출력물을 PRD와 격차 보고서 (gap report)로 분리하는 로컬 우선 제품 인텔리전스 파이프라인 (local-first product intelligence pipeline)입니다.

  • 세 가지 새로운 런타임 (runtimes): Kiro CLI, Pi (Earendil, 프로세스 내 .pi/extensions를 통해 제공), 그리고 .agents/hooks.json을 통한 완전한 Antigravity (agy) 훅 (hook) 통합.

수정 사항

  • runAction의 위치 피연산자 (positional operands) 덮어쓰기 문제: 병합된 옵션 객체 (options object)가 args[0]를 덮어씌우는 문제가 있었습니다. 이로 인해 oma state:emit decision.made '{...}' 실행 시 kind가 {category:"main",...}로 기록되었고, state:verify는 항상 결정(decision)이 누락되었다고 보고했습니다. 이제 옵션이 위치(position)로 대체되어 피연산자가 보존됩니다.
  • --yes 플래그가 핸들러에 전달되지 않던 문제: 래퍼 (wrapper)가 command.opts() (전역적으로 파싱된 플래그를 누락함)를 전달하여, oma skills eval --live --yes를 실행해도 비용 미리보기 프롬프트에서 여전히 차단되었습니다. optsWithGlobals()로 전환하여, CI 환경에서도 라이브 스킬 평가 (live skill-eval)를 실행할 수 있게 되었습니다.
  • AgentMemory가 프로젝트 디렉터리로 유출되는 문제: iii 엔진이 실행된 현재 작업 디렉터리 (cwd) 상대 경로인 ./data/ 저장소를 해당 프로젝트에 작성했습니다. 이제 데몬 (daemon)의 cwd는 ~/.agentmemory로 고정되며, daemon stopagentmemory stop을 호출하여 고립된 엔진이 3111 포트를 계속 점유하지 않도록 합니다.
  • 키가 없는 마켓 소스들의 무음 403 오류: 익명 Reddit search.json과 Bluesky의 공개 검색 엔드포인트(endpoint) 모두 403 오류를 반환하여 기본 소스 중 두 개가 누락되었습니다. 이제 Reddit은 pullpush.io를 통해, Bluesky는 api.bsky.app을 통해 라우팅되어, 키가 없는 기본 커버리지가 2/4에서 4/4로 증가했습니다.
  • agy 헤드리스 (headless) stdout이 비어있던 문제: Antigravity는 비-TTY (non-TTY) 환경에서 --print 실행 시 stdout으로 아무것도 내보내지 않아, 생성된 서브 에이전트 (subagent) 캡처가 빈 상태였습니다.

이제 서브 에이전트 (subagent)는 PTY (script(1)) 하에서 실행되어 그 출력이 캡처됩니다.

개선 사항

  • 워크플로 (Workflows) 직접 심볼릭 링크 연결: 각 워크플로 파일은 자체적인 name + disable-model-invocation 프론트매터 (frontmatter)를 포함하며, .agents/workflows/<wf>.md에 직접 심볼릭 링크 (symlinking)를 걸어 노출됩니다. 이를 통해 18개의 커밋된 래퍼 스킬 (wrapper skills)을 제거하였고, pdf/oma-pdf 감사 (audit) 상의 오탐 (false positive) 문제를 해결했습니다. 실제 스킬 수는 현재 30개입니다.
  • harvest.ts 분리: 1,400라인에 달하던 마켓 하베스트 (market harvest) 파일이 엔드포인트 (endpoints) / 노멀라이저 (normalizers) / 소스 (sources) 모듈로 분리되었으며, 약 400라인의 fetchSource 조건문이 소스 핸들러 레지스트리 (source-handler registry)로 변경되었습니다. 공개 파사드 (public facade)는 변경되지 않았습니다.
  • Print 스타일시트의 캐스케이드 (cascade) 충돌 해결: 슬라이드 PDF 내보내기 시, 강제로 우선순위를 높이는 대신 충돌의 근본 원인(작성자 스타일 이후에 생성되는 범위 제한된 #slide-NN 리셋)을 수정하여 불필요한 !important 오버라이드 (overrides)를 제거했습니다. 남은 유일한 !importantprefers-reduced-motion 웹 접근성 (a11y) 리셋뿐입니다.
  • 경로 및 해싱 (hashing) 중앙 집중화: 설치 (install), 상태 (state), 요약 (recap) 단계가 이제 .agents 경로 상수를 공유하며, 매니페스트 (manifest) 체크섬 (checksums)을 위해 전체 SHA-256 방식을 사용하도록 통일되었습니다.
  • 기본 노력 수준을 xhigh에서 high로 하향: 설치 시 Claude 설정 및 Anthropic 자동 기본값에 대해 적용됩니다. 기존의 더 높은 설정값들은 그대로 유지됩니다.

설치 (Installation)

# 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 fixtures)를 통해 다시 피드백하여, 매 릴리스마다 라이브러리가 스스로 튜닝되도록 하는 것입니다.

https://github.com/first-fluke/oh-my-agent

AI 자동 생성 콘텐츠

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

원문 바로가기
0

댓글

0