CM Codex Micro Field Notes

Exact-unit teardown · 31 July 2026

Inside the
Codex Micro

The little $250 control surface is not a closed shortcut pad. Its shipping firmware exposes a two-way HID message bus that can drive local software, six-agent swarms, live status lighting, game interfaces—and, with proper failsafes, simulator-grade vehicle controls.

v0.4.1 exact live unit USB + BLE verified Report 6 JSON-RPC Non-invasive no flashing
Read the teardown
The exact Creator Micro 2 / Codex Micro unit analyzed, with six transparent Agent keys, action keys, encoder, joystick, and touch control
The exact unit · user-configured physical keycaps
13switch IDs captured
216 / 275 BBLE / USB descriptors
63 Bbidirectional vendor payload
6independent Agent lights
159offline integration and safety tests

A non-invasive teardown of the Work Louder Creator Micro 2 sold as the Codex Micro—and the story of turning its keys, joystick, dial, Bluetooth link, and lighting into an interface for our own software.

The first experience was not futuristic. The device paired, charged, and lit up, but its most interesting controls did not behave like ordinary keys. A host watching for keyboard shortcuts could see a connected product and still miss the Agent buttons, dial, and joystick entirely. For a $250 control surface, that creates a blunt question: did we buy a beautiful remote for one approved application, or a piece of hardware we could make genuinely ours?

The answer arrived in a 63-byte HID report.

Editorial illustration of the Codex Micro imagined as a six-agent console, with six illuminated keys feeding distinct software lanes.

Editorial illustration—not evidence. This image imagines the six translucent keys as addresses into parallel software work. Exact-unit photographs, captures, and measured protocol claims are identified separately below.

Behind the keyboard-shaped surface is a vendor-defined channel carrying framed, CRLF-terminated JSON. A shipping unit running firmware v0.4.1 publishes structured control events on that channel, and it accepts status and lighting messages in return. On macOS, a small clean-room IOKit client can speak to it directly over Bluetooth or USB without treating either ChatGPT or Work Louder Input as a required intermediary.

The first successful device.status reply changed the investigation. The device was no longer a collection of mystery buttons; it was one end of a two-way control loop. Thirteen switch positions, encoder turns, and full-range joystick motion could enter our software. Battery, profile, worker state, and authorization state could come back out as light.

The final live test made that loop tangible. A two-key chord turned the whole device yellow. A second chord turned it red. The wide key captured the spoken instruction “Run LS.” A deliberately narrow one-job authorization launched a native DSCO worker, consumed itself, and returned the device to calm green. Every important transition was visible before the consequential action ran.

That is the larger story of this teardown: not how to add more macros, but how to turn a small illuminated object into an operator console. The same building blocks support six resumable agent slots, creative and spatial controls, a game/simulator adapter, or the physical front end for any local service that can consume a JSON Lines event stream.

The investigation follows three questions in order: what the exact device really exposes, how to control it without crossing unsafe firmware boundaries, and what becomes possible once physical intent and software state share the same loop.

Scope and safety. This was a non-invasive investigation. No enclosure was opened. No bootloader was entered. No firmware was flashed. No factory reset, self-test, charger diagnostic, or device-filesystem mutation was performed. Device identifiers and machine-specific details are excluded from this public account.

Before the teardown: what counts as proof

Reverse engineering gets unreliable when a fact observed in one version is quietly promoted into a claim about another. This investigation uses explicit provenance throughout:

Label Meaning in this article
Exact-unit live Measured on one shipping device running firmware v0.4.1
Official public image Derived by static analysis of Work Louder's published v0.4.0 firmware image
Independent corroboration Reported and implemented by another clean-room project on shipping v0.4.1 hardware
Inference or prototype Plausible from the evidence, or implemented host-side, but not proven as a native device capability

The nearest downloadable firmware was v0.4.0; the live unit reported v0.4.1. Static discoveries from v0.4.0 are therefore described as v0.4.0 facts. They are not silently attributed to the live firmware.

What we proved without opening the case

The strongest findings are already enough to establish an open integration path:

Surface Result Provenance
Host identity Work Louder product named Codex Micro, VID:PID 303A:8360 Exact-unit live
Live firmware v0.4.1; status includes profile, layer, battery, and charging state Exact-unit live
USB HID descriptor 275 bytes; Reports 1, 2, 3, 4, and 6 Exact-unit live
BLE HID descriptor 216 bytes; Reports 1, 2, 3, and 6 Exact-unit live
Private channel Vendor page 0xFF00, Report 6, 63-byte bidirectional payload Exact-unit live
Physical inputs All 13 switch positions, encoder press/turns, and full-range joystick observed over BLE Exact-unit live
Lighting Whole-device preview plus six independently colored Agent keys Exact-unit live
Storage surface Bounded read-only inventory found one small keymap file Exact-unit live
Firmware architecture ESP32-S3 image, ESP-IDF lineage, NimBLE, USB HID, LittleFS, power and lighting subsystems Official public v0.4.0 image

The important conclusion is not that the device happens to have colorful lights. It is that the input, state, and feedback paths form a real two-way control loop.

The path to that conclusion began with a less glamorous problem: deciding what the object actually was. Its chassis, host identity, sales listing, and firmware do not use one consistent name.

Discovery 1: one device, five identities

The naming is confusing because each layer describes a different part of the product stack:

Layer Name What it identifies
Physical platform Creator Micro 2 Work Louder chassis and hardware family
USB/BLE product Codex Micro Host-visible product/profile identity
Manufacturer Work Louder Hardware partner and USB manufacturer string
OpenAI listing kbd-1.0-codex-micro Commercial design/SKU identifier
Firmware project cm-v2-fw Project identity embedded in the public image

The physical label, operating-system identity, commercial SKU, and firmware project name are related, but they are not interchangeable. In particular, kbd-1.0-codex-micro is not what the hardware broadcasts to macOS.

This matches the public product story. OpenAI describes the device as a collaboration with Work Louder, while Work Louder's Creator Micro setup guide documents three Bluetooth host slots and a fourth wired mode.

That mode distinction matters in practice. Plugging in a USB cable while a Bluetooth slot remains selected can charge the battery without moving control traffic to USB. A lit, charging device is not necessarily a USB-connected device. The touch/profile control must select wired mode when USB data is the goal.

Once those identities were separated, the next task was to ignore the movable legends and map the physical surface itself.

Discovery 2: the keycaps hide thirteen switches

Provenance: exact-unit live for the event IDs and behavior; official product documentation and public-image analysis for subsystem context.

The Codex layout contains 13 mechanical switch positions:

top:       [dial]      [AG00] [AG01] [joystick]
middle:                [AG02] [AG03] [AG04] [AG05]
actions:   [ACT06]     [ACT07] [ACT08] [ACT09]
bottom:    [touch]     [===== ACT10 + ACT11 =====] [ACT12]

The six AG00AG05 positions are the translucent Agent keys. The seven ACT06ACT12 positions are action switches. The printed caps can be moved, so software should bind physical IDs first and treat the cap legend as editable metadata.

The large bottom key deserves special treatment. Its one visible cap spans two mechanical switches, ACT10 and ACT11. On the measured unit, one press closed the switches 3 milliseconds apart and released them 2 milliseconds apart. A naive application will perform the same action twice. A correct bridge maps both sources to one logical control and keeps that control pressed until both sources have released.

The rotary encoder has three identifiers: ENC_CW, ENC_CC, and ENC_CLK. The press is an ordinary down/up control. Turns are momentary edge events. On the measured firmware they arrived with act:2 and no corresponding release, so filtering every action for act == 1 discards the dial entirely.

The planar joystick uses a separate notification and publishes normalized polar coordinates. Live capture reached distance 1.0 in four directions and returned to exactly angle:0.0, distance:0.0 at center. The experiment did not label physical direction order, so angle-zero orientation, rotation direction, dead zone, quantization, and sample rate remain calibration questions for the host.

The lower-left touch control is different again. It selects the transport/profile slot and available evidence places its activity on a standard HID path rather than the vendor notification stream. Its exact report has not yet been decoded.

There is also no evidence yet for host-controllable haptics. The official specification identifies a touch sensor, and the public v0.4.0 image contains touch-input and self-test machinery, but neither a vibration actuator nor a haptic-output RPC was found. “Haptic pad” is therefore not a confirmed hardware claim.

The control map raised the next question: which of those signals actually reaches the host, and does it arrive the same way over a cable and over radio?

Discovery 3: USB and Bluetooth are not the same device

Provenance: exact-unit live descriptors.

Over USB, macOS enumerated a USB 2.0 full-speed HID device with a 500 mA power allocation. Its 275-byte report descriptor contains several top-level collections:

Report ID Personality Report size
1 Boot keyboard 8-byte input, 1-byte LED output
2 Consumer control 2-byte input
3 Relative mouse 5-byte input
4 Gamepad 11-byte input
6 Vendor-defined JSON-RPC 63-byte input and output

Report 4 is a substantial standard gamepad declaration: six signed axes, a hat switch, and 32 buttons. Its presence proves that the USB descriptor can describe a conventional game controller. It does not prove that the factory Codex profile actively populates those fields.

The BLE descriptor is smaller—216 bytes—and contains Reports 1, 2, 3, and 6. It omits the USB gamepad Report 4 and adds a 63-byte Feature item to Report 6. That difference has an immediate consequence: software using the Codex profile should not expect a native BLE gamepad identity merely because USB advertises one.

The Agent keys, action switches, encoder, and joystick observed in this study arrived through Report 6 rather than as ordinary keyboard scancodes. That explains the familiar “it is connected but does nothing” failure mode: a host waiting only for keys will never see the structured event stream.

The descriptor answered where to look. Report 6 answered how the product actually talks.

Discovery 4: Report 6 is a tiny message bus

