tree: 82f1f17299812a5892b2910bece8b0b1e6283a11
  1. fixing-security-issues.md
  2. forwarder-routing-policy.md
  3. how-the-security-team-works.md
  4. poc-handling-policy.md
  5. process.md
  6. README.md
  7. roles.md
  8. security-model-preparation.md
  9. threat-model.md
docs/security/README.md

Table of Contents generated with DocToc

Security workflow skill family

Scope. Works on any project, ASF or not. The ASF intake path (security@, Vulnogram CVE flow) is the default profile; non-ASF adopters swap it for GitHub Security Advisories / a MITRE CNA through the adapter/config layer.

End-to-end automation for an ASF project‘s security-issue handling process — from inbound report on the project’s security@ mailing list through to a published CVE record on cve.org. Eleven skills that compose into the canonical 16-step lifecycle, three that produce, verify, and maintain the project's own security model, plus one read-only supporting skill for tracker-stats dashboards (fifteen skills total).

Why a framework skill family? The 16-step process exists across the foundation; every project's security team runs essentially the same workflow with project-specific scope labels, mailing-list addresses, milestone formats, and canned-response wording. Lifting the workflow into a project-agnostic framework lets each adopter plug their specifics into <project-config>/ and reuse the skills verbatim.

[!TIP] Why this family

  • Every report that lands on security@ becomes a tracked issue, with a receipt drafted to the reporter
  • The whole lifecycle in one place — triage, CVE allocation, the fix PR that does not leak the embargo, and the advisory
  • Read-only until you confirm: no label flips, no closes, and no CVE allocated without you saying so

Install & first runs

Install just this family — one plugin, 15 skills. The security-report lifecycle, from intake through CVE publication.

Once you have added the marketplace:

/plugin install magpie-security@apache-magpie

New to Magpie? The quick start walks the whole path in one place — install, the first /magpie-setup run, and a recording of it happening — plus the other agents and the secure-isolation setup to run next.

Before the first run

An animated  run for the security family: the check failing, the values derived from the repository, one question for the rest, and gitignored files written

Illustrative — the real run derives more and asks better. What is true is the shape: it runs itself, it writes only gitignored files, and it stages nothing.

Every skill here resolves project-specific values from the adopter‘s <project-config>/ directory — which is .apache-magpie-local/ (gitignored, yours) first, then .apache-magpie-overrides/ (committed, the project’s).

For yourself: /magpie-setup config scaffolds and fills these locally. Nothing is staged, nothing is committed, and it works on a repository that has never adopted Magpie.

For the project: /magpie-setup adopt commits them for every contributor, either scaffolded directly or promoted from what you configured locally.

Required. Without these a skill would act on a guess, so it stops and says which file is missing.

FileWhat it carriesRead by
fix-workflow.mdFork / clone / toolchain specifics, backport-label policy, commit-trailer wording, PR scrubbing, private-PR fallback.issue-fix
milestones.mdMilestone naming conventions + create-and-assign recipe.issue-sync
project.mdProject manifest. Identity, repositories, mailing lists, tools enabled, CVE tooling, GitHub project-board + issue-template field declarations. The single file every skill reads to resolve project-scoped references.cve-allocate, issue-deduplicate, issue-fix, issue-import, issue-import-from-pr, issue-import-from-scan, issue-import-via-forwarder, issue-invalidate, issue-triage, model-verify, tracker-stats-dashboard
scanner-products.mdPrivate scanner product names, and the finder-anonymisation rule applied before anything is quoted publicly.issue-sync
scope-labels.mdScope label → CVE product / packageName / collection-URL mapping. Exactly one scope label per tracker.issue-deduplicate, issue-import-from-md, issue-import-from-pr, issue-triage, tracker-stats-dashboard
security-intake-config.mdCapability-flag vocabulary for the intake path: how reports arrive, what counts as in scope, and what a receipt says.issue-import
security-model.mdAuthoritative URL for the project's Security Model + known-useful anchors + drafting rule.issue-triage, model-prepare, model-verify
security-tracker-stats.mdWhich tracker fields and windows the stats dashboard reads, and what it publishes.tracker-stats-dashboard
title-normalization.mdRegex cascade the security-cve-allocate skill applies to tracker titles before pasting them into the CVE-tool allocation form.cve-allocate

Optional. Each has a documented fallback; absent, the skill still runs.

FileWhat it carriesRead by
canned-responses.mdReusable reporter-facing reply templates.issue-import, issue-import-from-scan, issue-invalidate, issue-sync, issue-triage, model-update
distributor-list.mdThe embargo distributor list a pre-announcement goes to, and what it may contain. Absent, no pre-announcement is proposed.issue-sync
privacy-llm.mdWhich model tier may see which class of content, for projects routing foundation-private information away from third-party models.issue-import
release-trains.mdActive release branches, release-manager attribution per cut, rotation rosters, security-team roster.cve-allocate, issue-fix, issue-import, issue-import-from-pr, issue-sync, issue-triage

Works well with

Third-party packages, none of them required: this family works with none of them installed, and Magpie neither bundles nor depends on any. They are named because they are what a maintainer goes looking for next, and because the answer differs by agent.

Aikido Security — Aikido

SAST, secrets and infrastructure-as-code scanning surfaced in the session.

