문서

MCP 서버 & API 레퍼런스

MCP 호환 에이전트를 Siftable에 연결하세요. 설정 블록 하나로 워크스페이스 전 도메인의 60개 이상 도구에 타입 안전한 접근을 제공해요.

퀵스타트

5분 안에 에이전트를 연결하세요.

1. Personal Access Token 받기

Siftable에 로그인하고, 설정 → API 토큰으로 이동해서 새 토큰을 만드세요. 토큰은 범위 지정 가능 — 어떤 도메인에 접근할지 선택해요.

2. MCP 클라이언트 설정하기

에이전트의 MCP 설정에 Siftable을 추가하세요. Claude Code, Cursor, Windsurf, 그리고 모든 MCP 호환 클라이언트에서 작동해요.

claude_code_config.json
{
  "mcpServers": {
    "siftable": {
      "url": "https://siftable.io/api/v1/mcp/sse",
      "headers": {
        "Authorization": "Bearer sift_pat_your_token_here"
      }
    }
  }
}

3. 연결 확인하기

에이전트에게 프로젝트나 작업을 목록으로 보여달라고 하세요. 데이터가 반환되면 연결된 거예요.

Example agent interaction
# Agent calls:
project_list()
task_list(status: "in_progress")
calendar_list_events(startDate: "2026-02-17", endDate: "2026-02-23")

# Agent now has your full operational context.

CLI Installation

The Siftable CLI gives you the full command surface — 168 commands across every domain — from your terminal. Same API, same data, same permissions, plus an interactive copilot. The binary installs as sift (with siftable and the exf compatibility alias).

1. Install

Terminal
npm install  -g @siftable/cli     # npm
bun  install -g @siftable/cli     # bun
pnpm add     -g @siftable/cli     # pnpm

# or run without installing
npx @siftable/cli <command>

2. Authenticate

The CLI uses device flow authentication — it opens your browser, you approve, and a token is stored locally.

Terminal
$ sift auth login

  Your verification code: ZFMV-SBGJ

  Opening browser...
  If the browser didn't open, visit: https://siftable.io/app/device?code=ZFMV-SBGJ

  Waiting for authorization...
  Logged in successfully!

3. Run your first command

Terminal
$ sift projects list

 NAME                STATUS    TASKS
 Siftable            active    12
 Marketing Site      active    4
 Mobile App          planning  0

$ sift projects context <id>

# Full project context: tasks, signals, notes, members.

Every CLI command supports --json for machine-readable output. Pipe it into jq, feed it to scripts, or let agents parse it directly.

인증

Siftable는 두 가지 인증 방법을 지원합니다. 대화형 CLI 세션에는 디바이스 흐름을 사용하고, MCP 클라이언트 및 CI/CD에는 개인 액세스 토큰을 사용하세요.

디바이스 흐름 (CLI)

exf auth login을 실행하세요. CLI가 브라우저를 열고, Google로 로그인하여 디바이스 코드를 승인합니다. PAT가 자동으로 생성되어 ~/.config/exf/에 저장됩니다. 복사하여 붙여넣을 토큰이 필요 없습니다.

개인 액세스 토큰 (MCP & API)

MCP 클라이언트 및 프로그래밍 방식 액세스의 경우, 설정 → API 토큰에서 토큰을 생성하세요. Authorization 헤더에 전달하세요:

HTTP Header
Authorization: Bearer sift_pat_your_token_here

토큰은 특정 도메인(작업 전용, 캘린더 전용, 전체 액세스 등)으로 범위가 지정됩니다. CI 파이프라인의 경우, EXF_PAT를 환경 변수로 설정하세요.

Auth Commands
$ sift auth login
$ sift auth status
$ sift auth logout

토큰 범위와 사용 가능한 쓰기 작업은 워크스페이스 구성 및 요금제에 따라 달라집니다. 계정의 현재 한도는 설정 → API 토큰 및 요금제에서 확인하세요.

MCP 연결

Siftable은 MCP에 Server-Sent Events (SSE) 트랜스포트를 사용해요. 엔드포인트:

MCP Endpoint
https://siftable.io/api/v1/mcp/sse

SSE 트랜스포트를 지원하는 모든 MCP 클라이언트와 호환: Claude Code, Claude Desktop, Cursor, Windsurf, Continue, 그리고 MCP SDK를 사용한 커스텀 구현.

작업

Task Domain 6 tools
MCP ToolCLIAccessDescription
task_list sift tasks list READ List tasks with filters: status (inbox, next_action, in_progress, waiting_for, completed, archived), phase, project, limit.
task_get sift tasks get READ Get a single task with full details: description, due date, priority, project, linked code.
task_create sift tasks create WRITE Create a task. Accepts title, description, priority (do_now, schedule, delegate, someday), project, due date.
task_update sift tasks update WRITE Update task fields: title, description, status, priority, due date, project assignment.
task_complete sift tasks complete WRITE Mark a task as completed.
task_delete sift tasks delete DELETE Permanently delete a task.
CLI Examples
$ sift tasks list --status in_progress

 TITLE                     STATUS        PRIORITY   DUE
 Ship CLI docs             in_progress   do_now     2026-02-27
 Fix device flow auth      in_progress   do_now     -

$ sift tasks create --title "Review PR #312" --priority do_now --json
{"id":"abc-123","title":"Review PR #312","status":"inbox","priority":"do_now"}

캘린더

Calendar Domain 4 tools
MCP ToolCLIAccessDescription
calendar_list_events sift calendar list READ List events in a date range. Returns title, start/end times, location, description. Supports limit.
calendar_create_event sift calendar create WRITE Create a calendar event. Requires title, startTime, endTime (ISO 8601). Optional: description, location.
calendar_update_event sift calendar update WRITE Update an existing event's title, times, description, or location.
calendar_delete_event sift calendar delete DELETE Remove an event from the calendar.
CLI Examples
$ sift calendar list --start 2026-02-24 --end 2026-02-28

 TITLE                  START              END                LOCATION
 Team standup           Feb 25 09:00       Feb 25 09:30       Zoom
 Product review         Feb 26 14:00       Feb 26 15:00       Conf Room B

$ sift calendar create --title "Ship CLI v0.3" \
    --start 2026-02-27T10:00:00Z --end 2026-02-27T10:30:00Z

프로젝트

Project Domain 5 tools
MCP ToolCLIAccessDescription
project_list sift projects list READ List projects. Filter by status (planning, active, on_hold, blocked, completed). Include archived.
project_get_context sift projects context READ Full project context: tasks, notes, members, signals. The richest single call for understanding a project.
project_create sift projects create WRITE Create a project with name, summary, status, and emoji.
project_update sift projects update WRITE Update project name, summary, status, or emoji.
project_archive sift projects archive WRITE Archive a completed or inactive project.

지식

Knowledge Domain 6 tools
MCP ToolCLIAccessDescription
note_search sift notes search READ Semantic + full-text search across notes. Filter by project.
note_list sift notes list READ List notes. Filter by type (note, concept, meeting, reference, daily, dataset) and project.
note_get sift notes get READ Get full note content by ID.
note_create sift notes create WRITE Create a note with title, markdown content, type, and optional project.
note_update sift notes update WRITE Update note title, content, or type.
note_delete sift notes delete DELETE Delete a note.

Datasets

Dataset Domain 19 commands

Structured datasets support grounded summaries, grouped analysis, ranking, bucketing, time-series work, import/export, schema changes, and record mutations from the same CLI and MCP-backed platform.

CapabilityCLIAccessDescription
Browse and inspect sift datasets list, get, query, summarize READ List datasets, inspect schema, query records, and get row-count and sample summaries.
Grounded analysis sift datasets analyze, aggregate, compare READ Generate natural-language insights, grouped metrics, and side-by-side segment comparisons.
Ranking and bucketing sift datasets rank, bucket READ Sort or score records, then bucket numeric or date fields into ranges with metrics per bucket.
Time series and plots sift datasets timeseries, plot READ Compute lag, pct-change, rolling windows, drawdown, or normalize plotting payloads from derived results.
Import and export sift datasets import, export WRITE Bring CSVs in, append to existing datasets, or export filtered results back to CSV.
Create and materialize sift datasets create, materialize WRITE Create datasets directly or turn a derived result into a new scratch dataset.
Schema and records sift datasets schema, add, update-record, delete-record WRITE Modify field definitions, add rows, update rows, and delete rows with explicit commands.
Derived workflows sift datasets join, compute READ Join dataset slices and compute derived fields before materializing or plotting the result.
CLI Examples
$ sift datasets list
$ sift datasets summarize <dataset-id>
$ sift datasets analyze <dataset-id> --focus-fields BMI,Outcome
$ sift datasets aggregate <dataset-id> --group-by Outcome \
    --metrics '[{"operation":"count","as":"rows"},{"operation":"avg","field":"BMI","as":"avg_bmi"}]'
