Skip to main content
Every skill on an agent’s list adds its description to every request, whether or not the model uses it. The agent’s Prompt & skills page shows which skills earn that cost, over the last 30 days.

Read the skills table

An agent’s page opens on Prompt & skills. Its Skills table has a row per skill on the list the model sees: Never loaded means it was on the list and no run loaded it. Unavailable means the count couldn’t be read, so it isn’t a zero. Sort by Loaded to bring them together; the model’s list order doesn’t change. A load count isn’t an effect. The model loads a skill when the request fits, so runs that loaded it aren’t comparable to runs that didn’t. Only the lift columns say whether a skill helps. Rows under Not sent: over the limit or Added, but not offered never reach the model, so their zero says nothing. For every skill at once, Skills → Your skills has Loaded · 30 d, Benchmark lift and a Never loaded filter.

One skill’s numbers

Click a skill’s name for its side panel. Use in this agent · 30 days reads like this:
Loaded on 12 runs of 300. support-agent’s routing offered it 120 times; a run loaded it after 12 (10%). Graded runs that loaded it passed 88% of the time (25 graded).
A pass rate appears only from 5 graded runs. Below that, the panel says Pass rate needs at least 5 graded runs; 3 so far. A trend needs 5 graded runs in each half of the window. Open skill page has a Usage and quality pane. My agents counts your organization’s runs: Under Global, that last cell becomes Delivered when offered. It divides a different step, so the two percentages don’t compare. See Offered, Delivered, Loaded for the steps and SkillScore for the public numbers.

Offered, not used

Offers minus loads is the number to watch: the model saw the skill’s line and passed. The skill page’s Live Traces tab shows it as a Discoverability gap. A low count isn’t always the skill’s fault:
  • activation not measurable for prompt-injection usage: the skill reached the model through prompt text, so nothing reports a pick. You get counts, not a rate.
  • Always included: every run already has the full text, so the model has no reason to load it.
  • A rare task: a skill for refund disputes should be passed over on most requests.

A skill nobody loads

Under the table, the page totals the idle skills, with the tokens their descriptions cost, and adds: “Zero loads alone do not show whether a skill is needed.” Once a skill has been offered in at least 5 successful production runs, it also offers Review removing 1 skill. First open a few of those runs and read what was asked. Then: Removing is staged: Review & apply shows the evidence, such as support-agent never loaded it in 30 days, before anything changes.

When to retire one

Retire a skill when the model does as well without it, not when its load count is low. A skill loaded often can still add nothing. Benchmark lift near 0 pts suggests the model already knows this. For a skill that teaches public knowledge, that’s the expected end. A private or house-style skill isn’t expected to retire, so check its eval first. To measure on your own traffic, Measure on live traffic… in the row’s menu leaves the skill out of a random share of runs. On OpenAI Agents SDK agents, decimalai.evaluate() with exclude_skills= runs a set of cases without it. To take a skill you own off every agent, its creator or an org admin can choose ⋯ More → Deactivate on its page. A published skill follows its own steps.

From code

activation_count is Loaded, and a skill with no loads isn’t in the result. The 5-run floor is the page’s, so check evaluated_count before trusting pass_rate. For one skill’s offers:
It returns offered_count, activated_count (Loaded), offered_not_activated_count and activation_rate, which is null when a rate isn’t measurable.