コンテンツにスキップ

Permissions

Reyn の Permission システムは、ファイルパス、シェル、MCP ツール、名前付きツール、Python preprocessor ステップへのアクセスをゲートします。デフォルトは保守的です。デフォルト外のものには、Skill レベルの宣言とユーザーの承認、またはプロジェクト全体の事前承認(reyn.yaml)が必要です。

デフォルト付与(宣言不要)

Op スコープ
file.read / file.glob / file.grep プロジェクトルート(CWD)配下の任意のパス。
file.write / file.edit / file.delete <CWD>/.reyn/ または <CWD>/reyn/ 配下のみ。

これらのデフォルト外のものはすべて宣言が必要です。

Skill の宣言(skill.md frontmatter の permissions:

Phase レベルの permissions: は削除されました。すべての Permission 宣言は skill.md frontmatter に記載します — skill-md.md を参照してください。Phase はスキルが宣言したものを継承します。

---
type: skill
name: example
entry: main
final_output: result
permissions:
  shell: true
  mcp: [my_server]
  tool: [web_search]
  file:
    read:
      - path: ~/notes
        scope: recursive
    write:
      - path: /tmp/output
        scope: just_path
  python:
    - module: stats
      function: compute
      mode: safe
      timeout: 30
---

shell

この Phase で shell Control IR op を有効にするには true。デフォルトはオフ。

shell: true でも、ランタイムの起動に --allow-shell が必要です。そうでなければ op は shell_not_allowed を発行します。

mcptool

Phase が呼び出せる MCP サーバー名 / 名前付きツール ID のリスト。

file.read / file.write

デフォルトゾーン外のパス向け。各エントリーは以下を持ちます:

  • path — 絶対パス、または CWD からの相対パス。~ は展開されます。
  • scopejust_path(この正確なパス)または recursive(このパスとその以下のすべて)。

file.writewriteeditdelete op をカバーします。

python

python preprocessor ステップの(モジュール、関数)ごとの宣言。reference/dsl/preprocessor.md を参照してください。

  • modulefunction — 対応する preprocessor ステップと一致しなければなりません。
  • modesafe(サンドボックス)または unsafe(AST サンドボックスなし;ランタイムで --allow-unsafe-python が必要)。
  • timeout — 親が子を SIGKILL するまでのウォールクロック秒数。デフォルト 30

Web op(Tier 1 — デフォルト許可)

web_searchweb_fetchTier 1 です: 宣言なしでデフォルトで通過します。使用に際して permissions: エントリーは不要です(FP-0022)。

reyn.yaml でプロジェクト全体をブロックできます:

permissions:
  web.search: deny   # すべての web_search op をブロック
  web.fetch: deny    # すべての web_fetch op をブロック
  web.fetch: allow   # 明示的に事前承認(ラン時プロンプトを完全スキップ)

これは Tier 2-3 op(shellmcp)とは異なります。Tier 2-3 は op を試みる前に skill.md で明示的な宣言が必要です。

承認フロー(インタラクティブ)

Phase がデフォルト外の Permission を宣言すると、Reyn は単一の起動時プロンプトを表示します:

[approval] my_skill/file.write needs:
  /tmp/output (just_path)

  [y] allow this run only
  [j] persist approval for this exact path + skill
  [r] persist approval for the parent dir (recursive) + skill
  [N] deny

永続的な選択は <skill>/<op>/<path> をキーとして .reyn/approvals.yaml に記録されます(recursive 付与の場合は末尾に /)。外部 Skill は別の Skill の承認を再利用できません。キーは Skill スコープで、権限昇格を防ぎます。

プロジェクト全体の事前承認(reyn.yaml

permissions:
  shell: allow
  file.write: allow         # すべての Skill のすべての write 系 op を付与
  python:
    safe: allow             # すべての safe モードの python ステップを自動承認
    unsafe: allow           # ランタイムの --allow-unsafe-python も必要
    allowed_modules:
      - math
      - statistics
      - mypackage

プロジェクトが信頼できる場合にのみ allow を使用してください。ask(デフォルト)はプロンプトを表示し、deny は拒否します。

非インタラクティブなラン(CI、eval)

reyn eval は非インタラクティブで実行されます。プロンプトはありません。承認は reyn.yaml または .reyn/approvals.yaml(例えば、最初にインタラクティブでターゲット Skill を実行して保存)に事前に準備されている必要があります。

確認と取り消し

reyn permissions list             # 保存された承認を表示
reyn permissions revoke <key>     # 承認を削除

関連情報