多くのスキルライブラリは、ただ積み重ねるだけで育ちます。SKILL.md を1つ追加し、「便利そう」と思えば、そのまま残り続ける。実際に役立つか、害になるかを誰も証明できないからです。今週 oh-my-agent はその穴を埋めました。oma skills eval はスキルを読み込んだときにホールドアウトタスクの結果が本当に改善するかを測り、oma skills opt はその数値を上げるよう SKILL 自体を書き換えます。194コミットが入り、CLI は 8.41.0 ですが、注目すべきは eval → opt のループです。
新機能
-
oma skills eval: ホールドアウトタスクでutilityLift(treatment と baseline の差)を測定。--mockは記録済み rollout を決定的に再生、--liveはタスクごとに read-only なエージェント腕を2本起動、--recordで rollout を保存。デフォルトの checker はjudge(LLM がルーブリックで出力を採点)。assertとregexは任意の決定的チェック。 -
oma skills opt: optimizer LLM が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 セット上の無関係な同ドメインタスクが退行しないか確認。 -
スケーリング則 audit:
oma skills auditが black-hole スキル(汎用すぎてルーティングを奪うもの)を検出し、ライブラリサイズに応じた routing-decay 閾値を超えたら警告(Chen et al., arXiv:2605.16508)。 -
oma-videoスキルと/videoworkflow: API キー任意の3段階生成(9:16 ショート、16:9 解説、任意 URL のデモキャプチャ)。ナレーション、ビジュアル、字幕、同梱 Remotion compositor を組み合わせる。各プロバイダは決定的フォールバックに落ちるため、API キー0でも実行が完走する。 -
oma-mobileの Swift ネイティブ iOS:swift-iosバリアント(SwiftUI +@Observable、Appleswift-openapi-generator、App/Core/Features/Shared 構成)。/stack-setが Swift / Flutter / React Native を検出して解決済みスキルへルート。oma verify mobileはスタック manifest に応じてswift build/swift testを実行。 -
oma intel: GitHub の README、リリース、issue を集める local-first のプロダクトインテリジェンスパイプライン。対立的なマルチレンズ review gate を通し、PRD と gap report に分割出力。 -
3つの新ランタイム: Kiro CLI、Pi(Earendil、in-process
.pi/extensions経由)、Antigravity(agy)の.agents/hooks.jsonフック統合。
修正
-
runActionが位置引数を潰していた: マージ済み options オブジェクトでargs[0]を上書きしていたため、oma state:emit decision.made '{...}'の kind が{category:"main",...}になり、state:verifyは常に decision 欠落を報告。options は位置で置き換え、オペランドが残るようにした。 -
--yesがハンドラに届かなかった: ラッパーがcommand.opts()(グローバル解析フラグを落とす)を渡していたため、oma skills eval --live --yesでもコスト確認で止まった。optsWithGlobals()に切り替え、CI 上で live skill-eval が動くようにした。 -
AgentMemory がプロジェクト配下に漏れていた: iii エンジンが cwd 相対の
./data/を起動元プロジェクトに書いていた。daemon cwd を~/.agentmemoryに固定し、daemon stopでagentmemory stopを呼び、port 3111 の孤児エンジンを残さない。 -
キーレス market ソースが黙って 403: 匿名 reddit
search.jsonと bluesky 公開 search が 403 を返し、デフォルトソースの4つ中2つが落ちていた。reddit は pullpush.io、bluesky はapi.bsky.app経由に変更し、キーレス既定カバレッジを 2/4 から 4/4 に。 -
agy headless の stdout が空: Antigravity は非 TTY 向け
--printで stdout に何も出さず、spawn した subagent の捕捉が空白だった。subagent を PTY(script(1))上で実行し、出力を捕捉するようにした。
改善
-
workflow を直接 symlink: 各 workflow ファイルが
name+disable-model-invocationfrontmatter を持ち、.agents/workflows/<wf>.mdへ直 symlink で公開。コミット済みラッパースキル18件を削除し、pdf/oma-pdfaudit の false positive を修正。実スキル数は30。 -
harvest.tsを分割: 1.4k 行の market harvest を endpoints / normalizers / sources に分離。約400行のfetchSource条件分岐を source-handler registry 化。公開 facade は不変。 -
print stylesheet のカスケード競合を解消: slide PDF export の不要な
!importantをやめ、競合源(author style の後に出る scoped#slide-NNreset)を直した。残る!importantはprefers-reduced-motionの a11y reset のみ。 -
パスとハッシュを集約: 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 に戻し、リリースごとにライブラリが自己調整する流れを作ります。
原文(英語): https://dev.to/gracefullight/oh-my-agent-skills-now-measure-and-optimize-their-own-utility-4g14