Hyppää pääsisältöön

Dedicated tools for the Agentic Work era: new backpacks for the kids and a new keyboard for dad

Julkaistu aiheella Teknologia, AI
Senior Software Architect, Okko Ojala, holding the Codex Micro keyboard.

Kirjoittaja

Oskari Okko Ojala
Oskari Okko Ojala
Senior Software Architect

Okko on ohjelmistoarkkitehti, joka tutkii vapaa-ajallaan tekoälyä ja ääniohjattavia käyttöliittymiä. Hänen haaveensa on saada koodia ajoon ulkoavaruuteen.

Artikkeli

In mid-July 2026, OpenAI launched their first physical product: the Codex Micro is a collaboration with Work Louder, a dedicated keypad for the vibe coder era with programmable macro keys and built-in functions for OpenAI’s proprietary ChatGPT Codex platform. Let’s make it work with VS Code, shall we?

The Codex Micro is a dedicated small keypad designed for agentic work, with programmable macro keys and built-in buttons to control multiple simultaneous AI workflows effortlessly. There are 6 transparent keys that map to AI agents doing the work. Based on the button colours, one can easily tell when an agent needs an answer, is working, or is done, and the buttons also enable switching between agent workflows. One could also say it is a keyboard made for the vibe-coder era, so a hobbyist will enjoy it too.

The Codex Micro is tightly integrated with OpenAI ChatGPT Codex. As a tool, the Codex is very chat-prompt-focused and is pushing a paradigm shift in which the developer focuses on the visible outcome rather than the code internals. This type of development could be categorised as vibe coding, but I’m quite careful with the term, as it was originally used to refer to just having fun with creative projects, and I now see its use extending to all kinds of AI-assisted development. Sometimes in a positive light, sometimes as a diss. In any case, it falls under agentic software development.

As part of my work as a full-stack software architect, I do software development with AI agents. Here, the agents work with me, and I steer them, while we iterate on increments and write and modify the code together. Another facet is agentic software development, in which autonomous AI agents plan, write, test, and refactor code with minimal human intervention through to completion.

These are my current mappings of the terms. In a fresh industry, everyone has their own, and the terms overlap. Why is this relevant?

The project

Well, because of the software development I do, I like to do it in an IDE (Integrated Development Environment), and Microsoft’s VS Code is my weapon of choice. With its off-the-shelf software, the Codex pushes the actual code part of coding increasingly to the background, while VS Code enables you to work alongside the AI to achieve the intended results. So, naturally, I wanted to use this keyboard with VS Code!

While the white Codex Micro sold out in less than 15 hours, Work Louder’s original hacker version, the black Creator Micro 2 has remained in stock and gained similar Codex AI agent button capabilities with new firmware released in early August. I bought that version.

I defined the target to have:

  • A command-line tool to set the agent key colours to be able to use them as status lights from any scripts

  • A localhost HTTP API for the same from any app capable of doing webhooks (HTTP requests)

  • A VS Code integration using either of the above two

Solution status

It took me just one night to get the keyboard communications working and a total of three summer nights to get the application feature-complete end-to-end. In about 50 hours, I got a comprehensive VS Code state integration, a stable application for macOS, and most of the special cases ironed out. I believe it would have been 1500+ hours without the help of AI, and I probably wouldn’t have had that much time for such a project. The AI is especially good at figuring out message formats and experimenting (hacking) until it finds a working solution when there’s no detailed documentation, and superb at analysing the VS Code’s giant open-source codebase.

I named the application “AgentKeys” and published it on GitHub. It’s all-agentic coding, and now its VS Code integration is comprehensive. The application supports up to 20 agentic keys, while OpenAI ChatGPT supports only 6. At the age of two weeks, it is still a pre-release as VS Code’s agentic session state tracking is super complex, mixed with laptop hibernation and USB/Bluetooth devices.

