Say it once. Hear back when it's done.
Ducter is a personal AI that runs on your own Mac or server. You tell one partner what you want. It hands the work to the AI agents you already use, on the plans you already pay for, and comes back when the work is done or a decision is yours to make.
v0.0.42 · macOS
Free and open source under Apache 2.0. Works with Claude Code, Codex, pi and DeepSeek Harness today, and more AI agents after that.
Mac Linux server iPhone and iPad Android



~/dev/hawdb, then tell me.checkpoint_recovery flakes, and fix it on its own branch.CI is fixed. checkpoint_recovery slept a fixed 50 ms for the flush, too short on a busy machine. It now waits for wal.wait_durable(seq).
Silence means it's going fine.
Tasks run in the background. You hear back when one is done, or when it needs you to decide something. Every decision comes with a suggested default.
- Go, Hold or Reply… Take the default, say "not yet", or answer in your own words.
- Or don't answer at all. After 30 minutes it goes with the default, but only if that can be undone. Anything else waits for you.
- Done comes with proof: what changed and how it checked.



OAR 0.96 changed the steer API; 3 calls in the runner need to follow. Change them now?
If you don't answer, I'll change them in 30 min. It can be undone.



Your computers. Your plans.
Ducter lives on your Mac or on a server you own, and its tasks run on your computers, signed in to your AI agents with your own accounts. A coding task works in its own copy of your project, on its own branch, so your checkout stays as you left it. There's no Ducter account to make and no Ducter server in between.















You can also add



Browse the web
This Mac can look things up and read pages in Ducter's own Chrome window, apart from yours. Signing in, submitting forms and paying stay with you.
- Each task says where it runs. Your partner picks the computer and the AI agent for what the task needs; tap the line to see why.
- Lend it more computers. A server keeps working while your Mac sleeps; closing your laptop moves what can move to one that stays on.
- It asks only when it matters: a sleeping computer, or more access, like your own Chrome.
One thumb is enough.
Your phone buzzes only when a decision is waiting for you, and never during your quiet hours. Answer it in one tap, or let the default happen and read about it in the morning.
Quiet hours are 23:00 to 08:00 until you change them. With two decisions waiting, Go on all defaults answers both.

The rerun passes, but the branch is 23 commits behind main. Rebase before merging? Default: rebase, in 30 min.
Wherever you are.
Ducter lives on one computer, your Mac or a server. Every other screen opens the same conversation: start a task at your desk, answer its question from your phone, read the result on your iPad.
Mac
The desktop app, for Apple silicon. Ducter can live here and run tasks here, with its own Chrome window for the web and, once you say so, in your Mac's apps.
ReadyDownload
A Linux server
x64 or arm64, at home or in the cloud. Your partner keeps working while your Mac sleeps, and your Mac can still do tasks for it.
ReadySet one up
iPhone and iPad
One app for both. On an iPad held across, On hand stands beside the conversation, and with a keyboard ⌘N starts a task.
Public betaJoin on TestFlight
Android
The Ducter app, straight from GitHub; it updates itself. Open a foldable like a book and the conversation and On hand meet at the fold.
ReadyDownload the app
A phone or iPad needs an address it can reach from outside: Ducter on a server with your own domain, or a Mac at home set up From outside with your domain on Cloudflare. Connect your phone
It doesn't start from zero.
What your partner needs to know is often somewhere else: your mail, your calendar, last week's sessions with other AI tools. It reads them without your passwords.
- One memory for all your AIs. Nowledge Mem keeps what you've decided, from every AI tool you connect. Your partner reads and adds to it, and says Noted when it does. Optional and free to download.
- Your mail, calendar and chat. One tap with OOMOL's oo, or an address and key from OpenConnector. Reading is fine; anything that sends waits for your Go.
- Your AI agents, reaching each other. With Nowledge Bridge, a Claude Code session in your terminal can hand your partner a job, with your OK. Coming soon.
~/dev/hawdb ready to merge.It looks out for you, quietly.
Say yes once when you add your accounts, and your partner keeps an eye on your mail, calendar, GitHub and chat. It speaks up only when something needs you: one morning message with at most three things, and on a quiet day, nothing at all. The first time, it looks back over the last two weeks and picks out what needs you.
- Each one comes with a next step. Open the renewal page, look for somewhere to stay. Go does it, Hold leaves it, and How I know shows the mails behind it.
- Right away only when it can't wait: someone who asked you again, or has waited three working days, or a promise due today. Never in your quiet hours unless you asked for that kind.
- It never sends, replies, pays or deletes on its own, and it doesn't tell you how much it read. Tap Useful, or Don't tell me this kind, and it learns.
ducter.dev expires on Nov 16, and it isn't renewed yet.
You land in Tokyo on Nov 21, and nothing is booked for that night.
It runs errands, with your OK.
Booking, buying, calling, working in your Mac's apps: every step that spends money, sends something or reaches a person shows you exactly what will happen, and waits for you.
- It calls for you. A restaurant, a clinic, a shop, in its voice or yours, through Tuwa or from your own Android phone. You see who, what it may say and the likely cost, then tap Call. Needs a Tuwa account, or your own phone with a small cable kit and a live-voice API key.
- It fills in without seeing. Save a sign-in, a card or your travel details once. Your partner fills them in on the right site; every payment asks you first. A task that needs a key asks you with a card, never in the chat.
- You can take a turn. Watch its browser from your phone or iPad. Tap My turn to sign in or check a page yourself, then Hand it back.
It asks before anything reaches other people.
A task doesn't stop you for every command. Emails, posts, PR comments, payments, calls and pushes to shared branches wait for your Go, and every one is written down. A few things it never does at all.
- It never merges into main.A finished task offers Merge into main or Open draft PR, and waits for you.
- It never sees your passwords.It fills a saved one only on its own site, or you sign in yourself with My turn.
- It never pays on its own.Every payment shows the shop, the amount and the card, and waits for your OK and the security code.
git push -u origin ducter/fix-ciRan: its own branchgh pr create --draft "Fix flaky checkpoint_recovery"Asked you; you said Gogit push origin mainWaits for you, alwaysemail: load-test numbers → a HawDB contributorAsks you firstsign in to github.comFilled in; it never saw itpay: renew a domain, $10.44Waits for your OKcall: a table for two, Friday 19:00Asks you first
Open anything. Any time.
Most days you stay in the conversation. When you want a closer look, On hand shows every task at a glance. Open one to read what it did, step by step, and the diff of every file it changed, and write to it while it works. Or just reply to its result in the conversation, and it carries on. On an iPad or a foldable, On hand can take the whole screen.