$ sift datasets compare <dataset-id> --segment-field Outcome \
    --metrics '[{"operation":"avg","field":"Glucose","as":"avg_glucose"}]'
$ sift datasets rank <dataset-id> --sorts '[{"field":"BMI","direction":"desc"}]' --limit 10
$ sift datasets bucket <dataset-id> --field Age --bucket-count 5 \
    --metrics '[{"operation":"count","as":"rows"}]'

사람

People Domain 5 tools
MCP ToolCLIAccessDescription
people_search sift people search READ Search contacts by name. Returns relationship type, company, contact info, interaction history.
sift people list READ List all contacts. CLI-only convenience wrapper.
person_create sift people create WRITE Create a contact with name, relationship, company, and contact details.
person_update sift people update WRITE Update a contact's details, relationship, or company.
person_delete sift people delete DELETE Delete a contact.

코드베이스

Codebase Domain 12 tools

시맨틱 코드 검색을 위해 저장소를 인덱싱하세요. Siftable이 코드를 심볼과 임베딩으로 파싱해서 빠르게 검색할 수 있게 해요.

MCP ToolCLIAccessDescription
codebase_list sift codebase list READ List all indexed repositories.
codebase_register sift codebase register WRITE Register a repository for indexing. Set root path, name, include/exclude patterns.
codebase_status sift codebase status READ Check indexing status for a repository.
codebase_index sift codebase WRITE Full index: scan and upload all files matching patterns.
codebase_index_incremental sift codebase incremental WRITE Git-aware incremental index. Only processes changed files since last index.
codebase_search sift codebase search READ Semantic code search. Filter by repository, language, symbol type (function, class, interface, type, export, impl).
codebase_snapshot_status sift codebase snapshot READ Get the latest index snapshot for a repository, optionally filtered by branch or materialized for download.
codebase_delete sift codebase delete DELETE Delete a repository and all indexed code data.
code_who_knows sift code who-knows READ Find developers with expertise in a code area. Based on git history and contribution patterns.
code_compute_expertise sift code expertise WRITE Refresh the expertise index for a repository.
code_history sift code history READ Get commit history. Filter by file path.
git_blame_symbol sift code blame READ Git blame for a file or line range. Shows who last modified each line.
Related Code CLI
$ sift code history <repo-id> --path src/auth/service.ts
$ sift code blame src/auth/service.ts --root .
$ sift code expertise <repo-id>
$ sift code who-knows <repo-id> src/auth
$ sift code link <task-id> --repo <repo-id> --file src/auth/service.ts

코드 메모리

Code Memory Domain 4 tools

코드베이스에 대한 사실을 저장하고 검색하세요. 아키텍처 결정, 컨벤션, 주의사항, 소유권 — 세션을 넘어 유지되는 영구적 지식.

MCP ToolCLIAccessDescription
code_memory_store sift code memory store WRITE Store a fact. Categories: architecture, integration, convention, entrypoint, gotcha, ownership. Optional: file path, repository.
code_memory_search sift code memory search READ Semantic search over stored code facts. Filter by category or repository.
code_memory_list sift code memory list READ List all stored code memories. Filter by repository.
code_memory_delete sift code memory delete DELETE Delete a stored code memory by ID.

문서

Document Domain 1 command
MCP ToolCLIAccessDescription
upload_document sift documents upload WRITE Upload a PDF, Markdown, or text file into Knowledge. Set by file path or inline content. Auto-detects type.

Vault

Vault Domain 5 tools

Encrypted secret storage. Store API keys, credentials, OAuth tokens, SSH keys, and sensitive notes. Values are encrypted at rest and audit-logged on read.

MCP ToolCLIAccessDescription
vault_create sift vault create WRITE Store a new encrypted secret. Types: env_var, credential, oauth_token, ssh_key, certificate, note.
vault_list sift vault list READ List vault entries (metadata only — never decrypted values). Filter by type or category.
vault_search sift vault search READ Search vault entries by name, slug, or description. Returns metadata only.
vault_read sift vault read READ Decrypt and read a vault secret. Audit-logged. Only available to trusted clients.
vault_update sift vault update WRITE Update vault entry metadata: name, tags, category, description.
CLI Examples
$ sift vault create --name "Stripe API Key" --json
# Interactive prompt for sensitive payload values

$ sift vault list

 NAME                TYPE         CATEGORY     CREATED
 Stripe API Key      env_var      payments     2026-02-25
 GitHub PAT          credential   devtools     2026-02-20

$ sift vault read <id>
# Decrypts and displays. Audit-logged.

Workflows

Cross-domain recipes that combine multiple tools. These patterns work identically via MCP or CLI.

Link Code to Tasks

Connect implementation work to the task that motivated it. Agents and teammates can trace why code changed.

MCP
task_create(title: "Implement device flow auth", priority: "do_now")
# ... implement the feature ...
task_link_code(taskId: "abc-123", repositoryId: "repo-456",
  commitSha: "5cf5f22", filePath: "src/services/deviceAuthService.ts",
  notes: "Fixed verification_uri to use /app/device")
task_complete(taskId: "abc-123")
CLI
$ sift tasks create --title "Implement device flow auth" --priority do_now
$ sift code link abc-123 --repo repo-456 \
    --commit 5cf5f22 --file src/services/deviceAuthService.ts
$ sift tasks complete abc-123

Project Onboarding

New to a project? Pull the full context in three commands.

CLI
# 1. Get the big picture
$ sift projects context <id>

# 2. See what's in flight
$ sift tasks list --project <id> --status in_progress

# 3. Check code conventions
$ sift code memory search "architecture and conventions"

End-of-Day Review

Summarize what happened today. Works great as an agent prompt or a manual check.

MCP (agent prompt)
# Agent calls:
calendar_list_events(startDate: "2026-02-26", endDate: "2026-02-26")
task_list(status: "completed", limit: 20)
task_list(status: "in_progress")

# Agent now has: today's meetings, completed tasks, and remaining work.
# It can draft a standup summary, update project status, or flag blockers.
CLI
$ sift calendar list --start 2026-02-26 --end 2026-02-26
$ sift tasks list --status completed --limit 20 --json | jq '.[] | .title'
$ sift tasks list --status in_progress

Store a Debug Discovery

Found a gotcha? Store it so your future self (or your agent) doesn't rediscover it the hard way.

CLI
$ sift code memory store \
    --fact "Device flow verification_uri must use /app/device (SPA path), not /device (marketing homepage)" \
    --category gotcha \
    --file src/services/deviceAuthService.ts

크레딧 & 결제

모든 워크스페이스는 채팅, 분석 및 도구 지원 작업에 크레딧 기반 청구를 사용합니다. 읽기 작업은 일반적으로 무거운 추론이나 다단계 분석보다 저렴합니다.

모든 신규 사용자에게는 가입 시 200 크레딧이 제공되며, 이 200 크레딧은 매월 갱신됩니다. 무료 요금제에는 빠른 속도의 모델과 핵심 컨텍스트 관리 도구 시스템이 포함됩니다.

모델별 크레딧 비용 및 요금제 세부 정보는 가격을(를) 참조하세요.

멱등성

쓰기 작업(task_create, note_create, calendar_create_event 등)은 선택적 idempotencyKey 파라미터를 받아요. 같은 키로 요청을 재시도하면 Siftable이 중복 생성 대신 원래 결과를 반환해요.

Idempotent task creation
task_create(
  title: "Review PR #247",
  priority: "do_now",
  idempotencyKey: "agent-run-42-task-pr247"
)

# Safe to retry. Same key = same result.

권한

토큰은 도메인별로 범위가 지정돼요. 캘린더 전용 토큰은 작업이나 사람을 읽을 수 없어요. 에이전트에 필요한 최소 접근 권한으로 토큰 범위를 지정하세요.

사용 가능한 범위:

  • tasks:read / tasks:write — Task listing, CRUD, and completion
  • calendar:read / calendar:write — Event listing and creation
  • projects:read / projects:write — Project management and context
  • knowledge:read / knowledge:write — Notes, search, document upload
  • people:read / people:write — Contact search and CRM updates
  • work:read / work:write — Agent work queue items
  • org:read — Workspace org metadata
  • mcp:* — All MCP operations (recommended for IDE and agent use)

사용 가능한 쓰기 작업은 토큰 범위와 현재 워크스페이스 요금제에 따라 달라집니다. 프로덕션 환경에서 쓰기 작업을 수행하기 전에 발급한 토큰과 현재 요금제 페이지를 확인하세요.

CLI Command Reference

Every command in the Siftable CLI, grouped by topic. This reference is generated from the CLI's own command definitions, so it stays true to the installed version. Run sift <topic> --help for live help on any topic.

