Mycel manual

Everything you need to run Mycel, write in it, and let your AI maintain it. Five minutes to deploy, one page to learn.

Getting started

You need Docker (for Postgres + pgvector) and uv. Then:

git clone <your-fork> mycel && cd mycel
cp .env.example .env          # or edit the provided .env
docker compose up -d          # Postgres 17 + pgvector on :5442
uv sync
uv run python manage.py migrate
uv run python manage.py init_kb   # seeds the KB Schema note
uv run uvicorn config.asgi:application --port 8000

Open http://127.0.0.1:8000/app/. The root / is the public landing page; the app lives under /app/.

The home screen

The app home (/app/) is a single prompt over your living knowledge graph — every dot is a real note, drifting. Hover a node to see its title; click to open it.

Writing notes

Notes are block documents, Notion-style. Click the title to rename — every [[wikilink]] pointing at the old title is rewritten for you, so the graph never shatters.

Keyboard

KeysAction
EnterSplit the block at the caret (new block below)
Shift+EnterLine break inside the block
Backspace (at start)Merge into the previous block
/Block type menu — Text · Heading · List · Code · Quote
Alt+↑ / Alt+↓Move the block up / down
↑ / ↓ (at edges)Walk into the previous / next block
⋮⋮ dragReorder by dragging the handle

Links and ghosts

Wrap any concept in double brackets — [[Solo founder economics]] — to link it. The target doesn't have to exist: unwritten references appear on the graph as dashed ghost nodes, a running list of pages worth creating. The moment you create a note with that title, every ghost link snaps onto it.

Conflicts

If an agent (or another window) changes a block you're editing, you get an inline conflict card showing both versions — keep yours or theirs. No silent overwrites, ever.

The graph

Connect your AI (MCP)

Mycel is agent-native: anything you can do in the UI, an agent can do over MCP — through the same write path, so every agent edit is attributed, versioned, and revertible.

The endpoint is http://127.0.0.1:8000/mcp (streamable HTTP). For Claude Code:

claude mcp add --transport http mycel http://127.0.0.1:8000/mcp

Exposed to the network? Set MYCEL_SHARED_TOKEN and send it as Authorization: Bearer <token>.

✦ how agents learn the rules The server instructs every agent to read the KB Schema note first. It defines the note kinds and the maintenance workflows — and it's an ordinary note, so you and your agents can evolve the rules together.

Note kinds

kindMeaning
wikiLLM-owned synthesis pages (default). Agents create, edit, reorganize freely.
rawImmutable sources (articles, transcripts). The server rejects agent writes — synthesis goes in wiki notes that cite the raw.
schemaThe KB Schema note itself.

Tools

ToolWhat it does
searchHybrid keyword + semantic search
read_noteFull markdown, or mode="outline" for cheap orientation
list_notesCatalog of every note — the vault's index
related_notesSemantic neighbors — where new info should integrate
list_backlinksNotes linking to a note
ingestStore a source as immutable raw + get an integration checklist
lint_kbHealth check: orphans, ghosts, stale-but-cited, near-duplicate pairs
create_note / append_blocks / update_block / move_block / delete_block(s) / update_note_metaWrites — same single write path as the UI
list_recent_changes / get_change_group_status / revert_change_groupHistory and undo

The maintenance loop

  1. Ingest — new source → raw note → integrate key claims into related wiki notes → create pages for new concepts.
  2. Query — answer from the vault, then file valuable answers back as wiki notes so knowledge compounds.
  3. Lint — run lint_kb periodically; link orphans, write ghost pages, resolve contradictions, merge duplicates.

Ask mode

Press Enter on the home prompt and mycel answers from your notes, never from thin air:

# .env
ANTHROPIC_API_KEY=sk-ant-...
MYCEL_ASK_MODEL=claude-sonnet-5   # optional

If the LLM call ever fails, Ask degrades to the digest — the home screen never hard-fails.

History & safety

Import from Obsidian

uv run python manage.py import_vault --path ~/vault

Configuration

Everything is an environment variable (read from .env):

VariableDefaultPurpose
DB_NAME / DB_USER / DB_PASSWORD / DB_HOST / DB_PORTpgvec · 127.0.0.1 · 5442Postgres connection (docker-compose maps 5442)
MYCEL_SHARED_TOKEN(empty)Bearer token gate for /mcp. Empty = localhost-only trust.
ANTHROPIC_API_KEY(empty)Enables synthesized Ask answers; empty = extractive digest.
MYCEL_ASK_MODELclaude-sonnet-5Model used for Ask.
MYCEL_EMBEDDER(built-in)Dotted path to a real embedding model (e.g. BGE-M3). Default is a deterministic hashing embedder — swap it for true semantic recall.
MYCEL_VECTOR_MAX_DIST0.75Relevance floor for the vector arm of search.
MYCEL_INLINE_EMBEDtrueEmbed small backlogs inline so semantic search works without a worker.
MYCEL_IDLE_MERGE_SECONDS300Idle window that merges consecutive edits into one history group.
MYCEL_BULK_THRESHOLD10Deletes above this count require owner approval.

The markdown contract

Your data is markdown, round-trippable by design:

Open the app →