èªååã¹ã¯ãªããããåããŠãããããã«èŠããã®ã«ãèå¿ã®ãã¡ã€ã«ã¯äžåæŽæ°ãããŠããªãââãããªäœéšãããããšã¯ãããŸãããLily ã¯ä»å¹Žã®æ¥ãClaude Code ãšã®äŒè©±ãã°ã Obsidian Vault ã«æ¯æ©èªåã§åã蟌ãä»çµã¿ãäœã£ãŠãããšãããŸãã«ãã®èœãšã穎ã«ã¯ãŸããŸãããã¹ã¯ãªããã¯ãšã©ãŒãªãçµäºããã®ã«ãVault ã®äžèº«ã¯äœãå€ãããªãããã°ãæŒã£ãŠããããããã£ãã®ã¯ãmacOS ã® TCCïŒTransparency, Consent, and ControlïŒãšããä»çµã¿ããã·ã¹ãã ã®ããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ç®¡çãšã³ãžã³ãlaunchdãããã®æžã蟌ã¿ãéãã«ãããã¯ããŠãããšããããšã§ããã
ãTCCããšèããšé£ãããã§ãããèŠããã« macOS ã®ãã©ã€ãã·ãŒçªäººã§ããã¢ããªãã¹ã¯ãªãããåæã«ããªãã®åçãããã¥ã¡ã³ããèªã¿æžãã§ããªããããOS ãæ€é²ããŠããŸããç¹ã« iCloud Drive ã§åæããŠãã `~/Documents` é äžã®ãã©ã«ãã¯åŒ·ãä¿è·ãããŠãããããã¯ã°ã©ãŠã³ãã§åã launchd ã®ãžã§ãããããžæžã蟌ãããšãããšããšã©ãŒãåºããã«ç¡èŠãããããšããããŸãã
ãã®èšäºã§ã¯ã`vault-auto-ingest.sh` ãšããå®éã®ã¹ã¯ãªããã顿ã«ãTCC åé¡ã®æ ¹æ¬åå ãã解決çããããŠã倱æããŠãæ¬¡ã®æ©äŒã«èªåã§ããçŽããèªå·±å埩åèšèšãŸã§ãè§£åããŸãããã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ã®ä»äžãiCloud ã symlink ãå£ãçœ ãcaffeinate ã«ããã¹ãªãŒã察çãlockdir ã«ããäºéå®è¡é²æ¢ããããŠè€æ°çºç«ã¹ããããš done ããŒã«ãŒãçµã¿åããããæåãããŸã§ãªãã©ã€ã»æååŸã¯å³çµäºããã¿ãŒã³ããå®éã®ã³ãŒããšæ€èšŒã³ãã³ãã§é ã远ã£ãŠèª¬æããŸãã
äœãäœã£ããââå šäœæ§æ
Lily ãäœã£ãã®ã¯ãå€éãªãŒãingestããšåŒãã§ããä»çµã¿ã§ããClaude Code ãšã®äŒè©±ãã°ãæ¯æ©èªåã§ãŸãšããŠãå人ã®ãã¬ããžããŒã¹ïŒObsidian VaultïŒã«æžã蟌ã¿ãç¿æã®ã仿¥ã®ããªãŒãããŸã§çæãããã€ãã©ã€ã³ã§ãã
ç»å Žãããã¡ã€ã«ãšå Žæãå ã«æŽçããŸãã
ã¹ã¯ãªããæ¬äœã `~/Documents` å ã§ã¯ãªã `~/.claude/scripts/` ã«çœ®ããŠããã®ã TCC 察çã®äžç°ã§ããlaunchd 㯠TCC ä¿è·äžã®ãã¹ã«ããã¹ã¯ãªãããããããå®è¡ã§ããªããããã¹ã¯ãªããèªäœã¯ä¿è·å€ã®ãã£ã¬ã¯ããªã«çœ®ãå¿ èŠããããŸããã¹ã¯ãªããåé ã®ã³ã¡ã³ãã«ããã®çç±ãèšããŠãããŸãã
# ã¹ã¯ãªããèªèº«ã¯ ~/.claude/scripts/ïŒä¿è·å€ïŒã«çœ®ãïŒ~/Documents ã ãš launchd ãã exec äžå¯ïŒãTCC ã®æ£äœââiCloud ãã©ã«ãããä¿è·å¯Ÿè±¡ãã«ãªãçç±
TCC ãšã¯äœã
TCC 㯠macOS ã管çãããã¢ããªã®ã¢ã¯ã»ã¹æš©å°åž³ãã§ããã«ã¡ã©ããã€ã¯ãé£çµ¡å ããããŠããã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ïŒFDAïŒããªã©ããã®å°åž³ã§ç®¡çãããŠããŸãããŠãŒã¶ãŒãçŽæ¥æäœããéåžžã¢ããªã¯ããã®ã¢ããªã«èš±å¯ããŸããïŒããšãããã€ã¢ãã°ã§æš©éãååŸã§ããŸãã
åé¡ã¯ãlaunchd ã¯ãŠãŒã¶ãŒã«ä»£ãã£ãŠèµ·åããããã¯ã°ã©ãŠã³ãã®ä»çµã¿ã ãšããç¹ã§ããlaunchd ããèµ·åãããã¹ã¯ãªããã¯ã誰ãèµ·åãããããšããæèãéåžžã®æäœãšç°ãªããããiCloud Drive ã§åæäžã® `~/Documents` ã«å¯ŸããŠæžãèŸŒã¿æš©éãæããªãç¶æ ã§åããŸãã
ãµã€ã¬ã³ã倱æã®æããã
ç¹ã«æãã®ããµã€ã¬ã³ã倱æã§ããæš©éäžè¶³ã§æžã蟌ã¿ã«å€±æããŠãããšã©ãŒã³ãŒããè¿ãããã¹ã¯ãªããã `exit 0`ïŒæ£åžžçµäºïŒã§çµããããšããããŸããäœãèµ·ããŠããªãã®ã«ãæåããããšæãããææªã®ãã¿ãŒã³ã§ããLily ããã®åé¡ã«æ°ã¥ãã®ã«æ°æ¥ããã£ãã®ãããã°ã«äœãæ®ããªãã£ãããã§ããã
å®éã®ã¹ã¯ãªããã§ã¯ããããæ©ææ€ç¥ããããã®ããªãã©ã€ããã§ãã¯ãå ¥ã£ãŠããŸãã
if ! ( cd "$VAULT" 2>/dev/null && git rev-parse --git-dir >/dev/null 2>&1 ); then
echo "[$(date '+%F %T')] â FDAæªä»äž: launchdãã Vault ã«ã¢ã¯ã»ã¹äžå¯(TCCä¿è·)ã" >> "$LOG"
echo " 解決: ã·ã¹ãã èšå® > ãã©ã€ãã·ãŒãšã»ãã¥ãªã㣠> ãã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ ã§ /bin/bash ãèš±å¯ã" >> "$LOG"
notify_fail "FDAæªä»äž: vault ã«ã¢ã¯ã»ã¹äžå¯ïŒèšå®âãã«ãã£ã¹ã¯ã¢ã¯ã»ã¹â/bin/bashïŒ"
exit 1
fi`cd` ã㊠`git rev-parse --git-dir` ãå®è¡ããã ãã§ãããããéãã° Vault ã«ã¢ã¯ã»ã¹ã§ããŠãã蚌æ ãéããªããã° TCC ã«ãããã¯ãããŠããŸãããã®äžç¯ã§ãµã€ã¬ã³ã倱æãã倧声ã®å€±æãã«å€ãããŸãã倱æãæ²é»ãããªãããšããèªå·±å埩èšèšã®åºçºç¹ã§ãã
ãã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ïŒFDAïŒã /bin/bash ã«ä»äžãã
解決çã¯ãmacOS ã®ã·ã¹ãã èšå®ãã `/bin/bash` ã«ãã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ãä»äžããããšã§ããæäœæé ã¯æ¬¡ã®éãã§ãã
- ã¢ããã«ã¡ãã¥ãŒ âãã·ã¹ãã èšå®ããéã
2.ããã©ã€ãã·ãŒãšã»ãã¥ãªãã£ãâããã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ããéžã¶
- å³äžã®ãïŒããã¿ã³ãæŒããŠãã¡ã€ã«éžæãã€ã¢ãã°ãéã
- `Shift + Cmd + G` ãæŒã㊠`/bin/bash` ãšå ¥åãã远å ãã
- `/bin/bash` ã®ã¹ã€ããããªã³ã«ãªã£ãŠããããšã確èªãã
ãã®èšå®ã¯äžåºŠããã°æ¬¡ããã¯äžèŠã§ãããã ããOS ã®ã¡ãžã£ãŒã¢ããããŒãåŸã«æš©éããªã»ãããããããšããããããã¢ããããŒãåŸã«æåããããããšæããããŸãããã確èªããŠãã ããã
èšå®åŸã®ç¢ºèªã¯æ¬¡ã®ã³ãã³ãã§æè»œã«ã§ããŸãã
/bin/bash -c "cd ~/Documents/claude-obsidian && git status"ãããéåžžã®ã¿ãŒããã«ã§åãããšã¯åœç¶ã§ãããlaunchd ããå®è¡ããå Žåã«éããã©ããã確èªããã«ã¯ãåè¿°ã®ããªãã©ã€ããã§ãã¯ãã¹ã¯ãªããã«çµã¿èŸŒã¿ããã°ãèŠãã®ã確å®ã§ãã`~/.claude/logs/vault-auto-ingest.log` ãéã㊠`â FDAæªä»äž` ã®è¡ãåºãŠããªããã°æš©éã¯éã£ãŠããŸãã
symlink ã iCloud ãç Žå£ããçœ
FDA ãä»äžããåã«æãã€ãåé¿çãšããŠãVault ãžã® symlink ã `~/Documents` å€ã«äœãã°ããã®ã§ã¯ããšããã¢ã€ãã¢ããããŸããiCloud ã®ä¿è·å¯Ÿè±¡å€ã®ãã¹ãã symlink ã§ã¢ã¯ã»ã¹ããã°ãå¶éãããæããããã®ã§ã¯ããšããçºæ³ã§ãã
æ®å¿µãªãããiCloud ããã®ææ³ãç Žå£ããŸãã
iCloud ã¯åæäžã®ãã©ã«ããåžžæç£èŠããŠããããã®äžã® symlink ããéåžžã®ãã¡ã€ã«ãšåããã®ããšããŠæ±ãããšããŸããå®éã«èµ·ããã®ã¯ãiCloud ã symlink ãå®äœãã¡ã€ã«ã«ã³ããŒããããç«¶åãã¡ã€ã«ãšããŠåŠçãããããŠããªã³ã¯å ãæå³ããªããã¹ã«æžãæãããããªã©ã®åé¡ã§ããã¹ã¯ãªããã®ã³ã¡ã³ãã«ã¯å®éã®æ€èšŒæ¥ãšãšãã«æèšãããŠããŸãã
# symlinkã§ ~/ ã«éããæ¡ã¯ iCloud ã symlink ãç«¶ååŠçããŠå£ãããäžå¯ïŒ2026-06-01 æ€èšŒæžã¿ïŒããã®æèšãããã¹ã¯ãªããã®çœ®ãå Žã¯æåãã `~/.claude/scripts/` ã«åºå®ããŠããŸãããsymlink ã§åé¿ããããšããçºæ³ã¯é åçã«èŠããŸãããiCloud åæãã©ã«ãã絡ãå Žåã¯äœ¿ããªããšèŠããŠãããŠãã ãããFDA ãæ£é¢ããä»äžããã®ããé åãã«èŠããŠæã確å®ãªéã§ãã
caffeinate ã§ã¹ãªãŒãåçµãé²ã
ãªãã¹ãªãŒããåé¡ã«ãªãã®ã
macOS ã¯ããããªãŒç¯çŽã®ãããèãéãããäžå®æéæäœããªããšã¹ãªãŒãããŸããã¹ãªãŒãäžã¯ããã¯ã°ã©ãŠã³ãã¹ã¯ãªãããéäžã§æ¢ãŸããŸããClaude Code ã®ãã°ã Obsidian ã«åã蟌ãåŠç㯠40ã50 åãããããšããããããéäžã§åçµãããšå端ãªããŒã«ãŒã ããæ®ããå®äºæžã¿ã ãå®éã¯æªå®äºããšããç¶æ ãçãŸããŸãã
caffeinate ã®äœ¿ãæ¹
`caffeinate` ã¯ã¹ãªãŒããææ¢ãã macOS ä»å±ã®ã³ãã³ãã§ããã¹ã¯ãªããã®åé ã«æ¬¡ã®äžç¯ããããŸãã
if [ -z "${CAFFEINATED:-}" ]; then
exec /usr/bin/caffeinate -i -s env CAFFEINATED=1 /bin/bash "$0" "$@"
fi`-i` ãã©ã°ããã¢ã€ãã«ã¹ãªãŒããé²ããã`-s` ãã©ã°ããã·ã¹ãã ã¹ãªãŒããé²ãïŒãã ã AC 黿ºæ¥ç¶æã®ã¿æå¹ïŒããæå³ããŸãã`CAFFEINATED` ãšããç°å¢å€æ°ãç«ãŠãããšã§ãcaffeinate é äžã§åå®è¡ããããšãã«ç¡éã«ãŒãããªãããã«ãªã£ãŠããŸãã
caffeinate ã®éçãš timeout ã®çµã¿åãã
éèŠãªæ³šæç¹ããããŸãã `-s` ã¯ããããªãŒé§åäžã¯å¹ããŸãããå é»ã±ãŒãã«ãå€ããŠèãéãããšãcaffeinate ããã£ãŠã OS ãã·ã¹ãã ã¹ãªãŒããåªå ããå ŽåããããŸãããããåŸè¿°ãããè€æ°ã¹ãããçºç«ããå¿ èŠãªçç±ã®ã²ãšã€ã§ãã
ã¹ãªãŒãã§åçµããã©ã³ã wake åŸã«ãŸã³ãåããªããããéãåŠçã«ã¯ãã¹ãŠ `timeout` ã被ããŠãããŸãã
TIMEOUT_BIN="/opt/homebrew/bin/timeout"
run_to() { local s=$1; shift; if [ -n "$TIMEOUT_BIN" ]; then "$TIMEOUT_BIN" --kill-after=30 "$s" "$@"; else "$@"; fi; }`--kill-after=30` ã¯ãSIGTERM ãéã£ãŠ 30 ç§åŸã«ãŸã çããŠããã SIGKILL ãéãããšããæå³ã§ããGNU coreutils ã® `timeout` ãèŠã€ãããªãå Žåã¯çŽ éãã«ããŠãå°ãªããšãåäœã¯ç¶ç¶ã§ããããã«ããŠãããŸããåçµããã©ã³ã¯ timeout ã§åãåãããæ¬¡ã®ã¹ããããããçŽãââãããèªå·±å埩ãµã€ã¯ã«ã®åºæ¬åäœã§ãã
lockdir ã«ããäºéå®è¡é²æ¢
ãªãäºéå®è¡ãèµ·ããã®ã
è€æ°ã®çºç«ã¹ããããèšå®ããŠãããšãåã®ã©ã³ããŸã åããŠããã®ã«æ¬¡ã®ã¹ããããèµ·åããããšããããŸãããŸããlaunchd ã®å®æçºç«ãšæåã§ã®ãããã°å®è¡ãéãªãå ŽåããããŸããå®éã«ã¹ã¯ãªããã®ã³ã¡ã³ãã«ã¯ `2026-06-10 ã« launchd åãšæååã®ã¬ãŒã¹ãå®çºç` ãšèšé²ãããŠããŸããäºéå®è¡ãèµ·ãããšãVault ãžã®æžã蟌ã¿ãç«¶åããgit ã®ã³ããããå£ããããšããããŸãã
mkdir ããã¯ã®ä»çµã¿
äºéå®è¡ãé²ãã«ã¯ããã¯ãå¿ èŠã§ãããã¡ã€ã«ã·ã¹ãã ã§ã¢ãããã¯ãªããã¯ãå®çŸããå®çªææ³ã `mkdir` ããã¯ã§ãã
LOCKDIR="$HOME/.claude/locks/vault-auto-ingest.lock"
if ! /bin/mkdir "$LOCKDIR" 2>/dev/null; then
oldpid=$(cat "$LOCKDIR/pid" 2>/dev/null || true)
if [ -n "${oldpid:-}" ] && kill -0 "$oldpid" 2>/dev/null; then
echo "[$(date '+%F %T')] å¥ã€ã³ã¹ã¿ã³ã¹å®è¡äž(pid=${oldpid}) â skip" >> "$LOG"
exit 0
fi
rm -rf "$LOCKDIR"
/bin/mkdir "$LOCKDIR" 2>/dev/null || exit 0
fi
echo $$ > "$LOCKDIR/pid"
trap 'rm -rf "$LOCKDIR"' EXIT INT TERM`mkdir` ã¯ãã¡ã€ã«ã·ã¹ãã ã®ã¢ãããã¯æäœãªã®ã§ã2 ã€ã®ããã»ã¹ãåæã« `mkdir` ããããšãããšçæ¹ã ããæåããŸãã`LOCKDIR/pid` ã«ããã»ã¹ ID ãæžã蟌ãã§ããã2 çªç®ã®ããã»ã¹ãæ¥ããšãã« `kill -0 $oldpid` ã§ãã®ããã»ã¹ãçããŠããã確èªããŸããçããŠããã°ã¹ããããæ»ãã§ããã°ïŒã¯ã©ãã·ã¥ã㊠lock ãæ®ã£ããstale lockãïŒããã¯ãæ¶ããŠèªåãåŒãç¶ããŸãã
`trap 'rm -rf "$LOCKDIR"' EXIT INT TERM` ã¯ãã¹ã¯ãªãããæ£åžžçµäºã»Ctrl-Cã»åŒ·å¶çµäºã®ã©ãã§çµãã£ãŠãããã¯ãå¿ ãè§£æŸããããã®èšè¿°ã§ããããããªããšãã¯ã©ãã·ã¥åŸã«æ¬¡ã®ã©ã³ãæ°žé ã«ããã¯åŸ ã¡ã«ãªããŸãã
è€æ°ã¹ãããçºç«ãš done ããŒã«ãŒã«ããèªå·±å埩ãªãã©ã€
plist ã®4ã¹ãããèšå®
`com.shun.vault-auto-ingest.plist` ã«ã¯4ã€ã®çºç«æå»ãç»é²ãããŠããŸãã
<key>StartCalendarInterval</key>
<array>
<dict><key>Hour</key><integer>4</integer><key>Minute</key><integer>55</integer></dict>
<dict><key>Hour</key><integer>8</integer><key>Minute</key><integer>15</integer></dict>
<dict><key>Hour</key><integer>10</integer><key>Minute</key><integer>15</integer></dict>
<dict><key>Hour</key><integer>12</integer><key>Minute</key><integer>15</integer></dict>
</array>4:55 ã¯ãæ·±å€ã«éãã«èµ°ãããæ¬åœã¹ããããã§ãããã ãã¹ãªãŒãäžã ãšåããªããããæ 8:15ã10:15ã12:15 ã®3ã¹ãããããã£ããã¢ãããšããŠæ§ããŠããŸããéèŠãªã®ã¯ãããããåçŽãªç¹°ãè¿ãã§ã¯ãªããæåãããæ®ããã¹ãããã倱æãããæ¬¡ãåŒãç¶ãããšããèšèšã«ãªã£ãŠããç¹ã§ãã
done ããŒã«ãŒã§ãæååŸã¯å³çµäºã
ã¹ã¯ãªããã®åé ã«æ¬¡ã®è¡ããããŸãã
TODAY=$(date +%Y%m%d)
DONE_MARKER="$HOME/.claude/logs/.vault-ingest-done-${TODAY}"
[ -f "$DONE_MARKER" ] && exit 0`.vault-ingest-done-20260702` ã®ãããªæ¥ä»å ¥ãã®ãã¡ã€ã«ãååšããã°ãå³ `exit 0` ã§çµäºããŸãããã®ãã¡ã€ã«ã¯ãã¹ãŠã®åŠçãæåããåŸã«ã ã `touch` ãããŸããæåããæç¹ã§ãã®æ¥ã®åŠçã¯å®äºããæ®ãã®ã¹ãããã¯ç©ºæ¯ãã§çµãããŸãã倱æããå Žåã¯ããŒã«ãŒãäœãããªãã®ã§ã次ã®ã¹ããããå床詊ã¿ãŸãã
ããŒã«ãŒã¯æ¯æ¥æ¥ä»ãå€ãããšèªåçã«ãååšããªããç¶æ ã«ãªããããç¿æ¥ã¯æ°é®®ãªç¶æ ããå§ãŸããŸãããŸãã7æ¥ããå€ãããŒã«ãŒã¯å®æçã«æé€ãããŸãã
find "$HOME/.claude/logs" -maxdepth 1 -name '.vault-ingest-*' -mtime +7 -delete 2>/dev/null段éããŒã«ãŒã§éäžããåéãã
é·ãåŠçãã²ãšã€ã® done ããŒã«ãŒã ãã§ç®¡çãããšãéäžãŸã§æåããŠããŠãæ¯åæåããããçŽãã«ãªããŸãããããé²ãããã«ã段éããŒã«ãŒãã䜿ãããŠããŸãã
STEP2A_MARKER="$HOME/.claude/logs/.vault-ingest-step2a-claude-${TODAY}"
STEP2B_MARKER="$HOME/.claude/logs/.vault-ingest-step2b-codex-${TODAY}"Claude Code ã®ãã°åŠçïŒstep2aïŒãš Codex ã®ãã°åŠçïŒstep2bïŒãç¬ç«ããããŒã«ãŒãæã£ãŠããŸããstep2a ãå®äºããŠããã° step2a ã¯ã¹ãããããstep2b ã ããå詊è¡ãããšããç²åºŠã§åéã§ããŸãã
[ -f "$STEP2A_MARKER" ] && [ -f "$STEP2B_MARKER" ] && touch "$STEP2_MARKER"äž¡æ¹æã£ããšãã ã `STEP2_MARKER` ãç«ã¡ãæçµçã«å šå·¥çšå®äºã§ `DONE_MARKER` ãç«ã€ããšãã3å±€æ§é ã§ãããã®èšèšã®èæ¯ã«ã¯ãã°ãèšãããŠããŸããVault ãžã®æžã蟌ã¿ã40åæ ã«åãŸãã飿¥ã¿ã€ã ã¢ãŠãããŠããåé¡ïŒhot.md ãåçµããŠããçå ïŒãåããŠããœãŒã¹å¥ã«åŠçã2æ¬ã«åå²ããåã ã«è»œã timeout ãèšå®ããŸããã
倱æã Desktop ã«å¯èŠåãã
èªååã®å€±æã§æããŸããã®ã¯ã倱æããŠããããšã«æ°ã¥ããªããããšã§ãããã°ãã¡ã€ã«ãæ¯æç¢ºèªããç¿æ £ããªããã°ãæ°æ¥é Vault ãæŽæ°ãããŠããªããŠãèª°ãæ°ã¥ããŸããã
ãã®ã¹ã¯ãªããã¯å€±ææã« Desktop ã« Markdown ãã¡ã€ã«ãäœæããŸãã
FAILED_FILE="$HOME/Desktop/Daily Brief/FAILED-${TODAY}.md"
notify_fail() {
local reason="$1"
mkdir -p "$HOME/Desktop/Daily Brief" 2>/dev/null
{ echo "# Daily Brief çæå€±æ â $(date '+%F %T')"; echo ""
echo "- çç±: ${reason}"
echo "- 詳现ãã°: ~/.claude/logs/vault-auto-ingest.log"
echo "- èªåå詊è¡: 8:15 / 10:15 / 12:15 ãšãã°ã€ã³æïŒæåããããã®ãã¡ã€ã«ã¯èªåã§æ¶ããïŒ"
} > "$FAILED_FILE" 2>/dev/null
/usr/bin/osascript -e "display notification \"${reason}\" with title \"Daily Brief çæå€±æ\"" >/dev/null 2>&1
}`FAILED-20260702.md` ãšãããã¡ã€ã«ã Desktop ã®ãDaily Briefããã©ã«ãã«çŸããã°ãäžç®ã§ä»æ¥ã®åŠçã倱æããŠããããšãããããŸãã`osascript` ã«ãã macOS éç¥ãé£ã¶ã®ã§ãäœæ¥äžã§ããã°æ°ã¥ããŸãã
æåããç¬éã«ãã®ãã¡ã€ã«ã¯åé€ãããŸããã倱æäžã ãååšãããã¡ã€ã«ããšããèšèšã§ã平垞æã«éªéã«ãªããŸãããããã«ãé£ç¶é害ã§é廿¥ã® `FAILED-*.md` ãè€æ°æºãŸã£ãŠããå Žåã¯ãåœæ¥æåæã«é廿¥åããŸãšããŠæé€ãããŸãã
find "$HOME/Desktop/Daily Brief" -maxdepth 1 -name "FAILED-*.md" ! -name "FAILED-${TODAY}.md" -delete 2>/dev/nullãã®3段éââãããªãã©ã€ãã§å€§å£°ã®å€±æã«å€ããããDesktop ã«å€±æãã¡ã€ã«ãäœãããosascript ã§éç¥ãé£ã°ããââãæã£ãŠåããŠããµã€ã¬ã³ã倱æã®ãªã¹ã¯ãå®çšçã«æããããŸãã
æ€èšŒã³ãã³ããšäœ¿ãåããšãã®æ³šæ
å šäœãã«ã¹ãäžçºç¢ºèªãã
`automation-health.sh` ãå®è¡ãããšãlaunchd ã®ç»é²ç¶æ³ã»åãããã®æçµå®è¡æå»ã»Vault ã®é®®åºŠã»ãã°ã®éè€ãªã©ãèªåååºç€å šäœã®å¥å šæ§ãäžæ¬ç¢ºèªã§ããŸãã
bash ~/.claude/scripts/automation-health.shåºå㯠`â`ïŒæ£åžžïŒã`â `ïŒèŠåïŒã`â`ïŒé害ïŒã®äžæ®µéã§è²åããããŸããèµ€ãäžã€ã§ãããã° `exit 1` ã§çµãããããCI ãã¹ã¯ãªããããåŒã³åºããŠãã§ãã¯ããããšãã§ããŸããã¹ã¯ãªãã㯠launchd ãžã§ãã®ããŒãç¶æ ãhooks ã¹ã¯ãªããã®ååšãšå®è¡æš©éãVault ã® hot.md ã®é®®åºŠãcron ãš launchd ã®äºéç»é²ããã£ã¹ã¯è¥å€§ãŸã§æšªæçã«ç¢ºèªããŸãã
vault-auto-ingest ãæåãã¹ããã
åäœç¢ºèªã¯ done ããŒã«ãŒãäžæéé¿ããŠããè¡ããŸãã
mv ~/.claude/logs/.vault-ingest-done-$(date +%Y%m%d) /tmp/ 2>/dev/null
bash ~/.claude/scripts/vault-auto-ingest.sh
tail -f ~/.claude/logs/vault-auto-ingest.logãã¹ãåŸã¯ `/tmp/.vault-ingest-done-*` ã `~/.claude/logs/` ã«æ»ããããã®ãŸãŸä»æ¥åã®å®äºããŒã«ãŒãšããŠæ®ããŸããlaunchd ã®ããŒãç¶æ ã¯æ¬¡ã®ã³ãã³ãã§ç¢ºèªã§ããŸãã
launchctl list | grep com.shun.vault-auto-ingestPID åã«æ°åãããã°å®è¡äžããã€ãã³ãªãåŸ æ©äžã§ããlast exit ã `0` 以å€ãªãååã®ã©ã³ã倱æããŠããŸãã`exit 78` ãç¶ãå Žåã¯ã¯ã©ãã·ã¥ã«ãŒãã®å¯èœæ§ããããplist ã®èšå®ãã¹ãäŸåãã¡ã€ã«ã®æ¬ èœãçã£ãŠãã ããã
å¥ã®ãããžã§ã¯ãã«è»¢çšãããšãã®æ³šæç¹
ãã®èšèšãå¥ã®çšéã«è»¢çšãããšãã«ç¹ã«æ°ãã€ããã¹ãç¹ããŸãšããŸãã
ã¹ã¯ãªããã®çœ®ãå Žæ: `~/Documents` ãŸã㯠iCloud åæå¯Ÿè±¡ã®ã©ã®ãã£ã¬ã¯ããªã«ã眮ããªãããšãlaunchd ããã® exec ãéããŸããã`~/.local/bin/` ã `~/.claude/scripts/` ãªã©ãããŒã ãã£ã¬ã¯ããªçŽäžã®é ããã©ã«ããå®å šã§ãã
plist ã® StandardOutPath/StandardErrorPath: æšæºåºåã®åãå ã iCloud å€ã«èšå®ããŸãã`~/Documents` ã«åºåããããšãããšããã°ããæžããã«è©°ãŸããŸããèšå®ãã¡ã€ã«ã®äžã§ãã¹ãæå®ãããšãã`~/` ã§ã¯ãªããã«ãã¹ã§æžãå¿ èŠãããããšã«ã泚æããŠãã ãããplist 㯠`~` ã®å±éãããŸããã
PATH ã®è£å®: launchd ãèµ·åããã·ã§ã«ã¯æå° PATHïŒ`/usr/bin:/bin` çšåºŠïŒããæã£ãŠããŸãããHomebrew ã® `timeout`ãnvm ã® `node`ã`git` ãªã©ãèªåã§ã€ã³ã¹ããŒã«ããããŒã«ã¯ã¹ã¯ãªããå ã§ PATH ãæç€ºçã«è£ãå¿ èŠããããŸãã
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"`vault-auto-ingest.sh` ã§ã¯ nvm ã® node ãããŒãžã§ã³éäŸåã®æ¹æ³ã§æ€çŽ¢ã㊠PATH ã«è¿œå ããŠããŸããVault ã® git commit ããã¯ïŒnode 補ïŒãåããªããã° `git commit` èªäœã倱æããããããã®äžæéãæ¬ ãããŸããã
symlink ã¯äœ¿ããªã: iCloud åæãã©ã«ãå ãžã® symlink 㯠iCloud ã«ãã£ãŠç Žå£ãããŸãã2026-06-01 ã®æ€èšŒã§ç¢ºèªæžã¿ã§ãããã®åé¿çã¯æ©èœããªããããFDA ãæ£é¢ããä»äžããã®ãæ£è§£ã§ãã
ãããã®åé¡ã¯ãã€ã³ã¿ãŒãããäžã«æ å ±ãå°ãªããå®éã«æãåãããŠäžã€ãã€ç¢ºèªãããŸã§åå ã®ç¹å®ãé£ãããã®ã°ããã§ããTCC ã«ãã FDA ã®å¿ èŠæ§ãiCloud ã® symlink ç Žå£ãcaffeinate ã®ããããªãŒå¶éãããŒã«ãŒã«ããèªå·±å埩ââãããããç¬ç«ããåé¡ã§ãããªããããã¹ãŠãåã¿åã£ãŠåããŠãä¿¡é Œã§ããèªååãã宿ããŸããåãæ§æãçµãéã®èª¿æ»ã³ã¹ããå°ãã§ãäžããããã°ããã®èšäºãæžããç®çã¯éæã§ãã
ð ãã®èšäºã®å 容ããå®è£ ãŸã§å šéšãŸãšããææèšäºããããŸã æé ã»ã³ãŒãã»ãã³ãã¬ããã®ãŸãŸæž¡ããŠããŸã AIã§ãå¯ãŠãŠãåãä»çµã¿ãããŒããã30æ¥ã§çµãå šæé

ã³ã¡ã³ã
ãã°ã€ã³ ã äŒå¡ç»é² ãããšã³ã¡ã³ãã§ããŸã