Initial release: Claude Code × Obsidian Wiki framework

This commit is contained in:
Masahiro Chaen 2026-04-08 00:39:33 +09:00
commit f8d084eae4
23 changed files with 833 additions and 0 deletions

View file

@ -0,0 +1,63 @@
#!/usr/bin/env bash
# on-session-end.sh — Claude Code Stop hook
# セッション終了時にdaily noteにサマリーを追記する
# 呼び出し元: ~/.claude/settings.json → hooks.Stop (async: true)
set +e
VAULT_DIR="$HOME/vault"
DAILY_DIR="$VAULT_DIR/daily"
LOG="$VAULT_DIR/.sync.log"
TODAY=$(date +%Y-%m-%d)
DAILY_FILE="$DAILY_DIR/$TODAY.md"
NOW=$(date +%H:%M)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] on-session-end" >> "$LOG"
# daily noteが存在しない場合は作成
if [ ! -f "$DAILY_FILE" ]; then
WEEKDAY=$(TODAY="$TODAY" python3 -c "
import os, datetime
d = datetime.date.fromisoformat(os.environ['TODAY'])
print(d.strftime('%A'))
")
printf -- "---\ndate: %s\nweekday: %s\n---\n\n## Schedule\n\n## Log\n\n## Thoughts\n\n## Links\n" "$TODAY" "$WEEKDAY" > "$DAILY_FILE"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Created daily note: $DAILY_FILE" >> "$LOG"
fi
# stdinからJSONを読み取るhookから渡される
INPUT=$(cat 2>/dev/null || true)
CWD=$(echo "${INPUT:-{}}" | python3 -c "import sys,json;print(json.load(sys.stdin).get('cwd',''))" 2>/dev/null || echo "")
LABEL=$([ -n "$CWD" ] && basename "$CWD" || echo "unknown")
ENTRY="- $NOW セッション終了 (cwd: $LABEL)"
# ## Log セクションに追記環境変数経由でPythonに渡す — シェル補間を避ける)
export DAILY_FILE ENTRY
python3 -c '
import os
f = os.environ["DAILY_FILE"]
e = os.environ["ENTRY"]
lines = open(f).readlines()
out = []
in_log = False
done = False
for l in lines:
if l.strip() == "## Log":
in_log = True
out.append(l)
continue
if in_log and not done and l.startswith("## "):
out.append(e + "\n\n")
done = True
out.append(l)
if in_log and not done:
out.append(e + "\n\n")
open(f, "w").writelines(out)
' 2>/dev/null || echo "$ENTRY" >> "$DAILY_FILE"
exit 0