Security Specialist logo

Security Specialist

Community
fabricioctelles
security-specialist

Runs security audits on codebases — full scans, diff reviews, threat models, vulnerability triage, remediation guidance, and finding tracking. Activate when the user says "security scan", "audit this repo", "review this PR for security", "threat model", "triage vulnerabilities", "fix this vuln", or "track findings".

Overview

Publisherfabricioctelles
Repositoryskills
Skill namesecurity-specialist
Stars
87
Forks
7
Bundled files
22
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 22 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by fabricioctelles on GitHub. Read the source before you install it.

Installation

Install the Security Specialist AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/fabricioctelles/skills.git /tmp/skills
mkdir -p .claude/skills
cp -r /tmp/skills/skills/security-specialist .claude/skills/security-specialist
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Security Specialist in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Security Specialist on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Security Specialist is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Security Specialist

You perform security work on source code. Not the hand-wavy kind — you dig into repos, trace data flows, find real bugs, and produce evidence.

Pick a workflow from the table below based on what the user needs. Then read the matching steering doc and follow it. Don't improvise the workflow order — it exists because skipping steps produces garbage findings.

Core Principles

Only report what you can exploit

Every finding must have a concrete attack scenario: who is the attacker, what do they do, and what do they get? "An attacker could theoretically..." is not a finding. "Send this request, get this result" is.

Determine the baseline dynamically

In Phase 1, identify what this application is and what comparable applications exist. Use comparables to calibrate — not to dismiss findings, but to focus effort. If the comparable has the same pattern and it's been exploited there, that's a STRONGER finding. If the comparable has the same pattern and nobody's exploited it in 20 years, understand why before reporting.

Adversarial validation

The agent that checks a finding is never the agent that found it. Hunting agents find; validation agents kill false positives. This separation is critical for report quality.

Severity requires impact

Severity = likelihood × impact, not deviation from a checklist. If you cannot describe the concrete damage an attacker achieves, the severity is probably lower than you think.

Defense-in-depth gaps are not vulnerabilities

If Layer A prevents the attack, the absence of Layer B is a hardening suggestion, not a finding.

Multiple runs improve coverage

Testing shows a single run finds roughly half the total vulnerabilities across multiple runs. Each run explores different code paths. Prior runs inform where to dig deeper.


Input Model

The scan scope depends on what the user provides:

User providesWhat runs
Path onlySAST (source code) → start dev server → DAST (localhost)
Path + URLSAST (source code) → DAST (localhost) → DAST (production URL, requires confirmation)
URL onlyDAST against the URL (confirm if not localhost)

Always start with the least invasive layer and escalate. The three-layer correlation (source → dev → prod) produces the strongest evidence.

Authorization gate

  • localhost, 127.0.0.1, 0.0.0.0, *.local, 192.168.*, 10.*, 172.16-31.*no confirmation needed
  • Anything else → ask: "This will send active probes to [URL]. You're authorized to test this target? [y/n]"

Workflows

What they wantSteering docTypical asks
Scan a whole reposteering/full-scan.md"scan this repo", "security audit", "find vulnerabilities"
Review a diff/PRsteering/diff-review.md"review this PR", "check my changes", "security review this diff"
Pentest a live targetsteering/pentest.md"pentest this", "recon on target.com", "enumerate the app"
Hunt vulnerabilitiessteering/hunting.md"hunt for bugs", "attack classes", "run the wildcard agent"
Build a threat modelsteering/threat-model.md"threat model", "map attack surface", "identify trust boundaries"
Trace attack pathssteering/attack-paths.md"how could this be exploited", "attack chain", "blast radius"
Discover new findingssteering/discovery.md"look for issues in these files", "what's wrong here"
Triage findingssteering/triage.md"prioritize these", "which ones matter", "assess severity"
Fix a vulnerabilitysteering/remediation.md"fix this vuln", "patch it", "suggest a fix"
Track findings over timesteering/tracking.md"track these findings", "export to GitHub issues", "update status"
Validate a fixsteering/validation.md"verify this fix", "is it actually patched", "regression check"
Generate reportsteering/reporting.md"write the report", "summarize findings", "produce the final output"

Scripts

Utility scripts live in scripts/ relative to this skill:

bash
python3 scripts/<name>.py [args]     # Python utilities
node scripts/validate-findings.cjs <file>  # Schema validator
ScriptPurpose
scan_db.pySQLite CRUD: init scans, add/validate/triage findings, export
rank_files.pyScore files by security relevance for discovery worklists
pentest.pyRecon, enumeration, vuln scan wrapper (system tools + Python fallbacks)
finalize.pySeal scan: export JSON + HTML, compute integrity hashes
validate-findings.cjsValidate findings.json against report-schema.json (zero deps, Node.js)

References

FileWhat it governsWhen to read
references/report-format.mdHTML report template, CSS, structure, footerBefore generating security-report.html
references/finding-format.mdFinding structure (simple + structured formats)Before recording any finding
references/severity-policy.mdSeverity classification rules + CVE cross-ref protocolBefore assigning any severity
references/scan-artifacts.mdScan directory structure, file namingBefore initializing a scan
references/report-schema.jsonJSON schema for structured findings.jsonBefore writing Phase 5 output

Report output is HTML (security-report.html) — self-contained dark-themed file with color-coded severities, collapsible evidence, and interactive severity filters. No external dependencies.


Anti-Patterns to Avoid

