Siftable CLI is the command-line interface to Siftable — your tasks, agent work queues, knowledge, calendar, people, and code intelligence, scriptable from the shell.
If you want Siftable inside your editor or coding agent (Claude, Cursor, other MCP clients), use the Siftable MCP server.
If you want the web app, go to siftable.io.
Quickstart
Installing the CLI
There's one package on the npm registry — install it with whatever you use:
npx @siftable/cli <command>
npm install -g @siftable/cli
bun install -g @siftable/cli
pnpm add -g @siftable/cli
Then run sift to get started. The binary installs as sift, with siftable and the exf compatibility alias. Full install notes live at siftable.io/docs.html#cli-install.
Authenticating
sift auth login
Or set a Personal Access Token directly:
export SIFT_TOKEN=sift_pat_your_token_here
Your first commands
sift tasks list
sift tasks create --title "Ship CLI v1"
sift notes search "deployment process"
sift work list --agent codex --json
The interactive copilot
sift interactive
A terminal copilot that acts on your filesystem and the Siftable work graph. It requires Bun (curl -fsSL https://bun.sh/install | bash); the command tells you if Bun isn't installed.
Performance-critical paths (context compaction, long-thread memory, filesystem scanning, merge orchestration) run through native Zig modules loaded via Bun FFI. The published package ships prebuilt libraries for macOS (Apple Silicon) and Linux (x64), which get the fast native path by default. Every native module has a lockstep TypeScript fallback, so other platforms still work — just without the native acceleration.
Mental model
Users plan commitments with sift tasks. Agents execute bounded queue items with sift work. User-visible executor identities, aliases, capabilities, and default permissions live under sift agents.
sift tasks — human planning: outcomes, priority, acceptance criteria, project linkage, and human approval.
sift work — executable agent packets: claim leases, assigned aliases, write scope, verification commands, artifacts, and review state.
Link the two with sift work create --task <task-id> rather than assigning an executor directly to a task.
Commands
The most-used surface, grouped by domain. Run sift --help or sift <topic> --help for the complete set (including datasets, graph, timeline, research, and evidence).
Full command reference
Auth
sift auth login | Authenticate with Siftable |
sift auth logout | Clear stored credentials |
sift auth status | Show current auth status |
Tasks
sift tasks list | List human planning tasks (filterable by status, project) |
sift tasks get <id> | Get human planning task details |
sift tasks create | Create a human planning task |
sift tasks update <id> | Update a human planning task |
sift tasks complete <id> | Mark a human planning task complete |
sift tasks delete <id> | Delete a human planning task |
Work
sift work list | List executable agent work queue items |
sift work create | Create a bounded executable agent work item |
sift work claim | Claim queued executable work with a lease |
sift work start <id> | Mark claimed work as running |
sift work heartbeat <id> | Extend a claim lease |
sift work block <id> | Mark work blocked |
sift work review <id> | Mark work as needing review |
sift work complete <id> | Approve and complete work with summary/artifacts |
sift work fail <id> | Mark work failed |
sift work release <id> | Release a claim back to the queue |
sift work cancel <id> | Cancel work |
Agents
sift agents list | List user-visible agent aliases |
sift agents get <alias> | Get alias capabilities and permissions |
sift agents create | Create an agent alias |
sift agents update <alias> | Update alias metadata |
sift agents disable <alias> | Disable an alias without deleting history |
sift agents work <alias> | List executable work assigned to an alias |
Projects
sift projects list | List projects |
sift projects create | Create a project |
sift projects update <id> | Update a project |
sift projects archive <id> | Archive a project |
sift projects context <id> | Get full project context |
Notes
sift notes list | List notes |
sift notes get <id> | Get note with full content |
sift notes create | Create a note |
sift notes search <query> | Search knowledge base |
sift notes update <id> | Update a note |
sift notes delete <id> | Delete a note |
Calendar
sift calendar list | List events (filterable by date range) |
sift calendar create | Create an event |
sift calendar update <id> | Update an event |
sift calendar delete <id> | Delete an event |
People
sift people list | List contacts |
sift people search <query> | Search contacts |
Codebase
sift codebase list | List indexed repositories |
sift codebase register | Register a repo for indexing |
sift codebase status <id> | Check indexing status |
sift codebase index <id> | Trigger indexing |
sift codebase search <query> [--repo <id>|--project <id>] | Semantic code search scoped to the current registered repo by default |
sift codebase snapshot <id> | Get latest snapshot |
sift codebase delete <id> | Delete a repository |
Code tools
sift code history <repo> | Get commit history |
sift code who-knows <repo> <area> | Find experts for a code area |
sift code blame <file> | Git blame for a file |
sift code link <task> | Link a task to code |
sift code expertise <repo> | Refresh expertise index |
sift code memory store | Store a codebase fact |
sift code memory list | List stored facts |
sift code memory search <query> | Search stored facts |
sift code memory delete <id> | Delete a stored fact |
Vault
sift vault list | List vault entries (metadata only) |
sift vault create | Store an encrypted secret |
sift vault read <id> | Retired; use first-party web reveal until brokered use and approved materialization ship |
sift vault search <query> | Search vault entries |
sift vault update <id> | Update entry metadata |
Documents
sift documents upload <file> | Upload a document (PDF, MD, TXT) as a note |
Codex automation
sift codex daily-review collect --json | Collect read-only Siftable and local git context for daily Codex reviews |
Scripting
Every command supports --json for structured output, so the CLI composes with other tools:
sift tasks list --json | jq '.[] | select(.status == "in_progress")'
TASK_ID=$(sift tasks create --title "Deploy v2" --json | jq -r '.task.id')
sift work create --task "$TASK_ID" --agent codex --title "Implement Deploy v2" --verify "npm run build;npm test"
export SIFT_TOKEN=sift_pat_...
sift tasks complete "$TASK_ID"
Configuration
Global flags (each maps to an environment variable where noted):
--token | SIFT_TOKEN | Personal access token |
--api-url | SIFT_API_URL | API base URL (default: https://siftable.io) |
--json | — | Output raw JSON instead of tables |
--no-input | — | Disable interactive prompts |
Other environment variables:
SIFT_TOKEN | Personal access token for authentication |
SIFT_API_URL | API base URL (default: https://siftable.io) |
SIFT_WORKSPACE_ID | Workspace org ID to scope operations |
Legacy EXF_TOKEN, EXF_API_URL, EXF_WORKSPACE_ID, and exf_pat_ tokens remain supported while older automation configs migrate.
Docs
License
MIT — see LICENSE.