プロジェクトメモリ
プロジェクトメモリは、Claude Code・Codex・Gemini CLI などのエージェントが作業中に覚えた事実・決定・好みを、Nolto に保存する機能です。次のセッションや、同じプロジェクトで働くチームのエージェントに引き継げます。
CLAUDE.md / AGENTS.md に書くほどではない情報を、エージェントがエントリ単位で書き足していきます。リポジトリや Git の履歴、CLAUDE.md / AGENTS.md にすでにある情報は重ねて残しません。メモリは背景情報であり、ユーザーの指示より優先されるものではありません。
CLI 0.18.0 以降で利用できます。
しくみ
メモリの正本は Nolto のサーバーにあります。ローカルの ~/.config/nolto/projects/<id>/memory/ は読み取り専用のキャッシュで、索引の MEMORY.md とエントリごとのファイルが入ります。キャッシュを直接編集せず、書き込みには nolto memory put <file> を使います。
セッションの開始時に hook がメモリを取得し、名前と説明の索引をエージェントに渡します。エージェントは索引から必要なものを選び、nolto memory show <name> で本文を読みます。手動で最新のメモリを取得するには nolto memory pull、取得済みの索引を見るには nolto memory context を実行します。
スコープで共有する範囲を決める
| スコープ | 残すもの・読む人 | 書ける人 |
|---|---|---|
project | チームの決定や制約。プロジェクトの全員が読めます。 | 課題を書けるメンバー以上 |
user | 本人の好みや役割。本人だけが読めます。 | 課題を書けるメンバー以上の本人 |
branch | リポジトリ・ブランチごとの作業中の事実。プロジェクトの全員が読めますが、索引に載るのはそのブランチで作業しているときだけです。 | 課題を書けるメンバー以上 |
機能を制限したメンバー(外部メンバー)には、どのスコープも見えません。branch は作業ブランチで使い、merge 後にチームへ残すものを project に昇格するか、不要なものを破棄します。
導入する
- CLI ガイドに沿って CLI 0.19.0 以降をインストールします。
- リポジトリ内で
nolto initを実行し、認証とプロジェクトを設定します。メモリの管理に Nolto を使うと答えると、hook の設定・既存メモリの取り込み・Claude Code の自動メモリの停止まで済みます。メモリの読み書きの手順を持つproject-memoryスキルも入ります。 - init を使わない場合や、後から設定する場合は、同じリポジトリで
nolto memory hook installを実行します。SessionStart の hook が設定され、セッション開始時に索引を読み込むようになります。 - Codex では、信頼済みのリポジトリで対話セッションを開き、
/hooksからリポジトリの hook を承認します。初回だけ必要です。 - 次のセッションを開始すると、索引がエージェントに渡されます。
| エージェント | 設定ファイル | 注意 |
|---|---|---|
| Claude Code | .claude/settings.json | SessionStart で索引を読み込みます。 |
| Codex | .codex/hooks.json | /hooks での承認が必要です。Codex 0.157.0 では hooks は既定で有効です。 |
| Gemini CLI | .gemini/settings.json | SessionStart で索引を読み込みます。 |
nolto init --memory はメモリを管理するかの最初の質問を省略し、nolto init --no-memory はメモリの設定を省略します。nolto memory hook install で --agent を省略すると、リポジトリ内の .claude / .codex / .gemini から対象を判定します。どれもなければ Claude Code を選びます。対象を明示する場合は --agent claude、--agent codex、--agent gemini を付けます。--agent all は省略時と同じ動きです。
nolto memory hook install --agent codex
nolto memory hook install --write-agents-md
--write-agents-md は、既存の AGENTS.md に nolto memory instructions の手順を追加します。AGENTS.md がなければ追加を省略します。Codex で hooks を無効にしている場合は、config.toml の [features] に hooks = true を設定してください。
既存のメモリを移行する
init を使わない場合や、後から取り込む場合は、既存のメモリが入ったディレクトリを import に渡します。チームで共有する内容には --scope project、自分だけの内容には --scope user を指定します。
nolto memory import ./memory --scope project
nolto memory import ./personal-memory --scope user
ディレクトリ直下の Markdown ファイルを取り込みます。索引の MEMORY.md は対象外です。同名のエントリは上書きせずにスキップします。統合したい場合は nolto memory show <name> --fresh で最新の内容を確認し、下書きにまとめて nolto memory put <file> で保存してください。更新では、取得した revision を残します。
import は既定では AI 整理をしません。Pro+ で AI 整理を使う場合だけ、--ai を付けます。
nolto memory import ./memory --scope project --ai
画面で確かめる・直す
プロジェクトの「AI メモリ」タブで、エントリの確認・編集・削除、版の戻し、ブランチのメモリの昇格・破棄ができます。画面の使い方は AI メモリをご覧ください。画面からの保存では AI 整理をしません。
CLI では、nolto memory log <name> で履歴を確認し、nolto memory revert <name> <revision> で以前の版に戻します。ブランチのメモリは、まず候補を確認してから、名前か --all を指定して昇格します。
nolto memory promote --branch task/example
nolto memory promote --branch task/example ci-runs-on
不要なエントリを破棄する場合は nolto memory promote --branch task/example --discard ci-runs-on を実行します。
重複と AI 整理
AI 整理を使わないとき(Pro+ 以外、設定が OFF、--no-ai を指定、AI 整理ができなかったとき)は、新規作成時に説明が似たエントリを見つけると、書き込みを止めて候補を示します。同じ話なら既存のエントリにまとめ、別の話として残す場合だけ nolto memory put <file> --new で保存します。
Pro+ で AI 整理が有効な場合は、似たエントリがあるとき、AI が統合・置き換え・別に残すのどれにするかを判断します。プロジェクトの「設定」→「一般」にある「使う機能」カードの「メモリの AI 整理」で ON / OFF を切り替えられます。既定は ON です。1 回だけ整理を避けたい場合は nolto memory put <file> --no-ai を使います。
整理した内容も版として残ります。画面の「AI 整理の履歴」で理由と変更を確認し、エントリごとに戻せます(AI メモリ)。CLI では AI が整理: の出力と、表示された 戻す: のコマンドを確認してください。
AI 整理の結果が意図と違う場合は、変更を確認してください。まとめて戻す操作はありません。影響したエントリを 1 件ずつ戻します。
寿命と整理候補
CLI 0.22.0 以降では、下書きの frontmatter に寿命を書けます。進捗・経緯・再開ポイントには寿命を付け、決定・制約・規約は永続のまま残します。
| 書き方 | 有効な期間 | 整理候補になるとき |
|---|---|---|
| 指定なし | 永続 | 寿命では候補になりません。 |
expires: 2026-10-18 | 指定した日まで | 日本時間でその日を過ぎたとき。 |
ttl: 7d | 保存する日から 7 日後まで | put 時にローカルの日付 + 日数の expires に直し、日本時間でその日を過ぎたとき。1〜365 日を指定できます。 |
until: NF-51 | このプロジェクトの課題が完了するまで | 課題が完了したか、見つからなくなったとき。キーの無いプロジェクトでは #51 を使います。 |
until: nolto-frontend/mem-ui | ロードマップの task が done になるまで | task が done になったか、見つからなくなったとき。<roadmap の slug>/<task-id> の形で書きます。 |
expires と ttl はどちらか一方を使います。until は 1 件だけ指定でき、expires または ttl と併用できます。両方指定した場合は、どちらかが成り立つと候補になります。put では下書きから行を消すと、その寿命も消えます。
再開ポイントには resume-<YYYY-MM-DD> の名前を付けます(末尾に -night などを付けても構いません)。同じスコープで、名前の日付が最新の 1 件だけが有効です。同じ日付なら作成が新しい方を残し、古いものは整理候補に移ります。日付の無い resume-* は対象外です。
整理候補は、索引の「整理候補」の節、nolto memory put の出力、nolto memory candidates の 3 か所に理由付きで出ます。索引の有効な一覧から外れますが、Nolto が自動で消すことはありません。候補が出たら、次の手順で片付けます。
nolto memory show <name>で内容と理由を読みます。- 今も要る決定・制約が混ざっていれば、寿命の無いエントリに移して
putします。 - 不要になったものを
nolto memory rm <name> [<name>...]で消します。まだ要るなら、expiresを延ばすかuntilを外してputします。
課題を閉じたときや、再開ポイントから作業を再開したときも、紐づく経緯や古い再開ポイントを同じ手順で整理します。間違えて消した場合は nolto memory list --deleted でキャッシュの削除済みエントリを探し、nolto memory log <name> で戻す版を確かめて、nolto memory revert <name> <revision> を実行してください。
画面では寿命を表示・編集できません。画面で本文などを保存しても、CLI で設定した寿命は残ります。
制限付き API トークンで until を書くには、課題なら issues:read、task なら roadmap:read が必要です。「CI でメモリを読む」の手順で作る memory:read だけのトークンには、課題・task の完了や参照先が見つからないことによる候補は出ません。期限切れと古い再開ポイントの候補は出ます。
CI でメモリを読む
「設定」→「アプリと API トークン」の「API トークン」で「制限付き」を選び、「メモリ」を「読み取り」にし、対象プロジェクトを選んでトークンを作ります。CI の secret に保存し、環境変数 NOLTO_TOKEN に渡して nolto memory pull --scope project,branch を実行してください。プロジェクトはリポジトリの nolto.json で指定できます。
nolto memory pull --scope project,branch
nolto memory context
CI からは読み取りだけを行い、書き込みはしません。トークンを作った人の user スコープはそのトークンでも読めるため、CI では --scope project,branch を付けて取得します。PR の CI などブランチ名が取れない環境では、branch のエントリは索引に載りません。secret の渡し方は CI/CD 連携をご覧ください。
上限と注意
- メモリは 1 プロジェクトにつき 1,000 件までです。
- AI 整理は 1 人 1 日 300 回までです。書き込む本文と、似たエントリのうち最長の本文を合わせて 4,000 字を超える場合も、AI 整理をせず通常の保存処理に進みます。CLI には
AI 整理なし(今日の上限)やAI 整理なし(本文が長い)と表示されます。新規作成で説明が似たエントリがあれば、保存を止めて候補を示します。 - 名前は英小文字・数字・ハイフンで 64 字まで、先頭は英数字です。説明は索引に載せる 1 行で 200 字まで、本文は 10,000 字までです。
- 閲覧だけのメンバーは、メモリの編集・削除・版の戻し・ブランチの昇格や破棄はできません。
userも本人以外は読み書きできません。 - セッション中に他の人が更新した内容は、次のセッションの開始まで自動では届きません。途中で取り込むには
nolto memory pullを実行します。 - Codex の sandbox からネットワークに出られず
network_unavailableになった場合は、sandbox の外でコマンドを実行する承認が必要です。
セキュリティレビューで指摘されたら
hook の設定(.claude/settings.json など)や project-memory スキルを commit すると、セキュリティレビューで「hook が外部(Nolto)の内容を、エージェントのコンテキストへ自動で入れる」と指摘されることがあります。誤検知ではなく、メモリを hook で渡すしくみの性質です。次の 2 点で、受け入れられるかを判断してください。
- 自動で入る範囲: セッションの開始時に入るのは、索引(エントリの名前と説明)だけです。索引には、メモリは背景情報で指示ではないことを明記しています。本文は自動では入りません。エージェントが
nolto memory show <name>を実行するか、キャッシュのファイルを開いたときに読まれます。 - 誰が書けるか:
projectとbranchのメモリは、課題を書けるメンバー以上(プロジェクトのメンバーでない組織の管理者を含みます)なら誰でも書けます。閲覧だけのメンバー、機能を制限したメンバー、お客さまは書けません。リポジトリに書けない人がこの範囲にいると、その人も、エージェントが読む内容を変えられます。
リスクの大きさは使い方で決まります。次のように運用してください。
- 守らせたい決まり(開発の流れ、禁止事項)は、リポジトリの CLAUDE.md / AGENTS.md に書きます。メモリには書きません。
- CLAUDE.md / AGENTS.md に「メモリの特定のエントリを必ず読んで従う」と書かないでください。メモリの本文が、実質的にルールになります。
- メモリを書ける人を、リポジトリに書ける人とそろえます。そろえられないプロジェクトでは、メモリに書く内容を事実の記録に限ります。
- 受け入れられない場合は、hook を入れずに使えます。
nolto init --no-memoryは hook の設定を省略するので、セッションの開始時に索引は入りません。ただしproject-memoryスキルは入り、スキルに従ったエージェントは、作業の開始時に自分でnolto memory contextを実行して索引を読みます。AGENTS.md のnolto-memoryの節も、このコマンドを指示します。それも避けるなら、スキルのディレクトリ(.claude/skills/project-memory/など)と AGENTS.md のnolto-memoryの節も外してください。nolto initをやり直すとスキルが戻るので、再設定後にも確認します。既に commit した hook を外すときは、設定ファイルから SessionStart のnolto memoryの項目を消します。
送るデータ
AI 整理のときは、書き込んだ内容と、似たエントリの本文(最大 5 件)を外部の AI サービス(Amazon Web Services)に送ります。送信した内容は学習には使われません。Pro+ 以外、または「メモリの AI 整理」が OFF の場合は、この機能のために送信しません。画面からの保存と、--ai を付けない import も AI 整理の対象外です。送った内容は、送信先で不正利用の監視のために一定の期間(通常は最長 30 日)保持されることがあり、日本国外で処理されることがあります。詳しくは「個人情報の取扱いについて」をご覧ください。