Provenance: exact-unit descriptor and live BLE round trip; exact-unit host captures plus independent v0.4.1 corroboration for the protocol.

The vendor collection uses HID Report ID 6 on usage page 0xFF00. Inside its 63-byte payload, messages are split into chunks with a simple header:

[0x02 message-chunk opcode] [chunk length] [up to 61 JSON bytes] [zero padding]

Complete messages end with CRLF. A long JSON object continues across multiple reports and is parsed only after reassembly.

The easy-to-miss detail is that USB and BLE require different output buffers.

USB sends 63 bytes:

[0x02] [length] [up to 61 bytes] [padding]

BLE sends 64 bytes with the report ID included in the buffer:

[0x06 report ID] [0x02] [length] [up to 61 bytes] [padding]

The report-ID argument passed to IOHIDDeviceSetReport remains 6 in both cases. In other words, BLE needs the identifier twice: once as the API argument and once at byte zero of the output buffer.

This is more than a formatting nicety. An incorrectly framed BLE call can still return kIOReturnSuccess; that proves only that macOS accepted the write. The firmware may silently discard it. The only meaningful health check is an actual round trip: send device.status, wait for a response carrying the same request ID, and reject the connection if it times out or returns the wrong shape.

A compact request expands to the following structure for readability; it can be minified before framing on the wire:

{
  "m": "device.status",
  "p": {},
  "id": 1
}

On the live device, a direct BLE exchange returned firmware v0.4.1 plus active profile, active layer, battery percentage, and charging state. Those power values are point-in-time telemetry; the significant fact is that bidirectional communication succeeded.

The independent FreeMicro protocol documentation describes the same v0.4.1 transport distinction and the same need for a genuine status response. That is useful corroboration, not a substitute for the exact unit measurements above.

The status round trip proved the channel was bidirectional. Listening to it while operating every control revealed the vocabulary flowing in the other direction.

Discovery 5: the controls publish structured events

The main switch notification is compact JSON:

{
  "m": "v.oai.hid",
  "p": {
    "k": "AG02",
    "act": 1,
    "ag": 2
  }
}

For normal switches, act:1 means down and act:0 means up. The k field is the stable physical identifier; ag carries the Agent index when relevant. All six Agent positions and all seven action-switch positions produced clean down/up pairs during exact-unit BLE capture.

Joystick messages use a second method:

{
  "m": "v.oai.rad",
  "p": {
    "a": 0.42,
    "d": 0.78
  }
}

Applications should preserve the raw angle and distance and apply their own coordinate convention, dead zone, and response curve. Converting immediately to four arrow keys throws away most of the useful signal.

The cleanest host architecture separates four stages:

HID report
  -> transport-specific frame decoder
  -> CRLF JSON message reassembly
  -> event normalization
  -> application policy and actions

That separation prevents Bluetooth framing quirks, switch debouncing, or a future firmware event from leaking into every downstream integration.

At this point the live device had already established the integration path. The public firmware image was useful for a different reason: it supplied an architectural map of the platform underneath, without pretending to be the exact software running on the desk.

Discovery 6: the public firmware reveals the platform underneath

Provenance: official public v0.4.0 image only.

Work Louder publishes firmware binaries in its cm-v2-fw-releases repository. The v0.4.0 merged image used for this study matched its published SHA-256 digest before analysis.

Its ESP image header identifies an ESP32-S3 target: magic 0xE9, chip ID 0x0009, four application segments, project cm-v2-fw, and an embedded ESP-IDF 5.3.2 lineage. Strings and structures identify NimBLE, native USB HID, LittleFS, the keymapper, rotary encoder, joystick, touch input, SPI-driven LED strips, and a substantial battery and power-management subsystem.

The partition table is especially informative:

0x00F000  phy_init    4 KiB
0x010000  factory     8 MiB application
0x810000  nvs       128 KiB
0x830000  fs          2 MiB LittleFS
0xA30000  coredump   64 KiB

There are no A/B OTA application slots in that actual table. Generic ESP-IDF text elsewhere in the image can mention OTA, but a parsed partition entry is stronger evidence than an SDK string. For v0.4.0, the layout points to one factory application updated through a bootloader or merged-image workflow, without an on-device A/B rollback slot.

That finding is one reason not to experiment casually with undocumented update or storage calls. It says nothing definitive about a host-side recovery tool, and it does not prove that v0.4.1 has an identical table, but it raises the cost of being wrong.

Other v0.4.0 subsystem evidence includes:

These are firmware-image facts, not a board-level bill of materials for the v0.4.1 unit. Confirming the exact PCB, component population, GPIO routing, antenna, and LED topology still requires a physical teardown.

A useful protocol needs a hard safety boundary

Static discovery in v0.4.0 reveals both useful and dangerous method families. Some were then tested read-only or reversibly on the live v0.4.1 device.

Method family Classification Evidence and policy
device.status Read-only Exact-unit round trip; allowed
sys.version Read-only Public-image discovery; untested live
fs.list, fs.read Read-only when bounded Exact-unit bounded inventory; allowed with limits
fs.readbin, fs.chksm Read-only Public-image discovery; untested live
lights.preview Runtime/reversible Exact-unit visible test; explicit command only
v.oai.thstatus Runtime/reversible Exact-unit six-key control and animation; explicit only
v.oai.rgbcfg Possible persistence Deliberately withheld without additional acknowledgement
host.focused_app State-changing Not exposed by the public CLI
self-test and charger diagnostics Operational/state-changing Not exposed
sys.bootloader Disruptive/destructive Permanently blocked
filesystem write/delete/format Persistent/destructive Permanently blocked

A generic “send any RPC” command would erase the value of that classification. The clean-room probe therefore has no arbitrary-RPC escape hatch. Bootloader entry and filesystem mutation are rejected before a HID write can be built.

The bounded live storage check found one small keymap.json in the root, with a single vendor layer and no macros or multi-actions. The contents were inspected through read-only calls; nothing was written back. That is enough to establish that a device-side keymap exists without turning a protocol study into an unnecessary persistence experiment.

The allowlist made it possible to test the most expressive output surface without touching persistent configuration. That produced the first result a person could understand from across the room.

The first visible payoff: software painted the hardware

Provenance: exact-unit live v0.4.1 over BLE unless stated otherwise.

Three lighting APIs appear in the evidence:

The first two are no longer theoretical. On the exact device, lights.preview visibly changed the chassis lighting. v.oai.thstatus independently set all six Agent keys green. A red “blinking eyes” sequence sent 49 frames and received a reply to every one. A later composite test layered a whole-device effect with a spatial six-key cyan/indigo/violet field and delivered 81 frames in 24.421 seconds.

That sustained test achieved about 3.3 effective frames per second despite a higher request rate. BLE lighting should therefore begin around three frames per second and be measured under real coexistence conditions before increasing load. The translucent caps and enclosure diffuse neighboring colors enough for the six points to read as one continuous field—closer to chromatophore-like camouflage than six unrelated indicator lamps.

The latest showcase defaults to an emerald field: lime, leaf, jade, and teal tones across the six keys, with green whole-device lighting underneath. It uses runtime preview/status messages and does not alter the saved keymap or invoke the potentially persistent v.oai.rgbcfg path.

The precise number, placement, and electrical grouping of physical LEDs remain unknown. What is proven is the addressable behavior visible from the host: one whole-device layer plus six independently controlled translucent positions.

Seeing the colors change proved the protocol. Making that proof reliable on macOS required one more layer of engineering.

The macOS bridge: why the obvious HID route was not enough

The device appears as one IOHIDDevice whose primary usage is keyboard and whose vendor collection is secondary. Cross-platform HID libraries often model each top-level collection as an independently openable path; on macOS that abstraction can fail to reach the secondary vendor report.

Direct IOKit access follows a predictable path:

match IOHIDDevice by VID/PID
  -> create IOHIDDevice
  -> open shared
  -> register input-report callback
  -> schedule on a CoreFoundation run loop
  -> send Report 6 output
  -> require a matched device.status response

The process needs macOS Input Monitoring permission. Without it, discovery and descriptor inspection can still work while IOHIDDeviceOpen returns kIOReturnNotPermitted. That is an operating-system authorization failure, not a framing or firmware failure.

The callback itself is a native-code boundary. A Python ctypes callback must remain strongly referenced, no Python exception may unwind through the C frame, and disconnects must be safe between any two operations. The probe stores the callback for the device lifetime, captures callback errors, bounds frame and raw report memory, matches replies by request ID, and unschedules before closing.

It opens the hardware shared and never seizes it. Shared access prevents the probe from deliberately displacing another host, but it cannot prevent semantic conflicts. Two applications can react to the same key; two lighting writers can overwrite each other. A production bridge needs one output owner even when multiple input subscribers are allowed.

Turning the probe into a physical API

The integration boundary is deliberately boring: normalized JSON Lines.

codex-micro-probe doctor
codex-micro-probe status --json
codex-micro-probe listen --duration 30 | your-service

Records carry a timestamp, device/transport context, firmware when known, event type, normalized fields, and optional raw report data. A Node, Rust, Swift, Go, Python, or shell-based service can consume the stream without implementing IOKit.

Python applications can use the library directly:

from codex_micro_probe import CodexMicro

with CodexMicro.connect() as micro:
    status = micro.status()
    for event in micro.events():
        dispatch(event)

For a durable integration, a small local daemon should own the HID connection and expose a Unix socket or local WebSocket. It should provide reconnect with backoff, status-based feature negotiation after every attachment, subscriber fan-out, single-writer lighting arbitration, mapping configuration, action audit, and a circuit breaker around consequential downstream operations.

The device then becomes a physical API:

