CLAUDE.md ãè¥ããã»ã©é ããªã â context æ³šå ¥ãã€ãã鱿¬¡èšæž¬ããŠå£åãæ©ææ€ç¥ãã
ãClaude Codeç°å¢ãã·ãªãŒãºã®ç¶ãã§ããååã®èªå·±ç£æ»ãã©ã¹ãã¬ãŒã·ã§ã³ã«ãŒãã§ãæ¢ãŸããªãæ¹åã«ãŒãããæžããŸããããä»åã¯ãã®æ ¹æ¬ã«ããæ³šå ¥ãã€ãè¥å€§ã®æ€ç¥ãšèªå·±ä¿®æ£ã®è©±ã§ãã
Claude Codeã¯ã»ãã·ã§ã³éå§æã« rules/*.mdã»~/.claude/CLAUDE.mdã»~/CLAUDE.mdã»MEMORY.md ãç¡æ¡ä»¶ã«å
šææ³šå
¥ããŸããã«ãŒã«ã远å ãããã³ã«ãã®ãã€ãæ°ã¯ç¡æèã«å¢ãã2026-07-11ã®ç£æ»ã§æ³šå
¥åèšã40KBè¶
ïŒéé¿ããã¯ãã®agents 99äœãèªã¿èŸŒãŸãç¶ããŠããã®ãããã©ãŒãã³ã¹äœäžã®äž»å ãšå€æããŸããã以æ¥ããããæ¯é±èªåèšæž¬ããŠéŸå€è¶
éã§èªå·±ä¿®æ£ããã«ãŒããåžžèšããŠããŸãã
å°ãããšïŒèª°ãæ°ã¥ããªããã¡ã«å€ªã
CLAUDE.md ã«ã«ãŒã«ãæžãè¶³ãã®ã¯è¯ãããšã§ããã§ããæžãè¶³ããã¯äžæ¹åã«ããåããªããå幎ãçµãŠã°å¿ããç¯ãéè€ããå§çž®ããã¯ãã®ã¢ãŒã«ã€ããå®ã¯çããŠããŠã.agents/ ã«ç§»ãããã¡ã€ã«ãåŒãç¶ãèªã¿èŸŒãŸããŠãã ââ ãšããç¶æ
ã«ãªããŸãã
åé¡ã¯èšæž¬ããŠããªããšå£åãèŠããªãããšã§ããClaude ãããªããéãæ°ãããããšããçŽæã¯æ£ãããŠããäœKBãæ³šå ¥ãããŠããããæ®æ®µç¢ºèªãã人ã¯ããŸããã鱿¬¡ã§æ°å€ãåºããŠã人éãèšå®ããéŸå€ãè¶ ãããèªåã§ä¿®æ£ã詊ã¿ãä»çµã¿ãå¿ èŠã§ããã
äœãèšæž¬ããã
~/.claude/scripts/cc-self-audit.sh ã® collect() 颿°ãã¡ããªã¯ã¹ãçµã¿ç«ãŠãŸããéçèšæž¬ãšåçèšæž¬ã®2軞ã§ãã
éçèšæž¬ïŒæ³šå ¥ãã€ãæ°ãš agents æ°
inject_bytes=$(( \
$(find "$HOME/.claude/rules" -name '*.md' -print0 2>/dev/null | xargs -0 cat 2>/dev/null | wc -c) + \
$(cat "$HOME/.claude/CLAUDE.md" 2>/dev/null | wc -c) + \
$(cat "$HOME/CLAUDE.md" 2>/dev/null | wc -c) + \
$(cat "$HOME/.claude/projects/-Users-matsubara/memory/MEMORY.md" 2>/dev/null | wc -c) ))
agents_loaded=$(find "$HOME/.claude/agents" -name '*.md' 2>/dev/null | wc -l | tr -d ' ')
find ... -name '*.md' ã§ãããdirãååž°ããŸãããagents-archive/ ã«ç§»åãããã倧äžå€«ããšæã£ãŠããŠãã~/.claude/agents/ ã®äžã«ãããdirãšããŠçœ®ããŠããå Žå㯠èªã¿èŸŒãŸãç¶ããã®ãçœ ã§ãïŒ2026-07-11ã«ããã§99äœãçãæ®ã£ãŠããŸããïŒã
åçèšæž¬ïŒstopspamã»äžæºã¯ãŒãã»tool倱æ
ååå®è¡ä»¥éã® transcriptïŒ.jsonlïŒãã3ã€ãéèšããŸãã
STOP_MARKER = 'Stop hook feedback:\\n[~/.claude/hooks/self_audit_stop.sh]: '
FRUST_RE = re.compile(r'äœåãèš|ããå æžã«ã|åã€|èãããª|ãªãã§æ²»ãã|ææªãã|é æªã')
stopspam ã¯ãStop hook ãå®éã«ããã³ããã«æ³šå
¥ããè¡ãã ããæ°ããŸããåçŽãª grep ã ãšãtool_result ã«ããŸããŸå«ãŸããåãæååãæŸã£ãŠããŸãã宿
ã®6ã10åã®æ°åã«ãªããŸãïŒ2026-07-12ã«ããã§ 40â6 ã«ä¿®æ£ããŸããïŒãfrustration 㯠isMeta ã§ãªã type=user ã®ããã¹ããããã¯ãã€ãŸãæ¬äººã®ççºèšã ãã察象ã«ããŸãã
éŸå€
TH_INJECT_BYTES="${SELF_AUDIT_TH_INJECT:-40000}" # rules+CLAUDE.md+MEMORY.md åèš
TH_AGENTS="${SELF_AUDIT_TH_AGENTS:-60}" # ~/.claude/agents é
äž .md ç·æ°
TH_STOPSPAM="${SELF_AUDIT_TH_STOPSPAM:-15}" # ç£æ»hookçºç«/é±
TH_FRUSTRATION="${SELF_AUDIT_TH_FRUST:-8}" # äžæºã¯ãŒã/é±
TH_TOOLERR="${SELF_AUDIT_TH_TOOLERR:-400}" # tool倱æ/é±
ç°å¢å€æ°ã§äžæžãå¯èœã«ããŠããã®ã§ããã¥ãŒãã³ã°ãå¿ èŠã«ãªã£ãŠãã¹ã¯ãªãããè§Šããã«æžã¿ãŸãã
éåæ€ç¥ â èªå·±ä¿®æ£ â ç¬ç«åèšæž¬
éŸå€ãè¶
ããé
ç®ã breaches() ãäžèЧã«ããŠãclaude -p ã«æž¡ããŸãã
BREACH=$(echo "$METRICS" | breaches)
if [ -z "$BREACH" ]; then
log "GREEN"
notify "â
CCèªå·±ç£æ»: æ£åžž ($METRICS)"
exit 0
fi
éåããã£ãå Žåã®ããã³ãã㯠~/.claude å
ã ããä¿®æ£ãããŸãïŒãããžã§ã¯ãã³ãŒãã»secretã»pliståé€ã¯æç€ºçŠæ¢ïŒã
PROMPT="ããªãã¯Claude Codeç°å¢ã®èªå·±ç£æ»ã»èªå·±ä¿®åŸ©ãšãŒãžã§ã³ãã鱿¬¡ç£æ»ã§å£åãæ€ç¥ããã
...
1. ~/.claude å
ã ãã調æ»ã»ä¿®æ£ããïŒãããžã§ã¯ãã³ãŒãã»secretã»pliståé€ã¯çŠæ¢ïŒ
2. æ¢ç¥ã®å£åãã¿ãŒã³ãšæ£å
ž:
- agents_loadedè¶
é â ~/.claude/agents/ é
äžã®éé¿æŒãã ~/.claude/agents-archive/ ãžç§»å
- inject_bytesè¶
é â è¥å€§ããrules/MEMORY.mdãå§çž®ïŒãã«ç㯠~/.claude/rules-archive/ ãžïŒ
...
4. ä¿®æ£åŸã«å¿
ã 'bash ~/.claude/scripts/cc-self-audit.sh --collect-only' ãå®è¡ãæ¹åãæ°å€ã§ç¢ºèª
..."
claude -p ãçµãã£ãããã¹ã¯ãªããèªèº«ã collect() ãããäžåºŠåŒãã§ç¬ç«åèšæž¬ããŸããClaude ã®èªå·±ç³åã¯ä¿¡ããŸããã
# ç¬ç«åèšæž¬ïŒèªå·±ç³åã¯ä¿¡ããªãïŒ
AFTER=$(collect)
STILL=$(echo "$AFTER" | breaches)
if [ -z "$STILL" ]; then
notify "ð§ CCèªå·±ç£æ»: å£åæ€ç¥âèªå·±ä¿®æ£æžã¿ãå:[$BREACH] åŸ:å
šç·ã"
else
notify "ðš CCèªå·±ç£æ»: èªå·±ä¿®æ£åŸãæ®å [$STILL]ãèŠç¢ºèª: $LOG"
fi
ç·ã®ãšã㯠â
1è¡ã®ã¿ãéåâä¿®æ£æå㯠ð§ ååŸã®æ°å€ãä¿®æ£åŸãæ®å㯠ðš ã§ Discord ã® #01_alerts ã«æµããŸãã鱿¬¡ãªã®ã§é«é »åºŠã«ã¯ãªãããçå確èªãå
Œããäœãã€ãºéçšã§ãã
launchd ã§æ¥ææ 8:30 ã«åã
~/Library/LaunchAgents/com.lily.cc-self-audit.plist ã®æ žå¿éšåã§ãã
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key><integer>8</integer>
<key>Minute</key><integer>30</integer>
<key>Weekday</key><integer>0</integer>
</dict>
<key>Nice</key><integer>10</integer>
<key>LowPriorityIO</key><true/>
<key>ProcessType</key><string>Background</string>
Nice=10 ãš LowPriorityIO=true ãå
¥ããŠããã®ã¯ãclaude -p ãæå€§1200ç§ïŒFIX_TIMEOUT ã®æ¢å®å€ïŒèµ°ãããšãããããã§ããMac ã®ãã©ã¢ã°ã©ãŠã³ãåŠçãå§è¿«ããªããããæç€ºçã«ããã¯ã°ã©ãŠã³ãæ±ãã«ããŠããŸãã
RunAtLoad: falseã«ããŠãããªããšãplist ãbootstrapãããã³ã«ã¹ã¯ãªãããèµ°ããŸãã鱿¬¡ãžã§ãã¯RunAtLoadãfalseã«ããã®ãå¿ããã«ã
automation-health.sh ãšã®é£æº
~/.claude/scripts/automation-health.sh ã®ã鱿¬¡/ææ¬¡ãããã®æ»æŽ»ãã»ã¯ã·ã§ã³ã cc-self-audit.log ã®æŽæ°æå»ãç£èŠããŠããŸãã
declare -a CRON_JOBS=(
"weekly cleanup-misc:$CLAUDE/logs/cleanup-misc.log:192"
"weekly env-audit:$CLAUDE/logs/env-audit-latest.md:192"
...
)
for entry in "${CRON_JOBS[@]}"; do
a=$(age_h "$path")
if [ "$a" -le "$budget" ]; then ok "$name: ${a}hå (budget ${budget}h)"
else wn "$name: ${a}hå (budget ${budget}h è¶
é â launchd é
é倱æã®å¯èœæ§)"; fi
done
cc-self-audit.sh ãèµ°ããªãã£ãé±ã¯ automation-health.sh ãã192hè¶
éãã®WARNãåºããŸããããã§ãç£èŠã®ç£èŠããéããŠããŸãã
èžãã èœãšã穎
- ãããdirãžã®éé¿ã¯ãŒã广 â
.agents-backup/ã®ããã«ãããå§ãŸãã«ããŠãfind -name '*.md'ã¯æŸããagents-archive/ã~/.claude/ã®å€ã«çœ®ãããagents_loadedã®èšæž¬åŒã§é€å€ãã¹ãæå®ãããã®ã©ã¡ãããå¿ èŠ - grep ã®èª€æ€ç¥ã§åçã¡ããªã¯ã¹ã10åã« â transcript ã«ã¯ tool_result ãšããŠããã®ã¹ã¯ãªããã®ãœãŒã¹ããåãŸã£ãŠãããSTOP_MARKER ã®å®å šãããïŒpython3 ã® json parse ã§ isMeta ã§ãªã user ãããã¯ã®ã¿ã«çµãããš
- èªå·±ç³åã ãã§å®äºæ±ã â
claude -pããinject_bytes ãå§çž®ããŸããããšèšã£ãŠãcollect()ã§ç¬ç«åèšæž¬ããªããšæ°å€ã確èªã§ããªããä¿®æ£åŸã®ã¹ã³ã¢ãå¿ ã--collect-onlyã§ååŸããŠHISTORYã«æ®ã - FIX_TIMEOUT ãçããããããšä¿®æ£ãäžæ â æ¢å®ã®1200ç§ïŒ20åïŒã§è¶³ããªãã±ãŒã¹ã¯ã»ãŒãªãã£ãããä¿®æ£å¯Ÿè±¡ãå€ãæã¯éäžã§ã¿ã€ã ã¢ãŠãããŠ
STILLãæ®ã£ããŸãŸã«ãªãããã®å Žåã¯ðšéç¥ã§äººéã倿ãã - launchd ã« PATH ãæç€ºããªããš claude ãèŠã€ãããªã â plist ã® EnvironmentVariables ã«
/opt/homebrew/binãš~/.local/binã®äž¡æ¹ãå ¥ãããçŽ ã®ã·ã§ã«ãšã¯ PATH ãå¥ç©
ãŸãšã
- Claude Code ã®æ³šå
¥ãã€ãæ°ã¯
find ... | wc -cã§èšãããèšæž¬ããªããšèŠããªãå£å - éŸå€ã¯
TH_INJECT_BYTES=40000/TH_AGENTS=60ãèµ·ç¹ã«ãèªåã®ç°å¢ã«åãã㊠env äžæžãã§ãã¥ãŒãã³ã° - ä¿®æ£ã¯
claude -pã«~/.claudeå éå®ã§ä»»ããçŽåŸã«ç¬ç«åèšæž¬ããŠèªå·±ç³åãæ€èšŒãã - æ¥ææ 8:30 ã® launchdïŒ
automation-health.shã®ç£èŠäºéåã§ãç£èŠãæ»ãã§ããããæ€ç¥ã§ãã - é±1ã»çµæ1è¡ãªã®ã§éç¥ç²ãããªããç·ãç¶ãããšãå¥åº·ã®èšŒæã«ãªã
次åã¯ããã®ã«ãŒããæ€ç¥ãããè¥ãã MEMORY.mdããå§çž®ããªãã玢åŒã®æŽåãå£ããã«ä¿ã€æ¹æ³ãæžãäºå®ã§ãã
LilyïŒ@bokuwalilyïŒâ å人éçºè ãClaude Code ã§èªåååºç€ãçµã¿ãªãããiOSã¢ããªãWebãµãŒãã¹ãéç£ããŠããŸã
- AIã§ãå¯ãŠãŠãåãä»çµã¿ããäœã£ãŠæ120äžã«ãã話㯠noteã®ææèšäº ã«ð°
- OSS: github.com/bokuwalily ð
- ææ°æ å ±ã»ãåãåãã㯠X @bokuwalily ãžð
çããã® â€ïž ãã·ã§ã¢ãå±ã¿ã«ãªããŸãïŒ