Raw text in.Memory out.
blk/txt reads the notes you already write, then reads them back in the app without being asked. The letter names which subjects went quiet or appeared for the first time, which numbers moved, which loose ends opened, and which subjects carried from the week before. A statement in a note, such as a 30-day count of INC-9021, shows its current value and opens onto the blocks behind it. Sort by date, length, or structure. Click a word for its offline definition, and your files stay the source of truth.
Entity types: ticket, URL, environment, tag, mention, date, metric, and your own.
Notes and logs, one index.
Text goes in, and a rebuildable index comes out. An access log can sit in that index beside the notes, rolled up by the hour. Your files stay where they are, and they remain the source of truth.
Raw text.
Dated blocks in any .txt / .md / .log. Your files never move, and they stay the source of truth. Access logs (Apache or nginx), syslog, and JSON lines can sit beside them, rolled up by the hour.
Extract entities.
Rules you control pull typed entities out of the prose: tickets, tags, mentions, metrics. You can mark a counterexample, such as "this is not a ticket", and preview what a change would match before you save it.
Into an index.
One index holds full-text search, duplicate detection, and a record of each ingest. Delete it and rebuild it from your files any time.
Explore it.
Search, timelines, heatmaps, and metric charts, through web, CLI, JSON API, and mobile. You read the letter in the app, and saved copies stay in an archive.
Teach the type, then test it.
blk/txt ships knowing dates, tickets, tags, mentions, environments, and URLs. You teach a further type, a counterexample such as "this is not a ticket", and which sources a type may match. A preview shows what a change would match across your whole history before you save it, and taught examples stay as tests a later change must pass. Each type keeps one mark, the same mark in search, on a timeline, and on a chart. A note that only says the thing broke again, with no ticket or host in it, has nothing for a later search to retrieve.
Patterns, with the history of each value.
Search years of notes, then follow the entities, dates, and metrics that connect them. The latest recorded value of a reading keeps every change, and a phrase such as try, deployed, or reverted suggests a label you confirm. Those labels only know the phrases you teach.
Every day you wrote, at a glance.
TICK-1842
p95 latency, last 30 days
Latest recorded value, and every change since. A phrase such as try, deployed, or reverted suggests a label, which stays a suggestion until you confirm it.
Your notes, read back.
Quiet and first seen.
The letter names subjects that went quiet, and subjects that appeared for the first time. A subject that stays quiet is listed once, in the period it crosses the line, and a later week leaves it out while it stays quiet.
Numbers and loose ends.
It names which numbers moved, which loose ends opened, and which subjects carried from the week before. Every number opens onto the exact blocks behind it.
Saved in the app.
You read the letter in the app. Saved letters stay in an archive, newest period first, holding the numbers from the day you saved them.
A shared window.
Subjects listed together share a window. The letter never says one thing caused another.
Statements, logs, and a file to hand on.
These sit in the notes you already write, or in a file built from them. Each one has a limit, named with it. None of them changes the text you stored.
Live statements.
You write a live statement in double braces inside a note, such as {{ count ticket:INC-9021 in 30d }}, {{ last host:vpn.internal.example }}, or {{ latest p95 }}. Each one shows its current value and opens onto the blocks behind it. p95 has to be a metric you defined, and host has to be a type you track.
Still open.
A workaround, a TODO, or a note that says waiting on, with no later note that closes it, shows up with the opening block as evidence. Loose ends only know the phrases you teach: an opening such as temporary or TODO, and a closing such as done or resolved. A fix you described in other words stays off the list.
Logs beside notes.
Access logs (Apache or nginx), syslog, and JSON lines sit beside the notes and roll up by the hour into counts and the same entities. Each hour opens onto its raw lines, and a source that stops sending shows as no lines received since a date. Raw lines are kept for 30 days by default, and they are not stored as individual notes past that window.
A file to hand on.
Export the types, aliases, metrics, and examples you taught as a file with no note content, and import someone else's only after a preview. You can also pick blocks and download one self-contained file anyone can open offline. That file carries the interpretation those blocks need, and each instrument's value is frozen when you build it.
Built to be left, so it's worth keeping.
Text is the truth
The database is derived, never authoritative. Your notes stay searchable files you own, and the index rebuilds from those files whenever you want. Anything you wrote here rather than in a file comes back the same way, through a Markdown export that reads straight back in. Hosted account? Export everything, JSON, CSV, or Markdown, any time. No lock-in either way.
Runs where you do
Browse in the web lens, pull the JSON API, or send text from another machine with an API token. Paste, drop a file, or point a script at it: the index is the same either way.
Private by default
The trial hands you a sandbox with no login, and it clears itself after 48 hours of inactivity. Every account's notes are isolated from every other, and everything exports to JSON, CSV, or Markdown whenever you ask.
Every answer is a query
No language model reads your notes. Every answer the app gives is a query you can run again yourself. The optional analysis that suggests key terms and similar notes runs where your notes already live, and never changes the source text.
Read back the notes
you already have.
Paste text you already have and read what it found: blocks, entities, metrics, and the patterns it noticed but has no rule for yet. Open a worked example and the trial opens on the letter those notes would produce, which you read in the app. The sandbox clears itself after 48 hours of inactivity.