A NATIVE MAC APP
Ask four models at once.
Keep the answer worth keeping.
All four in one thread. Branch from any reply, and merge the branches worth keeping into a single answer.
or try
Press Ask — the same question goes to all four at once
The app
Three panels.
That is the whole thing.
No dashboard, no mode switcher, no tab bar. The conversations you have had, the one you are having, and a map of every path it took to get here.

Branching
Chats have no back button.
This one does.
Every reply is a place you can return to. Branch from it, put another model on it, or come back to it later — nothing you already have is overwritten to make room for what you try next.
- Going back costs you nothingBranch from a reply and the road you were already on stays exactly as it was. There is no version of this where answering the next question deletes the last one.
- You can see where you have beenThe branch panel draws the whole conversation as a tree — a hexagon per turn, coloured by the model that wrote it, and the edges between them. It also pops out as a real macOS window, so the map can sit on a second screen while you work.
- And a branch only knows its own roadAnswer inside one and Testudo walks the parent chain from that reply back to the question, and sends that path — the transcript it gives the model contains no messages from the branches you did not take.
Merging
They all sound right.
That is the problem.
Four confident answers, each partly true, and none of them the one you needed. Choosing a winner throws away the good half of the other three — so the work falls to you: read them all, hold them in your head, write the real answer yourself. Tick the branches worth keeping and Testudo does that step instead.
The same move, one level up.
A subject rarely stays in one chat. You start one, open another when the first gets long, open a third from a different angle — and end up with three entries in the sidebar, three histories, and nothing that joins them.
- Tick them in the sidebar and merge.Each chat arrives as its own tree in a new conversation, named after the ones it came from. The originals stay where they were unless you say otherwise.
- From there it is one panel.Click into the research one, carry on, click back into Tuesday’s without leaving. A reply from one chat and a reply from another tick and merge like any two branches.
They sit side by side rather than fusing: asking inside one tree does not hand the model the other. Merging chats is what puts them in one panel; merging replies is what combines them.
Neither one surprises you on the bill. Merging chats never calls a model — it is a copy, so it costs nothing. Merging replies does call one, and Testudo estimates that first with arithmetic rather than by asking a model: the branches you ticked, measured against the rate of the model doing the merging.
Who answers
Changing model
should not mean changing app.
Normally that means another tab, another history, another subscription — and the thread you were in stays behind. Here it is one menu under the composer, and the conversation does not notice that anything changed.
Should we rewrite the billing service or patch it?
Patch it. A rewrite means re-certifying every edge case you already paid for in production.
Refactor the invoice retry loop so the backoff is testable.
- Code GPT · Claude
- Thinking a problem through Any of the four
- Something you need sources for Perplexity
- A very long message Gemini
More than one provider usually fits. Auto takes the one that is healthy and least busy at that moment, so you are not queued behind a provider having a bad day.
One message somewhere else, without touching the picker. Start it with @ and the list opens. It applies to that message only — whatever you chose above is still what answers the next one.
Nothing about the thread is per-model. Every reply above it is still context, the branch you are on is still the branch you are on, and a model your plan does not include returns an error rather than a quieter, cheaper stand-in.
Memory
Every new chat
starts with a stranger.
You retype the same preamble every time — what you are building, which stack, how you want answers. Say it once instead. You never have to save it: write I prefer, I use, always, never, and Testudo keeps that line — your sentence, not a model’s summary of you.
- Every line it kept is on one screenSettings shows them exactly as you typed them, with a delete on each row. There is no profile you cannot read — if it kept the wrong thing, you can see that it did.
- At most four reach any questionAsking something does not hand over everything it knows. Testudo scores what it has by meaning and attaches the four best, and only those above a real similarity floor. The rest stay out of the request.
Teach Testudo what to remember across conversations.
I work in TypeScript and Postgres, on a Mac.
I prefer the trade-off first, then the recommendation.
We bill in credits, not seats — never suggest per-seat pricing.
Where it lives
Your chats stay on your Mac.
Not in somebody else's cloud.
Pick this device on first launch and that is exactly what happens — one file, on your disk, that we never see. Prompts still cross the wire, because the provider keys sit on our server and not in the app. So here is both sides of it, in full.
Stays on your Mac
- Chats, and every branch under them
- Every message in full, images included
- Workspaces
- Memories and their vectors
- Summaries written as chats get long
~/Library/Application Support/com.multiai.workspace/local.db
One file. Copy it, back it up, open it in any SQLite browser, delete it.
What our server keeps
- Your account and plan
- A credit counter
- A token tally per provider Daily on Free, monthly on Standard and Pro
- One row per request Provider, model, tier, tokens, cost, credits, duration
Those tables have no content column to write a prompt or a reply into.
No deletedAt, no archived flag, no tombstone in either schema. A deleted chat takes its messages, its summaries and every branch below it.
Cloud storage is the other answer. A “Copy to Cloud” button in Settings uploads a local library — workspaces, chats, messages, memories and summaries. A choice you make, not a default you discover.
Four subscriptions.
Or one.
Four assistants, four bills, about $80 a month — and not one of them can see what the others answered. Standard is $29, with all four in the same thread.
Branching, merging, memory and workspaces are in every plan, including the free one — only Free limits which models you can reach. Every plan starts with the same download; create your account on first launch and pick a plan in Settings, no card needed to stay on Free.
Free
- 5,000 credits a day, reset every morning
- One fast model from each provider — GPT-4o mini, Haiku 4.5, Gemini 2.5 Flash, Sonar
- About 55 replies a day on those, or a couple of full ask-all-and-merge rounds
- Branching, merging, memory and workspaces — none of it held back
Standard
- 3.4M credits a month — about 1,600 Sonnet 5 replies
- The flagships: GPT-5.6 Sol, Opus 4.8, Gemini 2.5 Pro, Sonar Pro
- Ask all four at once, then merge the answers worth keeping
- All 21 of them on our keys — no provider accounts to set up
Pro
- 10M credits a month — about 2,850 Opus 4.8 replies
- Three times the room of Standard
- The same flagships and all 21 models — Pro is purely more headroom
- Long threads and repeated ask-all rounds without rationing
Already have your own API keys?
Bring them and Testudo stops counting. You pay the providers directly and us only for the app — every model on any provider you supply a key for, nothing metered, keys encrypted and never shown to you again.
Billed monthly in USD, cancel any time from your account.
Credits are shared across every model — heavier models simply spend more of them.
Get Testudo for macOS
Runs on Intel & Apple Silicon, macOS 11 (Big Sur) or later. After this, updates arrive inside the app.
Straight answers.
Not by us — there is no training pipeline in the product, and our Terms say so. Requests do pass through our servers to reach the provider, even in local mode, but all we keep is metadata: model, tokens, cost. Never the text. What each provider does with API traffic is governed by their terms, not a promise we will make for them — bring your own key and it runs under your agreement.
Nothing is deleted or locked. Cancel and the paid plan runs to the end of the period you paid for, then the account moves to Free. A failed payment drops you there immediately — no grace period — and restores the moment it clears. Chats answered by a model Free cannot reach still open; pick a free model and the thread carries on.
Any chat exports to Markdown from its menu in the sidebar, and Settings has a JSON export of your whole cloud account. Two limits worth knowing: the Markdown file is one branch rather than the whole tree, and neither carries attached images. If your chats live on this device, they are a plain SQLite file you can copy — that one has everything.
One unit of model usage, and every model has its own rate — which is why plans are sold in credits rather than message counts. Run out and new replies are refused outright; nothing is quietly shortened or swapped for something cheaper. What you already have stays readable and exportable. Free resets daily, Standard and Pro on the first of the month.
Not at launch. Testudo re-checks your sign-in every time it starts, so opening it with no connection shows an empty sidebar even with on-device storage. Nothing is lost — your chats are still in the file on your Mac and return when you are online. Generating new answers always needs the network; the models do not run on your Mac.
Not yet — macOS today, Windows is coming.
Testudo