claudeers.
// Developer Tools

deck_neo

A Stream Deck Neo cockpit for Claude Code and OpenAI Codex sessions.

Install with your AI

Paste into Claude Code, Cursor, or any agent — it reads the repo and wires the tool into your project.

Install and set up deck_neo (git-clone project) into my current project.
Found on https://claudeers.com/deckneo
Repo: https://github.com/mgc26/deck_neo
Homepage/docs: —
Detected install method: git-clone → git clone https://github.com/mgc26/deck_neo
Category: devtools. Platforms: cli, api.
Read the repo's README for exact setup and env vars, then install it and wire it into my project.

Claudeers Health Verdict:
unknown; community-verified: false. Confirm the source before running anything.
// or clone
git clone https://github.com/mgc26/deck_neo

// compatibility

Platformscli, api
Operating systems
AI compatibilityclaude
LicenseMIT
Pricingopen-source
LanguageTypeScript

deck_neo

Turn an Elgato Stream Deck Neo into a physical cockpit for Claude Code sessions: see which agents are working, catch permission requests, and answer without hunting through terminal tabs.

Stream Deck Neo showing four synthetic agent sessions and illuminated Approve and Stop controls Stream Deck Neo showing a reusable command palette

The images show the synthetic demo loop included in this repository, not live agent sessions.

Inspired by the Work Louder Codex Micro, deck_neo uses hardware you may already have to provide the monitoring-and-answering part of a dedicated agent controller.

What it does

  • Monitors sessions at a glance. Four top-row tiles show the current page of sessions: blue is working, amber blinking needs attention, green is ready, and an ended session goes dark.
  • Acts on the selected session. Physical APPROVE, STOP, CONTINUE, and NEW keys send input to the correct tmux target.
  • Keeps context visible. The Neo infobar shows the selected session and its latest event.
  • Stores repeated commands. Either touch zone opens a bank of up to eight reusable prompts and commands.
  • Separates signal from permission. Brightness says whether an action is relevant now. It is not a lock; a dim action key can still act when the selected session has a live tmux target.
  • Handles more than four sessions. The touch zones page through additional groups of sessions before reaching the command bank.

A white border marks the selected session. A prefix marks a watch-only session that reports status but has no tmux target for the action keys.

Compatibility

ComponentRequirement
Operating systemmacOS
HardwareElgato Stream Deck Neo
RuntimeNode 22.18 or newer
Session controltmux
Primary integrationClaude Code through the included cc wrapper
Optional integrationOpenAI Codex CLI through cx or cxa, with the limits below

The daemon opens the Neo directly over USB. The Elgato Stream Deck app must release the Neo first, although it can continue driving your other Elgato devices after deck_neo claims the Neo.

Installation at a glance

  1. Clone the repository and install dependencies:

    git clone https://github.com/mgc26/deck_neo.git
    cd deck_neo
    npm install
    
  2. Merge the included Claude Code hooks into ~/.claude/settings.json.

  3. Create ~/.deck-neo/config.json with your projects, commands, and key sequences.

  4. Install bin/cc as a shell alias so Claude sessions start inside tmux.

  5. Quit the Elgato Stream Deck app, then run npm start so the daemon claims the Neo.

  6. Optionally install the included launchd service for automatic startup and reconnects.

The setup uses absolute paths and macOS permissions, so follow the complete installation guide rather than copying these summary steps alone. The Codex CLI guide covers notify forwarding and the cx and cxa wrappers.

How it works

Status takes one path:

Claude hooks or Codex notify adapter
        -> ~/.deck-neo/sessions/*.json
        -> TypeScript daemon
        -> Stream Deck Neo

Input takes the reverse path:

Neo keypress -> AppController -> tmux send-keys -> selected agent session

The hook processes always exit successfully so a reporting problem cannot block an agent turn. Invalid configuration leaves the last good configuration active and writes the error to the local log.

Support matrix

Session typeStatusAction keys+ NEW
Claude Code started with ccWorking, needs-input, ready, ended, and subagent activityYesYes
Plain Claude CodeSame hook-driven status, marked watch-onlyNoNot applicable
Codex CLI started with cxReady/completed; blue after deck-initiated sendsYesNo
ChatGPT app threadCompletion status, marked watch-onlyNoNo
ChatGPT app thread resumed with cxaSame Codex status limitsYesNo

Codex exposes one completion notification rather than Claude Code's lifecycle hooks. It therefore cannot show amber permission requests, and typing directly in the terminal does not turn the tile blue. See Codex CLI sessions for the exact behavior.

Light and control behavior

SignalMeaning
Blue session tileAgent is working
Amber blinking session tileClaude Code needs attention now
Green session tileSession is ready or the turn is done
Dark session slotSession ended or no session occupies the slot
Red STOP keyInterrupt the selected running turn
Brief red flashThe requested action had no usable target
White borderSelected session

No top-row session state renders red. Dim action keys are informational rather than disabled; dispatch still follows the selected session's live tmux target.

Development

npm test       # 381 unit, contract, integration, and system tests
npm run build  # strict TypeScript check
npm run demo   # synthetic session timeline for filming or hardware review

The automated suite uses fake device and system adapters, so CI does not require physical hardware. Hardware-facing changes still need a manual Neo check on macOS.

Known limitations

  • macOS and the Stream Deck Neo are the supported platform and device.
  • The official Elgato app takes exclusive USB access if it opens the Neo first; installation documents the required claim order.
  • Action keys require a session started or resumed inside tmux.
  • Window raising currently targets Cursor through macOS System Events and requires Accessibility/Automation permission. Selection and tmux input still work without it.
  • Codex CLI has completion-only notifications, no amber permission state, and no + NEW integration.
  • Session names are the control identity. Parallel sessions in the same project need explicit distinct names such as cx api and cx api-2.

Contributing and security

Read CONTRIBUTING.md before opening a pull request. Ordinary bugs and feature proposals belong in GitHub Issues. Report security problems privately using the process in SECURITY.md, not in a public issue.

License

Released under the MIT License.

// faq

What is deck_neo?

A Stream Deck Neo cockpit for Claude Code and OpenAI Codex sessions.. It is open-source on GitHub.

Is deck_neo free to use?

deck_neo is open-source under the MIT license, so it is free to use.

What category does deck_neo belong to?

deck_neo is listed under devtools in the Claudeers registry of Claude-compatible tools.

3 views
10 stars
unclaimed
updated 2 days ago

// embed badge

deck_neo on Claudeers
[![Claudeers](https://claudeers.com/api/badge/deckneo.svg)](https://claudeers.com/deckneo)

// retro hit counter

deck_neo hit counter
[![Hits](https://claudeers.com/api/counter/deckneo.svg)](https://claudeers.com/deckneo)

// reviews

// guestbook

0/500

// related in Developer Tools

🔓

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Curs…

// devtoolsaffaan-m/JavaScript240,305MIT[ claude ]
🔓

Use Garry Tan's exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA

// devtoolsgarrytan/TypeScript128,278MIT[ claude ]
🔓

AI coding assistant skill (Claude Code, Codex, OpenCode, Cursor, Gemini CLI, and more). Turn any folder of code, SQL schemas, R scripts, shell scripts, docs,…

// devtoolssafishamsi/Python109,277MIT[ claude ]
🔓

Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.

// devtoolsDietrichGebert/JavaScript104,762MIT[ claude ]
→ see how deck_neo connects across the ecosystem