System Prompts: Claude's Briefing
A system prompt is a set of instructions you send to Claude through the API before the user's message. It's the first thing Claude reads in any conversation, it shapes how Claude behaves for the entire session, and the user never sees it. When you make an API call, there's a dedicated system field where this content lives, completely separate from the messages your users send.
Think about the Sorting Hat. Before a student ever sits on the stool, the Hat has a permanent set of instructions woven into its fabric: look for bravery, loyalty, or ambition. Be witty, speak in rhyme, don't take any nonsense. Those instructions don't change. Every student gets evaluated by the same logic engine.
Your system prompt works the same way. Without one, Claude is a capable generalist. With a strong system prompt, Claude becomes a specialist who already knows your client's fiscal year conventions, your column naming quirks, and which tables you trust.
What a strong system prompt looks like
For a marketing analytics tool, it might say:
"You are a marketing analytics assistant. You have access to a BigQuery dataset with the following tables and columns. When users ask about campaign performance, write SQL to query the data and return a clear summary. Spend should always be pulled from staging models, not raw sources. Impressions in the DV360 table use the column nameimpwhile Google Ads usesimpressions."
That last detail, the platform-specific column mapping, is exactly the kind of domain knowledge that turns Claude from a generic SQL writer into something a marketing team actually trusts. Without it, Claude might write technically valid SQL that queries the wrong column. The query runs, the number looks plausible, and nobody catches the error until something downstream breaks.
Good system prompts don't just tell Claude what to do. They tell Claude where the tricky edges are, how to handle ambiguity, and what the stakes are if it gets something wrong. That's what separates reliable AI tooling from the kind you're constantly apologizing for.
What Belongs in a Marketing System Prompt
The content varies by task, but a few categories almost always earn their place:
- Business context: who is this client, what are their primary KPIs, what does their media mix look like? Claude doesn't need an essay, but a paragraph of grounding prevents a lot of misinterpretation.
- Data structure: table names, column names, what each metric means and how it's calculated, and critically, any inconsistencies across platforms. Marketing data is notoriously inconsistent. If your DV360 data and Google Ads data use different column names for the same concept, the system prompt is where that gets reconciled.
- Rules and constraints: which models or tables are trusted sources? Which are raw data that should never be queried directly? Are there default date ranges or spend thresholds that should apply unless a user explicitly overrides them?
- Format expectations: should Claude return a narrative summary, a SQL block, or a table? Being explicit about output format prevents a lot of unnecessary back-and-forth.
The system prompt is where institutional knowledge gets encoded, the stuff that would otherwise live in one person's head and disappear when they leave. Done well, it's the difference between a tool that requires expert supervision and one a junior analyst can use confidently.
Context Files: Keeping Your System Prompt Maintainable
As your tool grows, your system prompt grows with it. Add a new advertising platform and you need its column mapping. Onboard a new client and you need their schema. Build a new feature and you need a whole set of conventions and guidelines.
If you're managing all of that as a single hardcoded string in your application code, you're going to have a bad time. It becomes impossible to review, easy to break, and painful to update.
The better approach is to break your system prompt content into separate context files, usually Markdown files, and have your application read and assemble them at runtime. A typical structure looks like this:
system-prompt/
├── base-context.md General rules & conventions (applies everywhere)
├── acme-corp-schema.md Client table structure & metric definitions
└── tasks/
├── sql-query.md SQL generation guidelines
└── summary.md Narrative summary format & styleYour application reads the relevant files and combines them into a system prompt before making the API call. Claude never sees the files themselves; it just sees the assembled text your app builds from them. From Claude's perspective, it's all one system prompt.
Why this pays off:
- Easier updates: when a client's schema changes, you update one clean, readable file instead of hunting through application code.
- Automatic pickup: when you add a new advertising platform, you add its column mapping to the schema file and the tool picks it up on the next request.
- Version control: these files live in git, they're reviewable in pull requests, and they stay organized as your tool grows.
- Non-engineer friendly: a marketing analyst can open a Markdown file and read it. They can't parse a 2,000-character escaped string inside a JavaScript object.
Cost optimization: Prompt caching
Portions of your system prompt that never change between requests, base context, stable schema files, are perfect candidates for Anthropic's prompt caching feature. You pay full price once, then roughly 90% less on every subsequent request that reuses those cached tokens. Breaking your system prompt into stable and dynamic layers makes caching straightforward to implement.
How They Fit Together
| Concept | What it is | Who manages it |
|---|---|---|
| System prompt | The system field in every API call: Claude's instructions for the session | Your application (assembled at runtime) |
| Context files | Markdown files that contain the content for the system prompt, broken up by topic | Engineers and analysts (in version control) |
| Base context | Rules and conventions that apply to every request | Stable: cache this |
| Client schema | Table structure and metric definitions for a specific client | Swapped per client: cache per client |
System prompts are the mechanism: the field in every API call where Claude gets its instructions. Context files are how you keep the content inside those prompts organized, readable, and maintainable as the tool grows.
Get those two pieces right and you have a foundation that's accurate today and easy to keep accurate when things change. Which they will.
