Permission を管理する¶
目的: 過剰に信頼を広げることなく、Skill に適切なケイパビリティを付与し、後から承認を確認・取り消す。
Permission を設定する 3 か所¶
| レイヤー | 格納先 | 粒度 |
|---|---|---|
| Phase の宣言 | Phase の frontmatter | Phase ごと + (op, パス) ごと |
| 保存された承認 | .reyn/approvals.yaml |
(Skill, op, パス) ごと |
| プロジェクト全体の事前承認 | reyn.yaml の permissions: |
op kind ごと |
デフォルトは保守的です。その他はすべてオプトインです。理由については Permission モデルのコンセプト を参照してください。
Phase で宣言する¶
---
type: phase
name: writeout
input: report
permissions:
shell: false
file:
write:
- path: /tmp/output
scope: just_path
python:
- module: stats
function: compute
mode: safe
timeout: 30
---
scope: just_path は正確なパスに一致します。recursive はディレクトリとそのすべての子孫に一致します。
起動時に承認する¶
Skill がデフォルトにない何かを必要とする場合、ランタイムはプロンプトを表示します:
[approval] my_skill/file.write needs:
/tmp/output (just_path)
[y] allow this run only
[j] persist for this exact path + skill
[r] persist for the parent dir (recursive) + skill
[N] deny
j と r は .reyn/approvals.yaml に書き込みます。
プロジェクト全体で事前承認する¶
# reyn.yaml
permissions:
shell: allow
file.write: allow
python:
safe: allow
unsafe: allow # ランタイムの --allow-unsafe-python も必要
allow はプロンプトを完全に削除します。ask(デフォルト)はプロンプトを表示します。deny は拒否します。
保存された承認を確認する¶
出力は Skill ごと、次に op kind ごとにエントリーをグループ化します:
取り消す¶
eval モード¶
reyn eval は非インタラクティブです。ターゲット Skill が必要とするすべての承認を事前に準備してください:
reyn runでターゲットを一度実行し、[j]または[r]で永続化する、またはreyn.yamlで事前承認する。
事前承認がない場合、eval ケースは未完了として報告されます。