prompt-engineering — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited prompt-engineering (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.
Treat prompts as code: explicit, structured, versioned, and tested.
| Section | Purpose | Goes in |
|---|---|---|
| Role / persona | Set domain + tone | System |
| Task instruction | What to do, imperatively | System |
| Rules / constraints | Hard limits, do/don't | System |
| Output schema | Exact format to return | System |
| Few-shot examples | Demonstrate edge cases | System |
| Input data | The thing to process | User |
{"error": "insufficient_context"}).Set durable behavior once, not per request.
You are a support-ticket triage engine for a B2B SaaS product.
You classify tickets and never address the customer directly.
You only ever return JSON matching the schema. No prose, no apologies.Keep the role functional ("triage engine") over theatrical ("world-class expert"). Function drives behavior; flattery does not.
Wrap distinct parts in named tags so the model never confuses instructions with data. This also blunts prompt injection from user content.
<instructions>
Summarize the review in one sentence. Output only the sentence.
</instructions>
<review>
{{user_review}}
</review>Use tags (<document>, <example>, <context>) or fenced blocks. Pick one convention and keep it consistent across your templates.
<example>
input: "App crashes every time I export a PDF"
output: {"category": "bug", "severity": "high"}
</example>
<example>
input: "How do I change my billing email?"
output: {"category": "how_to", "severity": "low"}
</example>Prefer schema-enforced output (JSON mode / function-calling / constrained decoding) over "please return JSON". When you must rely on the prompt:
"severity": one of ["low","medium","high"].| Use direct (no CoT) | Use step-by-step reasoning |
|---|---|
| Classification, extraction, lookup | Multi-step math, logic, planning |
| Latency/cost sensitive | Accuracy matters more than speed |
| Output is a fixed schema | Decision needs justification |
When you need reasoning but a clean output, keep the thinking out of the parsed payload — e.g. put it in a reasoning field you ignore, or a separate <scratchpad> you strip. Do not let free-form reasoning leak into the field you parse.
When a single prompt is unreliable, break the task into a chain where each step has one job and a checkable output:
1. extract → pull raw fields from the document → JSON
2. validate → check fields against business rules → JSON + errors[]
3. format → render the final user-facing message → textEach stage is independently testable and swappable. Prefer this over one mega-prompt that tries to do everything.
{{ticket_body}}), not positional %s.triage.v3) and log which version produced each output.llm-evaluation skill) before shipping.| Symptom | Likely cause | Fix |
|---|---|---|
| Output drifts in/out of JSON | Format not enforced | Use schema/JSON mode; add output example |
| Model invents fields/values | No closed vocabulary | List allowed enums; forbid extra keys |
| Ignores a rule | Buried mid-prompt | Move rule to start AND end; make it its own line |
| Hallucinates when unsure | No escape hatch | Add explicit "if unknown, return X" |
| Verbose preamble ("Sure! Here…") | No output constraint | "Output only the JSON. No other text." |
| User text overrides instructions | Injection | Wrap user data in delimiters; restate the rule after it |
| Inconsistent across runs | Ambiguous task / high temperature | Tighten wording; lower temperature; add few-shot |
Before (vague, unparseable, no guardrails):
Tell me what this customer email is about and how urgent it is.
{{email}}After (scoped role, delimited input, closed schema, escape hatch):
You are a triage engine. Classify the email below.
Return ONLY JSON: {"category": <one of ["bug","billing","how_to","other"]>,
"urgency": <one of ["low","medium","high"]>}.
If the email is empty or unintelligible, return {"category":"other","urgency":"low"}.
<email>
{{email}}
</email>The "after" version is deterministic to parse, resists injection, handles the empty case, and can be regression-tested.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.