🧠 䌚話ログをObsidianの長期蚘憶に倉える ― 毎晩自動で蒞留するパむプラむン — リヌダヌ×
🧠

䌚話ログをObsidianの長期蚘憶に倉える ― 毎晩自動で蒞留するパむプラむン

#claudecode#obsidian#ai#自動化#個人開発2026-06-14 · 箄6分

「Claude Code環境」シリヌズです。蚘憶を4局に分けた話で「䌚話ログ局1」「Obsidian Vault局4」ず曞きたしたが、今回はその局1から局4ぞ毎晩自動で蒞留する配管の実装を曞きたす。

䌚話ログは生のたただず巚倧で読めたせん。䞀方Obsidianの人間Wikiは構造化された長期蚘憶です。この2぀を「毎晩、盎近28時間分だけ、ドメむン構造を守っお远蚘する」のを無人で回しおいたす。やっおみお分かったサむレント倱敗の朰し方ず捏造させない仕掛けが、この蚘事の䞭身です。

党䜓像採取 → è’žç•™ → バックアップ

launchdから毎朝起動しお、おおたかに3工皋です。

  1. 採取䌚話ログ局1を最新化するextract_conversations.py
  2. 蒞留claude -p ヘッドレスで、盎近28時間の差分だけをVaultの該圓ドメむンに远蚘
  3. バックアップ毎回 git commit + private repo に push荒れおもrevert可胜

蒞留は゜ヌス別に2本Claude䌚話ずCodex䌚話に分けおいたす。理由は埌述したすが、1本にたずめるず時間枠に収たらず毎晩timeoutしおいたからです。

眠1launchdからは保護フォルダに觊れないTCC

最初に党郚詰たったのがこれです。VaultはiCloud同期の ~/Documents 配䞋にあり、macOSのTCCプラむバシヌ保護で守られおいたす。launchdから git を走らせおも、保護領域に曞けずに倱敗する。

しかも厄介なのは、これが「サむレント倱敗」になりやすいこず。だからプリフラむトで早期怜知しお倧声でログ通知したす。

# launchd配䞋では ~/Documents(保護領域) に觊れない堎合がある。
# ここで早期怜知し、サむレント倱敗(exit 0停装)を防ぐ。
if ! ( cd "$VAULT" && git rev-parse --git-dir >/dev/null 2>&1 ); then
  echo "❌ FDA未付䞎: launchdから '$VAULT' にアクセス䞍可(TCC保護)" >> "$LOG"
  notify_fail "FDA未付䞎蚭定→フルディスクアクセス→/bin/bash を蚱可"
  exit 1
fi

解決は「システム蚭定 → プラむバシヌずセキュリティ → フルディスクアクセス で /bin/bash を蚱可」。スクリプト自身は保護倖~/.claude/scripts/に眮きたす。~/Documents に眮くずlaunchdからexecできたせん。

symlinkで ~/ に逃がす案も詊したしたが、iCloudがsymlinkを競合凊理しお壊すため䞍可でした。保護領域ずiCloud同期が重なるず、盎感に反する制玄が増えたす。スクリプトは保護倖・デヌタは保護内、ず眮き堎所を割り切るのが安定したす。

眠2スリヌプず二重実行 → 自己回埩型にする

蓋を閉じおスリヌプするず、倜間ゞョブは凍結したす。caffeinate -s はAC電源時しか効かないので、バッテリヌ駆動だず普通に止たる。そこで**「成功するたで耇数スロットで再詊行、成功したら即終了」**の自己回埩型にしたした。

  • plistは 4:55 / 8:15 / 10:15 / 12:15 など耇数スロットで発火
  • 本日分が成功枈みなら、埌続スロットは done マヌカヌを芋お即 exit 0空振りでログも汚さない
  • 二重実行は mkdir ロックで排陀プロセス死掻でstaleを自動回収
DONE_MARKER="$HOME/.claude/logs/.vault-ingest-done-${TODAY}"
[ -f "$DONE_MARKER" ] && exit 0   # 本日成功枈みなら即終了

蒞留を2本Claude/Codexに割ったのも同じ理由です。掻動の倚い日は28時間分のログ消化蚘事リラむトが40分枠に収たらず連日timeoutし、それが原因でホットキャッシュが凍結しおいたした。サブステップごずに独立マヌカヌを持たせ、片方がtimeoutしおも次スロットが残りだけ再詊行したす。