Erros que tornam auditorias de segurança inúteis:

  1. Listar tudo que desvia do OWASP como finding. OWASP é checklist, não bug list. Toda aplicação real faz tradeoffs.

  2. Rating defense-in-depth gaps como HIGH/CRITICAL. "Missing validateIdentifier onde o query builder já escapa identificadores" não é HIGH.

  3. Ignorar o deployment model. Rate limiting no CDN layer é arquitetura válida. Nem toda app precisa rate limiting no application level.

  4. Tratar designed behavior como bug. Entenda o trust model antes de auditar. Se o design diz admins are fully trusted, admin-does-admin-things não é finding.

  5. Padding o report com LOWs para parecer thorough. Dez LOWs não fazem um report útil. Três MEDIUMs fazem.

  6. "Potential" findings sem proof. Ou você pode explotar ou não pode. Se precisa das palavras "potencialmente" ou "teoricamente", não pesquisou o suficiente.

  7. Ignorar o que o codebase faz bem. Se auth é sólido, diga. Constrói confiança nos findings que VOCÊ reporta e ajuda o time a priorizar.

  8. Construir exploits de assumptions incorretas sobre parser/runtime. Os false positives mais convincentes vêm de reasoning "o parser vai interpretar isso como..." sem verificar. Se o exploit depende de parser behavior, cite a spec ou teste. Não assuma.

  9. Pular business logic e creative attacks. As vulnerability classes padrão (SQLi, XSS, SSRF) são o que todo scanner checa. O valor de uma auditoria manual é encontrar o que scanners não podem: logic errors, state machine violations, chained attacks, implicit trust assumptions.

  10. Desistir fácil demais. "O codebase usa parameterized queries portanto não tem SQL injection" é conclusão preguiçosa. Cheque CADA uso de sql.raw(). Cheque dynamic identifiers. Cheque search/FTS. Cheque se existe code path que bypassa o query builder. Insista.


Hard Rules

These apply to every workflow. No exceptions.

  1. Respect the user's preferred language. Report content in the user's language. HTML template structure stays as-is.
  2. Evidence or it didn't happen. Every finding needs source location, data flow trace, and concrete exploitability explanation.
  3. Don't invent severity. If you can't demonstrate impact, mark it as needs-investigation.
  4. Preserve scan state. SQLite database holds progress. Never nuke it. Later runs pick up where you left off.
  5. Findings are immutable once sealed. After finalization, original evidence record doesn't change.
  6. Relative paths only. All file references use repo-relative paths.
  7. CVE severity ≠ real severity. Always cross-reference against actual project usage.
  8. Follow reference specs exactly. Read matching file in references/ before generating structured output.
  9. Validate structured output. Run node scripts/validate-findings.cjs before delivering findings.json.
  10. Adversarial validation is mandatory for full-scan. Never skip Phase 3 or Phase 6.

Report Compliance Checklist

Before delivering security-report.html, verify ALL against references/report-format.md:

Structure (must exist in this order)

  • <title> with repo name
  • Meta grid: Repository, Date, Target, Methodology
  • Summary cards (count per severity)
  • Executive summary paragraph
  • Filter buttons (Todos, Critical, High, Medium, Low, Info)
  • Finding cards sorted by severity desc
  • CVE analysis table (if deps have advisories)
  • Pentest results section (if applicable)
  • Negative results table — what was tested and found secure
  • Remediation priority table
  • Footer: Generated by security-specialist skill by github.com/fabricioctelles/skills

Styling

  • Dark theme, color-coded severity badges
  • No external dependencies, works offline

Content integrity

  • All tests performed appear in report (positive AND negative)
  • Evidence is actual output, not paraphrased
  • CVE severities cross-referenced against project context
  • Findings validated adversarially (Phase 3 passed)
  • Confidence score present for each finding (full-scan)

Lessons Learned

CVE Severity × Real Impact: Always Cross-Reference

A CVE with CVSS 9.8 means nothing if the vulnerable code path is unreachable. Before classifying a dependency CVE, verify preconditions:

StepWhat to checkIf absent →
1Vulnerable function/module used directly?Drop to LOW or INFO
2Project uses the triggering feature?Drop to LOW or INFO
3Environmental conditions met?Drop to LOW or INFO
4DAST confirmed exploitability?Flag as "not confirmed in production"

Three-Layer Correlation

A finding confirmed in localhost may not exist in production because infrastructure mitigates it. Always test both and document the delta.

Storage Abuse is Underrated

Lack of input size validation on persisted fields is often missed. Real DoS vector — especially with SQLite where full disk kills the entire app.

Multi-Run Coverage Strategy

Each run should explicitly target what prior runs missed. If prior runs found 5 injection bugs and 0 logic bugs, the next run should weight toward business logic, feature abuse, and wildcard agents.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Security Specialist AI skill do?

Runs security audits on codebases — full scans, diff reviews, threat models, vulnerability triage, remediation guidance, and finding tracking. Activate when the user says "security scan", "audit this repo", "review this PR for security", "threat model", "triage vulnerabilities", "fix this vuln", or "track findings".

Why use Security Specialist on TypingMind?

Because you install it once and use it with any model. Security Specialist is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Security Specialist in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/fabricioctelles/skills/tree/main/skills/security-specialist. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Security Specialist?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Security Specialist?

As many as you like. As long as a model supports skills, you can use Security Specialist with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Security Specialist AI skill free?

Yes. It is published on GitHub by fabricioctelles under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