Intentions · the Intentions Format

Every hour is for something.

An open format for what a person means to do with their time. An intention carries a duration, a window and a reason, and it is flattened to a slot only when it must be. Written and read by AI harnesses, reviewed by people through git.

Get started Read the spec

The slot and the triad A calendar stores a slot: a start and an end, invented on Tuesday and moved four times. This format stores a triad: a duration of ninety minutes, a window of this week, and an intention to draft the budget narrative, which is in order to send the board pack, for the sake of being someone the board can rely on. The triad becomes a slot only when it must. a calendar stores this format stores Tue 14:00 – 15:30 budget narrative · tentative invented on Tuesday, moved four times tells nobody anything DURATION 90 minutes WINDOW this week INTENTION draft the budget in order to send the board pack for the sake of being someone the board can rely on a slot, only when it must
How long, within what bounds, and what for. The slot comes last.

After Heidegger on datability: a “now” is never bare. It is always “now, that…”, a time for something. Being and Time, §79.

One plan, two fates

Ninety minutes on the budget, sometime this week, before the board pack goes out. The duration is known, the window is known, the reason is known, and the slot is not. What does your calendar do with that?

One plan, two fates In a slot-based calendar, a tentative block is invented on Tuesday at two, moved to Wednesday, moved to Thursday, and by the time it settles nobody knows what it was for or whether it still fits. In this format the same plan is an intention with a duration, a window and a reason. Resolution ranks candidate placements against the person's declared availability, the person selects one, and the placement carries its reason with it. a slot-based calendar intentions Tue 14:00 · budget a slot, invented moved Wed 10:00 · budget something came up moved Thu 15:00 · budget fourth move · still tentative nobody knows what it was for, or whether Thursday still fits 90 min · this week · deep work in order to send the board pack resolved against your supply candidate placements, ranked by how much each would disturb you choose Thu 09:00 – 10:30 · placed the reason travels with it a recorded act · yours if Thursday stops fitting, the format can say so, because it knows what for
The same plan, in a calendar that stores slots and in a format that stores what the slot is for.

A slot says when. An intention says how long, within what, and what for.

iCalendar & JSCalendar

A start and an end, into which events are placed. The right picture for the moment two people must meet, and the wrong one for nearly everything before that moment.

Scheduling assistants

Built on the same picture. They find a slot for a meeting. What a person has before the meeting is fixed has no representation to search.

The tentative block

A slot pretending not to be one. It has to be invented to exist at all, and every move strips a little more of the reason it was made.

Whose calendar is it?

The same calendar can be the scaffold of a person’s own resolve or an accretion of other people’s claims on their time, and the artifact looks identical either way. Here every object says who wrote it, and what each writer may do is not the same.

Who may do what Three columns. You may intend, make an intention firm, select a placement, and acknowledge a flag. Your harness may draft, rank and flag, and may firm or select only under a policy you hold. Another party may accept or decline, their own entry only, and their answer arrives by import. Beneath all three: every object says who wrote it, and no flag is a decision. you intend — on your own word make firm — resist reconsidering select — a recorded act acknowledge — a flag, and go on or a policy you hold does, in your name your harness draft — an intention, for you rank — candidates, choosing none flag — what fails to hang together firm or select — only under a policy you hold, and it says which another party accept or decline their own entry, and only theirs their answer arrives by import, never by anyone speaking for them a party not tracked here constrains nothing every object says who wrote it no flag is a decision
A harness may draft. It may not intend, and it may not answer for anyone.

It ranks. It flags. It never chooses.

Resolution matches an intention’s demand against the availability of everyone and everything it needs, and returns candidate placements ranked by how much existing intention each would disturb. Selection is a recorded act by the person, or by a policy the person holds. A commitment appears only where another party is involved. A clash is a flag: surfaced, never decided.

From intention to placement An intention, which is demand, and availability, which is supply, enter resolution. Resolution produces candidates, ranked. Selection is the person's act or a policy they hold, and produces a placement. Where another party is involved the placement becomes a commitment, with a status per party that only that party may change. Beneath the pipeline, flags: a clash, a gap in supply, a lapsed statement, a party who declined. Each is reported, acknowledged or not, and never acted on by the software. intention demand availability supply resolution a function candidates ranked, none chosen you placement a recorded act only if a party is involved commitment a status per party, theirs alone flags a clash · a gap in supply · a lapsed statement · a party who declined each is reported, acknowledged or not, and never acted on by the software
Resolution is a function. Selection is an act. Flags are neither.
Before the moment, the moment, after the moment Three boxes in a row. Before the moment: this format, holding duration, window, reason, availability and resolution. The moment: iCalendar or JSCalendar, which a commitment links to as one external object. After the moment: the Dialectical Knowledge Format, where a claim cites an object here by id and version. Each composes with the next by reference, not by shared schema. before the moment the moment after the moment intentions duration · window · reason availability · resolution this format a commitment links to one event iCalendar · JSCalendar the fixed slot, when two people must meet composed with by reference a claim cites an object at a version Dialectical Knowledge Format what actually happened, and what was learned particulars.fyi
This format is for the time before a slot exists. The slot is iCalendar’s. What happened afterwards is a DKF claim.

