Anthropic Releases Code Claude Security Plugin in Beta: Multi-Vulnerability Agent Scanner That Works on Your Terminal

Anthropic released the Claude Security plugin for Claude Code in beta. The plugin runs multi-agent vulnerability scans in the repository within an existing Claude code session, and converts selected findings into patch files that you update and apply. Anthropic emphasized the tool’s interoperability in a variety of ways after the announcement, highlighting its ability to run full scans across a full codebase or test changes from a terminal just before a commit.
Which plugin adds
The plugin adds one command, /claude-security, which opens a menu of three functions, according to the official documentation:
- Scan the code base – the entire cache or a subset of it
- Scan for changes – branch diff, pull request diff, or single commit
- Hold up the leaflets — convert report findings into .patch files
Entering two commands from the official Anthropic marketplace:
/plugin install claude-security@claude-plugins-official
/reload-pluginsIf the marketplace is not found, use /plugin marketplace and add anthropics/claude-plugins-official first. The plugin source is public in the cloud-plugins-official repository, currently at version 0.10.0.
How the scan pipeline is structured
Scanning is implemented as a dynamic workflow – a JavaScript orchestration script that fans use for all subagents. The text declares six categories:
- Inventory: divide the cache into partitions. All top-level directories should be scanned or explicitly skipped for a reason.
- The threat model: one model per component, generating inlets, sinks, confidence limits, and files that the researcher must read thoroughly.
- Research: one researcher per part × division cell.
- Sweep: Fill the gap in what is not included in the matrix.
- The panel: counter-validation of three lenses, one voter per lens.
- Adversarial: only great effort: save the panel again, then the red team all survived.
The study competes in four consistent categories: injection- and input, auth-and-access, memory-and-insecurity, and crypto-and-secrets. The memory-and-unsafe lens is released for components written in memory-safe languages, so a pure Python or TypeScript component gets three lenses instead of four.
A running performance rating is determined by four different levels of effort: low, medium, high, and high. Depending on the selected category, certain parameters are enforced: the maximum number of components is limited to 12 in the lower and middle tiers, which expands to 24 in the high and max tiers; matrix cells are given by 1 researcher, increasing to 2 at higher and higher levels; and the gap closing value sweeps the scale from 0 for low, to 1 for medium, to 2 for high and high. When dealing with a limited scope or a small diff, the process narrows down to a single researcher setting instead of using the entire matrix. This ensures that the test remains strictly on target while maintaining the same level of assurance.
The system employs agents with different models: an orchestrator runs on Opus, while a repository mapper and a read-only code inspector run on Sonnet. In addition, the session model is inherited by researchers and verifiers, and scanning agents are limited to learning tools only.
How discovery earns its place in the report
This is the part you need to understand closely. A candidate discovery is not included in the report because the researcher discovered it. It only enters after surviving the panel.
Each candidate is given three independent verifiers, one for each lens: ACCESS, IMPACTagain PROTECTIONS. Each returns a TRUE_POSITIVE or FALSE_POSITIVE result with one or two lines naming the final file:line. Final quorum is 2 out of 3. If less than three voters return, the candidate cannot be retained at all.
The panel effect also closes the implied confidence in the findings. A flexible 3/3 panel allows for a reliable high ceiling; a 2/3 quorum closes it. Findings cannot demand more trust than your earned confirmation.
Seriously, the stats are calculated in Python by the report provider, not the model that generated the findings. Confirmation status. The review stamp is set to confirm only if the vote record proves that the panel has acted on all the findings of the report; otherwise it is not confirmed for the reason stated. That makes the report’s own account of its validity something to check rather than something to take for granted.
[v’ + (i+1) + ‘] ‘ + lk +’‘ + ld +’‘; var btn = document.createElement(‘button’); btn.type=”button”; btn.className=”toggle”; btn.addEventListener(‘click’, function(){ votes[i] = !votes[i]; paintVotes(); renderPanel(); }); row.appendChild(btn); votersEl.appendChild(row); }); function paintVotes(){ var btns = votersEl.querySelectorAll(‘.toggle’); for (var i = 0; i[i].textContent = votes[i] ? ‘TRUE_POSITIVE’ : ‘FALSE_POSITIVE’; btns[i].className=”toggle” + (votes[i] ? ‘tp’ : ‘fp’); btns[i].setAttribute(‘aria-label’, LENSES[i].k + ‘:’ + btns[i].textContent + ‘. Click to investigate.’); } } function pad(s, n){ s = Strings); while (s.length < n) s += '.'; buyisela s; } umsebenzi renderPanel(){ var t = votes.filter(Boolean).length; var f = 3 - t; var igcinwe = t >= 2; var ceiling = t >= 3? ‘HIGH’ : ‘MIDDLE’; var lines=””; LENSES.forEach(function(l, i){ lines += ‘ [v’ + (i+1) + ‘] ‘ + pad(lk +’ ‘, 18) +” + (votes[i] ? ‘TRUE_POSITIVE‘:’FALSE_POSITIVE‘) + ‘n’; }); var verdict = stored ? ‘SAVE written in CLAUDE-SECURITY-RESULTS.md as F1′ : ‘THROW IT AWAY never shown; not in the report at all’; var conf = stored ? ” + pad(‘confidence ceiling ‘, 22) +’ ‘ + Ceiling +’‘ + (t >= 3 ? ‘ (in unison)‘:’ (quorum, not unanimous)‘) + ‘n’ : ”; panelOut.innerHTML = ‘$ panel –finding F1 –voters 3 –quorum 2nn’ + lines + ‘n’ + ” + pad(‘tally ‘, 22) + ‘ ‘ + t + ‘ true / ‘ + f + ‘ falsen’ + ” + pad(‘verdict ‘, 22) + ” + verdict + ‘n’ + conf; resize (); } paintVotes(); renderPanel(); /* ———- 3. effort editor ———- */ var tier=”medium”, memsafe = false; var compEl = document.getElementById(‘comp’); var compV = document.getElementById(‘comp-v’); var effortOut = document.getElementById(‘effort-out’); var memBtn = document.getElementById(‘memsafe’);
[].slice.call(root.querySelectorAll(‘[data-tier]’)).forEach(function(b){ b.addEventListener(‘click’, function(){ tier = b.getAttribute(‘data-tier’);
[].slice.call(root.querySelectorAll(‘[data-tier]’)).forEach(function(x){ x.setAttribute(‘aria-suppressed’, x === b ? ‘true’ : ‘false’); }); renderEffort(); }); }); memBtn.addEventListener(‘click’, function(){ memsafe = !memsafe; memBtn.setAttribute(‘aria-pressed’, memsafe ? ‘true’ : ‘false’); renderEffort(); }); compEl.addEventListener(‘input’, function(){ compV.textContent = compEl.value; renderEffort(); }); function renderEffort(){ var big = (tier === ‘high’ || tier === ‘max’); var cap = max ? 24:12; var found = parseInt(compEl.value, 10); var used = Math.min(found, cap); var cats = memsafe? 3:4; var per = major ? 2 : 1; var sweeps = tier === ‘low’ ? 0 : (big? 2: 1); var low = (tier === ‘low’); var researchers = used * cats * per; var dropped = get > cap? ‘n Inventory cap: to keep the ‘ + cap + ‘ of the ‘ + found + ‘ parts; the rest is merged or reduced’ : ”; var researchLine = low? ” + pad(‘shape ‘, 24) +’ one researcher (no component matrix)‘ : ‘ + pad(‘matrix category ‘, 24) + ” + cats + ‘ categories × ‘ + + ‘researcher’ + (for > 1 ? ‘s’ : ”) + ‘ per celln’ + ” + pad(‘posted by researchers ‘, 24) +’ ‘ + researchers +’‘; effortOut.innerHTML = ‘$ /claude-security scan codebase –effort ‘ + tier +’nn’ + ” + pad(‘part cap ‘, 24) + ” + cap +’ (12 for low/medium, 24 for high/maximum)n’ + ” + pad(‘scanned parts ‘, 24) + ” + used + ‘ for ‘ + found + dropped + ‘n’ + researchLine + ‘n’ + ‘ ‘ + pad(‘gap-fill sweeps ‘, 24) + ” + sweep + ‘n’ + ” + pad(‘-4) + 2 validation candidate’ 3, + ‘ ‘ + pad(‘adversarial pass ‘, 24) + ‘ ‘ + (tier === ‘max’ ? ‘to (reset the panel border guards, survivors of the red group)‘:’off – maximum effort only‘) + ‘nn’ +’ Each stage clears the same confirmation bar. A full scan includesn’ +’ extra ground; it does not lower the standard to which it must be attained.‘; resize (); } renderEffort(); /* ———- 4. report tree ———- */ document.getElementById(‘report-out’).innerHTML = ‘$ ls -R CLAUDE-SECURITY-20260722-1412/nn’ + ‘ CLAUDE-SECURITY-RESULTS.md readable reportn’ +’ CLAUDE-SECURITY-RESULTS.jsonl one JSON object for each receiven’ +’ CLAUDE-SECURITY-REVISION-a1b2c3d4e5f6.jsonn’ +’ commitment, effort, hard math,n’ +’ and how it was confirmedn’ +’ episodes/n’ +’ F1.patch F1.md One clip + note for each findn’ +’ .I ignore it so the missing git plugin can’t do itnn’ + ‘ The updated filename carries -dirty when the uncommitted changes were partn’ + ‘ of the scanned tree, so the report is always bound to the code it describesn’ + ‘.‘; /* ———- auto resize WordPress iframe ———- */ function resize(){ try { var h = root.offsetHeight + 40; if (window.parent && window.parent !== window) { window.parent.postMessage({ mtpEmbedHeight: h, id: ‘mtp-cs-term’}, ‘*’); } } catch (e) {} } window.addEventListener(‘load’, resize); window.addEventListener(‘resize’, resize); setTimeout(resize, 120); setTimeout(resize, 600); })();



