| title | CLI Reference |
|---|
Complete reference for all uteke commands. Version 0.6.0.
| Flag | Description | Default |
|---|---|---|
--store <path> |
Override store location | ~/.uteke |
--namespace <name> |
Namespace for multi-agent isolation | default |
--json |
Output as JSON | off |
--verbose |
Enable debug logging | off |
Config file path is auto-resolved (~/.uteke/uteke.toml + .uteke/uteke.toml); there is no --config flag.
Store a new memory with optional tags, metadata, and contradiction detection.
# Basic
uteke remember "Deploy v2.1 to staging Friday" --tags deploy,staging
# With metadata enrichment
uteke remember "Deploy staging to AWS us-east-1" \
--tags deploy,aws \
--entity staging-server \
--category infrastructure \
--meta "source:meeting-note,confidence:0.9"
# With contradiction detection
uteke remember "Server runs on port 8080" --tags config --detect-contradiction
# With memory type
uteke remember "API rate limit is 1000/min" --type fact
# With source attribution (#348)
uteke remember "Deploy at 3pm Friday" --tags deploy --source "https://slack.com/msg/123" --source-type url
# In a specific namespace
uteke remember "User prefers dark mode" --tags pref --namespace my-agent| Flag | Description |
|---|---|
--tags <tags> |
Comma-separated tags |
--entity <name> |
Associate memory with an entity (e.g. "staging-server") |
--category <cat> |
Categorize the memory (e.g. "infrastructure") |
--meta <pairs> |
Key:value pairs, comma-separated. Auto-detects type (string/number/bool) |
--type <type> |
Memory type: fact, procedure, preference, decision, context, note, insight, reference, event |
--source <url-or-path> |
Source attribution (URL, file path, or description) |
--source-type <type> |
Source type: user, url, file, import, derived, system (default: user) |
--detect-contradiction |
Detect conflicting memories (default threshold: 0.65) |
--room <room_id> |
Link memory to a room (collaborative context) |
--author <name> |
Author attribution when storing in a room |
--json |
Output stored memory as JSON |
Hybrid search combining vector similarity with FTS5 full-text search, ranked by Reciprocal Rank Fusion (RRF). Hot memories (accessed within 7 days) get a score boost.
uteke recall "What framework does the API use?"
uteke recall "deployment" --limit 10
uteke recall "database config" --namespace hermes --json
uteke recall "server" --entity staging-server --json
uteke recall "config" --category infrastructure --limit 5| Flag | Description |
|---|---|
--limit <n> |
Max results (default: 5) |
--entity <name> |
Filter results to a specific entity |
--category <cat> |
Filter results to a specific category |
--content-format <fmt> |
Content display: auto (detect), text, json (pretty-print JSON memories) |
--where <key=value> |
Filter by JSON field on structured memories (e.g. --where role=CTO) |
--json |
Output as JSON array |
Keyword text search with tag filtering.
uteke search "monorepo"
uteke search "deploy" --tags staging,prod --limit 20
uteke search "api" --namespace backend --json| Flag | Description |
|---|---|
--tags <tags> |
Filter by comma-separated tags |
--limit <n> |
Max results (default: 10) |
--json |
Output as JSON |
List memories with optional tag, entity, category filter and pagination.
uteke list --limit 20
uteke list --tag deploy --offset 10 --json
uteke list --entity staging-server --json
uteke list --category infrastructure --limit 10
uteke list --namespace hermes| Flag | Description |
|---|---|
--tag <tag> |
Filter by single tag |
--entity <name> |
Filter by entity name |
--category <cat> |
Filter by category |
--limit <n> |
Max results (default: 20) |
--offset <n> |
Skip first N results |
--json |
Output as JSON |
Delete memories by ID, tag, tier, or all. Supports bulk operations.
# Delete single memory
uteke forget <uuid> --confirm
# Delete all with a tag
uteke forget --tag deploy --confirm
# Delete all cold-tier memories (>30 days old)
uteke forget --cold --confirm
# Delete everything in namespace
uteke forget --all --confirm
# Preview without deleting
uteke forget --tag stale --dry-run| Flag | Description |
|---|---|
--tag <tag> |
Delete all memories with this tag |
--cold |
Delete all cold-tier memories (>30 days) |
--all |
Delete all memories in namespace |
--confirm |
Skip confirmation prompt |
--dry-run |
Preview what would be deleted |
Find and merge duplicate memories using cosine similarity.
# Preview duplicates (dry run)
uteke consolidate --threshold 0.60 --dry-run
# Merge duplicates
uteke consolidate --threshold 0.60
# Higher threshold = more conservative (default: 0.90)
uteke consolidate --dry-runRecommended threshold: 0.60β0.70 for small embedding models (embeddinggemma-q4). Keeps newer memory, removes older.
Remove deprecated and expired temporal memories.
# Preview what would be pruned
uteke prune --ttl 30 --dry-run
# Prune deprecated/expired memories
uteke prune --ttl 30Manage namespaces β list, inspect, and switch defaults.
# List all namespaces with counts
uteke namespace list
# Show stats for a namespace
uteke namespace stats my-agent
# Switch default namespace (saved to config)
uteke namespace switch my-agentNamespace resolution order: --namespace flag β UTEKE_NAMESPACE env β uteke.toml β "default"
Manage tags across all memories.
# List all tags with counts
uteke tags list --by-count
# Rename a tag
uteke tags rename old-tag new-tag
# Delete a tag from all memories
uteke tags delete unused-tagSemantic search with new flags:
# Minimum similarity score filter
uteke recall "database config" --min 0.7
uteke recall "database config" --strict # uses min_score_strict (default 0.5)
# Time-travel: query memories at specific point in time
uteke recall "deployment process" --at 2026-06-01T12:00:00Z
# Relationship graph traversal
uteke recall "auth" --related --depth 2
# Recall strategy (vector | fts5 | hybrid | graph)
uteke recall "auth" --strategy vector # default β vector similarity only
uteke recall "auth" --strategy fts5 # full-text search only
uteke recall "auth" --strategy hybrid # vector + FTS5 (RRF fusion)
uteke recall "auth" --strategy graph # hybrid + graph-signal reranking (#378)The graph strategy runs the hybrid (RRF) pipeline, then fuses graph
signals from the memory_edges table into each result's score. A memory
that is well-connected in the graph (referenced by many others, high edge
density) drifts upward; isolated memories are untouched.
The boost is additive and log-scaled, so it saturates quickly and never
lets a single hub dominate. Configure the weights under [recall] in
uteke.toml (see Configuration):
# Subtle boost (default): well-connected memories nudge up slightly
uteke recall "architecture" --strategy graph
# Stronger authority boost via env var
UTEKE_GRAPH_AUTHORITY_WEIGHT=0.3 uteke recall "architecture" --strategy graphCold start (no edges yet): graph behaves identically to hybrid β the
boost is zero when there are no signals.
uteke recall "api design" --context
| Flag | Description |
|------|-------------|
| `--min <score>` | Minimum similarity score (0.0-1.0) |
| `--strict` | Use strict threshold (`min_score_strict`, default 0.5) |
| `--at <timestamp>` | Query memories at point in time (RFC3339) |
| `--related` | Follow relationship edges |
| `--depth <n>` | Traversal depth for --related |
| `--context` | AI-prompt formatted output |
| `--salience` | Enable salience boost (higher score for decision/insight types) |
| `--recency` | Enable recency boost (higher score for recently created memories) |
## uteke list (enhanced)
```bash
# Time-travel list
uteke list --at 2026-06-01T12:00:00Z
Room-based memory management:
# Create a room
uteke room create "project-kickoff" --title "Project Kickoff"
# List rooms (cross-namespace by default, #392)
uteke room list
uteke room list --namespace my-agent # scoped
# Add memory to room
uteke room add "project-kickoff" <memory-id> --author cto
# Recall within a room (semantic)
uteke room recall "project-kickoff" --query "database decision"
# Generate structured document from room
uteke room document "project-kickoff"
# Room summary (LLM-free, tag clustering)
uteke room summary "project-kickoff"
# Remove memory from room
uteke room remove "project-kickoff" <memory-id>
# Delete room
uteke room delete "project-kickoff"Run performance benchmarks with synthetic data:
# Default: 100, 1000, 10000 memories
uteke bench
# Custom counts
uteke bench --counts 500,5000
# JSON output
uteke bench --jsonMeasures insert throughput, recall latency (avg + p95), and storage footprint.
Pin memories so they never decay:
uteke pin <id>
uteke unpin <id>Recalculate importance scores:
uteke importanceMemory aging management with auto-cleanup.
# Show hot/warm/cold breakdown
uteke aging status
# Preview memories older than 90 days
uteke aging preview --older-than-days 90
# Delete memories older than 180 days
uteke aging cleanup --older-than-days 180 --yes| Subcommand | Flags | Description |
|---|---|---|
status |
β | Show hot/warm/cold/never-accessed counts |
preview |
--older-than-days N (default 180), --max-access-count N (default 1) |
Dry-run preview of cleanup candidates |
cleanup |
--older-than-days N (default 180), --max-access-count N (default 1), --yes |
Delete aged memories (--yes skips confirmation) |
Import memories from a file (or stdin with -). Format is auto-detected from
the extension and content; override with --format.
# Import JSONL exported by `uteke export`
uteke import memories.jsonl
# Import markdown/plain text (split into chunks)
uteke import notes.md --tags imported,notesRaw source material (chat transcripts, long notes, exported dumps) is noisy:
greetings, filler, boilerplate. Importing it verbatim pollutes recall. With
--extract, uteke first sends the text to an OpenAI-compatible chat-completions
endpoint, asks the model to distill it into atomic facts, and stores one memory
per fact.
This is opt-in. Without --extract, import makes no network calls and stays
fully offline.
# Distill a transcript into atomic facts before storing
uteke import session.txt --extract \
--extract-model gpt-4o-mini \
--extract-base-url https://api.openai.com/v1 \
--extract-api-key sk-...
# Use a local Ollama model
uteke import notes.md --extract \
--extract-model llama3.1 \
--extract-base-url http://localhost:11434/v1Settings resolve in this order: CLI flag > UTEKE_EXTRACTION_* env var >
[extraction] config section > built-in default. The API key falls back to the
embedding / OPENAI_API_KEY credential, so an existing OpenAI-compatible setup
needs no duplicate key.
| Flag | Description |
|---|---|
--extract |
Enable LLM extraction (off by default) |
--extract-model <M> |
Override the chat model |
--extract-base-url <U> |
Override the endpoint base URL |
--extract-api-key <K> |
Override the API key |
--extract-max-facts <N> |
Cap facts kept per document (0 = default) |
See configuration for the [extraction] config block and
UTEKE_EXTRACTION_* environment variables.
Import all files from a directory in one command. Each file is processed according to its type:
| Extension | Strategy | Description |
|---|---|---|
.md / .markdown |
Document (default) | Full content β auto-chunk β embed. No LLM. |
.md + --extract |
Memory extract | LLM fact extraction β atomic facts β embed. |
.txt / .jsonl |
Memory extract | LLM fact extraction (requires --extract). |
.txt / .jsonl + --as-doc |
Document override | Import as document, skip LLM. |
# Dry run β preview what would be imported
uteke import --batch-dir ./knowledge --dry-run
# Import all markdown as documents (no LLM, fully offline)
uteke import --batch-dir ./docs --recursive --tags docs
# Import with LLM fact extraction
uteke import --batch-dir ./notes --extract \
--extract-model gpt-4o-mini \
--extract-base-url https://api.openai.com/v1 \
--tags imported
# Force all files as documents (skip extraction)
uteke import --batch-dir ./raw --as-doc --recursive
# Limit file size (default: 1MB)
uteke import --batch-dir ./large-docs --max-size 500000| Flag | Description |
|---|---|
--batch-dir <PATH> |
Directory to import (enables batch mode) |
--recursive |
Recurse into subdirectories |
--as-doc |
Force all files as documents (skip LLM extraction) |
--as-memory |
Force all files through LLM extraction |
--max-size <BYTES> |
Skip files larger than N bytes (default: 1,000,000) |
--dry-run |
Preview files and strategies without importing |
Knowledge graph operations (v0.2.0). Nodes and edges stored in SQLite (graph_nodes, graph_edges tables, schema v7).
# List all nodes (optionally filter by entity type)
uteke graph nodes
uteke graph nodes --entity-type person
# List all edges (optionally filter by relation)
uteke graph edges --relation owns
# Find neighbors of a node via BFS
uteke graph neighbors alice --depth 2
# Shortest path between two nodes
uteke graph path alice "project-x" --max-depth 5
# Query edges by relation type
uteke graph query part_of
# Show graph statistics
uteke graph stats| Subcommand | Flags | Description |
|---|---|---|
nodes |
--entity-type <t> |
List graph nodes |
edges |
--relation <r> |
List graph edges |
neighbors <label> |
--depth N (default 1) |
BFS neighbors of a node |
path <source> <target> |
--max-depth N (default 5) |
BFS shortest path |
query <relation> |
β | Query edges by relation type |
stats |
β | Show graph statistics |
List auto-wired edges for a memory (v0.2.1, #346). Edges are auto-extracted from content on every remember() call using pure pattern matching β no LLM.
| Pattern | Edge type | Resolved via |
|---|---|---|
[[slug]] |
references |
memories.slug lookup |
@tag |
tagged_as |
most recent memory with that tag |
^<uuid> |
supersedes |
direct memory UUID |
><uuid> |
replies_to |
direct memory UUID |
rel:<type>:<uuid> in --meta |
<type> |
direct memory UUID (legacy compat) |
# List direct edges (both directions)
uteke edges <memory-id>
# Multi-hop BFS across the edge table
uteke edges <memory-id> --deep 2
# Only show incoming edges (backlinks)
uteke edges <memory-id> --direction incoming
# JSON output
uteke edges <memory-id> --jsonWith --deep N, returns memory ids reachable within N hops (cycles detected, start excluded).
--direction accepts incoming, outgoing, or both (default both).
Rebuild referenced_by backlinks from existing forward edges (v0.2.1, #350).
Every forward edge (references, tagged_as, supersedes, replies_to)
automatically gets an inverse referenced_by edge on remember(). This
command repairs stores that pre-date #350, or were written to via the
low-level edge API. Idempotent.
# Rebuild and print a summary
uteke rebuild-backlinks
# Print only the count of new backlinks (script-friendly)
uteke rebuild-backlinks --quiet
# JSON output
uteke rebuild-backlinks --jsonRun the full maintenance pipeline in one command (v0.2.1, #353).
Executes phases in dependency order: lint β backlinks β dedup β orphans β compact β verify. Each phase records its status. Errors in individual phases are recorded but do not abort the pipeline.
# Run all phases
uteke dream
# Run specific phases only
uteke dream --phases lint,orphans
# Dry-run (preview what would change)
uteke dream --dry-run
# Scoped to a namespace
uteke dream --namespace my-agent| Flag | Description |
|---|---|
--phases <list> |
Comma-separated subset: lint, backlinks, dedup, orphans, compact, verify |
--dry-run |
Preview without making changes |
--namespace <ns> |
Run scoped to a specific namespace (backlinks and verify are global) |
--json |
JSON output |
| Phase | Description |
|---|---|
lint |
Check for invalid memory types, missing slugs, stale deprecated flags |
backlinks |
Rebuild referenced_by edges (same as rebuild-backlinks) |
dedup |
Find and merge near-duplicate memories (cosine β₯ 0.90) |
orphans |
Find disconnected, low-importance memories |
compact |
Apply auto-prune to cold-tier and deprecated memories |
verify |
Verify DB and index consistency |
Find orphan memories β disconnected nodes with low importance and few accesses (v0.2.1, #351).
# Find orphans with default thresholds
uteke orphans
# Custom thresholds
uteke orphans --min-age-days 14 --max-access-count 3
# JSON output for scripting
uteke orphans --json| Flag | Description |
|---|---|
--min-age-days <n> |
Minimum age in days (default: 7) |
--max-access-count <n> |
Maximum access count (default: 2) |
--limit <n> |
Max results (default: 50) |
--namespace <ns> |
Scope to namespace |
--json |
JSON output |
View chronological event log for a memory (v0.2.1, #347).
Every memory has an audit trail: creation, updates, type changes, supersession, edge additions, and pin/unpin events.
# Show timeline for a memory
uteke timeline <memory-id>
# Limit to last N events
uteke timeline <memory-id> --limit 10
# JSON output
uteke timeline <memory-id> --json| Flag | Description |
|---|---|
--limit <n> |
Max events (default: 50) |
--json |
JSON output |
| Command | Description |
|---|---|
uteke get <id> |
Retrieve a single memory by UUID |
uteke forget <id> |
Delete a memory by UUID |
uteke forget --tag <tag> |
Delete all memories with a tag |
uteke forget --cold |
Delete all cold-tier memories |
uteke forget --all |
Delete all memories in namespace |
uteke consolidate |
Find and merge duplicate memories |
uteke prune |
Remove deprecated/expired memories |
uteke stats |
Show store statistics with tier breakdown |
uteke export |
Export memories to JSONL (no embeddings) |
uteke import <file> |
Import memories from JSONL/Markdown/text (--extract distills with an LLM) |
uteke doctor |
Health check (DB, index, model, consistency) |
uteke verify |
Verify DB and index consistency |
uteke verify-checksums --binary <path> |
Verify binary integrity against SHA256 checksums |
uteke repair |
Rebuild index from SQLite |
uteke namespace list |
List all namespaces with memory counts |
uteke namespace stats <name> |
Show stats for a namespace |
uteke namespace switch <name> |
Set default namespace in config |
uteke hook <shell> |
Print shell hook script (bash/zsh/fish) |
uteke init --agent <type> |
Initialize integration (pi, claude, cursor, hermes) |
uteke init --agent hermes --memory-provider |
Install uteke as Hermes's default memory provider (auto recall + extraction). See Hermes integration, Mode B |
uteke completions <shell> |
Generate shell completions |
Start a persistent HTTP server for fast AI agent access. Eliminates cold start (~980ms β ~21ms per operation).
# Start server on default port (8767)
uteke-serve
# Custom port
uteke-serve --port 9000
# With logging
RUST_LOG=info uteke-serve --port 8767When [server] enabled = true is set in config, the CLI auto-routes commands through the server. Falls back to local store if server is not running.
| Method | Path | Description |
|---|---|---|
| GET | /health |
Health check |
| POST | /remember |
Store a memory |
| POST | /recall |
Semantic search |
| POST | /search |
Keyword search |
| POST | /list |
List memories |
| DELETE | /forget |
Delete memory |
| GET | /stats |
Store statistics (supports ?namespace=) |
| POST | /stats |
Store statistics (body params) |
| GET | /namespaces |
List all namespaces |
| GET | /memory?id= |
Get single memory |
| POST | /room/create |
Create a room |
| GET | /room/list |
List rooms (supports ?namespace=) |
| POST | /room/recall |
Recall from a room |
| POST | /room/summary |
Room summary |
| POST | /room/document |
Generate document from room |
| POST | /room/stats |
Room statistics |
| DELETE | /room/delete |
Delete a room |
| POST | /doc/create |
Create/upsert document (#438) |
| POST | /doc/get |
Get document by id or slug |
| POST | /doc/list |
List documents (roots_only, parent filter) |
| POST | /doc/search |
Hybrid/semantic/FTS document search (#440) |
| POST | /doc/move |
Move document to new parent (#438) |
| DELETE | /doc/delete?id= |
Delete document with cascade |
| POST | /mcp |
MCP JSON-RPC endpoint (#381) |
Two MCP transport modes are available (v0.2.1, #381):
# stdio transport (for Claude Desktop, Cursor, etc.)
uteke-mcp
# HTTP transport (POST /mcp on uteke-serve)
curl -X POST http://127.0.0.1:8767/mcp \
-H "Content-Type: application/json" \
-H "MCP-Protocol-Version: 2025-06-18" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}'Protocol version: 2025-06-18 (Streamable HTTP spec).
Wiki/knowledge base engine β hierarchical documents with auto-chunking, tree operations, and hybrid search.
Create or update a document from file, content, or stdin.
# From file
uteke doc create architecture --file guide.md --tags wiki,tech
# From inline content
uteke doc create notes --content "# Notes\n\nQuick notes" --title "My Notes"
# From stdin
cat README.md | uteke doc create readme --file -
# As child of another document
uteke doc create chapter1 --parent book --file ch1.md| Flag | Description |
|---|---|
--title <title> |
Document title (auto-derived from first # heading if omitted) |
--file <path> |
Read content from file (- for stdin) |
--content <text> |
Inline content (alternative to --file) |
--tags <tags> |
Comma-separated tags |
--parent <slug> |
Parent document slug (creates as child, #438) |
Get a document by slug or ID.
uteke doc get architecture
uteke doc get architecture --jsonList documents in the current namespace.
uteke doc list --limit 20
uteke doc list --tree # Indented tree view
uteke doc list --roots-only # Root documents only| Flag | Description |
|---|---|
--limit <n> |
Max results (default: 20) |
--tree |
Show as indented tree (recursive children) |
--roots-only |
Show only root documents (no parent) |
Search documents using hybrid, semantic, or FTS5 search (#440).
uteke doc search "authentication flow"
uteke doc search "database" --mode semantic
uteke doc search "API reference" --mode fts --limit 5| Flag | Description |
|---|---|
--mode <mode> |
hybrid (default), semantic, or fts |
--limit <n> |
Max results (default: 5) |
Move a document to a new parent or root (#438).
uteke doc move chapter1 --parent new-book
uteke doc move orphan-doc # Move to rootDelete a document by ID or slug (cascades to children and chunks).
uteke doc delete architecture
uteke doc delete <id>Export all documents as JSON or markdown.
uteke doc export # markdown to stdout
uteke doc export --json # JSON to stdoutThe server exposes a graph visualization endpoint:
# All nodes + edges + stats
curl http://127.0.0.1:8767/graph
# Response: { nodes: [...], edges: [...], stats: {...} }Dual-role API token model:
| Flag / Env | Role | Access |
|---|---|---|
--auth-token / UTEKE_AUTH_TOKEN |
Admin | All endpoints (GET, POST, DELETE) |
--read-only-token / UTEKE_READ_ONLY_TOKEN |
ReadOnly | GET endpoints only (403 on writes) |
# Start with dual tokens
uteke-serve --auth-token admin-secret --read-only-token viewer-key
# Read-only client (GET only)
curl -H "Authorization: Bearer viewer-key" http://127.0.0.1:8767/stats
# Write attempt fails
curl -X POST -H "Authorization: Bearer viewer-key" ... # 403 ForbiddenAll limits can be overridden via env vars or [limits] config section:
| Env Var | Config Key | Default | Description |
|---|---|---|---|
UTEKE_MAX_CONTENT_LENGTH |
max_content_length |
100000 | Max memory content (chars, 0=disable) |
UTEKE_MAX_TAGS_COUNT |
max_tags_count |
20 | Max tags per memory |
UTEKE_MAX_TAG_LENGTH |
max_tag_length |
50 | Max single tag length (chars) |
UTEKE_MAX_PAYLOAD_SIZE |
max_payload_size |
10485760 | Max server payload (bytes) |
UTEKE_DEFAULT_RECALL_LIMIT |
default_recall_limit |
5 | Default recall limit |