Skip to main content

Silica Agent

Let an LLM read, write and organize your Markdown notes, and take back any edit it gets wrong.

Point Silica at a folder of notes, PDFs or code. It answers from what is there, brings new material in,
and checks every write it makes: parsed, validated, read back, and reverted if it does not hold.

silica-agent on PyPI AGPL-3.0 license

A question answered from the notes it found, then the vault as a 3D graph, a reading path, the study queue and the audit
A real 748-note vault, written in Italian, so the answers are too: a question answered from the notes it found,
then the vault as a graph, one note's reading path, the study queue, and the audit. Recorded with Qwen3.5-9B.

Install

uv tool install "silica-agent[gui,mcp]"

Needs Python 3.11+ and uv. With pipx: pipx install "silica-agent[gui,mcp]".

Quickstart

cd ~/notes        # any folder of .md files, adopted as it is
silica init       # pick a model: a hosted API key, or a local LM Studio / Ollama model
silica --gui      # opens http://localhost:8765; plain `silica` opens the terminal instead

Then type /report. It is read-only: it writes one file, GRAPH_REPORT.md, and shows the hubs, bridges and orphans already in your vault. Search, the graph and the MCP server work with no model at all.

The audit in the Examine tab: lattice energy, the areas the vault sorts itself into, and the link distribution
The audit as a tab: what holds the vault together, the areas it sorts itself into, and how its links are spread.

What you can do

  • Turn a library into notes: /nucleate Inbox/ takes a folder, a glob or one file (PDF, DOCX, EPUB, PPTX, notebooks). Each file is its own transaction, checked against what you already have, and lands as the source's own sentences rather than a summary. Stop it whenever; it resumes.

  • Ask, and be refused when the answer is not there: /explain, /compare, /summarize and the chat answer from your notes and cite them. What the vault does not hold is refused, not filled in. /web is the explicit way out, with citations from the pages it actually opened.

    A chat answer listing the notes found by search, with each claim linked to its note and one link marked as having no note
    Every claim links to the note it came from; a link with no note behind it says so.
  • Find how two ideas connect: /path "RAG" "Transformers" walks the reading path between two notes over your wikilinks and the concept graph, /relate names the kind of each link, /graph and /map draw it.

    One note in its reading order: the note to read first above it, the notes it unlocks below
    One note in its reading order: what to read first, and what it unlocks.
  • Test yourself on what you wrote: /learn asks, then corrects you by quoting the source line the note rests on; /quiz re-tests what is fading, scheduled with FSRS-6.

    The Learn tab: questions waiting from earlier sessions, the ones missed, and study plans
    Questions waiting from earlier sessions, the ones you missed, and your plans.
  • Take anything back: /undo one note, /revert <run-id> one run, /revert --source paper.pdf everything one document produced, however far it spread. A deleted note waits in the trash until you bring it back or delete it for good.

  • Keep code docs honest: launched in a git repository, /wiki writes an ARCHITECTURE.md plus a note per subsystem under docs/silica/, and /stale flags the notes whose code changed shape since.

The vault as a 3D graph: notes coloured by area, edge types and node shapes listed in the legend
The same vault in 3D, coloured by the 23 areas it sorts itself into. A note's size is how much the vault routes through it.

How a write is checked

An edit proposed by the model passes parse, structure and link checks, lands in the note and is read back after it lands

The model never touches a file. It proposes; a parser and a state machine decide.

You already let a tool... Silica does the same by...
a compiler reject source that does not build refusing to commit a note that fails its structural checks
a test suite block a merge that breaks behavior reverting any write that breaks the vault's links or structure
git roll back a bad commit /undo and /revert, per note, per run, or per source document

Benchmarks

Every number comes from a committed result file in evals/, run on the product path.

Measured Result
LoCoMo, answerable questions 82.1% and 83.2% accuracy (2 conversations, 302 questions)
LoCoMo, questions it should refuse 87.2% and 82.1% correctly refused (87 questions)
Keeping the source's words vs summarizing, same pipeline +16.5 and +14.7 points of accuracy
FActScore, facts in a written note its source supports 0.961 to 0.999 across three write paths (5,855 facts)
Write integrity on a real 796-note Obsidian vault 796 of 796 notes left with no new structural violation
MuSiQue multi-hop retrieval, 11,654-note vault 61.3% recall@10, 0.83 MRR

