入館証に区画を足すのと、全部の鍵を渡すのは違う

入館証に区画を足すのと、全部の鍵を渡すのは違う

工場の入館証には、入れる区画が書いてあります。事務棟までの人、製造ラインまで入れる人、薬品を扱う棟に入れる人。同じ会社の中で、持っている紙が違います。

全部の区画に入れる証を配れば、仕事は速くなります。取りに行くのに誰かを呼ばなくて済むし、鍵を借りる手続きも要りません。それでもそうしないのは、間違って入る事故のほうが高くつくからです。

だから、必要になった人の証に区画を一つ足します。全部の鍵を渡すのではなく、一区画だけ足す。手間はかかりますが、足した範囲が紙に書いてあるので、あとから何が起きたかを追えます。

範囲を広げるときは、どこまで広げたかが残る形にしておきます。

そのファイルが見つかりません

ターミナルで動く AI に、アプリの表示を直させようとしています。MulmoTerminal は AI を何枚ものマスに並べて見張るための画面です。無料で、オープンソースとして公開されています。

~/src/acme-web       ← いまここで作業している
~/src/acme-shared    ← 表示の部品はこっちにある

AI にこのボタンの色を直してと頼みます。そのファイルが見つかりませんと返ってきます。

AI は作業フォルダの中しか読めない

これは制限というより、既定として正しい挙動です。

AI が動いているのは acme-web の中です。そこから見て acme-shared は外なので、読めません。

もし読めてしまったら、AI はパソコンのどこでも読み書きできることになります。入館証に何も書いていないのと同じ状態です。

でも今回は、読んでほしいところが外にあります。

これまではエディタが必要だった

複数のフォルダを同時に開けるエディタなら、この問題は起きません。両方を開いておけばいい。

ターミナルの AI は作業フォルダを一つしか持たないので、そこだけできませんでした。

追加のフォルダを宣言する

プロジェクトの設定に書けます。

{
  "addDirs": ["../shared-lib", "/Users/me/notes"]
}

そのフォルダで次に開く会話から、両方が読めるようになります。相対パスでも絶対パスでも書けます。

入館証に区画を一つ足したのと同じ状態です。

相対パスの基準が、事故になりやすい

ここが一番大事な部分です。

相対パスは、この設定ファイルがあるフォルダを基準に解決します。"../shared-lib" はプロジェクトの隣であって、AI が実際に動いている場所の隣ではありません。

なぜこの区別が要るのか。

作業用に切ったフォルダは、プロジェクトから遠い場所に作られます。そこを基準に ../shared-lib を解決すると、まったく別の場所を指すことになります。そこには何もありません。

基準は設定ファイルの場所です。書いた人が見ている景色と一致します。

作業フォルダには引き継がれない

関連して、この設定は作業フォルダに引き継がれません。理由は権限の話です。

作業フォルダを基準に解決すると、黙って別のフォルダを許可してしまいます。この設定は AI が読み書きしてよい場所の宣言なので、それが意図しない場所を指すのは事故になります。

黙って別の場所を許可するより、引き継がないほうが安全という判断です。

AI にコードを書かせていて一番怖いのは、AI が見てはいけないものを見ていたという形なので、ここが慎重なのは正しいと思います。

無いパスは、読んだ時点で捨てる

一つ親切な作りがあります。存在しないパスは、設定を読んだ時点で捨てます。

渡してしまうと、旗は付いているのに AI には何も見えない状態になります。症状は、AI が共有の部品を見つけられない、です。設定は書いてあるので、設定ファイルを見ても分かりません。

捨てておけば、設定画面の無視された項目に出ます。どこで落ちたかが分かる状態になります。

上限は十六件です。

Claude だけに効く

これは MulmoTerminal の制約ではなく、CLI 側の違いです。

Claude Code には複数のフォルダを渡す仕組みがありますが、Codex にはありません。Codex のマスでは、この設定は無視されます。

同じ格子に両方を混ぜている場合、Claude のマスにだけ効きます。

一つのプロジェクトに複数のパッケージがある形とは別の話

似ているので区別しておきます。

一つのプロジェクトの中に複数のパッケージがある形なら、一番上で起動すれば全部見えるので、この設定は不要です。

この設定が要るのは、別のプロジェクトを同時に見たいときです。共有の部品を別のプロジェクトに切り出している場合、設計のメモを別のフォルダに置いている場合、参照したい他のプロジェクトのコードがある場合です。

書く範囲は狭くする

これは自分で気をつける部分です。

読み書きを許可するので、範囲はそのまま AI に見せてよい情報の範囲になります。

../shared-lib は具体的で良い書き方です。.. は親フォルダ全部なので広すぎます。~ はホーム全体なので、やってはいけません。

ホームを許可すると、AI は ~/.ssh も ~/Documents も読めます。そして AI は、必要だと思えば読みます。見ていいものだけ見るという判断はしません。

狭く書くのが唯一の守りです。全部の鍵を渡すのではなく、一区画だけ足すという形にします。

使ってみる

MulmoTerminal は、次の一行で立ち上がります。ターミナル(Windows なら PowerShell、Mac ならターミナル)を開いて、そのまま貼り付けます。

npx mulmoterminal@latest

ブラウザが開いて http://localhost:34567 が表示されれば成功です。インストールという作業はなく、合わなければ閉じるだけで終わります。止めるときは、打ったターミナルで Ctrl + C を押します。

動かない場合、足りないものは次の二つのどちらかです。

確かめ方 無ければ
Node.js 22.12 以上 node -v nodejs.org/ja/download の LTS。入れたらターミナルを閉じて開き直す
Claude Code claude --version macOS は curl -fsSL https://claude.ai/install.sh | bash、Windows は irm https://claude.ai/install.ps1 | iex。そのあと claude でログイン

Claude Code は、AI をターミナルから使うためのコマンドです。使うには Claude の有料プラン(Pro / Max / Team / Enterprise)か API のアカウントが必要で、無料プランには含まれていません。MulmoTerminal 自体は無料で、AI の使用量はその契約から引かれます。

書く場所は、そのプロジェクトのフォルダの一番上に置く .mulmoterminal.json です。無ければ作ります。パソコン全体の設定である ~/.mulmoterminal/config.json ではありません。

{
  "addDirs": ["../shared-lib"]
}

効くのは、そのフォルダで次に開くマスからです。いま動いているマスには反映されません。

そのフォルダで開いた AI に、隣のフォルダのファイルを読ませてみます。読めれば成功です。存在しないパスは黙って捨てられるので、効かないときは綴りを見ます。

やめるときは、その項目を消せば元の一フォルダだけに戻ります。広い範囲を書いてしまったときは、すぐ消してください。

まとめ

工場の入館証には入れる区画が書いてあって、全部の鍵は渡しません。間違って入る事故のほうが高くつくからです。

AI が作業フォルダの中しか読めないのも同じ既定です。外を読ませたいときは、そのフォルダを一つ足します。

相対パスの基準は設定ファイルの場所で、AI が動いている場所ではありません。作業フォルダに引き継がれないのも、そこを基準にすると黙って別の場所を許可してしまうからです。書く範囲は、いつも狭いほうを選びます。

この記事をシェア

関連記事

記事一覧に戻る