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.
The Mac download is coming soon. You can build it from source today.
Free and open source under Apache 2.0. Works with Claude Code, Codex, pi and DeepSeek Harness today, and more AI agents after that.



~/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 there, 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.
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. For now the phone opens Ducter in its browser and needs Ducter on a server with your own domain. An iPhone app is coming soon.

The rerun passes, but the branch is 23 commits behind main. Rebase before merging? Default: rebase, in 30 min.
It doesn't start from zero.
Much of what your partner needs to know is somewhere else: in your mail, your calendar, and last week's sessions with your other AI tools. Some of that it can use today. The rest is on the way, and none of it needs your passwords.
- One memory for all your AIs. Nowledge Mem keeps what you've decided and what you're working on, from every AI tool you connect to it. Your partner reads from it and adds to it, and you see Noted when it does. Works today. Without Mem, it remembers your conversation.
- Your accounts, through your OpenConnector. Gmail, Google Calendar and other services will connect through OpenConnector: OOMOL's hosted one, or your own on your own machine. Ducter holds its key, and the AI agents never see your passwords or tokens. Reading your inbox is fine; anything that would send waits for your Go. Coming soon.
- Your AI agents, reaching each other. With Nowledge Bridge, the Claude Code session in your terminal can hand your partner a job, and your partner can ask that session what it knows. It checks with you before it takes the job or sends the question. Early, and coming soon.
~/dev/hawdb ready to merge.It asks before anything reaches other people.
A task doesn't stop you for every command. Emails, posts, PR comments 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 types your passwords.You sign in yourself, in its browser window. The AI never sees what you type.
- It never pays.Payments are always left to you.
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.comYours to dopay: renew a domainNever Ducter's call
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. You can write to it directly while it works.

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.
Get Ducter
You need Claude Code or Codex 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.
The repository opens to the public soon. Until then, these are the exact steps it will take.
The signed download is coming soon. Until then, build it from source on a Mac with Bun and Go:
$ git clone https://github.com/wey-gu/ducter && cd ducter # builds dist/Ducter.app and a .dmg $ scripts/make-app.sh
Open Ducter.app. It checks your Mac, then opens the conversation. Closing the window doesn't stop it.
# puts `ducter` in ~/.local/bin $ scripts/install.sh # 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.
# on your Mac $ scripts/install.sh --linux ducter-linux # on the server $ sh ducter/install.sh --service # a one-time code for your Mac or phone $ ducter pair
Your partner keeps working while your Mac sleeps. It only listens on the server itself (127.0.0.1); reach it through your own domain or an SSH tunnel.
