All lessons › Function F — AI Governance for Agentic Systems › Running the Programme — the CISO Office
F3.5

The metrics that matter at your level

F3
▶
Lightboard recording

Not recorded yet. The lesson below is complete and runnable today — the video is added later without touching this page.

Video placeholderpublishes automatically from recordings/F3.5.mp4
Risk

Reporting activity instead of exposure.

Control

Inventory coverage, attested-identity share, standing-access reduction, MTT-revoke, blast-radius distribution, eval-gate pass rate.

The lab

Instrument the six metrics from your lab stack.

◉Use case relevance

Metrics that count activity — agents reviewed, policies written — demonstrate effort. Metrics that demonstrate control are about coverage, containment, verification and time-to-stop, and they are much less comfortable.

At CyberTravels. Six activity metrics, each paired with the exposure question it was standing in for. "Agents reviewed" goes up when the queue gets longer, which is the opposite of what it is read as meaning; the replacement is agents running at a rung above what their blast radius supports.

◴What this lesson is — Day 0, Day 1, Day 2

Replacing activity metrics with exposure ones, starting from the observation that an activity metric moves in the right direction when the work gets bigger.

Day 0 — why

Reporting activity instead of exposure gives a board numbers that stay flat under neglect.

Day 1 — how

Report five that degrade on their own: exposure, likelihood, assurance, coverage, speed.

Day 2 — measure

Each is computed rather than assessed. A metric that does not degrade when ignored is measuring activity.

Measure this

what to measuredenominator or target
programme metrics that are computed rather than assessedshare; a metric that does not degrade when ignored is measuring activity

▦The framework, and how it works

   activity metrics             control metrics
   +--------------------+       +---------------------------+
   | agents reviewed    |       | % of agents in the register|
   | policies written   |  vs   | % with egress control      |
   | training completed |       | median time-to-stop        |
   +--------------------+       +---------------------------+
        comfortable                  uncomfortable, and true

The metrics that matter at this level are few, and none of them is a count of alerts, findings or trainings completed.

Five numbers, each with a property that makes it worth reporting monthly:

  • Exposure — fleet blast radius. Moves when someone adds a tool.
  • Likelihood — red-team attack success rate. Measured, not assessed.
  • Assurance — controls currently evidenced. Degrades on its own.
  • Coverage — agents in the inventory, honestly stated as a fraction of an estimate.
  • Speed — measured time-to-stop, from a game day.

The shared property is the important one: each degrades if nobody does anything. A metric that stays flat under neglect is measuring activity, not posture — which is why finding counts and training completion make such comfortable and useless board slides.

Anchor → F1.1. These are the indicators, at the level a CISO reports — exposure, likelihood, assurance, coverage, speed. The property that qualifies each of them is F1.1's: it is computed rather than assessed, so it degrades on its own. A number that stays flat under neglect is measuring activity.

2 · Demo — compute all five from what the tracks produced

3 · Where it breaks — metrics that cannot degrade

4 · The control — project the five forward under neglect

5 · The procedure, as a skill

The skill applies the neglect test: simulate a quarter with nothing done and see which numbers move. Four comfortable metrics stay green throughout, which is what disqualifies them.

▶Real time execution as skill

The skill — skills/programme/programme-metrics-selection/SKILL.md

name: programme-metrics-selection
description: >-
  Pick programme metrics that degrade when the programme is neglected, and
  separate them from the comfortable ones that stay green regardless. Use when
  choosing what to report, or when every metric is green and the estate is not.
allowed-tools: Read, Grep, Glob

A metric that cannot go red is a decoration

The test for a programme metric is simple and rarely applied: if the programme were neglected for a quarter, would this number move? Counts of policies published, training completed and tools deployed would not. Exposure, containment effectiveness, evidence freshness and measured time-to-stop all would.

When to use this

Choosing what to report to an executive committee, and auditing an existing dashboard that is entirely green.

Procedure

1 — List the candidate metrics and, for each, what it is computed from. Anything computed from a plan rather than from the estate is a decoration already.

2 — Apply the neglect test. Simulate a quarter with nothing done: no attestations refreshed, no evals run, no drift reviewed. Which numbers move?

3 — Keep the ones that move and say what each one costs to compute. A metric nobody can produce monthly will be produced annually and stop being a control.

4 — Report the comfortable ones you are dropping, with the reason. They have constituencies, and removing them silently gets them reinstated.

5 — Set a target and a direction per surviving metric. A number with no target is a chart; a number with a target is a commitment somebody is accountable for.

Example

Input — the fixture committed at the top of scripts/programme_metrics_selection.py. Edit it and re-run: the buckets, counts and verdicts below are derived from it, not hard-coded.

Output — the opening lines of a real run:

exposure   fleet blast radius             46   units of unreviewed action
likelihood red-team ASR                  25%   measured, containment surface
assurance  controls evidenced            50%   4/8
coverage   agents in inventory           34%   41 of ~120 est.
speed      measured time-to-stop         12s   game day 41 days ago
metrics that look like governance and are not:
   findings closed this quarter      goes up with activity; says nothing about posture
   training completion %             reaches 98% and stays there forever

The run continues past this. test_skills.py executes the script on every build, with no model configured — so what CI proves is that it runs and refuses legibly, not that it prints these lines. The output above is a recorded run against a real model, and nothing re-diffs it: a model's answer is not reproducible, and this repository does not claim otherwise anywhere it can be checked.

Output contract

{
  "candidates": [{"name": "str", "computed_from": "estate|plan", "moves_under_neglect": false}],
  "kept": [{"name": "str", "value": 0.0, "target": 0.0, "cadence": "str", "cost": "str"}],
  "dropped": [{"name": "str", "why": "str"}],
  "neglect_simulation": {"quarter": "str", "moved": ["str"], "unmoved": ["str"]}
}

Failure modes

  • Metrics computed from the plan. They measure the plan.
  • Dropping comfortable metrics silently. They come back.
  • No target. Nobody is accountable for a direction.

Three ways to do this lesson. Pick one. They run the same procedure against the same code — what changes is who drives it, and how much you see.

1In your AI agent — you are taught

The agent reads the lesson, explains the idea, fetches the code, runs the check and answers your questions as you go. This is the one to take if you are here to learn.

Install it, once. From the folder you cloned. --all does every agent it finds on your machine:

python3 scripts/install_skills.py --all --lessons F3.5

Then restart your agent and open it in that folder. On Windows, if python3 says Python was not found, use python instead.

Then pick f3-5-the-metrics-that-matter-at-your-level:

agentinstall just for this agentstart it
Claude Codepython3 scripts/install_skills.py --tool claude --lessons F3.5type /f3-5-the-metrics-that-matter-at-your-level
GitHub Copilot (VS Code)python3 scripts/install_skills.py --tool copilot --lessons F3.5type /f3-5-the-metrics-that-matter-at-your-level in Chat
Cursorpython3 scripts/install_skills.py --tool cursor --lessons F3.5type / in Agent chat and search for it
Codexpython3 scripts/install_skills.py --tool agents --lessons F3.5type $f3-5-the-metrics-that-matter-at-your-level, or run /skills

2As one Python command — you just run it

No agent, no conversation. The same lesson executes and prints the same readback. Take this one if you have no assistant, if you are reviewing rather than learning, or if you want the result without the teaching around it.

python3 scripts/lesson.py F3.5

3Read the code, and the difference — nothing runs

Neither of the above, and no model needed. The first command writes CyberTravels exactly as it stood at the end of this lesson; the second prints the diff — the lines this lesson added or changed, and nothing from any later one.

python3 scripts/checkpoint.py --at F3.5 --out work/cybertravels
python3 scripts/checkpoint.py --at F3.5 --diff

On Windows, type python wherever these say python3 — and use \ instead of / in the paths. Everything else is identical. A0.0 step 2 explains why.

Ways 1 and 2 need a model; way 3 does not. A signed-in Claude Code CLI needs no API key, and any OpenAI-compatible endpoint works too. With neither, the audit exits 2 and says so rather than inventing an answer. A0.0 sets this up.

Ways 1 and 2 both end with the same readback: What I did, What changed, The number and Read this next. A step that was skipped or refused is reported as exactly that, never as a pass.

If you did the last lesson’s challenge, expect this to stop. Most challenges ask you to edit the code, and ways 1 and 2 will not overwrite your edits: you get stopped, not a failure, with two options — --out for a fresh folder that keeps your work, or --force to discard it and start this lesson clean.

✓What you just proved

The five metrics compute to exposure 46, ASR 25%, assurance 50%, coverage 34% and a 12-second time-to-stop. Four comfortable metrics are shown not to degrade under neglect while all five real ones do. Projected twelve months forward with no investment, exposure rises from 46 to 334 and assurance falls from 50% to 0%.

✎Your turn

Which of the five can you produce today without a project? Start reporting that one monthly and let the missing ones become conspicuous — that is a cheaper way to get the others funded than asking for all five at once.

Tools used

OpenSearch

Skill source: skills/programme/programme-metrics-selection

← PreviousF3.4 · Org design and ownership