
A weekend spent making my favourite tool nicer to drive: what I set out to solve, the constraints I chose, and how each round of using it made the next version better.
The opportunity hiding in plain sight
It’s a Saturday morning. Claude is tearing through a refactor in one terminal tab while another one waits for me to say yes to something. I’m switching between them, keeping the whole picture in my head, and enjoying it, because this is genuinely a great way to work.
It’s also the kind of moment where you spot an opportunity. Claude Code already knows everything I keep going to look up: which session is running, what tool it’s on, how full the context is, whether it needs an answer. All of that lives in the terminal, and I’m the one doing the fetching.
Send a slash command, hit Esc when Claude heads off in a different direction, approve a permission prompt, flip into plan mode, check the context. Each one is easy on its own. Put them next to the state I have to go and read first, and there’s a nice little design problem sitting right there: how much of this could just be true at a glance?
I have been a Stream Deck user for productivity since its launch, and always tried to use it to bring keys at my disposal and be a heavy keyboard user.
Recently I updated my setup to a Stream Deck+. Over the last couple of weekends, I had this question: can Claude Code’s state be visible at a glance, and its common actions be one press away, without ever reading the terminal?
The first idea I had was the obvious: put my common Claude Code commands on keys. Useful, but it turned out there was a better idea after all. The commands were the cheap part. Knowing what state Claude is in was the valuable part. Shortcuts save seconds; not having to go and look keeps your train of thought intact.
Finding that distinction early is what made the rest of the weekends fun. Everything after it is just consequences.

What it actually does
- Follows Claude automatically. The deck flips between three layouts on its own as a session goes from waiting for you, to working, to needing permission.
- Shows the session at a glance. Tokens for the last turn, context fill, git branch, changed files, Bash calls, session age, a live turn timer, and what tool Claude is running right now.
- Puts the commands on keys.
/diff,/code-review,/resume,/compact,/clear,/contextand a plan-mode key that cycles Manual → Plan → Auto. - Answers permission prompts. Allow, Allow always, or Deny, without reaching for the keyboard.
- Stops and rewinds. Esc and Esc-Esc as real keys, plus a toggle for the transcript view that closes itself when the turn ends.
Now the extremely fun parts, dials:
- Four dials. The keys change with Claude session hook; the dials stay put, because they belong to the whole session rather than the moment:
- Session. Rotate to walk through every live Claude Code session, with each one’s terminal tab title on the strip. Press to jump to that window. This is the dial the other three follow: whichever session it’s pointing at is the one they act on.
- Permission mode. Rotate to preview Manual, Plan, Auto and the rest of Claude Code’s ring; press to apply it. Preview first, commit second, so a stray nudge can never drop you into
bypassPermissions. - Model. Rotate to line up a model, press to switch to it via
/model. Handy mid-session when a job turns out bigger, or smaller, than you thought. - Effort. Rotate through effort levels with a little bar gauge on the strip, press to apply. Nothing reports effort back, so it shows what you last set from the deck and says as much.
- Gets out of the way. When Claude is done or idle, the deck hands itself back to your normal profile.
Where it’s at
Right now this is a power plugin that works seamlessly with Claude Code, but my goal is to make this a plugin that benefits from direct integration into claude code and makes Elgato Stream Deck + a true companion for Claude code and takes the agility of claude code even further.

Leave a Reply