Skip to content

v0.4.0 — session import

Choose a tag to compare

@malinfossum malinfossum released this 14 Jul 04:55
· 15 commits to main since this release
034810e

The session-import release. Facts that only ever lived in session transcripts — never promoted to curated memory — become recallable, without letting a single pasted key reach the index.

What's new

  • munin import (opt-in) — converts Claude Code session transcripts (*.jsonl) into dated markdown under gitignored data/imported/, indexed at the lowest source weight. Nothing is imported unless you add folders to importSources; re-runs are incremental, and the import ledger is written only after a fully successful run.
  • Safety by construction — only conversation text is imported: tool calls, tool output, and thinking are dropped before scrubbing, so terminal output never reaches the pipeline. Every turn carries an inline date, and quoted markdown headings are escaped so imported text can't forge chunk structure.
  • Secret scrubber — provider key prefixes (sk-/sk_, GitHub, Slack, AWS, Google, npm), JWTs, PEM private-key blocks, URL credentials, and key: value assignments including env-style names (GITHUB_TOKEN=) and Bearer values, plus a catch-all for long opaque tokens (git SHAs are eaten by design). Stress-tested adversarially; five confirmed gaps fixed test-first before release.
  • New config keysimportSources (default []) and importedWeight (default 0.25).

Verification

  • 52/52 tests passing.
  • Real-world import: 89 sessions (221 MB of JSONL → 2.7 MB of markdown), zero failures.
  • Golden question set: 10/10 with the imported corpus indexed — the honesty probe still returns "No confident match." against ~2600 imported chunks.
  • Secret sweep over all imported output: zero live-shaped tokens.

Transcripts contain other people's words too (collaborators, quoted web content) — imported text stays local in gitignored data/ and ranks below curated memory. See the README for details.