CLI reference
Every vault command — synopsis, options, examples.
The vault command is the local control surface for Personify. npm run setup
installs it into the repo's .venv; if you are running commands directly,
activate that virtualenv first or call the executable inside .venv/Scripts
on Windows. Run vault --help for live help.
The global --vault NAME option selects which named vault to operate on. If omitted, the default vault (personal, database personify) is used.
vault --vault code-corpus statsvault init
Create the on-disk vault directories and apply the database schema. Idempotent.
npm run setup runs this for the default personal vault. The UI's
New vault... flow runs the same initialization for named vaults.
Synopsis
vault [--vault NAME] initOptions
| Flag | Description |
|---|---|
--vault NAME | Operate on a named vault. Default: personal. |
Example
vault init
vault --vault code-corpus initvault sources
List the parser sources the binary knows how to ingest.
Synopsis
vault sourcesExample
vault sources$ vault sourceschatgpt ChatGPT (OpenAI) exportclaude Claude (Anthropic) exportdiscord Discord data packagefiles Generic file folder / archivegithub Git repository or archivegmail Gmail MBOX (Google Takeout)notion Notion Markdown + CSV exporttwitter X (Twitter) data archive
vault add-export
Register a raw export file with the vault. The file is copied into vault/raw/, never moved. The SHA-256 is computed and stored — re-registering the same bytes is rejected.
Synopsis
vault add-export --source SOURCE --path PATH --account ACCOUNTOptions
| Flag | Required | Description |
|---|---|---|
--source | yes | Source slug (see vault sources). |
--path | yes | Path to the export file or folder. |
--account | yes | Account handle this export belongs to (free-form string — your email, handle, etc.). |
Example
vault add-export --source chatgpt \
--path ~/Downloads/chatgpt-export.zip \
--account myname@example.comvault scan-repos
Walk an intake folder, find every git repository, and report which would be new vs. already-registered. Read-only — does not write to the vault.
Synopsis
vault scan-repos --path INTAKEOptions
| Flag | Required | Description |
|---|---|---|
--path | yes | Folder to walk. Each immediate subfolder containing a .git/ is treated as a candidate repo. |
Example
vault scan-repos --path ~/codevault add-repos
Bulk-register every new git repo in an intake folder. Optionally kick off ingestion immediately.
Synopsis
vault add-repos --path INTAKE --account ACCOUNT [--ingest]Options
| Flag | Required | Description |
|---|---|---|
--path | yes | Intake folder containing git repos as immediate children. |
--account | yes | Account / org handle to attribute these repos to. |
--ingest | no | Run vault ingest on each newly registered repo right away. |
Example
vault add-repos --path ~/code --account my-org --ingestvault ingest
Run a parser over one or more registered raw exports. Idempotent — items deduped by their source-specific keys.
Synopsis
vault ingest [--export-id ID] [--source SOURCE] [--all-pending] [--replace]Options
| Flag | Description |
|---|---|
--export-id ID | Ingest a single raw export by its database id. |
--source SOURCE | Ingest every pending export for a given source slug. |
--all-pending | Ingest every export with status pending. |
--replace | Drop existing items for an export and re-ingest from scratch. Use after a parser change. |
Exactly one of --export-id, --source, or --all-pending should be specified.
Example
vault ingest --all-pending
vault ingest --export-id 7 --replacevault embed
Compute embeddings for chunks that don't yet have them. Pulls the model on first run.
Synopsis
vault embed [--limit N]Options
| Flag | Description |
|---|---|
--limit N | Process at most N chunks this run. Default is unbounded. |
Example
vault embed --limit 1000vault search
Full-text search across item_text.body. For semantic search use the /semantic-search HTTP endpoint or the semantic_search MCP tool.
Synopsis
vault search "QUERY" [--limit N] [--source SOURCE]Options
| Flag | Description |
|---|---|
--limit N | Maximum hits to return. Default 25. |
--source SOURCE | Restrict results to a single source slug. |
Example
vault search "rust borrow checker"
vault search "thanksgiving" --source gmail --limit 10vault stats
Print a summary of vault contents — totals plus per-source and per-account breakdowns.
Synopsis
vault statsExample
vault stats$ vault statsVault: personalitems: 128,402exports: 12runs: 14 (last: 2026-05-03 09:11)By source:gmail 82,140chatgpt 4,210github 38,902...
vault dev
Start the full development stack — Docker Postgres, the FastAPI HTTP API, and the Vite frontend. Convenient one-shot for hacking on Personify itself.
Synopsis
vault devBehavior
- Brings up the
personify-dbcontainer if it's not running. - Launches FastAPI on port 18765.
- Launches the Vite frontend on port 18766.
- Probes a UI-required backend route so an old stale FastAPI process is not mistaken for a healthy server.
Press Ctrl-C to stop both processes. The Postgres container keeps running.
Most users can run npm start, which calls this command through the local
virtualenv after ensuring .env exists.
Example
vault devvault mcp
Run the Personify MCP server over stdio. Wire this into Claude Desktop or any other MCP client. See the MCP overview.
Synopsis
vault [--vault NAME] mcpExample
vault mcp
vault --vault code-corpus mcpvault --vault
Global flag, applied before the subcommand, to select a named vault. The vault name is sanitized for the database name and directory: --vault Code Corpus becomes database personify_code_corpus and directory ./vaults/code-corpus/.
Synopsis
vault --vault NAME <subcommand> [...]Example
vault --vault code-corpus init
vault --vault code-corpus add-repos --path ~/code --account my-org --ingest
vault --vault code-corpus stats