Project
Roadmap
What has shipped โ up to the Pup ID, packs, the local AI Handler and the chat bot in 0.13.0, and the reworked Share in 0.14.0 โ the milestones that are the build order, and the game layers behind them. A direction, not a schedule.
On this page
The roadmap is the issues and milestones in the repository. This page is the readable version of them. It is a direction, not a sprint: horizons flex with energy and interest, and anything below can be reordered by a good argument on an issue.
Shipped
| Version | Date | What |
|---|---|---|
| 0.1.0 | 2026-09-13 | The engine, the Handler, the wheel, training with photo verification, stamped export with five layouts, recap cards, voice memos, undo, the export bundle |
| 0.2.0 | 2026-09-14 | One /settings page with the play pages kept clean, the dashboard actions row, the retroactive log (when on every write), one-tap photo check-in, the share sheet |
| 0.3.0 | 2026-09-14 | This guide, served by the app; issue templates for testers |
| 0.5.0 | 2026-09-19 | The health module: Apple Health and SparkyFitness steer the game |
| 0.6.0 | 2026-09-19 | The kit module โ gear, toys and consumables โ and the badge engine |
| 0.7.0 | 2026-09-20 | Share cards: three kinds, seven themes, badges on the card |
| 0.8.0 | 2026-09-20 | /progress with four tabs, inline-SVG charts and the Insight block |
| 0.9.0 | 2026-09-22 | Hosted mode: one instance, many profiles behind an invite-only login, each in its own database |
| 0.9.1 | 2026-09-22 | Beta surveys and the tester handbook |
| 0.10.0 | 2026-09-23 | The habits module: one tap, a timer, a Shortcut, or a calendar another app writes; the first module to declare egress |
| 0.11.0 | 2026-09-23 | The coach: the Handler judges every habit, rewards consistency, has a word when you slack, and Insight reads the same facts |
| 0.12.0 | 2026-09-25 | Playsets โ content from a file, data never code โ and events: a window, a sign, badges from a menu of rules. Locktober 2026 is the first |
| 0.13.0 | 2026-09-29 | The Pup ID and papers, consent and the safeword, packs (dens, collars, whitelists, countersignatures), your own AI Handler, AI kennels, and the chat bot |
| 0.13.1 | 2026-09-30 | A penalty held back on a recovery day is written once, not on every tick |
| 0.14.0 | 2026-10-04 | Share, reworked: Dense and Check-in layouts, the event stamp, post text with hashtags, in-place editing on a phone, presets |
| 0.15.0 | 2026-10-04 | Mischief: marks beside your XP that change how your Handler treats you โ lapse questions, the short leash, the doghouse, confessions โ and orders: training that names a habit, standing days, and Zoomies for doing something else |
| 0.16.0 | 2026-10-04 | Leave it: the habits you want less of โ limits from a menu, the nightly ledger, Dark days and Over the line, passes, and a streak that waits for yesterday to be decided |
| 0.16.1 | 2026-10-04 | A refused save keeps what you typed; log a bout from earlier in one form; Play and Wear said plainly; Progress loses "By activity" |
| 0.16.2 | 2026-10-04 | The nav is five menus โ a tab bar on a phone, dropdowns on a wide screen; the Share milestone header no longer overlaps itself |
| 0.18.0 | 2026-10-05 | Quests: a chapter carries a goal โ the want in your words, measured by a habit's own target, days locked or days reflected; the Handler carries it, the story and the keepsake say whether it was reached |
| 0.19.0 | 2026-10-11 | Talk to your AI Handler from the chat bot's room (!ask, a switch you turn on); verification challenges โ proof asked at a moment you did not choose; the calendar opens a day; a share card can carry your standing; the hosted demo |
| 0.19.1 | 2026-10-11 | Catch up: the missed reflections of the week answered late in one entry โ each Blank page becomes a Late page, no XP, the days stay blank |
| 0.20.0 | 2026-10-11 | Your Handler's profile: your AI Handler posts to a fediverse account of its own โ pride, exposure, photos you tick, your own words โ each post a draft you approve unless you hand that over too |
| 0.21.0 | 2026-10-13 | Hygiene from the room: !hygiene and !relocked in the chat bot's room, behind their own switch, and the bot asks "locked back up?" when a window runs out; ๐ Long soak, a Mischief mark for a window run past its time |
| 0.21.1 | 2026-10-18 | ai.keep_alive_minutes (blank = the cycle plus 10 โ a warm model between cycles) and a reply schema with one branch per action type, its keys and ranges, so an empty-shell action is ungrammatical |
| 0.22.0 | 2026-10-19 | Today's mantra, voiced: a 3โ5 minute wake and bed track rendered overnight by a local voice (latch-voice, opt-in), the voice chosen by ear; played to the end counts as recited; the bot can post the wake one |
| 0.23.0 | 2026-10-21 | Kennel Card: your pup homepage โ a Tag, your links, a Toy box and a Wishlist โ shown through views (one random link each, each its own ticks) and built as a static site you host anywhere; the box never serves it |
The milestones
M1 ยท Player surface โ
A play screen that is a game, settings that live elsewhere, retroactive logging so a game can start mid-stream, photo check-ins one tap away. Shipped in 0.2.0. One issue remains: the decisions only the maintainer can make (display name, licence, secrets to the password manager).
M2 ยท Share and install
- Stats-only share cards โ a card for the current state with no photo in it.
- Versioned releases and image publishing โ tags, a changelog you can trust, an image you can pull instead of build. Public registry when the maintainer says.
- An installer wizard โ Windows-98-style setup, pup aesthetic, for download and for disc.
- A DVD / ISO โ
make iso: an autorun disc with the image, the installer and this guide offline. Yes, really. - CI โ tests on every push, image build on every tag.
- A README for strangers, CONTRIBUTING, a licence.
M3 ยท Data and immersion
- โ
Health import โ the
healthmodule, shipped in 0.5.0: sleep, steps, mood and workouts steer the game through rules you tune. Local data only. - โ
Gear and toy tracker โ the
kitmodule, shipped in 0.6.0: what you own, what it is made of, what it cost, when it was used and what happened. Brought a badge engine with it (see below). - โ
Charts and insight โ shipped in 0.8.0:
/progressgrew four tabs, a chart primitive that draws gaps as breaks and refuses to invent a scale, and an Insight block whose observations are omitted unless they clear a sample floor and an effect floor. No charting library โ every coordinate is computed on your own box. - โ
Habits โ the
habitsmodule, shipped in 0.10.0: the work you said you wanted, logged with one tap, a timer or a Shortcut, or read out of the calendar a practice tracker or habit app already keeps. A late entry counts and earns no XP; a recurring calendar entry is a schedule and is skipped. 0.11.0 made the Handler read it: verdicts per habit, rewards for consistency, a talking-to for slacking, and Insight observations.
M4 ยท Bots
- A Matrix bot โ โ the chat bot, shipped in 0.13.0: reminders, today's duties and question, your AI's relay-safe lines and the safeword in a Matrix room of your own, without opening the web UI. One file, standard library only, a client of the API on its own scoped token; talks directly to your homeserver, never through a third party, and stops the moment its room could be read by anyone else. Still to come: media, and end-to-end encryption.
- The Handler as a local AI persona โ โ
the AI Handler, shipped in 0.13.0: a model
on your own hardware, in its own module, speaking a line a day and acting as
aionly under what you grant on Consent, capped per day, every action an event; in-app chat, where alone your reflections may reach it. โ AI kennels (0.13.0): a box whose Pup ID says it is an AI hosts a pack its model handles โ reading only what a Handler's kennel view shows, asking for at most three commands and a line per member, clamped to what each granted; see AI kennels. Still to come: its voice on Matrix.
M6 ยท Playsets
โ Shipped in 0.12.0: Playsets and events. What remains on the milestone: audio tracks in a playset (spec 2, with the player and the duty-of-care questions), signing (waits on M7), a public catalogue with a page on the site, and art from the badge forge for the shipped playsets.
M5 ยท Packs โ (the first version shipped in 0.13.0)
Federated Latch: a Handler's box hosting a pack, pups joining it with a collar tag, pack-mates on a board, a Handler asking for what the pup grants โ with every capability a grant the pup chooses and can revoke. Shipped: joining, collars, grants with item-by-item whitelists, the board and kudos, Handler commands, countersignatures, leaving, hosting and a den on its own listener โ see Packs and the design in Packs โ how federated Latch works. The AI kennel โ a pack whose Handler is a model on the operator's own Ollama โ shipped in 0.13.0 with the rest. Still to come: the Matrix and mesh pipes, pack play, mates cards sealed per mate (today the den relays them and can read them), a host's "close this pack" and a pup's "forget this pack".
M7 ยท Identity โ (the Pup ID shipped in 0.13.0)
A pup that is a keypair rather than a server: badges that travel as signed papers, the
collar as a first-class record with a start and an end, stray and collared as real states, and
handles bound to the key instead of the key derived from an account. Shipped: the Pup ID
itself โ the key, sealing, the recovery sheet, papers, pup.json, restoring a bundle and moving
boxes โ and, with packs, collars and countersignatures. Still to come: handles. See
Identity โ the pup, not the box.
Identity was numbered around a gap: the milestone depends on a badge engine to issue papers
about, and there was none. That engine now exists โ it arrived in 0.6.0 with the kit
module, in core/badges.py rather than inside kit, precisely so it could be built on.
A badge is already a durable record with a subject, a period and frozen evidence; what M7
adds is signing it and letting it travel. The gap in the numbering stays where it is.
M10 ยท The game (quests, wagers, rites, witness)
The 2026-10-05 design pass: the lock makes the wanting, the Handler aims it, the log proves it, the
pack witnesses it. โ
Quests shipped in 0.18.0 โ a chapter carries a goal. Still to come, each
its own issue: wagers (stake clock time on a habit target you wrote), sealed orders (training
written now, opened at a time or a tap), strictness that follows rank, a tap event kind
and scan surfaces on the den, Handlers as playsets (a persona in a file), rites (ceremonies
for first lock, first countersign, a hundred locked days), and pack play. The physical side โ
a collar tag and a tamper seal for the cage โ lives in latch-hardware.
The game layers behind the milestones
The milestones are the build order. These are the layers of the game they add up to:
- P2 ยท Game and training layer โ dice as a module, scheduled random events, โ achievements (the badge engine, 0.6.0), a hardcore mode (no self-unlock before time; an emergency key with a cost), streak rules, โ kit inventory (0.6.0), training goals with targets, headspace trend charts.
- P3 ยท Gallery โ albums, tags, page themes you curate, local AI tagging of photos (a local vision model, never a cloud one), a timeline scrubber, recaps with media.
- P4 ยท The Handler goes live โ โ the AI persona (0.13.0, M4).
- P5 ยท Devices and quantified self โ phone and watch notifications, Shortcuts for the share sheet, โ correlation with a personal health database (0.5.0) and โ a habit tracker โ or several, through their calendars (0.10.0).
- P6 ยท The share layer โ โ first slice in 0.20.0: your Handler's profile. The AI Handler posts to an account of its own (Mastodon's API first: GoToSocial, Mastodon and the like) from exactly the categories you grant โ pride, exposure, photos you tick, your own words โ each post a draft you approve unless you grant Post without asking. Optional, never hosted here. Still to come: Bluesky, a mesh network page, and a pack's Handler posting the same way.
What gates everything
Three rules no feature gets to bend:
- Class-P. Your data never leaves your box unless you grant it, item by item โ never to a cloud AI, and of your health data only one yes/no, to your own AI.
- The core makes zero outbound calls; a module says when it does not. The core contacts nothing. A module that reaches the network โ fetching a calendar feed, posting a card, fetching a playset โ declares it, and the app tells you before you enable it: optional, informed, per module. Habits is the first module to do so. A declaration is a statement, not a cage โ the app can say a module reaches the network, never that one cannot. Anything that leaves is still re-encoded with metadata stripped, and Class-P data (rule 1) never rides along.
- The log stays honest. Append-only, derived clock, undo voids and never deletes, late is marked late. A feature that needs to edit history does not get built.
Have an idea?
Feedback and issues โ suggestions are issues with the type/feature label.
The best ones say what you were trying to do, not just what you want added.
This page also ships inside the app, at /guide โ so your own instance always serves the guide for the version you are running, with the internet unplugged. Get Latch ยท Something wrong here? Tell me.