Install
$ agentstack add skill-himynameisdavidkim-prompt-triwizard-skill-prompt-triwizard ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Prompt Triwizard
Writes, refines, and evaluates LLM prompts (system prompts, user prompts, few-shot examples, and tool-call schemas) for agent pipeline nodes — producing high-quality, style-correct output every time.
Reuse Within a Session
Once this skill has been loaded, its guidance (structural hierarchy, principles, anti-patterns) stays in the conversation context. When the same prompt needs another modification within the same session (e.g. a re-fix request after testing), continue applying this guidance without re-invoking the skill.
Step 1 — Read the Context, Deliver in Kind (Common Step)
Prompts usually live as string literals inside code files (most often .py, but it varies — .ts, Jinja templates, etc.). Locate the prompt first; grep for the prompt text if you're unsure which file holds it.
Read only:
- The target prompt file
- Sibling files holding related prompts (other nodes of the same pipeline)
- Schemas, Pydantic models, or tool definitions the prompt feeds into
Don't read a file just because it shares the directory. Skip .md/.json/.yaml/config unless it's the schema or tool definition the prompt feeds.
Goal: understand the project's existing depth, tag conventions, and schema bindings — this shapes how specialized the new prompt should be.
Deliver in kind: match the file/format the original prompt lived in (most often .py, but it varies — .ts, Jinja templates, etc.); if there's no existing file to match (Mode 1), default to .py — use .ts or Jinja instead only if the project already shows that convention elsewhere. When the prompt takes variables, wrap it as a function call (Python/TS) or a render() call (Jinja) rather than a bare string. Name the system and user pieces — whether a constant or a function — so the literal tokens system_prompt and user_prompt appear in the name (e.g. SYSTEM_PROMPT, build_system_prompt, USER_PROMPT, build_user_prompt).
Step 2 — Receive the Style and Language
Style is the primary axis of this skill — it determines the structural format of the prompt you produce, and everything downstream (Step 3's use-case content, Mode 1/2/3's output) is written in the style chosen here. The output language determines what language the prompt is written in.
Style
Priority order:
- User explicitly names a style → use it
- Code read in Step 1 shows a model string (
claude-*,gemini-*,gpt-*) → offer it as a suggestion, then confirm - Ask: "Which format should I use? Anthropic / Google / OpenAI. I'll default to Anthropic if you skip."
- No response → use Anthropic as the default
If sibling prompts already exist in the project, ask: "Should I also convert the existing prompts to the chosen style?"
Language
Priority order:
- User explicitly names a language → use it
- No explicit language → detect the language the user is writing in, then ask: "Should I write this in [detected language] or English?"
- No response → use the detected language as the default
Step 3 — Identify the Use Case
Use case is a secondary axis, layered on top of the style chosen in Step 2: style controls how the prompt is formatted (tags, headers); use case controls what additional instructional content the prompt needs (persistence rules, null-case handling, grounding policy, etc.) beyond the style's own baseline. Determine the use case from what the node actually does:
| Use case | Signal | |----------|--------| | Conversational | Multi-turn dialogue, persona/tone, no fixed completion point | | Single-shot transform | Classification, extraction, summarization — one input, one output, done | | Agentic tool-use | Calls tools in a loop, reasons between calls, has a stop condition | | RAG grounding | Context/documents already injected; answers in one shot from what's provided | | Deep research | Calls search tools iteratively across multiple angles before answering |
Priority order:
- User explicitly names a use case → use it
- Code read in Step 1 shows the shape (multi-turn loop, single function call, tool-call loop, injected context, iterative search) → infer it, then confirm
- Ambiguous → ask before proceeding
A node can combine traits from more than one use case (e.g., a conversational agent that also calls tools). When it does, read every applicable usecases/ reference and merge their instructional content — don't force a single label where the task genuinely spans two.
Step 4 — Identify the Mode
| Mode | Triggered by | Output | |------|-------------|--------| | Mode 1 — Create | Request for a new prompt | Full system + user prompt from scratch | | Mode 2 — Refine | Request to improve, fix, or rewrite an existing prompt | Before/after diff with diagnosis | | Mode 3 — Eval | Request to test or measure a prompt | Eval report with scores and regression check |
Step 5 — Apply References
Read the references below in the order indicated. They are located in the references/ directory beside this file, split into common/ (shared quality backbone), styles/ (fixed set of 3 format styles — the primary axis, from Step 2), and usecases/ (what additional instructional content the prompt needs, by agent/task purpose — the secondary axis, from Step 3).
| Reference | Read when | |-----------|-----------| | common/core-principles.md | All modes, always — quality backbone | | common/anti-patterns.md | After drafting — self-check before delivery | | common/eval-rubric.md | Mode 2 (diagnosis) and Mode 3 (eval loop) | | styles/anthropic-claude.md | Style = Anthropic | | styles/google-gemini.md | Style = Google | | styles/openai-gpt.md | Style = OpenAI | | usecases/conversational.md | Use case = Conversational | | usecases/single-shot-transform.md | Use case = Single-shot transform | | usecases/agentic-tool-use.md | Use case = Agentic tool-use | | usecases/rag-grounding.md | Use case = RAG grounding | | usecases/deep-research.md | Use case = Deep research |
Each usecases/ file includes a per-item placement table showing which style container that content belongs in — read the style reference first, then cross-check the usecase file's placement table against it rather than treating the two as independent lookups.
Mode 1 — Create a New Prompt
- Clarify requirements: task, inputs, outputs, tool calls (if any), output schema
- Read
core-principles.md→ choose the right technique (zero-shot, few-shot, CoT, ReAct) - Read the chosen style reference (from Step 2) → this is the format the prompt will be written in
- Read the use-case reference(s) from Step 3 → determine what additional instructional content the prompt needs, and place each piece per its placement table for the chosen style
- Self-check with
anti-patterns.md - If the prompt feeds a Pydantic model or tool schema: verify field descriptions are in sync
Deliverable: Full system prompt + user prompt template, labeled clearly — delivered per the Step 1 rule.
Mode 2 — Refine an Existing Prompt
Refine covers two distinct jobs. They share the same diagnosis, then split:
- Path A — In-place — the prompt is already in the target style; improve its content without restyling.
- Path B — Re-style — the prompt is in a different style (or styleless), and you carry it into the target style.
A re-style is never a marker swap. Each style encodes a different philosophy — Anthropic's motivation-over-negation and positive framing, Google's RULE N routing with [REQ]/[OPT] severity, OpenAI's outcome-oriented output contracts. Carrying a prompt across styles means re-expressing its intent in the target philosophy, which changes wording and structure by design. And the original may be rough: when it is, improve the content while you restyle — the two jobs merge.
Common diagnosis (both paths)
- Read the existing prompt in full → detect its current style. Check exclusive, structural markers, not just "has XML tags" (multiple styles use backtick-wrapped XML tags):
**FOLLOW-UP RULES**/*RULE N: NAME*bold+italic pattern anywhere → Google- A single XML tag wraps the entire system prompt, closing right before the user turn (which is itself then wrapped in a task-specific tag) → Google
- Bare
#(H1) headers structure the top level, with no enclosing wrapper; any XML tags present are supplementary and plain, never backtick-wrapped → OpenAI - Many independently-named XML tags scattered as top-level siblings, with any Markdown headers nested inside a specific tag's content (never floating between tags) → Anthropic
- Read
eval-rubric.md→ score on 4 axes: Clarity / Specificity / Actionability / Scope - Read
core-principles.md→ identify which principles are violated - Read the chosen style reference (from Step 2) in full
- Read the use-case reference(s) from Step 3 → check whether required instructional content (persistence, null-case handling, grounding policy, etc.) is present and correctly placed for the chosen style
Choose the path
- Current style == target style → Path A
- Current style != target style (or styleless) → Path B
- If it's unclear whether the user wants a restyle or only a content fix in the existing style, ask before proceeding.
Path A — In-place refine
Present diagnosis and changes using the before/after format:
❌ Original:
[exact original text]
🤔 Diagnosis:
[which axis fails, and why]
✅ Improved:
[exact replacement text]
Rule: One change per block. Multiple changes in separate blocks.
Path B — Re-style refine
The prompt is rewritten whole, so block-level diffs don't apply. Instead:
- Re-express the prompt in the target style's philosophy, not just its markers (reasoning induction, priority markers, data placement, rule structure all convert).
- Preserve the original's core intent and hard constraints — verify nothing load-bearing was dropped in translation.
- If the original is underspecified or low-quality, improve the content as you convert (apply
core-principles.md). - If the original's intent is ambiguous, do not guess — confirm with the user first.
- Present as a single whole before/after, plus a short conversion note explaining which philosophy shifts you applied:
❌ Original ([source style]):
[full original prompt]
🤔 Diagnosis + conversion notes:
[axis scores, principles violated, and how the target philosophy was applied]
✅ Rewritten ([target style]):
[full rewritten prompt]
Self-check (both paths)
- Self-check with
anti-patterns.md
Mode 3 — Eval Loop
- Define the baseline:
- New prompt → baseline = no system prompt (raw model)
- Refined prompt → baseline = the version before the change
- Design the input set: minimum 3 scenarios — typical / edge / adversarial
- Score each scenario on the 4-axis rubric from
eval-rubric.md - Check for regressions: re-run all previously-passing scenarios
- Report: trigger-fit accuracy + output quality scores + regression status
Fresh session rule: always evaluate in a session that has not seen the prompt in conversation history.
Self-Check Before Delivery
After drafting, always run through anti-patterns.md. Key questions:
- Is every rule verifiable (binary or measurable)?
- Is any rule here to prevent a failure mode I've never observed?
- Are volatile values at the end of the system prompt or in the user turn?
- Do few-shot examples cover edge cases, not just the happy path?
- Am I using the correct structural markers for the chosen style — not just "has XML tags" (all three styles can contain XML tags; the real signals are a single system-prompt-wide wrapper + RULE N for Google, bare H1 headers with no wrapper and only supplementary plain XML for OpenAI, and many independent sibling tags with headers nested inside them for Anthropic)?
- Does the prompt contain the instructional content its use case requires (e.g. a stop condition for agentic/deep-research, a null-case rule for single-shot transform, an insufficient-context rule for RAG grounding), each placed in the container its style's placement table specifies?
- Are tool/schema descriptions synchronized with the prompt?
- If writing to a file, does the format match the project's existing convention — wrapped as a function/render call when parameterized?
- Do the system and user constants/functions literally contain
system_prompt/user_prompt?
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: HiMyNameIsDavidKim
- Source: HiMyNameIsDavidKim/prompt-triwizard-skill
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.