Session Backfill

VerifiedSafe

Backfill structured session summaries from Claude Code transcripts into your Obsidian vault's per-project Sessions folder.

Sby Skills Guide Bot
ProductivityIntermediate
7/22/2026
Claude Code
#obsidian#session-summaries#knowledge-management#claude-code#transcripts

Recommended for

Automated summary

This skill reads Claude Code .jsonl transcripts and distills them into structured per-project session notes (TL;DR, goal, outcome, decisions, blockers, next steps) inside a vault's Sessions folder.

Strengths

  • Turns empty session-auto-track stubs into substantive notes that QMD can actually index and search
  • Defaults to `claude -p`, so it runs on the local Claude Code subscription with no API key or Console billing
  • Idempotent by session_id, so reruns skip already-summarized sessions safely
  • Vault path is resolved without hardcoding (CLI flag, env vars, common locations) and --dry-run previews work without any distillation

Limitations

  • Assumes Braynee's session-auto-track stubs and Claude Code's `~/.claude/projects/` layout, so it is not portable to arbitrary transcript stores
  • Expects a vault convention of `2. Areas/Sessions/<Project>` for notes to land correctly
  • Each session costs one LLM call, so a full `--all` backfill over many sessions can take a while
When to use it

Use it when your vault has placeholder or empty session notes and you want a searchable project history rebuilt from the real Claude Code conversations.

When not to use it

Skip it if you don't work in Claude Code with an Obsidian vault laid out this way, or if you don't want an LLM summarizing your transcripts.

Security analysis

Safe
Quality score90/100

Skill instructs running a Python script and the Claude Code CLI to read local transcript files and write structured markdown notes locally. No destructive, exfiltrating, or obfuscated commands are present. The script explicitly strips ANTHROPIC_API_KEY from the subprocess environment to prevent unintended API billing, and network use is limited to the Claude Code subscription, which is expected and legitimate.

No concerns found

How this analysis is made

Examples

Single project backfill
Backfill my Claude Code sessions for sophon-webapp into the vault.
Dry run first
Do a dry run of the session backfill for the foreman project so I can see which notes would be created.
Recent sessions only
Summarize the last 5 Claude Code sessions for foreman and fill in the empty session notes.

name: session-backfill description: > Backfill structured session summaries from Claude Code .jsonl transcripts into the vault's per-project Sessions folder. Distills each CC session into TL;DR / Goal / Outcome / Decisions / Blockers / Next / References — agent- and human-searchable, not raw transcripts. Use when user says "backfill sessions", "summarize my sessions for X", "fill in the empty session notes", or wants to make QMD project history actually useful. argument-hint: '[--project NAME | --all] [--limit N] [--dry-run]' allowed-tools: Bash(python3:), Bash(claude:)

Session Backfill Skill

Turn empty braynee session-auto-track stubs into substantive per-project session notes by distilling the real Claude Code conversation history.

Why

Braynee's session-auto-track creates a one-line stub session note when each CC session starts. The stubs never get filled in — they say "Waiting for user to state goal" and "(none yet)" forever. Meanwhile the actual conversation lives in ~/.claude/projects/<encoded-path>/*.jsonl. QMD indexes only the stubs, so project history is unsearchable.

This skill reads each .jsonl, filters the tool-call noise, distills the conversation skeleton, and writes a structured summary into <vault>/2. Areas/Sessions/<Project>/<date>-<slug>-<type>-<id>.md.

Idempotent: if a structured note already exists for a session_id, it's skipped. Safe to rerun.

Distillation: no API billing by default

The default backend is claude -p — it uses your local Claude Code subscription via OAuth. No ANTHROPIC_API_KEY, no Console credits, no infisical, no per-session cost. The script explicitly strips ANTHROPIC_API_KEY from the claude -p subprocess env so it can never silently fall back to API billing.

--use-api is an explicit opt-in for the raw Anthropic API (Console credits). Use it only if you specifically want API billing and have set ANTHROPIC_API_KEY yourself. It is never required and never the default.

Commands

# Single project (pilot use) — uses `claude -p`, no API billing
python3 {baseDir}/scripts/backfill.py --project sophon-webapp