Codex Micro
  -> IOKit transport
  -> normalized events
  -> local policy broker
       |- editor or creative-tool adapter
       |- game/simulator adapter
       |- agent-runtime adapter
       |- observability and audit log
       `- lighting renderer back to the device

Once the transport disappears behind a stable local event stream, the question changes from “Can we talk to it?” to “What should this object mean?” The useful answers form a ladder: first stable targets, then visible authority, then voice, continuous control, and finally carefully bounded machines beyond the desktop.

Editorial triptych illustrating a voice brief, guided selection with the dial and joystick, and six illuminated agent states.

Editorial illustration—not evidence. The three panels visualize the proposed interaction arc: speak a brief, guide or select visible work, then read the resulting six-lane state from the device. The exact-unit capabilities and the host-side prototypes supporting that concept are distinguished in each use case below.

Three walkthroughs you can actually run

These are deliberately written as control loops, not feature lists. Every walkthrough says what the operator does, what the host is allowed to do, what feedback should appear, and which gesture exits safely. The physical input and lighting primitives were observed on the exact unit. Agent dispatch, pointer injection, overlays, and state arbitration are implemented on the Mac; they are not hidden firmware modes.

1. Give one agent a voice brief

Official Codex mode and DSCO Swarm mode intentionally assign different meaning to the same physical surface. In Official mode, the desktop application owns its configured Agent-key and Voice Chat behavior. In DSCO mode, the local broker owns the HID stream and routes a Mac-microphone transcript to a selected slot.

Step Physical action What the software does What you see or hear
1 Tap one translucent AG00AG05 key Makes that stable agent slot the target The selected tile gains a focus treatment; the overlay names the slot
2 Press or hold the wide voice key Coalesces ACT10 + ACT11 into one logical gesture and opens the selected Mac microphone A listening state appears; the Mac may play an acknowledgement
3 Speak the brief, then release or tap again according to the selected capture mode Finalizes the transcript, previews its destination, and binds it to the slot's current generation The transcript and destination remain visible before dispatch
4 Confirm the dispatch Queues one generation-qualified job; a late transcript cannot target a replacement job The tile moves through queued, running, approval, and terminal states
Exit Press ACT09 Stop, change mode, or let the request time out Cancels capture or the pending operation and releases transient state The Mac announces cancellation when possible; the surface returns to its safe baseline

The Codex Micro is the baton here; the Mac supplies the ears and voice output. No USB or BLE audio interface was observed on the device.

Open the full voice-routing diagram →

2. Use the joystick as a guided desktop cursor

This path is opt-in because pointer injection is more consequential than reading HID events. It requires DSCO mode, Input Monitoring, Accessibility, and the explicit Joystick Controls This Mac toggle. Returning to Official mode must release the HID device and stop event injection.

Step Physical action What the software does What you see or hear
1 Enable the joystick-control toggle in the DSCO menu Verifies permissions, a fresh transport, and a centered stick before arming The overlay reports that computer control is active
2 Deflect the joystick Converts polar angle and distance into bounded pointer velocity The macOS cursor follows the stick; returning to center stops motion
3 Press or hold ACT06 Play/A Clicks, picks up a guided agent card, or begins a drag; release drops it The selected card or object follows the cursor
4 Turn the encoder Scrolls the current surface or pages through results, depending on overlay context The highlighted suggestion or result changes without moving focus to another app
Exit Press ACT09 Stop Sends Escape/cancel, releases any held mouse button, and zeroes velocity The guided overlay closes or returns to a neutral state

Disconnect, stale input, a permission failure, or a mode change takes the same fail-safe path as Stop. Joystick angle-zero orientation remains configurable because its physical direction convention has not yet been measured.

Open the full joystick-control diagram →

3. Dispatch work and page through six live results

The six transparent keys work best as stable addresses, while the action row, voice bar, encoder, and joystick remain verbs. That avoids tying a physical position to a conversation that may disappear.

Step Physical action What the software does What you see or hear
1 Tap one Agent key, or hold a pair Selects one persistent lane or a temporary multi-target set Each selected tile keeps its Sol, Terra, or Luna identity color while focus becomes visible
2 Press Play/A, use the voice bar, or choose an overlay suggestion Creates a bounded intent; the broker—not the HID decoder—checks authorization and target generation The overlay shows the verb, target set, sandbox, and confirmation state
3 Confirm when required Dispatches only the visible request and writes an audit event Tiles show queued/running/waiting/completed/failed; chassis light carries the global mood
4 Turn the encoder or move the guided cursor Pages result summaries, changes the focused result, or opens a selected detail The overlay and highlighted tile move together; optional Mac speech reads the selected transition
Exit Press Stop, cancel in the overlay, or return to Official mode Cancels the focused operation where supported, invalidates transient authority, and returns lighting ownership Red or yellow warning state clears to calm green; Official mode stops DSCO lighting writes

The diagram atlas later in this edition shows these three loops in detail: the voice route, the opt-in pointer gate, and the single swarm-state owner that drives tiles, chassis light, overlay, and spoken cues.

Open the full swarm-feedback diagram →

Use case 1: six lights become six agent slots

Provenance: host-side implementation, with exact-unit input and lighting primitives proven live. External task execution remains a policy-layer prototype, not a firmware feature.

Six target keys plus seven action positions create 42 direct agent/action pairs before chords, layers, the encoder, or the joystick enter the picture. The most useful model is to make the Agent keys transparent selectors and keep the action row as a stable verb vocabulary.

The implemented AgentRouter emits intents; it does not directly execute shell commands, approve external actions, or mutate task state. For example:

{
  "event_type": "agent-intent",
  "intent": "action",
  "action": "approve",
  "targets": [
    1,
    3
  ],
  "transparent": true
}

That boundary matters. A downstream broker can enforce authorization, idempotency, target generations, and audit policy without complicating the HID decoder.

The repository also contains a bounded swarm runner that launches six ephemeral Codex workers in a shared workspace. Its initial roles are researcher, protocol analyst, systems integrator, tester, product designer, and synthesizer. Read-only sandboxing is the default. Device events change focus and emit routed intents; worker state can be rendered on the six Agent lights. A bounded run terminates and reaps unfinished worker processes instead of leaving a hidden swarm behind.

codex-micro-probe swarm \
  --goal "Audit this repository and propose the next release" \
  --cwd /path/to/project \
  --duration 120

The production version should keep six stable physical slots while allowing their backing runtimes to change. A slot might point to a builder, reviewer, researcher, operator, strategist, or coordinator today and to a different local or remote service tomorrow. Physical identity stays fixed; adapters remain replaceable.

Approval semantics need stronger rules than ordinary navigation. An Approve press should be accepted only when the visible target is waiting for approval, and it should include the target's current generation so a duplicate HID event cannot approve a later proposal. Consequential actions should require a visible confirmation surface. The double-switch wide cap cannot serve as two-factor confirmation: ACT10 and ACT11 are two switches under the same finger.

The result is not six “AI buttons.” It is a compact operator console with selection, verbs, continuous adjustment, spatial steering, and a six-channel status display.

Use case 2: chords become visible, expiring authority

Provenance: host-side DSCO implementation built on exact-unit Report-6 key events and reversible lighting. The model assignments and privilege semantics are host policy, not firmware features or official Codex behavior.

The six transparent positions become more useful when treated as three model pairs. The top pair, AG00 + AG01, addresses two Sol lanes. The left pair, AG02 + AG03, addresses two Terra lanes. The right pair, AG04 + AG05, addresses two Luna lanes. The inner or middle pair, AG03 + AG04, crosses the boundary between Terra and Luna and is useful for comparison, handoff, or a two-model review.

For normal work, the operator holds a pair and presses an action. That action is routed to the two selected, resumable Codex lanes, which remain under a workspace-write sandbox. A pair chord is therefore a targeting gesture, not an implicit privilege escalation.

The same controls can form a much more deliberate state machine for the rare case where the operator requests a native, ungoverned DSCO job:

State transition Physical gesture Immediate feedback
Green baseline → stage one Tap and fully release top, AG00 + AG01 Mac speaks the first arming confirmation; device background turns bright yellow
Stage one → stage two Before expiry, tap and fully release middle, AG03 + AG04 Mac speaks the second confirmation; background turns bright red
Stage two → one-job token Press ACT07, the YOLO key Mac confirms the one-shot authorization; only the next single-lane native DSCO dispatch can consume it
Any armed state → cancelled ACT08, wrong sequence, expiry, mode switch, or disconnect Mac announces cancellation where possible; background returns to calm green
Token → consumed One eligible dispatch begins Token is destroyed; green baseline is restored

The speech comes from the Mac speakers. Voice input likewise comes from the selected Mac microphone: the Codex Micro exposes HID controls, but no audio input interface or microphone has been observed on the exact unit.

The privileged native argument vector is deliberately narrow and explicit:

dsco --profile worker --model MODEL \
  --systems-agent --gov-model none --prompt PROMPT

There is no shell interpolation, no -e codex, and no Codex danger-full-access flag. Omitting -e codex is essential because an external Codex executor would replace the native DSCO process and make the DSCO flags a misleading description of the actual executor boundary.

This sequence should not be described as “safer YOLO.” DSCO's source labels --systems-agent UNGOVERNED and says that it has no safety envelope; --gov-model none removes the governance-model gate. Yellow, red, spoken confirmations, expiry, single consumption, and single-lane scope make the operator's intent observable and reduce accidental activation. They do not constrain what the authorized job can do.

The latch exists only in daemon memory and is never serialized. Every cancel, disconnect, mode transition, expiry, and completed consumption invalidates it. The yellow, red, and green backgrounds use reversible runtime-only lighting; they do not rewrite saved device configuration. When control returns to the official Codex mode, the DSCO renderer stops issuing lighting writes.

The complete route was then verified on the exact v0.4.1 unit over USB. The top chord changed the full background to yellow on its second key-down; the middle chord changed it to red; the Mac played each spoken cue; the wide key captured and transcribed “Run LS.”; and the resulting Sol-lane native DSCO job reported systems_agent=true, governance_model=none, and exit code 0. The authorization disappeared when the job was queued and the background returned to green. The sanitized live record omits both the token and command output.

Use case 3: a voice-addressed six-slot agent console

Provenance: exact-unit key events and official desktop behavior are live. The independent voice/slot coordinator is implemented host-side and remains separate from both firmware and the official Codex bridge.

The strongest interaction is already visible in the current settings. An Agent key can focus its assigned task, and the microphone key can be configured for Voice Chat. In that mode a quick tap starts a Voice Chat or toggles its microphone; a hold ends the call. The live capture proved that all six Agent keys and both switches under the microphone cap reach macOS cleanly over BLE. The Voice Chat session that opened during testing was the official desktop bridge responding to the physical gesture; the probe itself opens the HID device shared and does not synthesize that UI command.

The desktop setting confirms two microphone-key modes: push-to-talk dictation and Voice Chat, where a tap starts or toggles the microphone and a hold ends the session.

The exact host configuration used during the live test. The screenshot is retained without account or device identifiers.

That gives the zero-custom-code workflow today:

  1. Tap one of the six Agent keys to focus its assigned task.
  2. Quickly tap the microphone cap to start Voice Chat in the focused context.
  3. Speak the instruction, continue the conversation, and use the same six keys to move between live assignments.

The more powerful workflow is a chorded slot broker. Each transparent key is a stable physical address for a live agent instance rather than a static shortcut:

Gesture Broker meaning
Tap AG02 Focus or reveal Slot 2 without changing its process
Hold AG02 + quick-tap microphone Create Slot 2 if empty, otherwise resume it, then begin a voice brief
Hold several Agent keys + microphone Address a deliberate multi-agent briefing, with fan-out shown before send
Release microphone / finish speech Commit the transcript to the selected slot generation
Hold microphone End the active Voice Chat; never interpreted as “start”
Encoder turn while a slot is selected Change effort, priority, or transcript target after visible confirmation
Wide action plus approval state Approve only the proposal generation currently shown on that slot

The local DSCO prototype now makes that vocabulary concrete without turning it into a hidden privilege channel. Encoder turns adjust a selected lane's runtime-only effort marker in 0.1 steps. Encoder press arms a single resume, but only for lanes with a durable Codex thread. On the current cap layout the action row is Play | YOLO | YEET | Stop: ACT06 is the primary pick/drop or resume action, ACT07 is the left-hand approval key, ACT08 is the right-hand reject key, and ACT09 is stop/back. The double-width microphone/spacebar still coalesces ACT10 and ACT11. The joystick remains an explicit agent/game stream unless the operator visibly enables the separate macOS pointer adapter.

Each slot needs a durable record such as:

{
  "slot": 2,
  "generation": 7,
  "task_id": "redacted-stable-task-reference",
  "role": "researcher",
  "state": "listening",
  "voice_session": "active",
  "last_heartbeat_ms": 120,
  "pending_approval": null
}

The generation is essential. If Slot 2 is replaced, a late transcript, button release, or approval from generation 6 must not affect generation 7. Likewise, a multi-slot voice brief should display its targets before the broker fans out the transcript; speech must not silently become a broadcast command.

The practical architecture is:

AG selector(s) + microphone gesture
  -> exact Report-6 events
  -> AgentRouter target set and wide-key coalescing
  -> voice/slot coordinator
       |- create, focus, resume, replace, or reject
       |- transcript source and end-of-speech boundary
       |- six stable task references with generation guards
       |- authorization, fan-out preview, and audit record
       `- state renderer -> six v.oai.thstatus entries
  -> Codex task, DSCO worker, local process, or remote agent adapter

