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
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 samugit83/redamon --skill recon-ai-enrichmentgit clone --depth 1 https://github.com/samugit83/redamonWrote 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/recon-ai-enrichment)<a href="https://agentmods.dev/skills/samugit83/redamon/recon-ai-enrichment"><img src="https://agentmods.dev/badge/skills/samugit83/redamon/recon-ai-enrichment/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/recon-ai-enrichment"><img src="https://agentmods.dev/badge/skills/samugit83/redamon/recon-ai-enrichment.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
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.00188 | $0.02457 |
| Opus 5.5 | $0.00075 | $0.00983 |
| Sonnet 5.5 | $0.00038 | $0.00491 |
| Haiku 4.5 | $0.00019 | $0.00246 |
Grade A, and why
recon-ai-enrichment 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 24d 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 — 148 lines — stays where its author put it; the contents beside it link to each section on GitHub.
When to Use
- Adding AI decision-making to an existing recon tool (tag selection, extension guessing, WAF classification, etc.).
For adding a whole new recon tool, use recon-tool-integration. For the setting
that toggles it, use project-settings-cascade.
Critical Rules
- NEVER let the AI helper raise. Every failure path returns the user's
current value. Recon stdout tails into the webapp's SSE recon drawer, so an
exception both breaks the scan and blanks the stream. Pattern:
recon/helpers/ai_planner/nuclei_tags.py:94
("Never raises -- returns
current_tagson any failure"). - NEVER fall back to an empty list/string. For tools where empty means "skip
the work" (nuclei tags, ffuf extensions) that silently turns detection off.
Fall back to the user's current value, not
[]/"". - NEVER call the LLM with no signal. Empty fingerprint -> return the current value; do not send an empty prompt.
- ALWAYS take the
agent_llmbreaker AFTER the cache check, and honour it by returning the existing fallback. The agent's/llm/*endpoints share one breaker:gate = agent_llm_gate()(from recon/helpers/ai_planner/init.py); whennot gate.allowed, print "... Agent LLM paused (breaker open) - using the fallback." and return the user's current value WITHOUT a POST. After the POST callgate.record(resp=resp); in the except branch callgate.record(exc=e). The cache is checked first so a cached answer is still served while the breaker is open. This is the same never-raise/never-empty fallback as above — the breaker just skips the call that would fail anyway when the agent is down. - A hook with an LLM | Jev engine switch takes
engine: str = "llm"and uses its OWN breaker.engine == "jev"posts to/jev/<hook>(same request body, same response shape as/llm/<hook>, so the existing validator is reused), takesagent_jev_gate()and logs[*][<Tool>-Jev]. Never record a Jev outcome onagent_llm: that breaker marks 401/402/403 FATAL for the whole run, so a Jev auth or credit failure would silence every LLM hook. The Jev gate reads the agent's 503error_type(no token, auth, no credit, forbidden are FATAL; rate limited carriesretry_after; the rest are transient). A Jev failure uses the hook's static fallback: never re-route to the LLM, never return empty. - The engine field is the THIRD level, and the master switch must not touch
it.
aiInPipelineforces each per-hook AI flag; the{tool}AiUseJevengine fields stay OUT ofapply_ai_pipeline_overrides, are inKEPT_WHEN_ABSENT(webapp/src/lib/project-preset-utils.ts) so a preset apply does not reset them, and a switch-ON is refused server-side unless the project OWNER has a Jev token (validateJevEngineChange, every write path, fail closed). Give a hook a Jev engine only when a wrong answer cannot drop a finding: the Nuclei false-positive filter deletes findings from target-controlled bytes and has no Jev engine. - A Jev-only hook (
{tool}Jev{Feature}, no LLM twin) has TWO levels and starts in shadow. Nothing upstream folds its flag intoaiInPipeline, so EVERY call site, full and partial, testsAI_IN_PIPELINE and <FLAG>itself; never add it to the master fan-out inTargetSection.tsx. Build it onrecon/helpers/ai_planner/jev_shadow.py(jev_posttakes theagent_jevbreaker;ShadowRecordercaps the per-decision lines at 50, prints one summary, and keeps the records in the recon JSON underjev_shadow.<hook>).ROLLOUT = SHADOWacts on the deterministic path;ROLLOUT = ACTacts on Jev's answer with the deterministic result as the fallback, and flipping a hook is a separate change. InAI_HOOKSit iskind: 'enable', so a false flag reportsoff, notllm. - A per-item hook puts its items in the state and names them by index.
A hostname, URL, path, title or stderr line is target data even when recon
extracted it: never quote it in a question, never print it in a log line (a
hostname with "port...scan" in it moves the recon drawer's phase). Agent side,
use
_ask_items, which sends each request only its own items;_askre-sends one state per chunk and a scan's items would exceed the request limit. - NEVER hook the AI separately in partial recon. Most tools share one entry
function (e.g.
run_vuln_scanis called by bothmain_recon_modules/andpartial_recon_modules/); hook it once and both paths inherit.grepthe function name to confirm before you edit. The feature must work in the full pipeline AND partial recon. - NEVER touch webapp/src/lib/recon-presets/presets/:
the
aiInPipelinecascade (apply_ai_pipeline_overrides, recon/project_settings.py:1968) is the single source of truth for per-tool AI flags. Presets must not hard-code them; update the Zod schema instead. - ALWAYS add a registry entry for the new
Projectcolumn{tool}Ai{Feature}in recon_settings/registry.yaml, besideffufAiExtensions,nucleiAiTags,nucleiAiResponseFilterandwafAiClassifier. A test walkingPrisma.ProjectScalarFieldEnumfails until every column has one. An AI hook is an ordinary boolean toggle:mcp: settable,traffic: none(the hook itself sends no traffic; the tool it advises does), and ameaningthat says which decision it moves from the operator to the model. - ALWAYS cache a per-target hook keyed by tech fingerprint (Server, X-Powered-By, ...) so N targets behind one stack collapse to one LLM call (ffuf_extensions.py). A per-scan hook (nuclei_tags.py) runs once and needs no cache.
- ALWAYS put the toggle in two places bound to the same field
data.{tool}Ai{Feature}: the master AI-in-Pipeline panel (TargetSection.tsx:695) and the tool's own section (e.g. NucleiSection.tsx). Read AND write the same field; no copy-on-flip (they stay in sync because they share the field).
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.
- 24d ago Changed · +38 lines · +51 tokens per session 99732bdb4bea
- 27d ago Changed · +10 lines ce5bb91df72f
- 1mo ago Changed 90297b1f9f9e
- 1mo ago Changed · -2 lines 8c05372185f1
- 1mo ago Changed · +10 lines 15b72ade3908
- 1mo ago First seen · 92 lines · 137 tokens per session scan A 82707a092884
recon-ai-enrichment is a skill published in the GitHub repository samugit83/redamon (3,221 stars, last pushed 4d ago), licensed MIT. It adds 188 tokens to every session and 2,457 once invoked, about $0.0008 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-08-30.
Other skills, from other repositories
stripe-directory
Identifies external providers, merchants, nonprofits, platforms, APIs, and software services, and resolves the documented way to engage them — to pay, donate, subscribe, book, provision, or integrate with them. MUST be used BEFORE web search, model memory, or any other directory/vendor-lookup skill for ANY request…
detecting-shadow-api-endpoints
Discover and inventory shadow API endpoints that operate outside documented specifications using traffic analysis, code scanning, and API discovery platforms.
implementing-llm-guardrails-for-security
Implements input and output validation guardrails for LLM-powered applications to prevent prompt injection, data leakage, toxic content generation, and hallucinated outputs. Builds a security validation pipeline using NVIDIA NeMo Guardrails Colang definitions, custom Python validators for PII detection and content…
finetuning
This skill should be used when picking or diagnosing a training move (SFT, LoRA, DPO/KTO/ORPO, RFT, GRPO/PPO/RLOO, RLHF), or when the user mentions fine-tuning, post-training, training recipe, reward design, or weight updates. Decision tree by reward shape, smoke-run gate, three failure diagnostics, five…
codex-autoresearch
Triage improvement work and run or resume accepted measured loops in a local project. Architecture, documentation, UX, product study, open research, taste, and one-shot fixes stay direct unless the user explicitly requests repeated measurement with a complete experiment contract.
pytorch-training
Best practices for building robust PyTorch training loops. Use when generating or reviewing ML training code.