FRANK GitHub ↗

He’s a duck. He’s frank.

Your agent wrote 47 steps. Frank found the 3 that need you.

A local, voice-first rubber duck for the moment your coding agent hands you a plan and your brain quietly leaves the building.

Early. Open source. Unsigned. Frank has opinions about two of those.

Illustrative plan / rate limiting

AGENT EDITION, UNREVIEWED

47 STEPS
  1. 01Inspect the current request pipeline
  2. 08Add rate-limit middleware
  3. 17Store request counts in Redis
  4. 24Return standard quota headers
  5. 31Apply middleware to every route
  6. 36Add express-rate-limit
  7. 47Update documentation

Are you running more than one instance?

I looked. There is no Redis in this repo or its docker-compose.

One instance? Use memory. The plan invented an operations problem.

Approve is not a review.

It’s a reflex with a keyboard.

Step 31 adds Redis. You don’t have Redis. You’re going to find that out around 6pm on a Friday.

Frank ignores the routine bits and pulls forward the expensive, awkward, hard-to-undo calls your plan made while you were skimming.

ONE PLAN. THREE PASSES.

Not a second agent reviewing the first agent. A duck helping the human make the calls.

FIND

The plan is already open.

Summon Frank from the menu bar. He finds the latest plan for your project and asks before reading the repository context it mentions. No paste ceremony.

⌥⇧Space

CHECK

Receipts, not vibes.

Frank checks the real code. Missing infrastructure, broad route changes, and new dependencies get called out in plain language.

repo ≠ plan

DECIDE

One question at a time.

Talk it through. Ask what Frank would do. Get a straight answer, then hand your agent a short note: keep this, change that, drop this.

3 calls → 1 note

THIS IS WHAT USEFUL JUDGMENT SOUNDS LIKE.

Short. Specific. Slightly annoyed.

YOU

“No, just one instance.”

FRANK

“Then in memory. The plan is solving a scaling problem you don’t have. Next: it wants to rate-limit /health, which means your load balancer gets throttled and declares you dead.”

NOTE FOR YOUR AGENT / COPIED

Use in-memory counters; limit only /api/public, not /health; keep express-rate-limit.

FIVE MOODS. ZERO MYSTERY.

Frank lives in the menu bar. You always know where you stand.

__
(o )>

idle

Available for judgment.

__
(O )>

listening

Audio stays on your Mac.

__
(- )>

thinking

Checking the receipts.

__
(o_)>

judging

Not a bug. The product.

__
(^ )>

done

Go ship. Quack.

BRING THE BRAIN YOU ALREADY PAY FOR.

Claude Code • GitHub Copilot • Cursor • Anthropic • OpenAI-compatible • Ollama

Frank reads. Your agent writes. Nobody gets another subscription.

NO CLOUD. HE HAS A POND.

Plans and code are read only when you call Frank. There’s no Frank account, server, telemetry, or cloud sync. Voice capture, transcription, code-aware pronunciation, and speech all run on your Mac. Audio is never saved or sent.

Pick Ollama and nothing leaves your machine at all. Pick another brain and only the words go to the model you chose—the same as typing them yourself.

Your plan is probably fine.

Frank would still like a word.