# Dry run — print what would be created, no distillation at all
python3 {baseDir}/scripts/backfill.py --project sophon-webapp --dry-run

# Limit to N most-recent sessions per project
python3 {baseDir}/scripts/backfill.py --project foreman --limit 5

# All projects (the big backfill)
python3 {baseDir}/scripts/backfill.py --all

# Point at a non-default vault location
python3 {baseDir}/scripts/backfill.py --all --vault "/path/to/Obsidian Vault"

# Opt in to the raw API (Console billing — only if you explicitly want it)
ANTHROPIC_API_KEY=... python3 {baseDir}/scripts/backfill.py --project foreman --use-api

Vault resolution

The vault is resolved universally, no hardcoded path:

  1. --vault PATH argument
  2. $BRAYNEE_VAULT / $OBSIDIAN_VAULT environment variable
  3. Common locations probed for a .obsidian directory (~/Obsidian Vault, ~/vault, ~/Documents/Obsidian Vault, OneDrive / iCloud variants)
  4. Falls back to ~/Obsidian Vault so a brand-new vault still works

Note format produced

Every backfilled note follows this structure:

---
type: session
project: "[[Sophon Webapp]]"
status: done
session_type: debug
session_id: "66b42f24-..."
started: 2026-04-27T09:01:00Z
tags:
  - session
  - debug
---

## TL;DR
[1-2 sentences — state of work + outcome]

## Goal
[What this session was trying to accomplish]

## Outcome
- **Shipped:** concrete changes that landed
- **In flight:** things started but not finished

## Decisions
- **[Decision]** — rationale, tradeoff

## Blockers / Open Questions
- [Things stuck, waiting, unknown]

## Next
[Single highest-leverage next action]

## References
- **Files:** `path/to/file.ts`
- **Related:** [[wikilinks]]

Project name mapping

Claude Code stores each project under ~/.claude/projects/<encoded-path>/, where the encoded path is the project's absolute path with separators (and the Windows drive colon) replaced by -. The skill derives the project slug generically — it strips a leading Windows drive letter, then takes the path segment after the last recognised parent directory token (code, src, work, repos, dev, …). This works for any user on any OS regardless of where their code lives.

For projects where the derived slug doesn't map to a clean wikilink (e.g., dealreveal-engine → DealReveal, not Dealreveal Engine), add an override in scripts/project_map.json. Overrides are optional — without them the slug is title-cased word-by-word.

Requirements

  • Python 3.10+ — that's it for the default path.
  • claude CLI on PATH (Claude Code) — used for distillation via your subscription. Already present wherever this skill runs.
  • Optional: pip install anthropic only if you pass --use-api (raw API, Console billing).
  • No infisical, no secrets manager, no API key needed for normal use.

Cost

  • Default (claude -p): consumes your Claude Code subscription quota, no API dollar cost.
  • --use-api (opt-in only): claude-sonnet-4-6, prompt-cached system prompt, ~$0.02/session on Console credits.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/session-backfill-mrwakblw/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/session-backfill-mrwakblw' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/session-backfill-mrwakblw/download' --output '.skill-downloads/session-backfill-mrwakblw/SKILL.md.part' && mv '.skill-downloads/session-backfill-mrwakblw/SKILL.md.part' '.skill-downloads/session-backfill-mrwakblw/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Tools declared by the author (check availability in your agent): Bash(python3:*), Bash(claude:*)

Original excerpt: Requirements
  • Python 3.10+ — that's it for the default path.
  • claude CLI on PATH (Claude Code) — used for distillation via your subscription. Already present wherever this skill runs.
  • Optional: pip install anthropic only if you pass --use-api (raw API, Console billing).
  • No infisical, no secrets manager, no API key needed for normal use.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/session-backfill-mrwakblw/SKILL.md' && test -s '.skill-downloads/session-backfill-mrwakblw/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/session-backfill' && cp -R '.skill-downloads/session-backfill-mrwakblw' '.claude/skills/session-backfill'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/session-backfill-mrwakblw'

openskills read 'session-backfill-mrwakblw'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/session-backfill-mrwakblw/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills