RedAmon is an AI framework that connects reconnaissance, exploitation, and post-exploitation activities into an automated security-testing pipeline, while organizing findings and proposing code fixes. It is for authorized penetration testing, security research, and education. The catalogue entries provide skills and instructions for working with the framework.
Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/samugit83/redamonnpx agentmods add skills/samugit83/redamon/priority-board-triageWrote 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/samugit83/redamon/priority-board-triage)<a href="https://agentmods.dev/skills/samugit83/redamon/priority-board-triage"><img src="https://agentmods.dev/badge/skills/samugit83/redamon/priority-board-triage/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/samugit83/redamon/priority-board-triage"><img src="https://agentmods.dev/badge/skills/samugit83/redamon/priority-board-triage.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.00146 | $0.01798 |
| Opus 5.5 | $0.00058 | $0.00719 |
| Sonnet 5.5 | $0.00029 | $0.00360 |
| Haiku 4.5 | $0.00015 | $0.00180 |
Grade A, and why
priority-board-triage 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 15d 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 — 131 lines — stays where its author put it; the contents beside it link to each section on GitHub.
When to Use
- Changing the risk model, the evidence bundle, the review prompt or its validation.
- Adding a writer of any
triage_*property: a run step, a route, an MCP tool, a migration. - Adding a reader of the board state: a report, an MCP tool, a filter, a UI chip.
For the Cypher itself, also follow graph-db-writes; for a new MCP tool,
mcp-server-tools.
Critical Rules
-
NOBODY writes a final score.
triage_priority_score,triage_tier,triage_tier_rule,triage_risk,triage_factors,triage_stateandtriage_decided_by(the mixin's_FINAL_SET) come ONLY fromscore_model.combine_layers(), reached throughlayers.combine_props(). A writer changes ITS layer and askscombinefor the final inside the same transaction. Setting a final directly is how a review or a verdict used to vanish at the next run. -
Each writer touches one layer.
Writer Layer Method a run's publish BASE (+ a builtin REVIEW it made) publish_triage_layersan MCP agent's review REVIEW, channel mcpwrite_reviewa person (app, or MCP with channel mcp)DECISION set_human_verdictA publish never writes a decision,
:Mutedorupdated_at; a review never writes a decision or the base; a verdict never writes the base or a review. -
NEVER write
updated_atfrom triage. It is the scan's "last seen" stamp: the prune reads it, and the publish's guard skips a node whoseupdated_atmoved since the run read it. A triage write that bumped it would make every finding look re-ingested. -
Every single-finding write is lock-then-read, in one managed transaction.
SET n._triage_lock = true REMOVE n._triage_lockfirst, then read the node, the live proof (_LIVE_PROOF) and the current layers, then decide and write. Match exactly one node, elseambiguous. A timeout raisesTriageWriteBusy, which the API returns as 503busy. Never read proof from a run's snapshot. -
Live proof is proof of THIS finding.
_LIVE_PROOFmirrorsscore_model.is_proven; it must not readtriage_proof, which records proof on the finding's HOST. Reading it lifted every finding on a compromised host to T1 "proven" at its next rescore. (The mute guards'_PROVENdoes read it, on purpose: refusing a mute on a compromised host is the safe direction.) -
An
appdecision is never changed or reset over MCP (decided_in_app). Onlyapp-channel decisions by the user themself teach a detector's prior. -
A review is valid only while
triage_ai_evidence_hash == triage_evidence_hash. The hash isbundle_hash(build_bundle(...)): normalised, secret-redacted, capped. Changing the bundle, the redaction or the cap changes every hash and expires every review: bumpREVIEW_PROMPT_VERSIONdeliberately, never by accident. -
A run never reviews over a valid
mcpreview, and re-reviews its own (builtin) only on a model or prompt-version change. Fix-item text (fix_lever,ai_quote) comes from builtin reviews only. -
Keep the legacy readers tolerant. Unknown or legacy values mean "no layer", never a decision.
triage_source = 'ai'is a builtin false-positive review; a missingtriage_verdict_channelmeansapp. The first publish after an upgrade adopts an unchanged review-v1 review throughbuild_bundle_legacy, and unmute applies the same cleanup to muted nodes. Readers that branch on this:score_model.finding_state,reportData.ts,projectRisk.ts,tooling/scripts/triage_eval.py. -
A new stored
triage_*property goes inTRIAGE_PROPS(triage_mixin.py), which feedstriage_graph_migrate.py, and inTRIAGE_PROPERTIES(webapp/src/lib/triage/properties.ts), which keeps it out of the Recon Delta. Agent-writable text also goes inTRIAGE_TEXT_PROPERTIES, sobuildNodeContextnever hands it to the in-app agent. Declare it ingraph_db/schema_sections.mdand re-seed the catalog.
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.
- 15d ago First seen · 131 lines · 146 tokens per session scan A 1fcf15126a74
priority-board-triage is a skill published in the GitHub repository samugit83/redamon (3,106 stars, last pushed today), licensed MIT. It adds 146 tokens to every session and 1,798 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
paperclip
Use for Paperclip-managed tasks and heartbeats: reading task context, delivering task documents or files, updating completion or blockers, coordinating or delegating work, and following company governance. Includes control plane API operations for assignments, comments, approvals, and routines.
summarize-status
Write a short, colloquial summary for a Paperclip summary slot: open with the 1–3 specific, concrete actions the reader needs to take right now to unblock the work, then a brief plain-language status, streaming progress as it works.
paperclip-task-bridge
Create, comment on, update, and list Paperclip tasks from Hermes using scoped Paperclip API credentials.
agent-swarm-issue
Agent skill for swarm-issue - invoke with $agent-swarm-issue.
agent-swarm
Agent skill for swarm - invoke with $agent-swarm.
issue-triage
Triage Paperclip inbox issues that are stale, blocked, in-review, or assigned-but-not-progressing, and decide a single next action per issue (resume, reassign, unblock, escalate, or close).