← Back to SNR

Working with an assistant

Last updated: Format version 2

SNR can hand your lists, tasks and day to an AI assistant, and take back whatever it gives you. This page is the format that travels between them — generated from the app's own parser, so it cannot describe something SNR would refuse.

How it works

1. Share. In SNR, share a list — or your whole day from the Notes masthead — and you get a block of text on the clipboard.

2. Ask. Paste it into ChatGPT, Claude or anything else, and ask for what you want: split this block, make it fit an hour, turn this into a morning routine.

3. Paste it home. Copy the reply — all of it, prose and code fence included — and paste it into SNR under Import. You see exactly what will change before anything is saved.

Lists you sent carry their identity with them, so an edited list replaces the one you sent rather than arriving as a second copy of it. That is the difference between a round trip and a mess.

Check a reply

Paste an assistant's answer here to see what SNR would make of it. This runs the app's real parser in your browser — nothing is sent anywhere.

What SNR sends

Sharing a list and a task produces exactly this:

{
  "v": 2,
  "app": "snr",
  "kind": "mixed",
  "chains": [
    {
      "v": 2,
      "id": "chn_7f2a",
      "title": "Morning block",
      "items": [
        {
          "id": "itm_1",
          "title": "Clear the inbox",
          "mode": "focus",
          "minutes": 25
        },
        {
          "id": "itm_2",
          "title": "Stretch",
          "mode": "break",
          "minutes": 5
        },
        {
          "id": "itm_3",
          "title": "Write the hard paragraph",
          "mode": "focus",
          "minutes": 50
        },
        {
          "id": "itm_4",
          "title": "Water the plants"
        }
      ]
    }
  ],
  "tasks": [
    {
      "id": "tsk_9c11",
      "title": "Draft the quarterly note",
      "mode": "focus",
      "note": "Start from last quarter’s outline.",
      "duration": 45,
      "schedule": {
        "triggers": [
          {
            "kind": "hint",
            "group": "morning"
          }
        ]
      },
      "deadline": "2026-08-14T17:00:00.000Z",
      "signal": 80
    }
  ]
}

What SNR accepts

Assistants reply in prose, usually wrapping the data in a code fence. SNR is built for that: it finds the block inside the chatter, so you can paste the whole answer without tidying it first.

Sure — I've split the long block in two and added a break.

```json
{
  "v": 2,
  "chains": [
    {
      "id": "chn_7f2a",
      "title": "Morning block",
      "items": [
        { "id": "itm_1", "title": "Clear the inbox", "mode": "focus", "minutes": 25 },
        { "title": "Read one paper", "mode": "focus", "minutes": 30 },
        { "title": "Walk", "mode": "break", "minutes": 10 }
      ]
    }
  ],
  "tasks": [
    { "title": "Book the venue", "mode": "focus", "duration": 15 }
  ]
}
```

Want me to move the walk earlier?

Run through the app's parser, that yields 1 list and 1 task:

  • Updates the list “Morning block”, 3 steps.
  • Creates the task “Book the venue”.

Note the second and third steps have no id: they are new, so they are added. The first keeps its id, so it stays the step it was.

The fields

Everything here is tested against the parser. A field cannot appear in this table unless SNR really honours it.

On a list

  • title required
    The name of the list. A chain without one is dropped.
  • id optional
    Present means "this is the list I sent you". The app updates that list in place instead of making a second copy of it. Remove it to hand someone a fresh copy.
  • items required
    The steps, in order. Having an items array is what makes something a chain rather than a task.

On a step

  • title required
    What the step is.
  • id optional
    Keeps a step attached to the one it came from, so editing its title changes that step rather than replacing it.
  • mode optional
    "focus" counts down, "sprint" counts up, "break" is a rest. Leave it out for an untimed checkbox.
  • minutes optional
    How long a countdown step runs. Ignored for sprint, which has no length.

On a task

  • title required
    What the task is. Anything without an items array is read as a task.
  • id optional
    Updates that task in place rather than creating another one.
  • mode optional
    Which timer the task wants when you start it.
  • note optional
    A line of context that travels with the task.
  • duration optional
    How many minutes you expect it to take. An assistant may set or adjust this.
  • schedule optional
    When it should surface. A "hint" trigger names a loose part of the day and nudges you gently; an "at" trigger is a precise weekday and time, and arrives as a notification. Add "weekdays": [1,2,3,4,5] to either to restrict it. Checked on the way in, so a malformed rule is dropped rather than stored.

Sent, but never read back

Some of what SNR sends is there so an assistant can reason well, and is deliberately ignored on the way home. It travels as a passenger.

  • deadline
    When the task is due, so an assistant can order your day sensibly.
  • signal
    How much this matters, 0–100.
  • day
    A picture of your whole day — what you wrote, your sessions, your lists.

This is a safety property rather than an omission. Your day cannot come home. The importer reads lists and tasks and nothing else, so however an assistant echoes your writing back at you, it can never turn into a note you did not write.

If the format grows

The format is versioned — this is version 2 — and unknown fields are ignored rather than rejected. An older copy of the app can read something a newer one wrote; it simply skips what it does not know.