Lotti gives you a private logbook and a staff of personal AI assistants to go with it. Record your day the way it actually happens — tasks, tracked time, voice notes, transcriptions, journal entries, habits, and health data — and long-living agents read what you record, keep it summarised, remember the context you would otherwise lose, and propose the next step. Agents suggest, you decide: every proposed change waits for your approval, with one small exception — an initial title or language for an otherwise empty task.
All of it happens on your own devices. No server ever holds your data in readable form: multi-device sync is end-to-end encrypted, and the relay between your verified devices holds only ciphertext — not forever, and nothing depends on it keeping anything. There is no telemetry. On capable hardware the AI models run locally too, so your data never has to leave the machine; on lighter hardware, or to save battery, you route inference — per life category — to a cloud provider you choose. Your logbook is ordinary SQLite on your own disk with attachments in ordinary files beside it, readable without Lotti, so there is nothing to export and nothing to unlock.
Under the hood, sync runs over Matrix using Vodozemac (Rust) for Megolm crypto; the homeserver relays only ciphertext between your own devices, and encryption keys reach only devices you have verified. A new device catches up because your other devices re-send history, not because a server stored it.
Get support and join the Lotti community on Discord via the Contact link.
What it does:
- Long-living AI agents (mission, soul, report directive) that read your logbook, propose changes, and only act after you approve
- Two-database architecture: a strict separation between your facts (the user database) and what the agents think (the agentic database), enforced on disk
- Run reasoning-capable models locally via oMLX or Ollama (e.g. Qwen 3.6 35B A3B, a Mixture-of-Experts model with ~3B active parameters) — or use Gemini Flash, OpenAI, Anthropic, Mistral, Melious.ai, or any OpenAI-compatible cloud provider, on a per-category basis
- Local voice transcription with Whisper or Voxtral; cloud transcription via Gemini, OpenAI, Mistral, or Melious.ai
- AI-generated cover art for tasks via Nano Banana Pro on Gemini, OpenAI, or Qwen, and Flux on Melious.ai
- Both the logbook and the agentic state sync end-to-end encrypted
- Habit tracking with success/fail/skip completion types, custom measurables, and dashboards
- Bring-your-own API keys for cloud providers, choosing per category where inference happens — EU-hosted, US, Chinese, or entirely on your own machine
- Usage & Impact: tokens and requests for every cloud AI call, broken down by category and model, plus cost, energy and CO2e wherever the provider reports them (currently Melious); local inference is not measured
- Time recording kept separate from planning, so what you meant to do and what actually happened stay distinct facts
Screenshots
Observed history
| App | Change | Version | When ↑ |
|---|---|---|---|
| updated | 1.1.53 | 15 Oct 2026 | |
| updated | 1.1.53 → 1.1.55 | 15 Oct 2026 |
Upstream releases
Release notes supplied by the developer. These dates are not Flathub package publication times.
1.1.5515 Oct 2026
Added: check-ins count the time you spend on them. A spoken check-in counts its recording; a written one counts the time you spend writing it, with a clock you can pause or set by hand. Every check-in on a goal's timeline shows its minutes, and you can correct them there.
Added: goals can ask for reflection time. Add Check-in time from the goal editor's signal picker to aim for at least a few minutes of checking in a day; it is tracked like any other part of the goal, and a check-in moves the progress card straight away.
Added: a daily briefing for every goal. Each morning, for a goal with automatic updates on, the goal's agent writes a short read of where things stand and what to do next - concrete steps drawn from your data and your check-ins, following up on yesterday's - unless the day already has its report. The goal page leads its summary with What's next.
Added: a Today card on the Goals page. One card gathers each goal's one-line read and next step from that day's briefing, the goals that need attention first.
Added: agent internals for people. A person's page offers Agent internals in its menu: the agent's reports, conversations and activity.
Added: what an agent has cost. Every agent's internals now show its lifetime cost and footprint beside its token usage.
Changed: one way into an agent's conversation, and one menu. A goal's page and a person's page now offer the same Talk to agent button - the agent's sparkle in the AI accent, instead of a small grey pill - and their overflow menus read alike: the page's own actions, then the agent's, Agent internals named the same on both, and delete last.
Fixed: talking to an agent on desktop no longer squeezes the page. Opening a goal's or a person's conversation used to shove the page aside to make room, leaving it in a narrow strip. The conversation now slides in as a side panel over the dimmed page - the same panel the Daily OS check-in uses - and the page keeps its full width.
Fixed: agent internals open where you are. A goal's or a person's agent in the sidebar's wake list used to jump to its Settings page; it now opens the agent's internals in the same side panel over what you were doing.
Fixed: the Agent internals title is readable in the light theme. It was drawn in white on the panel's pale background.
1.1.5413 Oct 2026
Added: a check-in's action bar now has the Add menu a logbook entry has. Next to Dictate, Comment and Photo, a plus opens the same Add sheet as on any entry, so you can paste an image from the clipboard, start a timer, create a linked task, take a screenshot or add a note to a check-in. Actions that only make sense on a task, such as adding a checklist, are not offered. A task created this way shows in the check-in's timeline even when it is the only thing linked to it.
Fixed: scrolling stays smooth while sync is busy. Received images and other large attachments are now decrypted in the background and downloaded only once you stop scrolling or typing. The reminder banners at the top of the app no longer reload every time any agent writes something. Together these removed the stutter on task details, pages and settings, most noticeable on phones.
Fixed: saving no longer hangs for seconds after sync activity. A sync bookkeeping step read the device's whole sync history each time it ran, which held up local saves for two to three seconds on phones with a long history. It now reads only the entries it needs.
1.1.5312 Oct 2026
Changed: dictating a check-in looks calmer. A recording now shows its full transcript across the whole card, with its length and state on one line above it. The sheet's header says "Recording · with Pip" while you speak.
Changed: removing a recording from a check-in can be undone from the line that takes its place. Removing it also takes back the type, time and duration that recording filled in, unless you set them yourself.
Fixed: two devices verifying each other at the same moment no longer both wait forever. When both sides started the emoji check together, each could hold back the other's request for good; the one that should give way now does.
Fixed: "Show the emoji" reopens the device you were verifying after your device gave way to another's request, and that device is no longer offered again without being asked.
Fixed: a photo or recording that arrived cut short is downloaded again when its entry is opened, instead of staying cut off until a manual repair.
Fixed: a missing photo or recording is usually sent by one device, not by every device that has it. The device that last sent the entry answers; the others step in after a short wait if it doesn't, or if its copy is shorter than theirs.
1.1.5211 Oct 2026
Changed: a check-in's page now looks like a task's. It opens under the person's category and name, as a task opens under its category and project, with the same large title and the same square tags for when, how, how long and how it felt - each still a tap away from changing, and the feeling now shown with a face in its colour. A length or feeling not yet set is offered as a soft round pill, the topics share one tag, and "Edit check-in" now sits at the end of that row, where a task keeps "Details", instead of in the far corner. The words the check-in was logged with sit on the page under a faint rule, where a task keeps its notes, instead of in a box of their own.
Changed: the check-in form now shows the same facts as the saved check-in. Under the note, how you connected, when, how long, how it felt and the topics sit in the same row of tags the check-in page shows - each still opening its picker, a missing one offered in a soft round pill - so what you set is exactly what you'll see once it's saved. Topics and the notes for next time fold out of the last pill, already open when you edit a check-in. While you're recording, the recorder takes the whole sheet.
Changed: the check-in form no longer punches dark boxes into the sheet. The note and the topics and next-time fields are now outlined on the sheet itself, like the fields in the app's other forms, in light and dark mode.
Changed: recording a check-in now uses the same recorder as a task. Dictating into a check-in - in the form or on its page - shows the recording look you chose (the orb or the VU meter) and the same Discard, Stop and Pause controls as the recorder a task's microphone opens, instead of a recorder of its own.
Changed: the recorder has a calmer, studio-style layout. Stop is now the same red button a task's "Track time" shows while it runs, with the recording's running time inside it. The moving level bars from onboarding run as a thin line under the orb or VU meter - teal under the orb, neutral under the meter - and lie flat when you are silent. Discard and Pause sit either side of Stop as quiet rings, and "Transcribe" is a small switch underneath. Dictating on a check-in's page no longer covers half of it: the recorder there leaves the orb out.
Changed: recording lengths read the same everywhere. A recording's length now shows as 00:42 (and 01:02:03 past the hour) in the journal, on an entry's header and in a check-in, matching the recorder, the audio player and a task's running timer - no more 0:42 beside 00:42 on one screen.
Changed: an AI cost pill now appears only when the cost is known. A transcript from Melious's speech-to-text models carried a pill reading "Cost unknown" on every recording, because that service does not report what a transcription costs. Pills now show only where a cost was reported; the full attribution details are unchanged.
Fixed: the voice orb no longer draws dark streaks in light mode. Its brightest moments now glow in a light mint instead of turning near-black, and the grey haze around the ring is gone - on the recorder, in the Daily OS capture and in onboarding. On the recorder it now sits on a soft pool of light. Dark mode looks exactly as before.
Fixed: the correction of a Daily OS voice capture is counted with its transcript. The model call that fixes misheard speech-dictionary words was recorded as separate work of its own. It is now part of the transcription it corrects, so its cost appears alongside that transcript.
Fixed: a pull request's details now scroll to the very end of its description. The "Open on GitHub" bar floats over the page, and the last lines of a long description stayed hidden behind it however far you scrolled. The page now leaves exactly the bar's height of room below the description.
Fixed: screenshots written as HTML in a pull request's description now show as images. Descriptions that size their screenshots with image tags, as many screenshot tables do, showed the tags as text. They are now loaded and shown like any other image of the description, at the width the tag asks for, with the full-size viewer and "Add to task".
Fixed: pairing no longer stalls when both devices open the emoji check at once. Right after a device joined, each side could start the verification at the other, and each then sat on a sheet waiting for a request the other never showed. One side now hands over to the other's request inside the sheet it already has open, and a request that arrives while another verification sheet is up is shown as soon as that sheet closes instead of being lost.
Fixed: closing a verification sheet cancels it for the other device too. Tapping outside the emoji sheet used to leave the other device waiting on a ceremony nobody would finish. It now sees the cancellation and can start again.
Fixed: "Show the emoji" reopens the device you were looking at. When another device's keys arrived while a ceremony was open, the button could reopen that device instead of the one just dismissed.
Fixed: "Show the emoji" no longer reopens the sheet a second time. With the sync settings open behind the setup sheet, closing the reopened emoji sheet brought it straight back once more.
Fixed: Add device waits for the device list before showing the pairing code. A code shown while the list was still loading could mistake the device that scanned it for one that had been there all along, and never unlock the settings and history transfers for it.
Fixed: sync starts on its own once the network is back. Opening the app without a connection used to leave sync off until the next restart.
Fixed: signing in with your own homeserver details joins your existing sync room instead of creating a new one, so your devices stay together.
Fixed: changes a device sent before you verified it now arrive once the verification completes, instead of being dropped.
Fixed: catching up after a gap no longer stops trying. When fetching the messages a device missed kept failing, sync gave up after three tries and waited for something else to wake it, which on a quiet account might not happen. It now keeps trying, waiting a little longer each time, up to five minutes.
Fixed: settings, feature flags and AI settings changed while you were offline now reach your other devices. Changes that failed to send used to stay in the outbox as failed until you tapped Retry. They are now tried again automatically.
Fixed: changes sent from a newer version of the app are no longer lost on a device that has not updated yet. That device applies them once it updates.
Fixed: a sync message an older version of the app could not read is read once the app is updated. Before, such a message, like a saved filter using an option from a newer version, was skipped for good.
Fixed: a very large single change now reaches your other devices. A change too big for one sync message used to fail for good; it now travels as a compressed attachment instead.
Fixed: "Send settings" now also repairs your theme, your Daily OS greeting name and your feature flags. These were sent once when you changed them, so a lost message left another device on the old value. A device that already holds a newer value keeps it.
Fixed: restoring a backup no longer confuses sync. Changes made after the backup are not mistaken for missing ones, and new changes never reuse an old change's number.
Fixed: a reworded reminder keeps its new words on every device, even when another device's clock runs ahead.
Fixed: a missing photo or recording is not requested again on every launch once no device can supply it.
Fixed: an AI provider, model, prompt or skill deleted on one device could stay on the others. When the change could not be queued for sending - the sync outbox was briefly unavailable, or the app closed between the write and the queue - the deletion was gone here and nothing recorded that the other devices had not heard. A deleted prompt had no row left for "Send settings" to re-send either. Every AI configuration change is now owed to the other devices until the outbox has taken it, sent again at the next start or a minute later if it was not, and "Send settings" re-sends deletions along with the rows.
Fixed: a lost change to your AI settings is found and fetched again. If a device missed an edit to a provider, model, prompt, profile or skill, or its deletion, it now notices the gap and asks your other devices for it, instead of keeping the old setting until it changes again or you press "Send settings".
Fixed: a model left behind by a deleted provider is no longer listed. A model edited on a device that had not yet heard the provider was deleted stays stored, so undoing the provider's deletion brings it back, but it is hidden from the model lists until then rather than shown under a provider that no longer exists.
Fixed: removing a provider's API key now removes it on every device. Before, an empty key arriving from another device was taken for a failed keychain read and the other devices kept theirs; a key cleared on purpose now says so, and the peers clear it too.
Fixed: deleted dashboards and measurables, and removed links, stay deleted on every device. Cleaning up deleted entries used to erase deleted dashboards and measurable types outright, so a device that still held an old copy could bring them back. A link changed to another type could likewise reappear under its old type when a late copy arrived. Both now stay gone.
Fixed: confirming a relationship suggestion again after undoing it creates the task cleanly on every device. Before, it created the task over the undone one in a way other devices showed as a conflict.
Fixed: sync no longer asks other devices over and over for the records of an agent you deleted.
Fixed: an agent you delete stops on your other devices too, even when one of them missed the deletion at the time.
Fixed: repairing vector clocks no longer overwrites a recent agent change made while the repair ran.
Fixed: a resumed task agent follows its task again right away after a sync hiccup, instead of only after a restart.
Fixed: old agent observations cleaned up on one device no longer come back from devices that have not cleaned up yet.
Fixed: disconnecting GitHub reaches your other devices when you use "Send settings", even if the original message was lost.
Fixed: older categories, dashboards, habits and links now sync like everything else without a manual repair. Items saved before sync tracked their versions used to need "Repair vector clocks" on one device; every device now does this once by itself when the app starts.
Fixed: a feature flag changed right after an update no longer flips back on your other devices. A change queued by the previous version could arrive after the newer one; the older change is now dropped.
Fixed: devices still on an older version end up with your latest settings. An older version applied feature flags and AI settings in whatever order they arrived, so a late, outdated change could win there. Updated devices now send the current value again whenever they see that happening.
Fixed: entries deleted and cleaned up by an older version no longer come back. When another device still held such an entry, it could reappear after a full resync; it is now recognised and kept away.
Fixed: photos and recordings you delete are also removed on devices that have not updated yet, instead of leaving their files behind.
Fixed: a few tasks, AI responses and people created on an older version now reach your other devices without having to be edited first.
