← All skills
senior-prompt-engineer
Use when optimizing a prompt, building an eval set, measuring RAG retrieval quality, designing few-shot examples, or reviewing an agent config for tool-use risk.
About this skill
Use when optimizing a prompt, building an eval set, measuring RAG retrieval quality, designing few-shot examples, or reviewing an agent config for tool-use risk.
SKILL.md
senior-prompt-engineer.SKILL.mdPlace it in your Syntic skills folder. For Syntic Code, install in your local skills directory, review the contents and run it in a controlled environment first.
---
name: senior-prompt-engineer
description: Use when optimizing a prompt, building an eval set, measuring RAG retrieval quality, designing few-shot examples, or reviewing an agent config for tool-use risk.
category: Engineering
version: 1.0.0
tools: []
---
# Senior Prompt Engineer
Eval-driven prompt engineering, RAG quality measurement, and agent workflow validation — model-agnostic: techniques are framed by what they do, not which model generation they were observed on. Always ask the user for their provider's current per-token pricing before quoting dollar figures; never trust a remembered price table.
## Operating rules
1. **Never change a prompt without a baseline.** Capture clarity/structure metrics first, then compare every iteration against that baseline.
2. **Build the eval set before optimizing.** 10–20 representative cases with expected outputs, minimum. If none exists, build one with the user before touching the prompt — optimizing against vibes is the number-one failure mode.
3. **Prefer platform features over prompt hacks.** If the provider offers native structured outputs / JSON schema enforcement, tool-use APIs, or prompt caching, use those instead of "respond ONLY with JSON" instructions — prompt-level format enforcement is the fallback, not the default.
4. **Current-generation models need less scaffolding.** Don't add chain-of-thought boilerplate, role framing, or few-shot examples reflexively — frontier models often do worse with redundant scaffolding. Add each element only when the eval set shows it helps.
5. **Cost numbers are always user-supplied**, looked up fresh, never assumed.
## Prompt optimization (eval-gated)
1. Establish a baseline: token estimate, a clarity/structure score, and flag ambiguity or redundancy in the current prompt.
2. Diagnose from the baseline: ambiguous verbs ("analyze," "handle"), redundant blocks, a missing output contract, or token waste.
3. Apply one change at a time, in order of leverage:
- Malformed/unparseable output → native structured outputs / JSON schema if the API supports it, explicit schema-in-prompt otherwise.
- Inconsistent answers across runs → tighten instructions and add 2–3 contrastive examples, including one near-miss showing what NOT to do.
- Misses edge cases → enumerate them explicitly, add a "when uncertain, do X" rule.
- Token bloat on repeated calls → move the stable prefix (system rules, examples) first so prompt caching applies; trim redundancy.
- Wrong reasoning on hard cases → ask for stepwise reasoning in a scratch field the consumer ignores, or use the provider's extended-thinking mode.
4. Re-analyze the revision and compare it against the baseline.
5. **Eval gate before shipping**: run the revision over the full eval set; it must not regress clarity score below baseline, must not grow token count more than 10% over baseline, and must not lose any previously-passing eval case.
## Few-shot example design
Define the task contract first (input shape, output shape, edge-case policy). Start with zero examples and measure — current models often need none. Add examples only for the failure clusters the eval reveals; when adding, use 3–5 max, ordered simple → edge → negative (what NOT to extract), formatted identically to the real output contract. If a case only passes because it resembles an example, add a held-out variant to the eval set to catch that.
## Structured output design
Write the JSON Schema first (types, enums, required fields, max lengths). Prefer API-native enforcement (structured outputs / response schema / tool-call parameters) — it guarantees shape in a way prompt text cannot. Fall back to rendering the schema as field-by-field rules plus one valid example, with an explicit "output only the JSON object" instruction, only when the API lacks schema support. Gate: 10 eval outputs must all parse against the schema; anything less sends you back to the design step.
## RAG tuning loop
Build a question set (id, question, reference answer) and capture current retrievals for it, then measure context relevance, precision@k, coverage, answer faithfulness, and groundedness. Treat relevance below 0.80 as a retrieval problem — fix chunking, embeddings, or metadata filters — not a prompt problem; don't rewrite the generation prompt until retrieval is fixed. Fix the lowest metric first: low faithfulness → tighten grounding instructions ("answer only from context," require citations); low coverage → increase retrieval k or add query expansion. Gate every change against the prior baseline — every metric must be at or above baseline, any regression blocks the change.
## Agent config review
Validate tool wiring, missing required config, loop risk, and token estimates. Check context discipline: each tool description should be 1–2 sentences max, tool count minimal for the job, the stable system prompt placed first (cache-friendly), and an iteration cap with an early-exit condition present. Budget the cost per run against the user's current prices; if it exceeds budget, cut tools or trim context before downgrading the model.
Install
Syntic App
- 1Create a dedicated folder for this skill in your local skills library.
- 2Place SKILL.md into that folder.
- 3Restart Syntic and invoke this skill on matching tasks.
Syntic Code (CLI)
- 1Save SKILL.md in your local Syntic Code skills directory.
- 2Keep related files in the same skill folder.
- 3Run in a safe environment and validate outputs.