Repository navigation
Capture Flow
In the loop: 1. Gather information. Every door a thought comes in through, and the jobs behind each one.
brainless starts with a wide front door. A thought does not need to arrive as a finished note. It can be a handwritten page, a photograph, a voice memo, a link, a sentence in Telegram or Buzz, or a document dropped into the vault. The first job is to keep it. Sorting and connection happen later.
flowchart LR
hand["Handwritten page"] --> image["Photo: Inbox, Telegram or Buzz"]
phone["Telegram: text, voice, photo, link"] --> capture["Capture workers"]
buzz["Buzz #inbox: text, voice, image, link, document"] --> capture
image --> capture
docs["PDF, DOCX, XLSX, PPTX, audio"] --> processor["Hourly smart_processor"]
capture --> daily["Thinking/Daily/*.md"]
capture --> links["Inbox/Links/*.md"]
processor --> daily
processor --> compiled[".wiki/summaries + projects"]
daily --> closeout["21:00 closeout"]
daily --> dialectic["12:30 / 21:20 dialectic"]
closeout --> compiled
dialectic --> compiled
compiled --> tomorrow["Tomorrow's context and prompts"]
-
Handwritten notes. Drop a JPG, PNG, HEIC or similar image at the top of
Inbox/, or send the image to Telegram or Buzz. Claude reads the handwriting, preserves uncertain words as uncertain, corrects obvious names from_Agent-Context/CONTEXT.md, adds wikilinks and turns visible actions into task lines. Inbox images are archived under_attachments/handwritten/; the capture note stays inThinking/Daily/and embeds the original. -
Voice. Send a Telegram voice note, audio file, video note or video, or attach
audio in Buzz
#inbox.whisper.cpptranscribes it locally. The LLM then cleans punctuation and obvious transcription errors without changing the thought. - Text. Send a short thought in Telegram or Buzz. The LLM gives it a title, adds useful wikilinks and tags, and writes the result as a normal daily capture.
-
Links. Send a URL with an optional comment. The fetcher checks that the host is
public, extracts readable page text, and writes a reading note to
Inbox/Links/. -
YouTube and podcasts. Send a YouTube link or an Apple Podcasts episode link. The
capture only queues it and answers at once. The media job fetches the captions, or
transcribes the episode locally with
whisper.cpp. A cleaning pass adds punctuation and speaker turns without cutting anything, and keeps a[mm:ss]marker every three minutes. The transcript lands inInbox/Media/and Buzz#inboxsays when it is ready. -
Chat history. A Claude or ChatGPT export goes through
brainless chats triage(writes nothing), thenimportintoraw/chats/, skipping short and personal conversations and redacting secrets.promotemoves the ones worth compiling toLibrary/Chats/. -
Documents. Put PDFs, Word files, spreadsheets, presentations or supported
audio in
Work/,Personal/orLibrary/. MarkItDown creates a raw Markdown conversion beside the original. High-value resources also get a Summary and a Fiche de Lecture. Originals and raw conversions remain recoverable. -
Documents from the phone. Attach a PDF, Word, Excel, PowerPoint or EPUB file
in Buzz
#inbox. The worker converts it with MarkItDown intoInbox/Documents/<stamp>-<name>.md; a caption becomes the title. The original is read from a temporary folder and never enters the vault. A file whose name or caption matches a private name part (private_name_partsin PROFILE.md, plus the passport and ID words) is refused before download, with the reason in the thread. The check reads names, not contents. A scanned PDF with no text layer saves nothing and says so. - Direct notes. Type or hand-edit durable beliefs, decisions and project notes in their human-owned homes. These are the source of truth; automation proposes and connects, but does not silently decide for you.
Obsidian is where the human reads, writes and navigates the vault. The common format
is Markdown, so a handwritten OCR result, a Telegram transcript, a Buzz capture, a
direct note and a converted document can all be opened, linked and searched in the
same place. The core Graph view shows the explicit [[wikilinks]] between notes;
the Smart Connections plugin adds a related-content view when a useful link has
not been written yet. Dataview and the generated INDEX.md, MOCs and project
mirrors provide more structured entry points without replacing the source notes.
The graph is not a separate database to maintain. It grows as capture workers and
LLM prompts add links, while the regular compiler and linter refresh summaries,
backlinks, frontmatter and unresolved-link reports. Open the human homes for truth;
use the graph, Smart Connections and .wiki/ surfaces to find the next connection.
The LLM is connective tissue, not the owner of the archive. It can clean a
transcript, read a note image, extract a page, correct a proper noun using the
current context, and add [[wikilinks]] between a capture and an existing project,
belief or person. It does not get general file tools for text processing. A photo
reader gets only the image-reading capability it needs. Every capture keeps a
source footer, and failed or empty output is left for retry rather than replacing
the source.
| When | Job | Connection |
|---|---|---|
| On Inbox image change | inbox_watch_wrapper.sh |
OCRs a handwritten or printed image immediately; smart_processor.py --images is also the hourly backstop. |
| Every 2 minutes on the worker | telegram_worker.sh |
Polls Telegram, transcribes voice locally, reads photos, fetches links, and writes Thinking/Daily/ or Inbox/Links/. |
| Every 2 minutes on the worker | buzz_capture_worker.sh |
Reads owner posts in Buzz #inbox, handles text, voice, images, links and documents, and writes the same capture homes (documents to Inbox/Documents/). |
| Hourly |
cron_wrapper.sh -> smart_processor.py
|
Converts documents, OCRs missed Inbox images, validates outputs, and records retry state. It also pushes today's briefing on its own (vault_backup.sh --only), so the worker's 21:00 close-out appends to it and does not create a second file on the same path. |
| Every 10 minutes on the worker | tools/media_import.py run |
Works the YouTube and podcast queue one link at a time and writes Inbox/Media/. |
| 12:30 and 21:20 | tools/dialectic.py |
Clusters that day's Telegram and Buzz captures, asks six critical personas to argue them in #dialectic, and files the synthesis. |
| 21:00 | tools/evening_closeout.py |
Reads the day's captures and proposes one seed, one decision and one contradiction. |
| 23:00 | tools/nightly_processor.py |
Turns daily captures into a digest, extracts owner tasks, archives raw files. |
| 23:20 | tools/nightly_compile.py |
Compiles .wiki/ (summaries, concept pages, entities, aliases, links, index), writes the change brief (_Agent-Context/WIKI-CHANGES.md), refreshes lint, rebuilds the search index and scores the retrieval questions. Runs every night, captures or not. |
| Monthly, from the hourly job | tools/vault_archive.py create |
Seals the vault and its history with age into the backup folder, newest six kept. |
| Weekly |
resurface, thinking, reconcile, lint
|
Brings due decisions back, asks a reflective question, checks belief drift and repairs the compiled layer. |
The important boundary is Thinking/Daily/. Telegram and Buzz captures, Inbox
image OCR, and other short-lived thoughts arrive there as Markdown. The closeout
and dialectic read those files while they are fresh. The nightly job then archives
the raw captures and writes durable derivatives into .wiki/ and the task ledger.
The next day's context, dashboard, Today queue and review prompts read those
derivatives and link back to the human notes.
Nothing needs to be classified at the moment of capture. The system can connect a voice memo to a decision later, surface a handwritten task in the daily digest, or bring an old belief back when new evidence arrives. The human note remains the place where a belief, decision or action becomes real.
Capture workers own new files in Thinking/Daily/ and Inbox/Links/. The human
owns Work/, Personal/, Thinking/Beliefs/, Thinking/Decisions/ and project
notes. The compiler owns .wiki/. Worker commits are path-scoped and serialised;
raw images, source documents and failed conversions are retained. If a model call,
network request or scheduled job fails, the source stays in place and the retry
state records what happened.
Telegram only receives captures. All receipts and processing errors appear in Buzz #inbox. Daily actions, thinking questions and approvals happen in Buzz threads. See Buzz interactions for the channel map and delivery recovery.
brainless · not a second brain, zero brain. Collect everything, think it through, decide, then do it. Engine repo · MIT. This wiki mirrors the repo's docs/; the repo is the source of truth.
The loop
1. Gather information
2. Think deeper and clearer
3. Decide
4. Get shit done
Keep it yours
Run it
- Install
- Lite
- Configuration
- What it runs on
- Reference Deployment
- Syncing across devices
- The AI Shed
- Localization
Addons
Reference
- Scripts Reference
- FAQ
- References
- Changelog · every release, newest first
- Design · the kilim brain, the palette, the logo files, the terminal colours
