llm-app-security — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited llm-app-security (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The prompt and the tools are one layer of the story. This skill covers the other layer: the operational side of running an LLM-powered feature in production. The threats are mostly mundane (abuse, cost, leak, compliance), the controls mostly familiar from API security, applied to a substrate that has new failure modes.
Companion to prompt-injection-defense (prompt layer) and ai-agent-guardrails (tool layer).
Walk these against your app. Most issues fall under one of these.
| ID | Issue | Practical control |
|---|---|---|
| LLM01 | Prompt injection | See prompt-injection-defense |
| LLM02 | Insecure output handling | Treat model output as untrusted: escape, sanitize, validate before acting |
| LLM03 | Training-data poisoning | Mostly upstream; pick reputable providers, version-pin |
| LLM04 | Model DoS | Per-user/IP rate limit; cost cap; max-tokens cap; timeout |
| LLM05 | Supply chain | Pin SDK versions, audit MCP/plugin packages, scan deps |
| LLM06 | Sensitive information disclosure | PII scrubbing pre-context; output review; allowlist what the model can fetch |
| LLM07 | Insecure plugin / tool design | See ai-agent-guardrails |
| LLM08 | Excessive agency | Narrow tool scope; human-in-loop for high-tier actions |
| LLM09 | Overreliance | UI disclosures; show provenance for facts; gate medical/legal/financial advice |
| LLM10 | Model theft / prompt theft | Treat the system prompt as a secret (not strong, but reduces casual leakage) |
LLM calls are uniquely expensive — a single user can burn 1000× a regular API user's spend before a normal rate-limiter fires.
Layer your limits:
// Pseudocode — apply all three, not just one
async function callLLM(userId: string, request: Request) {
await assertWithinRpmLimit(userId); // requests/minute per user
await assertWithinDailyTokenBudget(userId); // tokens/day per user
await assertWithinGlobalCostBudget(); // $/day across all users — hard kill switch
const response = await anthropic.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 4096, // hard cap on output
...request,
});
await recordTokenSpend(userId, response.usage);
return response;
}Specific recommendations:
Cost-monitoring is detection-in-disguise:
Hook these into your existing on-call.
Pre-context: redact before the model sees it. The model cannot leak what it never had.
Post-output: scan model output for accidentally-emitted PII before persisting or rendering. Models occasionally regurgitate memorized strings under odd prompts.
Log enough to investigate an abuse complaint six months later. Avoid logging anything that turns the log into a new compliance liability.
| Keep | Maybe | Don't |
|---|---|---|
| Request ID, user ID, timestamp | Model name + version | Full unhashed prompts that may contain user PII |
| Token counts (input/output) | Tool calls + arguments (with secrets redacted) | API keys, auth tokens, cookies in any form |
| Latency, status, cost | High-level prompt category | Full responses that may contain regurgitated training data — unless legally required |
| Safety/moderation decisions | Hash of the prompt (for dedup) |
Retention: align with your privacy policy. Hot tier 30 days, archive 12 months is a common compromise; defer to your DPO for jurisdictions with stricter rules.
For user-facing LLM outputs, run output through a moderation step before showing it. Options:
Show users what was filtered when it makes sense; do not just silently swallow content.
LLM features get used as authoritative sources by users who shouldn't trust them that way. Defensive UI is part of security in 2026:
This is partly UX, partly legal — but it is also security in the sense that overreliance creates incidents.
When an AI feature does something it shouldn't, the playbook is similar to incident-response but with specifics:
Before an LLM feature ships:
max_tokens is set on every call~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.