Skip to content
User guide

ClauDeck User Guide

Connect, place keys, and press. This guide walks you through everything from installing to returning your first approval. It covers version 2.0.

Contents: Getting started / Setup steps / Reading the keys / Approving / Opening the AI's window / Settings / Antigravity / SSH remote / Troubleshooting / Terms and defaults

Some dialogs in the app (such as Agent Integration and SSH Remote Sync) show Japanese button labels even when the app is set to English. This guide gives the Japanese label with its meaning in parentheses.

Let's set it up together. I'll explain any jargon as we go.

Your guide, Kei
1. Getting started

Getting started

What you need

  • An Apple silicon Mac (macOS 13 or later). It does not run on Intel Macs, Windows, Linux, iPhone or iPad.
  • An Elgato Stream Deck and the Stream Deck app.
  • Claude Code, Codex or Antigravity.

How it fits together

ClauDeck is a menu bar app that brings status, approvals and window switching for Claude Code, Codex and Antigravity onto Stream Deck keys.

① AI

Claude Code, Codex and Antigravity report their status at key points in their work.

② ClauDeck

Receives the reports, decides what to show on which key, and passes approvals back.

③ Stream Deck

Shows the status on keys and sends your presses back to ClauDeck.

  • See status: Idle, Unread, Working, Approve, Input, On Screen, Ended and more appear on the slots.
  • Approve: Press a slot waiting for approval to answer the AI.
  • Jump back: Press a slot that is not waiting for approval to bring that session's app to the front.
When the AI never asks for approval

If Claude Code is in auto mode, Codex is set to dontAsk or bypassPermissions, or the AI runs without a screen (such as claude -p), the AI itself never asks for approval. Status still works, and the key shows "<mode> · No Approvals".

About Antigravity

