Skip to content

Reference

CLI reference

Every personkit subcommand shipped today, grouped by what you do with it.


This page mirrors what personkit --help prints. Every command listed here is in the binary now.

Get started

personkit setup

Orchestrates the full first-run flow: sign in → [1/4] connect → [2/4] corpus init → [3/4] seed → [4/4] verify surfaces. The seed step auto-discovers your git repos and ingests the last 30 days.

personkit doctor

Surface-by-surface health check. Reports signed-in state, wired tools, observer / harvester last-run times, breaker state, corpus + daemon health.

personkit status

Shows your AI’s identity and where it’s connected. Cheaper than doctor — just lists wired surfaces.

Day-to-day

personkit connect

Wires the persona projection into every detected AI surface. Idempotent.

personkit login

Opens a browser tab on aiperson.one, signs you in via GitHub, persists credentials at ~/.dotperson/credentials.json.

personkit sync

Alias for personkit observe — one sweep of every observer (Continue, Cursor, Copilot Chat, Windsurf, Gemini-CLI, Claude Desktop presence-check), then POST to the relay’s /v1/observations and mirror each observation into the local messages table.

personkit import [--name <slug>]

Pick up settings or transcripts you already have in other AI tools. Supports --name chatgpt for ChatGPT export zips, --name <other> for other surfaces.

personkit uninstall [--yes]

Disconnect everything and wipe local config. Tears down both the legacy observer plist and the unified daemon plist.

The corpus

personkit corpus init

Create ~/.dotperson/corpus.db and run all migrations (currently up to schema v2 — threads + messages).

personkit corpus seed [--repo P]... [--since 30d]

Seed git history into the corpus. Reads commits from each --repo and emits git_event rows.

personkit corpus query <text>

Hybrid retrieval (FTS5 + sqlite-vec + entity + temporal, fused with reciprocal rank fusion, k=60).

personkit corpus recent

Most-recent events, no text search.

personkit corpus entity <id>

Read one entity by id (git:<sha>, repo:<path>, person:<name>, …).

personkit corpus health

Counts per table (events, threads, messages, entities, relations, embeddings), pending-embedding counts, schema version, vec availability, embedder selection. The first thing to check when retrieval is acting strange.

personkit corpus surfaces [--since 7d] [--json]

Per-surface roll-up of recent threads — source_surface, thread count, last-message timestamp. Useful for confirming “is dotperson seeing what I expect across the chat surfaces I use.” Pairs with corpus messages for drill-in.

personkit corpus messages [--surface <id>] [--since 7d] [--limit 20] [--json]

Flatten recent threads to a per-message feed. Filter to one surface (browser-ext:chatgpt, browser-ext:kimi, claude_code, etc.) or scan all. Each row is role + content preview + timestamp. The MCP corpus_messages tool shells out to this; the assistant can answer “show me what I said to Kimi today” without leaving the chat.

personkit corpus embed [--batch 16] [--max 2000]

Backfill embeddings for events lacking them. Uses the configured embedder (Vertex when GCP_PROJECT_ID is set; fastembed when built with that feature). The daemon calls the same helper on every cycle.

personkit corpus record-turn

Universal capture entry point. Reads JSON from stdin (or --input <file>), upserts the thread, inserts the message, prints {thread_id, message_id} on stdout. The MCP record_turn tool shells out to this; the browser extension can fall back to it; any agent on any surface can call it.

personkit corpus snapshot

Signed JSONL export of every corpus table — sister to the markdown export, aimed at machines + crypto rather than humans. Each table becomes a JSONL file under <dir>/, plus a manifest.json carrying per-file SHA-256 hashes + (when --key is supplied) an Ed25519 signature.

Includes V2 tables (threads, messages) automatically.

personkit corpus restore

Round-trip a snapshot back into a corpus. Inverse of snapshot.

Existing rows in the target corpus are preserved (entities + threads are INSERT OR REPLACE; events + messages are INSERT OR IGNORE so content-hash dedupe wins).

personkit corpus wipe

Wipe the local corpus DB. Interactive by default — asks for confirmation and reports counts of what will be removed.

personkit corpus sync push|pull|serve

Cross-device sync against the relay.

Daily memory

personkit today / personkit brief

The daily brief — recent threads + git activity in the last N hours.

personkit export --format=markdown

Export the corpus as portable .md files (Obsidian-friendly). Each thread becomes one file with YAML front-matter and turns as block-quotes.

Background

personkit daemon

The unified background loop. One launchd plist (one.aiperson.personkit-daemon) — replaces the legacy observer-only plist.

Each cycle runs: harvest → embed → observe → sync → connector-drain → synthesise (deterministic synthesis only; LLM hook stays gated behind PERSONKIT_SYNTHESIS_LLM_OK=1).

personkit synthesise [--hours 24] [--with-llm]

Nightly housekeeping: embedder backfill (events + messages), entity-alias resolution, templated thread summaries. Wired into the daemon by default; runnable on demand for debugging.

personkit harvest run-once|serve|enable|disable

Discovery

personkit connectors [--json]

List every thread connector and whether its source is available on this host: browser_extension, openai_export, anthropic_api, openai_api.

personkit plugin list|install|remove|info

Community plugin manager. Plugins live in ~/.dotperson/plugins/<id>/plugin.json.

personkit voice capture <audio-file> [--model <name>]

Whisper bridge: invokes a local whisper (or whisper-cpp) binary, takes the transcript, upserts a voice thread, inserts the transcript as a user-role message. Default model is base.en.

personkit prefs list|get|set|unset|path

Local preference manager — mirrors the dashboard’s /dashboard/advanced page in the terminal. Preferences live in ~/.dotperson/preferences.json as a flat JSON object with dotted keys.

Examples:

personkit prefs set theme=dark
personkit prefs set corpus.sync_interval_secs=300
personkit prefs set daemon.synthesise.with_llm=true --sync

personkit verify surfaces

Per-surface presence + content check. Also runs a stdio MCP smoke handshake against dotperson-mcp (initialize → list tools → corpus_health).

Advanced (the original git-substrate surface)

These predate the memory layer and remain for working directly with .person files: