Skip to content

Dispose of an Item with Bob University

Bob University (BobU, #2898) gives every BoB item a disposition: certified, needs-work, not-applicable or retire. The decisions live in registry/dispositions.json (Dispositions). bob u is the command for working through them. bob learn is an alias and runs the same command.

Terminal only. bob u reads and writes the BoB source checkout ($BOB_SOURCE, else the checkout it runs from, else ~/projects/bigbrain), never the deployed ~/.claude. dispose --apply refuses when only the deployed copy can be found.

Terminal window
bob u status
bob u status — Bob University dispositions (#2898)
0 certified · 0 needs-work · 0 not-applicable · 0 retire · 155/155 undisposed
usage: 61 fleet event(s) from 1 machine(s) — missing macbook-air, macbook-pro-16
RE-EXAMINE (0)
none
UNDISPOSED (155)
skills:api-designing applicable-unused · 0 event(s)
skills:cloudflare-dev applicable-unused · 0 event(s)
skills:agent-builder unscoped · 0 event(s) · metadata fix
skills:commit universal

Each undisposed item shows:

  • its applicability bucket from bob tour --applicability (Applicability). universal means a universal item, which that grading does not cover.
  • its fleet usage: how many invocation events it has across every machine.

When a machine is listed as missing on the usage: line, “0 events” does not yet prove the item is unused.

The re-examine list names certified items that now run on a model they were not certified against (model-change), or on a newer id in the same family (model-replaced). Each line names both models. An agent’s model comes from its model: frontmatter. A skill, a command or an inheriting agent runs on the session default ($ANTHROPIC_MODEL, else model in ~/.claude/settings.json). See Re-examination for the rules. To re-examine an item, run steps 3 and 4 again against the new model. The earlier certification stays in the record’s history.

For the same report as one bob-u-status/1 document, add --json.

The command exits 1 when registry/dispositions.json fails its own gate. The violations are listed first; fix them before recording anything new.

Pick one item from the list. The evidence tells you which route to take:

What status shows Route
not-applicable-anywhere No portfolio project uses its stack. Record not-applicable, or retire when that stack is not coming back.
applicable-unused, and the usage line names no missing machine A project could use it but nobody does. Record needs-work or retire.
The item is used, and you want to know whether it helps Examine it (step 3) before you record certified or needs-work.

Only examine an item when applicability and usage cannot decide it.

bob u exam runs the item’s eval suite from evals/<name>/ (#2390). The suite runs with and without the item loaded, and under a realistic kit overlay.

Terminal window
bob u exam tdd-flow --kit bugfix --model claude-opus-5-5 --out /tmp/tdd-flow-exam.json
bob u exam skills:tdd-flow — evals/tdd-flow on claude-opus-5-5 under kit bugfix, restored
with 0.82 · without 0.61 · delta 0.21 → improved · trigger rate 1
supports: certified
next: bob u dispose skills:tdd-flow certified --exam /tmp/tdd-flow-exam.json --baseline evals/tdd-flow/baseline.json --reason "…"
  • An overlay that is already active is used as is. Without --kit, the machine’s default kit is applied. Either way, an overlay the exam applied is restored afterwards. To run bare, pass --no-overlay.
  • A no-signal or regressed result supports needs-work, never certified, and the command exits 1.
  • An item with no suite is refused (exit 2), and the message names where to author one: Skill evals.
  • The exam is a paid run: each case runs a full claude child on both arms, under the cost ceiling _workflow.eval_max_cost_usd (default $2). If the runner cannot run at all (no claude, the platform failed), exam exits 3 with the cause.

Run dispose without --apply first. It prints the record it would write, filled with today’s applicability bucket and fleet usage, and checks the record against the same rules as make check-dispositions:

Terminal window
bob u dispose drupal-security not-applicable \
--reason "No Drupal project ships in the portfolio this quarter; the skill itself is sound."

If the record looks right, add --apply to write it to registry/dispositions.json. Then commit it:

Terminal window
bob u dispose drupal-security not-applicable \
--reason "No Drupal project ships in the portfolio this quarter; the skill itself is sound." --apply
make check-dispositions
  • A record that would fail the gate is refused (exit 1) and nothing is written. For example, certified without an improving exam is refused.
  • Disposing an item again replaces its record. The output names the record it replaced.
  • For certified, pass the exam result with --exam. The model comes from the exam, and the baseline defaults to evals/<name>/baseline.json.

retire needs the issue or commit that retires the item:

Terminal window
bob u dispose strapi-dev retire --retired-by '#2902' \
--reason "No Strapi project exists or is planned." --apply

It also prints a draft entry for scripts/lib/retired-items.json and the steps that finish the retirement in the same change:

  1. git rm the item.
  2. Add the draft entry to scripts/lib/retired-items.json.
  3. Run make check-retired-items check-dispositions.

bob u never writes retired-items.json while the item still exists.

When you change a skill that has a suite, check that the edit helps before you merge it. Run the suite on the edited skill, then gate the result against the best score recorded for that model:

Terminal window
bob eval run commit --model claude-sonnet-5-5 --out /tmp/commit.json
bob eval gate commit /tmp/commit.json
gate commit on claude-sonnet-5-5: ACCEPT — 0.83 is strictly above the recorded best for claude-sonnet-5-5 (0.67)
nothing written — add --record --pr <#N> --pages <slug,…> to record it
  • bob eval gate exits 0 to accept and 1 to reject. An equal score is a reject, because only a strict improvement passes.
  • To keep the outcome, rerun the gate with --record --pr '#N' --pages <slug>, giving the pull request and the wiki pages the edit was built on. An accepted result raises the best in evals/commit/baseline.json. Either way, one row goes into wiki/skill-impact.md.
  • Authoring a suite, the trigger cases and the cost ceilings are covered in Skill evals.