Claude Codeãèªåã®ãå£åãã鱿¬¡æ€ç¥ããŠèªå修埩ããä»çµã¿
ååãç³ãéãããã·ã¥ããŒãã§ç¡äººãžã§ãã®ç¶æ³ãæ¯æäžèЧã«ããè©±ãæžããŸãããä»åã¯ãã®äžæ®µäž ââ Claude Codeç°å¢èªäœããå
é±ããå£åããŠããªããããèªåã§èšæž¬ããéŸå€ãè¶
ãããèªåã§~/.claudeãçŽãã«ããä»çµã¿ã®è©±ã§ãã
å
ã«å®æž¬ã ãåºããŸãã2026-08-23ã®é±æ¬¡ç£æ»ã§ã¯ãèµ·åæã«æ¯å泚å
¥ããããã€ãæ°(inject_bytes)ãéŸå€40,000ãè¶
ããŠ56,321ãã€ããŸã§èšåŒµããŠããŸãããclaude -pã«ããèªå·±ä¿®æ£ã§43,487ãã€ãïŒ23%åæžïŒãŸã§æ»ããŸããããããã§ãéŸå€ã3,487ãã€ãè¶
ãããŸãŸãèŠäººéããšæ£çŽã«å ±åããŠæ¢ãŸã£ãŠããŸããäžæ¹ã1é±éåã®2026-08-16ã®åãREDå€å®ã§ã¯ãèªå·±ä¿®æ£ã®ååŸã§inject_bytesã48,958â48,958ãš1ãã€ããåããŠããªãåããããŸãããçŽãããã€ããããšå®éã«çŽã£ãéããºã¬ã ââ ãããä»åã®äž»é¡ã§ãã
å°ãããšïŒç°å¢ãå£ããŠãããã©ããã人éãæ¯é±èŠã«è¡ãäœåããªã
çºç«¯ã¯2026-07-11ã®ããã©ãŒãã³ã¹ç£æ»ã§ãããã¹ã¯ãªããã®ãããã³ã¡ã³ãã«ãã®ãŸãŸæ®ã£ãŠããŸãã
èæ¯: 2026-07-11ããã©ãŒãã³ã¹ç£æ»ã§ãéé¿ããã¯ãã®agents 99äœã泚å
¥ããç¶ãããçã®
ç°å¢å£åããŠãŒã¶ãŒäœææªåã®äž»å ãšå€æã以åŸã¯äººéãé¢åãèŠãã«æžãããåžžèšåã
agents-archive/ã«éé¿ããã¯ãã®ãµããšãŒãžã§ã³ãå®çŸ©ããå®ã¯ååž°çã«ããããã£ã¬ã¯ããªãŸã§èªã¿èŸŒãŸããŠããŠ99äœåãã®ãŸãŸæ³šå
¥ããç¶ããŠãã ââ ãšããäºæ
ã§ãããã®æã®å£åã¯rulesãã¡ã€ã«ã®ç¶ãè¶³ããMEMORY.mdã®è¥å€§ãhookã®ã¹ãã åãªã©ãæ¯é±å°ããã€éãã«é²è¡ããã®ã§ãæ°ã¥ããæã«ã¯æé
ãã«ãªããã¡ã§ããããšãã£ãŠãé±1ã§èªåã®èšå®ãã£ã¬ã¯ããªãèŠã«è¡ããã人éã®ç¿æ
£ã«é ŒããšããŸãç¶ããŸããã
å šäœåïŒèšæž¬ â èªå·±ä¿®æ£ â ç¬ç«åèšæž¬ã®3å±€ã«ãŒã
~/.claude/scripts/cc-self-audit.shãæ¥æ8:30ã«launchdã§èµ·åãããã®3段ã1æ¬ã®ã·ã§ã«ã¹ã¯ãªããã§ãããŸãã
- éçèšæž¬ïŒæ³šå ¥ãã€ãæ°ã»agentsèªèŸŒæ°ãå®ãã¡ã€ã«ããæ°ãã
- åçèšæž¬ïŒååå®è¡ä»¥éã®transcriptãããç£æ»hookã®ã¹ãã ã»äžæºã¯ãŒãã»tool倱æãæ°ãã
- éŸå€ãè¶
ãããïŒREDïŒ
claude -pã~/.claudeå ã ããèªå·±ä¿®æ£ããä¿®æ£åŸã«åãèšæž¬ãããäžåºŠç¬ç«ã«èµ°ãããŠæ¹åãæ€èšŒãã
fail-openèšèšã§ãbash 3.2äºæã»set -uo pipefailãç£æ»èªäœãã³ã±ãŠãæ¢åã®ç°å¢ãå£ããªãããã«ããŠãããŸãã
5ææšãšéŸå€
| ææš | éŸå€ | äžèº« |
|---|---|---|
inject_bytes | 40,000 | rules/*.md + CLAUDE.md(2ç®æ) + MEMORY.md ã®åèšãã€ãæ° |
agents_loaded | 60 | ~/.claude/agentsé
äž.mdã®ååž°ã«ãŠã³ãïŒãããdiråçºæ€ç¥ïŒ |
stopspam | 15/é± | ç£æ»hookã®çºç«åæ° |
frustration | 8/é± | äžæºã¯ãŒãã®åºçŸåæ° |
toolerr | 400/é± | tool倱æïŒ"is_error":trueïŒä»¶æ° |
éç2ææšã¯æ¯åãã«ã¹ãã£ã³ãåç3ææšã¯self-audit/lastrun.markerããæ°ããtranscriptïŒæå€§200ãã¡ã€ã«ïŒã ããèŠãŸããèšæž¬æ¬äœã¯ããã§ãã
collect() {
local inject_bytes agents_loaded
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 ' ')
# ...åç3ææš(stopspam/frustration/toolerr)ã¯ååå®è¡ä»¥éã®transcriptãã...
}
breaches()ã¯çŽ æŽã«PythonèŸæžãšæ¯èŒããã ãã§ãã
th = {'inject_bytes': 40000, 'agents_loaded': 60,
'stopspam': 15, 'frustration': 8, 'toolerr': 400}
for k, t in th.items():
if m.get(k, 0) > t:
print(f'{k}={m[k]} (éŸå€{t})')
stopspam/frustrationã®æ€åºã¯æåãçŽ æŽãªgrepã§ããããããš2026-07-12ã®å®æž¬ã§stopspamã6â40ãfrustrationã4â18ã«è·³ãäžãã£ãŠããŸããŸãããåå ã¯hookã¹ã¯ãªããèªèº«ã®ãœãŒã¹åŒçšãtranscriptå ã®tool_resultæ¬æã®éšåäžèŽãŸã§èª€æ€ç¥ããŠããããšã§ããä»ã¯Stop hookãå®éã«æ³šå ¥ããStop hook feedback:\n[.../self_audit_stop.sh]:ãšããåºå®æååã®å®å šäžèŽãšãtype=userãã€isMetaã§ãªã=人éã®å®çºèšã ãã«çµã£ãŠããŸãã
èªå·±ä¿®æ£ïŒclaude -pã«~/.claudeã ããè§Šããã
REDã«ãªã£ãããæ€ç¥ããéåãšçŽè¿å±¥æŽãåã蟌ãã ããã³ããã§claude -pãåŒã³ãŸãã
OUT=$(cd "$HOME/.claude" && printf '%s' "$PROMPT" | run_capped "$FIX_TIMEOUT" "$CLAUDE" \
--strict-mcp-config --mcp-config '{"mcpServers":{}}' -p \
--model "$MODEL" --output-format text \
--allowedTools "Read,Write,Edit,Bash,Grep,Glob" \
--max-turns 50 2>&1) || true
ããã³ããæ¬æã«ã¯æ¢ç¥ã®å£åãã¿ãŒã³ãšå¯ŸåŠã®æ£å žãæžããŠãããŸãã
2. æ¢ç¥ã®å£åãã¿ãŒã³ãšæ£å
ž:
- agents_loadedè¶
é â ~/.claude/agents/ é
äžã®éé¿æŒãïŒãããdirãèªã¿èŸŒãŸããïŒã agents-archive/ ãžç§»å
- inject_bytesè¶
é â è¥å€§ããrules/MEMORY.mdãå§çž®ïŒãã«ç㯠rules-archive/ ãžããªã³ã¯ã¯å
šç¶æãçŽ¢åŒæŽåãæ€èšŒïŒ
- stopspamè¶
é â self_audit_stop.sh ã®æå¶ããžãã¯ãç¹æ€
- frustration/toolerrè¶
é â 該åœtranscriptãgrepããŠçå ãç¹å®ãåçºé²æ¢ãä»èŸŒã
4. ä¿®æ£åŸã«å¿
ã 'cc-self-audit.sh --collect-only' ãå®è¡ãæ¹åãæ°å€ã§ç¢ºèª
5. èªåã§å®å
šã«çŽããªãé
ç®ã¯ç¡çãããæåŸã«ãèŠäººé: çç±ããš1è¡ã§åºå
--strict-mcp-configã§MCPãµãŒããŒããŒãã«ããallowedToolsã¯èªã¿æžã4çš®ïŒBashã®ã¿ãäœæ¥ãã£ã¬ã¯ããªã~/.claudeã«åºå®ããä¿®æ£å¯Ÿè±¡ãèªåã®ããŒã ãã£ã¬ã¯ããªã®å€ã«åºããªãäœãã§ãã
æ€èšŒïŒèªå·±ç³åã¯ä¿¡ããªã
èã¯ããã§ããclaude -pããçŽããããšèšã£ãŠããä¿®æ£ãçµãã£ãçŽåŸã«ã¹ã¯ãªããèªèº«ãããäžåºŠcollect()ãç¬ç«ã«åŒã³çŽããŸããhistory.jsonlã«æ®ã£ãŠããå®äŸã3ã€äžŠã¹ãŸãã
倱æâ ïŒèªå·±ç³åãšå®æž¬ãéæ¹åã«ãºã¬ãïŒ2026-07-12ïŒ
[2026-07-12 08:30:06] RED: stopspam=40 (éŸå€15) / frustration=18 (éŸå€8)
[2026-07-12 08:40:00] claude output: frustration=18â0ïŒèª€æ€ç¥ã ã£ãtool_resultéšåäžèŽãæé€ãå®çºèšã¯0ä»¶ïŒã
stopspam=40â27ïŒéè€èšæž¬ãã°ä¿®æ£ïŒ...次åéèšçªã§éŸå€15以äžã«åæèŠèŸŒã¿ã
[2026-07-12 08:40:03] after: {"stopspam":58,"frustration":32,"toolerr":68}
claude -pã¯ãfrustration 18â0ããstopspam 40â27ããšç³åããŸããããç¬ç«åèšæž¬ã®çµæã¯stopspam=58, frustration=32ãšç³åãšéã«æªåããŠããŸããïŒãã®èª€æ€ç¥èªäœãäžã®grepåé¡ãã®ãã®ã§ãåŸæ¥ä¿®æ£ãããŠããŸãïŒãããèªå·±ç³åã ããä¿¡ããŠDiscordã«ãâ
çŽããŸããããšæµããŠãããã宿
ãšçéã®å ±åã«ãªããšããã§ããã
倱æâ¡ïŒçŽããã€ããã§æ°å€ã1ãã€ããåããªãïŒ2026-08-16ïŒ
[2026-08-16 08:30:36] RED: inject_bytes=48958 (éŸå€40000)
[2026-08-16 08:50:37] claude output: (空)
[2026-08-16 08:51:05] after: {"inject_bytes":48958, ...}
claude outputæ¬ã空ã®ãŸãŸãbefore/afterã§inject_bytesãå®å
šã«åäžã§ãããäœãå€ããã«çµãã£ã空æ¯ãã§ãããããç¬ç«åèšæž¬ããªããã°ãå®è¡ã¯ãããã倧äžå€«ãã§èŠéãããŠããã¯ãã§ãã
æåïŒçŽã£ãäžã§ãçŽãåããªãã£ãåã¯æ£çŽã«ãèŠäººéãïŒ2026-08-23ïŒ
[2026-08-23 08:30:11] RED: inject_bytes=56321 (éŸå€40000)
[2026-08-23 08:43:57] claude output: inject_bytes 56321â43487(23%æžãå
šãªã³ã¯æ€èšŒOKãåå¥memoryãã¡ã€ã«358ä»¶ã¯ç¡å·)ã
èŠäººé: æ®ã3487è¶
éåã¯ã皌åäžãããžã§ã¯ããã»ã¯ã·ã§ã³(é²è¡äžã®åè«ã»éé¡ã»æ¥çšãå«ã)ã
äž»å ã§ãæ©æ¢°çã«å®å
šå€æã§ããªãããæ¬äººã«ããæ£åžããå¿
èŠã
[2026-08-23 08:44:27] after: {"inject_bytes":43487, ...}
changelogã«ã¯ããå°ã詳ããæ®ã£ãŠããŸãã
1) ãã«ããã¯ã¢ãã: rules-archive/memory-md-full-2026-08-23.md ã«å
MEMORY.md(44798 bytes)ãä¿å
2) ãç£æ»ã»ç°å¢ã®äžå€æ¡ä»¶ããæè¡ãªãã¡ã¬ã³ã¹ãã®2ã»ã¯ã·ã§ã³(解決æžã¿45ä»¶ã»13KB)ãã€ã³ããã¯ã¹ããå€ã
ã¢ãŒã«ã€ããžã®1è¡ãã€ã³ã¿ã«çœ®æ
3) 皌åäžãããžã§ã¯ãå
ã®åæ¢/å®äºç¢ºèªæžã¿ãšã³ããª4ä»¶ãåé€ãã¢ãŒã«ã€ãåç
§ã«çœ®æ
4) åå¥memoryãã¡ã€ã«(358ä»¶)ã¯äžååé€ããŠããªã
çµæ: MEMORY.md 44798â31964 bytesãinject_bytes 56321â43487 bytes (23%åæž)
æ€èšŒ: å
šãªã³ã¯255ä»¶ããã¡ã€ã«å®åšãšäžèŽ(MISSING 0ä»¶)
ãã®åã¯ãæ¶ããŠããæ ¹æ ãããåã ãæ©æ¢°çã«åããæ ¹æ ã®ãªãåïŒé²è¡äžã®åè«æ
å ±ïŒã¯éŸå€å²ãã®ãŸãŸäººéã«æããããšãã倿ãclaude -pèªèº«ãããŠããããç¬ç«åèšæž¬ãè£ä»ãã圢ã§ãã3ä»¶ãšãåãã¹ã¯ãªããã®åãçµè·¯ã§ããã**ãç³åãšå®æž¬ãéè¡ããç³åã ã空æ¯ãããç³åãšå®æž¬ãäžèŽãæ£çŽã«æ®èª²é¡ãå ±åã**ã®3ãã¿ãŒã³ãå®éã«èµ·ããŠããŸããããããèªå·±ç³åãä¿¡ããªãããèšèšã®äžå¿ã«çœ®ããŠããçç±ã§ãã
å ±åïŒç·ã¯1è¡ãèµ€ã¯å·®åå ¥ãã§Discordãž
if [ -z "$STILL" ]; then
notify "ð§ CCèªå·±ç£æ»: å£åæ€ç¥âèªå·±ä¿®æ£æžã¿ãå:[$BREACH] åŸ:å
šç·ã詳现=$CHANGELOG"
else
notify "ðš CCèªå·±ç£æ»: èªå·±ä¿®æ£åŸãæ®å [$STILL]ãèŠç¢ºèª: $LOG / $CHANGELOG
ClaudeèŠçŽ: $(echo "$OUT" | tail -3 | tr '\n' ' ')"
fi
ç·ïŒéåãªãïŒã®é±ã¯â
CCèªå·±ç£æ»: æ£åžžã®1è¡ã ããDiscordã®#01_alertsã«é£ã°ããŸããé±1å®è¡ãªã®ã§ãããã¯ãçå確èªããå
ŒããŠããŸããèµ€ã®ãŸãŸçŽãåããªãã£ãé±ïŒ2026-08-23ã¯ãŸãã«ããïŒã¯ðšä»ãã§æ®åå·®åãšclaude -pã®èŠçŽããã®ãŸãŸè»¢èšããæã¿æ¶ããã«äººéã«æž¡ããŸãã
launchdåŽïŒååã®æèšããã®ãŸãŸæŽ»ãã
com.lily.cc-self-audit.plistã¯æ¥æ8:30èµ·åã§ãã
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:~/.local/bin</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>~/.claude/scripts/claude-quota-guard.py</string>
<string>--job</string>
<string>com.lily.cc-self-audit</string>
<string>--</string>
<string>/bin/bash</string>
<string>~/.claude/scripts/cc-self-audit.sh</string>
</array>
<key>LowPriorityIO</key><true/>
<key>Nice</key><integer>10</integer>
<key>RunAtLoad</key><false/>
PATHãæç€ºããŠããã®ã¯ãååã®èšäºã§æžãããlaunchdã®æå°PATHã§claudeãèŠã€ãããªãããèžãŸãã察çã§ããããã«å®è¡æ¬äœãçŽæ¥bash cc-self-audit.shã«ãããclaude-quota-guard.py --job ... --ã§ã©ããããŠããŸããç¡äººãžã§ãããã©ã³æ ãé£ã朰ãäºæ
ã¯æ¢ã«å¥ã®ä»çµã¿ã§åŠãã§ããã®ã§ã鱿¬¡ç£æ»ããã®æ 管çãçŽ éããããŸãããNice 10ãšLowPriorityIOã§ããã©ã¢ã°ã©ãŠã³ãäœæ¥ã劚ããªãåªå
床ã«èœãšããŠãããŸãã
èžãã èœãšã穎
- çŽ æŽãªgrepã§stopspam/frustrationãå®äœãšç¡é¢ä¿ã«è·³ããïŒ6â40, 4â18ïŒ â hookãæ³šå
¥ããåºå®ããŒã«ãŒæååã®å®å
šäžèŽãšã
type=userãã€isMetaã§ãªãçºèšã®ã¿ã«çµã£ã - èªå·±ç³å(frustration 18â0)ãç¬ç«åèšæž¬(32)ãšéè¡ãã â ãçŽãããããã°ã«æžãããã ãã§ã¯äžååãä¿®æ£åŸã«å¿
ãåã
collect()ãããäžåºŠç¬ç«ã«èµ°ãããèšèšã«ãã - REDä¿®æ£ã空æ¯ãã§before/afterãå®å
šäžèŽããåããã£ã â 空æ¯ãã
STILLå€å®ã«ãã®ãŸãŸä¹ãã®ã§ãæ¡ãã€ã¶ããDiscordã«æ®ã agents_loadedã¯ããããã£ã¬ã¯ããªãååž°çã«èªã¿èŸŒãŸãã â åçŽãªfind *.mdã§ã¯ãªããéé¿å (agents-archive/)èªäœã~/.claude/agentsé äžã«æ®ã£ãŠããªãããåãããŠèŠãå¿ èŠããã- MEMORY.mdã®ãé²è¡äžã®åè«ãã¯æ©æ¢°çã«å®å šã«åããæ ¹æ ããªã â éŸå€å²ãã®ãŸãŸãèŠäººéãã§æ¢ãã倿ãããã³ããåŽã«æç€ºããŠãã
ãŸãšã
- 鱿¬¡ã§èšæž¬âïŒèµ€ãªãïŒèªå·±ä¿®æ£âç¬ç«åèšæž¬ã®3å±€ã«ãŒãã
launchdäžæ¬ã§åããŠãã - ææšã¯
inject_bytes/agents_loaded/stopspam/frustration/toolerrã®5ã€ããã¹ãŠæ°å€ã®éŸå€è¶ éã§å€å® claude -pã®èªå·±ç³åã¯ãã®ãŸãŸã§ã¯ä¿¡ããªããä¿®æ£åŸã«åãèšæž¬ãããäžåºŠç¬ç«ã«èµ°ãããŠåããŠãçŽã£ãããšæ±ã- å®éã«ãç³åãšå®æž¬ãéè¡ããç³åã ã空æ¯ããã®äž¡æ¹ãèµ·ããŠãããç¬ç«åèšæž¬ãªãã§ã¯èŠéããŠãã
- çŽãåããªãåïŒé²è¡äžã®åè«æ å ±ãªã©ïŒã¯éŸå€å²ãã®ãŸãŸãèŠäººéãã§æ£çŽã«æ¢ããèšèšã«ããŠãã
次åã¯ãMEMORY.mdã®ãé²è¡äžã®åè«ã»æ¡ä»¶æ
å ±ããæ©æ¢°ã«ã©ããŸã§å€æãããŠããã ââ èªååãšäººéã®å€æã®ç·åŒãã«ã€ããŠæžãäºå®ã§ãã
LilyïŒ@bokuwalilyïŒâ å人éçºè ãClaude Code ã§èªåååºç€ãçµã¿ãªãããiOSã¢ããªãWebãµãŒãã¹ãéç£ããŠããŸã
- AIã§ãå¯ãŠãŠãåãä»çµã¿ããäœã£ãŠæ120äžã«ãã話㯠noteã®ææèšäº ã«ð°
- OSS: github.com/bokuwalily ð
- ææ°æ å ±ã»ãåãåãã㯠X @bokuwalily ãžð
- AIå°å ¥ã»èªååã®çžè«ãšå®è£ ãã³ãã¬7æ¬ã®é åžã¯ å ¬åŒLINE ããð¬
çããã® â€ïž ãã·ã§ã¢ãå±ã¿ã«ãªããŸãïŒ