一键导入
org-setup
組織の全ロール(窓口・ディスパッチャー・キュレーター・ワーカー)に必要な Claude Code の許可設定・環境変数を一括で配置・更新するスキル。 「設定して」「許可設定を更新して」「セットアップして」 「permissions設定」「org-setup」等で発動する。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
組織の全ロール(窓口・ディスパッチャー・キュレーター・ワーカー)に必要な Claude Code の許可設定・環境変数を一括で配置・更新するスキル。 「設定して」「許可設定を更新して」「セットアップして」 「permissions設定」「org-setup」等で発動する。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
ワーカーClaudeを派遣して作業を委譲する。窓口は司令塔であり、 手を動かす実作業は原則としてワーカーに任せる。 ユーザーから作業の依頼を受けたとき、ファイル編集・実装・調査等の 実作業が発生する場合に発動する。
open Issue を triage して「次の仕事候補(N 件 + 推奨 1 件)」を窓口が人間へ提示する。 決定的ツール tools/work_discovery_scan.py を 1 回実行し、その候補 JSON を 設計書 §5.2 の人間可読フォーマットでレンダリングするところで停止する(propose-only)。 起動主体は窓口に限定。手動 / イベント起動のみ(常駐 /loop なし)。 「次の仕事候補出して」「triage して」「次なにやる?」や PR マージ後の proactive next-dispatch で窓口が手動起動する。
蓄積された生の学び(knowledge/raw/)を整理・統合する。 ディスパッチャーが worker クローズ時の閾値チェック (tools/check_curate_threshold.py) 超過でオンデマンド起動した キュレーターから 1 回だけ呼び出される(常駐 /loop は廃止)。 手動で「知見を整理して」と言われたときにも使う。
委譲プロセスの振り返り。ワーカーへの作業委譲が完了したとき、 委譲の進め方自体を振り返り、プロセス改善の知見を記録する。 さらに、完了タスクの作業パターンをwork-skillとして蓄積すべきか判断する。 実作業の技術的な振り返りはワーカーが自動的に行うため、ここでは扱わない。
skill の棚卸し(廃止候補 / 重複統合 / owner 明記チェック)。 状態ベースで発火する: 候補キュー knowledge/skill-candidates.md の pending が 5 件以上、 または .claude/skills/ 配下の work-skill 数(org-* を除く)が 20 以上になった場合のみ実行。 時間ベースの /loop では起動しない(変化の無い日に raw ログを汚す副作用を避けるため)。
作業パターンを skill 化すべきか判定する共通スキル。org-retro と org-curate から呼ばれ、 「skill 化推奨 / 候補止まり / curated ノートのまま」の 3 値と根拠を返す。 自動 skill 化はせず、推奨は machine-local な knowledge/skill-candidates.local.md に追記し、 窓口が候補キューが溜まった時点でバッチで人間に問い合わせる二段構え。
| name | org-setup |
| description | 組織の全ロール(窓口・ディスパッチャー・キュレーター・ワーカー)に必要な Claude Code の許可設定・環境変数を一括で配置・更新するスキル。 「設定して」「許可設定を更新して」「セットアップして」 「permissions設定」「org-setup」等で発動する。 |
| effort | low |
| allowed-tools | ["Read","Edit","Write","Bash(python tools/org_setup_prune.py:*)","Bash(py -3 tools/org_setup_prune.py:*)","Bash(python tools/check_role_configs.py:*)","Bash(py -3 tools/check_role_configs.py:*)"] |
組織の各ロールが必要とする permissions allow と環境変数を、 正しいスコープの settings ファイルに配置する。
輸送層 両系(
ORG_TRANSPORT: 既定renga/ opt-inbroker): 本スキルが配る messaging MCP の allow は 既定renga(ORG_TRANSPORT無設定)でmcp__renga-peers__*tier。references/permissions.mdは renga アンカー(byte 比較対象)として不変であり、broker への置換は prose ではなく生成/検証ツール側で行う:tools/org_setup_prune.py(per-role allow /--user-common-allowlist)とtools/check_role_configs.pyがORG_TRANSPORT=brokerのときmcp__renga-peers__*ブロックを broker messaging tier(mcp__org-broker__*)に射影する(runtime のtransport_allowlistdescriptor 駆動、Epic #6 E)。既定 renga は恒等(生成物 byte 等価・file no-op)なので本スキルの手順・報告文はそのまま使えばよい。設計 SoT は transport-labdocs/design/ja-migration-plan.md§5.3、契約面はdocs/contracts/backend-interface-contract.mdSurface 8(ratified 2026-06-14)。
Claude Code は起動ディレクトリの .claude/ 配下から設定を読み込む。
サブディレクトリで起動した場合、親ディレクトリの設定は読み込まれない。
そのため、ロールごとに独立した設定ファイルが必要になる。
| スコープ | ファイルパス | 対象 |
|---|---|---|
| ユーザー共通 | ~/.claude/settings.json | 全プロジェクト・全ロール |
| 窓口 | <repo>/.claude/settings.local.json | リポジトリルートで起動した窓口 |
| ディスパッチャー | <repo>/.dispatcher/.claude/settings.local.json | .dispatcher/ で起動したディスパッチャー |
| キュレーター | <repo>/.curator/.claude/settings.local.json | .curator/ で起動したキュレーター |
| ワーカー | ワーカーディレクトリの .claude/settings.local.json | org-delegate が動的に作成 |
references/permissions.md に全ロールのJSON定義がある。以下の手順でこれを参照する。
以下の4ファイルを読み取る(存在しない場合は空オブジェクト扱い):
~/.claude/settings.json<repo>/.claude/settings.local.json<repo>/.dispatcher/.claude/settings.local.json<repo>/.curator/.claude/settings.local.json各ファイルについて、上記「各ロールの必要設定」と比較し、不足しているエントリを特定する。
不足分を追加する。既存の設定は絶対に削除しない。
permissions.allow は配列なので、既存エントリを保持しつつ新規エントリを追加する。
env はオブジェクトなので、既存キーを保持しつつ新規キーを追加する。
変更があった場合:
設定を更新しました:
- ~/.claude/settings.json: renga, renga-peers の許可を追加
- .dispatcher/.claude/settings.local.json: claude 起動コマンドの許可を追加
- (変更なし: .curator/.claude/settings.local.json)
変更がなかった場合:
全ての設定は最新です。変更はありません。
--prune モード)通常の Step 1〜3 は additive-only(不足分を追加するだけで既存は削除しない)。
過去に蓄積した広すぎる allow や旧エントリは残り続けるため、
permissions.md を SOT として settings.local.json を完全に書き換える prune モードを用意している。
実行は tools/org_setup_prune.py を使う:
# 差分プレビュー(書き換え無し)
python tools/org_setup_prune.py --role secretary --dry-run
python tools/org_setup_prune.py --all --dry-run
# 実行(タイムスタンプ付き .bak を自動生成 → 書き換え)
python tools/org_setup_prune.py --role secretary
python tools/org_setup_prune.py --all
対象ロール: secretary / dispatcher / curator。
(user_common は ~/.claude/settings.json で他プラグインと同居するため対象外。
ワーカーは org-delegate が動的生成するため対象外。)
settings.local.override.jsonprune は permissions.md の role テンプレートで丸ごと書き換えるため、
個人で追加した allow / env / hook をそのままにすると消えてしまう。
これを避けるため、各 settings ファイルと同じディレクトリに
settings.local.override.json を置くと、prune 時に deep-merge される。
例: 窓口で Bash(my-private-tool:*) を恒久的に許可したい場合は
.claude/settings.local.override.json に以下を書く(このファイルは
prune ツールが読むだけで、書き換えはしない):
{
"permissions": {
"allow": ["Bash(my-private-tool:*)"]
}
}
マージ規則:
permissions.allow / permissions.deny: base 順を保ったまま和集合env: キー単位 merge(override 側が勝つ)hooks.PreToolUse[] 等: 等値判定で重複排除した上で append.gitignore 対象(個人設定のため。.gitignore:23-25 で .claude/settings.local.override.json と
.claude/settings.local.json.bak.* を ignore 済み。.curator/.claude/ と .dispatcher/.claude/
配下はディレクトリごと ignore のため自動的に対象)。チームで共有したい設定は
permissions.md 側に追加し、schema (tools/org_extension_schema.json) も同時に更新する。
tools/check_role_configs.py は同じ override ファイルを読み、その allow を
closed-world 検証から除外する(_load_override_allow)。よって override に追加した
個人 allow は CI / --include-local で unknown allow entry にならない。
ただし forbidden_allow_exact(Bash(git *) 等の wide allow)と
disallow_allow_regex(旧 mcp__claude-peers__*、現 renga-peers 等)は override 側にあっても
従来通り ERROR となる。安全契約は override で迂回できない。
{claude_org_path} の解決(窓口 / dispatcher / worker)窓口・dispatcher・worker のテンプレートには {claude_org_path} プレースホルダがある
(hook command を絶対パスで固定するため。相対パスだと cwd が org ルート以外のロールで
hook が解決されず、ガードが無言で無効化する)。prune ツールは以下の優先順で解決する:
--claude-org-path <abs> 引数settings.local.json の env.CLAUDE_ORG_PATHbash "<abs>/.hooks/..." の <abs>--root、既定はリポジトリルート)。<root>/.hooks/ に schema の
required_hook_scripts が全て実在する場合のみ採用する窓口テンプレートには env.CLAUDE_ORG_PATH が無いため、初回実行では 2 も 3 も取れず 4 で解決される。
4 の条件を満たさない(org checkout ではない)場合は unresolved placeholders で中断するので、
誤った --root の内容が黙って書き込まれることはない。.hooks/ ディレクトリの実在だけを条件に
すると、たまたま同名ディレクトリを持つ無関係なプロジェクトを org root として受理し、
存在しないスクリプトを指す hook(=生成時点で死んでいるガード)を書いてしまうため。
いずれも取れない場合(fresh install など)は --claude-org-path を明示する:
python tools/org_setup_prune.py --role dispatcher --claude-org-path "C:/Users/me/work/claude-org"
書き換え前に settings.local.json.bak.YYYYMMDD-HHMMSS を同ディレクトリに作成する。
失敗時はこの .bak を mv で戻せば原状復帰できる。
不要であれば --no-backup で抑止できる。
--user-common-sandbox、Issue #429 Task B / C)⚠️ main pull 後の 1 回必須: 本リポジトリを clone / pull した後に
python tools/org_setup_prune.py --user-common-sandboxを 1 回実行する。Issue #429 Task C で共有.claude/settings.jsonから個人 path(~/.config/gh/hosts.ymlおよびRead(~/.ssh/*)/Read(~/.aws/*))を除去したため、未実行だと 個人環境の sandbox denyRead 補強が一時的に弱くなる。
--user-common-sandbox は ~/.claude/settings.json の sandbox.filesystem.denyRead に対してのみ idempotent な union-merge を行う専用モード(他キーは無触):
# diff プレビュー
python tools/org_setup_prune.py --user-common-sandbox --dry-run
# 実行(既存があれば .bak 自動生成、上書き候補がない場合は no-op)
python tools/org_setup_prune.py --user-common-sandbox
対象ディレクトリ(~/.ssh / ~/.aws / ~/.config/gh / ~/.kube / ~/.gnupg / ~/.docker / ~/.config/aws-vault)のうち、実在し、かつ realpath が HOME を escape しない symlink でない ものだけが追加される。WSL2 + DriveFS の ~/.aws → /mnt/c/... のようなケースは自動 skip(bwrap bootstrap 失敗の予防)。
仕様詳細は .claude/skills/org-setup/references/permissions.md の「ユーザー共通の sandbox denyRead 補強」節を参照。
settings.local.json は .gitignore に入っている前提(個人設定のため)~/.claude/settings.json は既存の設定(plugins 等)を壊さないよう注意するtools/org_setup_prune.py の docstring と tools/test_org_setup_prune.py のテストが正典