I originally held the naive belief that VS Code would simply be about hooking up a few VS Code hooks and implementing the keyboard communication part for those hooks. It turned out that VS Code’s Agent Customisation Hooks (Preview) did not meet all my requirements. So, currently, the hooks are complemented by monitoring VS Code’s internal state from its SQLite database and watching VS Code’s chat transcripts and journals.

I briefly evaluated if I’d just define a custom agent for VS Code and hook that, but I didn’t want to limit the agentic à la carte menu I have in VS Code, which meant avoiding such a wrapper if possible. I also looked into VS Code’s plugins, but they didn’t offer any better access to the internal states. In any case, I need a local application to have macOS grant permission to communicate with the keyboard device.

Some features of the VS Code integration

Two unsynchronised sources per session

Each native Copilot Chat session has two JSONL files written independently: a transcript of hook events, and a native journal of JSON-patch state snapshots. They arrive on their own schedules and must be reconciled.

Two kinds of agentic sessions in VS Code

Agent Host sessions differ from native Copilot Chat sessions and only support transcript integration.

Journal-prompt ordering barrier

Journal patches reflecting a new request can arrive before the matching prompt event appears in the transcript.

File truncation and inode rotation

Both files are tracked by dev:ino identity. If the inode changes or the file shrinks (VS Code rotated or recreated it), the reader resets its byte offset and rebuilds the state.

Startup replay

On restart, previously-bound sessions are replayed from their saved offsets. It looks pretty cool, blinking lights.

Permission/blocker deferral across request boundaries

A hook can report a tool-confirmation permission request before the journal confirms the new request ID.

Inferred terminal-tool confirmations

When the journal reports needsInput but no named blocker explains it, any tool call that was requested but not yet started is promoted to an amber colour blocker.

Atomic checkpoint/rollback

Before reading new data, a full snapshot of the session's run state, offsets, and slot bindings is taken. A filesystem error mid-read rolls everything back to the checkpoint so a partial parse never corrupts state.

Deferred journal writes

VS Code can defer journal flushes by up to ~15 s, so completion can lag. There's no live completion notification; the integration polls and waits for the journal to catch up.

Forward-compatibility detection

Unknown state-bearing parts (!) in the journal are classified as incompatibilities rather than silently ignored, and the slot button turns red so the user knows the VS Code version has outrun what the integration understands.

SQLite active-session filter

On the initial scan, state.vscdb is queried to skip sessions VS Code itself no longer considers active, avoiding slot claims for dead or stale sessions at startup.

Architecture diagram: VS Code's agent host writes chat state to workspace storage (state.vscdb SQLite and JSONL transcript files); the AgentKeys daemon reads both, also receives HTTP hooks from the agent host and HTTP calls from the agentkeys CLI, and talks to a Creator Micro 2 keyboard over USB HID JSON-RPC. The daemon is the only component holding the macOS System Input Monitoring grant.

What’s next?

The keyboard does bring me joy when I'm working, and it was fun to do something in the physical world for a change. Also, it bears repeating that this kind of integration development without provider support is at least 20x faster in the era of AI. 

I still need to test the integrations in my daily work and improve reliability. In the long term, the device manufacturer might integrate similar features into their application, but doing this project taught me new stuff on VS Code’s internal mechanisms, USB HID protocol and especially on AI-assisted integration work. It did take time, but no hacker counts their hours, right?

Kirjoittaja

Oskari Okko Ojala
Oskari Okko Ojala
Senior Software Architect

Okko on ohjelmistoarkkitehti, joka tutkii vapaa-ajallaan tekoälyä ja ääniohjattavia käyttöliittymiä. Hänen haaveensa on saada koodia ajoon ulkoavaruuteen.

Ella Raskila, Nitor People Partner

Mitä jos valitsisitkin meidät?

Olemme vaikuttavien ratkaisujen pragmaattisia ja uteliaita tekijöitä. Liity mukaan rakentamaan kestävää digitaalista kehitystä tekoälyn aikakaudella.