Every command also accepts the global flags: --json (raw JSON output), --token / SIFT_TOKEN, --api-url / SIFT_API_URL (default https://siftable.io), --workspace / SIFT_WORKSPACE_ID, and --no-input (disable prompts). Destructive commands require --confirm or -y.

General

Top-level commands and diagnostics.

6 commands
sift capabilities

Show Siftable CLI capabilities and readiness status

sift codebase

Index a codebase (scan and upload files)

Arguments
id — Repository ID
Flags
--exclude <value> — Comma-separated exclude glob patterns
--include <value> — Comma-separated include glob patterns
--incremental — Git-aware incremental index (changed files only)
--path <value> — Absolute path to repository root
sift commands

Show agent-friendly command topics and workflow entry points

sift doctor

Diagnose local Siftable CLI configuration without printing secrets

sift interactive

Launch the Siftable terminal copilot (sift interactive) — an in-process AI assistant over your tasks, work, calendar, projects, and people.

sift mermaid

Render a Mermaid diagram to the terminal (flowchart, sequence, state, class, ER, C4, architecture, mindmap). Reads a .mmd file or stdin.

Arguments
file — Path to a .mmd file (omit to read stdin)
Flags
--ascii — Use ASCII glyphs instead of Unicode box drawing
--color <none|truecolor> default: "truecolor" — Color mode
--height <value> — Fit into an exact N-row pane (pads/clips)
--max-height <value> — Bound the diagram to N rows (no padding)
--max-width <value> — Bound the diagram to N columns (no padding)
--overflow <allow|clip|error> default: "clip" — What to do when the diagram exceeds the bounds
--unicode — Use Unicode box drawing (default)
--width <value> — Fit into an exact N-column pane (pads/clips)

Agents

Agent aliases.

6 commands
sift agents create

Create an agent alias

Flags
--alias <value> required — Stable alias slug, e.g. codex
--capabilities <value> — Capabilities JSON object
--hidden — Hide from normal user-visible lists
--name <value> — Display name
--operator <value> — Linked daemon/operator ID
--permissions <value> — Default permissions JSON object
--type <value> default: "custom" — Agent type
sift agents disable

Disable an agent alias

Arguments
alias required — Agent alias or ID
sift agents get

Get an agent alias

Arguments
alias required — Agent alias or ID
sift agents list

List agent aliases

Flags
--include-disabled — Include disabled aliases
sift agents update

Update an agent alias

Arguments
alias required — Agent alias or ID
Flags
--capabilities <value> — Capabilities JSON object
--hidden — Hide from normal user-visible lists
--name <value> — Display name
--operator <value> — Linked daemon/operator ID
--permissions <value> — Default permissions JSON object
--status <active|disabled> — Alias status
--type <value> — Agent type
--visible — Show in normal user-visible lists
sift agents work

List work assigned to an agent alias

Arguments
alias required — Agent alias or ID
Flags
--limit <value> — Maximum results
--status <value> — Work item status

Auth

Authentication commands.

3 commands
sift auth login

Authenticate with Siftable

sift auth logout

Remove stored authentication

sift auth status

Show authentication status

Calendar

Calendar events.

4 commands
sift calendar create

Create a calendar event

Flags
--description <value> — Event description
--end <value> required — End time (ISO 8601)
--location <value> — Event location
--start <value> required — Start time (ISO 8601)
--title <value> required — Event title
sift calendar delete

Delete a calendar event

Arguments
id required — Event ID
Flags
-y, --yes — Skip confirmation
sift calendar list

List calendar events

Flags
--end <value> — End date (ISO 8601)
--limit <value> — Maximum number of results
--start <value> — Start date (ISO 8601)
sift calendar update

Update a calendar event

Arguments
id required — Event ID
Flags
--description <value> — Event description
--end <value> — End time (ISO 8601)
--location <value> — Event location
--start <value> — Start time (ISO 8601)
--title <value> — Event title

Code

Code tools.

9 commands
sift code blame

Git blame for a file

Arguments
file required — Relative file path
Flags
--root <value> default: "." — Repository root path
sift code expertise

Refresh developer expertise index for a repository

Arguments
repo required — Repository ID
sift code history

Get commit history for a repository

Arguments
repo required — Repository ID
Flags
--limit <value> — Maximum number of results
--path <value> — Filter by file path
sift code link

Link a task to code (file, commit, or repository)

Arguments
task-id required — Task ID
Flags
--commit <value> — Commit SHA
--file <value> — File path
--notes <value> — Notes about the link
--repo <value> required — Repository ID
sift code memory delete

Delete a stored codebase fact

Arguments
id required — Memory ID
Flags
-y, --yes — Skip confirmation
sift code memory list

List stored codebase facts

Flags
--limit <value> — Maximum number of results
--repo <value> — Repository ID
sift code memory search

Search stored codebase facts

Arguments
query required — Search query
Flags
--category <architecture|integration|convention|entrypoint|gotcha|ownership> — Filter by category
--limit <value> — Maximum number of results
--repo <value> — Repository ID
sift code memory store

Store a codebase fact

Flags
--category <architecture|integration|convention|entrypoint|gotcha|ownership> required — Fact category
--fact <value> required — Fact to store (1-2 sentences)
--file <value> — Related file path
--repo <value> — Repository ID
sift code who-knows

Find experts for a code area

Arguments
repo required — Repository ID
area required — Path, glob, or symbol
Flags
--limit <value> — Maximum number of results

Codebase

Code indexing and search.

7 commands
sift codebase delete

Delete a repository and all indexed data

Arguments
id required — Repository ID
Flags
-y, --yes — Skip confirmation
sift codebase incremental

Incrementally index a codebase using git-aware changed files

Arguments
id required — Repository ID
Flags
--exclude <value> — Comma-separated exclude glob patterns
--include <value> — Comma-separated include glob patterns
--path <value> required — Absolute path to repository root
sift codebase list

List indexed repositories

sift codebase register

Register a codebase for indexing

Flags
--auto-index — Enable automatic indexing
--name <value> required — Repository name
--path <value> required — Absolute path to repository root
--project <value> — Project ID to associate
sift codebase search

Semantic code search

Arguments
query required — Search query
Flags
--language <value> — Filter by language
--limit <value> — Maximum number of results
--project <value> — Project ID
--repo <value> — Repository ID
--symbol-type <function|class|interface|type|export|impl> — Filter by symbol type
sift codebase snapshot

Get latest index snapshot for a repository

Arguments
id required — Repository ID
Flags
--branch <value> — Filter by branch
--materialize — Generate a download URL for the snapshot
sift codebase status

Check indexing status for a repository

Arguments
id required — Repository ID

Codex

Codex automation helpers.

1 command
sift codex daily-review collect

Collect read-only Siftable and local git context for Codex daily work reviews

Flags
--calendar-days <value> default: 7 — Calendar lookahead days
--limit <value> default: 20 — Maximum records per source
--skip-git — Skip local git summary

Datasets

Structured datasets.

41 commands
sift datasets add

Add records to a dataset

Arguments
id required — Dataset ID
Flags
--record <value> repeatable — Record as JSON object, e.g. '{"name":"Alice","age":"30"}'
--records <value> — Multiple records as JSON array
sift datasets aggregate

Aggregate dataset records with grouped metrics (count, avg, sum, min, max, median, stddev, percentile, ratio)

Arguments
id required — Dataset ID
Flags
--filters <value> — JSON array of filters
--group-by <value> — Comma-separated field names to group by
--having <value> — JSON array of having clauses [{metric, operator, value}]
--limit <value> default: 100 — Max rows
--metrics <value> — JSON array of metrics [{operation, field, as}]
--sorts <value> — JSON array of sorts
sift datasets analyze

Generate grounded natural-language insights for a dataset

Arguments
id required — Dataset ID
Flags
--filters <value> — JSON array of filters
--focus-fields <value> — Comma-separated field names to focus analysis on
--max-insights <value> default: 5 — Max insights to generate
--mode <descriptive|operational> — Analysis mode
--signal-limit <value> — Max decision signals to return
sift datasets apply-diff

Apply a saved dataset diff plan

Arguments
plan required — Path to a local diff plan or persisted diff plan ID
Flags
--yes — Confirm applying the saved diff plan without prompting
sift datasets archive

Archive a dataset without dropping its physical table

Arguments
id required — Dataset ID
Flags
-y, --yes — Confirm dataset archival without prompting
sift datasets bucket

Bucket a numeric or date field into ranges with aggregate metrics per bucket

Arguments
id required — Dataset ID
Flags
--boundaries <value> — Comma-separated boundary values (omit for auto-bucketing)
--bucket-count <value> — Number of auto-buckets (default: 5)
--field <value> required — Field to bucket
--filters <value> — JSON array of filters
--metrics <value> — JSON array of metrics
sift datasets cleanup

Plan or apply cleanup for lifecycle-tagged scratch datasets

Flags
--dry-run — Return a deterministic cleanup plan without deleting datasets
--lifecycle <value> — Lifecycle kind to clean, e.g. scratch, benchmark, research-run
--limit <value> default: 100 — Maximum lifecycle datasets to inspect
--now <value> — Deterministic timestamp for tests and scheduled cleanup
--older-than <value> — Only include datasets older than this duration, e.g. 12h, 7d
--orphaned — Include stale dataset notes that no longer have a backing dataset row
--tag <value> — Lifecycle tag to clean, e.g. benchmark
-y, --yes — Confirm deletion when applying cleanup with --no-dry-run
sift datasets compare

Compare metrics across segments of a categorical field side-by-side

Arguments
id required — Dataset ID
Flags
--filters <value> — JSON array of filters
--limit <value> default: 10 — Max segment values to compare
--metrics <value> — JSON array of metrics
--segment-field <value> required — Categorical field to segment by
--segment-values <value> — Comma-separated segment values (auto-discovers if omitted)
sift datasets compute

Compute derived fields from a dataset or prior derived result

Arguments
id — Dataset ID
Flags
--computed-fields <value> required — JSON array of computed fields, e.g. '[{"as":"spread","expression":"right.Close-left.Close"}]'
--filters <value> — JSON array of filters
--limit <value> default: 50 — Maximum rows
--order-by <value> — JSON array of order clauses
--select <value> — Comma-separated fields to include
--sorts <value> — JSON array of output sorts
--source-result <value> — Inline JSON for a prior derived result
--source-result-file <value> — Path to a JSON file containing a prior derived result
sift datasets contract

Show an agent-readable dataset schema and capabilities contract

Arguments
id required — Dataset ID
Flags
--resolve <value> — Comma-separated semantic field references to resolve
--template <value> — Validate contract against a built-in template
sift datasets create

Create a dataset

Flags
--description <value> — Dataset description
--fields <value> — Field definitions as JSON array, e.g. '[{"name":"age","type":"number"}]'
--lifecycle <value> — Lifecycle kind for generated datasets, e.g. scratch, benchmark, research-run
--metadata <value> — Dataset metadata as JSON object
--note-id <value> — Link to an existing note
--run-id <value> — Lifecycle run identifier
--scratch — Shortcut for --lifecycle scratch --tags scratch
--tags <value> — Comma-separated lifecycle tags
--title <value> required — Dataset title
--ttl <value> — Lifecycle TTL duration, e.g. 12h, 7d, 30d
sift datasets dedupe

Find duplicate dataset records by key without mutating data

Arguments
id required — Dataset ID
Flags
--key <value> required — Field name used to group duplicates
--limit <value> default: 500 — Maximum records to scan in one bounded pass
sift datasets delete

Permanently delete a dataset and drop its physical table

Arguments
id required — Dataset ID
Flags
-y, --yes — Confirm dataset deletion without prompting
sift datasets delete-record

Delete a record from a dataset

Arguments
id required — Dataset ID
record-id required — Record ID
Flags
-y, --yes — Skip confirmation
sift datasets diff

Preview dataset row changes from a CSV, JSON, or JSONL file

Arguments
id required — Dataset ID
Flags
--batch-size <value> default: 100 — Records per backend batch
--from-file <value> required — Path to CSV, JSON, or JSONL rows to compare
--persist — Persist the diff plan in Siftable for later review/apply
--save-plan <value> — Write an applyable diff plan JSON file
--template <sources|people|events|claims|evidence_sources|evidence_source_fragments|evidence_claims|evidence_people|evidence_organizations|evidence_places|evidence_artifacts|evidence_events|evidence_relationships|evidence_contradictions> — Built-in template name
--upsert-by <value> — Field name used to match existing rows
sift datasets diff-plans list

List persisted dataset diff plans

Flags
--dataset-id <value> — Filter by dataset ID
--limit <value> default: 50 — Maximum plans to return
--status <draft|validated|applied|rejected|expired> — Filter by plan status
sift datasets diff-plans show

Show a persisted dataset diff plan

Arguments
id required — Diff plan ID
sift datasets export

Export bounded dataset records as CSV, JSON, JSONL, or Markdown

Arguments
id required — Dataset ID
Flags
--filters <value> — JSON array of filters
--format <csv|json|jsonl|markdown> default: "csv" — Export format
--limit <value> default: 500 — Max rows to export
-o, --output <value> — Output file path (writes to stdout if omitted)
--sorts <value> — JSON array of sorts
sift datasets facets

Show bounded facet summaries for dataset fields

Arguments
id required — Dataset ID
Flags
--fields <value> — Comma-separated field names to facet
--limit <value> default: 20 — Maximum values per facet
sift datasets formula-plan

Compute formula fields and preview reviewable dataset updates

Arguments
id required — Dataset ID
Flags
--computed-fields <value> required — JSON array of computed fields, e.g. '[{"as":"score","expression":"confidence * reliability"}]'
--filters <value> — JSON array of filters for compute source
--limit <value> default: 100 — Maximum rows to compute and plan
--order-by <value> — JSON array of order clauses
--save-plan <value> — Write an applyable diff plan JSON file
--select <value> — Comma-separated fields to include in compute source
--sorts <value> — JSON array of output sorts
--target-fields <value> — Comma-separated computed field names to write; defaults to every computed field alias
--template <sources|people|events|claims> — Built-in template name for validation
--upsert-by <value> required — Field used to match rows for update
sift datasets get

Get dataset details and schema

Arguments
id required — Dataset ID
sift datasets impact

Explain dataset formula, graph, view, quality, and materialization impact

Arguments
id required — Dataset ID
Flags
--from-plan <value> — Persisted diff plan ID to inspect
--operation <value> — Committed dataset operation ID to inspect
sift datasets import

Import CSV, JSON, or JSONL rows into a new or existing dataset

Arguments
file required — Path to CSV, JSON, or JSONL file
Flags
--batch-size <value> default: 100 — Records per backend batch
--dataset-id <value> — Import into existing dataset instead of creating a new one
--description <value> — Dataset description
--dry-run — Validate and plan the import without writing
--lifecycle <value> — Lifecycle kind for generated datasets, e.g. scratch, benchmark, research-run
--metadata <value> — Dataset metadata as JSON object when creating a new dataset
--run-id <value> — Lifecycle run identifier
--scratch — Shortcut for --lifecycle scratch --tags scratch
--tags <value> — Comma-separated lifecycle tags
--template <sources|people|events|claims|evidence_sources|evidence_source_fragments|evidence_claims|evidence_people|evidence_organizations|evidence_places|evidence_artifacts|evidence_events|evidence_relationships|evidence_contradictions> — Built-in template name
--title <value> — Dataset title (defaults to filename)
--ttl <value> — Lifecycle TTL duration, e.g. 12h, 7d, 30d
--upsert-by <value> — Field name used to update matching rows instead of creating duplicates
--yes — Confirm mutating imports without prompting
sift datasets join

Join a dataset to itself using alias-scoped fields such as left.Close and right.Close

Arguments
id required — Dataset ID
Flags
--join-keys <value> required — JSON array of join keys, e.g. '[{"leftField":"Date","rightField":"Date"}]'
--join-type <inner|left|right> default: "inner" — Join type
--left-alias <value> default: "left" — Left alias
--left-filters <value> — JSON array of left-side filters
--limit <value> default: 50 — Maximum joined rows
--right-alias <value> default: "right" — Right alias
--right-filters <value> — JSON array of right-side filters
--select <value> — Comma-separated alias-scoped fields to return
--sorts <value> — JSON array of sorts
sift datasets list

List datasets

Flags
--limit <value> default: 50 — Maximum number of results
sift datasets lookup

Lookup dataset records by an exact key/value match

Arguments
id required — Dataset ID
Flags
--key <value> required — Field name to match
--limit <value> default: 25 — Maximum matching records
--value <value> required — Exact value to match
sift datasets materialize

Materialize a derived result into a new scratch dataset

Flags
--description <value> — Dataset description
--source-result <value> — Inline JSON for a derived result
--source-result-file <value> — Path to a JSON file containing a derived result
--title <value> required — Title of the new dataset
sift datasets pivot

Create a pivot-style summary from grouped dataset metrics

Arguments
id required — Dataset ID
Flags
--cols <value> required — Column field
--filters <value> — JSON array of filters
--limit <value> default: 500 — Maximum grouped cells to request
--metrics <value> — JSON metrics array; defaults to count
--rows <value> required — Row field
sift datasets plot

Validate and normalize a lightweight plot payload from a derived result

Flags
--chart-type <line|bar|scatter> required — Chart type
--series-field <value> — Optional series field
--source-result <value> — Inline JSON for a derived result
--source-result-file <value> — Path to a JSON file containing a derived result
--x-field <value> required — X-axis field
--y-fields <value> required — Comma-separated Y-axis fields
sift datasets profile

Show bounded profile information for a dataset

Arguments
id required — Dataset ID
Flags
--sample-limit <value> default: 10 — Number of sample rows to include
sift datasets query

Query records from a dataset

Arguments
id required — Dataset ID
Flags
--cursor <value> — Pagination cursor from previous query
--filters <value> — Filter conditions as JSON array, e.g. '[{"field":"status","value":"active"}]'
--include-deleted — Include soft-deleted records
--limit <value> default: 25 — Maximum number of records
--sorts <value> — Sort spec as JSON array, e.g. '[{"field":"name","direction":"asc"}]'
sift datasets rank

Rank dataset records by sorts or a weighted numeric formula

Arguments
id required — Dataset ID
Flags
--filters <value> — JSON array of filters
--formula <value> — JSON formula object {weights: [{field, weight}]}
--limit <value> default: 25 — Max rows
--sorts <value> — JSON array of sorts
sift datasets reconcile

Compare two datasets by key without mutating either dataset

Arguments
left required — Left dataset ID
right required — Right dataset ID
Flags
--left-key <value> required — Left dataset key field
--limit <value> default: 500 — Maximum rows to scan from each dataset
--right-key <value> — Right dataset key field; defaults to --left-key
sift datasets schema

Modify dataset schema (add, update, or delete fields)

Arguments
id required — Dataset ID
Flags
--field <value> — Field definition as JSON, e.g. '{"name":"email","type":"text"}'
--field-id <value> — Field ID (required for update/delete)
--operation <add_field|update_field|delete_field> required — Schema operation
sift datasets search

Search dataset records across selected text-like fields

Arguments
id required — Dataset ID
query required — Search text
Flags
--fields <value> — Comma-separated fields to search; defaults to profile columns
--filters <value> — JSON array of base filters applied to every field search
--limit <value> default: 25 — Maximum merged records
--per-field-limit <value> default: 25 — Maximum records to request per searched field
sift datasets summarize

Get a summary of a dataset (row count, fields, sample rows)

Arguments
id required — Dataset ID
sift datasets templates list

List built-in dataset templates

sift datasets templates show

Show a built-in dataset template schema

Arguments
template required — Template name
sift datasets timeseries

Analyze dataset time series with lag, pct_change, rolling windows, drawdown, volatility, and correlation

Arguments
id required — Dataset ID
Flags
--date-field <value> required — Date field name
--filters <value> — JSON array of filters
--limit <value> default: 100 — Maximum output rows
--metrics <value> — JSON array of metric definitions
--order-direction <asc|desc> default: "asc" — Time ordering
--pivot — Emit explicit pivoted output
--segment-field <value> — Optional segment field
--segment-values <value> — Comma-separated segment values
--transforms <value> — JSON array of transform definitions
sift datasets update-record

Update a record in a dataset

Arguments
id required — Dataset ID
record-id required — Record ID
Flags
--fields <value> required — Field updates as JSON object, e.g. '{"status":"done"}'
sift datasets validate

Validate a dataset against a built-in template

Arguments
id required — Dataset ID
Flags
--template <sources|people|events|claims|evidence_sources|evidence_source_fragments|evidence_claims|evidence_people|evidence_organizations|evidence_places|evidence_artifacts|evidence_events|evidence_relationships|evidence_contradictions> required — Built-in template name

Documents

Document upload.

1 command
sift documents upload

Upload a document (PDF, Markdown, or text) as a note

Arguments
file required — Path to file
Flags
--project <value> — Project ID
--title <value> — Note title (defaults to filename)
--type <note|concept|meeting|reference|daily|dataset> — Note type

Events

Research events backed by timeline facts.

3 commands
sift events attach-person

Attach a person participant to an existing research event

Arguments
event required — Existing temporal fact ID
person required — Person UUID to attach
Flags
--role <value> default: "subject" — Participant role
--yes — Confirm participant attachment without prompting
sift events create

Create a research event timeline fact with participants

Flags
--body <value> — Event notes/body
--confidence <low|medium|high> — Confidence level
--entity <value> repeatable — Participant/entity as type:uuid or type:uuid:role; repeatable
--org <value> repeatable — Organization UUID participant; repeatable
--person <value> repeatable — Person UUID participant; repeatable
--precision <millisecond|minute|hour|day|month|year|decade|century|millennium|mega_year|era> default: "year" — Temporal precision
--source <value> repeatable — Source entity as type:uuid or type:uuid:role; repeatable
--source-label <value> — Source/provenance label
--source-note <value> — Source/provenance note
--source-url <value> — Source/provenance URL
--timestamp <value> — ISO timestamp
--title <value> required — Event title
--visibility <org_public|private|restricted> — Timeline visibility
--year <value> — Historical year CE
--year-end <value> — Historical end year CE
sift events list

List research event timeline facts

Flags
--cursor <value> — Pagination cursor
--end <value> — End boundary
--entity <value> — Filter by entity ref type:uuid
--limit <value> default: 50 — Maximum events
--order <asc|desc> default: "asc" — Sort order
--person <value> — Filter by person UUID
--q <value> — Text search query
--start <value> — Start boundary

Evidence

Evidence Graph setup and proof workflow orchestration.

11 commands
sift evidence diff apply

Apply a reviewed Evidence Graph diff plan

Arguments
id required — Persisted diff plan ID
Flags
--yes — Confirm applying the reviewed diff plan without prompting
sift evidence diff impact

Explain Evidence Graph consequences for a persisted diff plan

Arguments
id required — Persisted diff plan ID, or local when using --from-file
Flags
--from-file <value> — Local diff plan JSON file to explain without API access
sift evidence diff list

List persisted Evidence Graph diff plans

Flags
--dataset-id <value> — Filter by evidence dataset ID
--limit <value> default: 50 — Maximum plans to return
--project <value> — Filter locally by Evidence Graph project ID when present on plans
--status <draft|validated|applied|rejected|expired> — Filter by plan status
sift evidence diff show

Show an Evidence Graph diff plan with domain-aware summary

Arguments
id required — Persisted diff plan ID
sift evidence extract

Create no-apply agent work for Evidence Graph candidate extraction

Flags
--agent <value> default: "researcher" — Assigned agent alias
--context <value> — Additional input context JSON object
--context-file <value> — Additional input context JSON file
--dry-run — Preview work item payload without writing
--no-apply — Keep extraction in proposed/diff-first mode
--pack <company-origin|family-history|investigation|compliance-evidence|account-history|codebase-history> default: "company-origin" — Evidence workflow pack
--project <value> — Project ID
--source-dataset <value> required — Evidence sources dataset ID
--targets <value> — Comma-separated extraction targets
--yes — Confirm work item creation without prompting
sift evidence init

Create an Evidence Graph project and dataset-backed working tables

Arguments
name required — Evidence Graph project name
Flags
--dry-run — Preview project/dataset creation without writing
--pack <company-origin|family-history|investigation|compliance-evidence|account-history|codebase-history> default: "company-origin" — Evidence workflow pack
--yes — Confirm creation without prompting
sift evidence plan

Plan an Evidence Graph workflow before writing trusted state

Arguments
goal required — Evidence Graph goal
Flags
--pack <company-origin|family-history|investigation|compliance-evidence|account-history|codebase-history> default: "company-origin" — Evidence workflow pack
--project <value> — Existing project ID
--source-dataset <value> — Existing evidence sources dataset ID
sift evidence project

Dry-run Evidence Graph timeline and relationship projection

Flags
--dry-run — Preview projection without writing
--from-file <value> — Local diff plan JSON file to project from without API access
--from-plan <value> — Persisted diff plan ID to project from
--pack <company-origin|family-history|investigation|compliance-evidence|account-history|codebase-history> default: "company-origin" — Evidence workflow pack
--project <value> — Evidence Graph project ID
sift evidence proof report

Generate an Evidence Graph proof report from a dataset-backed evidence packet

Flags
--format <json|markdown> default: "markdown" — Report format
--from-file <value> required — Evidence packet JSON file to report on
--project <value> — Evidence Graph project ID for report metadata
sift evidence sources import

Import Evidence Graph source ledger rows into a dataset-backed source table

Arguments
file required — Path to CSV, JSON, or JSONL source ledger rows
Flags
--batch-size <value> default: 100 — Records per backend batch
--dataset-id <value> — Evidence sources dataset ID
--dry-run — Validate and plan source import without writing
--upsert-by <value> default: "source_id" — Field name used to update matching source rows
--yes — Confirm mutating imports without prompting
sift evidence verify

Verify Evidence Graph provenance, review, projection, and citation invariants

Flags
--from-file <value> required — Evidence packet JSON file to verify
--project <value> — Evidence Graph project ID for report metadata

Graph

Entity graph search and neighborhoods.

5 commands
sift graph between

Explain a bounded graph path between two entities

Arguments
source required — Source entity reference as type:uuid
target required — Target entity reference as type:uuid
Flags
--depth <value> default: 4 — Maximum path depth, backend clamps to 1-5
--frontier-limit <value> default: 500 — Maximum links to inspect per path expansion, backend clamps to 1-1000
sift graph explain

Explain a bounded graph path between two entities

Arguments
source required — Source entity reference as type:uuid
target required — Target entity reference as type:uuid
Flags
--depth <value> default: 4 — Maximum path depth, backend clamps to 1-5
--frontier-limit <value> default: 500 — Maximum links to inspect per path expansion, backend clamps to 1-1000
sift graph neighbors

Show local graph neighbors for an entity

Arguments
entity required — Entity reference as type:uuid
Flags
--depth <value> default: 1 — Graph depth, backend clamps to 1-3
--limit <value> default: 80 — Maximum graph items, backend clamps to 1-200
sift graph preview

Preview one graph entity

Arguments
entity required — Entity reference as type:uuid
sift graph search

Search linkable entities for graph work

Arguments
query required — Search query
Flags
--limit <value> default: 20 — Maximum results
--types <value> — Comma-separated entity types

Notes

Knowledge notes.

7 commands
sift notes bulk-delete

Preview or bulk-delete notes

Flags
--archived — Filter by archived state
--confirm — Execute deletion instead of preview
--ids <value> — Comma-separated note IDs
--title-contains <value> — Title substring filter
--title-equals <value> — Exact title filter
--title-starts-with <value> — Title prefix filter
--type <note|concept|meeting|reference|daily|dataset>
sift notes create

Create a note

Flags
--content <value> — Note content (markdown)
--metadata <value> — Note metadata as JSON
--metadata-file <value> — Read note metadata JSON from a file
--project <value> — Project ID
--title <value> required — Note title
--type <note|concept|meeting|reference|daily|dataset> — Note type
sift notes delete

Delete a note

Arguments
id required — Note ID
Flags
-y, --yes — Skip confirmation
sift notes get

Get a note with full content

Arguments
id required — Note ID
sift notes list

List notes

Flags
--archived — Filter by archived state
--limit <value> — Maximum number of results
--project <value> — Filter by project ID
--title-contains <value> — Title substring filter
--title-equals <value> — Exact title filter
--title-starts-with <value> — Title prefix filter
--type <note|concept|meeting|reference|daily|dataset> — Filter by note type
sift notes search

Search notes

Arguments
query required — Search query
Flags
--limit <value> — Maximum number of results
--project <value> — Filter by project ID
sift notes update

Update a note

Arguments
id required — Note ID
Flags
--content <value> — Note content (markdown)
--metadata <value> — Replace note metadata with this JSON object
--metadata-file <value> — Read replacement note metadata JSON from a file
--title <value> — Note title
--type <note|concept|meeting|reference|daily|dataset> — Note type

Organizations

Organizations and companies.

5 commands
sift organizations bulk-delete

Preview or bulk-delete organizations

Flags
--confirm — Execute deletion instead of preview
--contains <value> — Name substring filter
--equals <value> — Exact name filter
--ids <value> — Comma-separated organization IDs
--relationship <value> — Filter by relationship status
--starts-with <value> — Name prefix filter
--type <value> — Filter by organization type
sift organizations create

Create an organization

Flags
--domain <value> — Domain (e.g. acme.com)
--industry <value> — Industry
--linkedin-url <value> — LinkedIn page URL
--location <value> — Location
--name <value> required — Organization name
--notes <value> — Notes
--relationship-status <value> — Relationship status (e.g. prospect, customer, partner, vendor)
--type <value> — Organization type (e.g. company, nonprofit, government, school)
--website <value> — Website URL
sift organizations delete

Delete an organization

Arguments
id required — Organization ID
Flags
-y, --yes — Skip confirmation
sift organizations search

Search organizations

Arguments
query — Optional fuzzy search query
Flags
--contains <value> — Name substring filter
--equals <value> — Exact name filter
--limit <value> — Maximum number of results
--relationship <value> — Filter by relationship status
--starts-with <value> — Name prefix filter
--type <value> — Filter by organization type
sift organizations update

Update an organization

Arguments
id required — Organization ID
Flags
--domain <value> — Domain (e.g. acme.com)
--industry <value> — Industry
--linkedin-url <value> — LinkedIn page URL
--location <value> — Location
--name <value> — Organization name
--notes <value> — Notes
--relationship-status <value> — Relationship status
--type <value> — Organization type
--website <value> — Website URL

People

People and contacts.

11 commands
sift people bulk-delete

Preview or bulk-delete contacts

Flags
--confirm — Execute deletion instead of preview
--contains <value> — Name substring filter
--equals <value> — Exact name filter
--has-no-email — Only contacts without an email
--ids <value> — Comma-separated person IDs
--relationship <value> — Filter by relationshipToUser
--starts-with <value> — Name prefix filter
sift people create

Create a contact

Flags
--birth-year <value> — Birth year
--birthday <value> — Birthday (YYYY-MM-DD)
--company <value> — Company name (auto-links to organization if exists)
--email <value> — Email address
--estimated-age <value> — Estimated age
--job-title <value> — Job title
--linkedin-url <value> — LinkedIn profile URL
--location <value> — Location
--mbti <value> — MBTI type (e.g. INTJ, ENFP)
--name <value> required — Full name
--notes <value> — Notes about this person
--phone <value> — Phone number
--relationship <value> — Relationship to user (e.g. friend, colleague, client, mentor)
--website <value> — Personal website
sift people delete

Delete a contact

Arguments
id required — Person ID
Flags
-y, --yes — Skip confirmation
sift people get

Get a person profile with traits and relationships

Arguments
id required — Person ID
sift people graph

Show a person-centered relationship graph

Arguments
id required — Person ID
Flags
--depth <value> default: 2 — Relationship graph depth
--include-inactive — Include inactive relationship edges
sift people kinship

Explain kinship or relationship distance between two people

Arguments
egoPersonId required — Ego/source person ID
targetPersonId required — Target person ID
Flags
--max-depth <value> default: 6 — Maximum relationship depth
sift people list

List contacts

Flags
--contains <value> — Name substring filter
--equals <value> — Exact name filter
--has-no-email — Only contacts without an email
--limit <value> — Maximum number of results
--relationship <value> — Filter by relationshipToUser
--starts-with <value> — Name prefix filter
sift people relate

Create or update a relationship between two people

Arguments
personAId required — First person ID
personBId required — Second person ID
Flags
--dry-run — Preview the relationship payload without writing
--notes <value> — Relationship notes
--type <value> required — Relationship type, e.g. colleague, sibling, spouse, collaborator
-y, --yes — Apply without prompting
sift people search

Search contacts

Arguments
query required — Search query
Flags
--contains <value> — Name substring filter
--equals <value> — Exact name filter
--has-no-email — Only contacts without an email
--limit <value> — Maximum number of results
--relationship <value> — Filter by relationshipToUser
--starts-with <value> — Name prefix filter
sift people timeline

List timeline facts connected to a person

Arguments
id required — Person ID
Flags
--limit <value> default: 50 — Maximum facts to return
--order <asc|desc> default: "asc" — Sort order
--role <value> — Filter by entity role, comma-separated
sift people update

Update a contact

Arguments
id required — Person ID
Flags
--birth-year <value> — Birth year
--birthday <value> — Birthday (YYYY-MM-DD)
--company <value> — Company name
--email <value> — Email address
--estimated-age <value> — Estimated age
--job-title <value> — Job title
--linkedin-url <value> — LinkedIn profile URL
--location <value> — Location
--mbti <value> — MBTI type (e.g. INTJ, ENFP)
--name <value> — Full name
--notes <value> — Notes about this person
--phone <value> — Phone number
--relationship <value> — Relationship to user
--website <value> — Personal website

Projects

Project management.

7 commands
sift projects archive

Archive a project

Arguments
id required — Project ID
Flags
-y, --yes — Skip confirmation
sift projects context

Get project context (tasks, notes, signals)

Arguments
id required — Project ID
sift projects create

Create a project

Flags
--emoji <value> — Single emoji
--name <value> required — Project name
--status <planning|active|on_hold|blocked|completed> — Project status
--summary <value> — Project summary
sift projects list

List projects

Flags
--include-archived — Include archived projects
--status <planning|active|on_hold|blocked|completed> — Filter by status
sift projects planning

Get the canonical CSN planning snapshot for a project

Arguments
id required — Project ID
sift projects planning-recompute

Recompute the canonical CSN planning snapshot for a project

Arguments
id required — Project ID
sift projects update

Update a project

Arguments
id required — Project ID
Flags
--emoji <value> — Single emoji
--name <value> — Project name
--status <planning|active|on_hold|blocked|completed> — Project status
--summary <value> — Project summary

Recipes

Built-in research workflow recipes.

2 commands
sift recipes list

List built-in research workflow recipes

sift recipes show

Show a built-in research workflow recipe

Arguments
id required — Recipe ID

Research

Research workflow planning and orchestration.

4 commands
sift research init

Create a research project and standard datasets

Arguments
name required — Research project name
Flags
--dry-run — Preview project/dataset creation without writing
--template <historical-research> default: "historical-research" — Research template
--yes — Confirm creation without prompting
sift research plan

Plan a deterministic research workflow before writing data

Arguments
goal required — Research goal
Flags
--project <value> — Existing project ID
--source-dataset <value> — Existing sources dataset ID
sift research run

Create deterministic agent work for a research recipe

Arguments
recipe required — Research run recipe
Flags
--agent <value> default: "researcher" — Assigned agent alias
--context <value> — Additional input context JSON object
--context-file <value> — Additional input context JSON file
--dry-run — Preview work item payload without writing
--project <value> — Project ID
--source-dataset <value> — Source dataset ID
--yes — Confirm work item creation without prompting
sift research status

Inspect research project context and CLI readiness

Arguments
project — Project ID

Skills

Installable Siftable skillpacks.

2 commands
sift skills install

Install a Siftable skillpack into a local skills directory

Arguments
id required — Skillpack ID
Flags
--force — Replace an existing installed skill
--target <value> default: "skills" — Installed skills directory
-y, --yes — Confirm replacing an existing skill
sift skills list

List installable Siftable skillpacks

Tasks

Human planning tasks.

11 commands
sift tasks bulk-delete

Preview or bulk-delete tasks

Flags
--confirm — Execute deletion instead of preview
--done — Filter by completed state
--ids <value> — Comma-separated task IDs
--phase <draft|open|in_flight|review|blocked|done|cancelled>
--title-contains <value> — Title substring filter
--title-equals <value> — Exact title filter
--title-starts-with <value> — Title prefix filter
--when <now|today|soon|later>
sift tasks complete

Mark a task as complete

Arguments
id required — Task ID
sift tasks coupling-create

Create a CSN coupling edge between tasks in the same project

Arguments
id required — Source task ID
target required — Target task ID
Flags
--note <value> — Optional note
--strength <value> — Coupling strength (0-1)
--type <info|resource> required — Coupling type
sift tasks coupling-delete

Delete a CSN coupling edge from a task

Arguments
id required — Task ID
edgeId required — Coupling edge ID
Flags
-y, --yes — Skip confirmation
sift tasks coupling-list

List CSN coupling edges for a task

Arguments
id required — Task ID
sift tasks create

Create a human planning task

Flags
--acceptance-criteria <value> — Acceptance criteria (semicolon-separated text, e.g. "tests pass; docs updated")
--description <value> — Task description
--due <value> — Due date (ISO 8601)
--effort <trivial|small|medium|large|epic|unknown> — Effort estimate
--phase <draft|open|in_flight|review|blocked|done|cancelled> — Lifecycle phase
--priority <do_now|schedule|delegate|someday> — Priority level
--project <value> — Project ID
--scope <value> — Scope boundaries (JSON object with include/exclude arrays)
--title <value> required — Task title
sift tasks delete

Delete a task

Arguments
id required — Task ID
Flags
-y, --yes — Skip confirmation
sift tasks get

Get human planning task details

Arguments
id required — Task ID
sift tasks list

List human planning tasks

Flags
--effort <trivial|small|medium|large|epic|unknown> — Filter by effort
--limit <value> — Maximum number of results
--phase <draft|open|in_flight|review|blocked|done|cancelled> — Filter by phase
--project <value> — Filter by project ID
--status <inbox|next_action|in_progress|waiting_for|completed|archived> — Filter by status
--title-contains <value> — Title substring filter
--title-equals <value> — Exact title filter
--title-starts-with <value> — Title prefix filter
sift tasks planning-update

Update CSN planning fields for a task

Arguments
id required — Task ID
Flags
--cynefin-confidence <value> — Cynefin confidence (0-1)
--cynefin-domain <clear|complicated|complex|chaotic|aporetic> — Cynefin domain
--cynefin-rationale <value> — Why this domain fits
--cynefin-source <user|assistant|classifier> — Source of the planning classification
--duration-model <value> — Duration model JSON, e.g. {"kind":"point","days":2}
--reversibility <value> — Reversibility score (0-1)
sift tasks update

Update a human planning task

Arguments
id required — Task ID
Flags
--acceptance-criteria <value> — Acceptance criteria (semicolon-separated text, e.g. "tests pass; docs updated")
--blocked-reason <value> — Reason task is blocked
--description <value> — Task description
--due <value> — Due date (ISO 8601)
--effort <trivial|small|medium|large|epic|unknown> — Effort estimate
--phase <draft|open|in_flight|review|blocked|done|cancelled> — Lifecycle phase
--priority <do_now|schedule|delegate|someday> — Priority level
--project <value> — Project ID
--scope <value> — Scope boundaries (JSON object with include/exclude arrays)
--status <inbox|next_action|in_progress|waiting_for|completed|archived> — Task status
--title <value> — Task title

Timeline

Timeline facts and narratives.

4 commands
sift timeline create

Create a user-authored timeline fact

Flags
--body <value> — Fact body or notes
--confidence <low|medium|high> — Confidence level
--entity <value> repeatable — Participant/entity as type:uuid or type:uuid:role; repeatable
--fact-type <value> default: "event" — Fact type
--precision <millisecond|minute|hour|day|month|year|decade|century|millennium|mega_year|era> default: "year" — Temporal precision
--source-label <value> — Source/provenance label
--source-note <value> — Source/provenance note
--source-url <value> — Source/provenance URL
--timestamp <value> — ISO timestamp
--title <value> required — Fact title
--visibility <org_public|private|restricted> — Timeline visibility
--year <value> — Historical year CE
--year-end <value> — Historical end year CE
sift timeline delete

Retract a timeline fact

Arguments
id required — Timeline fact ID
Flags
--yes — Confirm retraction without prompting
sift timeline list

List timeline facts with bounded filters

Flags
--cursor <value> — Pagination cursor
--end <value> — End boundary, ISO timestamp or supported historical boundary
--entity <value> — Entity filter as type:uuid
--entity-role <value> — Comma-separated entity roles
--fact-types <value> — Comma-separated fact types
--limit <value> default: 50 — Maximum items to return
--order <asc|desc> default: "asc" — Sort order
--q <value> — Text search query
--source-types <value> — Comma-separated source types
--start <value> — Start boundary, ISO timestamp or supported historical boundary
sift timeline narrative

Generate a narrative summary or explanation for timeline facts

Flags
--action <summarize|changed_since|led_to|what_next|cross_object> default: "summarize" — Narrative action
--entity <value> — Entity scope as type:uuid
--entity-roles <value> — Comma-separated entity roles
--fact-type <value> — Fact type filter
--limit <value> default: 60 — Maximum timeline facts to include
--participant <value> — Participant filter as type:uuid
--prompt <value> — Question or custom narrative prompt
--q <value> — Text query filter
--related-entity <value> — Related entity as type:uuid
--source-type <value> — Source type filter

Vault

Secrets vault.

5 commands
sift vault create

Store a new encrypted secret

Flags
--category <value> — Category
--description <value> — Description
--name <value> required — Secret name
--payload <value> required — JSON payload to encrypt
--slug <value> — Machine-friendly identifier
--tags <value> — Comma-separated tags
--type <env_var|credential|oauth_token|ssh_key|certificate|note> — Entry type
--url <value> — Associated URL
sift vault list

List vault entries (metadata only)

Flags
--category <value> — Filter by category
--limit <value> — Maximum number of results
--type <env_var|credential|oauth_token|ssh_key|certificate|note> — Filter by entry type
sift vault read

Decrypt and read a vault secret (audit-logged)

Arguments
id required — Vault entry ID
sift vault search

Search vault entries

Arguments
query required — Search query
Flags
--limit <value> — Maximum number of results
sift vault update

Update vault entry metadata

Arguments
id required — Vault entry ID
Flags
--category <value> — Category
--description <value> — Description
--name <value> — Entry name
--tags <value> — Comma-separated tags
--url <value> — Associated URL

Work

Executable agent work queue.

12 commands
sift work block

Mark a work item as blocked

Arguments
id required — Work item ID
Flags
--artifacts <value> — Artifact refs JSON array
--claim-token <value> — Claim token returned by work claim
--lease <value> — Lease seconds
--owner <value> — Claim owner identity
--reason <value> — Block or failure reason
--summary <value> — Result summary
sift work cancel

Cancel a work item

Arguments
id required — Work item ID
Flags
--artifacts <value> — Artifact refs JSON array
--claim-token <value> — Claim token returned by work claim
--lease <value> — Lease seconds
--owner <value> — Claim owner identity
--reason <value> — Block or failure reason
--summary <value> — Result summary
sift work claim

Claim the next available executable agent work item

Arguments
id — Optional specific work item ID
Flags
--agent <value> — Agent alias to claim for
--lease <value> default: 1800 — Lease seconds
--owner <value> required — Claim owner identity
sift work complete

Approve and complete an executable agent work item

Arguments
id required — Work item ID
Flags
--artifacts <value> — Artifact refs JSON array
--claim-token <value> — Claim token returned by work claim
--lease <value> — Lease seconds
--owner <value> — Claim owner identity
--reason <value> — Block or failure reason
--summary <value> — Result summary
sift work create

Create an executable agent work item

Flags
--acceptance-criteria <value> — Acceptance criteria JSON array or semicolon-separated text
--agent <value> — Assigned agent alias
--allowed-actions <value> — Allowed actions JSON object
--context <value> — Input context JSON object
--project <value> — Linked project ID
--prompt <value> — Agent prompt or instructions
--rank <value> default: 0 — Queue rank
--task <value> — Parent human planning task ID
--title <value> required — Executable work item title
--verify <value> — Verification commands separated by semicolons
--write-scope <value> — Write scope JSON object
sift work fail

Mark a work item as failed

Arguments
id required — Work item ID
Flags
--artifacts <value> — Artifact refs JSON array
--claim-token <value> — Claim token returned by work claim
--lease <value> — Lease seconds
--owner <value> — Claim owner identity
--reason <value> — Block or failure reason
--summary <value> — Result summary
sift work get

Get executable agent work item details

Arguments
id required — Work item ID
sift work heartbeat

Extend a work item lease

Arguments
id required — Work item ID
Flags
--artifacts <value> — Artifact refs JSON array
--claim-token <value> — Claim token returned by work claim
--lease <value> — Lease seconds
--owner <value> — Claim owner identity
--reason <value> — Block or failure reason
--summary <value> — Result summary
sift work list

List executable agent work items

Flags
--agent <value> — Filter by assigned agent alias
--limit <value> — Maximum results
--project <value> — Filter by project ID
--status <value> — Filter by status
--task <value> — Filter by parent human planning task ID
sift work release

Release a claimed work item back to the queue

Arguments
id required — Work item ID
Flags
--artifacts <value> — Artifact refs JSON array
--claim-token <value> — Claim token returned by work claim
--lease <value> — Lease seconds
--owner <value> — Claim owner identity
--reason <value> — Block or failure reason
--summary <value> — Result summary
sift work review

Mark executable agent work as needing human review

Arguments
id required — Work item ID
Flags
--artifacts <value> — Artifact refs JSON array
--claim-token <value> — Claim token returned by work claim
--lease <value> — Lease seconds
--owner <value> — Claim owner identity
--reason <value> — Block or failure reason
--summary <value> — Result summary
sift work start

Mark a work item as running

Arguments
id required — Work item ID
Flags
--artifacts <value> — Artifact refs JSON array
--claim-token <value> — Claim token returned by work claim
--lease <value> — Lease seconds
--owner <value> — Claim owner identity
--reason <value> — Block or failure reason
--summary <value> — Result summary

Worker

Local executable work runners.

1 command
sift worker run

Claim executable work, run a local worker command, and report needs-review artifacts

Flags
--agent <value> required — Agent alias to claim work for
--command <value> required — Local command to run for the claimed work item
--cwd <value> — Fallback working directory for the local command
--lease <value> default: 1800 — Lease seconds
--owner <value> required — Worker owner fingerprint

Interactive Copilot

The sift interactive command launches a terminal copilot that chats, runs tools, edits code, spawns parallel agent branches, plans work, and renders diagrams — all in the terminal, acting on your filesystem and the Siftable work graph.

Terminal
$ sift interactive

Requirements & startup

  • Bun is required. sift interactive re-execs Bun; if it isn't installed it prints curl -fsSL https://bun.sh/install | bash.
  • Authentication is required — from --token, SIFT_TOKEN, or sift auth login.
  • The brain runs in-process — there is no separate daemon to start.
  • Writes are scoped to the workspace root — the nearest ancestor of your launch directory containing .git. This is the boundary /status reports and the native write path enforces.

The interface

The composer is a full readline-capable text area. Enter submits; Shift+Enter / Ctrl+J insert a newline; submitting while the agent is busy queues your message. !command runs a shell command into the transcript (a bare !cd <path> changes the session directory). Large or structured pastes become a collapsed chip; pasted images are validated and attached.

Slash commands

Type / to open the command menu. Hidden commands remain typeable but don't appear in the menu.

CommandGroupDescription
/help, /hotkeys, /statusSessionCommand list, keyboard shortcuts, and current model/scope/queue status
/cwd [path]SessionShow or change the working directory (recomputes the workspace root)
/copy [last|all|explorer]SessionCopy the latest reply, whole transcript, or latest explorer report to the clipboard
/clear, /quitSessionReset the transcript; exit
/threads [clear], /compactSessionManage the persisted thread; force a context compaction (requires context compaction enabled)
/model [id] [effort]ModelOpen the model picker or select a model and reasoning effort directly
/codex [login|on|off|status]ModelControl the Codex (ChatGPT) engine
/key <provider> <key>, /key vault <provider>ModelStore a provider API key, or hydrate it from Siftable Vault
/loginModelSiftable device-code login from inside the TUI
/explorerModelConfigure the repo Explorer (context-gathering backend)
/branchesBranchesOpen the parallel-agent branches hub
/spawn <title> [--rw <globs>|--rw-any|--ro]BranchesStart a child agent branch in its own git worktree with an access mode
/merge, /rebase, /sendback, /rejectBranchesLand, replay, resume, or reject a child branch
/workWorkOpen the work-queue hub (board of agents and items by status)
/plan [objective | work [--apply] [--after SRC:DST] [--limit N] | view]WorkPlan from an objective, or compute a precedence DAG over the agent work queue as a Mermaid graph
/handoff <title> [--agent ..] [--files ..] [--acceptance ..] [--verify ..]WorkCreate a Siftable work item from the current context
/proof <claim>, /remember <fact> --category <..>WorkGather code/test evidence; store durable code memory
/crew [list|show|new|run], /collabCrewsManage and run multi-agent crews; show in-process collaboration sessions
/mermaid [request|file.mmd|source], /viewDiagramsRender Mermaid (NL request, file, or source) in the terminal; open the pannable viewer
/skills [name]SkillsList discovered skills, or print one skill's body
/theme, /sounds [on|off]AppearanceOpen the appearance picker; toggle UI sounds

Models & engines

The model picker (/model) chooses a model, then a reasoning effort. The catalog includes GPT-5.5 Codex (via your ChatGPT plan), Claude Opus 4.8 (via OpenRouter or direct to the Anthropic API with ANTHROPIC_API_KEY), Claude Sonnet/Haiku, Gemini Flash, and GPT-5.4 mini/nano. The Codex engine drives the OpenAI codex app-server sidecar (it manages ChatGPT sign-in; /codex login runs a device flow). All other providers route through the bundled OpenFunction agent, reading <PROVIDER>_API_KEY from the environment. /key vault <provider> hydrates a key from Siftable Vault behind an approval prompt; the secret is never printed or written to disk.

Skills

SKILL.md skills are discovered (project > user > builtin) from <root>/{.sift,.claude,.codex,.agents}/skills, ~/.claude|.codex|.agents/skills, ~/.config/sift/skills, and the skills bundled with the package. The agent can invoke a skill via a tool, and up to ~50 are advertised in its system prompt.

Keyboard shortcuts

Overlays capture the keyboard first, so bindings are mode-specific.

  • Enter submit (queues if busy) · Shift+Enter/Ctrl+J newline · Tab complete a lone /foo · ↑/↓ prompt history
  • Esc abort turn → clear draft → deselect · Ctrl+C abort → clear → deselect → quit (never copies) · Ctrl+D quit on empty draft
  • Cmd/Super+A select all · Cmd+C/Ctrl+Shift+C copy selection or latest reply · Ctrl+O Explorer diagnostics · ? hotkeys
  • Approval gate: y/Enter allow once · a always · b bypass-all · n/Esc deny

Native acceleration

Performance-critical paths (context compaction, long-thread memory, filesystem scanning, merge orchestration, image handling) run through native Zig modules loaded via Bun FFI, each with a lockstep TypeScript fallback. The package ships prebuilt libraries for macOS (Apple Silicon) and Linux (x64); other platforms use the fallback. Set SIFT_NO_NATIVE=1 to force the fallbacks, and SIFT_CONTEXT_COMPACTION=1 to enable the live context-token meter plus thread persistence and resume.

Appearance & sound

/theme offers 10 schemes (default "sieve" — warm amber on charcoal), saved to ~/.siftable/appearance.json. /sounds toggles UI sound effects (off by default), saved to ~/.siftable/sounds.json and overridable with SIFT_SOUNDS.

The copilot is read-only by default; write/edit tools are scoped to the workspace root and gated by a four-way approval prompt (allow once / always / bypass-all / deny). With nothing listening, requests deny. EXECUTERM_AUTO_APPROVE is always scrubbed at launch.

Full reference, including every slash command, key binding, environment variable, and config file: docs/interactive.md on GitHub.

에이전트에게 워크스페이스를 주세요.

API 키 받기 왜 Siftable인가요? →