{"_id":"@alimsahinprb/pensieve","_rev":"6-15f8c31e91e174e11388f5e776e71ae5","name":"@alimsahinprb/pensieve","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.3":{"name":"@alimsahinprb/pensieve","version":"0.1.3","keywords":["obsidian","knowledge-base","wiki","llm","claude-code"],"author":{"name":"alimsahinprb"},"license":"MIT","_id":"@alimsahinprb/pensieve@0.1.3","maintainers":[{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"}],"homepage":"https://github.com/alimsahinprb/pensieve#readme","bugs":{"url":"https://github.com/alimsahinprb/pensieve/issues"},"bin":{"pensieve":"dist/index.js"},"dist":{"shasum":"90f3986474e8afcf8ac6515ddf599f19a8590bdb","tarball":"https://registry.npmjs.org/@alimsahinprb/pensieve/-/pensieve-0.1.3.tgz","fileCount":3,"integrity":"sha512-jp/otKgfGu523zC4AIUYHzFe98s7cP4ahk0UcF2Wlw3mJ7iD08M4Mv5Enrp5CfaDpXIEH4Xr/5uLNQasmIWNxw==","signatures":[{"sig":"MEUCIQCJp+Du3JbY1hQw0O3DWDdT74kiKoqF1lbjy7ZRUKuK+gIgby+rElCRdP9GKquIGUi8hE1t6snnquCsZk5xc78Us6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113788},"type":"module","gitHead":"7b30d4faa94df054f1117644a2133f625ebad8c3","scripts":{"dev":"bun run src/index.ts","lint":"biome lint","test":"bun test","build":"bun run build.ts","format":"biome check --write --formatter-enabled=true --assist-enabled=true"},"_npmUser":{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"},"repository":{"url":"git+https://github.com/alimsahinprb/pensieve.git","type":"git"},"_npmVersion":"11.9.0","description":"Scaffold an Obsidian vault with Claude Code integration for LLM-maintained knowledge wikis","directories":{},"_nodeVersion":"24.14.0","dependencies":{"commander":"^14.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.2","@types/node":"^25.5.2","@biomejs/biome":"^2.4.10"},"_npmOperationalInternal":{"tmp":"tmp/pensieve_0.1.3_1776163343003_0.13049558996903876","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@alimsahinprb/pensieve","version":"0.1.4","keywords":["obsidian","knowledge-base","wiki","llm","claude-code"],"author":{"name":"alimsahinprb"},"license":"MIT","_id":"@alimsahinprb/pensieve@0.1.4","maintainers":[{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"}],"homepage":"https://github.com/alimsahinprb/pensieve#readme","bugs":{"url":"https://github.com/alimsahinprb/pensieve/issues"},"bin":{"pensieve":"dist/index.js"},"dist":{"shasum":"119dfa44f7db61c9822633098a4364cf202808e9","tarball":"https://registry.npmjs.org/@alimsahinprb/pensieve/-/pensieve-0.1.4.tgz","fileCount":3,"integrity":"sha512-XiQo4UOEWxQYMuCMywBOILrkgIP1g99XteJs3SmyfYAU596sYh+GU3UIXQpR5+k/MZf/mPvROv04bMqo6GtofA==","signatures":[{"sig":"MEQCIEbKQrdy50uROJbNYhcEjmuKgp6wZWtRldy4sNKpFlvKAiAPj3R/i0/9zg3C5gJFRDt5u78TUqfYZJUkJLzBrzxjhw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113802},"type":"module","gitHead":"7b30d4faa94df054f1117644a2133f625ebad8c3","scripts":{"dev":"bun run src/index.ts","lint":"biome lint","test":"bun test","build":"bun run build.ts","format":"biome check --write --formatter-enabled=true --assist-enabled=true"},"_npmUser":{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"},"repository":{"url":"git+https://github.com/alimsahinprb/pensieve.git","type":"git"},"_npmVersion":"11.9.0","description":"Scaffold an Obsidian vault with Claude Code integration for LLM-maintained knowledge wikis","directories":{},"_nodeVersion":"24.14.0","dependencies":{"commander":"^14.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.2","@types/node":"^25.5.2","@biomejs/biome":"^2.4.10"},"_npmOperationalInternal":{"tmp":"tmp/pensieve_0.1.4_1776170484435_0.31510793618492805","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@alimsahinprb/pensieve","version":"0.2.0","keywords":["obsidian","knowledge-base","wiki","llm","claude-code"],"author":{"name":"alimsahinprb"},"license":"MIT","_id":"@alimsahinprb/pensieve@0.2.0","maintainers":[{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"}],"homepage":"https://github.com/alimsahinprb/pensieve#readme","bugs":{"url":"https://github.com/alimsahinprb/pensieve/issues"},"bin":{"pensieve":"dist/index.js"},"dist":{"shasum":"1a4f4f01a284848df308e52c20c65d6b80e37646","tarball":"https://registry.npmjs.org/@alimsahinprb/pensieve/-/pensieve-0.2.0.tgz","fileCount":3,"integrity":"sha512-4Z4lj4+oDXHZ9Ap3Fto0gLx0nRn6hlVbgGFBoX5V1c6gEZJ+ZXZ0IlKVQW59/3dHsfLleu/RHMTYZbx9J8P+XQ==","signatures":[{"sig":"MEQCIBv19pizRhXMy3pJPpOb5/HQzRHM6cVu1l4D2tjVci0YAiBF++dmjgz1TiNZZ2JDep8u4l3PXb1Et5aMLnCT2ZM4BA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124086},"type":"module","gitHead":"34a956a33fcec9e2fe3d6bc384e291b53bb50011","scripts":{"dev":"bun run src/index.ts","lint":"biome lint","test":"bun test","build":"bun run build.ts","format":"biome check --write --formatter-enabled=true --assist-enabled=true"},"_npmUser":{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"},"repository":{"url":"git+https://github.com/alimsahinprb/pensieve.git","type":"git"},"_npmVersion":"11.12.1","description":"Scaffold an Obsidian vault with Claude Code integration for LLM-maintained knowledge wikis","directories":{},"_nodeVersion":"24.14.0","dependencies":{"commander":"^14.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.2","@types/node":"^25.5.2","@biomejs/biome":"^2.4.10"},"_npmOperationalInternal":{"tmp":"tmp/pensieve_0.2.0_1776237042778_0.5256220685826538","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@alimsahinprb/pensieve","version":"0.3.0","keywords":["obsidian","knowledge-base","wiki","llm","claude-code"],"author":{"name":"alimsahinprb"},"license":"MIT","_id":"@alimsahinprb/pensieve@0.3.0","maintainers":[{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"}],"homepage":"https://github.com/alimsahinprb/pensieve#readme","bugs":{"url":"https://github.com/alimsahinprb/pensieve/issues"},"bin":{"pensieve":"dist/index.js"},"dist":{"shasum":"fbd91359ad58b19eb61a4e2260f61ab2fa20ee78","tarball":"https://registry.npmjs.org/@alimsahinprb/pensieve/-/pensieve-0.3.0.tgz","fileCount":3,"integrity":"sha512-Lckby2MWK9S+jGpvAeXCXAteupfVbrW5Vc5a5wws44CqiBuy7mwmY/fs6GgEpvjKkoyJAf1kQ4iqkwN61C3Ytg==","signatures":[{"sig":"MEQCICcool0/1GGv8yJgYKrvGBxptWgDwIARkbgg/tggpf/hAiAKnRYbiMy4vr/KCE8n2sZbZsXVLllXkGX3pFTW3MU3Qw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131419},"type":"module","gitHead":"d30bc19dd423a7c472bebbb798e64d5e4e81c3b1","scripts":{"dev":"bun run src/index.ts","lint":"biome lint","test":"bun test","build":"bun run build.ts","format":"biome check --write --formatter-enabled=true --assist-enabled=true"},"_npmUser":{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"},"repository":{"url":"git+https://github.com/alimsahinprb/pensieve.git","type":"git"},"_npmVersion":"11.12.1","description":"Scaffold an Obsidian vault with Claude Code integration for LLM-maintained knowledge wikis","directories":{},"_nodeVersion":"24.14.0","dependencies":{"commander":"^14.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.2","@types/node":"^25.5.2","@biomejs/biome":"^2.4.10"},"_npmOperationalInternal":{"tmp":"tmp/pensieve_0.3.0_1776248347820_0.9063379281970543","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@alimsahinprb/pensieve","version":"0.3.1","keywords":["obsidian","knowledge-base","wiki","llm","claude-code"],"author":{"name":"alimsahinprb"},"license":"MIT","_id":"@alimsahinprb/pensieve@0.3.1","maintainers":[{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"}],"homepage":"https://github.com/alimsahinprb/pensieve#readme","bugs":{"url":"https://github.com/alimsahinprb/pensieve/issues"},"bin":{"pensieve":"dist/index.js"},"dist":{"shasum":"9207186a02161da0a7c8021274bbcdcb1bcc76d1","tarball":"https://registry.npmjs.org/@alimsahinprb/pensieve/-/pensieve-0.3.1.tgz","fileCount":3,"integrity":"sha512-syxrb0OJHK1mXmGdx/H9nn/gaiJrYUyA0ZtkIK7KgCqSwmwxp59XP/Fxv0tdUMvrggwDJA73F+8NOvjiegR6ww==","signatures":[{"sig":"MEUCIECRcEzZ0Wbp7AS09w/Ex9rveOAgwCmhKYnOK5BY6LymAiEAvE/2P8Dp0qMHyt3E3uuzXjSSqc00Bsj8BuX0Lh/v8rY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131332},"type":"module","gitHead":"d30bc19dd423a7c472bebbb798e64d5e4e81c3b1","scripts":{"dev":"bun run src/index.ts","lint":"biome lint","test":"bun test","build":"bun run build.ts","format":"biome check --write --formatter-enabled=true --assist-enabled=true"},"_npmUser":{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"},"repository":{"url":"git+https://github.com/alimsahinprb/pensieve.git","type":"git"},"_npmVersion":"11.12.1","description":"Scaffold an Obsidian vault with Claude Code integration for LLM-maintained knowledge wikis","directories":{},"_nodeVersion":"24.14.0","dependencies":{"commander":"^14.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.2","@types/node":"^25.5.2","@biomejs/biome":"^2.4.10"},"_npmOperationalInternal":{"tmp":"tmp/pensieve_0.3.1_1776253957229_0.39095458798549765","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@alimsahinprb/pensieve","publishConfig":{"access":"public"},"version":"0.4.0","description":"Scaffold an Obsidian vault with Claude Code integration for LLM-maintained knowledge wikis","type":"module","bin":{"pensieve":"dist/index.js"},"scripts":{"build":"bun run build.ts","dev":"bun run src/index.ts","test":"bun test","lint":"biome lint","format":"biome check --write --formatter-enabled=true --assist-enabled=true"},"repository":{"type":"git","url":"git+https://github.com/alimsahinprb/pensieve.git"},"keywords":["obsidian","knowledge-base","wiki","llm","claude-code"],"author":{"name":"alimsahinprb"},"license":"MIT","bugs":{"url":"https://github.com/alimsahinprb/pensieve/issues"},"homepage":"https://github.com/alimsahinprb/pensieve#readme","dependencies":{"commander":"^14.0.3"},"devDependencies":{"@biomejs/biome":"^2.4.10","@types/node":"^25.5.2","typescript":"^6.0.2"},"gitHead":"b0ab9c6ee7dd27f3206d930f5bcb2dc7d699115b","_id":"@alimsahinprb/pensieve@0.4.0","_nodeVersion":"24.14.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-VPDMJj7Tf72Qkr2WgmbLmxX1upQkZ7nblJScO+caPEWAj1sO/z2xS9lLDlyk21YHMLy4mvqLaspEqbYlbxC9lg==","shasum":"29c9f7b1415ea51506d8e274f84d80301a83fbea","tarball":"https://registry.npmjs.org/@alimsahinprb/pensieve/-/pensieve-0.4.0.tgz","fileCount":3,"unpackedSize":138402,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDefusXEgY1RiYbpWKa+JXrXEyuvWG5zIxZLt3hHSh8FwIgTqVVvBAOEHW3tcWyKFo2FdE7RXFlL3sz2JNrR0cR2BM="}]},"_npmUser":{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"},"directories":{},"maintainers":[{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pensieve_0.4.0_1776754322354_0.4222103503621588"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-14T10:42:22.878Z","modified":"2026-04-21T06:52:02.590Z","0.1.3":"2026-04-14T10:42:23.158Z","0.1.4":"2026-04-14T12:41:24.573Z","0.2.0":"2026-04-15T07:10:42.908Z","0.3.0":"2026-04-15T10:19:07.959Z","0.3.1":"2026-04-15T11:52:37.359Z","0.4.0":"2026-04-21T06:52:02.496Z"},"bugs":{"url":"https://github.com/alimsahinprb/pensieve/issues"},"author":{"name":"alimsahinprb"},"license":"MIT","homepage":"https://github.com/alimsahinprb/pensieve#readme","keywords":["obsidian","knowledge-base","wiki","llm","claude-code"],"repository":{"type":"git","url":"git+https://github.com/alimsahinprb/pensieve.git"},"description":"Scaffold an Obsidian vault with Claude Code integration for LLM-maintained knowledge wikis","maintainers":[{"name":"alimsahinprb","email":"alim.sahin@xprclub.com"}],"readme":"# Pensieve\n\nA CLI tool that scaffolds a folder with [Claude Code](https://claude.ai/claude-code) integration for building LLM-maintained knowledge wikis.\n\nYou drop sources, ask questions. The LLM summarizes, cross-references, links, and maintains the wiki for you.\n\n## Why Pensieve?\n\nClaude Code starts fresh every conversation. Your thinking, your notes, the article you analyzed last week — none of it persists. Pensieve is a structured, file-based memory that Claude Code reads and writes. Every session builds on the last. Sources accumulate, links form, confidence grows.\n\nIt's a thin layer over plain markdown:\n\n- **Not a hosted service** — everything is files on your disk, version-controllable with git\n- **Not a replacement for Claude Code** — it's a workflow that gives Claude Code a place to file things and retrieve them\n- **Not tied to one viewer** — open it in Obsidian, VS Code, or just `cat` the files\n\n## What Can You Use It For?\n\nA hub is a focused knowledge base. A few patterns that work well:\n\n- **Stakeholder memory** — A hub per person or team. Drop meeting notes, PRDs, and email threads; ask \"what does Sarah usually push back on?\" before your next 1:1.\n- **Project context** — A hub per side project. Drop design docs, issue threads, and session summaries; when you come back in a month, ask \"where did I leave off on auth?\".\n- **Team onboarding** — A shared hub with docs, past decisions, and war stories. New hires query the wiki instead of interrupting senior engineers.\n- **Solution recovery** — A \"debugging\" hub where every tough bug's postmortem gets ingested. Next time you hit a similar issue, the fix is one query away.\n\n## Prerequisites\n\n- [Bun](https://bun.sh) or Node.js 18+\n- [Claude Code](https://claude.ai/claude-code)\n- [Obsidian](https://obsidian.md) — optional, suggested UI for graph view and backlinks\n\n## Install\n\n```bash\nnpm install -g @alimsahinprb/pensieve\n```\n\n## Quick Start\n\n```bash\nmkdir my-wiki && cd my-wiki\npensieve init\n```\n\nThen open the folder in Claude Code (and Obsidian if you want the UI). Talk to Claude Code naturally — you don't need to type slash commands. It recognizes intent.\n\n### First Session (what it looks like)\n\n```\nYou:    Create a hub called neobanks\nClaude: ✓ Created hubs/neobanks/\n\nYou:    I just dropped 3 articles into neobanks/raw/, can you process them?\nClaude: Found 3 new files. Ingesting...\n        → Created: source-revolut-article, source-n26-overview, source-nubank-profile\n        → Created: entity-revolut, entity-n26, entity-nubank\n        → Created: concept-digital-banking, concept-neobank-fees\n        → Updated: wiki/index.md, wiki/backlinks.md\n\nYou:    Compare Revolut and N26 on fees\nClaude: [table comparing the two with cited sources]\n\nYou:    Check the wiki for issues\nClaude: Found 1 orphan page, 2 link suggestions, 1 contradiction between\n        source-revolut-article and source-nubank-profile on interchange fees.\n        Want me to apply the fixes?\n```\n\nNo slash commands typed. Natural language is enough.\n\n## Hub Structure\n\nEach hub (created via \"create a hub called X\" or `/create-hub`) is an isolated knowledge base:\n\n```\nhubs/your-hub-name/\n├── SCHEMA.md          # Hub-specific rules (customizable)\n├── raw/               # Your source files in any format (human-owned)\n├── converted/         # Auto-generated markdown from non-native raw files\n├── wiki/              # LLM-generated wiki pages (machine-owned)\n│   ├── sources/       # Raw file summaries\n│   ├── entities/      # People, companies, products\n│   ├── concepts/      # Abstract ideas\n│   ├── comparisons/   # Side-by-side analysis\n│   ├── queries/       # Saved Q&A results\n│   └── ...\n├── templates/         # Page format templates (customizable)\n└── log.md             # Operation history\n```\n\n## Commands\n\nAvailable as Claude Code slash commands or natural language — just describe what you want:\n\n| Command | Description |\n|---------|-------------|\n| `/create-hub` | Create a new knowledge hub |\n| `/ingest` | Process new raw files into the wiki |\n| `/query` | Ask questions against the wiki |\n| `/lint` | Run health checks (deterministic + LLM semantic analysis) |\n| `/search` | Search across wiki pages |\n| `/rebuild` | Destructive: rebuild a hub's wiki from scratch (asks for confirmation) |\n\nTo update the vault's command templates when Pensieve releases improvements:\n\n```bash\npensieve update\n```\n\n## Key Concepts\n\n- **Ownership model** — `raw/` is human-owned (never modified by LLM), `wiki/` and `converted/` are machine-owned, `SCHEMA.md` and `templates/` are human-editable\n- **SCHEMA-driven** — Each hub's `SCHEMA.md` defines its wiki structure. Commands adapt dynamically — no hardcoded categories\n- **Incremental compilation** — SHA-256 manifest tracks which raw files have been processed. Only new/changed files are ingested\n- **Hybrid linting** — Deterministic checks (broken links, orphans, stubs) run first via bash, then LLM handles semantic analysis (contradictions, suggestions)\n\n## Knowledge Lifecycle\n\nWiki pages aren't flat claims — they carry confidence, get reinforced, and sometimes get replaced:\n\n- **Confidence scoring** — Each page carries `confidence` (0-100), `source_count`, and `last_confirmed`. More sources and recency push confidence up; staleness decays it.\n- **Supersession** — When new information replaces an old claim, the new page gets `supersedes: [old-slug]` and the old page gets `superseded_by: new-slug`. Old pages aren't deleted — the knowledge chain is preserved.\n- **Contradiction resolution** — `/lint` compares confidence + recency of conflicting claims and proposes which should win before applying supersession.\n- **Self-healing lint** — `/lint` detects issues, then offers to auto-fix orphans, broken wikilinks, missing frontmatter, and confirmed contradictions after your approval.\n- **Crystallization** — High-quality `/query` answers (score ≥ `crystallization_threshold`, default 80) auto-save to `wiki/queries/`, so recurring questions stop being asked from scratch.\n\n## File Format Support\n\nDrop any file into `raw/`. Pensieve handles two tiers:\n\n- **Native formats** (read directly by Claude Code): `.md`, `.txt`, `.html`, `.json`, `.csv`, `.yaml`, `.xml`, `.pdf`, images (`.png`/`.jpg`/`.webp`)\n- **Auto-converted** (via the [SourceSync](https://source-sync.up.railway.app) API): `.docx`, `.xlsx`, `.pptx`, `.mp3`, `.wav`, `.mp4`, `.webm`, `.epub`, and more\n\nConverted markdown is cached per hub at `hubs/<hub>/converted/<filename>.md` and regenerated whenever the raw source changes. The `.compiled` manifest tracks `raw/` only — `converted/` is derived.\n\nMax file size: 50 MB. If the API is unreachable, conversion fails gracefully — the file is skipped with a warning and the rest of the ingest continues.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and contribution guidelines.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}