Changelog

New features, fixes, and improvements

List Timeline, Bulk Actions & Sync You Can Trust

Every list now has a timeline: activity across the whole list, grouped by calendar day and written as accomplishments — what got done, what moved, and who did it, in one readable stream. Cascading changes name their cause (“closed because its parent closed”), rapid-fire edits merge into one line, and archived history is folded in so the story doesn’t stop where the archive begins.

Do more at once

Bulk actions arrived: update or archive many todos in one call, select them by filter, and preview the selection with a dry run before anything changes. Archiving also got a cleaner rule — it’s decided at the root todo, and the whole subtree rides along.

Sync that refuses to lose your work

This release hardens the local-first write path end to end. If the server rejects one change, that change is quarantined on its own — with a visible notice, a count of what’s waiting behind it, and a manual retry — instead of silently wedging every write after it. Changes that depend on a quarantined row wait for it; everything else flows around. Rows that left your view while a device was offline are reconciled away on the next boot, queued writes flush before sync starts so nothing races, and a self-diagnosing error overlay can tell you which layer is down — readable even from a phone. If the API has a bad day, your edits wait it out and land when it’s back.

The app keeps itself fresh

When a new version deploys, open tabs now show a reload prompt — no more running last week’s app in a forgotten tab. Signing in takes you straight to your last workspace, the loading spinner stays continuous across the page load, and on wide screens the Space-toggled todo preview docks beside the list instead of covering it.

Quicker in the hand

Press H to open the palette in recently-visited history mode. Palette search now reaches the archive, and rows show their state icon. Sort and group menus flip direction by clicking the active option, and refuse each other’s field so you can’t group and sort by the same thing. On mobile there’s finally a proper tappable create button. And ct learned to work fully offline — reads and writes both — with a browser-approval login flow that never makes you paste a key.

Improvements
  • Workspace settings gained a Memory tab for the facts agents have saved
  • An opt-in preference wraps long todo titles instead of truncating them
  • Timeline rows wrap long text, in lists and on the detail page
  • The state icons were re-cut with the motion grammar of the retired engine — crisper at every size
  • Status marks honour their stored colour as a flat accent tint
  • Group and sort drops log the moved todo’s attribute change in its activity
  • The create-todo button hints its hold menu and leads with “Create more”
  • Subtodos inherit their parent’s list automatically
  • Preferences are grouped under Account in the settings sidebar
  • Archive opens instantly with skeleton rows
  • Big performance pass: list switches, archived lookups, and activity queries are all noticeably faster
Fixes
  • Rapid successive edits are never dropped by the stale-write guard
  • A synced row no longer discards a pending local edit it can’t outrank
  • Deleting a todo waits for its undo toast to close, so undo always works
  • The confirm-before-delete preference is honoured again
  • Escape in the subtodo filter stays in the filter; Mod+Z in a text field stays native undo
  • The due-date and recurrence panels open from the keyboard
  • Recurrence now closes the completed todo and spawns the next one — no more open twins
  • Archived todo pages no longer blank out, and archive requests pin their workspace
  • The filter bar survives the list → todo → back round trip
  • Your view preferences survive a no-op view change

A New Face, Recurring Todos & Agent Memory

createtodo has a new identity. The brand now sits on a Forest green ramp, anchored by a tiled check mark that carries through the favicon, the PWA icons, and the app itself. Every workflow state got its own hand-drawn icon in a refined ten-state set, animated with a morph when a status changes and a staggered check-in whenever anything lands on done. Colours across the app were rebuilt as nature-anchored families — bark, birch, forest, and friends — used by labels and statuses alike, with named swatches in the picker. Status glyphs default to your text colour; colour is opt-in per status, so the list stays calm until you decide otherwise.

The website was redesigned to match: an editorial layout, light and dark, a proper /docs section, and an /agents page documenting the MCP server, the ct CLI, and the agent skill.

Todos that come back

Recurring todos are here. Complete a recurring todo and the next occurrence spawns itself, on the schedule you set — and monthly recurrences keep their anchor day, so “the 31st” doesn’t drift to “the 28th” after February. The recurrence selector got a proper polish pass along the way.

Subtodos, your way

Each list can now show subtodos nested, flat, or hidden — pick per list. A todo can no longer be closed while its subtodos are still open, and adding a subtodo to a closed todo reopens it, so a parent’s checkmark finally means what it says. Per-todo collapse state is remembered per view, per person.

Agents that remember

The agent side took another leap. A new memory store lets agents save and recall workspace facts with full-text search — decisions, conventions, context that outlives a single session. Description edits made through the MCP now stream live into open editors, server-side, so you can watch an agent write. Read-only API keys with server-enforced scope let you grant lookup access without granting edit access, and the ct CLI learned to bind a repository to a list, with branch awareness.

