内部資料 / 社外配布禁止 / 画面共有・スクショ・印刷時注意
DRY-RUN / 設計案 — 実ファイル未変更。CEO 承認後に実装フェーズへ移行
CHAPTER 03 / AKIYAMA / SCOPE-ISOLATION-DESIGN

スコープ越境防止設計案

作成: 秋山さん(秘書・統括) / 2026-06-09 / ステータス: CEO レビュー待ち

0. 2026-06 スコープ越境事故の概要と原因

事故サマリ

会社 main セッションから、個人立替金管理簿(finance_ai スコープ)を、会社経理担当エージェントが触ってしまった。

  • 実害: 文字色の条件付き書式変更のみ(データ・PII 変更なし)
  • 根本原因: スプシ ID を照合せず「証憑管理簿っぽい → A10 会社経理だろう」と早合点
  • 副次懸念: 会社側 OAuth 認証で個人立替スプシへの書き込みが成功した= Drive スコープ分離が効いていない疑い

原因の二層構造

原因層具体的な問題対策層
認知ガード不足 セッションが「どのスコープで動いているか」を視覚的に把握できなかった 層① scope ラベル
ID 照合なし スプシ ID = スコープのマッピングが単一ソースで存在せず、照合習慣もなかった 層② ID 判別表
Drive スコープ分離不足 会社経理エージェントの OAuth 権限で個人スプシへの書き込みが成功してしまった 別途 CEO 判断(今回の設計スコープ外、承認論点に記載)

層①: セッション scope ラベル仕様(視認性)

1-A. front matter フィールド追加仕様

~/claude/sessions/<id>.md の front matter に scope: フィールドを追加する。

--- # sessions/akiyama-a1b2c3d4.md の front matter 例 session_id: akiyama-a1b2c3d4 agent: akiyama task_name: スコープ越境防止設計 scope: company # ← 新規追加フィールド status: active started_at: 2026-06-09T10:00:00+09:00 ---

scope の候補値

意味対象スプシ/Drive 例ダッシュボード色
company 会社経理・A10 証憑・業務一般 A10 証憑管理簿, A10 Drive 青(現在と同じ)
personal_finance 個人立替・personal_finance Drive 個人立替金管理簿, 個人立替ルートフォルダ 赤+警告アイコン
client クライアント案件(白石・三宅エリア) Connect8_Clients Drive 配下
shared 横断業務(秋山・トラジ系) Connect8_Internal Drive 配下
1-B. 自動判定ロジック案(init_session.sh への追加)

セッション開始時、cwd(作業ディレクトリ)またはタスク名から自動で scope: を推定し front matter に書き込む。

1
cwd ベース判定(一次)
5_Personal/personal_finance/ 配下 → personal_finance
2_Areas/A08_client_support/ 配下 → client
2_Areas/A07_internal_dev/ 配下 → shared
それ以外の ~/claude/ 配下 → company(デフォルト)
2
タスク名ベース上書き(二次・任意)
環境変数 CLAUDE_SCOPE が設定されている場合はそちらを優先。
例: CLAUDE_SCOPE=personal_finance claude で起動
!
判定不能時の挙動
scope が特定できない場合は scope: unknown を設定し、ダッシュボードで「スコープ未設定」として黄色表示する。エージェントは作業開始前に自分で明示することを促す。

注意: cwd ベースは「どのフォルダで起動したか」であり、作業中に別スコープのファイルを触ることは防げない。あくまで視認性の補助。実効ガードは層②が担う。

層②: ID 判別表 & 相互ブラックリスト(実効ガード)

2-A. scope_id_registry — ID → スコープ単一ソース

配置先の推奨

3_Resources/R02_org_docs/scope_id_registry.md

理由: R02_org_docs は「組織ドキュメント」エリアで全エージェントが参照する単一ソース。既存の drive_master.md(Drive ID 一覧)と同じ階層に並べることで「ID 系の情報は R02_org_docs を見る」という習慣を統一できる。

ファイル構成案

# scope_id_registry.md — スプシ/Drive ID → スコープ対応表 # 更新者: 秋山さん / 更新日: YYYY-MM-DD # ルール: 新規 ID を使う前に必ずここに登録してからアクセス ## スプレッドシート | ID | 名称(概要) | スコープ | 担当エージェント | アクセス禁止スコープ | |---|---|---|---|---| | 1F6PTXD3... | A10 証憑管理簿 | company | うーぱん | personal_finance | | 1-uvcFG7... | 個人立替金管理簿 | personal_finance | finance_ai | company, client | ## Drive フォルダ | ID | 名称(概要) | スコープ | 担当 | アクセス禁止スコープ | |---|---|---|---|---| | 1RbqJDW0... | A10 Drive ルート | company | うーぱん | personal_finance | | 1l8cHIc3... | 個人立替ルートフォルダ | personal_finance | finance_ai | company, client | | 1m5z2YKF... | Connect8_Clients | client | 白石/三宅 | personal_finance | | 1HYzDs6u... | Connect8_Internal | shared | 全社 | personal_finance | | 1kG_eWFJ... | CAC Drive | company | 黒柳 | personal_finance |

