Claude Code integration
terum-skills adds eight skills that drive the CLI, two optional hooks and a per-machine switch to your Claude Code setup. Evals run on your Claude Code, and usage reads its transcripts.
Four integrations
| Integration | Where it lives | What it does |
|---|---|---|
| The eight skills | ~/.claude/skills/<name>/ | Run terum-skills for you and show the result as a board. |
| The session-start hook | ~/.claude/settings.json | Fetches your team clones when a session starts, at most once an hour. |
| The edit hook | A script under ~/.terum/skills/hooks/, plus ~/.claude/settings.json | Reminds Claude to publish a skill after it edits one. |
| The per-machine switch | skillOverrides in Claude Code’s settings | Turns a skill off on this machine without moving it. |
Setup places the eight skills without asking. Each hook is a separate question during setup and defaults to No, so neither is on your machine unless you said yes. The switch is a verb you run.
The eight skills
With these installed, asking Claude to “list my team’s skills” or “evaluate this skill” gets a correct invocation instead of a guess, and the answer comes back as a Markdown board. Seven are narrow; terum-skills is the manual for everything else.
| Skill | Runs |
|---|---|
list-skills | ls --local and ls: your Library and the Marketplace |
skill-info | ls skill <name>, then eval-report for a team skill |
search-skills | search <term> |
eval | eval <skill>, after confirming the cost with you |
eval-report | eval-report <skill> |
skill-status | status, then update |
sync-skills | sync |
terum-skills | Any verb; the ones that ask a question are handed to your terminal |
When ~/.codex exists, setup places the same eight for Codex under ~/.codex/skills/. Only these eight go to Codex; team skills you install are placed in Claude Code’s folders.
Each placed copy calls the CLI you installed, not whatever the registry published since. Terum’s copies are marked with metadata.managed-by: terum-skills in their frontmatter. Setup and sync --hook rewrite an outdated marked copy in place without asking; the hook also adds missing ones, but only where Terum’s copies already live. Anything else at those paths is never touched. uninstall removes them. You can also delete the folders yourself; setup places them again next time.
What the agent runs, and what it hands you
Claude Code’s Bash tool has no terminal, so a verb that needs an answer fails there, and the manual splits the CLI on that line. The agent runs verbs that never ask, or ask only sometimes, such as ls, status, sync, validate, install, publish and eval. It prepares and hands to your terminal the ones that need an answer or can write before asking, such as unpublish, reconcile, uninstall-skill, skill move, skill disable, the team administration verbs and setup.
The manual forbids piping y into a prompt or inventing flags, and it tells the agent to confirm with you before anything that spends money (every eval) or changes the team (install, publish, invite, profile).
The session-start hook
If you say yes during setup, one entry is added to hooks.SessionStart in ~/.claude/settings.json. It runs sync --hook through the copy of the CLI that installed it, pinned to that version and never @latest, so nothing fetches a newer CLI at session start. A new release reaches the entry when you update and run setup again. The entry is async with a 60-second timeout, so the fetch runs beside your session. Before its first edit, setup backs up your settings file once to ~/.terum/skills/backups/.
sync --hook fetches each team clone and resets it to origin/main, with a 20-second deadline and no credential dialog, and leaves alone a clone fetched within the last hour. It places nothing, uploads nothing and edits none of your skill folders. It only corrects Terum’s own files: its hook entry, the eight skills and the edit-hook script. Its standard output is one line, the directive that tells Claude Code to reload skills; everything else goes to stderr.
The hook goes when your last team goes: team leave on the last team and uninstall both remove it. You can also delete the entry from ~/.claude/settings.json by hand.
The edit hook
A skill edited in a session exists only on your machine until someone publishes it, and this hook speaks at that moment. A yes during setup writes ~/.terum/skills/hooks/terum-skills-edit.mjs and a Write|Edit entry under hooks.PostToolUse, run through node.
The script reads no network and does nothing unless the edited path is inside a .claude/skills/<skill>/ folder and a team is configured. Then it adds a note for Claude’s next turn saying which skill was edited, whether it is an installed copy of a team version, that the edit stays local until published, and the publish and eval commands to run. The note appears once per skill per session. Any failure is silent, because a reminder is never worth interrupting an edit.
uninstall removes the entry and the script, or you can delete both by hand.
The per-machine switch
npx -y terum-skills@latest skill disable ~/.claude/skills/deploy-check
npx -y terum-skills@latest skill enable ~/.claude/skills/deploy-checkClaude Code’s own skillOverrides setting can mark a skill off, which hides it from the model and the / menu. These verbs write that key, the same one the /skills menu writes, and nothing moves on disk. A Global skill’s entry goes in ~/.claude/settings.json; a project skill’s goes in that checkout’s .claude/settings.local.json, which is added to .git/info/exclude when the CLI creates it.
Only off belongs to terum-skills. name-only and user-invocable-only read as enabled, and enable leaves them alone. The app’s Library switch calls the same verb, so it and Claude’s menu never disagree.
Evals, usage and misses
Evals use your own Claude Code login. There is no Terum account and no API key. The eval engine spawns the claude binary on your PATH, one headless session per arm, with --setting-sources project so your user-level settings and hooks stay out of the sandbox. See Running evals.
usage reads your transcripts. It counts each placed skill’s firings in Claude Code’s transcripts under ~/.claude/projects, with no model call, and archives what it scanned so the count outlives Claude Code’s roughly 30-day retention.
misses spends sessions. It reads the same transcripts for prompts a placed skill should have been chosen for and was not, at one claude -p call per ten prompts, and writes nothing. See Usage.
Full reference on GitHub
- Claude Code integrationdocs/guides/claude-code-integration.md
- How it worksdocs/concepts/how-it-works.md
- Install and manage skillsdocs/guides/install-and-manage.md