optimize-prompt
Iteratively optimize an AI agent's system prompt using a keep/revert autoresearch loop. Use when asked to optimize, improve, or tune a system prompt, run prompt optimization, or do a Karpathy-style autoresearch loop on an agent prompt. Also use when asked to run evals and improve the prompt based on results.
Best use case
optimize-prompt is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Iteratively optimize an AI agent's system prompt using a keep/revert autoresearch loop. Use when asked to optimize, improve, or tune a system prompt, run prompt optimization, or do a Karpathy-style autoresearch loop on an agent prompt. Also use when asked to run evals and improve the prompt based on results.
Teams using optimize-prompt should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/optimize-prompt/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How optimize-prompt Compares
| Feature / Agent | optimize-prompt | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Iteratively optimize an AI agent's system prompt using a keep/revert autoresearch loop. Use when asked to optimize, improve, or tune a system prompt, run prompt optimization, or do a Karpathy-style autoresearch loop on an agent prompt. Also use when asked to run evals and improve the prompt based on results.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# optimize-prompt
Optimize an AI agent's system prompt through iterative single-change experiments. Inspired by Karpathy's autoresearch pattern: one artifact (system prompt), one metric (eval score), keep what improves it, revert what doesn't.
## The Loop
```
1. Read current prompt
2. Run eval suite → read results → score each response
3. Identify weaknesses
4. Propose ONE surgical prompt change
5. Apply change → re-run evals → re-score
6. Score improved? → Keep. Same score but shorter prompt? → Keep. Otherwise → Revert.
7. Goto 4. Repeat until max iterations or stopped.
```
You are the judge. Read each eval response yourself and score it against the pass_criteria. No separate scoring script needed.
## Setup
Before starting, back up the current prompt file:
```bash
cp <prompt_file> <backup_dir>/prompt_backup_$(date +%Y%m%d_%H%M%S).py
```
## Step 1: Read the Current Prompt
Read the prompt file and find the system prompt variable. Note any template placeholders (e.g., `{TODAY_DATE}`, `{CONTEXT}`) that must be preserved in all edits. Note its length.
## Step 2: Run Baseline Eval Suite
```bash
# Run your eval suite — adapt the command to your project
python eval_runner.py --output /tmp/eval_baseline.json
```
This should run all scenarios concurrently. Categories might include: Task Completion, Hallucination, Edge Cases, Off-Topic handling, etc.
## Step 3: Score the Results
Read the results file. For each scenario result, evaluate the response against its `pass_criteria`:
- **Score 0.0-1.0** per scenario
- **Pass/fail** verdict
- Note specific weaknesses and failure modes
- **Check response length**: simple queries should be concise, complex queries can be longer
Compute the average score across all scenarios. This is your baseline.
## Step 4: Propose ONE Change
Based on the failures, propose exactly ONE surgical edit to the prompt. Rules:
- Do NOT rewrite the entire prompt. Make a targeted edit.
- If a previous change was reverted, do NOT try the same thing again.
- Simpler is better: removing text that doesn't help is a great experiment.
- Preserve all template placeholders.
- Think like a researcher: form a hypothesis, test it, learn from the result.
## Step 5: Apply the Change
Edit the system prompt directly. The eval runner should start a fresh process each time so it picks up the change automatically:
```bash
python eval_runner.py --output /tmp/eval_experiment_N.json
```
## Step 6: Keep or Revert
Read the new results, score them. Compare to the best score so far:
| Condition | Action |
|-----------|--------|
| Score improved by >0.02 | **Keep** |
| Score unchanged but prompt is 20+ chars shorter | **Keep** (simpler is better) |
| Score decreased or unchanged | **Revert** to previous best prompt |
## Step 7: Record and Repeat
After each experiment, log:
```json
{
"experiment": 1,
"description": "Added explicit instruction to keep simple queries under 50 words",
"change_type": "add",
"score": 0.82,
"delta": 0.04,
"status": "keep",
"prompt_len": 2340,
"failures": ["scenario-1: still too verbose for simple query"]
}
```
Repeat from Step 4 until:
- Max iterations reached (default: 10)
- No improvement for 3 consecutive experiments
- Score is above target (e.g., 0.95)
## Step 8: Cleanup
When done:
1. Save the best prompt to a separate file for review
2. **Restore the original prompt** (don't leave experiments in the codebase)
3. Report results: baseline score, best score, kept/reverted counts, prompt length change
The best prompt can then be reviewed and applied manually via PR.
## Key Principles
- **One change at a time.** Multiple changes make it impossible to attribute improvement.
- **The agent is the judge.** Read the responses yourself and score against criteria. No separate judge script.
- **Always restore.** Never leave a modified prompt in the repo after the loop ends.
- **Track everything.** Log each experiment with score, delta, description.
- **Shorter is better.** At equal quality, prefer the shorter prompt. Every token costs money at inference time.
- **Response length matters.** A perfect answer that's 5x too long is not perfect. Users read on phones.
## References
| File | Purpose |
|------|---------|
| `references/adversarial-scenarios.md` | Example adversarial scenarios and response length expectations |
| `references/autoresearch-pattern.md` | How the keep/revert optimization pattern works |Related Skills
optimize
Diagnoses and fixes UI performance across loading speed, rendering, animations, images, and bundle size. Use when the user mentions slow, laggy, janky, performance, bundle size, load time, or wants a faster, smoother experience.
writer
Write content in Eric's voice — articles, blog posts, tweets, social media posts, marketing copy, newsletter drafts. Loads WRITING-STYLE.md and enforces kill phrases.
positioning-angles
Use when defining product positioning, choosing strategic angles, crafting value propositions, competitive positioning, product messaging, differentiation strategy, or go-to-market angles. Also use for 'how should I position my app', 'what angle should I use', 'painkiller vs vitamin', or 'market positioning'.
outline-generator
Use when generating outlines, article structures, content outlines, blog outlines, planning article sections, structuring posts, breaking down topics into sections, or organizing ideas for long-form content. Also use for 'outline this', 'structure this article', or 'plan the sections'.
last30days-open
Use only when the user explicitly asks for the open variant of last30days, including watchlists, briefings, and history queries. Sources: Reddit, X, YouTube, web.
last30days
Use when researching what happened in the last 30 days on a topic. Also triggered by 'last30'. Sources: Reddit, X, YouTube, web. Produces expert-level summary with copy-paste-ready prompts.
hooks
Use when generating hooks, headlines, titles, and scroll-stopping openers for content. Also use when analyzing viral posts, Reels, TikToks, YouTube Shorts, or successful social examples to extract reusable hook patterns and improve hook guidance.
evaluate-content
Use when judging content quality OR editing/improving existing copy: shareability, readability, voice, cuttability, angle, copy sweeps.
editor-in-chief
Use when a first draft is complete and all Phase 1 gates are done: topic selected (seo-research), title approved (hooks), outline approved (outline-generator), draft written (writer). Runs autonomous diagnosis-prescribe-rewrite loop before Substack.
copywriting
Write or improve marketing copy for any surface: pages, ads, app stores, landing pages, TikTok/Meta scripts, push notifications, UGC. Combines page copy frameworks with direct response principles.
content-strategy
Use when building content strategy: hooks, angles, and ideas from what's trending now. Covers organic and paid creative across TikTok, X, YouTube, Meta, LinkedIn.
content-pipeline
Orchestrator for the 3-article content pipeline — runs research phase, spawns parallel article sub-agents, creates Typefully drafts. Use when running the full content pipeline (usually via cron at 3am).