oh-my-agent(OMA)は、実行中のワークフローが終了しようとすると、設定済みの
テストスクリプトを再実行できます。この例では、有効期限の判定を意図的に
誤らせた小さなテスト環境で、フックを手動で呼び出しました。
OMA 15.0.13 のソース CLI を使っています。
このテスト環境では、now === expiresAt の時点で有効期限が切れたと判定します。
実装に > を使っていたため、境界値のテストが失敗しました。
テストプロセスの終了コードは 1 でした。実際の出力から抜粋します。
not ok 2 - at expiry: expired
# pass 2
# fail 1
テスト環境の実行中の Ralph ワークフローには、終了条件として test ゲートを
設定していました。OMA の Stop フックを手動で呼び出すと、パッケージの
テストスクリプトが再実行されました。応答には "decision":"block" と、
次の理由が含まれていました。
Stop gate 'test' FAILED (reinforcement 1/5).
oma hook run プロセス自体の終了コードは 0 です。終了を拒否する判断は
JSON の decision に入っています。この終了コードだけでテスト成功と判断すると
誤りになります。
修正したのは比較演算子だけです。
- return now > expiresAt;
+ return now >= expiresAt;
テストを再実行すると、次の結果になりました。
# pass 3
# fail 0
次の Stop 呼び出しでは、同じゲートが実行され、標準出力は空でした。
OMA はテスト環境のワークフロー状態を削除しました。イベントログには
gate.passed、続いて理由が completion_gate_passed の session.ended が
記録されました。
デモ、実行記録、再現スクリプトには、コマンド、時刻、出力の
全文を載せています。reproduce.py をダウンロードして、CLI の依存パッケージが
そろった OMA のソースチェックアウトに対して実行してください。
python3 reproduce.py --oma-source /path/to/oh-my-agent --output /path/to/new-demo-run
45 秒の解説を見るには、Gist から demo.html をダウンロードし、保存したファイルをブラウザーで開いてください。GitHub のページには HTML のソースが表示されます。
Python 3、Git、Node、Bun が必要です。スクリプトは独立したテスト環境と
セッション保存先を作ります。利用中のプロジェクトのワークフロー状態は
変更しません。
これはローカルのテスト環境でフックを手動呼び出しした例です。
エージェントが自律的に作業する録画でも、本番環境の障害事例でもありません。
この設定のゲートが、このテストに対してどう動くかを示しています。
作業全体の正しさや、他のツールとの優劣を示すものではありません。
ここで使った CLI とフックには、フルハーネスが必要です。
スキルのみのインストールには含まれません。
Quick Start
で小さなタスクを 1 つ試し、差分と検証結果を確認してください。
ソースは GitHub にあります。