# Glossary

Every term these docs use in a precise sense, in alphabetical order, each with a short definition and a link to the page that explains it.

## A to C

### Adopt

`install --adopt <path>` records a folder already in your Library as an [installed copy](https://www.terum.ai/docs/install-and-manage) of a team skill without copying a byte. Its content digest must match a published version, under that skill's own folder name.

### App

The [desktop app](https://www.terum.ai/docs/desktop-app) for macOS and Windows, a window onto the CLI that runs it in frame mode and has no network client of its own. The `app` verb downloads it, checks its checksum and build attestation, and opens it; there is no Linux build.

### Arm

One side of an [eval](https://www.terum.ai/docs/evals) comparison: a fresh sandbox where one headless `claude -p` session runs the task, for each case, arm and repetition. The arms are the baseline, the candidate and, when your team has a receipted version, the incumbent.

### Baseline

The [arm](https://www.terum.ai/docs/evals) with no skill staged, present in every run. The verdict is banded on the candidate-vs-baseline comparison alone.

### Candidate

The [arm](https://www.terum.ai/docs/running-evals) that stages your folder exactly as it is on disk, plus the repository files its `SKILL.md` depends on. It has no version number: it is identified by its content digest and may never have been published.

### Case

One execution test, a YAML file at `evals/cases/<stem>.yaml` whose stem is its name. Only `task` is required; `checks`, a `judge` rubric, `files`, a `fixture`, `setup` and `requires` are [optional fields](https://www.terum.ai/docs/test-cases).

### Category

A skill's Marketplace label, `metadata.terum-category` in its `SKILL.md`, and part of its content digest. The team's list is advice, not an enum; when the file declares none, [publish](https://www.terum.ai/docs/publish) takes `--category`, then a model suggestion, then `misc`.

### Check

A deterministic assertion about an arm's transcript or sandbox, such as `transcript_mentions` or `file_exists`. [Checks](https://www.terum.ai/docs/test-cases) are all-or-nothing per arm, and differing results decide a comparison row before any judge is asked.

### Clone

Your machine's full git clone of the team repository, at `~/.terum/skills/teams/<team>`. It is [disposable](https://www.terum.ai/docs/how-it-works): every write and every `sync` hard-resets it to `origin/main`, and reads never fetch.

### Comparison row

One decision between the candidate and one opponent for one case and repetition: a win, a loss or a tie. A dead arm makes it an unscored tie; otherwise [checks decide](https://www.terum.ai/docs/results), and a check tie goes to the judge only when the case has a rubric.

### Content digest

The `sha256:` hash that identifies a skill's bytes: every file except `evals/` and a few housekeeping files, with the three publish-managed fields dropped from `SKILL.md`. Publish, receipts and the Library's match to the Marketplace all use [the same digest](https://www.terum.ai/docs/versions).

## E to H

### Edit hook

An optional Claude Code hook that, after the agent edits a file inside a skill folder, reminds Claude that the edit stays local until you publish it. It speaks once per skill per session and [defaults to No](https://www.terum.ai/docs/claude-code) at setup.

### Eight skills

The skills setup places for Claude Code and Codex: `list-skills`, `skill-info`, `search-skills`, `eval`, `eval-report`, `skill-status`, `sync-skills` and the `terum-skills` manual. They let the assistant [run the CLI for you](https://www.terum.ai/docs/claude-code) and show the result as a Markdown board.

### Environment skip

A case or suite whose `requires` probe finds a host tool missing, so [it never runs](https://www.terum.ai/docs/test-cases). Its rows count as missing and make the run partial, never as the skill failing to help.

### Eval assets

Everything under a skill's `evals/`: cases, the suite, triggers and fixtures. They [travel with the skill](https://www.terum.ai/docs/test-cases) but sit outside its content digest, stay hidden from the skill during a run, and reach the team on every publish without minting a version.

### Eval queue

Evals [queued](https://www.terum.ai/docs/running-evals) with `eval --window overnight` or `--window later` instead of run, keyed on the exact bytes you queued, so an edited folder is refused. The desktop app drains the queue between 01:00 and 05:00 while open and idle; otherwise run `eval --drain`.

### Expected and scored rows

`expected_rows` is how many comparison rows a run set out to produce (cases plus sub-cases, times `k`, times opponents), and `scored_rows` is how many survived. The gap is dead arms, skips and dropped cases, [reported as a gap](https://www.terum.ai/docs/results) and never counted as a zero.

### Fingerprint

The hash of a placed folder's files, recorded when it is placed. When the folder no longer matches, it shows as `local-changed`, and any removal [quarantines it](https://www.terum.ai/docs/library-and-marketplace) instead of deleting it.

### Frames

The JSON-line protocol a program uses to drive the CLI with `--frames`, one JSON object per line in each direction. The desktop app speaks it, and the [frame protocol](https://github.com/ryanliu-terum/terum-skills/blob/main/docs/frame-protocol.md) is the full contract.

### Generated evals

Cases or a suite, and a triggers file, that `eval` [writes into your skill folder](https://www.terum.ai/docs/generated-evals) when they are missing, each marked as generated. Review them before you trust the verdict; `--no-gen` turns generation off.

### Global

The Library root at `~/.claude/skills`. It is the [default install destination](https://www.terum.ai/docs/library-and-marketplace), and the only one offered until you register a project.

### Handle

Your name in one team: 1 to 39 letters, digits and single internal hyphens, stored lowercase. It names your people file and the target of `install member <handle>`, is [fixed once you join](https://www.terum.ai/docs/join-a-team), and is never used as a skill's `metadata.author`.

### Heavy mode

The one-session mode `eval` [offers](https://www.terum.ai/docs/running-evals) when a skill appears to call subagents. Your answer is only recorded: a run uses one session per arm exactly when it has a suite.

### HYG codes

The eight [hygiene](https://www.terum.ai/docs/hygiene) findings, HYG1 to HYG8: frontmatter, hidden characters, credentials, executables, licenses, description, category and outside paths. HYG7, HYG8 and HYG6's size check are warnings; the rest are errors.

### Hygiene

The free, offline, deterministic gate a skill folder passes before `validate`, `eval`, `publish` or `skill fix` does anything else. Errors stop the operation; [warnings](https://www.terum.ai/docs/hygiene) print and gate nothing.

## I to O

### Incumbent

The published version whose newest receipt is the most recent, excluding any version with the candidate's bytes; an unevaluated version never qualifies. It adds a [candidate-vs-incumbent comparison](https://www.terum.ai/docs/evals), which the verdict does not read.

### Installed

`installed[]` in your people file: one entry per skill and scope you have a copy of, written by `install` and dropped by `uninstall-skill`. It records a copy on a machine, [not an endorsement](https://www.terum.ai/docs/library-and-marketplace).

### Judge

A tool-free model call that breaks a check tie when the case has a rubric, reading the task, the rubric and the end of each transcript. It is [asked twice](https://www.terum.ai/docs/results) in reversed order, and if the answers disagree the row stays a tie.

### k (repetitions)

How many times each case runs per arm, set with `--k` and 1 by default. Each repetition is its own row, and `--k 3` is the setting for a receipt you [intend to gate on](https://www.terum.ai/docs/running-evals).

### Library

The skills on your machine: Global plus the `.claude/skills` folder of every project you registered. It reads local files only and [matches a folder to the Marketplace](https://www.terum.ai/docs/library-and-marketplace) by content digest alone.

### Library project

A folder you registered with `project add`, whose `.claude/skills` becomes part of your Library. It lives on your machine only, and it is [not a team project](https://www.terum.ai/docs/library-and-marketplace).

### Lineage

The versions published under one skill id. Publish refuses to append when the name now carries a different id, and republishing after an unpublish [starts again](https://www.terum.ai/docs/versions) at `v1`.

### Managed fields

`license`, `metadata.id`, `metadata.author` and, when missing, `metadata.terum-category`, which publish writes into `SKILL.md` and back into your folder. The first three are [outside the content digest](https://www.terum.ai/docs/versions), so publishing does not change a skill's identity.

### Marketplace

Everything your team has published, [read from your clone](https://www.terum.ai/docs/library-and-marketplace): each skill's newest version, author, category, installs, projects and verdict. It never fetches, so run `sync` for the latest.

### Misses

The `misses` verb asks a model which of your placed skills each recent prompt should have selected, and lists the pairs where that skill did not fire. It spends model calls, and its output is [candidates for review](https://www.terum.ai/docs/usage), never a rate.

### Net lift

`(wins - losses) / (wins + losses + ties)` over one comparison's scored rows, so ties dilute. The candidate-vs-baseline net lift is what the [verdict](https://www.terum.ai/docs/results) bands.

### old-skills

The folder beside a skills root where a folder you already had is kept when an install or move displaces it. [Nothing empties it](https://www.terum.ai/docs/install-and-manage), `prune` included.

## P to R

### Partial run

A run that scored some of its expected rows but not all, recorded as `execution_status: partial`, or `failed` when none were scored. The verdict line shows the coverage, and the team README never shows a [partial receipt](https://www.terum.ai/docs/results) as a plain verdict.

### People file

`people/<handle>.json` in the team repository: your handle, name, email, GitHub login, `installed[]` and `profile[]`. You are an [active member](https://www.terum.ai/docs/team-admin) while it exists and your handle is not archived.

### Placement

A skill folder this tool put in your Library, by `install` or `install --adopt`, and recorded in the placements ledger. Removing an unedited placement deletes it; an edited one, or a folder that was never placed, [goes to quarantine](https://www.terum.ai/docs/library-and-marketplace) instead.

### Placements ledger

The `placements` map in `~/.terum/skills/config.json`: each placed folder's path, skill id, team, version, scope, date and fingerprint. It is the only authority for [what this tool may delete](https://www.terum.ai/docs/install-and-manage).

### Profile

`profile[]` in your people file, the skills you stand behind. `publish` and `install` add to it without asking, `profile --remove` takes an entry off, and `install member <handle>` [installs a teammate's profile](https://www.terum.ai/docs/library-and-marketplace).

### Provenance

The part of a receipt that records who ran it and how: runner, engine and Claude Code versions, requested models, `k`, cases, and each arm's resolved skills. Cards show it beside the score so you can tell whether [two results are comparable](https://www.terum.ai/docs/results).

### Prune

The only command that empties quarantine: it lists every item, asks once, and [deletes them](https://www.terum.ai/docs/install-and-manage) on yes.

### Push guard

A `pre-push` hook in every team clone that applies the write guard to a hand-written `git push`, refusing anything under `skills/` or `evals/`. It [stops accidents, not abuse](https://www.terum.ai/docs/how-it-works): `--no-verify` bypasses it, and the commit carries your name.

### Quarantine

`~/.terum/skills/quarantine/`, where terum-skills moves an edited placed copy, a deleted unplaced folder or a clone with unpushed work [instead of deleting it](https://www.terum.ai/docs/install-and-manage). Only `prune` empties it.

### Recall and precision

The [trigger eval](https://www.terum.ai/docs/evals) scores. Recall is the share of should-trigger prompts that selected the skill; precision is the share of selections that came from should-trigger prompts.

### Receipt

The JSON record of one eval run: verdict, comparisons, scores, efficiency and provenance, keyed to the content digest of the bytes evaluated. It [reaches the team](https://www.terum.ai/docs/results) when those bytes are a published version, is append-only once committed, and is never averaged with another.

### Reconcile

The `reconcile` verb [matches your unplaced Library folders](https://www.terum.ai/docs/install-and-manage) against team skills, offering to record identical ones as installed and to publish differing ones as the next version. It also runs during setup and after `project add`.

### Rubric

The optional `judge` field of a case. Only a case with one can reach the judge, and [only on a check tie](https://www.terum.ai/docs/test-cases).

### Run tree

The folder one eval run writes under `~/.terum/skills/evals/local/<digest>/<run id>/`: receipt, transcripts, sandboxes and any generated assets. It [stays on your machine](https://www.terum.ai/docs/results); only the receipt is ever shared.

## S

### safeWrite

The one write path to the team repository: fetch, hard-reset the clone, re-run the verb's change, check it with the write guard, commit, push to `main`, and start over on a lost race until a 30-second deadline. Two commands on one machine [queue on the clone's lock](https://www.terum.ai/docs/how-it-works) rather than race.

### Session hook

An optional Claude Code hook that runs `sync --hook` in the background at session start, fetching your team clone at most once an hour and refreshing Terum's own files. It places nothing and [defaults to No](https://www.terum.ai/docs/claude-code) at setup.

### Sign test

A two-sided exact sign test over one comparison's wins and losses, stored as `sign_p`. [Nothing gates on it](https://www.terum.ai/docs/results), and it is pinned at 1.0 whenever a suite ran.

### Skill

A folder whose name equals the `name` in its `SKILL.md`, 1 to 64 lowercase letters and digits joined by single hyphens. In the team repository it is a set of [immutable versions](https://www.terum.ai/docs/how-it-works) plus its eval assets.

### Skill fix

`skill fix <path>` repairs the [hygiene](https://www.terum.ai/docs/hygiene) faults with one right answer (YAML quoting, `name:`, `license:`, invisible characters, a stray executable bit) and lists what still needs you.

### Skill id

The uuid in `metadata.id`, a skill's [identity through renames](https://www.terum.ai/docs/versions). Receipts, installs, profile entries and team projects are keyed by it, not by name.

### skillOverrides

Claude Code's own per-skill setting, which `skill disable` and `skill enable` write so a skill can be off on your machine [without moving its folder](https://www.terum.ai/docs/claude-code). It is the key the `/skills` menu writes, so the two always agree.

### Stale

A Library row is [stale](https://www.terum.ai/docs/library-and-marketplace) when nothing scored its current bytes but something scored the same skill before an edit. A clone is possibly stale when it has not been fetched within the hour.

### Sub-case

One named row of a [suite](https://www.terum.ai/docs/test-cases), carrying only `name` and `checks`, scored against the suite's shared session.

### Suite

`evals/suite.yaml`: one task, one sandbox and many sub-cases, for a skill whose single session can answer many questions. It [runs one session per arm](https://www.terum.ai/docs/test-cases), is never judged, and pins the sign test at 1.0.

### Sync

The `sync` verb fetches each team clone and hard-resets it to `origin/main`, and [changes nothing else](https://www.terum.ai/docs/how-it-works) on your machine. Reads never fetch, so the app runs it at launch and on window focus, at most once a minute.

## T to W

### Team project

A named list of skills in `team.json` that the whole team sees, filled by `publish --project` and [taken whole](https://www.terum.ai/docs/team-admin) with `install project`. It is not a folder, and its optional remote only preselects where an install lands.

### Team repository

The one private git repository that [is the team](https://www.terum.ai/docs/how-it-works): `team.json`, people files, skill versions, eval assets and receipts. Any git host works, the host decides who has access, and there is no server beside it.

### Tool approval

Your consent to a skill's `allowed-tools`, [asked once at install](https://www.terum.ai/docs/install-and-manage) and remembered under the skill id against a hash of the grants. Changed grants ask again.

### Trigger eval

For each prompt in `evals/triggers.yaml`, one tool-free model call is shown the skills in your Library root and asked which it would load. It yields [recall and precision](https://www.terum.ai/docs/evals), and `--triggers-only` runs it alone as the cheapest signal.

### Usage

The `usage` verb reads Claude Code's transcripts and counts, per placed skill, how often the model chose it and how often a person named it, over 30 days by default. It makes no model call and [writes only a local archive](https://www.terum.ai/docs/usage).

### Validate

`validate <path|name>` runs [hygiene](https://www.terum.ai/docs/hygiene) with the strict schema, offline, and exits 1 on any error. A never-published folder fails it on the managed fields that `eval` treats as optional.

### Verdict

`PASS` at or above `+1/3` candidate-vs-baseline net lift, `FAIL` at or below `-1/3`, and `NEUTRAL` in between. `publish` asks before publishing bytes whose [latest local receipt](https://www.terum.ai/docs/results) is `FAIL`.

### Version

An immutable folder `skills/<name>/v<N>/` in the team repository, minted by `publish` as the highest ordinal plus one. [Identical bytes reuse](https://www.terum.ai/docs/versions) the existing version instead of minting a new one.

### Write guard

The [per-verb rule](https://www.terum.ai/docs/how-it-works) inside `safeWrite` for which paths a write may touch: one path out of bounds refuses the whole write. `publish` may add a version folder but never change one, and only `unpublish` may remove one.
