Fleetkey · Show HN draft
Jump to copy blocks
Launch draft · paste-ready · v1

Show HN, written out and ready to paste.

Codex Micro is $230 and drives one agent.
Fleetkey is free and drives all four — and you can talk to them.
Wedge: “talk to your agents” — hold to talk, release to send Frame: anti-Codex-Micro Ship bar: one real action on video Post: Tue–Thu, 8–10am ET
Ready to paste

Four blocks. Copy each into the right HN field.

HN renders plain text — no markdown. The body and first-comment blocks below are plain text with blank-line paragraph breaks, exactly as HN wants them. URLs auto-link on HN, so paste them bare.

title Post title → the “title” field · keep under ~80 chars
Show HN: Fleetkey – one control surface for every coding agent (Claude Code, Codex, OpenCode, GLM)
text Post body → the “text” field (self-post) · plain text, no markdown
Hi HN. I run Claude Code, Codex, OpenCode, and GLM side by side, and the friction isn't the agents — it's me, mousing back to four terminals to hit "y", retype the same prompt, or check which one finished.

So I built Fleetkey: one control surface that drives whichever agent window is in front of you. It doesn't know or care which harness is underneath.

It's local-only — a daemon on ws://127.0.0.1:8787, loopback, no account, no telemetry. Today it does:

- Four agent keys, each lit to show idle / running / waiting-on-you / done, so you can see your fleet at a glance instead of tabbing through windows.
- Approve and Reject that actually fire the keystroke into the focused agent. Proven end to end: a click in the browser UI hits the daemon, which runs an osascript keystroke, and "y" lands in Claude Code. The other harnesses use the same path.
- Talk — the part I actually wanted. Hold a key, speak your prompt, release; it transcribes with Whisper and types it into the focused window. I'd rather say "refactor the auth module and add a test for the expired-token branch" than type it.
- Skill and a Reason dial are wired in the UI but return "coming soon" for now. Shipping with one real action and honesty about the rest.

The comparison I keep coming back to: OpenAI's Codex Micro is $230, ships as single-vendor hardware, and only drives Codex. Fleetkey is free, runs on the keyboard you already own, and drives all four. I'm not anti-hardware — I want to build the panel too — but the software layer shouldn't wait for a factory.

Honest status:
- Software layer works on macOS today. It needs Accessibility (the same permission every macropad and automation tool asks for) to inject the keystroke. Nothing is hidden; the install says exactly why.
- A DIY hardware kit is a pledge tier with no ship date. I won't promise one until backers justify a parts order — a missed indie-hardware date is the fastest way to lose this crowd.
- A finished unit is "maybe, later."

Demo gif, install, and the open contract spec: [LINK]

I'll be in the comments for the next few hours. The question I actually want answered: what would make this worth opening every day in your setup?
comment Founder first comment → post as a top-level reply immediately after · the technical FAQ
Expanding on the how-it-works for anyone who wants to poke at it:

The contract is three keys — {action, harness, payload}. Five actions (approve, reject, skill, talk, dial), four harnesses (claude-code, codex, opencode, zcode), four states (idle, running, waiting, done). The browser UI is just a client over a local WebSocket; the daemon translates actions into real keystrokes in the focused window via osascript. State flows back the other way so the LEDs reflect what each agent is actually doing.

Why local-only and no telemetry: this tool types into your agent sessions. The cheapest way to make that trustworthy is to not have a server. The daemon binds to 127.0.0.1 only. No account because there's nothing to log into.

Why "talk to your agents" is the wedge for me: the long prompt is the unit of work with these tools, and I can speak a 40-word instruction faster and more naturally than I can type it. Push-to-talk means the laptop keyboard stays for editing and the voice channel is for steering. Whisper runs through Groq; if you don't set a key the daemon returns a clear error instead of failing silently.

On the Codex Micro framing — not throwing shade, it's a beautiful object and single-agent hardware makes sense for a single-agent workflow. The bet with Fleetkey is that serious setups don't stay single-agent for long. You reach for different harnesses by task, by cost, or by which one is free this month, and a surface that follows you across them beats four remotes.

macOS first because that's where the osascript path is cleanest. Linux/Windows need a different injection method — happy to talk tradeoffs (ydotool, AutoHotkey) if that's your stack.

Source + contract: [LINK]
hook The one-liner → for the Twitter thread lead / the comment you repeat
Codex Micro is $230 and drives one agent. Fleetkey is free, drives all four — and you can talk to it.
Ammo for the comments

Know your own facts before the first “isn't this just a key mapper?”

Every line below is grounded in what's actually built — the locked contract, the working daemon, the proven end-to-end action. Pull from these when answering.

AxisCodex MicroFleetkey
Price$230Free software; DIY kit $20–40 pledge later
AgentsCodex onlyClaude Code, Codex, OpenCode, GLM
HardwareRequired — buy the deviceNone — any keyboard/macropad you own
VoicePush-to-talk → Whisper → types into focused agent
SetupPair a proprietary deviceRun a local daemon, open localhost
TelemetryNone — binds to 127.0.0.1, no account
CONTRACT
Envelope {action, harness, payload}. Five actions: approve · reject · skill · talk · dial. Four harnesses: claude-code · codex · opencode · zcode. Four states: idle · running · waiting · done.
DAEMON
Bun + TypeScript on ws://127.0.0.1:8787, loopback only. Actions translate to real keystrokes in the focused window via osascript. State pushed back to the UI on connect.
PROVEN END-TO-END
Browser APPR → WebSocket → daemon → osascripty lands in the focused Claude Code window. Verified with frontmost-app focus reacquire. This is the one action on video.
TALK WEDGE
Hold-to-talk captures mic (audio/webm;opus), POSTs to /transcribe, daemon forwards to Groq Whisper, transcript types into the focused window. No key → clear no_groq_key error, no silent fail.
TRUST SIGNAL
Local-only, no account, no cloud, no analytics. The contract spec is open. State this loudly — it's the cheapest trust an unknown tool touching agent sessions can buy.
HARDWARE RULE
Never promise a ship date. DIY kit is pledge-funded; finished unit is “maybe, later.” Under-promise and let demand pull it into existence.
EXPECTED OBJECTIONS — HAVE ANSWERS READY

“It's just a key mapper.” → It's a key mapper plus live per-agent state (idle/running/waiting/done) reflected back, plus cross-harness, plus local-only. Karabiner doesn't give you the LED grid. “macOS only?” → macOS first (osascript is cleanest); Linux/Windows via ydotool / AutoHotkey is the next port. “Accessibility permission?” → Yes, same one every macropad/automation tool needs; stated up front, not hidden.

Before you hit submit

Ship bar — don't post until every box is real.

Launching early on HN is worse than launching late; the first impression is permanent. These come straight from the launch strategy.

1
Contract locked. {action, harness, payload}, 5 actions / 4 harnesses / 4 states — done, v1.0.
2
Daemon runs and listens on ws://127.0.0.1:8787.
3
One real action end to end: key press in browser → approve/reject actually fires in the focused agent via osascript. The other actions may return “coming soon.”
4
Screen recording of step 3, as a gif under 5MB. A bare landing page dies in minutes; a 30-second gif of it working survives.
5
Landing page live with working checkout and the download gated behind purchase.
6
Honest hardware copy in place: works today with your own keyboard; DIY kit later, no date; finished unit = maybe.
7
Founder is the first comment. Post the top-level reply immediately — what it does, local-only/no-telemetry, price, honest hardware status, demo link. Answer every technical question for the first 3 hours.
8
Timing: Tuesday–Thursday, ~8–10am ET. Avoid Friday afternoon and weekends.