harness-adapters について
harness-adaptersは、Firstmateの操作を実行環境に応じた参照資料と検証済みランタイムへ振り分けるスキルです。Workerの起動や制御に関する検出、安全性、ルーティングの規則を定めます。
主な機能
- 01操作を実行環境別の資料へ振り分け
- 02検証済み情報から実行環境を検出
- 03Workerのランタイム指定を解決
- 04安全な制御・復旧手順を定義
活用シーン
- 01実行環境固有の作業に使う資料を選択
- 02Workerの起動前にランタイムを確認
- 03記録済みの環境を使ってWorkerを復旧・制御
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ kunchenguid/ firstmate --skill harness-adaptersインストール後、Claude Code で/harness-adaptersを入力して読み込まれたか確認します。
詳細
harness-adapters
Firstmate のハーネス固有の操作に関するスキル、トリガー、ルーティングを一元的に管理します。
まずこのルーターを読み込み、次に共通リファレンスと、以下から選んだハーネスリファレンスをそれぞれ1つだけ読み込んでください。
複数の行にまたがる操作では、すべてのリファレンスを個別に読むのではなく、対象の和集合を一度だけ読み込んでください。
references/ 以下のファイルはこのスキルのリソースであり、カタログに登録された追加スキルではありません。
パスの規約
スキルディレクトリとは、この SKILL.md が置かれているディレクトリです。
オンデマンドのリファレンスリンクと相対リンクは、ネストしたリファレンスで指定されたリンクも含め、スキルディレクトリを基準に、実行ファイル、ドキュメント、または兄弟スキルの所有元へ解決してください。
運用パスでは、所有元が指定するコンテキストを維持してください。config/ とアクティブホームの設定はアクティブな Firstmate ホームに属し、state/ はそのホームに属します。また、.claude/settings.json などのプロジェクト設定は対象プロジェクトに属します。
絶対に守るべき安全要件
未検証のアダプターでは、crewmate または secondmate に処理を割り当てないでください。
config/crew-harness または config/secondmate-harness にハーネスが指定されている場合は、../../../AGENTS.md のセクション9に従って、要求されたワーカーランタイムは未検証であると captain に伝えてください。現在の作業には firstmate 自身の検証済みランタイムを使用し、要求されたランタイムを今後の作業に向けて検証するかどうかだけを尋ねてください。
その選択のために現在の作業を中断しないでください。
unknown の場合は推測せず、captain に確認してください。
現在の captain によるオーバーライドは検出結果より優先されます。一方、タスクごとのオーバーライドが適用されるのは、その処理の割り当てだけです。
復旧と制御では、state/<id>.meta に記録された正確な harness= を使用してください。モデルやプロバイダーから推測してはいけません。
ライフサイクル操作は、../../../bin/fm-control.sh <task-id> interrupt|exit|relaunch を通じてのみ実行してください。
ルーティングマーク付きのテキストがチャットとして送信されるため、fm-send を使って割り込みキーや終了コマンドを入力してはいけません。
指示の処理を対象が開始したことを調査で確認できた場合に限り、信頼性の確認は完了です。送信の成功だけでは確認になりません。
Muse、Gemini、AGY、Devin、Command Code、Polytoken、Cortex は、crewmate と scout の作業でのみ検証済みです。secondmate または primary では検証されていません。
検出
../../../bin/fm-harness.sh は、検証済みの環境マーカーとプロセスの祖先情報から firstmate 自身のハーネスを出力し、それらをどのように組み合わせるかを管理します。
マーカーはハーネスを示しますが、別のハーネスの構造上の祖先がある場合は、そちらが優先されます。マーカーは子プロセスやマルチプレクサーに引き継がれることのある通常の環境状態ですが、祖先情報はプロセスツリーを所有するハーネスを示すためです。
起動境界で FM_PI_HARNESS=pi-signed と PI_CODING_AGENT=true が同時に設定されている場合のみ、Pi-signed が選択されます。共有されている未マークのランチャー祖先がある場合は、Pi が選択されます。
omp は独自のマーカーを公開しません。FM_OMP_HARNESS=omp は Firstmate の起動マーカーであり、omp という名前に限定されたプロセス名が祖先情報の証拠になります。詳細は references/harness/omp.md に記載されています。
ワーカーマーカーの設定は ../../../bin/fm-spawn.sh が管理し、署名付きプライマリの境界は README の起動コマンドが管理します。
../../../bin/fm-harness.sh crew は config/crew-harness を解決します。この設定がない場合、または値が default の場合は、firstmate 自身のハーネスを使用します。
secondmate の固定設定の解決方法(mate ごとのオーバーライドを含む)は docs/configuration.md が管理し、リゾルバーのコマンドは bin/fm-harness.sh が管理します。
../../../bin/fm-spawn.sh は起動のたびに再解決し、起動ごとに明示的に指定した引数が、その起動では優先されます。
新しいアダプターの検証済みマーカーとコマンド名は、../../../bin/fm-harness.sh に追加する必要があります。
操作と参照の対応表
出力されるすべてのプランでは、選択または記録されたハーネス参照を、指定された共通参照の後に追加します。
harness-adapter-routing-v1 オブジェクトは、機械可読で人にも見える選択コントラクトです。操作を選び、その操作内のシナリオを選んでから、選択したハーネス参照を追加します。
より限定されたシナリオが該当しない場合は、default が通常のシナリオです。
Kimi は、選択したハーネス参照でサポート対象外となる主要な境界を定めます。Muse と Gemini は、上記の譲れない安全要件に従います。
新しいツールは、verify プラン、そのハーネスエントリ、指定されたすべての担当者、およびライブチェックが揃うまでディスパッチできません。
{
"operations": {
"start": {
"default": ["references/common/dispatch.md", "references/common/model-and-effort.md"],
"trust-dialog": ["references/common/control-and-recovery.md"]
},
"trust": {"default": ["references/common/control-and-recovery.md"]},
"skill": {"default": ["references/common/control-and-recovery.md"]},
"interrupt": {"default": ["references/common/control-and-recovery.md"]},
"exit": {"default": ["references/common/control-and-recovery.md"]},
"resume": {"default": ["references/common/control-and-recovery.md"]},
"recovery": {
"default": ["references/common/control-and-recovery.md"],
"replacement-profile": ["references/common/control-and-recovery.md", "references/common/dispatch.md", "references/common/model-and-effort.md"],
"secondmate": ["references/common/control-and-recovery.md", "references/common/primary-hooks.md"],
"replacement-secondmate": ["references/common/control-and-recovery.md", "references/common/dispatch.md", "references/common/model-and-effort.md", "references/common/primary-hooks.md"]
},
"primary": {"default": ["references/common/primary-hooks.md"]},
"model-effort": {
"default": ["references/common/model-and-effort.md"],
"configured-profile": ["references/common/model-and-effort.md", "references/common/dispatch.md"]
},
"verify": {"default": ["references/common/dispatch.md", "references/common/control-and-recovery.md", "references/common/primary-hooks.md", "references/common/model-and-effort.md"]}
},
"harnesses": {
"claude": "references/harness/claude.md",
"codex": "references/harness/codex.md",
"opencode": "references/harness/opencode.md",
"pi": "references/harness/pi.md",
"pi-signed": "references/harness/pi.md",
"grok": "references/harness/grok.md",
"kimi": "references/harness/kimi.md",
"cursor": "references/harness/cursor.md",
"gemini": "references/harness/gemini.md",
"muse": "references/harness/muse.md",
"rovo": "references/harness/rovo.md",
"omp": "references/harness/omp.md",
"agy": "references/harness/agy.md",
"devin": "references/harness/devin.md",
"commandcode": "references/harness/commandcode.md",
"polytoken": "references/harness/polytoken.md",
"cortex": "references/harness/cortex.md"
}
}