Dropstone Docs

パーミッション

どのアクションが承認を必要とするかを制御します。

Dropstone は permission 設定を使用して、特定のアクションを自動的に実行するか、確認を求めるか、またはブロックするかを決定します。

レガシーの tools ブール値設定は廃止されました。permission にマージされています。古い tools 設定は後方互換性のためにまだサポートされています。


アクション

各パーミッションルールは以下のいずれかに解決されます:

  • "allow": 承認なしで実行
  • "ask": 承認を求める
  • "deny": アクションをブロック

設定

* でグローバルにパーミッションを設定し、特定のツールをオーバーライドできます。

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": {
    "*": "ask",
    "bash": "allow",
    "edit": "deny"
  }
}

すべてのパーミッションを一度に設定することもできます:

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": "allow"
}

細粒度ルール(オブジェクト構文)

ほとんどのパーミッションでは、オブジェクトを使用してツール入力に基づいて異なるアクションを適用できます。

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": {
    "bash": {
      "*": "ask",
      "git *": "allow",
      "npm *": "allow",
      "rm *": "deny",
      "grep *": "allow"
    },
    "edit": {
      "*": "deny",
      "packages/web/src/content/docs/*.mdx": "allow"
    }
  }
}

ルールはパターンマッチで評価され、最後にマッチしたルールが優先されます。一般的なパターンは、キャッチオール "*" ルールを最初に配置し、より具体的なルールをその後に配置することです。

ワイルドカード

パーミッションパターンは単純なワイルドカードマッチングを使用します:

  • * は任意の文字の 0 個以上にマッチ
  • ? は正確に 1 文字にマッチ
  • その他すべての文字は文字通りにマッチ

ホームディレクトリ展開

パターンの開始時に ~ または $HOME を使用して、ホームディレクトリを参照できます。これは特に external_directory ルールに便利です。

  • ~/projects/* -> /Users/username/projects/*
  • $HOME/projects/* -> /Users/username/projects/*
  • ~ -> /Users/username

外部ディレクトリ

external_directory を使用して、Dropstone が起動されたワーキングディレクトリの外側のパスに触れるツール呼び出しを許可します。これはパスを入力として受け取るすべてのツール(例えば readeditglobgrep、および多くの bash コマンド)に適用されます。

ホーム展開(~/... など)はパターンの書き方にのみ影響します。外部パスを現在のワークスペースの一部にするわけではないため、ワーキングディレクトリの外側のパスは external_directory 経由で許可する必要があります。

例えば、~/projects/personal/ の下のすべてへのアクセスを許可します:

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": {
    "external_directory": {
      "~/projects/personal/**": "allow"
    }
  }
}

ここで許可されたディレクトリは、現在のワークスペースと同じデフォルトを継承します。read はデフォルトで allow なので、オーバーライドしない限り、external_directory の下のエントリに対しても読み取りが許可されます。編集をブロックしながら読み取りを保つなど、これらのパスでツールを制限する必要がある場合は、明示的なルールを追加します:

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": {
    "external_directory": {
      "~/projects/personal/**": "allow"
    },
    "edit": {
      "~/projects/personal/**": "deny"
    }
  }
}

信頼できるパスのリストに焦点を当て、他のツール(例えば bash)に対して必要に応じて追加の許可または拒否ルールを層状に適用します。


利用可能なパーミッション

Dropstone パーミッションはツール名でキー付けされ、いくつかのセーフティガードが付いています:

  • read: ファイルの読み取り(ファイルパスにマッチ)
  • edit: すべてのファイル変更(editwritepatch をカバー)
  • glob: ファイルグロビング(グロブパターンにマッチ)
  • grep: コンテンツ検索(正規表現パターンにマッチ)
  • bash: シェルコマンド実行(git status --porcelain のような解析されたコマンドにマッチ)
  • task: サブエージェント起動(サブエージェントタイプにマッチ)
  • skill: スキル読み込み(スキル名にマッチ)
  • lsp: LSP クエリ実行(現在は非細粒度)
  • question: 実行中のユーザー質問(現在は非細粒度)
  • webfetch: URL フェッチ(URL にマッチ)
  • websearch: ウェブ検索(クエリにマッチ)
  • external_directory: ツールがプロジェクトワーキングディレクトリの外側のパスに触れるときにトリガー
  • doom_loop: 同じツール呼び出しが同一入力で 3 回繰り返されるときにトリガー

デフォルト

何も指定しない場合、Dropstone は許容的なデフォルトから開始します:

  • ほとんどのパーミッションはデフォルトで "allow" です。
  • doom_loopexternal_directory はデフォルトで "ask" です。
  • read"allow" ですが、.env ファイルはデフォルトで拒否されます:
{
  "permission": {
    "read": {
      "*": "allow",
      "*.env": "deny",
      "*.env.*": "deny",
      "*.env.example": "allow"
    }
  }
}

「Ask」の動作

Dropstone が承認を求めるとき、UI は 3 つの結果を提供します:

  • once: このリクエストのみ承認
  • always: 提案されたパターンにマッチする将来のリクエストを承認(現在の Dropstone セッションの残り)
  • reject: リクエストを拒否

always が承認するパターンのセットはツールによって提供されます(例えば、bash 承認は通常 git status* のような安全なコマンドプレフィックスをホワイトリストに登録します)。


エージェント

エージェントごとにパーミッションをオーバーライドできます。エージェントパーミッションはグローバル設定とマージされ、エージェントルールが優先されます。詳細を学ぶ エージェントパーミッションについて。

Note:

より詳細なパターンマッチングの例については、上記の 細粒度ルール(オブジェクト構文) セクションを参照してください。

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": {
    "bash": {
      "*": "ask",
      "git *": "allow",
      "git commit *": "deny",
      "git push *": "deny",
      "grep *": "allow"
    }
  },
  "agent": {
    "build": {
      "permission": {
        "bash": {
          "*": "ask",
          "git *": "allow",
          "git commit *": "ask",
          "git push *": "deny",
          "grep *": "allow"
        }
      }
    }
  }
}

Markdown でエージェントパーミッションを設定することもできます:

---
description: 編集なしのコードレビュー
mode: subagent
permission:
  edit: deny
  bash: ask
  webfetch: deny
---

コードのみを分析し、変更を提案します。

ヒント:

引数を含むコマンドにはパターンマッチングを使用します。"grep *"grep pattern file.txt を許可しますが、"grep" だけではブロックします。git status のようなコマンドはデフォルト動作で機能しますが、引数が渡される場合は明示的なパーミッション("git status *" など)が必要です。

Ctrl+I