レコーディングからスキルへ
エージェントに一度見せるだけ——ブラウザまたはデスクトップでのデモンストレーションが再生可能なSKILL.mdドラフトになり、実行される前に必ず人間が承認します。
SOPの中には、説明するより実演する方が簡単なものがあります:ERPで月次レポートを調べる、フォームを提出する、ベンダーポータルを一巡する。Recording to Skillはそのループを閉じます。エージェントが記録する間にあなたがタスクを一度実行し、記録はSKILL.mdドラフトに蒸留され、管理者がダッシュボードでレビューして承認します。そこで初めてインストール済みスキルになります。
5つのMCPツールがこのループを駆動します:
| ツール | 目的 |
|---|---|
browser_record_start(url, name?, headless?, max_seconds?) |
tracing+HAR付きの本物のブラウザを開き、手動デモンストレーションを記録 |
browser_record_stop(id) |
停止。trace.zip / session.har(秘匿処理済み) / actions.jsonを出力 |
desktop_record_start(name?, max_seconds?) |
デスクトップ記録:1 fpsのスクリーンショット+前面ウィンドウタイトル |
desktop_record_stop(id) |
デスクトップ記録を停止 |
skill_from_recording(id, name?) |
記録をSKILL.mdドラフトに蒸留し、承認へ提出 |
2つのレコーダー
Section titled “2つのレコーダー”ブラウザ(ローカルのNode.js + Playwrightが必要):本物のPlaywrightコンテキストが、tracing、HARキャプチャ、注入されたアクションレコーダー付きで動作し、記録ディレクトリに実体化される小さなNodeスクリプトが駆動します。あなたはヘッド付きウィンドウでデモンストレーションします。headless=trueは検証専用に存在します。モジュール探索はDUDUCLAW_PLAYWRIGHT_NODE_PATHとDUDUCLAW_NODEで上書きできます。
デスクトップ(現時点ではmacOSのみ、画面収録の権限が必要):デタッチされたワーカーサブプロセスが、毎秒1枚のスクリーンショットと前面ウィンドウタイトルをキャプチャします。キーストロークは意図的に記録しません——入力イベントストリームは実装されておらず、蒸留はウィンドウ切り替えの列とスクリーンショットだけから行われます。
シークレットはマシンから出ない
Section titled “シークレットはマシンから出ない”HARは停止時に、下流の何かがそれを読む前に、その場で秘匿処理されます:
- 認証情報ヘッダー(
Authorization、Cookie、Set-Cookie、x-api-keyなど)の値は置き換えられます。 - すべてのCookie値は置き換えられます。
- 名前が認証情報らしいクエリパラメータとJSONボディフィールド(
token、secret、password、api_key、session、signature…)は置き換えられます。
すべての置き換えは<env:VAR>プレースホルダーになり、蒸留されたSKILL.mdはそれらの変数をfrontmatterのrequires_envに列挙します——スキルはどの認証情報が必要かを文書化しますが、認証情報そのものを含むことは決してありません。
蒸留と承認ゲート
Section titled “蒸留と承認ゲート”skill_from_recordingは、秘匿処理済みのHAR(静的でないAPI呼び出し:メソッド、URL、ボディのスケルトン)をUIアクションの列と合わせてパースし、LLMにSKILL.mdドラフト(frontmatter:name / trigger / skill_type / requires_env)を蒸留させます。
ドラフトがロード可能なスキルライブラリへ直接着地することは決してありません:
- 提出前に、決定論的なセキュリティスキャン(プロンプトインジェクションのルールセットを含む)が実行されます——High/Criticalリスクは即座に拒否、フェイルクローズです。
- 通過したものは隔離されたドラフト領域(
~/.duduclaw/skills-drafts/<id>/SKILL.md)にステージされ、共有ApprovalBrokerを通して人間にルーティングされる承認待ちレコードが作られます。 - スキルをインストールするのはダッシュボードの承認アクションだけです——そしてそのインストール自体が再スキャンを実行します。拒否されたドラフトは隔離に残ります。
デスクトップ由来のスキルはskill_type: desktop-sopを持ち、computer-useタスクとして再生されます:ステップごとに、各ステップ後のスクリーンショット検証付きで、最初の失敗で停止します。
ケイパビリティゲート
Section titled “ケイパビリティゲート”5つのツールはすべてdeny-by-defaultです。MCPディスパッチゲートは、呼び出し元エージェントのagent.tomlの[capabilities] recording = trueと、呼び出し元キーのrecording MCPスコープの両方を要求します——どちらか一方でも欠けていれば拒否、フェイルクローズです。記録はオペレーターがエージェントごとに有効化するものであり、どのエージェントでも勝手に手を伸ばせるものではありません。
暴走対策とファイルシステム衛生
Section titled “暴走対策とファイルシステム衛生”- 記録が無音で行われることはありません:開始と停止は、それぞれ明示的な返信とログシグナルを生成します。
- ハードな自動停止が、各セッションをデフォルト30分(設定で最大2時間まで)で打ち切ります——止め忘れた記録が無制限に走ることはありません。
- 成果物は
~/.duduclaw/recordings/<id>/に、所有者限定のパーミッション(ディレクトリ700、ファイル600。WindowsはプロファイルのACLを継承)で置かれます。 - 記録idは厳格な
rec-<timestamp>-<hex>形式に従い、ファイルシステムで使われる前に検証されます——idはパスコンポーネントなので、それ以外のものはすべて拒否されます。 - 50 MBを超えるHARはインプロセスでパースされません(OOM保護)。
*_record_stopは、ワーカーが成果物をフラッシュするのを最大30秒待ちます。
| 項目 | 制限 |
|---|---|
| セッション長 | デフォルト30分、ハード上限2 h |
| インプロセスでパースするHAR | ≤ 50 MB |
| デスクトップ入力キャプチャ | ウィンドウタイトルのみ、キーストロークなし |
| デスクトッププラットフォーム | macOS(画面収録の権限が必要) |
| インストール経路 | 承認パイプラインのみ——直接インストールなし |