Not recorded yet. The lesson below is complete and runnable today — the video is added later without touching this page.
recordings/F3.5.mp4Reporting activity instead of exposure.
Inventory coverage, attested-identity share, standing-access reduction, MTT-revoke, blast-radius distribution, eval-gate pass rate.
Instrument the six metrics from your lab stack.
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.
Replacing activity metrics with exposure ones, starting from the observation that an activity metric moves in the right direction when the work gets bigger.
Reporting activity instead of exposure gives a board numbers that stay flat under neglect.
Report five that degrade on their own: exposure, likelihood, assurance, coverage, speed.
Each is computed rather than assessed. A metric that does not degrade when ignored is measuring activity.
Measure this
| what to measure | denominator or target |
|---|---|
| programme metrics that are computed rather than assessed | share; a metric that does not degrade when ignored is measuring activity |
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 trueThe 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:
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.
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.
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, GlobThe 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.
Choosing what to report to an executive committee, and auditing an existing dashboard that is entirely green.
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.
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.
{
"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"]}
}
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.
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.5Then 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:
| agent | install just for this agent | start it |
|---|---|---|
| Claude Code | python3 scripts/install_skills.py --tool claude --lessons F3.5 | type /f3-5-the-metrics-that-matter-at-your-level |
| GitHub Copilot (VS Code) | python3 scripts/install_skills.py --tool copilot --lessons F3.5 | type /f3-5-the-metrics-that-matter-at-your-level in Chat |
| Cursor | python3 scripts/install_skills.py --tool cursor --lessons F3.5 | type / in Agent chat and search for it |
| Codex | python3 scripts/install_skills.py --tool agents --lessons F3.5 | type $f3-5-the-metrics-that-matter-at-your-level, or run /skills |
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.5Neither 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 --diffOn 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.
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%.
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
Skill source: skills/programme/programme-metrics-selection