Status, window switching and approvals are supported. Read-only actions are never held; only writes, command execution and similar actions (Tier 2 and above in Antigravity's terms) are sent for approval. Approvals are enabled only when you choose "承認・拒否も有効" (Approve/Deny enabled), and if you do not press, Antigravity returns to its own setting after 15 seconds (default). See "Connecting Antigravity".

Three words to know first

Session

One conversation or task with an AI. Each conversation gets its own place on the deck.

Slot

A Stream Deck key that handles one session. Create one by placing "ClauDeck Slot" on a key.

Integration

The setting that lets the AI report to ClauDeck, plus the plugin that adds ClauDeck to Stream Deck. Both are set up from the menu.

1. Getting started

Setup (7 steps)

Go from top to bottom. You can always check the connection under "Status" in the ClauDeck menu. If you have not installed it yet, see "How to install" on the download page first.

Kei

Use each step's "Done when" line as your checkpoint.

  1. Show ClauDeck in the menu bar

    Open ClauDeck from the Applications folder and look for the deck-shaped icon in the menu bar at the top right of the screen.

    Done when: clicking the icon shows "このアプリについて…" (About this app) at the top, and the menu has a line starting with "Status:".

    Not there? Check "Allow in the Menu Bar" in System Settings.

  2. Register your AI tools

    Open "Agent Integration" in the menu and choose the row for the AI you use (Claude Code, Codex, Antigravity). For Claude Code and Codex, review what will be added and press "入れる" (Install). For Antigravity, choose the integration level and press "適用" (Apply). No coding needed.

    Done when: Claude Code and Codex show "Registered", and Antigravity shows the level you chose.

    Antigravity settings not found? Launch Antigravity once, then try again.

  3. Install the Stream Deck plugin

    Choose "Install Stream Deck Plugin…" in the menu, then quit and reopen the Stream Deck app as instructed. The plugin is the part that adds ClauDeck's actions to Stream Deck.

    Done when: "Status" in ClauDeck shows "Stream Deck: Connected (N seats)".

  4. Place slots on the deck

    Find "ClauDeck Slot" in the Stream Deck app's action list and drag it onto any key. Then run "Test Buttons" from the ClauDeck menu to check it.

    Done when: the slot ID (such as c0r0) appears in the in-app guide. "AI Slot" is a different plugin, so do not mix them up.

  5. Check the approval mode

    Look at "Mode" under "Status". own means approvals are taken on the deck (default). defer shows status only, and approvals happen on the AI's screen. You can change it with "Show Welcome Screen Again…".

  6. Give your AI its first task

    Run your AI once in your project as usual. For Codex, answer the one-time prompt in the interactive CLI to trust ClauDeck's notifications. For Antigravity, quit and reopen it after applying the settings, then send a task.

    Done when: the session takes a slot and the start of your prompt appears on the key's top line.

  7. Return one approval

    Ask the AI to do something that needs confirmation, such as editing a file. When the key flashes and a sound plays, check what it is and press the key.

    Done when: the action goes ahead on the AI side.

2. Basic operation

Reading the keys

The top line shows the start of the prompt or the tool name, the center shows the current state, and the bottom line shows extra details. A red dot at the top right and flashing mean "a person needs to approve now".

ExampleStateMeaning and what a press does
Empty
Dashed frame, no text
The key is placed but no session has taken it yet. Only a slate band at the top and a dashed frame appear. Text appears when you send your first prompt. Pressing does nothing.
my-appIdlea18f3c2d
Idle
Grey
The session exists but is not doing anything. Press to open its window.
my-appIdleCC · a18f3c2d
Unread
Grey, raised
The turn has finished but you have not looked yet. Same color as Idle, but it stays raised until you press it or send the next prompt.
Prompt textThinkingCX · Bash
Thinking
Blue
The AI is working out its answer; no tool is running. The previous tool name appears at the bottom. Most of a turn is spent here (measured: median thinking time 7.9 s, tool run time 117 ms).
Prompt textBashCX · a18f3c2d
Working
Blue
Running the tool shown (Bash, Read and so on). No sound plays while working.
Prompt textCompactingCC · a18f3c2d
Compacting
Blue
The conversation got long, so the AI is summarizing it automatically. Your task is not moving forward, so this is shown separately from Working.
EditApproveHold=Always
Approve
Amber, flashing
Press once to approve. The red dot and flashing mean a person is needed.
BashHoldb72e91a4
Hold
Red, flashing
A high-impact action such as deletion, push or sending data out. It is approved only when you hold the key for 0.8 s or longer.
QuestionInputa18f3c2d
Input
Green, not flashing
A multiple-choice question. It cannot be answered on the deck, so press to open the AI's window.
EditOn Screena18f3c2d
On Screen
Amber, not flashing
The hold time passed and the approval went back to the AI's screen. Press to open it and answer there.
UndoableSendingPress again
Grace period
Blue
The 1.5 s before an approval is sent. Press the same key again to cancel sending.
EditDenyRelease=Back
Deny
Red slash, not flashing
Shown while you hold the Deny key. All flashing on the deck stops. Press a slot now to deny that request.
my-appEndeda18f3c2d
Ended
Black
The session has ended. It stays as a record and becomes empty after 15 minutes (default). If slots run short, the oldest ones are reused sooner.
ClauDeckOffline 
Offline
Black, raised
ClauDeck is not running (quit, not yet started, and so on). The key changes to this about 3 seconds after the connection drops. Approvals are asked on the AI's screen as usual during this time, so your work does not stop.

The keys in this table are illustrations. Details may differ from the actual display.

Top and bottom lines

  • The top line shows the start of the latest prompt. For Approve and Hold, the tool name comes first so you can see what you are approving.
  • Hold=Always: you can auto-allow the same request for the rest of that session (see Approving).
  • <mode> · No Approvals: a session, such as auto mode, that never asks for approval.
  • Child N: the number of Codex subagents.
  • 8 characters: the start of the session ID. Same ID means same session.

Which AI (the colored band)

  • Slate band: standby (empty). No AI has taken the slot yet.
  • CC · orange band: Claude Code (desktop and terminal are not distinguished).
  • CX · blue band: Codex.
  • AG · purple band: Antigravity.

Shown both as the band at the top and the first two letters of the bottom line. When the bottom line is full, the letters are dropped, but the band always stays. You can change band colors with agent_colors in the settings file (the two-letter marks are fixed).

2. Basic operation

Approving

How you press depends on what the center of the key says.

Key showsHow to pressWhat happens
ApprovePress onceApproves and starts a 1.5 s grace period.
HoldHold 0.8 s or longerA high-impact action. A short press does not approve it.
To denyHold the Deny key and press the slot onceWhile the Deny key is held, pressing a slot denies. Denying always takes a single press, even for Hold actions.
InputPress and answer on screenBrings the app to the front.
Kei

Check the tool name on the top line before you press.

Cancel right after pressing

While "Undoable / Sending" is shown (1.5 s), press the same key again to cancel sending the approval. This stops the send; it does not undo actions that have already run.

Hold to "Always allow"

If the bottom line says "Hold=Always", holding the key for 0.8 s or longer auto-allows the same request for the rest of that session. This record lives only in ClauDeck's memory and expires after 24 hours; it is never written to a settings file. The highest-impact actions, such as deletion or push (Tier 3), cannot be set to Always allow.

When a key does not respond

Presses within 0.3 s after a key lights up are ignored to prevent mistakes. "Hold" does not go through under 0.8 s. "Input" is not an approval. A normal approval goes back to the AI's screen after 15 seconds (default).

Approve "On Screen" slots with a hold (off by default)

If you turn on screen_approve in the settings file, holding an "On Screen" slot brings that window forward and ClauDeck presses the approval key (Enter for Claude Code) or button (the "一度だけ許可" / Allow once button for Codex) for you. Slots where this is active show "Hold=Screen" on the bottom line.

  • There is a 1.5 s grace period; press again to cancel. If you answered on screen during that time, it is called off automatically.
  • It will not press for slots that went back to the screen more than 10 minutes ago (default). SSH remote and Antigravity slots are not supported.
  • It needs macOS Accessibility permission (only when this feature is on).
  • It sends ordinary key presses. If the confirmation was already answered on screen, the key goes into the input field, and any half-written text there may be sent.
2. Basic operation

Opening the AI's window

Press a slot that is not waiting for approval once to go back to that session's app.

  • Terminal.app: brings the app forward and selects the right tab. The first time, macOS may ask for Automation permission.
  • Codex, Claude and Antigravity desktop apps: brings the app forward. It cannot select a specific session inside the app.
  • Input / On Screen: opens the screen where you need to answer.
  • SSH remote slots: opening windows is not supported. Approving works.
  • Empty slots: nothing happens.

The slot currently in front gets a white band at the bottom of the key.

Deny key (ClauDeck Deny)

  • "Deny / Hold + Slot" is its resting state. Pressing it alone does nothing.
  • While held, it is armed: waiting keys stop flashing and get a red slash. Press a slot now to deny.
  • Letting go always returns to approve. It never times out on its own.
  • If nothing is waiting for approval, it shows "No target".
  • The Deny key does not light up. Put it in an edge column so you can find it without looking.

Dial (ClauDeck Dial)

  • Put it on a Stream Deck + XL dial and it becomes a "window" into your session list.
  • Turn to scroll the list. Turning any dial moves all windows.
  • Press it or touch the screen to bring that session's window forward.
  • Windows are for reading. Approve and deny with slot keys.
  • Each line fits 12 full-width characters (a key fits 8), so you can read prompts that do not fit on a key.
  • Place as many as you like. With more dials than slots, you can see everything without turning.

Page key (ClauDeck Page)

  • "Page 1/3" is the current page. Press to go to the next one.
  • If a background page has an approval waiting, it shows "Pending / N" and the page key flashes.
  • Without a ClauDeck Page key there is only one page; approvals for sessions that do not fit go back to the AI's screen.
  • It does not switch pages automatically by default. Turn on auto_page to switch to the page with a waiting approval, only when the front page has none.

Test Buttons

Run "Test Buttons" from the ClauDeck menu, and the placed slots cycle in order through Thinking → Working → Compacting → Approve → Hold → Deny → Input → On Screen → Unread → Idle → Ended, then show the three AI colors. It will not run while a real approval is waiting.

3. Settings

Settings and everyday use

Language, launch at login, sounds, number of slots, the settings file, and the log.

Language

Switch between Japanese and English with "Language" in the ClauDeck menu bar menu.

Launch at login

Toggle "Launch at Login" in the ClauDeck menu. When checked, ClauDeck starts automatically from your next login. While ClauDeck is not running, approvals happen on the AI's screen as usual.

Sounds and volume

  • Approve: a rising sound that stops. The loudest, meant to call you.
  • Input: two short questioning tones. A cue to answer on screen.
  • Task finished: rises and drops at the end, marking the end of a turn.
  • Session ended: three gently falling notes.

Each slot has its own pitch. Under "Sound" in the menu, you can turn off just the transition sounds, or all sounds. "Sound" → "Volume" offers High, Medium and Low (High is the default).

More slots and pages

  • Place more ClauDeck Slot actions to add slots right away. Removing one frees it.
  • Write "slot name: slot ID" under pins in the settings file to keep a slot in the same place after restarting. You can also pin by AI type (claude, codex, antigravity) to keep the three AIs in fixed positions.
  • If you use more sessions than slots, place one ClauDeck Page key.
  • On a second deck, slot IDs get a device suffix (for example c0r0#56bc). Which deck is primary is decided by device ID order, so it does not change with launch order.

Settings file

Settings are in ~/.config/claudeck/config.json. They are reloaded automatically when you save and apply from the next approval, so you normally do not need to restart (band colors appear a few seconds after saving).

{
  "policy": "own",
  "hold": 15,
  "sound": true,
  "state_sound": true,
  "pages": 3,
  "notify_ms": 9750,
  "volume": 100,
  "ended_ttl_ms": 900000,
  "auto_page": false,
  "pins": { "claude": "c0r0", "codex": "c1r0" },
  "agent_colors": { "antigravity": "#c026d3" }
}
What the main settings mean
  • policy: own approves on the deck; defer sends approvals back to the AI's screen.
  • state_sound: false turns off transition sounds. Approval sounds remain.
  • volume: loudness (1–100, default 100). High, Medium and Low in the menu are 100, 50 and 25.
  • screen_approve: when you hold an "On Screen" slot, ClauDeck presses the approval key for you. Off by default. Needs Accessibility permission.
  • approve_action: overrides how that press is done, per AI type, as key:enter, key:cmd+enter or button:button name. Types you leave out use the default (Enter for claude, the "一度だけ許可" / Allow once button for codex).
  • ended_ttl_ms: time before an ended slot becomes empty (milliseconds, default 15 minutes). 0 keeps them.
  • auto_page: switches to a background page when an approval is waiting there. Off by default. It never switches while the front page has a waiting approval.
  • pins: fixed slots. Map a slot name or AI type to a slot ID. If that slot is taken, normal assignment is used.
  • agent_colors: colors of the top band, as a color name or #rrggbb. Anything left out keeps its default.

Viewing the log

Choose "Open Log in Finder" in the menu to see the activity log. It contains no conversation text or file contents.

Main words in the log
  • press: a key was pressed
  • cue: a sound was played
  • always_added: set to Always allow
  • no_seat: no slot was free, so it went back to the AI's screen
  • seat_busy: the same slot was handling another approval
  • escalated: judged as left unattended
  • seat_vacated: an old ended slot was emptied
  • config_reloaded: settings were reloaded
  • deny_armed / deny_disarmed: Deny key armed / released
  • dial_rotate / dial_focus: a dial was turned / pressed or touched
  • auto_page_turn: switched to a background page automatically
  • shutdown: ClauDeck quit by itself (if this line is missing, it was stopped from outside)

Checking the version and updating

Click the ClauDeck icon in the menu bar and choose "このアプリについて…" (About this app) at the top to see the version and build number, the copyright and a link to the official site (up to 2.0 it was called "About ClauDeck"). If that item is missing, you have an older version. Update to the latest version and open it again.

At launch, ClauDeck checks for a newer version and, if there is one, opens a "Software Update" window. You can also check from "Check for Updates…" in the menu.

3. Settings

Connecting Antigravity

  1. Open the menu

    In ClauDeck, open "Agent Integration" → "Antigravity".

  2. Choose a level

    Choose from the table below and press "適用" (Apply).

  3. Reopen Antigravity

    Quit and reopen Antigravity, then send a new task.

OptionWhat it does
状態表示と画面復帰
Status & window focus
Shows status on slots; pressing a slot takes you back to Antigravity.
承認・拒否も有効
Approve/Deny enabled
In addition to status and window switching, approvals for writes, command execution and similar actions are taken on the deck.
連携を解除
Remove integration
Removes ClauDeck's Antigravity integration.

Your previous Antigravity settings are backed up. You can later go back to status only, or remove the integration, from the same menu. No commands to type.

A slot marked AG is an Antigravity session. Press the slot to approve; to deny, hold ClauDeck Deny and press the slot. A timeout is not a denial: Antigravity returns to its own auto-execution setting. If you use auto-execution (EAGER), turning on approvals adds a ClauDeck confirmation to actions that used to run automatically.

3. Settings

SSH remote

Show Claude Code running on a Linux machine outside your Mac on the same Stream Deck.

What is supported

SSH remote works with Claude Code only; Codex is not supported. You can approve, but remote slots cannot open windows on your Mac.

  1. Check the remote machine

    Make sure the Linux machine has Python 3.6 or later and Claude Code.

  2. Set up passwordless SSH

    Add your public key to ~/.ssh/authorized_keys on the remote machine, and check that you can connect from Terminal on your Mac without a password.

  3. Enter the connection

    Open "SSH Remote Sync…" in the ClauDeck menu and enter a connection name, display name, SSH user, host and port. To use a specific private key, pick it with "選ぶ…" (Choose…).

  4. Connect

    Turn on auto-connect and reconnect-on-disconnect, then press "設定して接続" (Set up and connect). It checks the connection, sends a small helper to the remote machine, registers with the remote Claude Code, and opens a dedicated channel, in that order.

  5. Reopen Claude Code on the remote machine

    When it works, a slot named "[display name] directory" appears on the deck.

How the connection is handled, and what happens when it drops

  • ClauDeck connects only to the host you specify. It does not go through the developer's servers or any third-party service.
  • The channel inside your Mac is never exposed to the remote machine; only a separate remote entrance protected by a token is used.
  • Passwords, two-factor codes and private key contents are not saved (only the private key's file location is remembered).
  • When the connection drops, it retries at growing intervals of up to 30 seconds. You can also reconnect with "今すぐ再接続" (Reconnect now) in "SSH Remote Sync…".
  • After about 20 seconds disconnected, the slot changes to "Ended", and returns to the same slot with the next activity after reconnecting.
  • Approvals during a disconnection cannot be shown on the deck, so they are asked on the AI's screen on the SSH host.
4. Troubleshooting

When something does not work

Open the item closest to your symptom.

Kei

First, open "Status" in the menu and take a look.

The ClauDeck icon does not appear in the menu bar

In System Settings, go to "Menu Bar" → "Allow in the Menu Bar" and turn ClauDeck on if it is listed. Once removed there, the app cannot bring itself back automatically.

No keys light up at all

Under "Status", check in order that Stream Deck is connected, at least one slot exists, the mode is own, and a session has taken a slot. If Claude Code is in auto mode, it never asks for approval.

It says the plugin is not connected

Install the Stream Deck plugin from the menu, then quit and reopen the Stream Deck app. Then place "ClauDeck Slot" on a key. "AI Slot" is a different plugin.

Approvals are asked on the AI's screen instead of the deck

Check "Approvals undelivered to deck" under "Status". It lists reasons such as no free slot, timeout, defer mode, or the slot already handling another approval. Each slot takes only one approval at a time.

A lit key does not respond

Presses within 0.3 s of lighting up are ignored. "Hold" needs 0.8 s or longer. Green "Input" keys cannot be answered on the deck; press them and answer on screen.

It says "On Screen"

The 15-second hold time (default) passed and the approval went back to the AI's screen. Press the key to open the AI's screen and allow or deny there.

I noticed a mistake right after pressing

While "Undoable" is shown (1.5 s), press the same key again to cancel sending the approval. Actions that have already run cannot be undone.

Not enough slots, or slots moved

Place a ClauDeck Page key to use background pages. Slots stay fixed per session, but what you see changes when all slots fill and an ended slot is reused, when an ended slot times out (15 minutes by default), when you move keys, or when your deck layout changes. To keep things in fixed positions, use pins in the settings file.

I held an "On Screen" slot but nothing was sent

Check: ① screen_approve is on (the bottom line shows "Hold=Screen") ② Accessibility permission is granted (the menu shows a notice if not) ③ the AI's window could be brought forward ④ no more than 10 minutes (default) have passed since it went to the screen ⑤ it is not a remote or Antigravity slot. When nothing is sent, you hear the Input sound and only the window comes forward, so answer on screen.

The deck shows "ClauDeck / Offline"

ClauDeck is not running. Open ClauDeck from the Applications folder again. Approvals are asked on the AI's screen as usual while this is shown. If the menu bar icon does not appear, see the first item.

Codex is registered but nothing happens

Start the interactive Codex CLI once and answer the prompt to trust ClauDeck's notifications. The ChatGPT app and codex exec cannot answer this prompt.

No sound, or too loud

Check "Sound" in the menu. Turning off transition sounds leaves only approval sounds; turning off "Play Sound" stops everything. To keep sounds but make them quieter, set "Volume" to Medium or Low. If "Test Sound" is silent too, check the macOS volume and output device.

Pressing a slot does not take me to the right window

Only slots that are not waiting for approval switch windows. Terminal.app cannot select tabs without Automation permission. Desktop apps only come forward, and SSH remote does not support opening windows.

SSH remote says Permission denied

Check that you can SSH to the host directly from Terminal and that your public key is in ~/.ssh/authorized_keys. Connections that ask for a password or two-factor code are not supported.

SSH remote stays disconnected

Run "今すぐ再接続" (Reconnect now) from "SSH Remote Sync…". Also check the host, Python 3, and that the SSH port is reachable. Automatic reconnection keeps trying at intervals of up to 30 seconds.

If this does not help, email info@k386.sub.jp with your version (see "このアプリについて…" / About this app) and what is happening.

5. Terms

Terms and default values

If you have changed settings, check the actual values under "Reference" in the in-app guide.

ItemDefault
How long the deck holds an approval15 s
Ignore presses right after lighting up0.3 s (300 ms)
Grace period after pressing1.5 s (1,500 ms)
Time needed for "Hold"0.8 s (800 ms)
Hold for "Always allow"0.8 s (800 ms)
Until an ended slot is emptied15 minutes
How long "Always allow" is remembered24 hours
macOS notification9.75 s with the default 15 s hold (65% of the hold time, up to 20 s)
Maximum pages3
Approval modeown

Terms

  • Slot: a Stream Deck key taken by one session.
  • Session: one conversation with Claude Code, Codex or Antigravity.
  • Approve: the flashing state waiting for allow or deny.
  • Deny key: a key that turns slot presses into denials while held. It is not a slot.
  • Armed: the Deny key being held down. It never times out and always returns when released.
  • Unread: a slot whose turn finished but you have not looked at. Same grey as Idle, but raised.
  • Offline: shown by the plugin when ClauDeck is not running. Approvals are asked on the AI's screen meanwhile.
  • Window: the session list shown on a dial. It does not approve or deny.
  • Front: the slot whose window is currently in front. It gets a white band at the bottom.
  • Source: which AI a slot belongs to, shown by the top band and the two letters at the start of the bottom line (CC, CX, AG).
  • Input: a multiple-choice question. It cannot be answered on the deck.
  • Grace period: the time after pressing during which sending the approval is held back.
  • Focus: pressing a slot to bring its app to the front.
How it works under the hood (hooks and Unix domain sockets)

Hooks are how Claude Code, Codex and Antigravity call another registered program at key points in their work (before using a tool, at the end of a turn, and so on). Registering ClauDeck under "Agent Integration" makes status and approval requests reach ClauDeck.

A Unix domain socket is a channel that only programs on the same Mac can use. ClauDeck uses it to talk to the AI tools and the Stream Deck plugin, so that traffic never leaves your Mac.

Not supported yet

Answering multiple-choice questions from the deck, selecting a specific session inside a desktop app, opening SSH remote windows, and Codex over SSH remote are not supported.