Building a good agent on the Engine is mostly prompt engineering. The loop is the same; the model is whatever you’ve configured; the memory fills itself. The lever you pull most often is the system prompt — the instructions that shape how the agent thinks, what it tries first, and what it refuses. This page covers what works.Documentation Index
Fetch the complete documentation index at: https://septemberai.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
What goes in the system prompt
A production agent’s system prompt typically has six parts:- Identity. Who is this agent? What’s its name, its scope, its tone?
- Goals. What is the agent here to do? In one paragraph.
- Tools. Which tools the agent has and how to think about each
one. Don’t list schemas — that’s the tool catalog’s job. Instead,
give heuristics: “Prefer
grepoverread_filewhen looking for a pattern across many files.” - Voice and format. How does the agent talk? Long-form? Bulleted? Second person?
- Refusal policy. What does the agent decline to do? Phrase the line clearly so the model can hold it.
- Operating rules. Workflow expectations — “Always read before you write,” “Confirm before destructive operations,” “Test changes before declaring them done.”
Patterns
Lead with identity
The first paragraph sets the agent’s stance. The model takes the cue and frames every decision through it.Prescribe what to do, not what not to do
Anchor with examples
For tasks where format matters, show, don’t tell:Distinguish required from optional
If a workflow has a fixed first step, say so explicitly:Tell the model how to ask
The agent will need to ask the user questions sometimes (HITL). Tell it when:Tool descriptions are part of the prompt
The model decides which tool to call by reading the tool description, not the tool implementation. A tool with a one-line description (“search files”) gets used randomly. A tool with a precise description (“Search for a regex pattern across files in the workspace. Returns matching lines with file path and line number. Use this when you need to find where a symbol is defined or used.”) gets used correctly. See Tool use for the full pattern.Prompt versions
Treat agent prompts like code:- Version them. Store in the catalog with a version field. Bump on every meaningful change.
- Test them. Run regression evals against a golden dataset every time you change a prompt.
- Pin them. Production runs against a pinned version, not “latest.”
- Migrate them. When a prompt change shifts behavior, document the migration the same way you’d document an API change.
Across model versions
A prompt that works perfectly on Claude Sonnet 4.5 may behave differently on 4.6. The structure is usually portable; the calibration isn’t:- What carries over: identity framing, examples, refusal policy.
- What shifts: verbosity, willingness to call tools without asking, default response length.
What not to put in the system prompt
- Per-call data. Things specific to one request belong in the user message, not the system prompt. Caching depends on system prompts being stable.
- The user’s name and details. Those live in the soul. The system prompt is for “what the agent is,” not “who it’s serving.”
- Long static content. Reference docs, large code samples, FAQ entries. Put them in tool output (retrieval) instead, or in the soul if they’re persistent. The system prompt is for instructions, not knowledge.
- Self-undermining hedges. “You are a helpful assistant. However, you are not always right and the user should verify.” This kind of hedge teaches the model to back off. State the boundaries you want; don’t apologize.
Patterns that fail
Wishful thinking
Conflicting instructions
Instructions that contradict the tools
See also
- Context strategy — how the prompt fits into the larger context the model sees.
- Tool use — prompt-engineering for tool descriptions specifically.
- Evaluation — how to know whether your prompt change helped or hurt.

