2026/10/10(土)

家で腰を入れて一日AIに向き合っていた。というのは、ここしばらくはバイト先から使え使えと言われてCodexを叩き続けているのだが、どうも権限周りの管理を雑にしてしまっている。フルアクセスにするのは怖いので逐次確認しているのだが、クソみたいに長いワンライナーを繰り出してくるので結局隅から隅までは確認できていないまま許可を押しまくっているわけだ。これでは実質フルアクセスと変わらない。なので真面目に権限設定や道具立てを頑張ってみた。

まず、真面目に必要なコマンドだけ許可することを考える。今どきのハーネスは賢いらしく、例えばcommand1 arg; command2 argみたいなワンライナーがあったらcommand1 argとcommand2 argに分けてそれぞれを解釈して権限許可を行ってくれるのである。じゃあ許可したいコマンドを適宜ちゃんと許可すればいいんじゃない?ということになるわけだが、ここでWindows環境のCodex特有の問題がある。

何か権限的な必要性があってサンドボックス外実行をする場合、Codexはどうやらpwsh.exe -Command "command1 arg; command2 arg"のようなコマンド実行をする判定になるらしいのだ。そしてこれはpwsh.exeを呼び出す単一のコマンド実行となり、パースによる個別のコマンドの判定は下されない。そうすると個別コマンドに対する許可ではどうにもならなくなってしまうのである。PowerShellではなくGit Bashをエージェントシステムのシェルとして使わせたらどうなんだ?と思ったのだが、どうやらWindowsのCodexではPowerShellから切り替えることはできないらしい。GPTはいいが、Codexはうんこだ。

いろいろ試したが少なくとも今のWindowsのCodexではこれはどうしようもなさそうなので、OpenCodeに乗り換えることにした。OpenCodeは簡単にシェルを切り替えることができる。パースもちゃんとやってくれる。いいことづくめだ。ただ欠点として、

  • 権限管理はできるがCodexやClaude Codeのようなサンドボックス機能はない
  • Codexに標準で付いている多数のskillがない

という事情がある。ただこれらは自力で環境を整えることでギリ頑張れるラインと思われたので頑張ることにした。

とりあえず日常的に使うので権限的にできて欲しいことをいくつかスキルやMCPとして整え、権限許可などをした。

  • デバイス列挙
  • シリアルモニタ
  • Webデータ取得
  • いくつかの開発環境におけるビルド
  • マイコンへの書き込みなど

OpenCode標準機能でWebFetchは存在するのだが、驚いたことにこいつは画像やPDFなどは落とせない。純粋にテキスト系のMIME typeファイル以外は落とせないように意図的に作ってある。おそらくはモデルが読めるデータだけを扱うという意味合いだと思うのだが、いやいや普通にPDF落として扱ってくださいよ。ということでシンプルなWebFetchツールを別途制作してモデルに使わせることにした。

さらに、許可してない方法で作業しようとしてはじかれてすぐ諦めるのが問題だったので、「自分が何を許可されているか」を確認するMCPを作成した。そしてそれを活用するようシステムプロンプト(グローバルなAGENTS.md)で指示した。これで弾かれたときに許可されている作業方法を探索してくれるようになった。話はずれるが、GPTはどうしてもWindowsだとPowerShellを使おうとするので、AGENTS.mdでbashの中にいることも明示した。

これで日常作業の道具的にはある程度できたのだが、しかしサンドボックス環境がないのがやはり痛い。実務上スクリプトの実行は必須だ。スクリプト開発が目的にあるためにデバッグ目的で実行するのはあるし、そうでなくても複雑なバッチ処理用にモデルがPythonをサラッと書いて実行することはある。そういうのは安全な範囲で許可したい。しかしコマンド単位での許可ではPython経由でなんでもやられてしまう。

調べたところ、AnthropicがClaude Codeのサンドボックス機能を単体で提供しているっぽいので次はこれを試してみたいと思う。

https://github.com/anthropic-experimental/sandbox-runtime

Categories: