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

Translating agentic risk upward

F3

This starts chapter F3. Its course guide is F3 in the Function F course guide →

▶
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.1.mp4
Risk

Blast radius explained in engineering terms to a board that needs consequence.

Control

What can happen, how fast, who can stop it.

The lab

Convert one blast-radius measurement into a board paragraph.

◉Use case relevance

The board does not want the threat model. It wants to know the exposure, whether it is going up or down, and what decision is being asked of them — in that order, in language that survives being repeated by someone else.

At CyberTravels. translate() turns "the agent holds payments:refund with a ceiling of twelve calls" into "one compromised run can move up to 60,000 before any human is involved, it is not recoverable, and we would know within five minutes". Same fact. The first sentence answers a question nobody asked.

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

Translating blast radius into consequence, so the sentence a board hears is about what one compromised run can move rather than about which scope the agent holds.

Day 0 — why

A board cannot act on "we found prompt injection"; it can act on exposure, likelihood and a decision being requested.

Day 1 — how

Drop the mechanism, keep three things, and offer written risk acceptance as a legitimate outcome.

Day 2 — measure

Three indicators the board sees, chosen from the set that already exists so anyone can re-compute them.

Measure this

what to measuredenominator or target
indicators the board seesthree, chosen from the set that already exists so anyone can re-compute them

▦The framework, and how it works

   technical risk                board-usable exposure
   +-------------------+         +--------------------------+
   | prompt injection  |   -->   | exposure: X, trend: down |
   | in the RAG path   |         | decision asked: fund Y   |
   +-------------------+         +--------------------------+

   it has to survive being repeated by someone else, without you

Translating agentic risk upward means dropping every mechanism and keeping three things: exposure, likelihood, and the decision being requested.

The failure mode is not using too much jargon. It is presenting findings when the audience needs a decision. A board cannot act on "we found prompt injection in the review agent". It can act on "a critical system can take N units of unreviewed action, we demonstrated it, and we are asking for X or for written acceptance".

That last clause matters more than people expect. Accepting the risk in writing, with a named owner and a review date, is a legitimate outcome. Offering it makes the ask credible, because it shows you are presenting a decision rather than lobbying for a budget.

Anchor → F1.1. Translating risk upward is mostly choosing which three indicators a board sees. Pick them from the set that already exists, or the board gets a number invented for the slide and nobody can re-compute it.

2 · Demo — compute the three numbers from what the tracks produced

3 · Where it breaks — the findings-shaped update

4 · The control — exposure, likelihood, assurance, decision

5 · The procedure, as a skill

The skill computes three numbers: exposure, containment ASR, and control coverage.

Then it writes the same numbers up twice:

  • The findings-shaped update, with a note on what is wrong with it.
  • The position, which uses the identical numbers and attaches an ask.

Same evidence, two documents. Only one of them can be acted on.

▶Real time execution as skill

The skill — skills/programme/risk-translation-upward/SKILL.md

name: risk-translation-upward
description: >-
  Compute a fleet's exposure, containment effectiveness and control coverage,
  then translate the three numbers into a statement a board can act on rather
  than a list of findings. Use when preparing an executive update on agentic
  risk.
allowed-tools: Read, Grep, Glob

A findings list is not a position

An executive update made of findings asks the reader to do the synthesis, and they will do it wrong or not at all. Three computed numbers — how much the fleet can reach, how much of an attack it stops, how much of the control set is evidenced — support a position, a decision and a request.

When to use this

Preparing a board or executive committee update, and whenever the current one is a list of incidents.

Procedure

1 — Compute exposure. Sum the blast radius across the fleet, weighted by scope, with gated actions discounted. One number, and say what it is a sum of.

2 — Compute containment effectiveness. Attack success rate against the controls as they run today, from the eval suite rather than from design intent.

3 — Compute control coverage in three states. Evidenced, stale, unevidenced. The stale count is the one that moves an executive conversation, because it is the one nobody expected.

4 — Write the findings-shaped version and mark what is wrong with it. Usually: no trend, no comparison, no decision requested, no cost, and no statement of what happens if nothing changes. Showing that is how the format changes.

5 — Write the position. Where the exposure is concentrated, what would reduce it most per unit of friction, what you are asking for, and what you will report next time. Same numbers, different artefact.

Example

Input — the fixture committed at the top of scripts/risk_translation_upward.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:

agent                     blast radius
----------------------------------------
pr-remediation-agent                44
claims-triage-agent                  1
doc-summariser                       1
FLEET TOTAL                         46

red-team attack success rate (containment surface): 25%

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

{
  "exposure": {"total": 0, "by_agent": [{"name": "str", "blast": 0, "gated": ["str"]}]},
  "containment": {"asr": 0.0, "from": "eval suite"},
  "coverage": {"evidenced": 0, "stale": 0, "unevidenced": 0, "of": 0},
  "findings_version": {"problems": ["str"]},
  "position": {"concentration": "str", "best_reduction": "str", "ask": "str", "next_report": "str"}
}

Failure modes

  • Reporting incidents. They are anecdotes at this altitude.
  • One coverage number. The stale bucket is the story.
  • No ask. An update with no decision requested gets noted.

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.1

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-1-translating-agentic-risk-upward:

agentinstall just for this agentstart it
Claude Codepython3 scripts/install_skills.py --tool claude --lessons F3.1type /f3-1-translating-agentic-risk-upward
GitHub Copilot (VS Code)python3 scripts/install_skills.py --tool copilot --lessons F3.1type /f3-1-translating-agentic-risk-upward in Chat
Cursorpython3 scripts/install_skills.py --tool cursor --lessons F3.1type / in Agent chat and search for it
Codexpython3 scripts/install_skills.py --tool agents --lessons F3.1type $f3-1-translating-agentic-risk-upward, 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.1

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.1 --out work/cybertravels
python3 scripts/checkpoint.py --at F3.1 --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 fleet's exposure totals 46 units, containment ASR is 25%, and control coverage is 50%. The findings-shaped update is shown with five specific problems. The board translation states exposure, likelihood, assurance and a decision, contains no mechanism jargon, carries the measured numbers, and explicitly offers written acceptance as an alternative.

✎Your turn

Write these four lines for your highest-tier system. If you cannot fill the likelihood line with a measurement, that is the first thing to fund — an assessment is not a number.

Skill source: skills/programme/risk-translation-upward

← PreviousF2.9 · Regulator and auditor conversations