Small samples, a flash-class judge, 2 of LoCoMo's 10 conversations: not comparable to vendor numbers, but re-runnable on your machine. The unflattering rows ship too: /organize agrees with a human's folders 32% of the time.

Use it from

Where Command
Browser silica --gui
Terminal silica
Obsidian desktop silica connect, with the obsidian-silica plugin
Claude Code claude plugin marketplace add kiycoh/silica-agent then claude plugin install silica@silica
Codex codex plugin marketplace add kiycoh/silica-agent then codex plugin add silica@silica
Any MCP client silica setup claude, codex, opencode or dsh; or run uvx --from "silica-agent[mcp]" silica mcp

Over MCP the vault is the folder the client started in, and search, recall and reading need no model or API key.

All 62 commands

Workflow: the ones that plan, read widely, or write

Command What it does
/report [folder] [--top-k=N] [--embeddings] structural audit of the vault -> steering loop
/nucleate <file...> [--target=DIR] [--hub=H] bring files in: notes via Injector FSM, code as skeleton stubs
/promote [<key>] session memory -> a note: list what keeps recurring, promote one through the gate
/web [keywords] answer from the web instead of the vault, cited; bare /web re-asks your last question
/organize "<intent>" [--scope=FOLDER] [--file=taxonomy.yaml] [--merge] [--move-uncategorized] [--apply] classify and reorganize vault notes according to a taxonomy
`/summarize <note folder...>`
`/explain "" [--level=intro expert]`
/compare "<A>" "<B>" [...] comparison table of notes/concepts; surfaces contradictions
`/quiz [note folder] [--n=10]`
`/learn [plan] [--n=8] [--plan --scope=<folder note,note
/relate <note> [--n=8] typed relationship map: how/why one note relates to its vault neighbors
`/schematize <note folder
`/diagram <note folder

/summarize, /explain, /compare, /relate, /schematize and /diagram are skills: one SKILL.md each, shipped in silica-core, in the Agent Skills format with arguments filled the way Claude Code fills them ($ARGUMENTS, $0). Any folder holding a SKILL.md under <vault>/.silica/skills/ (this vault) or ~/.silica/skills/ (every vault) becomes a command the same way, and one named like a built-in skill replaces it. Nothing in a skill folder is executed.

Direct: one action, no agent loop

Command What it does
/episodes [--save=<path>] show what session memory holds: live chains, dated, grouped by key; writes nothing
/remember [text] save your text as typed to this vault's memory, no model involved; bare, asks silica to keep what you just said
/memory show what silica remembers about you and this vault, with file paths and budgets
`/agenda [today week
/convert <file...> [--target=DIR] transcode a non-.md file (PDF) into a markdown note in the inbox
/web-search "<concept>" [--max-searches=N] research a concept on the web -> cited findings note in the Inbox (then /nucleate)
/keep save the last /web answer as a cited note in the Inbox (then /nucleate)
/fetch <url> read one URL (YouTube gives its transcript) -> verbatim note in the Inbox
/status [run_id] progress digest of the last run
/embed [folder] [--force] build/update embedding index
/cooccur [folder] [--force] build/update co-occurrence index (without embedder)
/lexical [folder] [--force] build/update lexical (BM25/fuzzy) index
`/wiki [folder path] [--overview-only] [--force]`
/graph [out.html] [folder] export knowledge graph
/map <note> [--force] radial mind-map rooted on a note -> maps/.canvas
/find <query> [--k=N] [--min-trust=T] [--lifecycle=L] semantic search; the two epistemic flags filter after the search, so the count says what they cost
/changes notes this session wrote to, with added/removed line counts
/undo [note-path] undo the last patch on a note
/delete <path> delete a note, even one other notes link to; says which links it left pointing nowhere, /undo brings it back
`/trash [restore erase
/review [--flush=HASH] inspect the async review queue (deferred ops)
/anneal [--steer] [--limit=N] retry every deferred bundle against the current vault; --steer escalates what still fails
`/revert [run-id --source ]`
`/zotero [file group
`/mail [import <file.mbox file.eml> [--label=X] [--me=ADDR] [--all] [--limit=N] [--apply]]`
`/connect [list add
/dedup [folder] deduplicate (sub-agent)
/curate [folder] [--apply] curate the vault: plan autolink/orphan/dedup work (dry-run; --apply executes)
/aliases [folder] [--apply] propose frontmatter aliases for note titles (abbreviations, spellings); dry-run, --apply writes
/enrich [folder] add what lean notes are missing, as an appended section (sub-agent)
/stale [--all] | --stamp [folder] [--write] notes whose documents: sources changed structurally (--all includes cosmetic), attested notes whose body moved on, gate-written notes edited by hand; --stamp derives documents:/code_ref for unbound notes, --write stamps them
/migrate [folder] [--write] notes Silica wrote in an older shape, rewritten through today's writer; a list until --write, then one revertible run
/impact [<git-range>] changed files -> affected notes (documenting + 1-hop import neighbors); no range = uncommitted changes
/plans list plans/ notes grouped by status: (todo|in-progress|blocked|done)
/path <noteA> <noteB> shortest reading path between two notes (wikilinks + co-occurrence)
/contested list notes flagged contested: true with their unresolved contradictions
/verify <note> [--clear] vouch for a note as a person (OKF verified, bound to the body); --clear withdraws

Session and settings

Command What it does
/sessions [prune <days>d] list saved conversations (narration + legacy); prune deletes old ones
`/resume <n id>`
/new start a fresh conversation (same as /clear); the old one stays resumable
/vault [path] show the active vault, or switch to another for this session
`/settings [ <value none>]`
/help show this help
/model show the current LLM model
/tools list registered tools
/clear reset conversation history
/verbose cycle tool progress: off -> new -> all -> verbose
/thinking toggle display of the reasoning block
/incognito toggle this session off the record: not captured, memory neither shown nor saved
/persona [name|off] the persona this conversation wears: list them, put one on, take it off. A persona is a skill whose frontmatter says metadata: {persona: true}
/exit exit silica
Docker, optional extras, configuration

Docker

git clone https://github.com/kiycoh/silica-agent && cd silica-agent
SILICA_VAULT_HOST=~/notes docker compose up -d gui   # http://localhost:8765; your OPENROUTER_API_KEY passes through

Extras, combined like "silica-agent[gui,mcp]": gui (web GUI), mcp (MCP server), connect (Obsidian bridge), rerank (local cross-encoder, pulls torch), stt (local dictation), all. Scanned PDFs need OCR through MinerU, installed separately: pip install 'mineru[pipeline]', then SILICA_PDF_PROVIDER=mineru.

Configuration lives in ~/.silica/.env, written by silica init; every variable and its default is in .env.example. silica doctor --live checks the whole setup with one real request.

License

AGPL-3.0-or-later. A commercial license covers proprietary embedding or a modified hosted service without releasing source. Contributing: CONTRIBUTING.md.

Metadata

Release files for silica-agent 0.22.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for silica-agent 0.22.2
File Size Uploaded Provenance
silica_agent-0.22.2.tar.gz 41.2 MB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for silica-agent 0.22.2
File Interpreter ABI Platform
silica_agent-0.22.2-py3-none-any.whl Python 3 none any Details

Total release size: 45.2 MB

Release files / silica_agent-0.22.2.tar.gz

Download URL silica_agent-0.22.2.tar.gz
Size 41.2 MB
Tags Source
SHA-256 checksum
How to use checksums
722c75f7add99ed83ee13e893c5c8f03653ea3175d2dbb5397edf0808a465b51
BLAKE2b-256 checksum
How to use checksums
0c71b90c14e51135f6ad3871f0e4c461964d116aa32a3a84be196749bac21246
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / silica_agent-0.22.2-py3-none-any.whl

Download URL silica_agent-0.22.2-py3-none-any.whl
Size 4.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
0cffbb60384eb656bd4168195e2fa96cbd767378bdd6a315afa5668e4389e7e0
BLAKE2b-256 checksum
How to use checksums
ee1f36218e2d2a4c450fa8793c1d2bc1e0a14dae0101dbb36c59ca02d377647e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Security for silica-agent 0.22.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for silica_agent-0.22.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page