Improvements
  • Descriptions are persisted locally, so they survive offline reloads
  • Show-completed and collapsed groups are remembered per view, and follow you across devices
  • Todo titles are capped at 255 characters, enforced everywhere — input, server, and MCP
  • Subtodo sort is a workspace-wide preference, with an alphabetical option
  • Label-selector colours render as tile swatches with names on hover
  • Switching sort adopts that sort’s natural direction
  • Trash restore surfaces server errors in toasts instead of failing silently
Fixes
  • A recoloured status no longer loses its colour mid-animation
  • Collaborative editing sessions fully tear down on release
  • Saving a description keeps <, >, and & literal
  • Stale collapsed-group keys are pruned as they’re written
  • The activity feed no longer overflows the page column
  • Logged-in visitors reach website pages correctly instead of being routed into the app

Install It, Talk to It & the ct CLI

createtodo is now a PWA. Install it from the browser and it opens like a native app, complete with an offline-first service worker — your todos are there even when the network isn’t. Under the hood, each workspace now gets its own local database with automatic cleanup of ones you no longer use, and leader election between tabs was stabilized so background tabs stay quietly in sync instead of fighting for the wheel.

ct — createtodo from the command line

Meet ct, the new CLI. List, create, claim, and close todos without leaving the terminal — the same workspace, the same identifiers, the same todos you see in the app. It ships alongside a new OAuth flow for the remote MCP server, so you can connect createtodo to claude.ai as a connector and let an agent read and write your workspace securely.

Due dates that speak your language

The due-date input now understands natural language — and not just “tomorrow”: weeks, months, quarters, and years all parse. It sits right at the top of the popover and the context menu, focuses instantly, and the chip text rolls over like an odometer when a date changes. Overdue todos show their actual date with a red alert calendar instead of a vague “Overdue”.

Conversations on todos

Comments grew up into real discussions: threaded replies and emoji reactions, on an activity feed rebuilt from the ground up. A new actions menu on each comment keeps edit and delete one click away.

Find, preview, glide

Find in view filters the current list from the actions menu, with a proper input group and close button. Hovering a todo shows a preview card rendered like the real detail page, and on the detail page, Space toggles a subtodo preview without leaving the keyboard. You can also group by label now, and a new hold-slide-release gesture lets you press a row’s property menu, slide to an option, and release to pick it — one motion, no clicks.

Improvements
  • Creating a todo surfaces the list’s description as a conventions reminder
  • Right-click or long-press the create button to choose what happens after create
  • Status groups now order In Progress → Todo → Done → Backlog
  • Todo rows reserve the widest identifier’s width, so columns stop wiggling
  • Typing -- becomes an em dash in titles and descriptions
  • The todo timer rolls like the breadcrumb counter, at minute resolution
  • Same-minute activity runs are netted out, so the timeline shows what changed, not every keystroke of it
  • Assignee, label, and priority chips share one symmetric enter/exit animation
  • Markdown task lists render with real checkboxes instead of bullets
  • MCP and ct can filter todos by parent and label
Fixes
  • Switching lists no longer flashes the previous list’s sort order or the previous todo’s activity
  • Group and sort changes apply optimistically, instantly
  • Escape blurs a focused field before it closes the todo page
  • Shape streams keep syncing while the tab is hidden
  • Safari no longer gets stuck on phantom local-database locks
  • The description editor stopped duplicating typed content on reload
  • The subtodo chevron rotates as one icon instead of crossfading

Blockers, Agent Handoffs & One Archive

This release makes createtodo genuinely dependency-aware. Todos can now block each other: wire up a blocking relation and the app understands the order your work has to happen in. A new ready filter shows only todos with no unresolved blockers — the things you can actually start right now — and when you complete a blocker, createtodo announces which todos just became unblocked. Cycles are refused before they can form, both in the app and through the API, so your dependency graph always stays a graph.

Built for agents working alongside you

If you point an AI agent at your workspace, this is the release where it becomes a real collaborator. Todos gained structured fields — acceptance criteria, design notes, and free-form notes — so “done” has a definition an agent can check itself against. A new needs-human flag gives agents an explicit way to hand a question back to you instead of guessing. And a workspace_health report surfaces stale, orphaned, and under-specified todos, so the workspace an agent reads is the workspace you actually meant. The MCP server (now at 0.14) also learned compact paginated lists, description previews, relative date filters like “due this week”, and warns when a freshly created todo is too thin to act on.

Archive and trash, together at last

Archived and deleted todos now live in one tabbed view instead of two separate pages. Same breadcrumb, same layout, one place to look when something’s missing. Auto-archive also got an important fix — it was scoped wrong and never actually ran; completed todos now genuinely move themselves out of the way on the schedule your workspace sets.

Faster to move around

Press 1–9 to jump between lists from anywhere. A new per-view Show blocked toggle hides everything you can’t start yet. And the todo-page position indicator now counts within your current sibling group rather than the whole list, so “3 / 8” means what you’d expect.

