Initial release: Claude Code × Obsidian Wiki framework
This commit is contained in:
commit
f8d084eae4
23 changed files with 833 additions and 0 deletions
63
vault-template/scripts/on-session-end.sh
Executable file
63
vault-template/scripts/on-session-end.sh
Executable 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue