Claude Codeã®ã¢ãã«çµäºãlaunchdã§ç¡äººç§»è¡ãã â settings.jsonãèªåãããããäœ¿ãæšãŠãžã§ã
ååãlaunchdã®å€éã¹ããããšãªãã©ã€èšèšãæžãã話ã®ç¶ãã§ããä»åã¯ãæ¯ååããžã§ããã§ã¯ãªããç¹å®ã®1æ¥ã«ã ãçºç«ããŠãèšå®ã1åæžãæãããèªåã§èªåãæ¶ãäœ¿ãæšãŠãžã§ãã®è©±ã§ãã
Claude Fable 5ã2026-07-07ã«çµäºããããšã決ãŸã£ãæç¹ã§ã~/.claude/settings.jsonã®ããã©ã«ãã¢ãã«ãæåã§æžãæãå¿ããã®ãæããŠã40è¡ã®ã·ã§ã«ã¹ã¯ãªãããšplist1æãä»èŸŒã¿ãŸãããçµè«ããèšããšããã®ãžã§ãã¯å®éã«ã¯7/7åœæ¥ã§ã¯ãªã1æ¥é
ãã®7/8æ6:50ã«çºç«ããããã§ãæ£ããåããŸããã仿¥ïŒ9/4ïŒç¢ºèªããããplistæ¬äœããã°ããã§ã«æå
ããæ¶ããŠããŠã蚌æ ãšããŠæ®ã£ãŠããã®ã¯æžãæãåã®settings.jsonãä¿åãã.bak-model-transitionãã¡ã€ã«1ã€ã ãã§ãããã®èšäºã¯ããã®å®è£
ãšãæ¶ããåŸã«äœãæ®ãããã®èšé²ã§ãã
å°ãããšïŒæéãæ¥ãæ¥ãèªåã¯èŠããŠããªã
ã¢ãã«ã®EOLïŒEnd of LifeïŒã¯ãæ¥ãæ¥ãåãã£ãŠããäžéæ§ã®ã€ãã³ãã§ããã ããããåä»ã§ã
- åœæ¥ã«PCãéããŠãããšã¯éããªãïŒç¡ç äžã»å€åºäžïŒ
- CLAUDE.mdãä»ç®ã«ã¡ã¢ããŠããåœæ¥å¿ãã
- æã§
jqãå©ããŠæžãæããã®ã¯ããããééããŠ7/7ããåã«èµ°ããããšFable 5ããŸã çããŠããã®ã«åãæ¿ãã - éã«äœåºŠãèµ°ãããŠäœåºŠãéç¥ãé£ã¶ã®ãéªé
ã€ãŸã欲ããã®ã¯ã7/7以éã«1åã ãã確å®ã«ãéãã«ãæžãæãããžã§ãã§ãããlaunchdã®StartCalendarIntervalã¯æå®æå»ã«ã¹ãªãŒã埩垰æã®catch-upçºç«ãå«ããŠçºç«ããŠãããŸãããcatch-upã¯æ©ãé£ãã§ããããšãããã°é
ããããšãããã®ã§ããžã§ãåŽã§æ¥ä»ãèªè¡ããå¿
èŠããããŸãã
èšèšïŒäœ¿ãæšãŠç§»è¡ãžã§ãã®4ã¹ããã
~/.claude/scripts/model-transition-0707.shã®äžèº«ã¯ãããªã£ãŠããŸãã
#!/bin/bash
# model-transition-0707.sh â 2026-07-07ã«Fable 5ãçµäºãããããsettings.jsonã®modelãopusãžèªååæ¿
# åªç: 7/7以éã〠model ã fable ã®æã ãæžãæãããæåãããèªåã®plistãunloadã
set -uo pipefail
SETTINGS="$HOME/.claude/settings.json"
LOG="$HOME/.claude/logs/model-transition.log"
PLIST="$HOME/Library/LaunchAgents/com.example.model-transition-0707.plist"
log() { echo "[$(date '+%F %T')] $*" >> "$LOG"; }
# 7/7ããåãªãäœãããªãïŒcatch-upçºç«å¯ŸçïŒ
if [ "$(date +%Y%m%d)" -lt 20260707 ]; then
log "skip: before 2026-07-07"; exit 0
fi
current=$(jq -r '.model // empty' "$SETTINGS")
if echo "$current" | grep -qi 'fable'; then
cp "$SETTINGS" "$SETTINGS.bak-model-transition"
jq '.model = "opus"' "$SETTINGS" > "$SETTINGS.tmp" && jq . "$SETTINGS.tmp" > /dev/null && mv "$SETTINGS.tmp" "$SETTINGS"
log "switched model: $current -> opus"
/usr/bin/osascript -e 'display notification "Fable 5çµäºã«äŒŽãããã©ã«ãã¢ãã«ãOpusãžåæ¿ããŸãã" with title "Claude model transition"' >/dev/null 2>&1 || true
else
log "no-op: model is already '$current'"
fi
# 圹ç®ãçµããããžã§ããå€ãïŒplistã¯æ®ãïŒåç»é²å¯èœïŒ
launchctl unload "$PLIST" 2>/dev/null || true
log "done (job unloaded)"
ïŒPLISTã®labelã¯æ¬èšäºçšã«å¿ååããŠããŸããå®ç©ã¯èªåã®ããŒã ãã£ã¬ã¯ããªåãå«ãæååã§ããïŒ
ãã£ãŠããããšã¯4ã€ã ãã§ãã
- æ¥ä»ã¬ãŒãïŒ
date +%Y%m%d -lt 20260707ã§ããŸã æ©ããã匟ããããã¯-eqïŒçå·ïŒã§ã¯ãªã-ltã«ããã®ããã€ã³ãã§ãåœæ¥ãŽã£ããã«çºç«ããªããŠãããã®æ¥ä»¥éãªããã€çºç«ããŠãOKããšããèšèšã«ããŠããŸãã - jqã§ã®å®å
šãªæžãæãïŒ
currentãfableãå«ãæã ãåãåªçãã§ã㯠âcpã§ããã¯ã¢ãã âjqã§.tmpã«æžãåºã âjq . "$SETTINGS.tmp" > /dev/nullã§å£ããJSONã§ãªãããšãæ€èšŒããŠãã âmvã§æ¬äœã«åæ ãå£ããJSONãçŽæ¥äžæžãããŠClaude Codeãèµ·åäžèœã«ãªãäºæ ãããã®3段æ§ãã§é²ãã§ããŸãã - osascriptã§éç¥ïŒ
display notificationã¯GUIãã°ã€ã³äžãªã確å®ã«ãã¹ã¯ãããéç¥ãåºããŸãã倱æããŠã|| trueã§æ¬åŠçãæ¢ããªãã - launchctl unloadã§èªåãå€ãïŒåœ¹ç®ãçµããã
launchctl unloadã§èªåèªèº«ã®plistãç¡å¹åããŸãããã¡ã€ã«èªäœã¯æ¶ãããåç»é²ããã°ããäžåºŠäœ¿ããã圢ã«ã³ã¡ã³ãã§æ®ããŠããŸãã
ãã®ãã¿ãŒã³ã®æ¬è³ªã¯ãã¢ãã«åæ¿ããã®ãã®ã§ã¯ãªããæ¥ä»ã¬ãŒãïŒåªçãã§ãã¯ïŒatomic writeïŒéç¥ïŒèªå·±unloadãšãã5ç¹ã»ããã§ããAPIçµäºæ¥ãèšŒææžã®åæ¿æ¥ãæéãã©ã³ã®æ¹å®æ¥ãªã©ãç¹å®ã®1æ¥ãå¢ã«èšå®ã1åã ãå€ãããã¿ã¹ã¯ã¯å šéšãã®åœ¢ã«èœãšã蟌ããŸããcronã§ãlaunchdã§ãã
if æ¥ä»ã¬ãŒã; then åªçãã§ãã¯; then atomic write; fi; èªå·±è§£é€ã®éªšæ Œã¯åãã§ãã
å®éã«çºç«ããè·¡ïŒ1æ¥é ãã®06:50
ãã®ãžã§ããä»èŸŒãã§ãã2ã¶æçµã£ãä»ãå®ç©ã確èªããããšããã~/Library/LaunchAgents/ã«plistãèŠåœãããŸããã§ããããã°ãã¡ã€ã«ãåæ§ã§ãã9æé ã«ç°å¢å
šäœãæ£åžãããŠæéåãã®launchdææç©ãæé€ããã¿ã€ãã³ã°ã§ãäžç·ã«çä»ããããããã§ããäœ¿ãæšãŠãžã§ããªã®ã§ãäœ¿ãæšãŠããããã®ã¯çãéã£ãŠããŸãã
å¯äžæ®ã£ãŠããã®ããã¹ã¯ãªãããæžãæãåã«cpããŠãã~/.claude/settings.json.bak-model-transitionã§ãããã¿ã€ã ã¹ã¿ã³ããèŠããš
Jul 8 06:50:05 2026
7/7ã§ã¯ãªã7/8æã§ããåœæ¥ã¯ç«¯æ«ãã¹ãªãŒãããŠããã黿ºãå
¥ã£ãŠããªãã£ãã®ã ãšæããŸããäžèº«ã®modelãã£ãŒã«ããä»ã®settings.jsonãšæ¯ã¹ããšãfableãå«ãèå¥åããopusã«ãã¡ããšå€ãã£ãŠããŸãããã€ãŸããæ¥ä»ã¬ãŒãã-ltïŒããã®æ¥ããåãªãã¹ããããïŒã§æžãããããã§ã1æ¥é
ããŠcatch-upçºç«ããŠãäœãå°ããªãã£ãããã§ãããã-eqã§ã7/7ã¡ããã©ã ãå®è¡ããšæžããŠãããããã®æ¥ããã§æ°žé ã«çºç«ããªããžã§ãã«ãªã£ãŠããŸããã
èžãã èœãšã穎
- catch-upçºç«ã¯æ©ããšãé
ããšã決ãŸã£ãŠããªã â
-ltã§ããã®æ¥ä»¥éã¯åžžã«èš±å¯ãã«ãããçå·äžèŽã¯äºæ ã - jqã®æžã蟌ã¿ããã®ãŸãŸ
>ã§ãªãã€ã¬ã¯ããããšå€±ææã«ç©ºãã¡ã€ã«ã§äžæžãããã â.tmpã«æžãåºããŠããjq .ã§æ§ææ€èšŒããæåããæã ãmv cpã§ããã¯ã¢ãããåããã«æžãæãããšåãæ»ããªã â 1è¡è¶³ãã ãã§åŸ©å ææ®µã«ãªã- plistãæ¶ããšåç»é²ã§ããªã â
unloadã ãã«çããŠãã¡ã€ã«ã¯æ®ãèšèšã«ããããçµå±ã¯ç¡é¢ä¿ãªæ£åžãäœæ¥ã§æ¶ãããäœ¿ãæšãŠãžã§ãã®ã蚌æ ãã¯èªåã§ã¯æ®ããªãã®ã§ãããã¯ã¢ãããã¡ã€ã«ã®ãããªå¯ç£ç©ãå¯äžã®ãã°ã«ãªã - ã¢ãã«åãsettings.jsonã®1ãã£ãŒã«ãã«é Œãèšèšã¯ç¡äººãžã§ãå
šäœã«æ³¢åãã â åŸæ¥ãå¥ã®ç¡äººãžã§ãïŒ
claude -pããããã¬ã¹ã§å©ããã®ïŒã§ã--modelãæç€ºããŠããªããšã€ã³ã¿ã©ã¯ãã£ãã»ãã·ã§ã³ã®æ¢å®ã¢ãã«ã®å©çšæ ãç¡äººãžã§ããéãã«é£ã朰ãããšã«æ°ã¥ããŸãããexit codeã¯0ã®ãŸãŸãå€å®äžèœãã ããç©ã¿äžããåã§ãåå ç©¶æã«æéãããããŸãããsettings.jsonã®modelãã£ãŒã«ããèªåã§åããä»çµã¿ãæã€ãªããç¡äººãžã§ãåŽã¯éã«ãã®ãã£ãŒã«ãã«äŸåããã--modelãéœåºŠæç€ºããã®ãå®å šã§ã
ãŸãšã
- ç¹å®ã®1æ¥ã«ã ãèšå®ãå€ããã¿ã¹ã¯ã¯ãæ¥ä»ã¬ãŒãïŒåªçãã§ãã¯ïŒatomic writeïŒéç¥ïŒèªå·±unloadãã®5ç¹ã»ããã«èœãšã蟌ãã
- æ¥ä»ã¬ãŒãã¯çå·ã§ã¯ãªãäžçå·ã§æžããlaunchdã®catch-upçºç«ã¯æ©ããé ããæ¥ã
jq '...' > tmp && jq . tmp > /dev/null && mv tmp origã§ãå£ããJSONãæ¬çªã«åæ ããäºæ ãé²ã- äœ¿ãæšãŠãžã§ãã¯èªåã®å®è¡çè·¡ãèªåã§ã¯æ®ããªããããã¯ã¢ãããã¡ã€ã«ã®ãããªå¯ç£ç©ãå¯äžã®èšŒæ ã«ãªã
- settings.jsonã®modelãã£ãŒã«ããèªåã§æžãæããä»çµã¿ããããªããç¡äººãžã§ãåŽã¯ãã®ãã£ãŒã«ãã«äŸåãã
--modelãæç€ºããæ¹ãå®å š
次åã¯launchdåšãã®éçšçްéšãããã£ããé¢ããŠã宿ž¬ããŒã¹ã®æ¹åèšé²ãæžãäºå®ã§ãã
LilyïŒ@bokuwalilyïŒâ å人éçºè ãClaude Code ã§èªåååºç€ãçµã¿ãªãããiOSã¢ããªãWebãµãŒãã¹ãéç£ããŠããŸã
- AIã§ãå¯ãŠãŠãåãä»çµã¿ããäœã£ãŠæ120äžã«ãã話㯠noteã®ææèšäº ã«ð°
- OSS: github.com/bokuwalily ð
- ææ°æ å ±ã»ãåãåãã㯠X @bokuwalily ãžð
- AIå°å ¥ã»èªååã®çžè«ãšå®è£ ãã³ãã¬7æ¬ã®é åžã¯ å ¬åŒLINE ããð¬
çããã® â€ïž ãã·ã§ã¢ãå±ã¿ã«ãªããŸãïŒ