There are three sensible transcript sources. The official Voice Chat path is the best user experience but needs a supported way to hand its transcript to a local slot broker. Push-to-talk dictation can insert text into the focused composer but is not a general event API. A separate local or API-backed speech service gives the broker a clean transcript stream but becomes another service to secure and operate. Scraping private desktop internals would be the most brittle choice and is not required to prove the control model.

Lighting should make the six instances legible without returning to decorative pink and blue. The project baseline is now green: deep emerald for idle, mint for queued, bright leaf green for running, and solid green for complete. Yellow is reserved for approval, red for failure, pale sage for paused, and gray for offline or cancelled. A selected listening slot can pulse between emerald and mint while the other five remain steady. That makes color operational state, not wallpaper.

The prototype also includes a local macOS command surface. The four-dot action key opens a floating overlay with six live lane cards and a short contextual palette. While it is open, the encoder rotates through Voice brief, Fast path, Model pair, Resume, Confirm fan-out, and Stop listening; encoder press and mouse click invoke the highlighted item. The palette sends only those allowlisted, generation-aware gesture requests to the local daemon. It cannot carry a free-form prompt, arbitrary firmware RPC, shell command, or permission change. That makes the device feel like a compact coordination console without turning its physical controls into a silent privilege-escalation channel.

What exists now is enough to prove the complete host-side path: physical target chords, a persistent six-slot coordinator, resumable bounded Codex workers, live per-slot lights, and local speech capture from the Mac microphone. The official Voice Chat gesture remains a separate, exact-unit interoperability fact. Production work remains around packaging, recovery, audit review, and additional runtime adapters; none of it requires flashing or opening the device.

Use case 4: a hybrid macOS controller

Provenance: exact v0.4.1 BLE events and status; host-side implementation; standard mouse and gamepad emission remains unresolved.

The device can operate as a spatial computer controller without pretending its capacitive pad is a trackpad. The pad exposes no continuous X/Y, pressure, contact-count, or swipe collection in either exact descriptor. The continuous two-dimensional source is the planar joystick. The useful composition is touch as an eventual mode clutch, joystick as the vector, encoder as scroll or depth, and keys as explicit actions.

The signed menu-bar application now exposes three visible modes:

Mode Joystick Dial Lighting Safety behavior
Navigate seven-sector command overlay page/change depth calm green diffuser never moves the system pointer
Pointer calibrated macOS pointer velocity vertical scroll cyan/ocean diffuser explicit entry, 30-second inactivity timeout, release on exit/disconnect
Swarm jobs, agents, and results focus/effort/page model and worker state guarded dispatch and approval semantics remain active

Pointer actions are deliberately finite: left click, right click, double-click, drag lock, scroll, Escape, and release-all. The Python daemon does not receive general Accessibility authority. It publishes normalized axes and an allowlisted action queue to the signed AppKit owner, which bounds motion to the active display and releases held buttons on stale input, mode changes, disconnect, pause, or quit. Input Monitoring is required for device input; Accessibility is requested only when Pointer is selected.

Navigate is the safe default and the more important interaction model. The joystick opens a cockpit without disturbing the cursor, selects six visible commands plus a seventh Results sector, and keeps the reason for the current animation in the overlay. This makes the surface useful for paging through agent work even when Pointer mode is never enabled.

The exact BLE unit has entered Pointer and returned to Navigate while retaining v0.4.1 status, battery, layer, and connection telemetry. Offline tests cover dead-zone calibration, nonlinear response, radial hysteresis, click/drag state, malformed reports, timeout, and disconnect-to-neutral behavior. Live USB Report 4 emission remains pending because the unit is currently operating over BLE.

Use case 5: a game controller—with an important distinction

Provenance: exact-unit descriptor and events; implemented host-side mapper; system-wide virtual controller remains a distribution/integration step.

The USB descriptor's native gamepad collection is real, but the Codex profile was observed sending controls over Report 6, and the exact BLE descriptor omits Report 4 entirely. A native gamepad declaration is therefore not the same thing as a working factory gamepad mapping.

The immediately usable route is host-side translation:

codex-micro-probe gamepad --duration 30

The mapper turns AG00AG05 into buttons 0–5, the action row into additional buttons, the wide cap into one coalesced button, the encoder press into a button, encoder turns into momentary dial pulses, and joystick polar coordinates into X/Y axes. It retains the raw polar sample so angle conventions can be corrected without destroying evidence.

That canonical state can be consumed directly by a game or simulator. An in-process virtual joystick API is another straightforward adapter. A system-wide virtual HID gamepad on macOS is a separate packaging problem: current Apple headers require the com.apple.developer.hid.virtual.device entitlement for IOHIDUserDevice, so a production bridge needs an appropriately signed helper or an existing trusted virtual-controller path.

The six illuminated keys are especially well suited to squad or ability selection, with each key showing cooldown, health, readiness, or ownership. The joystick can navigate or orbit; the dial can scrub, zoom, or select; ambient light can show global health or alert state. That is richer than pretending the device is a twelve-key keyboard.

Use case 6: a simulator and mission console, not a flight radio

It can credibly control a drone simulator or act as a secondary input to a ground-station application. It should not be treated as a primary flight transmitter.

The distinction is fundamental. The Micro provides one spring-centered two-axis joystick, not the four continuous axes normally used for manual multirotor flight. BLE, macOS scheduling, a userspace bridge, and a vendor HID protocol add failure modes that a safety-rated radio link is designed to avoid. The device also has no demonstrated independent emergency-stop channel.

A sensible simulator mapping is:

Control Simulator or ground-station role
Planar joystick Pitch and roll, or camera/gimbal motion
Encoder Gimbal, zoom, heading setpoint, or menu selection
Six Agent keys Vehicle/camera selection, flight mode, or autonomous mission slot
Action keys Takeoff request, land request, record, hold, return-to-home, or acknowledge
Lighting Link, GPS, battery, armed state, mission state, and per-vehicle status

Yaw and altitude should remain under a second conventional controller or a well-bounded autopilot mode; they should not be improvised as latching encoder or button state. Likewise, a single key event must never arm motors.

