ccdeck

Count the skills Claude Code and Codex use

To see which skills Claude Code and Codex use, open Skill activity from the stripe on the right in ccdeck: it ranks the skills your agents loaded on this device, whether you typed its slash command or the agent called it.

Claude Code and Codex Checked against ccdeck 3.48.0 on

You will

Before you start

Steps

  1. Open Skill activity

    Click the Skill activity icon on the stripe on the right, below Tool activity. It has no key. On a phone, click More in the dock along the bottom, then Skill activity.

    The stripe on the right: icons for Usage and This machine, a rule, then Usage history, Tool activity and Skill activity. Beside Skill activity, its hint: Skill activity, Which skills your agents use, whether you typed them or the agent called them.
    Demo data Hover an icon to see its name.

    It opens as a dialog over the deck, and does not update by itself: the refresh icon at its top right reads the history again.

  2. Read who starts your skills

    The dialog opens on the last 7 days of all your agents. Who starts your skills splits the uses between Picked by Claude, Picked by Codex and Typed by you; click a part to list only those skills. Worth a look names up to three skills, such as the one you lean on most.

    Each row is a skill, with who started it, its sessions, its uses and when it last ran. A plugin’s skill starts with the plugin’s name, as in docs:changelog.

    The Skill activity dialog, at 7 days and All agents: In the last 7 days, your agents used 8 skills 86 times. 15 repeated runs, such as /loop ticks, are left out. Worth a look: commit is your go-to, 26 of 86 uses (30%), in 17 sessions. Who starts your skills, 86 uses: a ring and its legend, Picked by Claude 33%, 28, mostly write-tests; Picked by Codex 10%, 9, only lint-fix; Typed by you 57%, 49, mostly commit. Below, Skills, 8, sorted by Most used, its first row commit, Typed by you, 17 sessions, 26 uses, last today at 07:22 AM. Beside it all, the details of commit, open on their own: all by Claude, 26 uses, 17 sessions, 0 picked by Claude, 26 typed by you, its uses per day, its projects and its latest uses. Open the full-size picture
    Demo data A week of skills on a few projects: commit is typed by hand, write-tests mostly picked by Claude.

    The buttons at the top change the period and the agents; those above the list sort it. Type into Find a skill to filter it. The list shows twelve rows; Show all shows the rest.

    More about what counts as a use
    • A use is a skill loaded into an agent: Claude calling its Skill tool, a slash command you type in Claude Code, or a skill you pick in Codex with $ or /skills. Custom commands count as skills.
    • When Codex picks a skill itself, it reads the skill’s SKILL.md or runs one of its scripts. That counts once a turn, only for a skill Codex listed for the session, and shows as Picked by Codex.
    • The same command typed again in one session with the same arguments, such as a /loop tick, is a repeat. Repeats stay out of the uses; the row counts them.
    • Built-in commands such as /clear or /model, MCP prompts and a skill’s name inside a message are not uses. A skill that never ran is not listed.
    • How this is counted, at the foot of the dialog, says the same, but calls Codex’s own pick “detected”.
  3. Open one skill’s details

    The first skill’s details open with the dialog, and stay open when you change the period. Click another row to read its own: its uses and sessions, how often an agent picked it and you typed it, Uses per day by who started them, the projects it ran in most, and its Latest uses.

    The details of write-tests: 19 by Claude, 6 by Codex, last used today 06:59 AM. Uses 25, Sessions 18, Picked by Claude 19, Typed by you 6; 7 in a subagent. Uses per day from Oct 20 to Oct 27, each day’s bar in two colours, Oct 27 picked out: 2 uses, 1 picked by Claude, 1 typed by you. Projects: web-api 14 uses, data-pipeline 9, infra 2. Latest uses, today: 06:59 AM, picked by Claude in a subagent, in web-api, with a link to its session; 06:28 AM, typed in Codex, in infra, with a link.
    Demo data Claude picks write-tests on its own; in Codex it is typed by hand.

    A use whose session is still on the canvas names it: click the name to close the dialog and show that session.

    More about what is stored
    • For each use: the skill’s name, Claude or Codex, how it started, when, the session and the project folder’s name. Never its arguments, paths, prompts or output.
    • Uses are kept with Tool activity’s history, on this device only. Settings › Data › Tool history sets how long, 90 days by default, and clears both; see See which tools Claude Code and Codex use most.
    • npx ccdeck --uninstall, with or without --purge, leaves this history on disk.
  4. Check that the slash commands you type are counted

    A slash command you type reaches ccdeck only through Claude Code’s UserPromptExpansion hook. When every Claude Code on this device is 2.1.116 or newer, ccdeck adds that hook to Claude Code’s settings.json as it starts, beside its other hooks. The first time, it keeps a copy of the file as it was, settings.before-skill-hook.json, in ~/.claude/agent-dag.

    Older Claude Code anywhere leaves it out. Claude Code before 2.1.101 ignores a whole settings.json that names a hook it does not know. So one copy older than 2.1.116, or one that does not say its version, keeps the hook out, and the dialog says typed commands are not counted.

    To count only the skills the agents call, stop ccdeck with npx ccdeck --stop and start it again with AGENTS_DECK_SKILL_HOOK=0, as in AGENTS_DECK_SKILL_HOOK=0 npx ccdeck. That start takes the hook back out.

    More about the hook and its copy
    • ccdeck decides again at every start. A deck started without the variable, at login for one, adds the hook back once every Claude Code is new enough; one rolled back below 2.1.116 has it taken out.
    • Any value but 1 turns it off: 0, false or a typo. Your own UserPromptExpansion hooks are never touched.
    • With CLAUDE_CONFIG_DIR set, settings.json and the copy are in that folder instead of ~/.claude.
    • The copy can hold whatever settings.json held, API keys included, so on macOS and Linux only you can read it. --uninstall removes the hook and leaves the copy.
    • Codex needs no hook: ccdeck reads its skills from its session files.

If something goes wrong

“Slash commands you type are not counted yet”

A Claude Code on this device is older than 2.1.116, or does not say its version. Update every copy, then stop ccdeck with npx ccdeck --stop and start it again. The Skill hook line in the terminal where it started names the versions it found, or what else kept the hook out.

“Slash commands you type are not counted: the deck was started with AGENTS_DECK_SKILL_HOOK turned off”

Stop ccdeck with npx ccdeck --stop, then start it again without that variable.

“No skills used in the last 7 days”

Counting starts the first time ccdeck 3.44.0 or later runs, and Claude Code’s uses reach it only while ccdeck is running. Use a skill, then click the refresh icon. Check that All agents is on.

A skill you used is not in the list

Built-in commands, MCP prompts and repeats with the same arguments are not counted, nor a skill Codex reads on its own without listing it for the session. Typed commands also need step 4’s hook.

“Some uses could not be saved or read”

ccdeck could not save or read part of the history, so the numbers may be a little low. Check the free space on the disk that holds ccdeck’s data folder.

Something else? See Troubleshoot ccdeck: status, logs, port and hooks.

Next

All guides Troubleshoot How it works in the README