Improvements
  • Due-date changes are now undoable, like moves and status changes before them
  • “Edit todo” joined the right-click context menu
  • Status settings were rebuilt Linear-style, with a backlog state type and an icon picker
  • Deleting a status now reassigns its remaining todos instead of stranding them
  • Detail-page sections are collapsible, with an animated chevron
  • Richer activity-timeline indicators and a restyled shadcn-marker look
  • Label chips were redesigned with size variants and tidier spacing
  • Completed todos animate out of the list, with a “N hidden” count left behind
  • Subtodo indent guides got rounded caps and flush alignment
  • “Add subtodo” is now “Create subtodo”, matching the rest of the app
  • Pure-white light-theme background
Fixes
  • Reparenting a todo now re-renders the list live
  • Blocked detection on the client agrees exactly with the server’s ready semantics
  • Rate limiting was consolidated and hardened across the API and MCP
  • The archive/trash empty states are vertically centered and inherit no stray prose margins
  • Breadcrumb header text is no longer selectable
  • On mobile, “create more” refocuses the title field immediately

Drag & Drop Rebuilt, Nested Paths & Resilience

Drag and drop has been rebuilt from the ground up on a single new engine that powers both the list page and the detail page. Drag a todo sideways to nest it under a sibling, drop it into another group and it picks up that group’s status, priority, assignee, or due date on the way in. The ghost follows your pointer faithfully, stays styled at the window edges, and Escape cancels the whole move mid-flight. Grouping by due date even works kanban-style — drop a todo into “Next week” and its date updates itself.

Your Inbox, your views

Inbox is now a true virtual view with its own per-user preferences. Sort order, grouping, and filters are remembered per list and per person, follow you between devices, and Inbox always stays pinned first. Archiving also takes care of itself now — completed todos move out of the way on their own, so there’s no manual archive button to remember.

URLs that mirror your tree

Todo pages now use nested paths: the address bar reflects the full chain from list to parent to subtodo, however deep you go. The breadcrumb renders every ancestor along the way, and hovering an ancestor shows a card with its status, identifier, and full title — no more guessing what a truncated crumb says.

Fly through the workspace

Press ↑/↓ (or j/k) on a todo page to step to the previous or next todo in exactly the order you left the list — your sort, your filters. A position indicator (4 / 59) shows where you are, on both detail and list pages. Mod+F filters subtodos right on the detail page, a new shortcuts dialog in the avatar menu lists everything your keyboard can do, and on touch you can long-press a status checkbox to open the full status menu.

Built to ride out bad networks

This release puts serious work into local-first resilience. The description editor now works fully offline. If the API has an outage, queued writes recover on their own once it’s back, and a visible indicator tells you when changes are still waiting to sync. If the local database ever gets wedged, the app surfaces a recovery screen with a “Reset local data” escape hatch, and stale local databases from older schema versions are cleaned up automatically. Deleted todos are purged after a 30-day retention window.

A leaner MCP

The MCP server got a major cleanup, published as @createtodo/mcp v0.10.0. Responses are flat and compact, with human-readable identifiers instead of UUID noise, todos can be filtered by keyword and date, and get_todo can embed relations — so agents see your workspace the way you do.

Improvements
  • Group by due date with preset and dynamic buckets, fully drag-and-drop enabled
  • Subtodos on the detail page can be drag-sorted and have their own sort-order selector
  • The “N hidden” count on the detail page is now clickable — reveal completed subtodos for one todo without touching your global setting
  • Completed-todo visibility filters gained “This week” and “This month” options
  • Canceled todos render with a line-through in lists and on the detail page
  • Labels got their colors back, shown as tinted dots on todo chips
  • Date chips show a calendar icon when a due date is urgent
  • Selectors persist across “create more” in the create-todo dialog
  • Comments can be added and deleted with undo/redo support
  • The activity timeline groups entries by calendar day and merges rapid-fire edits
  • Buttons, focus rings, and dark-mode input borders got a design refresh — outline buttons no longer sink into dark cards
  • Hover colors were unified across menus, rows, and buttons under one token
  • Dragging a group header is restricted to vertical movement, so groups can’t wander sideways
Fixes
  • Escape during a drag now only cancels the drag — it no longer also closes the todo page
  • The drag ghost keeps its rounded corners and shadow when dragged to the window edge
  • Inbox stays pinned first when reordering lists
  • New todos get their position assigned server-side, so simultaneous creates can’t collide
  • Duplicate sibling positions are compacted automatically on drop
  • Rapid status-icon clicks cycle from the optimistic state instead of skipping steps
  • The description editor no longer round-trips its own content or mangles paragraphs that start with markdown syntax
  • Dismissing the command palette with Escape keeps you on the todo page
  • Trash flow hardened: deleting a list cascades correctly to its todos
  • Copy as Prompt works on iOS
  • Activity history and relations sync reliably again and are included in pending-sync checks
  • Partial updates through the API no longer clear unspecified fields
  • The loading overlay waits for your view preferences, so lists don’t flash the wrong sort order