Say it once. Hear back when it's done.

Ducter is a personal AI you run yourself. You talk to one partner. It hands the real work to Claude Code and Codex on your own computers, on the plans you already pay for, and comes to you only when a decision is truly yours.

The Mac app download is coming soon. The source builds today.

Open source under Apache 2.0. Runs on your Mac or a server you own, with Claude Code or Codex, in English or 中文.

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 · green2 files 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 a decision is truly yours, and every decision arrives with a default, so not answering is an answer too.

  • Go, Hold, or Reply. Press Go, ask it to wait, or answer in your own words.
  • Or let the default happen. It only applies on its own when it can be undone.
  • 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. Every task runs there in its own git worktree and branch, on the Claude Code or Codex sign-in you already have. There's no Ducter cloud in the middle.

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

Lets this Mac get things done on the web in Ducter's own browser: look things up, read pages, gather what it finds. Signing in, submitting and paying are always left to you.

One thumb is enough.

Only decisions earn a push, and they wait out your quiet hours. Each one carries a default, so you can answer from the lock screen, or let the default happen and read about it over coffee.

Quiet hours run 23:00 to 08:00 unless you change them. Two decisions waiting? Go on all defaults answers both. A phone connects once, with a one-time code.

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 asks before anything leaves.

No pop-up for every command. Each task holds only what it needs, everything that goes out is written down in plain words, and a few things are never its call.

  • It never signs in as you.You sign in on its screen; it picks up from there.
  • It never pays.Not once, and no rule can change that.
  • It never reaches other people without asking.Emails, posts, PR comments and pushes to shared branches wait for your Go.
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 first, 30 s to undo
  5. sign in to github.comYours to do
  6. pay: renew a domainNever Ducter's call

Open anything. Any time.

Most days you never leave the conversation. When you want the wheel, On hand shows every task at a glance, and any task opens into one page: what came of it and how it knows, what it did step by step, the changed files with each diff a tap away, and a box to talk to it directly.

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

It remembers you.

With Nowledge Mem, your partner starts with the identity and context you already keep there, shared with the other AIs you use. Switch models whenever you like; it's still the same partner.

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

Yours, all the way down.

Open source

Apache 2.0. Read every prompt, every adapter, every line that touches your work.

Self-hosted

Your Mac, or a Linux server you own. The record of everything lives in one SQLite file on it.

No lock-in

Your Claude Code and Codex subscriptions, through their own official apps. Bring whichever you have.

Get Ducter

You need Claude Code or Codex installed and signed in. Ducter checks the rest and tells you the one thing to fix, if anything.

The repository opens to the public soon. Until then, these are the exact steps it will take.

The signed, notarized download is coming soon. Until then, build it in one step:

$ 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 will be here when it's done.