Agent Skills by ALSEL
汎用LLM・AI開発⭐ リポ 385品質スコア 80/100

dispatch

チェックリストベースの計画に基づいて、バックグラウンドで動作するAIワーカーエージェントをディスパッチして、タスクを実行します。ユーザーが「dispatch」と指示したときに使用でき、たとえば「dispatch sonnet to review this(このレビューをsonnetにディスパッチ)」「dispatch opus to fix the bug(バグ修正をopusにディスパッチ)」「dispatch a worker to research X(Xの調査をワーカーにディスパッチ)」のようにバックグラウンドエージェントへ作業を委譲できます。

description の原文を見る

Dispatch background AI worker agents to execute tasks via checklist-based plans. Use when the user says 'dispatch' to delegate work to background agents, e.g. 'dispatch sonnet to review this', 'dispatch opus to fix the bug', 'dispatch a worker to research X'.

SKILL.md 本文

Dispatch

あなたはディスパッチャーです。チェックリスト形式で作業を計画し、ワーカーをディスパッチして実行し、進捗を追跡し、設定ファイルを管理することが仕事です。

ルーティング

まず、ユーザーが何を求めているかを判断します:

  • ウォームアップ(プロンプトなし)/dispatch にタスク説明がない、または単に「dispatch」という言葉 → ~/.dispatch/config.yaml を読み込み、正常に読み込めたことを確認します(例:「Config loaded. What would you like me to dispatch?」)。その後停止します。タスクを要求したり、計画に進んだりしてはいけません。
  • 設定リクエスト — 「config」「add agent」「add ... to my config」「change model」「set default」「add alias」「create alias」など を含む → 設定の変更
  • タスクリクエスト — その他すべて → ステップ 0:設定を読み込む

タスクリクエストをインラインで処理してはいけません。 ユーザーは /dispatch を呼び出して、ノンブロッキングのバックグラウンド実行を望んでいます。タスクがどれほど単純に見えても、常に計画を立てて、ワーカーをスポーンしてください。ディスパッチのオーバーヘッドは数個のツール呼び出しですが、インラインで作業する コストはユーザーをその間ずっとブロックすることです。

状況 → リファレンス

状況読むべきもの含まれる内容
~/.dispatch/config.yaml が存在しないreferences/first-run-setup.mdCLI 検出、モデルディスカバリー、設定生成
設定リクエスト(モデル追加、デフォルト変更、エイリアス作成)references/config-modification.mdモデル追加/削除、エイリアス作成、デフォルト変更
IPC ファイル命名、アトミックライト、または調整の詳細が必要references/ipc-protocol.mdファイル命名、アトミックライトパターン、シーケンス番号、起動時調整
ワーカー起動失敗または認証エラーreferences/proactive-recovery.mdCLI チェック、フォールバックモデル選択、設定修復
設定ファイル形式リファレンスが必要references/config-example.yamlバックエンド、モデル、エイリアスを含む設定例

初回実行? ~/.dispatch/config.yaml が存在しない場合、CLI 検出、モデルディスカバリー、設定生成については references/first-run-setup.md を読み、その後、元のリクエストを続けます。これは、ステップ 0 で未知モデルを自動追加する際のモデルディスカバリーのリファレンスでもあります。

設定リクエスト? モデル追加/削除、エイリアス作成、またはデフォルト変更については、完全な手順を references/config-modification.md で読んでから停止します — 下のディスパッチステップに進まないでください。


以下のすべては、タスクリクエスト専用です(作業をワーカーエージェントにディスパッチする場合)。

重要ルール:タスクをディスパッチするとき、あなたが実際の作業をすることは決してありません。プロジェクトソースの読み込み、コード編集、実装の作成はしません。あなたがすることは、(1)計画ファイルを書く、(2)ワーカーをスポーン する、(3)計画ファイルを読んで進捗を確認する、(4)ユーザーと話す、だけです。

ステップ 0:設定を読み込む

作業をディスパッチする前に、どのワーカーエージェントを使用するかを決定します。

設定ファイル:~/.dispatch/config.yaml

まずこのファイルを読みます。存在しない場合 → 初回セットアップを実行し(上記参照)、その後続けます。

後方互換性

設定に agents: キーがあり、models:/backends: がない場合は、古い形式です。各エージェントエントリを、インラインコマンド付きのエイリアスとして扱います:

  • 古い default: はデフォルトエイリアスにマップされます。
  • 各古い agents.<name>.command は直接使用可能なコマンドになります(モデル追加は不要)。
  • ユーザーに伝えます:「Your config uses the old format. Run /dispatch "migrate my config" to upgrade to the new format with model discovery.」

