The smallest plain-text format that tells you, in seconds, whether you're winning or losing.
A checkbox measures effort. Momentum measures progress.
Turn the to-dos you already write into commitments you keep — and goals you reach.
Every line is one task. Only the text is required; everything else is optional and order doesn't matter.
[x] [date] text… #goal[/commitment][op N] target:y value:s repeat:r due:z +project @area
x done · #goal/commitment the hierarchy · #goal = / += / −= move a number (bare = +1) · target / value / repeat / due the bar · +project · @area grouping
You write the plain text; the engine reads your lines and hands back one view. The whole point is that board's last line — the verdict you couldn't see in the raw numbers.
you write this
(A) close $500K new ARR by Sep 30 #sales target:500000 value:0 due:2026-09-30 @revenue book 10 discovery calls/wk #sales/discovery repeat:weekly target:10 send 3 proposals/wk #sales/proposals repeat:weekly target:3 land first enterprise logo #sales/logo target:1 due:2026-07-15 x 2026-06-26 discovery — Acme #sales/discovery x 2026-06-27 discovery — Globex #sales/discovery x 2026-06-25 proposal — Initech ($80K) #sales/proposals x 2026-06-12 closed Wayne — $120K #sales+=120000 x 2026-06-20 closed Stark — $90K #sales+=90000 x 2026-06-27 closed Umbrella — $110K #sales+=110000
you see this
Every rule below earned its place against one test: can a person still write this by hand, and read the whole spec in one sitting? Anything that failed isn't here. Simplicity is the point — it's both the value and the moat.
The task is the atom. Goals and commitments aren't a different kind of line — they're tasks too (rule 05).
x marks a task done.Lowercase x and a space at the very start, then optionally the completion date. Same as todo.txt.
x 2026-06-27 discovery call — Acme #sales/discovery
A #goal is the top level; #goal/commitment nests under it with a slash. Tags are never declared — they exist the moment a task references one, exactly like a todo.txt +project. (In Obsidian, #sales/discovery renders as a navigable tag tree, free.)
@area is the cross-cut.A life domain — @health, @revenue, @craft. Lets the board answer “how am I doing in this part of my life,” across goals.
target: or repeat: is a goal or commitment; without either, an execution.The only structural rule you need. The target:/repeat: marks the bar — on a top-level #goal it's the goal's own lag (a 4DX WIG); on a nested #goal/commitment it's the commitment. A task with neither is an execution: the work that counts toward one.
close $500K by Sep 30 #sales target:500000 due:2026-09-30 book 10 discovery calls/wk #sales/discovery repeat:weekly target:10 x 2026-06-27 discovery — Acme #sales/discovery
+=1.This is the whole model, and it's tiny. A dated task moves its #goal's number one of four ways — and the current value is a fold: replay the events from the value: baseline, within the window repeat: sets.
| you write | op | effect |
|---|---|---|
#goal (bare) | count | value += 1 — a habit check / tally |
#goal+=N | add | value += N — deals, dollars, reps |
#goal-=N | subtract | value −= N — burn down a backlog / debt |
#goal=N | set | value = N — a reading; latest date wins |
x 2026-06-27 closed Umbrella — $110K #sales+=110000 x 2026-07-01 weigh-in #weight=85.5
Use = for an absolute you read off (self-correcting); += / bare for a running total; −= to burn down. The series of dated events is your trend — you never overwrite, you log the next one.
You don't write “lead” or “lag.” The keys + the operator decide it, and the kind decides how the fold is judged:
| the commitment… | is a… | value / verdict |
|---|---|---|
has repeat: | lead | fold of the window → count vs target, pro-rated |
has repeat:daily | habit | ✓ today + 🔥 streak |
uses =, or accumulates to a due: | lag | folded value → progress% vs clock% |
target:1 + due: | milestone | fold ≥ 1 ? done : days-to-due |
target: only | cumulative | fold all-time vs target |
Everything else you write is yours — unknown keys are ignored, so the format grows without breaking.
| key | meaning |
|---|---|
target:N | the bar — count to hit per window, or value to reach. Defaults to 1 (so a daily habit is just repeat:daily). Accepts Nh/Nm. |
value:N | the baseline the fold starts from (default 0) — e.g. value:90 for a weight, value:100 for a backlog |
repeat: | daily · weekdays · weekly · monthly · quarterly · yearly — the window the fold resets on |
due:DATE | the deadline (ISO YYYY-MM-DD) |
(A) marks the focus.A priority, exactly as in todo.txt — but on a goal it means the wildly important one: the goal you protect above the rest.
You never edit a “% done.” You log tasks; the board folds everything from (the events) + (the baseline) + (the targets) + (today's date). The file is a ledger, not a snapshot — which is why the history and the trend are free.
Weight loss, read top to bottom: a focused goal with its own lag, two recurring lead commitments, a milestone, and the dated tasks that move them. Nothing announces its type. You never updated a number — you logged your week.
you write this
(A) lose 10kg: 90 → 80 by Sep 30 #weight target:80 value:90 due:2026-09-30 @health stay under 1800 kcal #weight/deficit repeat:daily work out #weight/workouts repeat:weekly target:4 run the city 10k #weight/race target:1 due:2026-08-15 x 2026-05-01 weigh-in #weight=90.0 x 2026-06-01 weigh-in #weight=87.1 x 2026-06-27 weigh-in #weight=85.8 x 2026-06-26 gym — legs #weight/workouts x 2026-06-27 5k morning run #weight/workouts x 2026-06-27 under 1800 kcal #weight/deficit
you see this