System prompt
Your app's own instructions, sent ahead of the user's and weighted above them: role, rules, tone. Usually repeated every turn.
See it
What it is
A system prompt is the application's own block of instructions at the top of a request, weighted higher than anything the user says. Apps usually send the same text on every turn while the conversation grows underneath it, so it carries the durable stuff: role, tone, output format, refusal policy, tool usage rules, and the facts about your product the model would otherwise invent. Nothing forces it to hold still, though. Plenty of apps rebuild it per request with the user's plan, locale, permissions or the current date stitched in.
Reach for it when behavior must hold across every message: a support bot that never quotes prices, an app that always returns JSON, a writer that keeps a house voice. Keep it byte-identical between calls and it is also the cheapest thing to cache, since a stable prefix hits the prompt cache; splice a timestamp into it and you have thrown that away. Treat it like a config file: version it, diff it, and run evals when you change a line.
Gotcha: a system prompt is instruction, not enforcement. A user or a poisoned document can argue a model out of it (prompt injection), so anything that actually matters (spend limits, permissions, whose data gets read) belongs in your code, not in a paragraph. Second gotcha: piling on rules makes them fight each other. Ten crisp lines beat two pages of contradictions.
Ask AI for it
Write a system prompt for a customer support assistant for my product. Include, in this order: one sentence of identity, 3 to 5 rules it must always follow, the exact output format with field names, an explicit refusal policy for out-of-scope or unverifiable questions, and a short 'never do this' list. Keep it under 250 words, written as declarative rules rather than prose, with the stable text first so it caches cleanly. No greetings, no examples of user questions inside it.