One note per Claude Code session (incremental, hourly user timer) and a
claude.ai data-export importer, written through the Obsidian Local REST API
plugin -- whose built-in /mcp/ server is also how Claude reads them back.
Transcripts are condensed (tool output dropped, one line per tool call,
~60x smaller), redacted, then summarized by headless `claude -p` on the
user's own plan. Three things learned the hard way are encoded here:
- --no-session-persistence, or every summary becomes a transcript that
the next run summarizes.
- A LiteLLM gateway passing through the caller's Claude subscription has
no key of its own, so a background job cannot use its claude-* models.
- Summaries share the plan's usage limits. A parallel ~100-session
backfill exhausted a session limit in minutes. So one job, a per-run
cap, and the run stops at the first usage-limit error (exit 75) instead
of failing the whole queue; a stop flag, because Future.cancel() cannot
stop work a thread already picked up. Covered by an offline test of
stop / resume / idempotent rerun.
Nothing environment-specific is committed: hosts, keys and paths live in
~/.config/claude-obsidian/ (this repo is public).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KF322NzozeaFjpgWvh4F4g