Codex hooks を使って、episode-first の外部記憶運用を自分の環境で再現するための starter repository です。
採用しているのは、Obsidian が理解しやすい frontmatter / ディレクトリ構成を持つ Markdown 形式だけです。Obsidian 自体は必須ではありません。Obsidian は人間が中身を確認しやすい viewer として相性がよいだけで、hook の動作条件ではありません。
この repo は、作者の実運用環境そのものを配るものではありません。読者が clone して、自分の Markdown 保存先と自分の workspace に合わせて最小構成から組み立て直せるように、配布向けに一般化した再現パックです。
人間向けに一言で言うと、これは「GUI Codex で開いて、その Codex 自身に導入と検証を進めさせるための Codex-assisted installer」です。
最初に Codex へ渡すプロンプトは、これで足ります。
https://github.com/mlabo-org/codex-obsidian-memory-starter を clone して開き、この repo を installer として扱ってください。AGENTS.md、CODEX_SETUP.md、CODEX_INSTALLER.md、README.md を読み、scripts/print_codex_installer_prompt.sh を自分で実行して、bootstrap.sh と verify_install.sh まで完了してください。
読者向けの最短メッセージを人間向けに言い換えると、こうです。
- GUI Codex にこの repo を clone / open させる
- Codex 自身に
AGENTS.md、CODEX_SETUP.md、CODEX_INSTALLER.mdを読ませる - Codex 自身に
./scripts/print_codex_installer_prompt.shを実行させる - そのまま Codex に
bootstrap.shとverify_install.shまで最後までやらせる
手で順番に入れたい人向けの説明は、後ろの Manual Install に一応まとめています。まずは Codex に丸投げする前提で読んでください。
- 関連記事の URL は README に反映済みです
assets/screenshots/に静止画 2 枚を追加済みです- License は
MITです - この repo を fork して配布確認する場合は、まず
privateで点検してからpublicに切り替えると安全です
この repo は次の人向けです。
- Codex の hook を使って会話の断片を外部化したい人
- Obsidian-readable な Markdown 形式で external memory を持ちたい人
- 自分の環境に合わせて
workspace_hintsや project note を調整できる人
逆に、作者の Vault をそのまま欲しい人向けではありません。実データや個人的 note 本文は含めません。
この starter は、次の 3 本の hook flow だけを再現対象に絞っています。
SessionStartvault 全体は読まず、直近のultra_shortと現在 project の recentepisodesだけを少量読むUserPromptSubmit送信直後の prompt をultra_shortに即時保存し、project に紐づくものだけepisodesにも短く残すStop会話の一区切りをepisodesに追記する
この repo は次のものを配りません。
- 作者の実 Vault 本文
- 実運用中の
logsやstate - token や認証情報
- project ごとの完成済み promotion heuristic
- 長期 knowledge の自動昇格ルール一式
つまり、これは完成済みの personal system ではなく、読者が自分の環境で再現するための starter です。
この repo の中心は、Obsidian を主役にすることではなく、「先に断片を逃がし、あとで本当に使うものだけ残す」流れを Codex hook で支えることです。保存形式が Obsidian-readable な Markdown であることと、Obsidian を必須アプリとして採用していることは別物です。
自動で読む対象は次の 2 系統だけです。
episodes/ultra_short/*.mdの直近エントリ- 現在の project に一致した
episodes/*.mdの recent note
knowledge/rules/ と knowledge/projects/ は常時総なめしません。必要になったときだけ参照する前提です。
自動で書く対象は次の 2 系統です。
ultra_short送信した prompt の断片を、その場で判断せず退避する mixed inboxepisodesproject と関係がある prompt や、会話の意味ある区切りを短い bullet で残す短中期メモ
knowledge は最初から自動で肥大化させません。長く残す value があるものだけ、人間が昇格させる前提です。
ultra_short保存時点では価値判断しない即時バッファです。取りこぼし防止が役割です。episodesproject 寄りの短中期メモです。次の session で立ち上がりを軽くするのが役割です。knowledgedurable な rules / decisions / projects だけを置く層です。全部を入れる棚ではありません。
codex-obsidian-memory-starter/
├── config/
│ ├── hooks.sample.json
│ ├── projects.example.json
│ └── projects.local.json # bootstrap 時に生成。git 管理しない
├── hooks/
│ ├── memory_hooks.py
│ ├── session_start.py
│ ├── stop.py
│ └── user_prompt_submit.py
├── scripts/
│ ├── bootstrap.sh
│ ├── publish-private.sh
│ └── uninstall.sh
└── vault/
├── episodes/
│ ├── README.md
│ └── ultra_short/
│ └── README.md
├── knowledge/
├── maps/
├── archive/
└── templates/
読者に最初に案内したいルートはこれです。手動導入より先にこちらを使う想定です。
この starter は、かなり露骨に「読者の Codex が repo を読んだら installer モードに入る」前提で作っています。
言い換えると:
- 人間は GUI Codex に「この repo を取って install して verify までやって」と頼む
- Codex は
AGENTS.md、CODEX_SETUP.md、CODEX_INSTALLER.mdを読む - その Codex が利用者環境へ合わせて install と verify を進める
最初に Codex へ投げる 1 本は、これを想定しています。
https://github.com/mlabo-org/codex-obsidian-memory-starter を clone して開き、この repo を installer として扱ってください。AGENTS.md、CODEX_SETUP.md、CODEX_INSTALLER.md、README.md を読み、scripts/print_codex_installer_prompt.sh を自分で実行して、bootstrap.sh と verify_install.sh まで完了してください。
README を人間が上から読むより先に、読者の Codex が repo の意図を読んで張り切って動き出す構成を狙っています。
- 固定 script がやるのは hook 配線と seed までです
- 最後の環境適応は、repo を開いた Codex に担当させる前提で作っています
workspace_hints、Vault root、既存 hooks 共存、導入後の検証まで含めて Codex にやらせると楽です- scripts/verify_install.sh を使えば、one-shot の install self-check まで回せます
重要:
- この repo は作者環境の丸写しではありません
- clone 後は、使う人の
workspace_hints、Vault root、project 名、keywords に合わせて調整する前提です - 細かい path や hook 共存の調整は、Codex にこの repo を読ませて処理させるほうがだいぶ楽です
Codex が自分で installer prompt を読む入口:
./scripts/print_codex_installer_prompt.shこの script は「人間が読んでコピペするため」より、「repo を開いた Codex が自分で実行して、そのまま installer モードへ入るため」の入口として置いています。関連ファイル:
ハナホジ寄りの最短ルート:
- 人間が GUI Codex に「この repo を clone して導入をやって」と頼む
- Codex が repo を clone / open する
- Codex が
AGENTS.md、CODEX_SETUP.md、CODEX_INSTALLER.mdを読む - Codex が
./scripts/print_codex_installer_prompt.shを自分で実行する - Codex が
bootstrap.shとverify_install.shまでやる
自分で順に実行したい人向けの手順は、このあとの Manual Install に残しています。ただし README の本線はそちらではなく、Codex に clone から verify までやらせる導線です。
verify だけ単独で回したい場合:
./scripts/verify_install.shCodex に導入を任せず、自分で順番に実行したい場合だけこの節を使ってください。
- この repo を clone します。
config/projects.local.jsonを用意します。./scripts/bootstrap.shを最初に実行すると、config/projects.example.jsonから雛形が生成されます。config/projects.local.jsonのworkspace_hintsとkeywordsを、自分の project に合わせて編集します。 既定の生成先は~/.codex/hooks/obsidian-memory-starter/config/projects.local.jsonです。最初からobsidian-memory-system用の preset と、現在の clone 先に合わせたworkspace_hintsが入ります。- vault の保存先を確認します。
bootstrap.shは既定で~/Library/Application Support/obsidian/obsidian.jsonを見て、現在開いている Obsidian Vault を優先します。Obsidian が無い場合や、その検出を使いたくない場合は、この repo 内のvault/か、CODEX_OBSIDIAN_MEMORY_VAULT_ROOTで指定した任意の Markdown ディレクトリを使えます。 - 既定の検出先を変えたい場合だけ
CODEX_OBSIDIAN_MEMORY_VAULT_ROOTを指定します。 ./scripts/bootstrap.shを実行します。 これで~/.codex/hooks.jsonに 3 つの hook が追記され、hook 実体は~/.codex/hooks/obsidian-memory-starter/に install されます。- Codex を再開し、
SessionStartの追加 context とepisodes/ultra_short/の書き込みを確認します。
最短の手動実行例:
cd /path/to/codex-obsidian-memory-starter
./scripts/bootstrap.shVault 検出先を上書きする例:
CODEX_OBSIDIAN_MEMORY_VAULT_ROOT="/path/to/your/ObsidianVault" ./scripts/bootstrap.shproject 判定のためのローカル設定です。各要素は次の意味です。
project_idepisode frontmatter と note 名に使う IDproject_notevault root からの相対パスworkspace_hintscwdに含まれていたら project 候補として扱う文字列keywordsprompt や会話で見つかったら project 判定に使う語related_rules必要時に参照する rule note の相対パス
配布用のサンプルです。実際の導入では、bootstrap.sh が ~/.codex/hooks/obsidian-memory-starter/ へ hook 実体を install し、その絶対パスを ~/.codex/hooks.json に書き込みます。
~/.codex/hooks.jsonCodex 本体が読む hook 登録先~/.codex/hooks/obsidian-memory-starter/hooks/*.py実行される hook script~/.codex/hooks/obsidian-memory-starter/config/projects.local.jsonproject 判定のローカル設定VAULT_ROOT/knowledge/rules/episode-write-timing.md外部 Vault を使う場合でも未存在なら seed される sample ruleVAULT_ROOT/knowledge/projects/obsidian-memory-system.md外部 Vault を使う場合でも未存在なら seed される default project note
hook だけ外したい場合:
./scripts/uninstall.shこの script は ~/.codex/hooks.json からこの starter の hook だけを削除します。Vault 内の note は消しません。
既存 hook との共存方針:
bootstrap.shは既存の~/.codex/hooks.jsonを上書きせず、他の hook entry は残したまま、この starter が管理する 3 本だけを差し替えます。uninstall.shも、この starter が入れた 3 本だけを削除します。
完全に巻き戻す場合:
./scripts/uninstall.shを実行するconfig/projects.local.jsonを削除する- 必要なら生成された
episodes/配下の note を手動で削除する
この repo 自体を GitHub に上げる場合は、まず private を既定にしてください。
gh auth login
./scripts/publish-private.sh既定の repo 名は codex-obsidian-memory-starter です。script は private repo を作成し、origin を設定して main を push します。
public に切り替える前にやることは、PUBLICATION.md に分離しています。
この repo に入れない前提のもの:
auth.json- token 類
~/.codex/hooks/logs/の実ログ~/.codex/hooks/state/の実データ- 個人的な Vault 本文
- ユーザー依存のホームディレクトリ絶対パスを埋め込んだままの設定
.gitignore でも、ローカル設定と生成 note は既定で除外しています。
関連する記事はこちらです。
この README は、記事を読まなくても GitHub 上だけで何を配っているか分かる構成を優先しています。
この repo では、まず静止画 2 枚を用意する前提にしています。動画 demo は任意です。
追加済みの静止画:
assets/screenshots/session-start-context.pngCodex 側でSessionStartの追加 context が見えている画面assets/screenshots/obsidian-memory-notes.pngObsidian 側でultra_shortとepisodesが見えている画面
SessionStart では vault 全体を読まず、直近の ultra_short と recent episodes だけを少量読みます。
保存先は Obsidian が読める Markdown 形式ですが、運用の主役は GUI ではなく hook 側の自動記録です。
任意の demo:
assets/demo/prompt-to-episode.mp4prompt 送信からultra_short/episodesへの反映までを短く見せる動画
撮影方針と差し込み文は assets/screenshots/README.md にまとめています。
This repository is licensed under the MIT License.
- これは starter です。project ごとの durable 昇格 heuristics までは自動化していません。
knowledgeへの昇格は、人間が運用しながら決める前提です。- 作者の実運用そのものではなく、読者向け再現パックです。

