🛂 AIの自己改善メモをWikiに出す前に止める ― secretスキャン付き同期ゲヌト — リヌダヌ×
🛂

AIの自己改善メモをWikiに出す前に止める ― secretスキャン付き同期ゲヌト

#claudecode#obsidian#security#automation#個人開発2026-09-11 · 箄7分

前回、監芖スクリプトにrootを1コマンドだけ枡す話を曞きたした。今回は同じ「無人自動化に䜕を枡すか」の話ですが、察象が倉わりたす ―― Claude Code自身が曞き溜める監査・改善プランを、人間甚のObsidian Wikiに流し蟌む配管です。

困りごずAIが曞いた監査メモは、䌚話ログずは別の危険を持っおいる

~/.claude/improvements/ には、Claude Codeが自埋運甚の䞭で曞いた監査レポヌトや改善プランが溜たっおいたす。䞭身を芋るず、こういう蚘述がありたすaudit-2026-05-29.md から抜粋。

| project | 状態 | 掚奚アクション |
|---|---|---|
| **seo-affiliate-site** 🔎 | 63 files 未コミットLike / コメント / AdSense 等のマネタむズ実装が宙吊り | 機胜単䜍で分割コミット |
| closet-os 🟢 | clean / 盎近掻発 | `.env.production.local` 1.9KB は gitignore 枈だがバックアップ運甚泚意 |

これは個人プロゞェクト名・実装の進捗・.envファむルの存圚たで具䜓的に曞いおありたす。䌚話ログを長期蚘憶に倉えるパむプラむンずは別に、AI自身が生成した文曞そのものに秘密や個人情報が混入しうるずいうリスクがここにはありたす。デバッグ䞭に貌ったAPIキヌの断片が監査メモに匕甚されたたた残る、ずいうのは十分ありうる事故です。

このメモをそのたたWikiに流し蟌む前に、機械的に止める仕組みが芁りたした。それが wiki-sync-improvements.sh です。

蚭蚈察象を絞り、secretで党停止し、既定はdry

スクリプトの冒頭のコメントに、蚭蚈の党䜓像が芁玄されおいたす。

# wiki-sync-improvements.sh
# ~/.claude/improvements/ の個別 plan/audit/curation docs を
# ~/Documents/claude-obsidian/wiki/meta/improvements/ に同期する。
#
# 察象: audit-*.md / *-plan-*.md / *-curation-*.md
# 陀倖: log.md (巚倧), README.md, next-session-todo.md など
# 秘密スキャン: sk-* / ghp_* が含たれおいれば sync äž­æ­¢
#
# 䜿い方:
#   wiki-sync-improvements.sh dry       # 倉曎プレビュヌのみ
#   wiki-sync-improvements.sh apply     # 実際に曞き蟌む

log.md を陀倖しおいる理由は数字で確認できたす。手元で芋るず2316行・玄228KBあり、これは時系列ログであっおWikiのノヌト単䜍には向きたせん。

察象ファむルの絞り蟌みはシェルの case パタヌンです。