Any real-aircraft experiment needs a safety architecture outside the Micro:

  1. Prove the entire mapping in software-in-the-loop simulation first.
  2. Let the flight controller—not the desktop bridge—own stabilization, geofencing, altitude limits, return-to-home, and loss-of-link behavior.
  3. Require a fresh heartbeat and neutralize commands immediately when input is stale, centered, disconnected, or malformed.
  4. Use bounded rates and setpoints; reject impossible jumps and out-of-range values.
  5. Require an explicit, visible arming sequence plus an independent conventional RC takeover or physical kill mechanism.
  6. Never count the two switches under the wide cap as independent safety confirmations.
  7. Bench-test with propellers removed, then use a controlled test site and a qualified operator.

Under those constraints, the Micro is an excellent experimental mission or simulator console. Without them, it is an unreliable radio replacement. The interesting stretch is not “fly a drone directly over keyboard Bluetooth”; it is “use a programmable, illuminated control surface to command a flight system whose autopilot and failsafes remain in charge.”

What it takes to make the idea trustworthy

Direct access removes a software dependency, but it does not remove the need for a trust model.

HID and local permissions

Input Monitoring lets a process observe HID activity. Grant it only to trusted, identifiable binaries. No application-layer authentication was observed on the vendor channel, so USB physical access and BLE pairing are meaningful parts of the trust boundary.

Treat device events as untrusted input. Validate JSON shape, frame length, numeric range, control ID, and state transition before an event reaches a shell, deployment system, agent approval, purchase, or flight command.

Firmware and persistent state

Bootloader and filesystem mutation methods exist in the public-image method inventory. The clean-room tool blocks them structurally and does not provide a generic RPC command. That is a security property, not merely a conservative default.

The same principle applies to lighting. Runtime preview and status calls are characterized; v.oai.rgbcfg remains gated because its persistence semantics are unresolved. A pretty animation is not worth accidentally rewriting saved device configuration.

Disconnects and silent failures

A successful HID write is not proof of a working protocol. Every request needs a monotonic timeout and a matching response ID. A disconnect can happen after the write but before the reply. Reconnect logic must rediscover the device, re-read transport and descriptor facts, perform device.status, and negotiate features again.

Callbacks must stay alive, parsers must cap reassembly memory, malformed frames must fail closed, and downstream actions need idempotency. Unknown notifications should be logged safely for diagnosis, never executed speculatively.

Multiple clients and privacy

Shared HID access permits coexistence but does not arbitrate meaning. Use one lighting writer and one policy broker, then fan out normalized input to subscribers. Logs should redact device identifiers, local paths, prompts, credentials, and downstream payloads by default. Direct local integration can keep the raw HID stream on the machine; whether later agent or cloud adapters transmit data is a separate, explicit policy decision.

The honest edge of the map

The completed non-invasive work still cannot establish:

No host-controllable haptic actuator has been proven. No real drone was flown. The canonical gamepad mapper and six-worker swarm are host-side integrations, not secret native firmware modes.

Those boundaries do not weaken the central finding. They keep it useful.

From accessory to instrument

At the beginning, the Codex Micro could be lit, paired, and apparently inert at the same time. The breakthrough was not a secret key combination. It was the recognition that keyboard events were the wrong abstraction. Report 6 exposed the device's actual language, and a matched status response proved that the conversation worked in both directions.

From there the pieces accumulated into an instrument. The exact v0.4.1 unit demonstrated direct BLE status exchange, all 13 switch positions, encoder events, full-range joystick input, reversible whole-device lighting, six independently controlled Agent lights, and sustained animation. Its exact USB and BLE descriptors showed why the two transports cannot be treated as interchangeable. The official v0.4.0 image supplied an architectural map of the ESP32-S3, storage, power, input, and lighting subsystems without being passed off as the live firmware.

The protocol is only half of the product. The other half is choreography: selection before action, visible state before approval, generation guards before resumption, a clear Stop control, and light that reports what software is doing rather than merely decorating the desk. In that model, six translucent keys are not six shortcuts. They are six stable addresses into work that can start, pause, disappear, and return.

That same loop scales sideways. A creative tool can turn joystick movement and encoder rotation into spatial control. A game or simulator can consume a normalized controller stream. A ground station can use the surface as a carefully bounded mission console while leaving stabilization and failsafes to the flight system. A local daemon can offer all of those meanings to any language while structurally withholding dangerous firmware operations.

The $250 question therefore has a satisfying answer. This is not merely a closed accessory waiting for one blessed application, and it is not valuable because it can imitate a larger keyboard. It is valuable because physical intent can enter our software through it, software state can return as light, and the rules in between can belong to us.

Reproduction and source notes

The public probe exposes conservative commands rather than arbitrary RPC:

codex-micro-probe discover --json
codex-micro-probe doctor
codex-micro-probe descriptor
codex-micro-probe status --json
codex-micro-probe listen --duration 30
codex-micro-probe gamepad --duration 30
codex-micro-probe agents --duration 30
codex-micro-probe fs-inventory

Primary public references:

The clean-room implementation was written from measured HID interface facts, Apple's public IOKit headers, the official public firmware release, and independently documented wire behavior. It contains no vendor source, private application package, firmware binary, device serial number, or copied proprietary implementation.


Diagram atlas

A visual atlas of the same system keeps measured behavior, public-image analysis, host-side proposals, and unresolved hardware facts visibly separate.

1. One device, several identities

One device, several identities

Reading the diagram. The chassis name, host-advertised product name, commercial SKU, and embedded project name belong to different layers. They are related, but none should be substituted for another. Evidence: claim ledger and live USB capture.

2. Non-invasive physical control map

Non-invasive physical control map

Reading the diagram. All six AG00AG05 and seven ACT06ACT12 switch IDs were captured over BLE. The corrected physical action row is ACT06 Play/A, ACT07 YOLO, ACT08 YEET, ACT09 Stop: YOLO is left of YEET, with Play/A immediately left of YOLO and Stop immediately right of YEET. The wide voice / spacebar cap closes ACT10 and ACT11 within milliseconds, so host software must coalesce them. The diagram is a control-surface model, not a PCB, GPIO, or LED-routing claim. Evidence: BLE input matrix and current physical layout record.

3. USB/BLE host-device data path

USB/BLE host-device data path

Reading the diagram. The Codex profile sends its useful controls over vendor Report 6 on both transports. USB advertises a native Report 4 gamepad collection; the measured BLE descriptor does not. Application-level game state remains possible on either transport. Evidence: USB report map and BLE validation.

4. Report 6 framing and reassembly

Report 6 framing and reassembly

Reading the diagram. A message can span many HID reports. macOS accepting a write does not prove that the device accepted its framing; a matched device.status response is the end-to-end health check. BLE's leading 0x06 is part of the 64-byte output buffer while the report-ID API argument remains 6. Evidence: protocol implementation and BLE status round trip.

5. Firmware partition map and the version boundary

Firmware partition map and the version boundary

Reading the diagram. The partition table and ESP32-S3 target are facts about the public v0.4.0 image. The shipping unit reports v0.4.1, whose binary was not obtained; the dashed bridge is inference, not version equivalence. The public table has a single factory app and no A/B OTA fallback. Evidence: derived firmware analysis.

6. Six-agent broker and status lighting

Six-agent broker and status lighting

Reading the diagram. Selectors identify targets; verbs remain reusable. The implemented router emits auditable intents and the broker is the authority boundary before any external effect. The shown palette is the current code palette, distinct from decorative lighting themes. A bounded runner can report cancelled during shutdown; that runner state does not yet have a tile color. Evidence: agent-control implementation and swarm runner.

7. Game and drone-simulator bridge with a failsafe gate

Game and drone-simulator bridge with a failsafe gate

Reading the diagram. Game-controller state mapping exists today; drone control does not. The safe next experiment is a simulator adapter behind a hold-to-enable gate. Any lost transport, stale report stream, dead-man release, parser error, or process exit must force safe output. Joystick angle-zero orientation remains unmeasured, so its transform is configurable. Real flight additionally needs an independent aircraft-side failsafe and physical kill path. Evidence: gamepad mapper and exact joystick capture.

8. Lighting domains and ownership

Lighting domains and ownership

Reading the diagram. lights.preview drives the broad chassis domains and v.oai.thstatus drives six transparent Agent positions independently; the two were composed successfully over BLE. v.oai.rgbcfg may affect stored settings and remains deliberately untested. Visible zones do not reveal physical LED count or wiring. Evidence: lighting preview, six-tile acknowledgement, and composed animation.

9. RPC safety boundary

RPC safety boundary

Reading the diagram. The probe exposes task-specific operations, not a generic RPC escape hatch. Destructive filesystem and bootloader methods are blocked before any HID write; unknown methods also fail closed. Runtime lighting is opt-in, and the potentially persistent RGB configuration requires a separate explicit acknowledgement. Evidence: protocol safety policy and method classification.

10. Voice-addressed six-slot agent lifecycle

Voice-addressed six-slot agent lifecycle

Reading the diagram. The mode boundary is explicit: in Official Codex mode, the microphone gesture retains the observed desktop Voice Chat semantics; in DSCO Swarm mode, the local router produces a target set and coalesces the two switches under the wide voice cap before the implemented coordinator binds the request to one of six durable task slots. Every slot has a generation so a delayed transcript, release, or approval cannot affect a newly replaced agent. Multi-slot speech requires a visible target preview before fan-out. Evidence: interactive key validation, Voice Chat setting, agent router, and voice daemon.

11. Voice brief: hardware target, Mac audio, agent dispatch

Voice brief: hardware target, Mac audio, agent dispatch

Reading the diagram. The Codex Micro contributes target selection and a microphone-key gesture; it does not expose a USB or BLE audio-input interface. The local native helper opens the selected Mac microphone only after an explicit gesture, then binds the transcript to a generation-qualified agent slot. A timeout, disconnect, cancellation, or late generation fails closed. Optional spoken confirmation uses Mac audio output. Evidence: current physical layout, BLE input matrix, voice daemon, and native voice runtime.

