Claude History IngestCAUTION
Framework for AI agents to build and maintain a digital brain through Obsidian wiki | Memory System for Agents
Overview
Framework for AI agents to build and maintain a digital brain through Obsidian wiki | Memory System for Agents
50403ab5d351OBSERVED · 2026-10-21Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| claude-code | mentioned | |
| claude-desktop | mentioned |
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
---
name: claude-history-ingest
description: >
Ingest Claude Code conversation/session history into Obsidian as distilled knowledge. Use for importing or mining past Claude sessions, .claude data, project/session history, or audit logs.
---
# Claude History Ingest — Conversation Mining
You are extracting knowledge from the user's past Claude Code conversations and distilling it into the Obsidian wiki. Conversations are rich but messy — your job is to find the signal and compile it.
This skill can be invoked directly or via the `wiki-history-ingest` router (`/wiki-history-ingest claude`).
## Before You Start
**Writing profile:** Before drafting or rewriting natural-language Markdown, read and apply the `Writing Profile Resolution` section in `llm-wiki/SKILL.md`. Framework schema, provenance, safety, and operation-specific requirements take precedence.
`WRITING.md` preferences apply only to newly drafted or rewritten natural-language Markdown; preserve source content and structured records.
1. **Resolve config** — follow the Config Resolution Protocol in `llm-wiki/SKILL.md` (inline `@name` override → walk up CWD for `.env` → global config → prompt setup). This gives `OBSIDIAN_VAULT_PATH` and `CLAUDE_HISTORY_PATH` (defaults to `~/.claude`)
2. Read `.manifest.json` at the vault root to check what's already been ingested
3. Read `index.md` at the vault root to know what the wiki already contains
4. **Project Scoping** — read `WIKI_SKIP_PROJECTS` from config (comma-separated substrings). Exclude any project directory whose name contains one of them from **every** step below (scan, delta, sampling, manifest writes). If the user names extra projects to skip this run, add them. Apply the exclusion **once, uniformly** — don't hand-write `grep -v` filters into individual commands, which drifts between the scan and manifest steps.
## Ingest Modes
### Append Mode (default)
Check `.manifest.json` for each source file (conversation JSONL, memory file). Only process:
- Files not in the manifest (new conversations, new memory files, new projects)
- Files whose modification time is newer than their `ingested_at` in the manifest
This is usually what you want — the user ran a few new sessions and wants to capture the delta.
> **Portable keys when comparing.** Manifest keys follow the source key contract (v2) in `llm-wiki/SKILL.md` → `.manifest.json`. A session under `$HOME` is keyed `~`-relative (`~/.claude/projects/.../abc.jsonl`), never by the expanded machine path; vault-relative and pseudo-keys are the other two forms. Before deciding a file is "new", resolve the stored key the same way the tool does (expand `~`/env vars, resolve vault-relative against the vault root) — otherwise an already-tracked file looks new and gets re-ingested. The `scripts/manifest.py` helper does this for you:
>
> ```bash
> # New/modified sources, honoring WIKI_SKIP_PROJECTS + --skip:
> python3 "$OBSIDIAN_WIKI_REPO/scripts/manifest.py" delta "$OBSIDIAN_VAULT_PATH" \
> --scan "$CLAUDE_HISTORY_PATH/projects/*/memory/*.md"
> # One-time repair if the manifest still holds legacy absolute keys:
> python3 "$OBSIDIAN_WIKI_REPO/scripts/manifest.py" migrate "$OBSIDIAN_VAULT_PATH" --dry-run
> ```
>
> The helper is optional — if it's unavailable, apply the same resolution inline before every manifest lookup and write.
### Pre-extraction (recommended — run before ingest)
Raw JSONL files are 80-90% noise: `tool_use` blocks, `thinking` blocks, `progress` events, and
`file-history-snapshot` entries dominate by byte count. The `scripts/extract-jsonl.py` helper
strips all of that and writes compact signal-only JSON to `~/.claude/extracted/`, achieving
**50–200× file-size reduction** (e.g. 12 MB JSONL → 64 KB extracted). This lets the skill read
5–10× more conversations per run within the same token budget.
Run it as a pre-step before invoking this skill:
```bash
# First run — extract everything (skip excluded projects)
python3 "$OBSIDIAN_WIKI_REPO/scripts/extract-jsonl.py" --skip tsg,autom8
# Incremental — only sessions modified in the last day
python3 "$OBSIDIAN_WIKI_REPO/scripts/extract-jsonl.py" \
--since "$(date -v-1d +%Y-%m-%d)" --skip tsg,autom8
```
Extracted files live at `~/.claude/extracted/<project-dir>/<session-id>.json` and contain:
```json
{
"session_id": "uuid",
"project": "-Users-name-myapp",
"cwd": "/Users/name/myapp",
"start_ts": "...",
"end_ts": "...",
"n_turns": 18,
"n_user_words": 620,
"turns": [
{"role": "user", "text": "..."},
{"role": "assistant", "text": "..."}
]
}
```
**When Step 3 reads conversations, always prefer the extracted file over the raw JSONL.** (See Step 3.)
If `extract-jsonl.py` was not run first, fall back to raw JSONL — but note the coverage will be
shallower because each raw file costs far more tokens to read.
### Conversation Sampling Heuristic
A history path can hold hundreds of conversation JSONLs — do not try to read them all. Per project:
- **If the project already has memory files** (`memory/*.md`), ingest those first (they are
pre-distilled signal), then **also process conversations not yet in the manifest** — new
conversations should still be captured even for memory-rich projects.
- **If the project has no memory files**, read only the **3 most recent** conversations (by mtime)
to characterize it. Prefer pre-extracted files (see above) — they are cheap enough that you can
read 5–10 in the same token budget as 1 raw JSONL.
- Always report what you sampled vs skipped (e.g. "agenttower: 7 memory files + 4 new conversations
ingested, 14 unchanged conversations skipped"), so the coverage gap is visible rather than silent.
### Full Mode
Process everything regardless of manifest. Use after a `wiki-rebuild` or if the user explicitly asks.
## Claude Code Data Layout
Claude Code stores data in two locations. Scan **both**.
### Source 1: `~/.claude/` (CLI sessions)
```
~/.claude/
├── projects/ # Per-proTrust audit
CAUTIONgrade B · trust 89/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | NA |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (5)
.agents/skills/claude-history-ingest
.agents/skills/code-understand
.agents/skills/codex-history-ingest
.agents/skills/copilot-history-ingest
.agents/skills/cross-linker
Gates applied: no_behavioural_pass.
50403ab5d351full audit observations/trust-audit/skill/ar9av__claude-history-ingest.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-21 | 50403ab5d351 | CAUTION | B | 89 | first audit |
Questions
What does the claude-history-ingest — ar9av/obsidian-wiki skill do?
Framework for AI agents to build and maintain a digital brain through Obsidian wiki | Memory System for Agents
Is claude-history-ingest — ar9av/obsidian-wiki safe to install?
With care. The audit graded it B (89/100) and found 5 things worth knowing before you trust this skill, listed below with the exact line each was found on.
What can claude-history-ingest — ar9av/obsidian-wiki access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
Which assistants does claude-history-ingest — ar9av/obsidian-wiki work with?
Its documentation mentions claude-code and claude-desktop. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (50403ab5d351), read on 2026-10-21. The repository is watched, and a new audit runs when it changes — this is the first audit.
Add this badge to your README
Shows this page's audit result and links back to it. It updates when the audit does.
[](https://modelsatlas.com/skills/ar9av/claude-history-ingest/)
Not your listing, or something out of date? Claim or update your listing.