explaingit

kytmanov/synto

21PythonAudience · researcherComplexity · 3/5ActiveSetup · hard

TLDR

Python CLI that turns a folder of raw Markdown notes into a cross-linked personal wiki using two local LLMs, an extractor and a writer, with incremental compile and edit-aware hashing.

Mindmap

mindmap
  root((synto))
    Inputs
      Raw markdown notes
      Source type metadata
      Reviewer rejections
    Outputs
      Obsidian wiki articles
      Draft confidence scores
      Claude ready pack folder
    Use Cases
      Build a personal wiki from notes
      Feed structured context to Claude
      Compile lecture notes into articles
    Tech Stack
      Python
      SQLite
      Local LLMs
      Obsidian markdown

Things people build with this

USE CASE 1

Turn a year of raw study notes into a cross-linked Obsidian-compatible wiki

USE CASE 2

Run concept extraction with a 4B model and article writing with a 14B model on the same machine

USE CASE 3

Export the compiled wiki as a pack folder Claude or Cursor can ingest

USE CASE 4

Track which articles a reviewer rejected and feed reasons into the next compile

Tech stack

PythonSQLiteOllamaObsidian

Getting it running

Difficulty · hard Time to first run · 1h+

Needs two local LLMs running at once, typically a 4B extractor and a 14B writer, so a GPU or strong CPU plus ~20 GB of model storage is required.

In plain English

Synto is a tool that turns a folder of plain Markdown notes into a personal wiki, where the work of writing the wiki pages is done by a local AI model running on your own computer. The idea, which the author credits to a description by Andrej Karpathy, is that your raw notes are source material rather than the finished article. You drop in notes, and Synto identifies the concepts in them, then writes one cross-linked article per concept. When the same concept shows up in several notes, those notes feed into the same article instead of creating duplicates. Everything stays on your machine unless you choose to share it. The pipeline has four stages: import, ingest, compile, and export. It uses two different local models. A smaller model around 4 billion parameters reads each note and extracts the list of concepts and summaries. A larger model around 14 billion or more then writes the actual articles. The author explains this split as a way to keep things fast and cheap on normal consumer hardware, since concept extraction is easier than writing coherent linked prose. After running synto init, you get a vault layout with raw for your notes, wiki for the published articles (in Obsidian-compatible Markdown with wikilinks), a drafts folder for articles waiting for review, a SQLite database to track state, and a pack folder that exports the wiki in a form Claude, Cursor, or other file-aware AI agents can read. There is no vector database and no embeddings; queries are routed through an INDEX.json file. Several mechanisms make the workflow safer. Compilation is incremental, so changing one note only rebuilds the articles tied to it. You can reject a draft and write a reason, which gets fed into the next prompt. Drafts get a confidence score from 0 to 1. Articles you edit by hand are tracked by a SHA-256 hash, so a recompile never overwrites your edits. Source documents carry a type like paper, textbook, or api_docs, and the ingest prompt adapts accordingly. The project is a Python tool published to PyPI, has 20 stars, and succeeds an earlier Obsidian plugin by the same author.

Copy-paste prompts

Prompt 1
Run synto init in a new folder and explain the raw, wiki, drafts, and pack layout
Prompt 2
Configure synto to use a 4B local model for extraction and a 14B model for compilation
Prompt 3
Import a folder of textbook chapters tagged as type textbook and compile the first wiki articles
Prompt 4
Reject a draft article in synto with a reason and recompile so the next version takes the feedback
Prompt 5
Export the wiki as a pack and load it into Claude as file-aware context for follow up questions
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.