12. Opt-in joystick desktop-control loop

Opt-in joystick desktop-control loop

Reading the diagram. The joystick's continuous angle/distance reports, the corrected Play/A and Stop positions, and encoder pulses are exact-unit observations. The native host implements an explicit, permission-gated macOS pointer bridge: joystick motion controls pointer velocity, Play/A clicks or drags, Stop sends Escape, and the encoder scrolls. Physical angle-zero orientation remains unresolved and therefore configurable. Transport loss, stale input, a mode switch, or permission loss must neutralize motion and release any held button. Evidence: BLE input matrix, current physical layout, computer-control implementation, and guided cursor overlay.

13. One swarm state, four feedback channels

One swarm state, four feedback channels

Reading the diagram. The broker, not the LEDs, owns the swarm's semantic truth and projects it through four coordinated channels: six slot tiles, whole-device lighting, the macOS overlay, and optional Mac speech. v.oai.thstatus and lights.preview are exact-unit v0.4.1 capabilities; state-to-color arbitration, the overlay, and spoken cues are host policy. Green is the calm baseline, yellow is reserved for approval or arming, and red preempts decoration for a failure or blocked state. Official mode must release DSCO's input and lighting ownership to prevent competing writers. Evidence: six-tile live acknowledgement, backpiece visual lab, privilege-latch live proof, voice daemon, and menu-bar controller.


Community knowledge bridge

Source access date: 2026-07-31
Local evidence snapshot: 2026-07-31
Scope: public official documentation, public source repositories, public release artifacts, and this project's non-invasive exact-unit captures
Boundary: no private application code is reproduced; no community claim is promoted to an exact-unit fact without a matching capture

Executive synthesis

The public record now contains three unusually useful clean-room interoperability experiments:

  1. FreeMicro replaces the vendor host software and talks directly to a shipping Codex Micro over macOS IOKit.
  2. codex-micro-4-core2 replaces the Work Louder hardware with independent ESP32 firmware that the ChatGPT desktop host recognizes over BLE.
  3. codex-micro-linux-bridge moves the physical device onto Ubuntu and forwards its HID traffic into a desktop runtime.

Our project closes the fourth side of that square: it independently opened the exact shipping unit on macOS, completed a real device.status round trip on firmware v0.4.1, decoded both USB and BLE descriptors, captured every Codex switch plus encoder and joystick input, and drove both whole-device and six-key lighting over BLE. Taken together, these are strong evidence that the valuable interface is a reproducible HID protocol rather than a hardware attestation or an inseparable dependency on a single desktop application.

Independent hosts, replacement hardware, and Linux transport all meet at the same Report 6 protocol

That conclusion has limits. The protocol is undocumented by the vendors and may change. Public hardware replicas do not reveal the original PCB. A standard USB gamepad collection exists, but the Codex-profile controls observed here use the vendor channel instead, and the BLE descriptor omits the gamepad report. The correct integration strategy is therefore capability detection and versioned adapters, not assumptions based on the product name alone.

Evidence vocabulary

Label Meaning
Official OpenAI or Work Louder public product, setup, usage, or release material
Exact unit Captured from the connected shipping unit in this project
Independent hardware Measured by another project on physical hardware
Independent implementation Clean-room host, firmware, or bridge code exercised against a real endpoint
Public-image static Derived from the verified official v0.4.0 firmware asset, not from the live v0.4.1 image
Inference Plausible synthesis that remains unmeasured

This report gives exact-unit evidence priority for statements about this unit, then official material for intended behavior, then independent implementations for corroboration. Static v0.4.0 findings are never silently attributed to the live v0.4.1 firmware.

Identity and version boundary

The names refer to related but different layers:

Layer Name Evidence
Physical platform Creator Micro 2 Printed chassis and Work Louder setup guide
Host-visible product Codex Micro / Codex Micro #1#3 Exact USB/BLE enumeration and official Bluetooth behavior
Manufacturer Work Louder Exact HID/USB properties
Commercial SKU kbd-1.0-codex-micro OpenAI product page
Embedded project in public image cm-v2-fw Static analysis of the official v0.4.0 merged image
Exact live firmware v0.4.1 Exact device.status round trip
Nearest analyzed public image v0.4.0 Work Louder release

The public release feed currently marks v0.4.0 as the latest stable release and also lists v0.6.0-rc.13 as a pre-release with new Codex integration and connection behavior. That is not a license to treat the shipping Codex v0.4.1 unit, the generic Creator Micro 2 v0.4.0 asset, and the v0.6.0 release-candidate line as one monotonic firmware branch. The release notes and the live unit imply product- or build-specific versioning that remains undocumented.

Official baseline

Source What it establishes What it does not establish How exact-unit evidence extends it
OpenAI Codex Micro product page Work Louder collaboration; SKU; six live Agent keys; 13 switches; touch sensor; rotary encoder; planar joystick; RGB; USB-C/Bluetooth; macOS/Windows positioning HID descriptor, report framing, RPC methods, chip, PCB, direct third-party API, firmware version Confirms Codex Micro, Work Louder, 303A:8360, Report 6, v0.4.1, and direct IOKit interoperability
OpenAI Codex Micro usage guide Three BLE channels; Input Monitoring requirement; USB cable does not change a BLE-selected transport; six-chat status semantics; custom actions/skills; analog-stick and dial behavior; Work Louder Input is optional for ChatGPT integration Wire protocol, third-party compatibility promise, exact transport-selection algorithm, original electronics Confirms BLE channel identities and mode behavior; shows that the live status/event channel can be consumed without ChatGPT once opened directly
Work Louder Creator Micro 2 setup Creator Micro 2 naming; Input configurator; data-cable requirement; up to six layers; touch control and three indicators; three BLE slots plus wired mode; AppSense; charging while BLE stays active JSON-RPC, HID map, board schematic, GPIO assignments, LED count, radio implementation Explains why a plugged-in cable may only charge; exact captures distinguish USB and BLE using IOKit Transport, descriptor, and a status round trip
Work Louder firmware releases Official binary provenance and release notes; v0.4.0 communication/charging rewrite; current v0.6.0 release candidates describe Codex, Comms Mode, and USB/BLE reliability work Source code, exact v0.4.1 image, proof that every build targets the same hardware variant Verified v0.4.0 asset hash and parsed its ESP32-S3 header and partitions; keeps those static findings separate from v0.4.1 behavior

Two official hardware details narrow the non-invasive model without proving the exact board assembly. Work Louder's reset procedure describes a top PCB linked to a lower PCB by a flat cable and identifies separate reset and boot buttons. That is credible platform-level evidence of a two-board construction. It still does not reveal the Codex unit's routing, component population, antenna, LED topology, or GPIO pinout.

Community source matrix

FreeMicro: independent host and protocol reference

Source: repository and wire protocol

Confirms independently:

Does not prove: the exact behavior of our unit; original PCB/BOM; every statically discovered RPC; protocol stability across future firmware; that a method acknowledging a message produces the same visible result on every unit.

Our bridge: the exact unit reproduced the BLE framing and status round trip, all 13 switch IDs, dual-switch wide-cap timing, act:2 encoder ticks, full-range joystick samples with an exact zero return, and all six Agent-key lighting entries. This is independent replication rather than reliance on FreeMicro alone.

OpenMicro: controller-to-agent semantic bridge

Source: stephenleo/OpenMicro

Confirms by implementation: a conventional gaming controller can drive Codex CLI, the Codex macOS app, and other coding harnesses through a semantic mapping layer. Its defaults map face buttons to submit/interrupt/voice/new-chat, stick flicks to workflows or thinking depth, and expose six configurable layers.

Does not prove: anything about the physical Codex Micro's HID protocol, firmware, PCB, native gamepad report, or lighting. Its controller is the input device and Codex is the target; that is the reverse direction from turning the Codex Micro into a general game controller.

Our bridge: exact v.oai.rad, encoder, and switch events provide enough normalized input to feed the same kind of semantic mapper. This supports using the pad as an application-level controller. It does not make the BLE device advertise as a native gamepad.

DIY Codex Micro: physical comparator, not an original-board teardown

Source: Nishkalkashyap/codex-micro-device

Confirms by construction: a visually similar 13-switch controller can be built around an ESP32-S3 with native USB, one GPIO per switch, an EC11 encoder, a 2U cap spanning two positions, and optional WS2812 lighting. That project documents 23 optional pixels on GPIO 47 with a separate regulated 5 V supply and level shifter.

Does not prove: that Work Louder uses those pins, LED count, electrical topology, switch scanning scheme, encoder, or power design. The project explicitly describes a hand-wired resemblance that emits keyboard shortcuts; it does not reproduce Report 6, BLE transport, the planar joystick, touch control, battery system, or live Agent status.

Our bridge: the official v0.4.0 image independently supports an ESP32-S3 family target, but the exact original board remains unopened and its GPIO/BOM remain unresolved. The replica is a useful lower-bound design, not evidence of the production board.

Linux bridge: transport portability and reconnect behavior

Source: Tomatio13/codex-micro-linux-bridge

Confirms by implementation: raw HID framing can be isolated from the host application and forwarded on Ubuntu. The project reports physical BLE plus desktop end-to-end validation on Ubuntu 24.04, scoped udev rules for 303A:8360, multi-report reassembly tests, and recovery when Bluetooth re-enumerates under a new /dev/hidrawN node.

Does not prove: physical USB operation on Linux, runtime success of its alternative uhid helper, behavior on other distributions, official Linux support, or the macOS ownership model. The repository labels these boundaries.

Our bridge: macOS exact-unit captures establish the same device identity, BLE framing, and reconnect-sensitive transport semantics on another operating system. Together, the two projects argue for a transport-neutral protocol core with small OS-specific adapters.