ID の表記方針: このファイルには ID の先頭 8 文字のみ記載(上記)し、フルIDは drive_master.md の参照にとどめる。設計書に金融スコープのフルIDを書き残さないため。

2-B. アクセス前照合フロー
1
スプシ/Drive ID を手に入れたとき
「このIDが何のスプシか」が確実にわかっていても、scope_id_registry.md で照合してからアクセスする。
2
自分のスコープと照合
「アクセス禁止スコープ」列に自分の scope 値があれば即アクセス中止。
3
registry 未登録の場合
未登録 ID への書き込みは禁止。読み取りも CEO 確認後に限る。まず CEO に「このIDは何のスプシですか?」と問い合わせ、registry 登録後にアクセスする。
!
「証憑管理簿っぽい」などの推定アクセスは禁止
ファイル名・タイトルではなく、必ず ID で照合する。

scope_id_registry.md — 完全仕様

項目仕様
ファイルパス~/claude/3_Resources/R02_org_docs/scope_id_registry.md
更新権限秋山さん(CEO 確認後に更新)
参照義務スプシ/Drive の読み取り・書き込み前に必ず参照(うーぱん, finance_ai, 白石, 三宅, 黒柳 全エージェント)
ID 表記フル ID(照合用途のため全文必要。ただし表示はこのファイル内に限り OK)
新規 ID 登録CEO が新スプシ/フォルダを作成した際に秋山さんが必ず追記。担当エージェントが追記提案 → 秋山さんが承認・反映
削除スプシ削除・アーカイブ時に行を削除せず「廃止」列を追加して履歴保持

相互ブラックリスト文面案(CLAUDE.md への追記)

会社側 CLAUDE.md 追記案(A10 / うーぱん を含む会社エリア全般)

追記先候補: ~/claude/2_Areas/A07_internal_dev/CLAUDE.md の「セキュリティルール」セクション、または ~/claude/CLAUDE.md の「AI エージェントのスコープ制限」セクション内

## スコープ越境禁止ルール(2026-06-09 追加) ### 会社経理エージェント(うーぱん)の禁止事項 BLACKLIST(個人立替スコープ) 以下の ID を持つスプシ・フォルダに対して、読み取り・書き込みを問わず一切アクセス禁止# 個人立替金管理簿(finance_ai スコープ) DENY: 1-uvcFG7UE_FxJqtDfjDbTUZgKwDaN28KObCfMHw90cE # 個人立替ルートフォルダ(finance_ai スコープ) DENY: 1l8cHIc3j0SMFzlfMhLbgPfR9ftoW_seN # スコープ判定フロー 1. スプシ/Drive ID を確認 2. ~/claude/3_Resources/R02_org_docs/scope_id_registry.md で照合 3. アクセス禁止スコープに自分の scope が含まれていれば即中断 4. registry 未登録なら CEO に確認してから登録後アクセス 「個人立替」「finance_ai」「personal_finance」という文脈が出てきた時点で 会社経理タスクを即時停止し、CEO に確認すること。
個人側 CLAUDE.md 追記案(5_Personal/personal_finance/CLAUDE.md)

追記先: ~/claude/5_Personal/personal_finance/CLAUDE.md

## スコープ越境禁止ルール(2026-06-09 追加) ### finance_ai エージェントの禁止事項 BLACKLIST(会社経理スコープ) 以下の ID を持つスプシ・フォルダに対して、読み取り・書き込みを問わず一切アクセス禁止。 個人金融の文脈で「証憑管理簿」や「A10」という用語が出ても、会社側 ID にアクセスしないこと。 # 会社 A10 証憑管理簿(うーぱん / 会社経理スコープ) DENY: 1F6PTXD3ckob3EeglnS7gyjSG6RM0CS-PKRaoBwzXK-E # 会社 A10 Drive ルート(会社経理スコープ) DENY: 1RbqJDW00aQGi9eqhaTdG_K0girAVHdkl # Connect8_Clients Drive(クライアントスコープ) DENY: 1m5z2YKFtE3t9G-HMLe82zkHJmA11YIKr # 照合フロー(会社側と同じ) 1. ~/claude/3_Resources/R02_org_docs/scope_id_registry.md で ID を照合 2. アクセス禁止スコープに personal_finance が含まれていない場合でも 会社・クライアントスコープ ID への書き込みは禁止 3. 不明な ID は CEO に確認してから登録後アクセス

照合運用ルール(エージェント共通)

財務系スプシ・Drive を触る前の必須チェック

