Uninstall ccdeck and remove its Claude Code hook
To uninstall ccdeck, quit its desktop app if you have it, then run npx ccdeck@latest --uninstall --purge: it removes ccdeck's entries from ~/.claude/settings.json and its login item, stops every running deck and deletes its Local network private key; the command, the app and the folders are removed separately.
You will
- Quit the desktop app so it cannot put the hook back
- Stop every deck and remove the hooks, login item and private key in one command
- Delete the command, the app and ccdeck’s own folders
Before you start
- A terminal, logged in as the user the deck ran as. If you set
CLAUDE_CONFIG_DIR,CODEX_HOMEorCCDECK_HOMEfor the deck, set them the same way here. - Step 2 sends one last usage report, after asking why at a terminal (Enter skips), unless you set
AGENTS_DECK_NO_REPORTS=1. - Node.js 18 or newer, even with only the desktop app: the app has no uninstall of its own. If something goes wrong says how to do without it.
Steps
-
Quit the desktop app
Only if you have it: the app can start a deck, which writes its hook back as it starts. Click the app’s icon in the menu bar, or right-click it in the tray on Windows and Linux. Click Start at login if it is ticked, then click Quit ccdeck.
More about quitting
- A deck also writes the entries again when ccdeck’s own login item starts it, and when it restarts into an update. Step 2 removes that login item and stops every deck, so you need not stop them first.
- Quit ccdeck stops only the deck the app started itself.
-
Remove the hooks, the login item and the key
This starts no deck.
npx ccdeck@latest --uninstall --purgeIt takes ccdeck’s entries out of
~/.claude/settings.json, removes any login item ccdeck gave this machine, then stops every deck still running.--purgedeletesprefs.json, which holds this deck’s Local network private key. Your pairings and aliases go with it. It also takes Codex’s terminal selection out of your shell’s profile, such as~/.zshrc.Paired decks keep this machine. On each one, press A or click the Accounts icon at the top of the stripe on the left, click Local network at the panel’s foot, click unpair on this machine’s row, then click confirm within four seconds. A login already copied stays where it went.
More about what it removes
- Its own hook commands under every event,
StopFailureandUserPromptExpansionincluded, in entries marked"__agent-dag": trueor running itshook.js. A hook of yours in the same entry stays. WithCLAUDE_CONFIG_DIRset, the file is$CLAUDE_CONFIG_DIR/settings.json. - The login item, which it finds through a record in ccdeck’s data folder. It is
~/Library/LaunchAgents/ccdeck.pliston macOS,~/.config/systemd/user/ccdeck.serviceon Linux, and the Task Scheduler taskccdeckon Windows. - An older ccdeck’s finish-sound hook. Sound hooks of yours that it set aside are put back.
- Forwarders an older ccdeck put in
~/.codex/hooks.json. - The
ccdeck Codex accountsshell-profile blocks. prefs.jsonin the data folder, a second one in~/.claude/agent-dag/if an older ccdeck ran here, and any copy the deck set aside. The key is never printed.
Without
--purge, it deletes noprefs.jsonand lists each one that still holds a key. It exits with 1 if any part was refused, and says which. - Its own hook commands under every event,
-
Remove the command and the desktop app
If you installed the command with
npm i -g ccdeckornpx ccdeck --install:npm rm -g ccdeckUnder its earlier names, run
npm rm -g agents-deck agent-dag. Remove the app only after step 2, which removes its hook entries.- macOS: move
ccdeck.appfrom Applications to the Bin. - Windows: remove ccdeck from the apps list in Windows Settings.
- Linux: delete the AppImage, or remove the .deb package with your package manager.
More about finding the app
- The terminal installer on this site puts
ccdeck.appin~/Applicationswhen/Applicationsis not writable. - On Windows, the app was installed for your user only.
dpkg -l | grep -i ccdeckshows the .deb package’s name.- On Linux, the app’s Start at login is the file
~/.config/autostart/ccdeck-desktop.desktop. - The app keeps its window and notification settings and its own logs where Electron keeps an app’s files. This guide does not list those places.
- macOS: move
-
Remove claude-swap, if ccdeck installed it Claude Code only
ccdeck installs claude-swap for its Accounts panel when it is missing. Remove it only if you do not use
cswapyourself. ccdeck tries uv first, then pipx:uv tool uninstall claude-swapIf pipx installed it, run
pipx uninstall claude-swapinstead.Its store of saved Claude logins stays. Deleting it loses those logins.
More about other installers and the store
With neither on your PATH, ccdeck used pipx through Python:
python3 -m pipx uninstall claude-swap, orpy -m pipx uninstall claude-swapon Windows. Or it used a uv it downloaded into~/.agents-deck. Step 6 deletes that uv, so run this first:~/.agents-deck/tools/uv/uv tool uninstall claude-swap, or%USERPROFILE%\.agents-deck\tools\uv\uv.exe tool uninstall claude-swapon Windows.The store is
~/.claude-swap-backupon macOS and Windows, and~/.local/share/claude-swapon Linux. Once, when ccdeck found it empty, it added the account you were signed in with. -
Undo Allow capture, if you used it Claude Code only
If you clicked Allow capture… in Telemetry Radar, undoing it asks for your password. On macOS:
sudo launchctl bootout system/dev.ccdeck.chmodbpfsudo rm /Library/LaunchDaemons/dev.ccdeck.chmodbpf.plist "/Library/Application Support/ccdeck/ccdeck-chmodbpf"On Linux:
t=$(readlink -f "$(command -v tcpdump)"); sudo setcap -r "$t"; sudo chgrp root "$t"; sudo chmod 0755 "$t"What you set from ccdeck outlasts it. A flag switched in Telemetry Radar, or a row changed in Settings › Claude Code, keeps its value in
~/.claude/settings.json: change it back before step 2, or edit the file by hand.More about what stays
- On macOS, your user stays in the
access_bpfgroup, which Wireshark’s ChmodBPF uses too. Without the helper, the capture devices are root’s alone again once the Mac restarts. - On Linux, the
tcpdump, and the package withsetcap, that Allow capture installed stay installed. Remove them with your package manager if nothing else needs them. - On Windows, Allow capture changes nothing: Wireshark and Npcap are yours to keep or remove.
- On macOS, your user stays in the
-
Delete ccdeck’s folders
Do this last: step 2 reads records kept here.
On macOS:
rm -rf ~/.claude/agent-dag ~/Library/Application\ Support/ccdeck ~/Library/Logs/ccdeck ~/.agents-deckOn Linux:
rm -rf ~/.claude/agent-dag ~/.local/share/ccdeck ~/.local/state/ccdeck ~/.agents-deckOn Windows, in PowerShell:
Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\agent-dag", "$env:LOCALAPPDATA\ccdeck", "$env:USERPROFILE\.agents-deck"No step touches Claude Code’s or Codex’s own files, your own hooks, or claude-swap’s store.
This deletes the Codex accounts you added in ccdeck, with their logins and their Codex history.
More about the four folders
~/.claude/agent-dag/: the hook script, the running decks’ records, Browser Watch’s findings, the desktop app’s hook launcher andsettings.before-skill-hook.json, from before Skill activity’s hook. Delete it, not~/.claude.- The data folder: the login-item record, the deck’s own records, Tool activity’s
tool-audit/,integrations/with your tracker tokens,claude-settings.before-change.json, a copy of Claude Code’s settings that can hold API keys, andprefs.jsonif you left out--purge. Deleting a token does not revoke it: do that in Jira, GitHub or GitLab. - The log folder:
events.jsonlanddeck.log. ~/.agents-deck/: the ccusage, uv and macmon ccdeck fetched, its account state, with each account’s e-mail address, and Telemetry Radar’s files.
On Linux,
$XDG_DATA_HOMEand$XDG_STATE_HOMEmove the data and log folders. WithCLAUDE_CONFIG_DIRset, the first folder is$CLAUDE_CONFIG_DIR/agent-dag, and it holds the data and log too. WithCCDECK_HOMEset, both are there instead. An event log moved with--historyis where you put it.
If something goes wrong
A line from step 2 says NOT
If the line is about your own sound hooks, keep ~/.agents-deck until they are back: step 6 deletes them. Otherwise fix what it names, such as a settings.json that is not valid JSON, and run step 2 again.
The hook entries are back in settings.json
A deck started again and wrote them back. Do step 1 again, with the desktop app’s Start at login not ticked, then step 2.
ccdeck still starts when you log in
Untick Start at login in the desktop app’s menu. Otherwise run npx ccdeck --uninstall-service, which finds the login item without ccdeck’s record, then delete the data folder again. If that fails, step 2’s “More about what it removes” says where the item is.
no Claude hooks to remove, but Claude Code still runs ccdeck’s hook
The deck ran with a different CLAUDE_CONFIG_DIR. Run step 2 again with it set as the deck had it, once for each profile.
This machine has no Node.js
Install Node.js 18 or newer for step 2, or do its work by hand: in ~/.claude/settings.json, under "hooks", delete every hook whose command runs agent-dag/hook.js, and any entry left with no hooks. Then do steps 3 to 6; step 6 deletes the private key.
Something else? See Troubleshoot ccdeck: status, logs, port and hooks.