𩞠`--model`çç¥ã§ç¡äººãžã§ãã察話æ ã3é±éé£ãç¶ãã話
æ10äžã®å€§åŠçãæãæã¡ã§æ60äžãŸã§äžããäŒç€Ÿéœåã§è§£éãããŠ0ã«æ»ããå幎ã§Claude Codeã®èªåŸç°å¢ãç©ã¿äžããŠä»ã¯æå120äžã§ãââãäœæ¥ãããã§ãªããç°å¢ãè²ãŠããã«è³ããããšãããã®å·®ãäœããŸããã
ãªããã®ä»çµã¿ãå¹ãã®ã
坿¥ã§çšŒãæ¹æ³ã調ã¹ããšãå¿ ããã¹ãã«ã売ãããã³ã³ãã³ããäœããããµãŒãã¹ãäœããã®3æã«åæããŸããã©ããæ£è§£ã§ãããã ãå šéšã«å ±éãã倩äºããããèªåã®æéãæéãšããäºå®ã§ãã
æ60äžã®æãæã¡æä»£ãç§ã¯å®éã«çšŒåæéã®éçãè¿ããŸãããèšäº1æ¬ã»DM1éã»ææ¡æž1æãå šéšã«èªåã®æãèŠããã¯ã©ã€ã¢ã³ããå¢ããã»ã©å質ãèœã¡ããå¢ãããªãã質ãèœãšããªãââè§£éã«ãªã£ãã®ã¯ã¡ããã©ãã®ã¿ã€ãã³ã°ã§ããããäžåºŠãåãããæ¹ã¯ããªãããšæ±ºããŸããã
ååºçºã§éžãã ã®ã**ãèªåãåããªããŠãåãç°å¢ãå
ã«äœãã**ãšããã¢ãããŒãã§ããä»ã¯ launchd ãžã§ããæ¯æ8æãš10æ35åã«èµ·åããèšäºã¹ããã¯ãçæããDiscordã«éç¥ãéã£ãŠãããŸããç§ãMacãéããŠããªããŠããç ã£ãŠããŠããèšäºã¯å¢ãç¶ããŸãã
ãã®ä»çµã¿ã匷ãçç±ã¯3ç¹ãããŸãã
æéãç©ã¿äžããã人éã®äœæ¥ã¯æéãæ¶è²»ããŸããç°å¢ã®äœæ¥ã¯æéãçç£ããŸãããžã§ããåããåæ°ã¯æ¶ããã«åšåº«ãšããŠç©ãŸãããäœèª¿ãæªããŠ3æ¥äœãã§ããªãéãããžã§ãã¯éãã«åšåº«ãå¢ããç¶ããŸãããæ£åžžã«åããŠããã°ããã§ããââãã®ãããããä»åã®æ¬é¡ã§ãã
ã¹ã±ãŒã«ã®æ¡ãå€ããã人éã1æ¥ã«æžããèšäºã¯æ°æ¬ãéçã§ãããžã§ãã¯äžŠåã§ããã€ã§ãèµ°ããä»ã¯èšäºçæã»æ¥æ¬¡PDCAã»å€éšããŒã¿ã®æ§é åã»åä¿¡DMå€å®ã®4ã¬ãŒã³ãåãå€äžã«åããŠããŸãã人é1人ã®åŠçéãè¶ ããã®ã¯ããšãŒãžã§ã³ããæšªã«äžŠãã ããã§ãã
ã¯ã©ãŒã¿ã®æ§é ãçè§£ããæ·±ããå€ãããClaude CodeããAIã«é ŒããããŒã«ãšããŠäœ¿ã£ãŠãã人ãšããã€ã³ãã©ã®äžéšããšããŠé ç·ããŠãã人ãšã§ã¯ãæã«åŠçã§ããéãæ ¹æ¬ããéããŸããã€ã³ãã©ãšããŠäœ¿ãã«ã¯ãã¯ã©ãŒã¿ãã©ã®ããã«å ±æãããã©ã®ããã«æ¶è²»ãããããæ£ç¢ºã«ç¥ããªããã°è©°ãŸããŸããä»åã®é害ã¯ãŸãã«ãã®ç¥èã®ç©Žã§èµ·ããŸããã
å šäœã®æµã
ã³ã³ãã³ãçæåºç€ã®éªšæ Œãå ã«èŠããŸããåŸåã§é害ãè§£åããã®ã§ãå šäœåãå ã«æã£ãŠãããšèªã¿ãããã§ãã
launchd
~/Library/LaunchAgents/com.shun.article-daily.plist
èµ·åã¿ã€ãã³ã°: 08:00 / 10:35ïŒæ¯æ¥ïŒ
â
âŒ
~/.claude/scripts/claude-quota-guard.py
--job com.shun.article-daily
â â ã¯ã©ãŒã¿æ®éã®ã¬ãŒãå±€
âŒ
~/.discord/run-and-notify.sh
"zenn" "Zennèšäºã¹ããã¯çæ"
â â Discordéç¥ã©ãããŒ
âŒ
~/.claude/scripts/article-daily-stock.sh apply
â â å®éã®çæããžãã¯
âŒ
claude -p "ããã³ãã..." [--model ???]
â
ââ --model ãæç€ºããå Žå
â æå®ã¢ãã«ã®ç¬ç«ããæ ã§å®è¡
â â èšäºããã¹ããæ£åžžã«è¿ã â
â
ââ --model ãçç¥ããå Žå
察話ã»ãã·ã§ã³ã®ãæ¢å®ã¢ãã«æ ããå
±ææ¶è²»
â æ ãåãããšä»¥äžã®1è¡ã ã stdout ã«åããŠçµäº:
"You've reached your Fable limit."
â exit code ã¯é0
â ãã ããã°ã«ã¯ã1è¡è¿ã£ãŠããããšããæ®ããªã
â [ -s output ] çã®çŽ æŽãªãã§ãã¯ãéãæãã â
â äœé±éã§ãèª°ãæ°ã¥ããªã â å®éã«3é±éæ°ã¥ããªãã£ã
å³ã®æäžæ®µãéå®³ã®æ žå¿ã§ããclaude -p 㯠--model ãçç¥ããŠããšã©ãŒã«ã¯ãªããŸãããéãã«å¯Ÿè©±ã»ãã·ã§ã³ã®æ ãæ¶è²»ãã«è¡ããŸããæ ãåãããš1è¡ã®ã¡ãã»ãŒãžãè¿ããŠçµäºããããã®1è¡ããåºåããã£ãããšèª€èªãããããšã§ãæ€ç¥ãããæããŸãã
plistã®å®è£
å®éã® com.shun.article-daily.plist ãæç²ããŸãïŒå®ãã¹ã¯ ~ 衚èšã«å€æïŒã
<key>ProgramArguments</key>
<array>
<string>~/.claude/scripts/claude-quota-guard.py</string>
<string>--job</string>
<string>com.shun.article-daily</string>
<string>--</string>
<string>/bin/bash</string>
<string>~/.discord/run-and-notify.sh</string>
<string>zenn</string>
<string>Zennèšäºã¹ããã¯çæ</string>
<string>/bin/bash</string>
<string>~/.claude/scripts/article-daily-stock.sh</string>
<string>apply</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key><integer>8</integer>
<key>Minute</key><integer>0</integer>
</dict>
<dict>
<key>Hour</key><integer>10</integer>
<key>Minute</key><integer>35</integer>
</dict>
</array>
<key>StandardOutPath</key>
<string>~/.claude/logs/article-daily.out.log</string>
<key>StandardErrorPath</key>
<string>~/.claude/logs/article-daily.err.log</string>
<key>ProcessType</key><string>Background</string>
<key>LowPriorityIO</key><true/>
<key>Nice</key><integer>10</integer>
ProcessType: Backgroundã»LowPriorityIO: trueã»Nice: 10 ã®3ã€ã¯ã»ããã§å
¥ããŠããŸããOSã®I/O調åã«ãããã¯ããã¯ã°ã©ãŠã³ãã®äœåªå
ã¿ã¹ã¯ã§ãããšæç€ºããããšã§ããã©ã¢ã°ã©ãŠã³ãã®äœæ¥ïŒFigmaãéããSafariã§èª¿ã¹ç©ãããïŒã®éªéããããªãèšå®ã§ãã
ãžã§ãã®åŒã³åºãé£é㯠launchd â quota-guard â run-and-notify â article-daily-stock ã®4段ã§ããarticle-daily-stock.sh ã®å
éšã§ claude -p ãåŒã°ããããã« --model ããããã©ãããåé¡ã«ãªããŸãã
2026幎9æ3æ¥ã«4ã¬ãŒã³åæã«é²åºãã
ç§ã®ã±ãŒã¹ã§ã¯ãåãæ¬ èœã4ã€ã®ãžã§ãã§åæã«è¡šé¢åããŸããããã¬ããžããŒã¹ã«æ®ã£ãŠããèšé²ãåŒçšããŸãã
| ã¬ãŒã³ | çç¶ | 被害æé |
|---|---|---|
gen-column.mjsïŒLINEã³ã©ã çæïŒ | æ¯æãFable limitã1è¡ã§ exit 1ãåšåº«ãæ®ã2æ¬ãŸã§æ¯æž | 2026/8/13ã9/3ïŒ3é±éïŒ |
triageïŒåä¿¡DMå€å®ïŒ | æ åãåãå šéšãå€å®äžèœãã«åãã9/2ããåä¿¡DMã1ä»¶ãèªåè¿ä¿¡ãããŠããªãã£ã | 9/2ã |
brand-404ïŒIGæ¥æ¬¡PDCAïŒ | Fable limit ã§åºåãŒããåœæ¥ã®æã¡æã»æ¥å ±ãæªçæ | 9/2 |
hosei-grad-plannerïŒPDFæ§é åïŒ | 00:21 / 04:30 / 10:30ã®3åãšãæ§é åããŒã¿åºåãŒã | 9/3 |
gen-column.mjs ã¯3é±éãæ¯æãæ£åžžã«åããŠããããã«èŠããç¶æ
ãã§åšåº«ãæ¶èãç¶ããŸãããçºèŠããã®ã¯åšåº«ãæ®ã2æ¬ã«ãªã£ãŠããã§ãããžã§ãã®ãã°ã«ã¯ã1è¡è¿ã£ãŠããããšèšé²ãããŠããŸããããã®1è¡ã®äžèº«ã誰ãèªãã§ããªãã£ãã
ã4ã¬ãŒã³åæããšããã®ãéèŠãªäºå®ã§ãã1æ¬ã ãå£ããŠããã°æ°ã¥ãããããè€æ°ãåæã«é»ã£ãŠæ¢ãŸã£ãŠãããšãããå šäœãéããããããšããéåæã¯èããŸããããããèªååãå¹ããŠæã空ããŠããããšèª€èªããæ¹åã«åŒã£åŒµãããŸãã
åé¡ã®æ ¹æ¬ã¯**ã--model ãæžããªãããšããã³ãŒãã®æ¬ é¥ã§ãããããã1è¡ãã = æåããšãããã°ç£èŠã®çã**ãšçµã¿åãããããšã§ã3é±éæ€ç¥ãããŸããã§ããã2ã€ã®ç©Žãããããåç¬ã§ã¯æ°ã¥ãããã穎ã ã£ãã«ãããããããéãªãããšã§æ»è§ãäœã£ãã
ãã®æ§é ããåŸåã§è§£åããŸãããªã --model ã®çç¥ãããã»ã©æ°ã¥ãã«ããã®ããæ€ç¥ã確å®ã«ãã1ã¹ã¯ãªããã®äœãæ¹ããããŠæ¢åã®å
š plist ã«æžãå¿ãããªãããæ©æ¢°çã«åŒŸãgrepã²ãŒãã®å®è£
ãŸã§é çªã«èŠãŠãããŸãã
å®è£ ã®è©³çް
--model ã®äœçœ®ãšæžãæ¹
é害ãåããŠä¿®æ£ããããšã® article-daily-stock.sh ãèŠããšãclaude -p ãåŒã³åºãç®æã¯2ãæãããŸãããã¿ç«æ¡ïŒãã¥ãŒã空ã®ãšãã«æ¬¡ã®ãããã¯ãèªåçæïŒãšèšäºæ¬æã®çæã§ããã©ã¡ãã«ã --model ãå
¥ã£ãŠããŸãã
# ãã¥ãŒã空ã®ãšã: å®äœæ¥ãããã¿ãèªåç«æ¡ïŒarticle-daily-stock.sh 327-330è¡ç®ïŒ
TOPIC_JSON=$(run_to 600 "$CLAUDE" -p "$REPLENISH_PROMPT" \
--strict-mcp-config --mcp-config '{"mcpServers":{}}' \
--model "${ARTICLE_MODEL:-sonnet}" --effort high \
--output-format text --allowedTools "Read,Grep,Glob,Bash" --max-turns 20 2>>"$LOG")
# èšäºæ¬æã®çæïŒarticle-daily-stock.sh 397-401è¡ç®ïŒ
run_to 1500 "$CLAUDE" -p "$PROMPT" \
--strict-mcp-config --mcp-config '{"mcpServers":{}}' \
--model "${ARTICLE_MODEL:-sonnet}" --effort high \
--output-format text --allowedTools "Read,Grep,Glob,Write,Bash" --max-turns 40 >> "$LOG" 2>&1 \
|| log "WARN: claude -p exité0ïŒæ€èšŒã§åŒŸãïŒ"
"${ARTICLE_MODEL:-sonnet}" ãšããæžãæ¹ãèã§ããç°å¢å€æ° ARTICLE_MODEL ãæªå®çŸ©ã®å Žåã§ã sonnet ã«ãã©ãŒã«ããã¯ããã®ã§ããæžãå¿ãããšãã«æ¢å®ã¢ãã«ãžæµããããšããäºæ
ãèµ·ããŸãããããã«ãã³ãŒãã«ã¢ãã«IDãããŒãã³ãŒãããªãããšããå¥ã®éçšã«ãŒã«ãåæã«æºãããŠããŸããã¢ãã«IDãæååã§åã蟌ããšããã³ããŒããšã€ãªã¢ã¹ã廿¢ãããšãã«å
šã¹ã¯ãªãããæžãçŽã矜ç®ã«ãªããŸãã倿°äžæ¬ã§åãæ¿ããããããã«ããŠããã°ãlaunchctl setenv ARTICLE_MODEL haiku ã®1è¡ã§å
šã¬ãŒã³ãåãæ¿ããããŸãã
ããäžç¹ã--strict-mcp-config --mcp-config '{"mcpServers":{}}' ã®çµã¿åãããå¿
ãã»ããã§å
¥ããŠããŸããlaunchd ããã®èµ·åã¯ãã°ã€ã³ã·ã§ã«ãçµç±ããªããããããŒã ãã£ã¬ã¯ããªã® .mcp.json ãèªãŸããŸãããã®äžã«å€éšMCPãµãŒããŒã®èšå®ãããå Žåãããããæå³ããå€éšãããã¯ãŒã¯ãå©ãã«è¡ãããšããããŸãã空ã®ãµãŒããŒèšå®ãæç€ºããããšã§ããããå
ã§ã®å€éšMCPåŒã³åºããå®å
šã«å°ããŠããŸãã
strict_quota_message ã®èšèšââ400åã®å£
claude-quota-guard.py ã®äžã« strict_quota_message() ãšãã颿°ããããŸãããããä»åã®äºæ
ã§æãéèŠãªæ€ç¥ããžãã¯ã§ãã
# claude-quota-guard.py 41-47è¡ç®
STRICT_QUOTA_PATTERNS = (
r"(?:you(?:'ve| have) )?hit your (?:weekly |5-?hour |usage |session )?limit",
r"claude (?:ai )?usage limit reached",
r"approaching your (?:weekly |usage )?limit",
)
STRICT_QUOTA_MAX_CHARS = 400
# claude-quota-guard.py 159-170è¡ç®
def strict_quota_message(text: str) -> bool:
"""æåçµäº(exit 0)ã®æ¬æããäžéã¡ãã»ãŒãžãã®ãã®ãããå€å®ããã
äžéæ¬æã¯çãããã®äžæã ããè¿ããèšäºæ¬æã«ããŸããŸåãèªãåºãŠãçºç«ãããªãã
"""
trimmed = text.strip()
if not trimmed or len(trimmed) > STRICT_QUOTA_MAX_CHARS:
return False
return any(
re.search(pattern, trimmed, flags=re.IGNORECASE)
for pattern in STRICT_QUOTA_PATTERNS
)
STRICT_QUOTA_MAX_CHARS = 400 ãšããäžéãèŠã®èšèšã§ããClaudeãäžéã«éãããšãè¿ãæååã¯ãYou've reached your Fable limit.ãããYou've hit your weekly limit.ãã®1æã§ãé·ããŠãæ°åæåã§ããäžæ¹ãæ£åžžã«çæãããèšäºæ¬æã400å以äžã§ããããšã¯ãŸããããŸããããã®é·ãã®é察称æ§ã䜿ã£ãŠãäžéã¡ãã»ãŒãžãã®ãã®ãããäžéã«èšåããèšäºæ¬æãããæ©æ¢°çã«åé¢ããŠããŸãã
ãã¿ãŒã³ãæ£èŠè¡šçŸã§æžããšããåãçºæ³ã§èšèšããŠããŸããããã QUOTA_PATTERNSïŒexit é0ã®ãšã䜿ãïŒãšå³ãã STRICT_QUOTA_PATTERNSïŒexit 0ã®ãšã䜿ãïŒãåããŠããã®ã¯ãèšäºæ¬æã®é¡æã«ãã¯ã©ãŒã¿ããåºãŠããå Žåã«èªåã§ãµãŒããããã¬ãŒã«ãŒãåããŠããŸã誀æ€ç¥ãé²ãããã§ããå®éããã®å€å®ãçããŸãŸéçšããŠããææã«ãã¯ã©ãŒã¿ãé¡æã«æžããèšäºããµãŒããããã¬ãŒã«ãŒãèœãšããããšããäºæ
ããã£ãã®ã§ãexit 0 / é0 ã§å€å®ããžãã¯ãåãæ¿ããçŸåšã®å®è£
ã«èœã¡çããŸããã
postcondition gateââãåºåããã£ããã§ã¯æåã«ããªã
article-daily-stock.sh ã«ã¯ article_ok() ãšãã颿°ãå
¥ã£ãŠããŸãïŒ133-181è¡ç®ïŒãclaude -p ã® exit code ãæ£åžžã§ãããã®é¢æ°ãééããªãéãèšäºã¯åãä»ããŸããã
# article-daily-stock.sh 133è¡ç®
MIN_ARTICLE_BYTES=1200
# article-daily-stock.sh 173-181è¡ç®
article_ok() {
local f="$1"
[ -s "$f" ] || return 1
[ "$(stat -f%z "$f" 2>/dev/null || echo 0)" -ge "$MIN_ARTICLE_BYTES" ] || return 1
grep -qE '^title:' "$f" || return 1
frontmatter_title_ok "$f" || return 1
grep -qiE 'request timed out|äžæãªåå|TODO: *æ¬æ|\(çæå€±æ\)' "$f" && return 1
return 0
}
æäœ1200ãã€ããtitle: frontmatterã®ååšãã¿ã€ãã«ã70å以å
ãã¿ã€ã ã¢ãŠãæèšã®æ··å
¥ãªãââãã®4æ¡ä»¶ããã¹ãŠæºãããŠåããŠãçææåããšèšé²ããŸãããã®æ€èšŒãããã¯ã¯ claude -p ã®çŽåŸã«çœ®ãããã¡ã€ã«ãåºæºãæºãããªãå Žåã¯ãã¡ã€ã«ãåé€ããŠçµäºããŸãïŒ411-415è¡ç®ïŒããã®æ¥ã®ã¹ããããç¡é§ã«ããªããããããŒã«ãŒãã¡ã€ã«ïŒ~/.claude/logs/.article-daily-done-${TODAY}ïŒããæ€èšŒãééããŠããåããŠç«ãŠããèšèšã«ããŠããŸãïŒ509è¡ç®ïŒã
postconditionã¯ãçæãæ£åžžã«å®äºãããããšã®èšŒæ ã§ãããã¡ã€ã«ãååšãããã©ããã§ã¯ãªãããã¡ã€ã«ã®äžèº«ãæåŸ ããå質ãæã£ãŠãããã©ãããæ©æ¢°çã«ç¢ºãããããã®çºæ³ã«åãæ¿ããŠãããããžã§ããåããïŒææãç©ãŸããããšãã誀èªããªããªããŸããã
æžãå¿ããæ©æ¢°ã§åŒŸãgrepã²ãŒã
--model ã®æžãå¿ãã人éãèŠã€ããã®ã¯é£ããã§ãããã¡ã€ã«ãå¢ããã»ã©ç®èŠãã§ãã¯ã¯éçã«ãªããŸãã以äžã®ã¯ã³ã©ã€ããŒã§ã~/.claude/scripts/ ãš ~/Library/LaunchAgents/ é
äžã暪æããŠãclaude -p ã¯ããã --model ãç¡ãè¡ããæœåºã§ããŸãã
# plisté
äžã®ãžã§ãã¹ã¯ãªããã§ --model ãæžãå¿ããŠããç®æãæœåºãã
grep -rn "claude -p" ~/.claude/scripts/ \
| grep -v -- '--model' \
| grep -v '^Binary'
ãããCIãpre-commitããã¯ã«çµã¿èŸŒãã®ãçæ³ã§ãããlaunchdãžã§ãã¯éåžžã®CIãšæ¥ç¶ãããŠããŸããã代ããã«æ¬¡ã®æ¹åŒã䜿ã£ãŠããŸãã鱿¬¡ã® launchctl list | grep com.shun ã§å
šãžã§ãã®ååšã確ãããã¿ã€ãã³ã°ã«åãããŠãäžèšã®grepãäžç·ã«æµããŸãã0è¡ã§è¿ãã°å
šéšã»ãŒãã1è¡ã§ãè¿ãã°ã©ããã«æžãå¿ããããã
plistããåŒã°ããã¹ã¯ãªãããåŒã¶ã¹ã¯ãªãããããã«åŒã¶âŠâŠãšãã倿®µåŒã³åºãã®ã±ãŒã¹ã§ã¯ãæ«ç«¯ã®ã¹ã¯ãªãããŸã§ååž°çã«ãã©ãå¿ èŠããããŸãã
# 倿®µåŒã³åºããå«ããŠååž°çã«æ€çŽ¢
grep -rn "claude -p\|claude --print" \
~/.claude/scripts/ \
~/dev/ \
--include="*.sh" --include="*.mjs" --include="*.js" --include="*.py" \
| grep -v -- '--model' \
| grep -v '#.*claude -p' # ã³ã¡ã³ãè¡ã¯é€å€
--include ã§å¯Ÿè±¡æ¡åŒµåãçµããªããšçµæãèšå€§ã«ãªããŸãã.sh .mjs .js .py ã®4çš®ã§èªåã®ç°å¢ã®9å²ã¯ç¶²çŸ
ã§ããŸããã
ç§ãè©°ãŸã£ã話
3é±éãåšåº«ã2æ¬ã«ãªããŸã§æ°ã¥ããªãã£ã
gen-column.mjs ã¯æ¯æLINEã³ã©ã ã1æ¬çæãããžã§ãã§ããåšåº«ã5æ¬ãäžåã£ã段éã§ã¢ã©ãŒããäžããèšèšã«ããŠããã¯ããããªããçºç«ããŸããã§ãããåšåº«ã2æ¬ã«ãªã£ããšããDiscordã®éç¥ãæåã§èŠãŠããŠåããŠãããããããšæ°ã¥ããŸããã
ãã°ãæããšãæ¯æãããªã£ãŠããŸããã
[2026-08-14 08:03:12] claude -p "..." å®è¡
[2026-08-14 08:03:19] åºå: "You've reached your Fable limit."
[2026-08-14 08:03:19] åºåæåæ°: 32
[2026-08-14 08:03:19] ãžã§ãå®äº
ãžã§ãããå®äºãã㊠exit 0 ãè¿ããŠããã®ã§ãquota-guardã®éèšã«ã¯ãæåããšããŠèšé²ãããŸãããåšåº«ã«ãŠã³ãã®ããžãã¯ããæ£åžžå®äº=1æ¬çææåããšããŠå ç®ããŠãããããåšåº«æ°ã¯å¢ããŠããããã«èŠããŠãããå®éã«ã¯1æ¬ãå¢ããŠããªãã®ã«ã
çºèŠããåå ã¯åšåº«ã®å®ãã¡ã€ã«æ°ãçŽæ¥ ls ã§æ°ããããšã§ããããã2ã ã£ãããžã§ãã®æåã«ãŠã³ããšå®ãã¡ã€ã«æ°ã®ä¹é¢ã蚌æ ã§ããã
ãã®åŸãåšåº«ç£èŠãã«ãŠã³ã¿ã§ã¯ãªãå®ãã¡ã€ã«æ°ã«ããããšãçæåŸã® postcondition checkãå ¥ããããšãã®2ç¹ãå ¥ããŸãããã«ãŠã³ã¿ã¯ãçæããããšããææè¡šç€ºã§ãã£ãŠãçæã§ããããšãã蚌æ ã«ã¯ãªããŸããã
æèšãå€ãã£ãã ãã§ãµãŒããããã¬ãŒã«ãŒãçŽ éããã
2026幎9æ2æ¥ãclaude-quota-guard.pyã® QUOTA_PATTERNS ã session limit ãå«ãã§ããªãã£ãããšã倿ããŸããã
ãã®æ¥ã®ãšã©ãŒã¡ãã»ãŒãžã¯ä»¥äžã®ãããªåœ¢åŒã§ããã
You've hit your session limit · resets 6:50pm (Asia/Tokyo)
ããã¯ã5æéã»ãã·ã§ã³äžéãã®æèšã§ããåŸæ¥ã®ãweekly limitãããFable limitããšã¯è¡šçŸãéããåœæã® QUOTA_PATTERNS ã«ã¯ãã®ãã¿ãŒã³ãå
¥ã£ãŠããªãã£ããããã¯ã©ãŒã¿æ€ç¥ãéãæããŸãããçµæããã®æ¥ã® note 3ã¬ãŒã³å«ãå
šãžã§ããäžéäžã«ç©ºæã¡ãç¶ãã306è¡åã®ç¡é§ãªClaudeåŒã³åºãã4æéç¶ããŸããã
ä¿®æ£ã¯ QUOTA_PATTERNS ã« r"resets?\s+(?:at\s+)?\d{1,2}(?::\d{2})?\s*[ap]m" ã远å ããããšã§ããïŒclaude-quota-guard.py 37è¡ç®ïŒããresetsããšããåè©ãšãæå»ïŒam/pm圢åŒïŒãã®çµã¿åãããæŸããã¿ãŒã³ã§ãããã®è¡ã¯çŸåšãã³ãŒãã®äžã«æ®ã£ãŠãããã³ã¡ã³ãã«ã2026-09-02: 5æéäžéã¯ãã®åœ¢åŒã§è¿ãããšå®æ³ãèšé²ãããŠããŸãã
ããã§åŠãã ã®ã¯ãã¯ã©ãŒã¿æ€ç¥ããã³ããŒã®æèšã«äŸåãããŠã¯ãããªãããšããååã§ããæèšã¯ãã³ããŒãå€ããŸããå€ããããšãã¢ããŠã³ã¹ããŸãããAnthropicã¯éå»ã«ããYou've reached your limitããYou've hit your Fable limitããYou've hit your session limitããšè€æ°ã®è¡šçŸã䜿ã£ãŠããŸããããã¿ãŒã³ãããã¯ãæèšã®å®å šäžèŽãã§ã¯ãªããæèšã®æ§é çç¹åŸŽãã§æžãå¿ èŠããããŸãã
ãµãŒããããã¬ãŒã«ãŒãæçš¿ãžã§ããŸã§æ¢ãã
2026幎8æ21æ¥ããµãŒããããã¬ãŒã«ãŒãéããïŒ=ã¯ã©ãŒã¿è¶ éãæ€ç¥ããïŒãšããçæãžã§ãã ãã§ãªãæçš¿ãžã§ããŸã§æ¢ãŸããšããåé¡ãèµ·ããŸããã
claude-quota-guard.pyã®ã³ã¡ã³ãã«èšé²ããããŸãã
# ðŽ 2026-08-21: circuit ãéããšå
šãžã§ããäžåŸã§æ¢ãŸããããæ¶è²»ã®å€§åãå ãã
# è¿ä¿¡/ãšã³ã²ãŒãžç³»ãã¯ã©ãŒã¿ã䜿ãåã£ãå·»ãæ·»ãã§ãæçš¿ããŸã§åæ¢ããŠããã
# 宿ž¬(launchd.log 环èš): xpilot.autopost 㯠231å®è¡/308ã¹ãããïŒå®è¡ç43%ã§ã
# threadspilot.engage(64%) ããåªå
床ãäœãæ±ãã«ãªã£ãŠãããæçš¿ã¯ãã®æé垯ãéããš
# äºåºŠãšåãŸããªãã®ã§...
æçš¿ã¯ã¿ã€ãã³ã°ãåœã§ããæ8æã®ã¹ããããéããæçš¿ã¯å€ã«äžããŠãåã广ã¯ãããŸãããçæãžã§ããšã¯åªå åºŠãæ ¹æ¬ããéãã
åé¡ã®åå ã¯ããµãŒããããã¬ãŒã«ãŒãå šãžã§ããåºå¥ãªãæ¢ãããèšèšã«ãããŸããã¯ã©ãŒã¿ã䜿ãåã£ãã®ã¯çæãžã§ããªã®ã«ãæçš¿ãžã§ããŸã§å·»ãæ·»ãã§æ¢ãŸã£ãŠããŸããã
察åŠãšã㊠--priority ãã©ã°ãå
¥ããŸããïŒçŸåšã®ã³ãŒãã« run_job() ã® priority: bool åŒæ°ãšããŠæ®ã£ãŠããŸãïŒãåªå
ãžã§ã㯠claim_priority_probe() ã«ãã£ãŠ PRIORITY_PROBE_INTERVALïŒæ¢å®30åïŒããšã«1åã ãããµãŒããããéããŠããŠã詊è¡ãèš±ããŸãïŒclaude-quota-guard.py 454-468è¡ç®ïŒã詊è¡ãæåããã°ãã¯ã©ãŒã¿ãå埩ããããšå€æããŠãµãŒããããéããããã®èšèšã«ããããæçš¿ã¯æ¢ãŸããªããååŸ©ã®æ©ææ€ç¥ãã§ããããšããäºéã®ç®çã1æ©æ§ã§éæããŠããŸãã
exit 0 ãè¿ããªããã¯ã©ãŒã¿ã¡ãã»ãŒãžã ã£ã
æãèŠã€ãã«ããã£ãã®ããexit code ã 0 ã§ãstdout ã«äžéã¡ãã»ãŒãžãè¿ã£ãŠããããã¿ãŒã³ã§ãããã㯠--model ãçç¥ãããšãã ãã§ãªããç¹å®ã®æ¡ä»¶äžã§claudeãã¯ã©ãŒã¿ã¡ãã»ãŒãžããæåããšããŠè¿ãå Žåã«ãèµ·ããŸãã
åœåã® quota-guard 㯠exit code ã 0 ã®ãšããæåããšããŠèšé²ãããµãŒããããéããæ¹åã«å€å®ããŠããŸããããã®ãããexit 0 ã§äžéã¡ãã»ãŒãžãè¿ã£ãŠããŠããµãŒãããã¯éããããžã§ãã¯ãæåããšèšé²ãããå®éã®åºåã¯äžéã®1è¡ã ãââãšããç¶æ ãäœãµã€ã¯ã«ãç¶ãããšããããŸããã
strict_quota_message() ã®å°å
¥ïŒåè¿°ã®400åãã§ãã¯ïŒã¯ãã®åé¡ãžã®çŽæ¥ã®å¯ŸåŠã§ããexit 0 ã§ãã£ãŠããstdout ããã®é¢æ°ã®æ¡ä»¶ãæºããå Žåã¯ã¯ã©ãŒã¿æ€ç¥ãšããŠæ±ãããµãŒããããéããŸãïŒclaude-quota-guard.py 187-190è¡ç®ïŒã
def is_quota_response(returncode: int, text: str) -> bool:
if returncode != 0:
return quota_message(text) # ããããã¿ãŒã³
return strict_quota_message(text) # å³ãããã¿ãŒã³ïŒ400å以äžïŒæ§é ãããïŒ
exit code ãšåºåå 容ãäž¡æ¹èŠãŠå€å®ããããã®èšèšãå ¥ã£ãŠãããexit 0 ã®åœæåãã«ããèŠéãããªããªããŸããã
ä»ããæ¯ãè¿ããšã4ã€ã®é害ã¯ãã¹ãŠåã1æ¬ã®æ ¹ããçããŠããŸããããclaude -p ã¯åŒæ°ãäžå®å
šã§ããšã©ãŒã«ãªããªãããšããæ§è³ªã§ããäžå®å
šãªåŒæ°ã§ããäºæ³å€ã®æåã§ããClaudeã¯äœããè¿ããŸãããã®ãäœãããåºåãšããŠèšé²ããããããç£èŠãçããšãã¹ãŠãæ£åžžã«èŠããã
å®ç§ãªåæã§ãžã§ããèšèšããã®ã§ã¯ãªããäžå®å šãªå®è¡ãåæã«ããŠæ€ç¥ãšå埩ãç©ã¿éããââãã®ææ³ã«ç§»è¡ããŠããã4ã¬ãŒã³åæåæ¢ã®ãããªäºæ ã¯èµ·ããŠããŸããã
ã€ãŸãããã€ã³ã
å®éã«ãããããé ã«äžŠã¹ãŸããã©ããããã®ãã¡æ°ã¥ãã ããããšæã£ãŠãããæ°ã¥ããŸããã§ããã
--model ãçç¥ããŠããã³ãã³ãããšã©ãŒã«ãªããªã
claude -p ã¯åŒæ°ãäžå®å
šã§ãé»ã£ãŠå®è¡ããŸããçç¥æã¯å¯Ÿè©±ã»ãã·ã§ã³ã®æ ãå
±ææ¶è²»ãããããåé¡ã衚é¢åããã®ã¯ã察話æ ãåãããšããã§ãããããããæžããç¬éã§ã¯ãããŸãããæžãå¿ãããã®æ¥ã«å£ããããã§ã¯ãªããäœé±éãããšã«å¥ã®ã¿ã€ãã³ã°ã§éãã«æ»ã«ãŸããå æãé¢ããŠããã»ã©åå ã«æ°ã¥ããªãã
exit 0 ã§äžéã¡ãã»ãŒãžãè¿ã£ãŠãã
--model ãçç¥ããŠå¯Ÿè©±æ ãåãããšãclaude -p ã¯ãYou've reached your Fable limit.ãã stdout ã«åããŠçµäºããŸãããã®ãšã exit code ã 0 ã®ã±ãŒã¹ãååšããŸãã$? ã§æåå€å®ããŠããã¹ã¯ãªããã¯ãäžéã¡ãã»ãŒãžãæ£åžžãªåºåãšåºå¥ã§ããŸããã[ -s output.txt ] ããã¡ã€ã«ã空ã§ãªããã°ééããŸãã32æåã§ããåºåããã£ãããšå€å®ãããã
åšåº«ã«ãŠã³ã¿ãšå®ãã¡ã€ã«æ°ãä¹é¢ãã
gen-column.mjs ã®ã±ãŒã¹ã§ã¯ããžã§ãããå®äºãã㊠exit 0 ãè¿ããã³ã«æåã«ãŠã³ã¿ãå¢ããåšåº«ããå¢ããŠããããã«èŠããŠããããå®éã«ã¯1æ¬ãå¢ããŠããªããã«ãŠã³ã¿ã¯ãçæããããšããããšããææè¡šç€ºã§ãã£ãŠããçæã§ããããšãã蚌æ ã§ã¯ãããŸãããåšåº«ãå®éã«2æ¬ã«ãªããŸã§3é±éæ°ã¥ããªãã£ãã®ã¯ãç£èŠã®ææšãã«ãŠã³ã¿ã«çœ®ããŠããããã§ãã
4ã¬ãŒã³åæåæ¢ã§ãèªååãå¹ããŠããããšèª€èªãã 1æ¬ã®ãžã§ããæ¢ãŸã£ãŠããã°ãã©ããããããããšæ°ã¥ããããã4æ¬ãåæã«é»ã£ãŠæ¢ãŸããšããå šäœãéããããããšããéåæã¯èããŸããããããæã空ããŠããïŒèªååãå¹ããŠããããšããæ¹åã«åŒã£åŒµãããŸãã9/3ã«é²åºãã4ã¬ãŒã³åæåæ¢ã¯ããŸãã«ãã®ã¡ã«ããºã ã§3é±éèŠéãããŸããã
ã¯ã©ãŒã¿ã®æèšã¯ãã³ããŒãç¡åç¥ã§å€ãã
9/2ã®ãšã©ãŒã¯ãYou've hit your session limit · resets 6:50pm (Asia/Tokyo)ããšãã圢åŒã§ãåŸæ¥ã®ãweekly limitããFable limitããšã¯è¡šçŸãéããŸãããåœæã® QUOTA_PATTERNS ã«ãã®ãã¿ãŒã³ãå
¥ã£ãŠããããã¯ã©ãŒã¿æ€ç¥ãããæããŸãããçµæã4æéã§306è¡åã®ç¡é§ãªClaudeåŒã³åºããç¶ããŸããããæèšã®å®å
šäžèŽãã§æ€ç¥ãæžããšããã³ããŒã衚çŸãå€ããç¬éã«ç¡ååãããŸãã
ãµãŒããããã¬ãŒã«ãŒãæçš¿ãžã§ããŸã§äžåŸã§æ¢ãã
8/21ã«èµ·ããäºæ
ã§ããçæãžã§ããã¯ã©ãŒã¿ã䜿ãåã£ããšããæçš¿ãžã§ããŸã§å·»ãæ·»ãã§åæ¢ããŸããã宿ž¬ã§ã¯ xpilot.autopost ã®å®è¡çã43%ãŸã§èœã¡ãŠããŸãããçæãžã§ãã¯å€±æããŠããªãã©ã€ã§ããŸããæçš¿ã¯ãã®æé垯ãéããšäºåºŠãšåãŸããŸãããåªå
åºŠãæ ¹æ¬ããéããžã§ããåããµãŒããããã¬ãŒã«ãŒã§æ¢ããèšèšãåé¡ã§ããã
launchd ã¯ãã°ã€ã³ã·ã§ã«ãéããªã
plistããèµ·åãããã¹ã¯ãªããã¯ãã¿ãŒããã«ã§æåå®è¡ãããšããšå®è¡ç°å¢ãéããŸãã~/.zshrc ã® PATH ãèªãŸããªããnvm ã§ç®¡çããŠãã node ã claude ã³ãã³ããèŠã€ãããªããcom.shun.article-daily.plist ã« EnvironmentVariables ã§ PATH ãæç€ºããŠããã®ã¯ãã®ããã§ããæå
ã§åãã®ã« launchd ã§ã¯æ»ã¬åå ã®å€§åã¯ããã§ãã
.mcp.json ãèªãŸããŠããããå€éšãããã¯ãŒã¯ãå©ã
launchd èµ·åã§ã¯ãããŒã ãã£ã¬ã¯ããªã® .mcp.json ãèªåã§èªãŸããŸããããŒã«ã«éçºçšã®MCPãµãŒããŒèšå®ãããå Žåãããããæå³ããå€éšã«æ¥ç¶ãã«è¡ããŸãã--strict-mcp-config --mcp-config '{"mcpServers":{}}' ãå
¥ããªããšãããããäœãããŠãããæå
ã§ã¯åçŸã§ããªãåäœãããããšããããŸãã
ã¢ãã«IDãã¹ã¯ãªããã«ããŒãã³ãŒããããšäžæç Žç¶»ãã
ã¢ãã«ã®ãšã€ãªã¢ã¹ããã³ããŒã廿¢ã»æ¹åãããšããæååãåã蟌ãã§ããã¹ã¯ãªãããå
šéšæžãçŽã矜ç®ã«ãªããŸãã--model claude-sonnet-4-5 ã®ããã«ããŒãžã§ã³èŸŒã¿ã§æžããŠãããšãã¢ãã«ãæŽæ°ããããã³ã«å
šã¹ã¯ãªãããå·¡åããäœæ¥ãçºçããŸãã
`åšåº«5æ¬ä»¥äžã§ã¢ã©ãŒãããçºç«ããªãã£ã ã¢ã©ãŒãã®ããžãã¯ãåšåº«æ°ãã«ãŠã³ã¿ããååŸããŠãããããã«ãŠã³ã¿ããå¢ããŠããïŒå®éã«ã¯å¢ããŠããªãïŒãéã¯ã¢ã©ãŒããçºç«ããŸããã§ãããç£èŠã®ææšã¯çæãžã§ãã®æåã«ãŠã³ãã§ã¯ãªãããã¡ã€ã«ã·ã¹ãã ã®å®ãã¡ã€ã«æ°ã§ãªããã°ãããŸããã
ãã¹ããã©ã¯ãã£ã¹
4ã¬ãŒã³åæåæ¢ãš3é±éã®æ°ã¥ããªããã¹ããèžçãããä»ã§ãå šãžã§ãã«é©çšããŠããã«ãŒã«ã§ãã
1. claude -p ã«ã¯å¿
ã --model ãæç€ºãã
ããããã¹ãŠã®èµ·ç¹ã§ããçç¥ã¯çŠæ¢ããžã§ããæžãåããã--model ã®ãªã claude -p ã¯ååšããªãããã«ãŒã«ã«ããŸãã
2. ç°å¢å€æ°ãã©ãŒã«ããã¯ã§æžã
--model "${ARTICLE_MODEL:-sonnet}"
ã¢ãã«IDãã¹ã¯ãªããã«çŽæžãããŸãããæªå®çŸ©æã® :-sonnet ãã©ãŒã«ããã¯ã«ãããæžãå¿ããŠæ¢å®æ ã«èœã¡ãããé²ããlaunchctl setenv ARTICLE_MODEL haiku ã®1è¡ã§å
šãžã§ããåãæ¿ããããŸãã
3. postcondition gate ã claude -p ã®çŽåŸã«çœ®ã
MIN_ARTICLE_BYTES=1200
article_ok() {
[ -s "$f" ] || return 1
[ "$(stat -f%z "$f")" -ge "$MIN_ARTICLE_BYTES" ] || return 1
grep -qE '^title:' "$f" || return 1
grep -qiE 'request timed out|TODO: *æ¬æ' "$f" && return 1
return 0
}
ãåºåããã£ããã§ã¯æåã«ããŸãããæäœãã€ãæ°ã»frontmatterã®ååšã»ã¿ã€ã ã¢ãŠãæèšã®æ··å ¥ââãã®3æ¡ä»¶ããã¹ãŠæºãããŠåããŠãçææåããšèšé²ããŸãã
4. åšåº«ç£èŠã¯å®ãã¡ã€ã«æ°ã§è¡ã
ã«ãŠã³ã¿ã¯ææè¡šç€ºãå®ãã¡ã€ã«æ°ã¯èšŒæ ã§ããã¢ã©ãŒãã®ææšã¯ ls ~/.claude/stock/ | wc -l ã®å®æ°ã«çœ®ããŸããã«ãŠã³ã¿ãå¢ããŠããŠããã¡ã€ã«ãå¢ããŠããªããã°å€±æã§ãã
5. ã¯ã©ãŒã¿æ€ç¥ã¯ãæèšã®æ§é ãã§æžã
"Fable limit" ã®ãããªå®å
šäžèŽã§ã¯ãªãã以äžã®ãããªæ§é ãã¿ãŒã³ã䜿ããŸãã
r"(?:you(?:'ve| have) )?hit your (?:weekly |5-?hour |usage |session )?limit"
r"resets?\s+(?:at\s+)?\d{1,2}(?::\d{2})?\s*[ap]m"
ãã³ããŒãæèšãå€ããŠãããäžéã«éããããšããæ§é ãæã€è¡šçŸã§ããã°æŸããŸãã
6. exit code ãšåºåå 容ãäž¡æ¹èŠãŠå€å®ãã
def is_quota_response(returncode: int, text: str) -> bool:
if returncode != 0:
return quota_message(text) # ããããã¿ãŒã³
return strict_quota_message(text) # å³ãããã¿ãŒã³ïŒ400å以äžïŒæ§é ãããïŒ
exit 0 ã®åœæåãé²ãã«ã¯ãexit code ãš stdout ã®äž¡æ¹ãç¬ç«ããŠãã§ãã¯ããŸãã
7. 400åã®äžéã§ã¯ã©ãŒã¿ã¡ãã»ãŒãžãšèšäºæ¬æãåé¢ãã
Claudeãäžéã§è¿ãã¡ãã»ãŒãžã¯æ°åæåã§ããæ£åžžãªèšäºæ¬æã400å以äžã«ãªãããšã¯ãŸããããŸãããlen(trimmed) > 400 ãªãäžéã¡ãã»ãŒãžãšããŠå€å®ããªãââãã®1è¡ããã¯ã©ãŒã¿ã顿ã«ããèšäºãèªåã®ãµãŒããããã¬ãŒã«ãŒãèœãšãããšãã誀æ€ç¥ãé²ããŸãã
8. ãããã«ã¯ --strict-mcp-config --mcp-config '{"mcpServers":{}}' ãã»ããã§å
¥ãã
launchd çµç±ã®èµ·åã§ã¯ .mcp.json ãèªãŸããŸãã空ã®ãµãŒããŒèšå®ãæç€ºããããšã§ãããããå€éšMCPãæå³ããåŒã³ã«è¡ãäºæ
ãå°ããŸãããã®2ãã©ã°ã¯ã»ããã§1ã€ã®èšå®ã§ããçæ¹ã ãã§ã¯æ©èœããŸããã
9. ãžã§ãã®åªå
床ã§ãµãŒããããã¬ãŒã«ãŒã®æåãå€ãã
æçš¿ãžã§ããšçæãžã§ããåããµãŒããããã¬ãŒã«ãŒã§æ¢ããŸãããæçš¿ã¯ priority: true ã§ããŒã¯ãããµãŒããããéããŠããŠã PRIORITY_PROBE_INTERVALïŒ30åããšïŒã«1åã ã詊è¡ãèš±ããŸããè©Šè¡æåã§ã¯ã©ãŒã¿ååŸ©ãæ€ç¥ããŠãµãŒããããéããââæçš¿ã®åæ¢é²æ¢ãšååŸ©ã®æ©ææ€ç¥ã1æ©æ§ã§éæããŸãã
10. plist ãæžããããã®å Žã§ grep ã²ãŒããæµã
grep -rn "claude -p\|claude --print" \
~/.claude/scripts/ ~/dev/ \
--include="*.sh" --include="*.mjs" --include="*.js" --include="*.py" \
| grep -v -- '--model' \
| grep -v '#.*claude -p'
0è¡ãªãå
šãžã§ãã»ãŒãã1è¡ã§ãè¿ãã°æžãå¿ãããããŸããplist ã远å ããã¿ã€ãã³ã°ã§å¿
ãæµããŸãã鱿¬¡ã® launchctl list 確èªã®ã¿ã€ãã³ã°ã«åãããŠæµããšç¿æ
£ã«ãªããŸãã
11. ProcessType: Background / LowPriorityIO: true / Nice: 10 ã®3ç¹ã»ãã
ãã®çµã¿åããããã¹ãŠã®ããããžã§ãã«å
¥ããŸããOSã«ãäœåªå
ããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ããšæç€ºããããšã§ãFigmaãéããŠããã»ãã©ãŠã¶ã§èª¿ã¹ç©ãããŠãããšãã£ããã©ã¢ã°ã©ãŠã³ãäœæ¥ã®éªéãããŸãããplistã®ããã©ã«ãã¯äœãèšå®ããªãïŒStandardåªå
ïŒãªã®ã§ãæç€ºããªããã°åãããŸãã
12. launchd çš PATH 㯠EnvironmentVariables ã§æç€ºãã
nvm ã§ç®¡çããŠãã node ã claude ã¯ããã°ã€ã³ã·ã§ã«ã® PATH ã«ããååšããŸãããlaunchd ããã®èµ·åã¯ãã°ã€ã³ã·ã§ã«ãçµç±ããªããããEnvironmentVariables ããŒã« nvm ã®ãã€ããªãã¹ãå«ã PATH ãæç€ºããŸããcom.shun.article-daily.plist ã®å®è£
ã§ã¯ ~/.nvm/versions/node/v24.13.0/bin ãPATHã®å
é ã«å
¥ããŠããŸãã
13. 倿®µåŒã³åºãã¯æ«ç«¯ãŸã§ååž° grep ãã
plist â quota-guard.py â run-and-notify.sh â article-daily-stock.sh â claude -p ãšããé£éã§ã¯ãgrep ã²ãŒãã plist ã ãã«ãããŠãæ«ç«¯ã®ã¹ã¯ãªããã¯æ€æ»ãããŸããã--include ã§ .sh .mjs .js .py ãæå®ããŠãåŒã³åºãé£éã®æ«ç«¯ãŸã§ååž°çã«æ€çŽ¢ããŸãã
14. ã¹ã¯ãªããã«æ¥ä»ã€ãã³ã¡ã³ãã§äºæ
èšé²ãæ®ã
claude-quota-guard.py ã®37è¡ç®ã« # 2026-09-02: 5æéäžéã¯ãã®åœ¢åŒã§è¿ã ãšããã³ã¡ã³ããæ®ã£ãŠããŸãããã¿ãŒã³ã远å ããçç±ãšæ¥ä»ãæžããŠããããšã§ãå幎åŸã®èªåïŒããã㯠Claude CodeïŒãã³ãŒããèªãã ãšãã«ããªããã®ãã¿ãŒã³ãããã®ãããæšæž¬ããªããŠæžã¿ãŸããé害ã®çµç·¯ã¯ã³ãããã¡ãã»ãŒãžãããã³ãŒãã®é£ã«æžãæ¹ãèªãŸããŸãã
ãŸãšã
--model ã®çç¥ã¯1è¡ã®æžãå¿ãã§ããããã3é±éã4ã¬ãŒã³åæãåšåº«2æ¬ãŸã§æ¯æžãšããé害ãäœããŸãããã³ãã³ãããšã©ãŒã«ãªããªãã»exit 0 ã§è¿ã£ãŠããã»ãã°ã«ã¯ã1è¡ãã£ãããšæ®ãââãã®3ã€ãéãªããšã人éã®ç®èŠã§ã¯äœé±éã§ãæ°ã¥ããŸããã
èªååãã€ã³ãã©ãšããŠäœ¿ãã«ã¯ããå®ç§ã«åãããšããåæã§ãžã§ããèšèšããŠã¯ãããŸãããäžå®å
šãªå®è¡ãåæã«ããŠãæ€ç¥ãšå埩ãç©ã¿éããã®ãæ£ããææ³ã§ãã--model ã®æç€ºã¯åºçºç¹ã§ãpostcondition gateã»å®ãã¡ã€ã«æ°ç£èŠã»æ§é ãã¿ãŒã³æ€ç¥ã»åªå
床ä»ããµãŒããããã¬ãŒã«ãŒã¯ãã®å»¶é·ã«ãããŸãã
ä»ã¯4ã¬ãŒã³ãåæã«é»ã£ãŠæ¢ãŸããããªäºæ ã¯èµ·ããŠããŸããããžã§ããå¢ããŠãåãååãé©çšã§ããã®ã§ã171æ¬ã®ãžã§ããåããŠããŠã远å ã®ã¡ã³ã¿ã«ã³ã¹ãã¯ã»ãŒãŒãã§ãããç°å¢ãèªåã®ä»£ããã«åãããæç«ããã®ã¯ãç°å¢ãå£ãããšãã«èªåã§æ°ã¥ããèªåã§å埩ããä»çµã¿ãå ¥ã£ãŠããããã§ãã
ä»çµã¿ã®å šäœåã»æ120äžã®å èš³ã»30æ¥æé ã¯æænoteã«ãŸãšããŠããŸãã ð Claude CodeèªåŸç°å¢ã§ãå®éã©ã皌ãã â ä»çµã¿ã»å®äŸã»å§ãæ¹ã»ãµããŒã
LilyïŒ@bokuwalilyïŒâ å人éçºè ãClaude Code ã§èªåååºç€ãçµã¿ãªãããiOSã¢ããªãWebãµãŒãã¹ãéç£ããŠããŸã
- AIã§ãå¯ãŠãŠãåãä»çµã¿ããäœã£ãŠæ120äžã«ãã話㯠noteã®ææèšäº ã«ð°
- OSS: github.com/bokuwalily ð
- ææ°æ å ±ã»ãåãåãã㯠X @bokuwalily ãžð
- AIå°å ¥ã»èªååã®çžè«ãšå®è£ ãã³ãã¬7æ¬ã®é åžã¯ å ¬åŒLINE ããð¬
çããã® â€ïž ãã·ã§ã¢ãå±ã¿ã«ãªããŸãïŒ