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.

Ducterjust finished something
Fix the flaky checkpoint test in ~/dev/hawdb, then tell me.
I'll find out why checkpoint_recovery flakes, and fix it on its own branch.
Fix CI· Done ›
14 min later

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).

412 tests passCI run #48219 · green1 file changed ›Fix CI ›
git push -u origin ducter/fix-ci

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.
On hand3 working · 1 waiting
Port the runner to OAR 0.96 ›30 min

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.

Try it: press Change them
Changing them now
Port the runner to OAR 0.96Reading the changelog · cloud-1
Review this week's 3 open PRsRead 2; the third is waiting on CI · MacBook
Write the v0.4 release notesWaiting for the v0.4 CI run · cloud-1
Mem #8762 health checkPassed 3 times in a row; the issue can close · MacBook

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.

This Mac can browse the web now
A Mac mini asleep under a knitted blanketMac mini
A server sitting on a cloud, awakecloud-1
This Mac, awake
Browse the web, added
Browse the webfits here
Reach from anywhere, added
Reach from anywhere
CodexSigned in · 1 device
Claude CodeSigned in · 2 devices

You can also add

Use this computerComing later
Use a phoneComing later
Make callsComing later

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.

Ducter

The rerun passes, but the branch is 23 commits behind main. Rebase before merging? Default: rebase, in 30 min.

Rebasing. I'll tell you if CI doesn't pass.

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.
Rebase, never merge commits. Remember that for every repo.
Will do. From now on I'll rebase before merging, in every repo.
Noted · Rebase before merging, every repo
9 days later
Get the docs branch in ~/dev/hawdb ready to merge.
It's rebased onto main, the way you like, and CI is green. It's ready for you 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.
Sent out todayMonday
  1. git push -u origin ducter/fix-ciRan: its own branch
  2. gh pr create --draft "Fix flaky checkpoint_recovery"Asked you; you said Go
  3. git push origin mainWaits for you, always
  4. email: load-test numbers → a HawDB contributorAsks you first
  5. sign in to github.comYours to do
  6. pay: 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.

ConversationOn handFix CI · #1592
Done· started 14 min ago

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.

20 local rerunsCI run #48219 · green1 file changed ›
git push -u origin ducter/fix-ci

What it did

  1. What Ducter asked forFind out why HawDB #1592's CI fails, and fix it.
  2. › Ran 3 commands
  3. All three failures are in checkpoint_recovery: it sleeps a fixed 50 ms for the flush.
  4. › Edited 1 file
  5. Progress saved · Confirmed flaky; wait for durability
  6. Told Ducter · needs you to decideThe rerun passes. But the branch is 23 commits behind main: rebase before merging?
  7. › Ran 3 commands

Changes 1 file +3 −3

⌄ crates/storage/tests/checkpoint_recovery.rs +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);
Details ›
Talk to this task

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.

Say it once.

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