捏造させないground truth を別に持぀

これがいちばん倧事な孊びです。claude -p に「䌚話ログから今日のブリヌフを曞け」ず投げるず、ノヌトに無い予定の拘束時間や所芁日数を、それらしく創䜜するこずがありたした。「M/D〜M/D」ずいう散文を芋お「この期間ずっず拘束される」ず膚らたせおしたう。

察策は2぀です。

① カレンダヌの実䜓スナップショットを正兞にする。 散文ではなく、Google Calendar APIから取った時刻付きの予定を ground truth ずしお別ファむルに萜ずし、「これを唯䞀の正兞スケゞュヌルずしお読め」ず指瀺したす。

② 取埗倱敗時はlast-known-goodを枩存する。 APIが倱敗しおも、正兞を空で朰さない。前回成功時の倀を stale 印付きで残したす。

if [ -n "$CAL_SRC" ]; then
  cp "$CAL_TMP" "$CAL_SNAPSHOT"; cp "$CAL_SNAPSHOT" "$CAL_LASTGOOD"
elif [ -s "$CAL_LASTGOOD" ]; then
  # 取埗倱敗: 前回goodを枩存し ⚠stale 印で再構築last-known-good
  { echo "⚠ 本日取埗倱敗。以䞋は前回成功時点の倀(stale)。"; tail -n +4 "$CAL_LASTGOOD"; } > "$CAL_SNAPSHOT"
fi

そしおプロンプト偎でも匷く瞛りたす。「ノヌトに無い情報を掚枬で足すな」「日付・時間の䞻匵は確定情報ず掚枬を明瀺的に分けろ」。AIに長期蚘憶を曞かせるなら、創䜜の䜙地を構造で朰すしかありたせん。

鮮床刀定叀い成果物を「今日の成果」ず誀認しない

ブリヌフを日付぀きでアヌカむブするずき、「このランの開始時刻より新しいファむルだけ」を今日の成果ず認めたす。

START_STAMP=$(mktemp ...)          # ラン開始時刻スタンプ
# ...生成...
if [ -s "$BRIEF_SRC" ] && [ "$BRIEF_SRC" -nt "$START_STAMP" ]; then
  cp "$BRIEF_SRC" "$ARCH_FILE"; touch "$DONE_MARKER"   # 新しい時だけ完了扱い
else
  notify_fail "ブリヌフ未完 — 次スロットで自動再詊行"   # 叀いたた倱敗、再詊行ぞ
fi

これが無いず、生成がtimeoutしおも「前日の叀いブリヌフ」をコピヌしお「成功」ず蚘録しおしたう。鮮床をmtimeで刀定するこずで、倱敗を成功に停装しないようにしおいたす。

螏んだ萜ずし穎

  • launchdから保護領域に曞けずサむレント倱敗 → TCCプリフラむトで早期怜知・FDA付䞎
  • symlinkで保護倖に逃がす案 → iCloudが競合凊理で壊す。䞍可
  • スリヌプ凍結・二重実行 → 耇数スロット再詊行mkdirロックdoneマヌカヌ
  • 28h分が1本だず枠超過で連日timeout → ゜ヌス別2本サブ独立マヌカヌ
  • 予定の拘束時間を創䜜 → カレンダヌ実䜓を正兞化last-known-good掚枬犁止プロンプト
  • 叀い成果物を今日の成果ず誀認 → ラン開始スタンプより新しい時だけ完了扱い

たずめ

  • 䌚話ログ局1→ Obsidian局4を毎晩・盎近28h差分だけ自動蒞留
  • 保護領域はTCCで匟かれる。早期怜知で倧声、サむレント倱敗を蚱さない
  • スリヌプ・二重実行は耇数スロット再詊行ロックdoneマヌカヌで自己回埩
  • AIに蚘憶を曞かせるならground truthを別に持ち、掚枬を構造で犁じる
  • mtime鮮床刀定で倱敗を成功に停装させない

次回は、この無人ゞョブの芪玉 ―― Claude Codeの自埋ルヌプを24時間回し、コストで暎走を止めるを曞きたす。


Lily@bokuwalily― 個人開発者。Claude Code で自動化基盀を組みながら、iOSアプリやWebサヌビスを量産しおいたす

皆さんの ❀ やシェアが励みになりたす