Planner format

One JSON object describes one week. The Weekly Planner skill, the offline dashboard.html, and the online planner all read and write it.

  • The skill saves it as skillplug-state/planner/week-plan.json.
  • The offline dashboard reads it from planner/dashboard/planner-data.js as window.SKILLPLUG_PLANNER_DATA = { ... };
  • Both planners export it with More, then Export a backup and load it with More, then Import a plan.

The planners are forgiving: unknown fields are ignored and missing ones get defaults.

Example

week-plan.json
{  "schema": "skillplug-planner/1",  "updatedAt": "2026-10-19T07:05:00-05:00",  "source": "agent",  "title": "My cardio block week",  "weekOf": "2026-10-19",  "focus": "Finish the cardio block with daily Anki and 40 questions a day.",  "countdowns": [{ "id": "c1", "label": "Cardio block exam", "date": "2026-10-30" }],  "goals": [{ "id": "g1", "text": "200 cardio questions", "done": false }],  "sections": [    {      "id": "mon",      "kind": "day",      "title": "Monday",      "date": "2026-10-19",      "color": "sky",      "tasks": [        { "id": "t1", "text": "Anki reviews", "done": false, "tag": "anki", "mins": 45, "carried": false, "carries": 0 },        { "id": "t2", "text": "20 cardio questions, tutor mode, full review", "done": false, "tag": "qbank", "mins": 60, "carried": false, "carries": 0 }      ]    },    { "id": "dump", "kind": "list", "title": "Brain dump", "date": null, "color": "zinc", "tasks": [] }  ],  "tags": [{ "id": "anki", "name": "Anki", "color": "violet" }],  "notes": "",  "history": [{ "weekOf": "2026-10-12", "done": 31, "total": 38 }],  "settings": { "showWeekend": true, "compact": false, "layout": "grid", "widgets": { "countdown": true, "progress": true, "focus": true, "notes": true } }}

Top level

FieldTypeNotes
schemastringAlways "skillplug-planner/1"
updatedAtstringISO time of the last change. The newer copy wins on open.
sourcestring"agent" from the skill; exports say "dashboard" or "web"
titlestringWeek name shown at the top
weekOfstringThe Monday, YYYY-MM-DD
focusstringOne sentence: what makes this week a win
countdownsarray{ id, label, date }; the first is shown big
goalsarray{ id, text, done }, 1 to 3 measurable goals
sectionsarrayDays and lists, in display order
tagsarray{ id, name, color }
notesstringFree text, up to 5,000 characters
historyarrayPast weeks { weekOf, done, total }, newest last, at most 12 (drives the chart)
settingsobjectshowWeekend, compact, layout ("grid" or "columns"), and widgets

Colors: sky, periwinkle, indigo, violet, amber, rose, teal, orange, zinc. Older plans that use lime open as sky.

Sections

FieldTypeNotes
idstringStable id, kept across updates
kindstring"day" (has a date) or "list" (for example Brain dump, Patient topics, Life admin)
titlestring"Monday" or any name you chose. Agents never rename what you renamed.
datestring or nullYYYY-MM-DD for days, null for lists
colorstringOne of the colors above
collapsedbooleanOptional
tasksarrayTasks in order

Tasks

FieldTypeNotes
idstringStable id, so checkmarks survive updates
textstringVerb, amount, and scope, up to 300 characters
donebooleanChecked off
tagstring or nullA tag id (defaults: anki, qbank, lecture, review, clinical, life)
minsnumberEstimate in minutes, 0 if none
carriedbooleanMoved from an earlier day
carriesnumberTimes carried. Two or more means shrink or drop it.

Rules for agents

  1. Import the latest export before writing.
  2. Keep ids stable. Change done, text, or order instead of recreating tasks.
  3. Valid JSON only: double quotes, no comments, no trailing commas.
  4. No patient identifiers, passwords, or exam IDs in any field.
Previous
Sync API