Skip to content

Repository files navigation

Agent F-Row

CI

Your coding agents, on your keyboard's F-row. Each agent gets a lane of lit keys that shows what it is doing — working, done, waiting for you — and one press on the lane's key brings that agent's window to the front.

The Agent F-Row window: three lanes, the saved agents, and the settings

Why

You have Claude Code in one terminal, Codex in another, a third agent in its desktop app — and then you go do something else. Which one is sitting on a permission prompt right now? Agent F-Row answers that from across the room: a lane pulsing in its colour needs you, and pressing its key puts you in front of it.

  • Windows only. Works with Claude Code and Codex, each running natively on Windows and inside WSL.
  • The light is a Corsair keyboard through iCUE. Without one the window still shows everything; the keys and the light are the part you would be missing.
  • Display only. It never sends anything to an agent and cannot approve, deny, or answer anything; its reply to every hook is empty. The agents talk to it over loopback on your machine, and nothing leaves it.

What you see

On the keys

Twelve F-row keys, in 3, 4 or 6 lanes. Each lane has its own colour, and every state is that colour at some brightness and motion — a change of colour means trouble, and red means Error and nothing else.

State On the keys Meaning
Connected all keys, dim alive, nothing run yet
Running one light sweeping along the lane working
Waiting first key full, the rest double-pulsing needs you — a permission prompt or a question
Done first key full, the rest dim the turn finished
Error first key full, the rest dark red the turn failed
Idle first key dim, the rest off nothing heard for a while
empty off no agent on this lane

Idle is silence, not a verdict: Done and Connected dim to Idle after 30 minutes, Running after 2 hours, and Waiting and Error never — they are exactly what you left to come back to. A session leaves only when its agent ends or you dismiss it, so the board you left is the board you come back to.

In the window

The lanes, each with its state, the last thing the agent did, how long it has been like that, and a Focus button. Sessions beyond the lane count live off the keyboard — fully tracked, no key or light — and take the next lane that frees up. The ⏶⏷ arrows reorder lanes; nothing else ever moves a lane out from under you.

Saved agents. Press Save on a lane and the app remembers that agent and project folder, with that lane as its preferred one. Next time the agent starts it lands there if the lane is free, otherwise on another lane. The saved roster lists the ones that are not running, and is where you change a preference or forget it.

Focus

Press the lane's key (or click Focus) and the window the agent runs in comes forward — Windows Terminal with the right tab in front, the Claude or Codex desktop app, or an IDE. That is the only action in the product: no approvals, no key capture.

The tab it looks for is the lane's name, then the project folder — so naming a lane is a feature. If no tab matches, it says so and lists the tabs it found, rather than leaving you looking at the wrong agent.

Two limitations, stated in the window too: no agent reports when you answer a prompt, so a lane can read Waiting for a few seconds after you approved (it clears when that tool finishes); and Codex has no error event, so Error cannot be shown for it.

Install

  1. Download agent-frow-<version>-win64.zip from Releases, unzip it anywhere, and run agent-frow.exe once. It installs itself to %LOCALAPPDATA%\agent-frow, registers its hook with every Claude Code and Codex it finds (Windows and WSL), and hands over to the installed copy; the unzipped folder can be deleted.
  2. Restart your agents so they read their hooks. Codex also needs /hooks run inside it and the entry trusted — until then it looks installed and nothing happens.
  3. For the keyboard: iCUE running with a Corsair board, and the F-row remapped to F13–F24 — in the default profile, or a profile switch silently takes the summon keys with it.

Upgrading is the same gesture with a newer zip. "Start with Windows" is a checkbox in the window. Windows will warn on first run: the zip is not code-signed.

The window's Settings section lists every agent found, whether its hook is registered, and when it was last heard from, with Install and Remove per agent.

Settings

  • Lane count — 3 × 4, 4 × 3 or 6 × 2 keys — and each lane's name and colour.
  • Brightness, and Color balance: a per-channel gain for keyboards whose LEDs do not match the screen. Tune it with a Preview pattern playing on the keys.
  • Everything lives in %LOCALAPPDATA%\agent-frow\settings.json, written atomically. A file that does not parse is refused and left alone, and the window says so.

Building from source

Rust on Windows. cargo build --release, then target\release\agent-frow.exe install — the app runs from %LOCALAPPDATA%, and only install puts a build there. For lighting, unzip Corsair's iCUE SDK (not committed; its own license) at <repo>/iCUESDK. dist.ps1 builds the release zip.

How it all works — the hook, the state machine, lane placement, the lighting, focus — is in docs/how-it-works.md; the reasons behind each rule, measured against real sessions, are in docs/lessons.md.

Contributing

Issues and pull requests are welcome. Before changing the state machine, focus, the hook, or the lighting, read docs/lessons.md — the constraints there were measured against real sessions, and in two cases the agent documentation is wrong. CI checks formatting, lints and tests the hook crate on Linux, and builds the whole workspace on Windows; the GUI only compiles on Windows. If a change touches summon keys, focus, or lighting, say what hardware you verified it on.

License

MIT — see LICENSE. The one exception is iCUESDK.x64_2019.dll in release zips: that file is Corsair's proprietary iCUE SDK redistributable, covered by Corsair's EULA, not by this project's license.

About

Your coding agents, live on a Corsair keyboard's RGB F-row via iCUE: every Claude Code and Codex session (Windows or WSL) gets a lane whose color and motion say running, waiting on you, done, or failed, and one press of its key summons that agent's window. Display only: it never answers or approves anything on an agent's behalf.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages