Claude Personal Context Plugin

August 14, 2026 · View on GitHub

Builds and maintains a persistent, portable background context layer about you — who is in your life, what has already happened, how you want to be spoken to — so that every scoped workspace can read it instead of asking you again.

Intake interview, ingestion of material you already have, gap analysis, scoped retrieval, maintenance, and export. Your files, your store, a documented format.

Contract Workspace template Index


The problem

Workspaces work best when they are narrow — one issue, one domain, one question. Narrow workspaces have one failure mode: you re-explain your life at the top of every one. Do that three times and you stop opening new ones.

The usual fix is a memory feature. Those are vendor-specific, unexportable, unscoped, and tied to an account. Personal background context is the last category of data that should be.

So: one store, outside every workspace, in plain markdown, at a path you choose.

        <user data root>/personal-context/        ← this plugin builds and maintains it
                              │                     (resolved, never inside ~/.claude)

         ┌────────────────────┼────────────────────┐
         ▼                    ▼                    ▼
   career workspace    relationship ws.      grief workspace
   scopes: [general,   scopes: [general,     scopes: [general,
            career]              relationship]         family]

Each consumer declares which scopes it may read. The career workspace never loads the relationship material, not because of a permission system, but because that is what it asked for and what it says out loud that it loaded.

Explicitly not a memory feature

The plugin refuses to use model-managed or provider-side memory, and instructs its consumers to do the same. Everything durable is a file you can cat, edit and delete. See §1 and §11 of the contract.

How it's built — two phases

Phase 1 — give it what you already have. Most people have years of relevant material: journals, notes apps, message exports, old therapy notes, a CV, letters. /personal-context:ingest reads what you point it at and proposes entries with provenance. Nothing is written without you seeing it.

Phase 2 — fill the gaps. /personal-context:gaps reads what exists, works out what's missing or stale against the schema, and asks targeted questions instead of generic ones. Answering "who else was around during 2019–2023?" is easier than answering "tell me about your life".

/personal-context:intake runs the sectioned interview if you'd rather start from a conversation, or have nothing to ingest. It's resumable, and every section is skippable.

Skills and commands

InvokeDoes
context-initChoose a backend, write config, scaffold the store
intake-interviewSectioned, resumable interview — the conversational route in
ingestTurn material you already have into entries, with provenance
gap-scanFind what's missing, thin, stale or contradictory; ask about it
context-brief · /personal-context:briefAssemble a scoped briefing for a workspace
context-write · /personal-context:rememberThe write path: propose, confirm, write, index
context-review · /personal-context:reviewMaintenance: staleness, contradictions, over-broad scopes
context-export · /personal-context:exportPortable bundle — the conformance test

Install

/plugin marketplace add danielrosehill/Claude-Code-Plugins
/plugin install personal-context

Then:

/personal-context:init

Storage

WhatWhereCommitted?
Plugin codeInstall path, replaced on updaten/a
Machine-local config~/.claude-plugins/personal-context/config.jsonNever
The storeResolved, not fixed — see belowPrivate repo, or not at all

Nothing lives in ~/.claude. That directory is Claude Code's own: it is the tool's state, not the person's, and a context layer whose point is outliving any one tool cannot sit inside it. scripts/paths.sh treats any path under ~/.claude as a hard error, including one the user set themselves — the single setting with no override.

The store location is resolved in order: $PERSONAL_CONTEXT_STORE$CLAUDE_USER_DATAan existing plugin data root already on disk (~/.claude-user-data, then ${XDG_DATA_HOME:-~/.local/share}/claude-plugins) → default ~/.claude-user-data/. If you already keep plugin content somewhere, this plugin takes a folder inside that root rather than starting a second one, and context-init tells you which rule fired. Full specification: docs/storage-paths.md.

sh scripts/paths.sh --json   # what would be used on this machine, and why

The store is never public. context-init refuses to configure a public remote, and every write path re-checks before committing.

Consumers

ConsumerScopes it typically declares
Claude-Therapy-Workspace-TemplateWhatever the issue is about, plus general
Anything else implementing the contractIts own

Writing your own consumer means reading §7 (read protocol) and §8 (write protocol). There is no API to call — the store is files.

Relationship to claude-user-memory

Claude-User-Memory-Plugin (v2.0.0, 2026-04) solves an adjacent problem and the two are easy to confuse. The seam:

claude-user-memorypersonal-context
RemembersOperational facts for working with the assistant — preferences, corrections, role, ongoing projectsBiographical background — people, chapters, events, patterns, care history
UnitAn atomic factA typed entry with provenance, confidence and history
Source of truthA memory backend reached over MCPMarkdown files on disk
SeparationTwo fixed contexts: personal and workArbitrary scopes per store, plus three sensitivity levels
Built byAccretion during ordinary sessionsIntake interview, ingestion of existing material, gap analysis
FiresAutomatically, when the assistant would otherwise askOn request, by a workspace that declares its scopes

They compose rather than compete: a store with backend: mcp can sit on the same memory server claude-user-memory uses, provided the server round-trips this schema. Use that one so the assistant stops re-asking your preferences; use this one when a workspace needs to know who the people in your life are.

If the two are ever consolidated, this plugin is the successor — the file-as-source-of-truth, scoped-read and export-conformance requirements can express the older contract, and the reverse is not true.

License

MIT.