現場監督と記録係
AIの記憶を整理棚で管理。CPOSを通した作業は帳面に記録し、危ない作業はそのまま進めずに人間に回す部品。
- 構成
- 2 点セット(記憶の核 + 実行の現場)
- 型番
- Context Pointer OS v0.1 / Engine-Zero v0.1.2
- 電源
- Python 3
- 状態
- 研究デモ / 防御的ランタイム
- ライセンス
- MIT
これは何?
工事現場の監督さんと、作業日誌の係がいっしょになったようなもの。
道具は整理棚に「何番の棚」とだけ書いておき、監督を通した作業は日誌に書く。危ない作業は「監督の確認待ち」の箱に入れる。
AIに長い仕事を任せると、2つの困りごとが出てきます。ひとつは記憶があふれること。何でも頭(AIが一度に読める文章の量)に詰め込むと、すぐいっぱいになります。もうひとつは勝手に危ないことをすること。失敗したコマンドを何度もやり直したり、確認なしで公開したり。
CPOS は、2 つの部品でこれに取り組みます。
- Context Pointer OS(記憶の核):記憶を外の棚にしまい、AIの頭には「何番の棚」という札(ポインタ)だけを置く。必要なときに取り出し、使わない物は棚に戻す。
- CPOS Engine-Zero(実行の現場):CPOSを通した作業を、書き足すだけの帳面(Task Tape)に記録する。監査ログは鎖のようにつながっていて、書き換えられると気づける。秘密・削除・本番・公開などの危ない作業は、自動では進めず「人間の確認待ち」の列に並べる。
AI「このファイルを直して、テストを走らせたいです」
CPOS が日誌に記録。中身そのものではなく「大きさ・指紋(ハッシュ)・状態」だけを残す。
危ない作業なら「確認待ち」の箱へ。人間が見てOKを出すまで進まない。
OKが出たら、本物とは切り離した箱の中で試す。失敗したら、やり直し計画を作って人間に返す。
この部品がすること
- 記憶を札(ポインタ)で管理して、頭をすっきりさせる
- CPOSを通した作業を追記式の帳面に記録する(書き換えに気づける)
- 危ない作業を人間の確認待ちに回す
- 試すときは、ネットにつながらない隔離された箱の中で(既定の設定)
この部品がしないこと
- 確認なしで公開(push)・削除・本番の変更をすること
- 秘密の値や、コマンドの出力そのものを帳面に残すこと
- 外のAIから頼まれたコマンドを、自分で勝手に実行すること
- CPOSを通さずにAIが直接やった操作まで見張ったり止めたりすること
- MCP の道具を実際に動かすこと(既定では予行演習だけ)
012 つのリポジトリ
| リポジトリ | 役割 | 状態 |
|---|---|---|
context-pointer-os | LLM のコンテキストを RAM、外部ストレージを Disk とみなすメモリ管理層。Context Pointer・ページング・分岐・ACL・Watchdog | v0.1 研究デモ |
cpos-engine-zero | Context Pointer OS を含む防御的エージェントランタイム。Task Tape・審査ゲート・改ざん検知つき監査・MCP コネクタ審査・サンドボックス | v0.1.2(GitHub Release) |
02Context Pointer OS
会話履歴をコンテキストに詰め込む代わりに、Context Pointer(#ctx)で情報を mount / swap / 保護する、長文脈エージェント向けの仮想メモリ層です。
| 機能 | 内容 |
|---|---|
| Context Pointers | 記憶への軽い参照。プロンプトをきれいに保ちつつ、Registry から必要時に呼び戻す |
| Cognitive RAM & Paging | アクティブなポインタだけがプロンプトを占有。上限に達すると未使用のものを要約・swap |
| Speculative Branching | 仮説を隔離した分岐で試し、明示的に COMMIT / ROLLBACK するまで本体の記憶に影響しない |
| Watchdog | 安定度の指標がしきい値を超えると、割り込みでコンテキストをリセット |
| ACL | ポインタ単位のロールベースのアクセス制御 |
git clone https://github.com/kagioneko/context-pointer-os
cd context-pointer-os
export PYTHONPATH=$PYTHONPATH:$(pwd)/src
python3 src/cpos/demo_core.py
--- [BOOTLOADER] Starting Runtime Sequence ---
[BOOT] Step 1: >MEM:LOAD #ctx7 !9 (System State)
[BOOT] Step 2: >MEM:LOAD #ctx20 !9 (Agent Identity)
...
--- [WATCHDOG IRQ] SYSTEM ANOMALY DETECTED ---
System Status after Watchdog IRQ: Stable (corruption=0.0)
命令は 2 種類。4 文字の機械語 AIT([Domain][ID][Action][Priority]、例 m1l5 = Memory ctx1 Load 優先度5)と、人間向けのアセンブリ EAP(例 >MEM:LOAD #ctx1 !5)。
03Engine-Zero の構成
User / Agent Input
|
Context Router classify: relationship / task / hybrid / dangerous
|
+-------------+-------------+---------------+----------------+
| Context | Task Tape | State/Runtime | Security Gates |
| Pointer OS | append-only | short-lived | auth / policy |
+-------------+-------------+---------------+----------------+
|
Review-Gated Execution Pipeline
|
Persistence Boundary
Store: hashes, sizes, statuses, pointers, audit metadata
Never store: secrets, raw stdout/stderr, raw diff, request bodies
関係の記憶・タスクの実行履歴・短命なランタイム状態を分けて持ち、層をまたぐ情報は管理されたポインタと審査済みの Task Tape イベントだけで渡します。失敗したコマンドや一時的な状態で長期記憶が汚れないようにするためです。
04起動とプリフライト
git clone https://github.com/kagioneko/cpos-engine-zero
cd cpos-engine-zero
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
# 起動前の点検(プロファイル・Docker・HMAC 鍵・クライアント証明書など)
.venv/bin/python -m cpos.preflight --profile hardened
# 点検と設定の適用は別。サーバーにもプロファイルを明示する
CPOS_SECURITY_PROFILE=hardened .venv/bin/python server.py # PORT(既定 8080)。certs/ に証明書があれば HTTPS
待ち受けアドレスに注意
server.pyは0.0.0.0で待ち受けます(全インターフェイス)。手元で試すときは、ファイアウォールやコンテナでポートを外から届かないようにしてください。certs/cert.pemとcerts/key.pemがないと HTTP にフォールバックします(ログに警告が出ます)。
05セキュリティプロファイル
CPOS_SECURITY_PROFILE で姿勢を切り替えます。プロファイルが設定するのは既定値だけで、個別に明示した変数が優先されます。現在の姿勢と検証結果は GET /security-profile で確認できます。
| profile | 意図 |
|---|---|
dev | 自由度が高い。ローカルサンドボックス可、API 認証・レート制限・クライアント証明書は既定オフ |
audit | 観察優先。permissive サンドボックス、クライアント証明書は audit モード |
hardened | 本番向けの fail-closed。HTTPS・API 認証・HMAC 認証・クライアント証明書・strict サンドボックス・レート制限・承認ゲートが既定オン |
このほか、HMAC・Bearer トークン・mTLS フィンガープリント・IP 許可リスト・レート制限のミドルウェアがあります。
06サンドボックス
検証は既定で強化した Docker サンドボックスの中で動きます(CPOS_SANDBOX_MODE)。
| mode | 挙動 |
|---|---|
strict | Docker 必須。使えなければ fail closed。本番推奨 |
permissive | Docker 優先。使えなければローカル実行に落ち、その旨を結果のメタデータに記録 |
local-dev | 開発専用の明示的なローカル実行(CPOS_ALLOW_LOCAL_DEV_RUN=true が必要) |
Docker のフラグ:--read-only --cap-drop ALL --security-opt no-new-privileges --network none --memory / --cpus --pids-limit、/tmp は noexec の tmpfs、プロジェクトは /app に読み取り専用でマウント。上限は CPOS_SANDBOX_MEMORY / CPOS_SANDBOX_CPUS / CPOS_SANDBOX_PIDS_LIMIT で調整します。
07審査つき実行ループ
危ない段階はすべて審査を通し、失敗は「自動で再実行」ではなく、メタデータだけのやり直し計画になります。
GitHub PR dry-run
-> GitHub diff review
-> Sandbox patch plan
-> Sandbox execution review
-> Isolated sandbox run
-> Completed result metadata
-> Retry review -> Replan template -> Diff intake checklist
-> Auto Fix Candidate -> Diff Review Draft
-> Human-supplied GitHub diff review
-> Back to sandbox execution
- この計画・審査の段階では、branch・commit・push・PR は作られません
- diff の本文は審査・実行の入力として受け取りますが、Task Tape には保存しません
- stdout / stderr の本文は保存せず、ハッシュ・サイズ・終了コード・状態フラグだけを残します
- 検証コマンドは許可リスト方式で、シェルのメタ文字は拒否されます
人間の確認待ちは GET /human-escalations にまとまります。承認・却下は、それぞれの審査の持ち主のエンドポイント(例 /sandbox/executions/<task_id>/reject)に戻して行い、承認の窓口を二重に作りません。
08外部エージェント連携
別のエージェント(Codex 系など)の横に、防御用のランタイムとして置けます。外部エージェントは「やりたいこと」や「やった結果」をメタデータとして送り、CPOS はそれを記録して、危ないものを確認待ちに回します。外部エージェントのコマンドを CPOS が実行することはありません。
POST /agent-adapter/intake # command_request / execution_result などを送る
GET /agent-adapter/actions # 審査待ちの契約
GET /agent-adapter/execution-results
GET /human-escalations
承認は「この契約を確認した」という意味で、「今すぐ実行してよい」ではありません。入門は docs/EXTERNAL_AGENT_5_MIN_GUIDE.md、スキーマは docs/AGENT_ADAPTER_SCHEMA.md、秘密を含まない送信例は examples/payloads/。
MCP 対応は意図的に控えめです。コネクタ定義は静的に検査・審査されてから登録され(リモートは https:// を必須とし、https://user:token@host のように URL に資格情報を埋め込んだ定義は拒否。認証情報は環境変数の秘密ファイルで渡すのが前提)、実行要求は dry-run(メタデータのみ)。実際の MCP ツール実行は既定で無効です。
09取扱上の注意
ご使用の前に必ずお読みください
- Context Pointer OS は研究デモです。テストは 54 件中 53 件が通り、1 件(別マシンのパスを決め打ちしたテスト)は失敗します。
- Engine-Zero のダッシュボードやデモ用エンドポイントは、メタデータ(件数・ハッシュ・状態)だけを見せる作りです。デモの画面に「安全」と出ても、それは審査の状態を示しているだけです。
- 本番に置く前に、リポジトリの
SECURITY.mdとOSS_RELEASE_CHECKLIST.mdを確認してください。 hardenedの検証は多くが助言(advisory)です。fail closed になるのは、個々のゲート自体がそう作られているものだけです。