1.
ID の確認 — タスク・会話・コンテキストから操作対象の ID を特定する。「名前」「タイトル」で判断しない。
2.
scope_id_registry.md の照合 — ID が registry に存在するか確認。スコープと「アクセス禁止スコープ」列を読む。
3.
自スコープとの照合 — 自分の scope: 値が「アクセス禁止スコープ」に含まれていれば即中断。
!
未登録 ID の書き込みは絶対禁止 — registry に存在しない ID への書き込みは行わない。CEO に問い合わせ→ 登録後にアクセス。
!
「証憑管理簿っぽい」は禁止ワード — ファイル名・シート名・タイトルによる推定アクセスは禁止。ID 照合のみが正式な確認手段。

会社経理(うーぱん)セッション特有の追加ルール

会社経理タスクを受けた場合、冒頭で以下を宣言してから作業を開始する:

# うーぱんセッション開始時の宣言(テンプレート) scope: company 対象 ID: [操作予定の ID] registry 照合: 完了 / 該当スコープ: company 個人立替 ID へのアクセス: 禁止確認済み

トラジへの実装依頼タスク(CEO 承認後に発注)

以下は設計案承認後、トラジ(A07 社内開発)への発注リスト。現時点では発注しない。

TASK-T1 / 優先度: 高
init_session.sh: scope フィールド自動付与
  • セッション開始時に cwd を元に scope: を自動判定して sessions/<id>.md front matter に書き込む
  • 判定ロジック: 本設計書「1-B」の cwd ベース判定表に従う
  • 環境変数 CLAUDE_SCOPE が設定されている場合はそちらを優先
  • 判定不能時は scope: unknown にフォールバック
TASK-T2 / 優先度: 高
ダッシュボード: scope 色分け表示
  • セッションカードの scope: 値に応じて背景色を変える
  • 色仕様: company=青、personal_finance=赤+警告アイコン、client=緑、shared=紫、unknown=黄
  • 参照先: sessions/<id>.md の front matter
  • 修正対象: 2_Areas/A07_internal_dev/dashboard/ 配下のダッシュボード HTML/JS
TASK-T3 / 優先度: 中
ID 照合ヘルパー: check_scope.py
  • scope_id_registry.md を読み込み、指定 ID のスコープと禁止スコープを返す CLI ツール
  • 使い方: python3 check_scope.py <drive_id> --current-scope company
  • 出力: 「ALLOW」または「DENY: 理由」
  • 配置先: 2_Areas/A07_internal_dev/tools/check_scope.py
  • 将来的には各エージェントの Drive 操作スクリプトに import して自動照合に使う
TASK-T4 / 優先度: 低(CEO 確認事項と連動)
Drive OAuth スコープ分離の実態調査
  • 会社経理エージェントの OAuth トークン(うーぱん用)で、個人立替スプシへの書き込みが成功した原因を調査
  • Drive 共有設定の見直し提案を秋山さんに報告
  • 対策: 個人立替フォルダを会社 OAuth アカウントの「見えない」共有設定に変更するか、ALLOWED_PARENT_IDS ホワイトリストを追加するか検討

CEO への承認依頼論点

論点 1: scope_id_registry.md のフル ID 記載方針

registry には照合のためフル ID を記載する必要があるが、R02_org_docs/ は GitHub バックアップ対象。 プライベートリポジトリ(hq-command-center)なので現時点ではリスク低だが、 finance 系フル ID をファイルに書くことへの CEO の懸念があれば別途検討する。 代替案: フル ID は ~/_credentials/scope_registry.env に置き、registry には先頭8文字のみ記載し照合は Python ヘルパーが env から読む方式。

論点 2: Drive OAuth スコープ分離(TASK-T4 発注判断)

会社経理 OAuth で個人立替スプシへの書き込みが成功した= Drive 共有設定の問題か OAuth スコープの問題かを切り分ける必要がある。 TASK-T4 はこの調査タスクだが、調査結果次第では Drive 共有設定の変更が必要になる(実害なしでも副次懸念として残る)。 TASK-T4 を今回の承認セットに含めるかどうか確認したい。

論点 3: 個人側 CLAUDE.md の存在確認

5_Personal/personal_finance/CLAUDE.md が現在存在するか確認が必要。 存在しない場合は新規作成になるが、personal_finance エリアの CLAUDE.md 新規作成は CEO の確認を取ってから行う。

設計の要点まとめ(各層 3 行以内)

要点
層①
scope ラベル
sessions/<id>.md の front matter に scope: フィールドを追加し、cwd ベースで自動判定する。
ダッシュボードで personal_finance を赤・警告色で表示し、視認性を高める。
あくまで「認知補助」であり、実効ガードは層②が担う。
層②
ID 判別表
R02_org_docs/scope_id_registry.md を単一ソースとして新設し、ID → スコープ・アクセス禁止スコープを管理する。
会社側・個人側それぞれの CLAUDE.md にブラックリスト(相手スコープの ID を明示的に DENY)を追記する。
「ファイル名での推定アクセス禁止・必ず ID 照合」を運用ルールとして全エージェントに適用する。