🐾 Handlr ?

Guide β€Ί 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.

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 (handlr-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
0.24.0 2026-10-21 Kennel Card publishing: a diff of what each link's holders will see before you publish, take-down pages for old and deleted links, QR codes and a printable card, and the optional kennel host (a read-only nginx serving only the published folder)
0.25.0 2026-10-21 Kennel Card trust: a Stats block and a Trophy case under the same rules packs follow, opt-in signed pages (manifest.sig, checked by tools/kennelcard/verify.py), and a toy-box share card
0.26.0 2026-10-21 Kennel Card reading: keep a checked copy of another pup's card (signature and first signer remembered), the module's first egress, and a DNS-rebinding fix for every hosted fetch
0.27.0 2026-10-21 Kennel Card for your pack: one view each for your Handler and your mates, signed and sent through the den, gated by a new consent grant and cut down to the other grants, withdrawn by the safeword
0.31.0 2026-10-22 Kennel Card Handler's picks: your AI or pack Handler proposes a ⭐ or a note on an item, and it shows on your card only after you say yes
0.32.0 2026-10-23 Latch is now Handlr: the package, the words, the images and the HANDLR_* settings change; nothing on disk does, and the old names are read as aliases until November 2027

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 health module, 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 kit module, 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: /progress grew 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 habits module, 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 ai only 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 Handlr: 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 Handlr 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:

  1. 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.
  2. 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.
  3. 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 is docs/roadmap.md in the repo. Spotted a mistake? Tell us how to report it β†’