quickstart.md
docs/quickstart.md
Quickstart
<!-- translations:start -->
한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end --> This page shows the shortest path from an existing project directory to a browsable Tesserae.
Command overview
The CLI is grouped: a handful of everyday verbs at the top level, plus groups (sessions, vault, export, code, config, projects, integrations, lab) for the rest. Run tesserae --help to see the whole tree:
usage: tesserae <command> [options]
EVERYDAY
init Set up .tesserae (wizard by default; --yes non-interactive)
compile Rebuild the knowledge graph (compile [paths] = ad-hoc ingest)
ingest Ingest a document file or URL into the knowledge base
context Compile agent-ready context for a query
ask LLM answer over the knowledge graph (planned retrieval)
serve Browse the compiled site (auto-builds if missing)
status Node/edge counts, last compile, vault state
AUTOMATION
engine Refresh daemon: watch sessions/sources, coalesced recompiles
refresh One-shot: import sessions + compile + sync vault
research Autonomous research mode: investigate a query
ANALYSIS
query raw retrieval: BM25/semantic + explicit backends
lint Graph lint report (--fix-trivial, --severity, --json)
doctor Health checks: init/graph/registry/staleness/locks (--fix = safe repairs only)
summary Daily/weekly activity digest (sessions, findings, commits, PRs, docs)
decisions Decisions across projects + time (human AskUserQuestion + agent)
GROUPS
sessions import | discover | list | chunk-backfill — agent session history
vault sync | sync-all | set-root | export | prune — Obsidian projection
export harness | graphiti | site — artifact exports
code ingest | sync — CodeGraph ⇄ project graph (hook-invoked)
setup Machine-wide setup: LLM defaults + optional deps (interactive by default)
config llm | deps | show | status | clip-token — LLM backend defaults + resolved view & liveness ping
projects register | list | unregister | mcp-config — registry
sources add | list | remove — manage compile source dirs (local & global)
federation status | explain — inspect cross-project federation
integrations refresh raganything
extract Low-level: extract a typed graph from markdown paths
LAB
lab evolve | schema-drift — experimental LLM ops
Run `tesserae <command> --help` for command details.
Run tesserae <command> --help (e.g. tesserae compile --help) for the flags on any single command.
1. Run the setup wizard
From the project you want to index:
cd /path/to/my-project
tesserae init
tesserae init is the single onboarding step. The wizard detects common sources such as README.md, docs, src, lib, app, packages, and data, probes which LLM CLIs are installed and logged in, lets you pick the LLM provider, and writes .tesserae/config.json. The optional RAG-Anything memory backend is off by default; enable it later in memory_backends in the config, and query it explicitly with tesserae query --backend raganything.
For a non-interactive setup (CI, scripts), pass --yes to accept the detected defaults without prompting (all optional integrations OFF):
tesserae init --yes
LLM provider configuration
The wizard's provider pick (or the equivalent flags) persists these config keys:
| Config key | Flag | What it is |
|---|---|---|
llm_provider | --llm-provider {claude,codex,anthropic,custom} | Backend for the LLM client: claude/codex use the logged-in CLI over OAuth; anthropic uses the API directly; custom targets any claude-compatible endpoint. |
llm_model | --llm-model | Model for the synthesis/insights LLM client. |
llm_base_url | --llm-base-url | Endpoint base URL for anthropic/custom. |
llm_api_key | --llm-api-key | API key for anthropic/custom. |
Plaintext warning.
llm_api_keyis stored in plaintext in.tesserae/config.json. Prefer the environment variables instead:ANTHROPIC_API_KEY(key),ANTHROPIC_BASE_URL(endpoint), andTESSERAE_LLM_MODEL(model). Resolution order is env → project config → machine-wide config (~/.tesserae/config.json, written bytesserae setup) → built-in default.
Re-running init on an existing project merges — your configured sources and memory_backends are preserved, not clobbered.
Example non-interactive provider setups:
tesserae init --yes --llm-provider codex
tesserae init --yes --llm-provider custom \
--llm-base-url https://llm.internal.example/v1 \
--llm-model my-model # key via ANTHROPIC_API_KEY
Skip the wizard.
tesserae init --barewrites a minimal.tesserae/config.jsonwithout source detection or backend probing — handy when you want to hand-edit the config before the first compile.
2. Compile the graph and projections
tesserae compile
compile writes the durable artifacts:
.tesserae/
config.json
graph.json
manifest.json
sqlite.db
temporal_facts.jsonl
graphiti_episodes.jsonl
report.md
competitive_report.md
markdown_projection/
obsidian_vault/
agent_harness/
harness_sessions/
site/
Use --changed-only after the first run to skip unchanged markdown files while preserving the previous graph when no files changed.
To ingest extra paths ad-hoc without touching the configured sources, pass them positionally: tesserae compile path/to/extra.md docs/.
Integration knobs live in config now
tesserae compile is deliberately capped at the everyday flags (paths positional plus --project, --changed-only, --limit, --refresh-integrations, --sessions/--no-sessions, and the three LLM flags). Every other former compile flag moved into a compile_options block in .tesserae/config.json; the old argparse default is still the fallback. Set a key there to change behavior:
compile_options key | Old flag | Default | What it does |
|---|---|---|---|
source_kind | --source-kind | (none) | Override the configured source kind. |
trends | --trends | false | Add corpus-level Trend nodes. |
min_trend_sources | --min-trend-sources | 2 | Minimum sources needed for a Trend node. |
exclude_data | --exclude-data | false | Skip the implicit project_root/data auto-include. |
no_vault_pull | --no-vault-pull | false | Don't pull existing vault edits back before compile. |
use_extraction_feedback | --use-extraction-feedback | false | Feed prior extraction results back into the run. |
sessions_llm | --sessions-llm | (auto) | LLM session-extraction mode (auto/true/false). |
sessions_model | --sessions-model | (none) | Override the LLM model used for session extraction. |
Cognee was removed in 0.19. The cognee backend was demoted in 0.18 and never fed the graph. Configs still carrying a
memory_backends.cogneesection (orcognee_*compile options) keep loading — the section is ignored with a one-line note.
One-shot pipeline.
tesserae refreshruns the whole loop in-process — it imports any new agent sessions, compiles, and syncs the vault in a single command. Pass--changed-onlyfor the opt-in incremental compile.
3. Build and serve the static frontend
serve auto-builds the site if it is missing, so a single command gets you a browsable Tesserae. Bare serve serves every registered project under one server — a projects landing at /, each project at /<alias>/, and a Projects switcher in the header to jump between them. The in-page ask widget works live in either mode, routed to the project of the page you're on:
tesserae serve --port 8765 # all registered projects
tesserae serve --project . --port 8765 # just this one
Open:
http://127.0.0.1:8765/
To build the site explicitly (e.g. for deploy without serving) use export site; pass --no-build to serve when you want to browse a previously built site without rebuilding it:
tesserae export site
tesserae serve --no-build --port 8765
<!-- BEGIN: subagent-r-watch -->
Auto-rebuild on save
Pair the dev server with the built-in watcher so edits under data/ and docs/ trigger an incremental recompile:
# terminal 1
python3 -m http.server 56821 --directory .tesserae/site
# terminal 2
tesserae export site --watch
export site --watch polls every 2 s, debounces 1 s, and runs compile --changed-only. Use --once for cron-style rebuilds (snapshots vs .tesserae/.watch-cache.json), --paths <dir> to add custom watch dirs, and --interval / --debounce to tune cadence. <!-- END: subagent-r-watch -->
Run the refresh daemon
For an always-on engine that keeps the knowledge base fresh on its own — watching your sources, coalescing bursts of edits, and auto-recompiling — start the supervised daemon:
tesserae engine
engine is the long-running supervisor: it polls every 2 s and waits out a 1 s quiet window before each rebuild. Tune the cadence with --interval and --debounce, point it at another project with --project, or pass --once to run a single deterministic drain cycle and exit (useful for cron or CI). This is the hands-off counterpart to export site --watch: leave it running and the graph, vault, and site stay current as you and your agents work.
For an annotated tour of every visible route — home, sources, concepts, entities, papers, repos, topics, syntheses, questions, timeline, graph, plus the AI siblings — see