Codex Deck: six-agent control surface without the physical pad

Source: dazer1234/codex-stream-deck

Confirms by implementation: the six Agent slots, action positions, joystick directions, encoder commands, and live task states form a reusable control model that can be rendered on an Elgato Stream Deck and extended across Windows, macOS, and an optional private relay.

Does not prove: the physical device protocol or electronics. It relies on undocumented Codex desktop internals and explicitly warns that desktop releases may break compatibility.

Our bridge: Report-6 events supply the hardware-side equivalent of its virtual controls, while v.oai.thstatus supplies the six independent feedback channels. The combined lesson is to keep agent state and action semantics above the physical transport so either surface can be substituted.

Core2 compatibility firmware: independent device recognized by the host

Source: imliubo/codex-micro-4-core2

Confirms by implementation: an M5Stack Core2 can present an independently implemented BLE vendor HID surface that ChatGPT Desktop recognizes on macOS. The project reports real-hardware validation, Report ID 6 JSON-RPC, six Agent keys with status feedback, six command keys, four direction controls, dial actions, and battery reporting.

This is the strongest public evidence that original Work Louder hardware is not cryptographically required for host recognition. It demonstrates compatible firmware talking to the official host, complementing FreeMicro's official hardware talking to a compatible host.

Does not prove: original-board design, USB compatibility, Windows support, physical analog sampling, original LEDs/layers/updater, or long-term protocol stability. It implements touchscreen actions, not the original controls.

Our bridge: the exact unit supplies the original endpoint characteristics that the Core2 project emulates: BLE identity, Report 6 framing, input method names, device status, and six Agent-state outputs.

OpenAI Codex issue #34099: a reliability field report

Source: openai/codex issue #34099

This public issue reports intermittent HID read failures and a ten-second RGB RPC timeout on another macOS unit running v0.4.1, with both USB and a paired BLE profile in the environment. It records the same VID/PID, BLE product naming, firmware version, and v.oai.rgbcfg method seen elsewhere.

It is a user-submitted diagnostic report, not a vendor root-cause statement or an independently reproduced defect. Its transport-contention explanation is explicitly a hypothesis. Our short exact-unit sessions were stable enough for status, input, filesystem, and sustained lighting tests; they do not refute an intermittent failure that may require a longer window. The engineering response is clear even before root cause: expose active transport in logs, place deadlines around RPCs, treat disconnect as normal, rediscover by identity rather than path, and never let a lighting update block input processing.

Exact-unit corroboration matrix

Interface fact Public/community claim Exact-unit evidence Resolution
Product identity Official Codex Micro; FreeMicro 303A:8360 USB device Confirmed
Live firmware FreeMicro tested v0.4.1 Device status and BLE validation Confirmed
Direct macOS access FreeMicro requires IOKit + Input Monitoring BLE shared open and status reply Confirmed
BLE output framing 64 bytes with leading 0x06; report-ID arg remains 6 Matched device.status reply using that framing Confirmed
USB descriptor 275-byte composite HID USB HID map Confirmed and decoded
BLE descriptor 216-byte composite HID BLE validation Confirmed and decoded
Six Agent + seven action switches AG00AG05, ACT06ACT12 BLE input matrix All 13 confirmed
Wide key ACT10 and ACT11 fire together Down edges 3 ms apart; up edges 2 ms apart Confirmed
Encoder semantics turns may use values other than act:1 ENC_CW/ENC_CC observed with act:2, no release Confirmed
Joystick normalized angle/distance, zero at center Four full-distance samples and exact {0,0} return Confirmed; orientation not assigned
Per-Agent lighting v.oai.thstatus, six independent entries Six-key ACK and visual confirmation Confirmed
Whole-device lighting Public sources disagree on lights.preview Visible blue BLE preview Confirmed on this unit only
Sustained animation Protocol supports repeated multi-report updates 81-frame composite capture Confirmed at about 3.3 fps over tested BLE link
ESP32-S3 architecture Community replicas use ESP32-S3; official binary is ESP format v0.4.0 static analysis Confirmed for public v0.4.0; inferred for exact v0.4.1 unit

Contradictions and their current resolution

1. lights.preview versus v.oai.rgbcfg

FreeMicro's current protocol document says lights.preview acknowledges but is visibly inert on its v0.4.1 unit, and identifies v.oai.rgbcfg as the working whole-device path. Our exact v0.4.1 unit acknowledged lights.preview and visibly turned blue over BLE; the photograph and parameters are retained. Both projects visibly confirm v.oai.thstatus for the six Agent keys.

Resolution: do not globalize either unit's whole-device result. Implement both methods behind a version/capability adapter, establish transport health with device.status, hold each test state long enough for visual observation, and restore host ownership afterward. v.oai.rgbcfg remains independently corroborated but deliberately untested on our unit because its persistence semantics were not yet characterized.

2. Which descriptor has the Feature item?

FreeMicro's transport table correctly says the 216-byte BLE descriptor adds a Feature item. A later sentence in the same file says USB adds that item to reach 275 bytes. The included 216-byte hex and our exact capture resolve the typo:

Resolution: the material transport capability difference is USB's Report 4 gamepad collection, not a USB-only Feature item.

3. v0.4.1 shipping behavior versus v0.6.0 release-candidate notes

The shipping Codex unit and FreeMicro both report v0.4.1 with working Codex methods. The generic Work Louder release feed describes v0.6.0-rc.13 as adding support for an upcoming Codex integration.

Resolution: treat these as potentially different build/product trains. Do not sort features solely by semantic version across products. Match product identity, descriptor fingerprint, device.status.version, and observed method behavior.

4. “Haptic” pad versus touch control

FreeMicro calls the lower-left control a haptic pad. OpenAI and Work Louder call it a touch sensor/control, and their documented behavior is layer/connection selection. Our v0.4.0 static inventory contains touch-related surfaces but no proven motor driver or host haptic command.

Resolution: touch input and three indicators are confirmed; a host-controllable vibration actuator is unresolved. “Haptic” is not evidence that force feedback exists.

5. Native gamepad capability versus observed Codex input

The USB descriptor contains an 11-byte gamepad Report 4, but every Codex-profile key, encoder tick, and joystick sample captured here arrived as Report-6 JSON-RPC. BLE omits Report 4 entirely. OpenMicro demonstrates that gaming controllers can be mapped into coding actions, not that Codex Micro emits a native gamepad stream in its current profile.

Resolution: game-control applications are practical through a host bridge that converts normalized Report-6 events into an application or virtual-device API. Native USB Report-4 emission on another Work Louder layer remains an unmeasured possibility; native BLE gamepad advertisement is refuted by the current descriptor.

6. Printed keycaps versus physical switch identity

Official docs emphasize remapping and swapping caps. FreeMicro warns against hard-coding legends. The exact unit's owner has already rearranged the caps.

Resolution: use AGxx, ACTxx, and encoder identifiers as the stable physical address. Store cap labels and logical actions in user configuration. Coalesce ACT10 and ACT11 unless the user intentionally enables separate wide-key behavior.

7. Cable presence versus active USB transport

Both official setup guides state that plugging in a cable while a BLE slot is selected charges the device without switching the communication path. Public reliability reports also show why guessing transport from cable presence is dangerous.

Resolution: inspect the IOKit transport property and prove the outbound path with a matched device.status reply. A charging flag is not a transport flag.

What the public hardware work actually adds

The hardware boundary is narrower than “unknown,” but wider than a teardown:

Hardware fact Status Basis
13 mechanical switches, touch control, rotary encoder, planar joystick Confirmed platform specification OpenAI and Work Louder
Six transparent Agent positions and seven action switch IDs Confirmed exact input surface Exact event capture
Double-width slot closes two switches Confirmed exact mechanical behavior Exact millisecond timing
Top and lower PCBs connected by a flat cable; reset and boot buttons Official platform documentation Work Louder reset instructions
ESP32-S3 target Confirmed for official v0.4.0 public image Image header chip ID and embedded build identity
MAX77972 charging/fuel-gauge integration Confirmed for v0.4.0 public image Curated static component evidence
Original switch GPIOs, encoder pins, joystick interface, LED data pins Unresolved No schematic or exact board inspection
Original LED count and electrical topology Unresolved Diffused visual output is not a count
Host-controllable haptic actuator Unresolved No motor/output evidence
Antenna layout, exact BOM, PCB routing, flash package/capacity Unresolved Requires authoritative design files or approved inspection

The DIY ESP32-S3 project proves that a simple one-pin-per-key design is viable; it does not move the original board's unknowns into the confirmed column.

Engineering consequences for this project

Protocol core

Input and controller use

Six-agent orchestration

Reliability and coexistence

Source-quality notes

Bottom line

The combined evidence supports an open-integration thesis with unusually high confidence: the shipping v0.4.1 pad is directly usable by arbitrary macOS software through IOKit, and the Report-6 JSON-RPC interface is sufficiently reproducible that independent projects have replaced the host, replaced the hardware, and moved the transport to Linux.

What remains proprietary or unresolved is not the ability to communicate. It is the production hardware design, firmware source, compatibility commitment, and some version-dependent method behavior. A serious integration should build around the confirmed protocol, preserve exact provenance, and assume that transport, descriptors, and lighting methods may evolve.


Validation matrix

Updated 2026-07-31.

