AI / Prompt Engineering
What Leaked System Prompts Teach: 8 Design Principles
awesome-ai-system-prompts collects the system prompts of 29 AI tools in one place. Here are the eight shared design principles that emerge from v0, Cursor, Manus, Claude Code, and ChatGPT — and how to apply them to your own agent.
The fastest way to learn how to write a good agent is to read how the agents that already work were written. The problem is that these prompts are normally invisible: they sit inside the tool, handed to the model before you ever type.
awesome-ai-system-prompts gathers those instructions into one repository. The system prompts of 29 different tools sit there folder by folder — ChatGPT, Claude, Claude Code, Cursor, v0, Manus, Devin, Cline, Windsurf, Bolt.new, Replit, Perplexity, Grok, Notion, and more. The repo has over 6,100 stars and is MIT licensed.
What’s in the repo?
The root holds one folder per tool, and the file format varies by tool: some are .md, some .txt, some are raw .js or .ts (extracted straight from the tool’s source), and some are .json schema files.
| Category | Folders |
|---|---|
| Coding agents | Claude-Code, Cursor, Cline, Devin, windsurf, Augment, trae-agent, Replit, same.new, Bolt.new, v0, Loveable, Blackbox.ai |
| General-purpose assistants | ChatGPT, Claude, Grok, Mistral, Google, Google-Jules, Z.ai, MetaAI-Whatsapp |
| Autonomous / tool-using agents | Manus, Clawdbot, notte, Parahelp, Cluely |
| Search and productivity | perplexity.ai, notion |
| Other | security |
Figures as of July 2026: ~6,100 stars, ~900 forks, MIT license. The repo opened in March 2025.
The 8 design principles
These are the shared patterns the README extracts. Every example comes straight from the relevant tool’s prompt:
| Principle | What it does | Example |
|---|---|---|
| 1. Role and scope | The agent learns who it is and where its limits are in the first sentence | v0: “You are v0, Vercel’s AI-powered assistant.” |
| 2. Structured instructions | The prompt is split into headings or tags | v0 and Cline use Markdown headings; same.new and Manus use XML-like tags |
| 3. Explicit tool integration | Tools are described with schemas and usage rules | ChatGPT inlines schemas in the prompt; Manus externalizes them to tools.json |
| 4. Step-by-step reasoning | The agent is given structure for its reasoning | Manus’s six-stage loop; v0’s <Thinking> tags |
| 5. Environment awareness | OS, working directory, and constraints are injected into the prompt | Cline injects OS/shell/cwd; Manus describes its Ubuntu 22.04 sandbox |
| 6. Domain constraints | Technology and style preferences become rules | v0 prefers shadcn/ui and lucide-react; Claude Code says “DO NOT ADD ANY COMMENTS unless asked” |
| 7. Safety and refusal protocol | The refusal case and its wording are fixed | v0 uses one fixed line: “I’m sorry. I’m not able to assist with that.” |
| 8. Tone consistency | How the agent speaks is specified | Cline is banned from opening with “Great” or “Certainly”; Bolt.new: “Do NOT be verbose” |
Standout case studies
Vercel v0 — components as tools
The interesting thing about v0 is that it defines its tools not as function calls but as MDX components. Tags like <CodeProject>, <QuickEdit>, and <DeleteFile /> effectively act as tools. The prompt also carries dense Next.js and Tailwind rules, mandatory kebab-case filenames, and accessibility requirements.
Manus — writing the loop down explicitly
Manus numbers its agent loop right in the prompt: analyze, select tools, wait, iterate, submit, stand by. On top of that it adds a strict rule: one tool call per turn. The prompt isn’t monolithic either — it’s split into Planner, Knowledge, and Datasource modules, with tool schemas living in tools.json.
same.new — justify every call
same.new, a cloud IDE, uses tag-delimited rule blocks (like <tool_calling>). Two of its rules are especially instructive: it must explain why before every tool call, and it must read a file before editing it. On runtime errors it retries at most three times. It also carries a classic UX rule: “NEVER refer to tool names when speaking to the USER.”
Clawdbot — splitting the prompt across files
Instead of one giant prompt, Clawdbot separates identity into three files: SOUL.md, AGENTS.md, and IDENTITY.md, then defines a three-tier approval flow on top. It’s a good demonstration that you don’t have to keep a prompt in a single file as your agent grows.
Architectural variation: there is no one correct template
This is the most honest conclusion the repo reaches. Tools solve the same problem differently:
- Tool syntax: splits between embedded markup (v0, Bolt.new) and JSON schemas (ChatGPT, Manus).
- Planning: some write an explicit loop (Manus), others rely on implicit rules.
- File editing: diff-based (replace_in_file), component-based (QuickEdit), or full overwrite.
- Prompt structure: a single monolithic file, or a modular multi-file setup.
So looking for an ideal template to copy is the wrong question. The right one is: what tools does my agent use, in what environment, with what risk profile?
How should you use the repo?
- 01
Open the folder of the tool closest to your own agent — Claude-Code or Cline for a coding agent, Manus for an autonomous one.
- 02
Read the prompt end to end, but not to copy it; to see which decision was made and why.
- 03
Apply the 8 principles to your own prompt as a checklist.
- 04
Borrow the pattern for mechanical parts like tool descriptions and refusal wording; write identity and domain rules yourself.
- 05
Change one thing and run the agent again — that’s the only way to measure what a prompt change actually did.
I keep this repo as a reference library. When I’m about to build a new agent I open the closest example and read it; what I’ve usually forgotten in my own prompt is environment awareness or refusal wording.