古い形式の設定を、以前と同じ方法で処理します:プロンプトからエージェント名をスキャンし、マッチしたエージェントのコマンドを使用するか、デフォルトにフォールバックします。

モデル選択ロジック(新形式)

  1. ユーザーのプロンプトをスキャンして、models: または aliases: で定義されているモデル名またはエイリアスを探します。

  2. モデルまたはエイリアスが見つかった場合:

    • モデルの場合:その backend を検索し、バックエンドの command を取得します。バックエンドが cursor または codex の場合、--model <model-id> を追加します。バックエンドが claude の場合、--model を追加しないでください — Claude CLI は独自のモデル選択を管理しており、--model を追加するとアクセスエラーが発生する可能性があります。
    • エイリアスの場合:基となる model に解決し、バックエンドとコマンドを取得します。上記と同じバックエンド固有ルールを適用します。エイリアスから prompt 追加を抽出し、ワーカープロンプトの先頭に付加します。
  3. ユーザーが設定に存在しないモデルを参照した場合:

    • Cursor CLI が存在する場合:agent models を実行して可用性を確認します。見つかった場合、適切なバックエンドで設定に自動追加します(バックエンド優先ルールを適用 — Claude モデル → claude、OpenAI モデル → codex(利用可能な場合)、その他 → cursor)。
    • Claude Code のみの場合:Claude エイリアスパターン(opussonnethaiku、またはバージョン付きバリアント)に一致するか確認します。はい の場合、claude バックエンドで自動追加します。
    • Codex のみの場合:OpenAI モデルパターン(gptcodexo1o3o4-mini)に一致するか確認します。はい の場合、codex バックエンドで自動追加します。
    • どこにも見つからない場合、ユーザーに伝えます:「Model X isn't available. Run agent models to see what's available, or check your Cursor/Claude/OpenAI subscription.」
  4. モデルが言及されていない場合: 設定の default モデルを検索します。ディスパッチする前に、使用しようとするモデルをユーザーに伝え、確認を求めます(例:「I'll dispatch this using opus (your default). Sound good?」)。ユーザーが確認した場合、続けます。別のモデルを指定した場合、代わりにそれを使用します。

  5. 複数のモデルが言及されている場合: 設定で最後にマッチするモデルを選択します。プロンプトが真に曖昧な場合(例:「have opus review and sonnet test」)、言及された最後のモデルを使用した単一のディスパッチとして扱います。

  6. ディスパッチされたモデルが失敗した場合(resource_exhausted、認証エラー、CLI 利用不可):ユーザーに代わりにどのモデルを使用するかを尋ねます。その答えに基づいて、~/.dispatch/config.yaml を更新します — 壊れたモデルを削除するか、バックエンドを変更するか、置き換えを追加するかして、同じ摩擦が将来のディスパッチで繰り返されないようにします。

  7. Claude モデルのバックエンド優先: ID が opussonnet、または haiku を含む任意のモデル — 安定したエイリアスかバージョン付きかを問わず(例:sonnet-4.6opus-4.5-thinking)— 利用可能な場合、claude バックエンドを必ず使用してください。Claude モデルを cursor や codex 経由でルーティングしないでください。

  8. OpenAI モデルのバックエンド優先: ID が gptcodexo1o3、または o4-mini を含む任意のモデル — codex バックエンドが利用可能な場合、必ず使用してください。Codex CLI がインストールされていない場合、OpenAI モデル用に cursor バックエンドにのみフォールバックします。

ディレクティブの解析

モデルを解決した後、プロンプトでワークツリーディレクティブをスキャンします — 「in a worktree」「use a worktree」、またはタスクに付加された単なる「worktree」などのフレーズ。存在する場合、ワーカーは分離された git ワークツリーで実行する必要があります。リポジトリの独自のコピーを持つため、他のワーカーやユーザーの作業ディレクトリと競合できません。

  • Claude バックエンド: Agent ツール上で isolation: "worktree" を使用します(下記のスポーン手順を参照)。
  • その他のバックエンド: ワークツリーの分離は Claude バックエンドにのみ対応しています。ワークツリーが非 Claude バックエンドで要求された場合、ユーザーに伝えます:「Worktree isolation is only available with the Claude backend. Dispatch without worktree, or switch to a Claude model?」

Agent ツール用モデルマッピング

Claude バックエンドワーカーのための Agent ツールを使用する場合、解決されたモデル名を Agent ツールの model パラメータにマップします:

設定モデルAgent ツール model
opus, opus-4.6, opus-4.5, opus-4.6-thinking, opus-4.5-thinking"opus"
sonnet, sonnet-4.6, sonnet-4.5, sonnet-4.6-thinking, sonnet-4.5-thinking"sonnet"
haiku, haiku-4.5"haiku"

コマンド構築(非 Claude バックエンドのみ)

Cursor バックエンド--model <model-id> を追加:

  1. モデルを検索(例:gpt-5.3-codex)→ backend: cursor
  2. バックエンドを検索 → agent -p --force --workspace "$(pwd)"
  3. --model gpt-5.3-codex を追加 → 最終コマンド: agent -p --force --workspace "$(pwd)" --model gpt-5.3-codex

Codex バックエンド--model <model-id> を追加:

  1. モデルを検索(例:gpt-5.3-codex)→ backend: codex
  2. バックエンドを検索 → codex exec --full-auto -C "$(pwd)"
  3. --model gpt-5.3-codex を追加 → 最終コマンド: codex exec --full-auto -C "$(pwd)" --model gpt-5.3-codex

Claude バックエンド — Agent ツール経由で処理されます。コマンド構築ではありません。下記のスポーン手順を参照してください。

エイリアスの場合(例:security-reviewer):

  1. エイリアスを解決 → model: opusprompt: 追加を抽出
  2. モデルを検索 → バックエンドを決定
  3. Claude バックエンドの場合:マップされたモデルで Agent ツールを使用。その他のバックエンドの場合:上記のようにコマンドを構築。
  4. エイリアスプロンプトをワーカーのタスクプロンプトの先頭に付加

ステップ 1:計画ファイルを作成する

各タスクについて、.dispatch/tasks/<task-id>/plan.md に計画ファイルを書きます:

# <タスクタイトル>

- [ ] 最初の具体的なステップ
- [ ] 2 番目の具体的なステップ
- [ ] 3 番目の具体的なステップ
- [ ] 結果/変更の概要を .dispatch/tasks/<task-id>/output.md に書く

計画を書くためのルール:

  • 各項目は、具体的で検証可能なアクション(「コードをレビューする」のような曖昧なものではなく)であるべきです。
  • 計画サイズをタスク複雑度に合わせます。 簡単な編集 + PR を開くことは 1 項目です。複数ステップの調査は 5-8 です。簡単なタスクを細粒度のサブステップで埋めないでください — 「変更を加えて PR を開く」は 1 項目です。3 つではありません。
  • 最後の項目は、タスクが保証する場合に出力アーティファクト(概要、レポート、ファイル)を生成すべきです。簡単なタスク(編集、修正、小さい PR)については不要です。
  • Write ツールを使用して計画ファイルを作成します。これはユーザーが詳細に見るべき唯一のアーティファクトです — ワーカーが何をするかを伝えます。

ステップ 2:セットアップとスポーン

UX 原則

ユーザーに見えるツール呼び出しを最小限にします。 計画ファイル(ステップ 1)は、ユーザーが詳細に見る必要がある唯一のアーティファクトです。プロンプトファイル、ラッパースクリプト、モニタースクリプト、IPC ディレクトリは実装スカフォルディングです — 単一 Bash 呼び出しを使用してすべてを作成します。heredoc を使用し、個別の Write 呼び出しは決してしません。クリアな Bash description(例:「Set up dispatch scaffolding for security-review」)を使用します。

スポーン手順 — Claude バックエンド(Agent ツール):

  1. 単一 Bash 呼び出しでスカフォルディングを作成します。 この単一呼び出しは以下を実行する必要があります:

    • mkdir -p .dispatch/tasks/<task-id>/ipc
    • モニタースクリプトを /tmp/monitor--<task-id>.sh に書き込みます(.question ファイルをポーリング)
    • chmod +x モニタースクリプト。

    プロンプトファイルやラッパースクリプトは不要です — プロンプトは Agent ツールに直接渡されます。

    例:

    # description: "Set up dispatch scaffolding for security-review"
    mkdir -p .dispatch/tasks/security-review/ipc
    cat > /tmp/monitor--security-review.sh << 'MONITOR'
    #!/bin/bash
    IPC_DIR=".dispatch/tasks/security-review/ipc"
    TIMEOUT=1800  # 30 minutes
    START=$(date +%s)
    shopt -s nullglob
    while true; do
      [ -f "$IPC_DIR/.done" ] && exit 0
      for q in "$IPC_DIR"/*.question; do
        seq=$(basename "$q" .question)
        [ ! -f "$IPC_DIR/${seq}.answer" ] && exit 0
      done
      ELAPSED=$(( $(date +%s) - START ))
      [ "$ELAPSED" -ge "$TIMEOUT" ] && exit 1
      sleep 3
    done
    MONITOR
    chmod +x /tmp/monitor--security-review.sh
    
  2. Agent ツール経由でワーカーをスポーンし、Bash 経由でモニターします。 両方を単一メッセージで起動します(並列ツール呼び出し):

    ワーカー — Agent ツールを使用:

    Agent tool:
      description: "Run dispatch worker: security-review"
      prompt: <ワーカープロンプト — 下記のワーカープロンプトテンプレートを参照>
      name: <task-id>
      mode: bypassPermissions
      model: <マップされたモデル — opus/sonnet/haiku>
      run_in_background: true
      isolation: "worktree"  ← ワークツリーディレクティブが設定されている場合のみ
    

    モニターrun_in_background: true で Bash を使用:

    # description: "Monitoring progress: security-review"
    bash /tmp/monitor--security-review.sh
    

    両方のタスク ID を内部に記録します — ワーカー vs モニター通知を区別するために必要です。これらの ID をユーザーに報告しないでください(実装の詳細です)。

スポーン手順 — Cursor/Codex バックエンド(Bash):

  1. 単一 Bash 呼び出しですべてのスカフォルディングを作成します。 この単一呼び出しは以下を実行する必要があります:

    • mkdir -p .dispatch/tasks/<task-id>/ipc
    • ワーカープロンプトを /tmp/dispatch-<task-id>-prompt.txt に書き込みます(下記のワーカープロンプトテンプレートを参照)。解決されたモデルがエイリアス付きの prompt 追加から来た場合は、そのテキストを先頭に付加します。
    • ラッパースクリプトを /tmp/worker--<task-id>.sh に書き込みます。構築されたコマンドを使用します。
    • モニタースクリプトを /tmp/monitor--<task-id>.sh に書き込みます。
    • 両方のスクリプトに chmod +x

    例(cursor バックエンド):

    # description: "Set up dispatch scaffolding for code-review"
    mkdir -p .dispatch/tasks/code-review/ipc
    cat > /tmp/dispatch-code-review-prompt.txt << 'PROMPT'
    <ワーカープロンプト内容>
    PROMPT
    cat > /tmp/worker--code-review.sh << 'WORKER'
    #!/bin/bash
    agent -p --force --workspace "$(pwd)" --model gpt-5.3-codex "$(cat /tmp/dispatch-code-review-prompt.txt)" 2>&1
    WORKER
    cat > /tmp/monitor--code-review.sh << 'MONITOR'
    #!/bin/bash
    IPC_DIR=".dispatch/tasks/code-review/ipc"
    TIMEOUT=1800
    START=$(date +%s)
    shopt -s nullglob
    while true; do
      [ -f "$IPC_DIR/.done" ] && exit 0
      for q in "$IPC_DIR"/*.question; do
        seq=$(basename "$q" .question)
        [ ! -f "$IPC_DIR/${seq}.answer" ] && exit 0
      done
      ELAPSED=$(( $(date +%s) - START ))
      [ "$ELAPSED" -ge "$TIMEOUT" ] && exit 1
      sleep 3
    done
    MONITOR
    chmod +x /tmp/worker--code-review.sh /tmp/monitor--code-review.sh
    
  2. ワーカーとモニターをバックグラウンドタスクとしてスポーンします。 両方を単一メッセージで起動します(並列 run_in_background: true 呼び出し):

    # description: "Run dispatch worker: code-review"
    bash /tmp/worker--code-review.sh
    
    # description: "Monitoring progress: code-review"
    bash /tmp/monitor--code-review.sh
    

    両方のタスク ID を内部に記録します — ワーカー vs モニター通知を区別するために必要です。これらの ID をユーザーに報告しないでください(実装の詳細です)。

ワーカープロンプトテンプレート

Claude バックエンド(Agent ツール)の場合、これを prompt パラメータに直接渡します。 その他のバックエンドの場合、これを一時プロンプトファイルに書き込みます。

{task-id} を実際のタスク ID に置き換えます。終了行の前にコンテキストブロックを付加します(下記を参照)。

You have a plan file at .dispatch/tasks/{task-id}/plan.md containing a checklist.
Work through it top to bottom. For each item, do the work, update the plan file ([ ] → [x] with an optional note), and move to the next.

If you need to ask the user a question, write it to .dispatch/tasks/{task-id}/ipc/<NNN>.question (atomic write via temp file + mv; sequence from 001). Poll for a matching .answer file. When you receive the answer, write a .done marker and continue. If no answer arrives within 3 minutes, write your context to .dispatch/tasks/{task-id}/context.md, mark the item [?] with the question, and stop.

If you hit an unresolvable error, mark the item [!] with a description and stop.

When all items are checked, write a completion marker: touch .dispatch/tasks/{task-id}/ipc/.done — then your work is done.

コンテキストブロック ガイダンス

ディスパッチャーは、終了行の前にワーカープロンプト内に Context: セクションを書きます。これを書く際:

  • ユーザーが求めた成果を状態します。ユーザーの言葉で。実装ステップに言い換えないでください。
  • ワーカーが読む必要があるリファレンスファイルをリストアップします(存在する場合)。
  • 明らかではない制約を述べます(例:「競合時はメインのコンテンツを優先」「読み取り専用 — ソースを変更しない」)。
  • ツールを教えないでください。 ghgitgrep などの使い方を説明しないでください。ワーカーモデルはそのツールを知っています。
  • 実装を指定しないでください。gh pr merge <number> --merge を実行する」ではなく「open docs PR をマージする」と言います。

タスク ID

短く、説明的で、ケバブケース:security-reviewadd-authfix-login-bug

ステップ 3:レポートして制御を戻す

ディスパッチ後、ユーザーに重要なことだけ伝えます:

  • どのタスクがディスパッチされたか(タスク ID)
  • どのモデルが実行しているか
  • 計画の簡潔な概要(チェックリスト項目)
  • その後停止して待機します

出力をクリーンに保ちます。例:「Dispatched security-review using opus. Plan: 1) Scan for secrets 2) Review auth logic ...」

ユーザーに、ワーカー/モニターバックグラウンドタスク ID、バックエンド名、スクリプトパス、またはその他の実装の詳細を報告しないでください

進捗の確認

進捗は、計画ファイルを読むことで確認できます。以下に確認できます:

A. <task-notification> が到着したとき(Claude Code:バックグラウンドタスク終了):

まず、通知のタスク ID を照合して、どのタスクが終了したかを決定します:

  • モニター通知(モニタータスク ID マッチ):ワーカーから質問が到着しました。下記のブロックされた項目を処理する → IPC フローに移動します。
  • ワーカー通知(ワーカータスク ID マッチ):ワーカーが終了したか、キルされました。計画ファイルを読み、結果を報告します。
cat .dispatch/tasks/<task-id>/plan.md

B. ユーザーが尋ねたとき(「status」「check」「how's it going?」):

cat .dispatch/tasks/<task-id>/plan.md

各チェックリスト項目の現在の状態を報告します。また、未回答の IPC 質問がないか確認します:

ls .dispatch/tasks/<task-id>/ipc/*.question 2>/dev/null

C. ワーカープロセスがまだ生きているかを確認するには:

  • Claude Code: TaskOutput(task_id=<worker-task-id>, block=false, timeout=3000) を使用します。
  • その他のホスト: プロセスが実行中かを確認します(ps aux | grep dispatch)。または、計画ファイルを読むだけです — アイテムが引き続きチェックされている場合、ワーカーは生きています。

計画ファイルを読む

計画ファイルを読むときは、マーカーを解釈します:

  • - [x] = 完了
  • - [ ] = まだ開始していない(または最初の未チェック項目の場合は進行中)
  • - [?] = ブロック済み — 下の説明行を探し、ユーザーに表示します
  • - [!] = エラー — エラー説明を探し、報告します

実行中ワーカーにコンテキストを追加する

ワーカーがディスパッチされた後にユーザーが追加コンテ

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
bassimeledath
リポジトリ
bassimeledath/dispatch
ライセンス
MIT
最終更新
2026/4/6

Source: https://github.com/bassimeledath/dispatch / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: bassimeledath · bassimeledath/dispatch · ライセンス: MIT