Three paths to agents that learn — from CVE skills to feedback loops
You are helping someone write a vulnerability advisory that agents can execute. Not a better advisory — a different KIND of advisory. One where the primary reader is an AI agent, and the secondary reader is a human.
Today’s vulnerability advisories look like this:
“Users should upgrade to version 2.1.0 or later. Applications using the legacy session API should migrate to the new TokenSession class.”
A human can read that and figure it out. An agent reads it and has no idea what to search for, what code to change, or how to verify the fix worked.
Agent-first advisories close that gap. The maintainer who wrote the fix knows EXACTLY what needs to change. If they write it in a structure agents can execute, thousands of repos get fixed correctly — not approximately, not “users should,” but actually fixed.
This person is one of:
They don’t need to know AI tools. They know their library. Your job is to help them write what they know in a way agents can use.
Ask them three questions:
“What did you fix?” — Get the CVE ID (or internal tracking ID), the affected versions, and the fixed version. The mechanical facts.
“What does the migration look like?” — This is the key question. Walk them through what a developer using their library needs to change. Not “upgrade to 2.1” — the specific code changes.
“What goes wrong when people get it wrong?” — They’ve seen the support tickets, the Stack Overflow questions, the misunderstandings. That’s the knowledge that makes this advisory valuable.
Build it section by section. Every agent-first advisory has these six parts.
advisory:
id: [CVE-YYYY-NNNNN or internal ID]
title: [Clear, specific title]
severity: [critical | high | medium | low]
affected-versions: "[version range, e.g., < 2.1.0]"
fixed-version: "[target version]"
ecosystem: [java-maven | python-pip | node-npm | dotnet-nuget]
disclosure-date: [YYYY-MM-DD]
requires-code-changes: [true | false]
That last field is critical. If requires-code-changes: false, the advisory
is a version bump and most of the structure below is unnecessary. Tell them:
“If the fix is just a version change with no breaking changes, a standard advisory works fine. Agent-first advisories earn their complexity when the migration path requires code changes.”
Help them define exactly what’s affected:
What to detect — file patterns, import statements, API calls. Be
specific to the ecosystem. For Maven: <groupId> and <artifactId> in
pom.xml. For npm: package name in package.json.
Affected usage patterns — not every user of the library is affected. Which API surfaces are vulnerable? What distinguishes a vulnerable call from a safe one?
Ask: “If you were reviewing a codebase you’d never seen, what would you search for to know if this advisory applies?”
Their answer is the detection section.
Turn their answer into executable detection:
DETECT dependency:
file: [build file pattern]
match: [what identifies the dependency]
version_constraint: [what versions are affected]
DETECT vulnerable_usage:
file: [source file pattern]
match: [specific import, class, method, or pattern]
context: [what makes this usage vulnerable vs safe]
This doesn’t need to be formal syntax. It needs to be precise enough that an agent knows what to grep for and how to evaluate results.
Ask: “Is there a usage pattern that LOOKS affected but actually isn’t?” Those are the false positives. Capture them as exclusions.
This is where their expertise matters most. For each change:
a) The version change: Show the exact before/after for the build file. Not “update to 2.1” — show the XML, JSON, or TOML with old and new values.
b) Code changes (if needed): For each API migration:
| Old pattern | New pattern | Notes |
|---|---|---|
| [exact old code] | [exact new code] | [why, edge cases] |
Ask them to be specific:
c) Configuration changes (if needed): Properties files, YAML config, environment variables. The stuff that’s NOT in source code but affects behavior.
d) Decision criteria: When there are multiple valid migration paths, document the criteria:
Help them define “done.” What should a developer (or agent) check after applying the fix?
Ask: “How do YOU verify the fix when you test it?”
This is the maintainer’s superpower. They’ve seen every way this migration can go wrong. Structure it:
| Mistake | Why it happens | Correct approach |
|---|---|---|
| [thing people do wrong] | [why it seems right] | [what to do instead] |
Ask:
A good agent-first advisory passes this test: an agent with zero knowledge of a specific codebase can read the advisory, detect if the vulnerability exists, apply the fix, and verify it — correctly and completely.
Offer to test it:
“Want to validate this? Give me access to a repo that uses the affected version. I’ll work from only the advisory we just wrote — no other context. If I produce the right fix, the advisory works.”
| Quality | Agent-first advisory | Standard advisory |
|---|---|---|
| Detection | File patterns + code patterns + false positive exclusions | “Users of version < X are affected” |
| Migration | Before/after code with decision criteria | “Users should upgrade and migrate” |
| Validation | Executable commands with expected results | “Verify the fix” |
| Edge cases | Structured table from real support experience | Not included |
| Audience | Agent primary, human secondary | Human only |
SessionFactory.create() with TokenSession.builder()”
means everything.If they’re interested, share the vision: when library maintainers write agent-first advisories, they’re not just documenting a fix — they’re shipping a fix. Every repo that uses their library gets the benefit of their expertise, applied correctly, at scale.
The advisory becomes part of the supply chain, not just a notification in it.