Area Scenario Result Provenance / note
Offline USB report framing PASS 63 bytes; no in-buffer report-ID prefix
Offline BLE report framing PASS 64 bytes; leading 0x06
Offline Split JSON reassembly PASS CRLF message boundary across reports
Offline Malformed frame recovery PASS junk and invalid JSON discarded safely
Offline Exact USB descriptor decode PASS reports 1/2/3/4/6 and expected widths
Offline Forbidden method policy PASS bootloader and filesystem mutation blocked
Offline Firmware header/partition parser PASS synthetic test image
Static Official v0.4.0 digest PASS SHA-256 matches release metadata
Live USB Enumeration PASS exact unit active as 303A:8360
Live USB Descriptor capture PASS exact 275-byte descriptor retained redacted
Live RPC device.status via installed host PASS exact unit reported v0.4.1
Live RPC Probe-owned device.status over BLE PASS shared open, v0.4.1, correct prefixed framing
Live input All keys and double-width key PASS all 13 IDs; wide pair 2–3 ms apart
Live input Encoder press/directions PASS turns use act:2; press routed as inspect
Live input Joystick range/center PASS full distance in four samples; exact zero return
Live input Touch/profile control PENDING standard-HID path requires capture
Live input Interactive Agent + microphone chord diagnosis PASS all six Agent keys and ACT10/ACT11 press/release edges arrived over BLE
Host integration Voice Chat microphone-key mode PASS exact-host setting and quick-tap behavior observed; hold is the end gesture
Hybrid controller Navigate / Pointer mode transition over BLE PASS exact v0.4.1 daemon state changed to Pointer, enabled native output, and selected the Ocean backpiece scene; returned to Navigate with neutral axes
Hybrid controller Pointer timeout cannot reactivate itself PASS full 157-test Python suite covers desired/active mode convergence and second-tick stability
Standard HID decode Reports 1–4 offline fixtures PASS keyboard edges/modifiers, consumer usage, five-button relative mouse, six-axis/32-button gamepad, malformed lengths
Native pointer model dead zone, acceleration, centering, maximum speed, stale watchdog PASS five Swift tests; signed release app rebuilt and strict signature verification passed
Native standard HID emission Reports 1–3 over BLE PENDING descriptor presence is confirmed; factory-profile emission needs an isolated physical mapping capture
Native standard HID emission Report 4 over USB PENDING USB-only descriptor collection; wired-mode live emission remains unproven
Live lighting lights.preview isolated test PASS BLE ACK plus visible blue ambient glow in photograph
Live lighting v.oai.thstatus isolated test PASS six green entries ACKed and visually confirmed over BLE
Live lighting 49-frame per-Agent animation PASS v0.4.1 replied to every runtime-only red-eye frame
Live lighting composite whole-device camouflage PASS effect 5 preview plus 81 six-tile BLE frames in 24.4 s
Host lighting Backpiece Visual Lab allowlist / restore / critical preemption PASS eight named scenes; five-step transitions; 15-second preview; included in the 157-test Python suite
Live lighting Forest backpiece scene emission PASS exact v0.4.1 connection accepted runtime preview frames before later BLE loss
Live lighting Complete eight-scene optical acceptance sweep PENDING BLE transport disappeared before a user-visible one-by-one sweep completed
Live lighting v.oai.rgbcfg isolated test NOT RUN possible persistence requires explicit acknowledgement
Live filesystem bounded fs.list + 939-byte fs.read PASS only keymap.json; no mutation
BLE enumerate/status/events PASS exact unit Codex Micro #1, 216-byte descriptor
BLE lighting PASS preview visible; per-Agent green visible; composite animation sustained about 3.3 fps
Hardware case/PCB inspection OUT OF SCOPE non-invasive first milestone
Firmware UX Brick Breaker / Asteroids trigger map PENDING exact-unit user observation retained; trigger and host-vs-device rendering boundary unresolved

“Pending” means tooling exists but the physical interaction was not captured. “Not run” means the method was deliberately withheld. Neither is reported as a failure or silently upgraded to a confirmed capability.


Claim ledger

Every consequential statement is attached to a provenance class and an explicit status. Local evidence links remain relative to this research package.

ID Claim Provenance Status Evidence
ID-01 The physical chassis is labeled Creator Micro 2 user observation confirmed User supplied physical-label observation
ID-02 USB product identity is Codex Micro by Work Louder exact-unit live confirmed evidence/live/2026-07-31/usb-device-redacted.json
ID-03 USB VID PID is 303A 8360 exact-unit live confirmed evidence/live/2026-07-31/usb-device-redacted.json
ID-04 Exact unit runs firmware v0.4.1 exact-unit live via installed host confirmed evidence/live/2026-07-31/device-status-redacted.json
ID-05 Report ID 6 is a 63 byte bidirectional vendor collection exact-unit live confirmed evidence/live/2026-07-31/hid-report-map.json
ID-06 Vendor channel carries framed JSON RPC exact-unit logs plus independent v0.4.1 implementation corroborated evidence/live/2026-07-31/device-status-redacted.json
ID-07 Public v0.4.0 image targets ESP32-S3 official public image static analysis confirmed evidence/firmware/v0.4.0-analysis.json
ID-08 The exact v0.4.1 unit uses the same ESP32-S3 target nearest-version and VID inference inferred evidence/firmware/v0.4.0-analysis.json
ID-09 Public v0.4.0 layout has no A B OTA application slots official public image static analysis confirmed evidence/firmware/v0.4.0-analysis.json
ID-10 USB and BLE use different write framing independent shipping-unit v0.4.1 implementation corroborated https://github.com/eliBenven/freemicro/blob/main/docs/PROTOCOL.md
ID-11 Current-unit PCB routing BOM and GPIO pinout are known none unresolved Non-invasive scope prevents confirmation
ID-12 lights.preview visibly drives the exact unit over BLE exact-unit live plus user photograph confirmed evidence/live/2026-07-31/lighting-preview.json
ID-13 BLE product identity is Codex Micro #1 and its descriptor is 216 bytes exact-unit live confirmed evidence/live/2026-07-31/ble-validation.json
ID-14 BLE device status and input events work with report-ID-prefixed framing exact-unit live confirmed evidence/live/2026-07-31/ble-validation.json
ID-15 All 13 Codex switch IDs emit clean down up pairs over BLE exact-unit live confirmed evidence/live/2026-07-31/ble-input-matrix.json
ID-16 The wide cap closes ACT10 and ACT11 within milliseconds exact-unit live confirmed evidence/live/2026-07-31/ble-input-matrix.json
ID-17 Encoder turns carry action value 2 rather than 1 exact-unit live confirmed evidence/live/2026-07-31/ble-input-matrix.json
ID-18 BLE descriptor contains native gamepad Report 4 exact-unit live refuted evidence/live/2026-07-31/ble-validation.json
ID-19 An earlier 2026-07-31 cap arrangement was flask yolo yeet magic microphone and menu exact-unit historical user photograph confirmed evidence/live/2026-07-31/physical-layout.json
ID-20 The live device filesystem root contains only a 939 byte keymap.json exact-unit read-only BLE RPC confirmed evidence/live/2026-07-31/filesystem-inventory.json
ID-21 The current keymap has one vendor layer and no macros or multi-actions exact-unit read-only BLE RPC confirmed evidence/live/2026-07-31/keymap.json
ID-22 v.oai.thstatus accepts six Agent lighting entries over BLE exact-unit live confirmed evidence/live/2026-07-31/agent-lighting-ack.json
ID-23 v.oai.thstatus independently controls all six transparent Agent key lights exact-unit live plus user visual confirmation confirmed evidence/live/2026-07-31/agent-lighting-ack.json
ID-24 The exact v0.4.1 unit accepts repeated per-Agent animation frames over BLE exact-unit live confirmed evidence/live/2026-07-31/evil-eyes-animation.json
ID-25 Whole-device preview and six independent Agent-key frames can be layered over BLE exact-unit live confirmed evidence/live/2026-07-31/octopus-camouflage-animation.json
ID-26 Sustained multi-report Agent animation reached about 3.3 frames per second over the tested BLE link exact-unit live confirmed evidence/live/2026-07-31/octopus-camouflage-animation.json
ID-27 The lower-left control contains a host-controllable haptic actuator official specification plus public-image static search unresolved No motor or haptic method is evidenced; only touch input is confirmed
ID-28 All six Agent keys and both microphone-cap switches remained healthy during the interactive BLE diagnosis exact-unit live confirmed evidence/live/2026-07-31/interactive-key-validation.json
ID-29 The configured desktop host exposes Voice Chat as a microphone-key mode with tap to start or toggle and hold to end user-supplied exact-host settings screenshot confirmed evidence/live/2026-07-31/voice-chat-setting.png
ID-30 The exact v0.4.1 unit can drive the host hybrid controller over BLE and enter a visible Pointer mode exact-unit live confirmed evidence/live/2026-07-31/hybrid-controller-live-proof.json
ID-31 The capacitive control provides continuous X/Y trackpad coordinates descriptor plus public firmware analysis refuted Neither USB nor BLE descriptor contains a touch digitizer or absolute X/Y touch collection; official behavior is layer and transport selection
ID-32 The USB descriptor declares a six-axis 32-button gamepad report exact-unit descriptor confirmed evidence/live/2026-07-31/hid-report-map.json
ID-33 The factory v0.4.1 profile actively emits native USB gamepad Report 4 exact-unit live unresolved Wired-mode active emission capture remains pending
ID-34 Top middle YOLO drove full yellow red background and authorized one successful native DSCO systems-agent voice job exact-unit live host integration confirmed evidence/live/2026-07-31/privilege-latch-live-proof.json
ID-35 The DSCO host emitted a five-step Forest backpiece scene to the exact v0.4.1 unit and exposes eight named reversible scenes exact-unit live host integration plus offline tests confirmed evidence/live/2026-07-31/backpiece-visual-lab.json
ID-36 The user observed Brick Breaker and Asteroids during exact-unit interaction but the trigger rendering surface and protocol entry point remain unknown exact-unit user observation confirmed evidence/live/2026-07-31/minigame-observation.json
ID-37 The current action layout is Play YOLO YEET Stop wide voice-spacebar and cockpit exact-unit current user photograph plus explicit operator correction confirmed evidence/live/2026-07-31/physical-layout-current.json

Diagram detail