With this family: A second opinion from a conventional scanner, and a different class of finding — committed secrets — from the ones a code-reading scan surfaces.

Available on Claude Code only.

Claude Security — Anthropic

A multi-agent vulnerability scan of your own repository, run inside the session; each finding carries a severity, a CWE category and reproduction steps, and the ones you pick become patch files you review before applying.

With this family: This family handles reports that arrive — intake, triage, CVE, advisory. Scanning finds the ones nobody reported. The two meet at security-issue-import-from-scan, which imports scanner output as trackers.

Available on Claude Code only.

Claude Code only: it drives subagents and a scan workflow that Agent Plugins 1.0 has no component for. Listed with its harness named rather than presented as the answer for everyone.

Install commands per agent are in Companion skill packages.

Try these first

Illustrative shapes, not real transcripts — your output will differ. Nothing below sends, merges, or posts anything without you confirming it.

Pull new reports out of the mailbox.

/magpie-security:issue-import

An issue-import run: two security@ threads with no tracker yet, each becoming a Needs-triage issue with a receipt drafted to the reporter, pending confirmation

Triage what came in.

/magpie-security:issue-triage

An issue-triage run classifying four trackers as valid, defence-in-depth, info-only and a probable duplicate, with every disposition still a proposal

Check the security model still matches reality.

/magpie-security:model-verify

A model-verify run: two green checks that the threat model and the code agree, and one failure where the model still names a surface no route serves

Skills

Lifecycle skills

SkillPurpose
security-issue-importImport new reports from <security-list> into <tracker>.
security-issue-import-from-prOpen a tracker for a security-relevant fix opened as a public PR.
security-issue-import-from-mdBulk-import findings from a markdown report.
security-issue-import-from-scanImport findings from a security scanner output (Trivy, Grype, etc.) into <tracker>.
security-issue-import-via-forwarderImport reports relayed through the ASF security forwarder when no direct reporter contact exists.
security-issue-triagePropose an initial-triage disposition (VALID / DEFENSE-IN-DEPTH / INFO-ONLY / INVALID / PROBABLE-DUP / FIX-ALREADY-PUBLIC) for each tracker still in Needs triage; opens a discussion comment, never flips the label.
security-issue-syncReconcile a tracker against its mail thread, fix PR, release train, and archives.
security-cve-allocateAllocate a CVE for a tracker (Vulnogram URL + paste-ready JSON).
security-issue-fixImplement the fix as a public PR in <upstream>.
security-issue-deduplicateMerge two trackers describing the same root-cause vulnerability.
security-issue-invalidateClose a tracker as invalid with a polite-but-firm reporter reply.

Security-model skills

The lifecycle skills above route one report. These three maintain the document they route it against — the project's security model — so that routing has something to cite. See security-model-preparation.md for the lifecycle and the rationale.

SkillPurpose
security-model-prepareProduce a first model for a project that has none, in draft-first mode, and land it with its discoverability chain as one PR per repository.
security-model-verifyPre-flight an existing model: can an agent mechanically reach it, and does it cover the minimum bar a triager depends on. Discoverability is the only hard gate.
security-model-updateRead the decision history back into the model — new known-non-finding entries and a model-gap list, regression-checked against past valid reports.

The rubric these skills measure against is maintained externally by Alpha-Omega (https://github.com/alpha-omega-security/threat-model) and referenced by URL; Magpie keeps no local copy.

Supporting tools

SkillPurpose
security-tracker-stats-dashboardGenerate a self-contained HTML dashboard of <tracker> repo statistics (lifecycle bands, opened-vs-untriaged backlog, mean time to triage / first response / fix). Read-only — never modifies tracker state.

Deep documentation

  • poc-handling-policy.md — what an agent may do with reporter-supplied proof-of-concept code: static review by default, isolated container only on explicit approval, never on the host.
  • security-model-preparation.md — the produce / verify / update lifecycle for the project's own security model: the external Alpha-Omega rubric, the AGENTS.mdSECURITY.md discoverability chain and why it is the only hard gate, why substantive findings go to the private list rather than a public issue, the provenance tags that make a draft-first model safe, and the fence around the known-non-findings section.
  • process.md — the 16-step lifecycle with Mermaid diagram + per-step description; the label lifecycle state diagram + label reference table. The authoritative process reference.
  • roles.md — who owns which steps (issue triager / remediation developer / release manager), the shared conventions every role observes (keeping the reporter informed, recording status transitions, confidentiality), and the role-by-role workflow walkthroughs.
  • fixing-security-issues.md — hands-on guide for a remediation developer picking up a CVE-allocated tracker and shipping the fix.
  • how-the-security-team-works.md — how the team operates and how a new member lands: the triager rotation that runs the skills and delegates, tracker access, mail list subscription, expected reading, first triage shadow.
  • threat-model.md — release-blocking threat model for the security skill family: trust boundaries, adversary personas, STRIDE matrix per skill, mitigation cross- reference, residual risk, and the re-audit cadence.
  • forwarder-routing-policy.md — when a tracker has no direct reporter contact (ASF-relay, read-only GHSA, anonymous tip), the skills route reporter-facing communication through the forwarder. The policy defines when that mode applies, the milestone list (events that do get relayed), and the negative list (events that don't — including credit-confirmation questions and regular workflow status).

Cross-references