The flaky checkpoint test is fixed.
Rebased; all 412 tests pass and CI is green. The cause was a fixed 50 ms sleep in the test, now a wait for durability.
What it did
- What Ducter asked forFind out why HawDB #1592's CI fails, and fix it.
- › Ran 3 commands
- All three failures are in
checkpoint_recovery: it sleeps a fixed 50 ms for the flush. - › Edited 1 file
- Progress saved · Confirmed flaky; wait for durability
- Told Ducter · needs you to decideThe rerun passes. But the branch is 23 commits behind main: rebase before merging?
- › Ran 3 commands
Changes 1 file +3 −3
let wal = Wal::open(&dir, WalOptions::fsync_each())?; let seq = wal.append(b"hello")?;- std::thread::sleep(Duration::from_millis(50));+ // wait for the flusher instead of a fixed sleep+ wal.wait_durable(seq)?; crash_and_reopen(&dir)?; assert_eq!(recovered.last_seq(), seq);
Yours to read and run.

Open source
Apache 2.0. Every prompt Ducter writes and every line of code that touches your work is in the source.

Self-hosted
Your Mac, or a Linux server you own. Your conversation and tasks stay in one folder there that only your account can read.




No lock-in
Ducter works through each AI agent's own app, signed in as you, on your existing plan. Use whichever one you have, and switch for any task.
Built on the agents you have
For people who already run several AI agents at once: what Ducter does so they hold up as one partner.
- One adapter, four agents. Claude Code, Codex, pi and DeepSeek Harness, started through OAR in clean sessions that still carry your own skills and settings.
- Small windows on purpose. Your partner and its tasks work in about 200K tokens. A long conversation stays coherent through short digests and recall, not by replaying everything.
- The facts about each agent, in one place. Context windows, compaction points and versions are checked against the real programs, and
ducter doctorwarns when yours is outside what was checked. - Each agent's own browser first. Ducter's own Chrome is the fallback, on your Mac or your server. In a Mac's apps, Ducter's own app tools check every click before it happens, and never open a password manager, a bank or System Settings.
- Keys stay out of the conversation. A task that needs one asks on a card; it's kept encrypted on the computer Ducter lives on and handed only to the command that uses it. A key you paste is taken out of what a task is told, and hidden everywhere Ducter shows one.
- Budgets are tests. Every prompt and tool list has a size limit that fails the build, and updates are rehearsed end to end on a Linux VM before a release.
You need Claude Code, Codex, pi or DeepSeek Harness installed and signed in on the computer that does the work. Ducter checks everything else and tells you the one thing to fix, if there is one.
Paste this into Terminal. It downloads the signed app, checks it, puts it in Applications and opens it:
$ curl -fsSL https://ducter.ai/install.sh | shDucter checks your Mac, then opens the conversation. Closing the window doesn't stop it. It needs a Mac with Apple silicon.
Or download the .dmg and drag Ducter to Applications, or build it from the source. On iPhone and iPad: join the beta.
The same line installs the ducter command in ~/.local/bin. On a Mac it comes with the app; on Linux it's the ducter bundle:
$ curl -fsSL https://ducter.ai/install.sh | shThen check this computer, and start your partner (on a Mac, the app opens too):
# every missing piece comes with its fix $ ducter doctor # starts your partner $ ducter up
ducter status shows your tasks and the decisions waiting for you. Or build it from the source.
# on the server (x64 or arm64 Linux): runs as a service $ curl -fsSL https://ducter.ai/install.sh | sh -s -- --service # point an A record at the server, then: HTTPS, and a code for your Mac and phone $ ducter domain ducter.example.com
Your partner keeps working while your Mac sleeps. It only listens on the server itself (127.0.0.1); ducter domain checks your DNS, sets up HTTPS with Caddy and gives you a code. No domain? An SSH tunnel works for your Mac.
One app for iPhone and iPad, in public beta through Apple's TestFlight. It connects to Ducter on your server with the address and code from ducter pair.
Any other phone opens the same address in its browser. Your phone has the details.
The Ducter app for Android comes with each release on GitHub and updates itself. Allow your browser to install it when Android asks, then scan the code from ducter pair. On a foldable, open it like a book: the conversation and On hand meet at the fold.
Let Claude Code, Codex or another agent set Ducter up for you. Ask it:
Install the ducter-deploy skill from github.com/wey-gu/ducter/tree/main/skills and deploy Ducter on my server.
The skills are also at https://ducter.ai/skills/ducter-deploy/SKILL.md (and ducter-operate, ducter-troubleshoot). For AI agents says what they do.


Say it once.
Then get on with your day. Ducter tells you when it's done.

