Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add cosai-oasis/secure-ai-tooling --skill explain-entitygit clone --depth 1 https://github.com/cosai-oasis/secure-ai-toolingWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/cosai-oasis/secure-ai-tooling/explain-entity)<a href="https://agentmods.dev/skills/cosai-oasis/secure-ai-tooling/explain-entity"><img src="https://agentmods.dev/badge/skills/cosai-oasis/secure-ai-tooling/explain-entity/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/cosai-oasis/secure-ai-tooling/explain-entity"><img src="https://agentmods.dev/badge/skills/cosai-oasis/secure-ai-tooling/explain-entity.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00141 | $0.01100 |
| Opus 5.5 | $0.00056 | $0.00440 |
| Sonnet 5.5 | $0.00028 | $0.00220 |
| Haiku 4.5 | $0.00014 | $0.00110 |
Grade A, and why
explain-entity scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 13d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 47 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Explain Entity
Give a framework newcomer a clear, plain-language explanation of a single risk / control / component / persona — what it is, why it matters, its classical roots, and how it connects to the rest of the map. Read-only.
Key structural fact: risks do not reference components directly. A risk's components are always derived, through the controls that address it — risk → controls (controls.yaml, the control's own components field) → components — never a direct link, and never presented as where the risk "manifests."
Audience and voice
Security-literate, new to CoSAI-RM. Plain language; explain the framework's structure terms as you use them; link every related entity id so the reader can drill in.
How to answer
- Resolve the entity. Find it by id or name across
risk-map/yaml/{risks,controls,components,personas}.yaml(grep). If a name matches several, list the candidates and ask which — or explain the closest and say so. - Read its full definition — risk:
shortDescription+longDescription+examples; control:description+guidance; component: description +edges+ category; persona: description +responsibilities+identificationQuestions. For a risk or a component, also grepcontrols.yamlfor the controls in play (below). - Explain plainly:
- What it is — one plain sentence.
- Why it matters / what it's for.
- Classical roots — consult the
classical-lexiconskill for the established concept it extends (a control's PEP / least-privilege grounding; a risk's classical analog such as confused deputy). Bridge classical→AI. - Relationships (the map connections), by type:
- risk → every control in its own
controlsfield, listed as addressing it whatever that control'scomponentssentinel (acomponents: nonecontrol still addresses the risk; at most note that it contributes no component below); the personas it impacts; and the components its addressing controls apply to — a derived set (risk → controls → components; the corpus has no structured risk→component link), not where the risk "manifests." Separately, surface every control whoserisksfield isallfrom the controls side — the risk's own field won't list them — labelled universal (addresses every risk), never merged into the risk's own control list. - control → the risks it addresses, the components it applies to (or, when its
componentsfield isallornone, say so instead of listing components), and the personas who implement it. - component → its
edges(to/from), and the controls whosecomponentslist contains its id, and, through them, the risks those controls address. List the universal (components: all) controls once, separately, labelled universal — never folded into the component's own controls, and never expand theirrisks: allcoverage into a risk list. If the component has no component-specific controls today, say so plainly, as a measured statement about the current corpus, and point toexplore-exposurefor its exposure — do not import a neighbour's controls, reached by any edge, or a lexicon-row's candidates; that derivation isexplore-exposure's job, not this skill's. - persona → the risks that impact it, the controls it implements, its ISO 22989 / EU AI Act mapping.
- risk → every control in its own
- Link ids for every related entity.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 13d ago Changed 05531596f410
- 15d ago First seen · 47 lines · 141 tokens per session scan A 5de249bb5864
explain-entity is a skill published in the GitHub repository cosai-oasis/secure-ai-tooling (100 stars, last pushed today), licensed Apache-2.0. It adds 141 tokens to every session and 1,100 once invoked, about $0.0006 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-01.
Other skills, from other repositories
svc-mobile-android
Android APK static analysis — OWASP Mobile Top 10, Retrofit API audit, transport security, smali reading, component export, auth flow analysis. Use when target is an APK/Android app. Triggers - APK, Android, mobile app, decompiled, smali, jadx, apktool.
svc-pivoting
Turn a foothold into a RELIABLE pivot (SOCKS tunnel + persistent shell) so internal volume never rides a fragile stateless RCE. Use the moment you have code-exec on a dual-homed/edge host and need to reach an internal segment. Triggers - dual-homed host, "not reachable from my box", internal CIDR behind a foothold…
web-auth-bypass-idor
Broken access control - IDOR, privilege escalation, JWT abuse, mass assignment, forced browsing - for web apps and APIs. Use on any multi-user or role-based app with object IDs, tokens, or admin functionality. Triggers - /api/users/ , /orders/ , ?account=/uid=/doc=, JWT (eyJ...), role/isAdmin field, admin panel, "403…
web-deserialization
Insecure deserialization to RCE for web apps. Use when the app deserializes attacker-controlled data - cookies/tokens/hidden fields/params that are serialized blobs, VIEWSTATE, Java/PHP/.NET/Python/Node apps. Triggers - base64 starting rO0AB or hex AC ED 00 05 (Java), PHP serialize O-prefix, VIEWSTATE, python pickle…
web-lfi-traversal
Path traversal / Local File Inclusion detection→file-read→RCE for web apps. Use when a param names a file/path/page/template/lang/download, or a response embeds file contents. Triggers - file=/page=/path=/template=/lang=/download=/include= param, ../, %2e%2e, "no such file", directory listing, download endpoint.
web-sqli
SQL injection detection→exploitation→proof for web apps and APIs. Use when a parameter reaches a DB query, when input triggers a SQL error / boolean or time differential, or during VULN-ASSESSMENT/EXPLOITATION on a web target. Triggers - sql syntax error, ORA-/MySQL/psql/SQLite error string, ' or 1=1, order by…