Read by a second reader

A first implementation was written from the specification alone and raised thirteen issues where the text was ambiguous or silent. All thirteen are settled in the text as it now stands, four of them differently from what the implementation chose. Below is that binary’s own output on the example workspace in this site’s repository: one week of declared availability, one commitment already placed and declined by the other party, and every candidate placement it ranked for ninety minutes on the budget.

Every candidate the binary ranked A week grid. Shaded bands are the availability the person declared. A box is a commitment already placed, marked where a party has declined. Bars are the candidate placements the binary ranked for the budget intention: solid where the candidate disturbs nothing, dashed where it would displace a commitment the person still holds. September 2026 Mon 21 Tue 22 Wed 23 Thu 24 Fri 25 Sat 26 Sun 27 09:00 12:00 15:00 18:00 availability: Deep-work mornings · 09:00/12:00 · FREQ=WEEKLY;BYDAY=TU,TH · good for deep-work · capacity PT3H per occasion availability: Deep-work mornings · 09:00/12:00 · FREQ=WEEKLY;BYDAY=TU,TH · good for deep-work · capacity PT3H per occasion availability: Weekday afternoons · 13:00/17:00 · FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR · good for anything · capacity PT4H per occasion availability: Weekday afternoons · 13:00/17:00 · FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR · good for anything · capacity PT4H per occasion availability: Weekday afternoons · 13:00/17:00 · FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR · good for anything · capacity PT4H per occasion availability: Weekday afternoons · 13:00/17:00 · FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR · good for anything · capacity PT4H per occasion availability: Weekday afternoons · 13:00/17:00 · FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR · good for anything · capacity PT4H per occasion rank 1 · 11 candidate starts from 13:00 to 15:30 on a 15-minute grid · displaces nothing · supply: Weekday afternoons rank 1 · 7 candidate starts from 09:00 to 10:30 on a 15-minute grid · displaces nothing · supply: Deep-work mornings rank 2 · 8 candidate starts from 13:00 to 14:45 on a 15-minute grid · would displace One-to-one with Priya (still held by the person) · supply: Weekday afternoons rank 1 · 3 candidate starts from 15:00 to 15:30 on a 15-minute grid · displaces nothing · supply: Weekday afternoons rank 1 · 11 candidate starts from 13:00 to 15:30 on a 15-minute grid · displaces nothing · supply: Weekday afternoons rank 1 · 7 candidate starts from 09:00 to 10:30 on a 15-minute grid · displaces nothing · supply: Deep-work mornings rank 1 · 11 candidate starts from 13:00 to 15:30 on a 15-minute grid · displaces nothing · supply: Weekday afternoons rank 1 · 11 candidate starts from 13:00 to 15:30 on a 15-minute grid · displaces nothing · supply: Weekday afternoons commitment: One-to-one with Priya · Tue 14:15–15:00 · Ada tentative; Priya declined · flagged: https://example.com/people/priya (a counterparty) has declined while int_01a0b732-5709-70e2-adcd-c4454fbd12b4 is still placed at 2026-09-22T14:15:00+10:00 One-to-one ! 11 rank 1 10 rank 1 · 8 rank 2 11 rank 1 18 rank 1 11 rank 1 no supply no supply declared availability candidate, disturbs nothing candidate, would displace a commitment commitment already placed ! a party declined: flagged, not decided 69 candidates considered · drawn by intentions 0.11.0
The week of 21 September 2026, as the binary ranks it. Priya has declined the one-to-one; the person has not, so the hour still counts as theirs and any candidate over it ranks second. Hover a bar for the output it was drawn from. Clone the workspace and run it yourself.

Start in your terminal

Install the CLI, make a workspace, and teach your agent the discipline: draft an intention, declare the supply, let the binary rank, and choose yourself.

$ brew install nodelogicau/tap/intentions
$ intentions init ./plans --author you --subject you
$ intentions skill install
$ intentions availability add --subject you --title "Mornings this week" \
    --calendar this-week --clock 09:00/12:00 --duration PT3H
$ intentions intention add --title "Draft the budget narrative" \
    --duration PT90M --calendar this-week
$ intentions resolve <id>
$ intentions select <id> --candidate 1

From there, your agent does the bookkeeping: the installed skill teaches it the verbs, every file it writes says it wrote it, and nothing becomes firm without you.

Today: an early draft of the specification with a first implementation, the agent skill, and a local MCP server — the .mcpb bundle for Claude Desktop, or intentions serve --mcp for any client.  ·  Deferred, deliberately: federation between workspaces, presence, and a retrospective record, which is DKF’s job.