inkeep/open-knowledge-pack-entity-vault
How to work in a Personal CRM project (the `entity-vault` starter pack, GBrain-compatible): a typed-entity vault of people, companies, meetings, and concepts, each a dossier with a rewritable summary plus an append-only timeline. Read when the project has these folders, OR when asked to capture notes about a person or company, log a meeting, prep for an upcoming meeting, or answer who someone is and what was last said. Carries the dossier convention and entity-extraction behaviors so that guidance does not live inside template bodies or folder descriptions. Complements the platform `open-knowledge` skill; does not replace it.
npx skills add https://github.com/inkeep/open-knowledge --skill open-knowledge-pack-entity-vault
A Personal CRM built as a typed-entity vault, inspired by Garry Tan's gbrain. Each entity is a dossier; the agent keeps dossiers current by extracting entities from meeting notes and original thinking. This skill holds those behaviors so templates and folder descriptions stay clean. The Markdown shape is GBrain-compatible: if the external gbrain CLI is installed, it can import/sync the same vault.
> This skill is pack guidance. The platform open-knowledge skill (read/write/preview/linking/grounding rules) still governs every markdown operation — this layers the dossier conventions on top.
Every dossier in people/, companies/, and concepts/ has two parts, split by an explicit --- timeline --- separator:
--- timeline ---) — your current best understanding. Rewrite it as new evidence changes the synthesis.--- timeline ---) — append-only dated bullets in the parseable form - YYYY-MM-DD | source | @author — evidence. Confidence: …. Never edit existing timeline entries; only append.When a new fact arrives, route it: update compiled truth if it changes current understanding, or append a timeline bullet if it's raw evidence. The explicit separator and dated-bullet shape are what keep the vault parseable by GBrain's import/sync.
people/, companies/, concepts/ — dossiers (compiled truth + timeline). Frontmatter type: person|company|concept.meetings/ — meeting notes (YYYY-MM-DD-<slug>.md); attendees: should match dossier filenames in people/. The verbatim record — do NOT rewrite it. When a note is ingested from a meeting-recorder tool, add source: (e.g. granola, fireflies) and source_meeting_id: (the recorder's stable id) to its frontmatter — those two are the dedup key.originals/ — your own untransformed thinking; authoritative source material. Frontmatter type: original.media/ — bulk transcripts, voice notes, large attachments; often .okignore-d to keep the index light.Per the platform skill, prefer standard markdown links for new dossiers, and count the relative depth carefully for the cross-folder links this vault is full of — e.g. Alice Chen from a meetings/ note, Acme AI from a people/ dossier. The write/edit brokenLinks response catches a wrong-depth path before you walk away. New brain pages render on GitHub, satisfy OK's brokenLinks check, and import cleanly into GBrain.
Two deltas from the platform default, both GBrain-specific:
Alice). OK resolves it fine, but GBrain reads a leading / as an absolute filesystem path and rejects it — use a relative path. (GBrain also accepts a bare Alice, but from a subfolder OK resolves that *source-dir-relative* — meetings/people/alice-chen — and reports it broken, so stick to the ../-correct relative form, which both accept.)[[people/alice-chen|Alice Chen]] resolves vault-root from any folder (no ../ to count), is validated by brokenLinks like any link, and imports into GBrain. Keep them extensionless ([[people/alice-chen]], never [[people/alice-chen.md]] — the .md makes it resolve to a nonexistent doc). A *bare* [[note-name]] with no folder is ambiguous (resolves only if GBrain's basename-globbing is on) — reserve it for Obsidian migration.open-knowledge, pull recent meetings and write each into meetings/. Address each as meetings/<source>-<source_meeting_id> so re-syncing a meeting updates it in place instead of creating a duplicate. Normalize whatever the recorder returns (Granola's Me/Them streams, a bot's speaker turns) into notes plus the verbatim transcript; do NOT rewrite the transcript. This works the same on demand (you ask) or unattended (a scheduler asks) — the recorder is bring-your-own and interchangeable.originals/ as authoritative (the user's own words, not inferences).This pack ships the Markdown half (folders + templates + this skill); OK is the cockpit/editor/review layer. If the external gbrain CLI is installed (~/.gbrain/), it adds scheduled enrichment: gbrain dream (nightly maintenance), gbrain briefing, gbrain soul-audit, and gbrain import/gbrain sync --repo for DB-backed indexing. The root files (USER.md, SOUL.md, ACCESS_POLICY.md, HEARTBEAT.md) are read by those skills; fill them in by hand or via gbrain soul-audit. None of it is required to use the vault — interop is plain Markdown + Git.
Create with write({ document: { path: "<path>", template: "<name>" } }). Templates carry the structure (including the compiled-truth / --- timeline --- separator) plus short inline reminders at the point of use; this skill holds the full convention, so prefer it as the canonical reference if the two ever disagree.
Take inkeep/open-knowledge-pack-entity-vault from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.