I've been working on Supertag, a package that treats tagged Org headings as typed nodes (tags with fields, queries, backlinks, streams). 0.4.0 adds the piece I've wanted for a while, and I made a short video about the idea behind it.
The problem I kept hitting. Asking an LLM to make small edits to my notes ("I talked to X today, log it") works most of the time. Only most of the time, so I end up opening the note to check, almost every time. Checking costs about as much as doing it by hand.
What 0.4.0 does instead. You open a tag's Stream (a time-ordered list of its nodes) and describe in one sentence how it should work, e.g. "group people by how close we are, and give me a key to log that we talked today."* A model writes a small Elisp agent for that Stream: groups, a line per note, and keys that write properties. After that the agent runs with no model call. Pressing the key writes :LAST_CONTACT: 2026-10-26 into the property drawer, as plain text. `R` revises the agent with another sentence.
Some boundaries I care about, which I suspect this sub does too:
- The Org files are the only truth. The Stream is a view. Agents never create notes; they only read and write declared properties (and `SCHEDULED`/`DEADLINE` if you ask for dates). Delete an agent and nothing in your files changes.
- The model only runs when you ask: when designing or revising an agent. Nothing calls a model in the background.
- Generated code is checked before install. It is built from a fixed set of primitives; every field an action writes has to be declared; the view must place every note in a group, draw a single-note stream, and redraw after each action. Failures go back to the model, up to a limit. You can read the code with `C`; the sentence and its revisions are kept as comments.
- Bring your own model. Requests go through gptel (with a `supertag` preset) or Superchat. Local models via Ollama / LM Studio work.
The idea is borrowed from Lifestreams (Eric Freeman's 1997 Yale thesis): one stream of everything, substreams by query, and processors on top. Its processors had to be written by hand (a phone-call agent took ~150 lines of Tcl), which is why they never spread. An LLM can be that author, once.
Also in 0.4.0:
- `M-x supertag-view-stream` opens one stream of all nodes; `f` narrows with plain words, `tag:prj`, `KEY:VALUE` or a full query; `u` goes back.
- Discovery adds results by meaning after keyword matches (embeddings via Ollama or any OpenAI-compatible endpoint; off by default).
- Agents can indent tasks under their project, using the outline path.
- Archived notes (`ARCHIVE` tag, `org-archive-location`, denote `archive` keyword) are hidden from streams; `A` shows them.
- denote `#+IDENTIFIER:` and `:ID:` file headers are file nodes by default.
Repo: https://github.com/yibie/supertag
Release notes: https://github.com/yibie/supertag/releases/tag/v0.4.0
Requires Emacs 29.1+, Org 9.6+, textui 0.9.0. After upgrading, run `M-x supertag-sync-full-rescan` once.
The demo uses a made-up vault; the narration is a synthetic voice. Happy to hear where this breaks, and what you'd want an agent to do for one kind of your notes.