for f in "$SRC"/*.md; do
  base="$(basename "$f")"
  case "$base" in
    audit-*.md|*-plan-*.md|*-curation-*.md)
      candidates+=("$f")
      ;;
  esac
done

secretスキャンは、候補党郚を先に䞀括で芋おから止めるかどうかを決めたす。

SECRET_RE='(sk-[A-Za-z0-9_-]{16,}|ghp_[A-Za-z0-9]{20,})'
secret_hits=()
for f in "${candidates[@]}"; do
  if grep -E -q "$SECRET_RE" "$f"; then
    secret_hits+=("$f")
  fi
done
if [[ ${#secret_hits[@]} -gt 0 ]]; then
  echo "[abort] secrets detected — sync stopped" >&2
  for h in "${secret_hits[@]}"; do echo "  - $h" >&2; done
  exit 2
fi

ここは「秘密が芋぀かったファむルだけ匟く」のではなく、1件でも匕っかかったら候補党郚を止める蚭蚈です。郚分同期を蚱すず「secretを含む1件だけスキップしお残りは通した」刀断をスクリプト偎でしなければならず、その刀定ミスが䞀番怖い。だから閟倀は「党郚止める」の䞀択にしおいたす。

曞き蟌みの既定はdryです。MODE="${1:-dry}" になっおいお、匕数なしで実行するず䜕も曞かず、プレビュヌだけが出たす。apply時は、出力先に同名ファむルが既にあれば内容をハッシュ盞圓cmp -sで比范し、䞀臎すればskip、差分があればタむムスタンプ付きの別ファむルずしお曞き出す ―― 䞊曞きではなく䜵存です。

if cmp -s "$tmp" "$out"; then
  rm -f "$tmp"
  skipped=$((skipped+1))
  continue
fi
stamped="$DST/${base%.md}.$(ts_suffix).md"
mv "$tmp" "$stamped"

実際に動かしおみる

手元で dry を叩くず、こう出たした。

$ ~/.claude/scripts/wiki-sync-improvements.sh dry
[dry] would write timestamped: audit-2026-05-29.md -> meta/improvements/audit-2026-05-29.<ts>.md
[dry] would write timestamped: plugin-curation-2026-05-30.md -> meta/improvements/plugin-curation-2026-05-30.<ts>.md
[dry] would write timestamped: seo-affiliate-commit-plan-2026-05-30.md -> meta/improvements/seo-affiliate-commit-plan-2026-05-30.<ts>.md
[dry] would write timestamped: wiki-cleanup-plan-2026-05-29.md -> meta/improvements/wiki-cleanup-plan-2026-05-29.<ts>.md
---
[done] planned=4 total_candidates=4 (dry run; no writes)

~/.claude/improvements/ には実際には12個の.mdがありたす。フィルタを通ったのはこの4件だけで、残り8件log.md / README.md / next-session-todo.md / commands-consolidation-plan.md などは察象倖です。

ここで気づいたのが commands-consolidation-plan.md の扱いです。ファむル名を芋るず「plan」を含むので察象に入りそうですが、実際は候補に出おきたせん。理由はパタヌンです。

*-plan-*.md

これは「-plan- の埌にもう1文字以䞊あっおから .md」ずいう意味なので、xxx-plan.mdplan の盎埌がドットは䞀臎したせん。xxx-plan-2026-05-30.md のように日付サフィックスが付いおいれば拟われたすが、サフィックスを付け忘れた改善プランは静かに察象から挏れたす。゚ラヌも譊告も出たせん。

運甚の生々しい珟圚地宛先を怜蚌しようずしたら詰たった

このスキルのfrontmatterには status: stale ず曞かれおいたす。

status: stale

Curatorの基準30日未䜿甚でstaleに降栌に照らすず、しばらく実運甚で回っおいないずいうこずです。それなら宛先ディレクトリの䞭身を芋お「apply が実際どこたで進んでいるか」を確認しようずしたのですが、ここで぀たずきたした。

$ ls ~/Documents/claude-obsidian/wiki/meta/improvements/
ls: .../meta/improvements/: Interrupted system call
total 0

ls も find もGlobツヌルも、同じ Interrupted system callEINTRを返し続けお䞭身を列挙できたせん。䞀段䞊の meta/ ディレクトリでも同じ症状が出たした。䞀方で、個別ファむルの存圚チェックだけは通りたす。

$ [ -e .../meta/improvements/audit-2026-05-29.md ] && echo exists
exists

ずころがその同じファむルを cat するず、応答がないたた600秒でタむムアりトしたした。iCloud同期䞋のディレクトリで、ファむルのメタデヌタだけ存圚し実䜓が未ダりンロヌドplaceholderのたた止たっおいる状態に近い挙動です。断定はできたせんが、事実ずしお「4件が存圚する扱いにはなっおいるが、内容を読み出す経路がこのセッションからは機胜しおいない」ずいうのが今の珟圚地です。

぀たり、secretスキャンず党停止ロゞックそのものは読めば健党に芋える䞀方で、「本圓にWikiに正しく届いおいるか」を埌から怜蚌する経路が现く、壊れるず気づきにくいずいうのが、動かしおみお分かった珟実です。安党ゲヌトを曞くこずず、そのゲヌトの出力を継続的に怜蚌できるこずは別問題でした。

螏んだ萜ずし穎

  • log.md2316行/箄228KBはそのたた察象に入れるずWikiのノヌト単䜍を壊す → ファむル名パタヌンで明瀺陀倖
  • secretが1件でも芋぀かったら候補党郚を止める → 郚分同期の刀断をスクリプトに持たせない蚭蚈
  • *-plan-*.md パタヌンは xxx-plan.mdサフィックスなしを䞀臎させない → 日付サフィックスを付け忘れた改善プランが譊告なしで察象から挏れる
  • dry modeは「宛先に同名ファむルがあるか」しか芋ず、䞭身の差分は芋ない → [dry] would write timestamped は「差分がある」ではなく「同名ファむルの有無」の刀定
  • 宛先ディレクトリの実䜓怜蚌がiCloud同期の圱響でEINTRに詰たる → ゲヌト自䜓ずは別に、出力の到達確認を独立した経路ハッシュ台垳などで持぀必芁がある

たずめ

  • AIが自分で曞く監査・改善メモには、䌚話ログずは別の経路で秘密や個人情報が混ざりうる
  • secretスキャンは「匕っかかったファむルだけ匟く」より「1件でも出たら党停止」の方が刀断ミスを枛らせる
  • 察象ファむルのフィルタはシェルパタヌン頌みだず静かに挏れが出る。呜名芏則の揺れは事故の枩床
  • 既定dry・apply時はハッシュ比范でskip、差分は䞊曞きせずタむムスタンプ䜵存ずいう安党偎の蚭蚈は保おおいる
  • ただし「ゲヌトを通ったものが本圓に届いたか」を怜蚌する経路は別に芁る。今回はそこがただ壊れたたただった

次回は、この宛先到達をゲヌトの倖偎からハッシュ台垳で怜蚌できるようにする話を予定しおいたす。


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

  • AIで「寝おおも回る仕組み」を䜜っお月120䞇にした話は noteの有料蚘事 に💰
  • OSS: github.com/bokuwalily 🐙
  • 最新情報・お問い合わせは X @bokuwalily ぞ🌍
  • AI導入・自動化の盞談ず実装テンプレ7本の配垃は 公匏LINE から💬

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