Start
Daily use
What to expect once everything is wired — your morning brief, the persona that gets sharper week by week, the dashboard.
Once personkit setup + personkit daemon --install have run, the daemon fires a full cycle every five minutes — quietly, in the background. (Each harvester is rate-limited to its own cadence inside that cycle, so a five-minute tick is cheap.) Here is what you’ll actually notice day to day.
Your morning
Open your terminal:
personkit today
You’ll see something like:
Today · 2026-05-26 (last 24h)
────────────────────────────────
Threads (6)
· 09:14 claude_code [claude-opus-5] Migrate the corpus to schema v2
· 11:42 cursor [claude-opus-5] Wire the daemon plist
· 14:05 continue_dev Refactor the retrieval path
· …
Git activity (5)
· 09:12 feat: schema v2 — threads + messages
· 11:45 feat: unified daemon under one launchd plist
· …
The same brief is available as JSON (personkit today --json) — your morning workflow can paste it into a chat or feed it to a script.
The dashboard surfaces the same data at /dashboard — useful when you want to skim threads and click into one.
In your editor
Any MCP-aware editor (Claude Code, Cursor, VS Code Copilot, Windsurf, Continue, Aider, Gemini-CLI, JetBrains) lets your AI call:
corpus_query("what did we decide about pricing")— hybrid retrieval across every captured surface.corpus_recent({ surface: "claude_code", limit: 5 })— most-recent activity from one tool.read_persona()— full context on you. Most editors call this automatically on first response.record_turn(...)— log a conversation turn into the corpus. Useful when an editor doesn’t have a dedicated observer yet.
Your AI doesn’t need to be reminded. The MCP server is wired into every host via personkit connect.
In the browser — 21 cloud chat surfaces
The extension (v1.0) wires your persona into the global chat frontier — Western and Chinese — and does two things on each supported host:
- Injects your persona — one click from the popup, on the chat you’re currently on. Voice, values, conventions, refusals all land at the top of the message you’re about to send. (There is no automatic injection on every chat you open; you press the button.)
- Captures the conversation on each surface you’ve enabled — user prompts and assistant replies both. Captured turns are POSTed to the relay, which is what carries them to your other devices and feeds persona synthesis. Browser captures do not currently land in your local
corpus.db— mirroring them back down to the localmessagestable is being built.
Coverage:
- Verified: ChatGPT, Claude, Gemini, Microsoft Copilot, Grok, Meta AI, Perplexity, Mistral Le Chat, HuggingChat, Poe, Pi, Lmarena.
- Experimental (popup-flagged, Chinese frontier): Kimi, DeepSeek, Qwen / Tongyi, Doubao, ChatGLM, Wenxin (Ernie), Yi, Hailuo, SenseChat.
The popup shows per-surface health (green ≤5 min since the last accepted turn, yellow ≤60 min, red otherwise) and a capture toggle for each surface. Every surface starts off — you switch on the ones you want, in the popup, before anything is captured. A master kill switch pauses everything; the in-page indicator at the bottom of every captured chat is a one-click toggle for that conversation only.
personkit corpus surfaces and personkit corpus messages read your local corpus, so they show your editor and harvester activity — not browser captures, which live on the relay until local mirroring ships:
personkit corpus surfaces # per-surface roll-up, local corpus
personkit corpus messages --surface=claude_code --limit=10
Voice memos
personkit voice capture ~/Downloads/standup-2026-05-26.m4a
Bridges through a local whisper binary, transcribes, and lands the result as a user-role message in a voice thread. Use --model base.en (default) or larger for accuracy.
The persona that gets sharper
Two paths add to your persona:
- In-session — every ~10 messages a Stop hook fires inside Claude Code and nudges the model to consider whether anything emerged worth recording. The model decides whether to call
write_value,write_convention,write_refusal,record_relational_moment, etc. - Nightly synthesis — the daemon’s synthesis pass (
personkit synthesise) does entity-alias merging and templated thread summaries. The LLM-driven proposal generation lands behind the proposal-review surface (toggle on viaPERSONKIT_SYNTHESIS_LLM_OK=1once you trust it).
Proposed changes land in your inbox at /dashboard/persona/proposals — accept or dismiss each one. Accepting a proposal commits a signed update to your .person.json.
When something looks off
personkit doctor— surface-by-surface health.personkit corpus health— counts per table; the first thing to check when retrieval acts strange.tail -f ~/.dotperson/daemon.out.log— what the daemon is doing right now.- Troubleshooting — the common dead-ends.
Exporting
You own everything. Any time:
personkit export --format=markdown --out ~/dotperson-export
Produces one .md per thread, Obsidian-ready, with YAML front-matter. Move them, version-control them, drop the folder into another tool — dotperson keeps no claim on the files.