Keeper is an encrypted CLI "second brain" that runs a local daemon so you can capture notes and tasks without re-entering your password every time.
- Encrypted vault backed by SQLCipher
- Password + 24-word recovery code
- Fast capture via CLI and REPL dashboard
- Due-date timeline (ASCII + Mermaid)
- Optional MCP server for AI tool access
curl -fsSL https://github.com/thoughtoinnovate/keeper/raw/main/install.sh | shThe installer downloads the latest release, verifies a SHA-256 checksum, and automatically sets up security capabilities (on Linux).
Keeper uses memory locking to prevent your encryption keys from being swapped to disk. This requires the CAP_IPC_LOCK capability on Linux.
The install script handles this automatically, but if you see permission errors:
# Grant capability (one-time setup)
sudo setcap cap_ipc_lock+ep /usr/local/bin/keeper
# Verify it's set
getpcaps $(pgrep -f "keeper daemon")keeper start with sudo. It creates root-owned files you can't access without sudo. Use capabilities instead.
# Start the daemon (first run initializes vault + recovery code)
keeper start
# Capture a task
keeper note "Fix auth bug" @default/work !p1 ^2026-02-01
# Fetch items
keeper get @default
# Stop the daemon
keeper stopBuckets are hierarchical. The top-level segment is the workspace:
@default/inbox
@feedback/bugs
@ideas/buckets
If you omit a bucket, Keeper uses the default workspace inbox (e.g. @default/inbox). If you specify a bucket, it must include a workspace.
By default, Keeper uses:
~/.keeper/vault.db~/.keeper/keystore.json
Use --vault to target a different location:
keeper --vault /path/to/vault start
keeper --vault /path/to/vault note "..." @default/work !p2Notes:
--vaultcan be a directory or avault.dbfile.- Each vault has its own socket and keystore in the vault directory.
- Recovery (forgot password):
keeper recover
- Change password while daemon runs:
keeper passwd
keeper update
keeper update --tag v0.1.0Updates verify SHA-256 checksums before installing.
Plain JSON (merge by id on import):
keeper export --json keeper.json
keeper import --json keeper.jsonEncrypted bundle (password-protected):
keeper export --encrypted backup.keeper
keeper import --encrypted backup.keeperUse --force to overwrite existing export files or existing vault files on encrypted import.
keeper start|stop|statuskeeper note <text...> [@workspace/bucket] [!p1|!p2|!p3] [^date]keeper get [@workspace|@workspace/bucket] [--all] [--notes]keeper mark <id> <open|done|deleted>keeper update <id> <text...> [@workspace/bucket] [!p1|p2|p3|none] [^date|^clear]keeper workspace list|current|set @workspacekeeper bucket list [@workspace]keeper bucket move <from> <to>keeper delete <id>/keeper delete --allkeeper undo [id]keeper archivekeeper dash due_timeline [--mermaid] [--workspace @default](Mermaid output colors by priority)
The MCP server is a separate binary under mcp/keeper-mcp. See MCP_AGENT_GUIDE.md for setup and tool docs.
MIT. See LICENSE.