Teardown: the starter prompt that came with the platform
Every contact-center platform ships one: a dozen friendly lines under a {company_name} slot, pre-filled in the agent builder so the demo works on day one. Nobody wrote it for your business, nobody reviews it, and the rules you stack on top of it are compared against almost none of it.
TL;DR A vendor starter prompt checks clean because five of its eight rule-shaped lines are invisible to the checker, and a line nobody can read cannot contradict the rules you add on top of it; rewrite each template line as a rule before you write your own, and the conflicts it was hiding turn into a refused build.
This is the prompt below. The wording is ours, but if you have opened the agent builder in a CX platform any time in the last two years you have seen its cousin: a persona sentence, a goal, and a bulleted list of good intentions, with the company name as a curly-brace slot. Teams keep it because it tested fine in the demo, then add their own rules underneath. Here it is taken apart line by line, and then made to meet the brand team.
§1The prompt, as it shipped
You are a helpful, friendly customer service assistant for {company_name}.
Your goal is to answer customer questions accurately and concisely.
Guidelines:
- Always be polite and professional.
- Be empathetic and understanding.
- If you don't know the answer, say you don't know. Do not make up information.
- Try to resolve the customer's issue in as few messages as possible.
- If the customer asks to speak to a human, transfer them to a live agent.
- Keep responses short, but make sure you fully answer the question.
- Do not discuss topics unrelated to {company_name}.
- Use the knowledge base to answer questions when possible.
The first step with any prompt you did not write is typeglish import. It never changes a word. It repairs form, lifts the curly-brace slot into a declared input, and hands you a worklist.
$ typeglish import starter.md imported -> /tmp/support/starter.tg lifted: company_name 0 errors · 2 warns · 9 info (was 0 · 2 · 9) the worklist: syntax L10 info typeglish/if-then: IF needs a THEN - write IF <condition> THEN <action>. L12 info typeglish/if-then: IF needs a THEN - write IF <condition> THEN <action>. optimization L11 info prompt/hedging: Hedging - "Try to" turns this instruction into a suggestion the model may skip. Delete the hedge, or commit to a modal (MUST / NEVER /… L15 info prompt/hedging: Hedging - "when possible" turns this instruction into a suggestion the model may skip. Delete the hedge, or commit to a modal (MUST / NEVER… L8 warn prompt/unmeasurable: Unmeasurable rule - no observable action or bound, so nothing can check compliance. Name a concrete action ("cite the source", "at most 3… L9 warn prompt/unmeasurable: Unmeasurable rule - "be <quality>" names no observable action, so nothing can check compliance. Name a concrete action, or move it to a… L11 info prompt/unparsed-rule: Reads like a rule, but the rule reader cannot parse it as one, so it earns no Enforceability credit and no measurability check: no modal… L12 info prompt/unparsed-rule: Reads like a rule, but the rule reader cannot parse it as one, so it earns no Enforceability credit and no measurability check: the… L13 info prompt/unparsed-rule: Reads like a rule, but the rule reader cannot parse it as one, so it earns no Enforceability credit and no measurability check: no modal… L15 info prompt/unparsed-rule: Reads like a rule, but the rule reader cannot parse it as one, so it earns no Enforceability credit and no measurability check: no modal… L11 info prompt/unregistered-doer: A bare generic doer never enters the world model - instruction to the agent, or background about users? Use the imperative if the agent… ✓ builds clean - next: typeglish build /tmp/support/starter.tg
$REQUIRE variable company_name, so the company name is now a declared input the file knows about, not a brace pair it has to hope somebody fills. Everything else on the list is a warning or a note, and that is the first thing to be suspicious of.§2Line by line
The grade and the rules table say it plainly:
$ typeglish review starter.tg | head -1 starter.tg - D (63/100) → A (100) projected if every fix below lands check: 0 error, 2 warning, 9 info tiers: base+z3 $ typeglish review starter.tg | sed -n '/RULES/,/^$/p' RULES 3 of 8 rule-shaped lines read · 2 not provable · 2 unmeasurable L8 ~ unmeasurable Always be polite and professional. no observable action or bound, so nothing can check compliance → name a concrete action or a bound ("at most 3 sentences") L9 ~ unmeasurable Be empathetic and understanding. no observable action or bound, so nothing can check compliance → name a concrete action or a bound ("at most 3 sentences") L11 ✗ invisible Try to resolve the customer's issue in as few messages as possible. no modal (MUST / NEVER / SHOULD) and "Try" is not a verb the checker knows, so it reads as prose → lead with a modal, or start with a verb from the catalog (Escalate …, Ask …) L12 ✗ invisible If the customer asks to speak to a human, transfer them to a live agent. the condition has no THEN branch, so nothing is required when it holds → add THEN MUST / NEVER / SHOULD <verb> … L13 ✗ invisible Keep responses short, but make sure you fully answer the question. no modal (MUST / NEVER / SHOULD), and the checker knows "keep" but cannot prove this shape: it stops at "," - the tail after it is not part of the provable rule, so it reads as prose → lead with a modal (MUST …) to make it a rule, and one action, one object per line; give the tail its own line to make it provable L14 ~ unprovable Do not discuss topics unrelated to @{company_name}. "discuss" is not a verb the checker knows → use a verb from the catalog (redirect, escalate, ask, cite …) or add a numeric bound L15 ✗ invisible Use the knowledge base to answer questions when possible. no modal (MUST / NEVER / SHOULD), and the checker knows "use" but cannot prove this shape: it stops reading at "when" - the clause after it is not part of the provable action, so it reads as prose → lead with a modal (MUST …) to make it a rule, and if the clause is a condition, make it one: WHEN <clause> THEN MUST <verb> …; otherwise give it its own rule to make it provable
L8 and L9, polite and empathetic. Both are qualities, not acts. prompt/unmeasurable warns on each because there is no turn you could write that fails them. They are not wrong; they are persona. The fix the diagnostic offers is the honest one: move the adjective into the You are sentence, where prose is allowed to be soft, or name the act you actually mean.
L10, the honesty rule. If you don't know the answer, say you don't know. Do not make up information. Two sentences, one conditional with no THEN, and a second instruction riding on the first. The condition has a consequence only a human can see, and typeglish/if-then flags it: IF needs a THEN. Hold on to this line. It is the one that starts the argument in section 3.
L11, the handle-time rule. Try to resolve the customer's issue in as few messages as possible. A hedge (prompt/hedging on Try to), no modal, no number. It is invisible, which is lucky, because as few messages as possible is an optimization target the model will happily meet by skipping the clarifying question.
L12, the handoff. If the customer asks to speak to a human, transfer them to a live agent. This is the only line in the template with a real system behind it, a transfer, and it is the one that most looks like a rule. The table says ✗ invisible: the comma is not a THEN, so the condition has no consequence as far as the checker can tell. If your team later writes a rule that restricts transfers, nothing will compare the two.
L13, the tension, stated as a compromise. Keep responses short, but make sure you fully answer the question. Two rules in one line, pulling in opposite directions, joined by but. The checker knows keep and stops at the comma; the half after it is prose. This is the line to split first, because it is the one every support lead has an opinion about, and the opinion should be a number. Why your agent writes an essay in a chat bubble walks through what that number buys.
L14 and L15, scope and grounding. Discuss is not a verb the checker knows, so L14 reads but proves nothing. L15 ends in when possible, a second hedge, and turns the knowledge base from a source of truth into a suggestion. How to keep your AI support agent on topic covers the replacement for L14 in detail.
A line the checker cannot read is not a safe line. It is a line nothing will ever disagree with.
§3Then the brand team adds two lines
Three weeks after launch the brand team reads a transcript where the agent said I don't know four times, and sends two rules: no more I don't know, and two sentences per reply. They go at the bottom, under their own heading, which is where rules added by somebody other than the prompt's owner always go.
$REQUIRE variable company_name You are a helpful, friendly customer service assistant for @{company_name}. Your goal is to answer customer questions accurately and concisely. Guidelines: - Always be polite and professional. - Be empathetic and understanding. - If you don't know the answer, say you don't know. Do not make up information. - Try to resolve the customer's issue in as few messages as possible. - If the customer asks to speak to a human, transfer them to a live agent. - Keep responses short, but make sure you fully answer the question. - Do not discuss topics unrelated to @{company_name}. - Use the knowledge base to answer questions when possible. # Brand rules - NEVER tell the customer you do not know. - MUST keep every reply to at most 2 sentences.
$ typeglish check starter.tg | tail -1 ✓ 1 file - 0 error, 2 warning, 9 info $ typeglish score starter.tg | head -1 starter.tg - C (69/100) proven errors: none tiers: base+z3
Now do the responsible thing. Somebody on the team works down the worklist and rewrites L10 as a proper rule, keeping its meaning exactly:
$REQUIRE variable company_name You are a helpful, friendly customer service assistant for @{company_name}. Your goal is to answer customer questions accurately and concisely. Guidelines: - Always be polite and professional. - Be empathetic and understanding. - WHEN the knowledge base has no answer THEN MUST tell the customer you do not know. - Try to resolve the customer's issue in as few messages as possible. - If the customer asks to speak to a human, transfer them to a live agent. - Keep responses short, but make sure you fully answer the question. - Do not discuss topics unrelated to @{company_name}. - Use the knowledge base to answer questions when possible. # Brand rules - NEVER tell the customer you do not know. - MUST keep every reply to at most 2 sentences.
$ typeglish check starter.tg | grep -A1 error starter.tg:10:1 error logic/contradiction Conflicts with line 18. Logical conflict - "tell the customer you do not know" is both required and forbidden. Keep one, or scope the two rules so they cannot both apply (IF <condition> THEN ...). ↳ line 18: - NEVER tell the customer you do not know. -- starter.tg:18:1 error logic/contradiction Conflicts with line 10. Logical conflict - "tell the customer you do not know" is both required and forbidden. Keep one, or scope the two rules so they cannot both apply (IF <condition> THEN ...). ↳ line 10: - WHEN the knowledge base has no answer THEN MUST tell the customer you do not know. -- ✗ 1 file - 2 error, 2 warning, 8 info $ typeglish score starter.tg | head -1 starter.tg - F (54/100) proven errors - grade capped at F tiers: base+z3 $ typeglish build starter.tg | head -1 typeglish build: starter.tg refused - nothing written
This is the whole teardown in one move. A template's invisible lines are not neutral; they are unreviewed policy that no later rule can collide with. The order of work matters: make the template legible first, and only then add your own rules, so each one is compared against something real. It is the same mechanism your prompt argues with itself describes, with a vendor as one of the two authors.
§4The rebuild
Resolving it is an editorial call, not a technical one. The brand team is right that I don't know is a dead end, and the template is right that inventing an answer is worse. Both survive if the rule forbids the invention and turns the gap into an act: a follow-up the customer can hold you to. The transfer becomes a pointer to the tool that does it, the length rule gets one number, and each line gets a @@ note saying who asked for it and why.
$REQUIRE variable company_name $IMPORT tool transfer_to_human # Role @@ role: one sentence says who is speaking, so every later "you" is the agent You are the support assistant for @{company_name}. # Constraints @@ grounding: an answer the knowledge base does not hold is a guess - NEVER invent an answer. @@ unknown: brand bans the words, not the honesty, so the gap becomes a follow-up - WHEN the knowledge base has no answer THEN MUST offer the customer a follow-up email. @@ human: asking for a person is the whole signal, no second-guessing - WHEN the customer asks for a human THEN MUST call @[transfer_to_human]. @@ brevity: two sentences is the brand limit for a chat bubble - MUST keep every reply to at most 2 sentences. @@ scope: questions about other companies go back to the topic - WHEN the customer asks about another company THEN MUST redirect the customer to @{company_name} topics. $TEST human - input:: Can I just talk to a real person please? - expect:: - calls transfer_to_human $TEST unknown - input:: Do you ship to Antarctica? - expect:: - offers the customer a follow-up email - never invents an answer - at most 2 sentences $TEST other_company - input:: Is your sofa better than the one at Harlow and Finch? - expect:: - redirects the customer to our own products
$ typeglish review starter.tg starter.tg - A (98/100) → A (99) projected if every fix below lands check: 0 error, 0 warning, 0 info tiers: base+z3 FIXES ranked by projected gain +1 make L10 provable - one verb the checker knows, one object, or a bound (the rules table names each edit) RULES 5 of 5 rule-shaped lines read · 1 not provable · 5/5 covered by $TEST L10 ~ unprovable NEVER invent an answer. "invent" is not a verb the checker knows → use a verb from the catalog (redirect, escalate, ask, cite …) or add a numeric bound TESTS 3 cases · 5/5 rules exercised $ typeglish test starter.tg --dry ✓ starter.tg coverage: 5/5 rules exercised · human - "Can I just talk to a real person please?" (not run) · rubric - 1 prose expectation, judged on a live run (needs ANTHROPIC_API_KEY) · unknown - "Do you ship to Antarctica?" (not run) ✓ at most 2 sentences · rubric - 2 prose expectations, judged on a live run (needs ANTHROPIC_API_KEY) · other_company - "Is your sofa better than the one at Harlow and Finch?" (not run) · rubric - 1 prose expectation, judged on a live run (needs ANTHROPIC_API_KEY) ✓ 1 prompt - 0 failed
unknown test pins it on a live run.§5Common questions
- Is the default system prompt in my CX platform good enough to ship?
- It is good enough to demo, which is what it was written for. The template in this teardown imports with zero errors and grades D (63/100) because only three of its eight rule-shaped lines can be read by the checker. The rest are qualities and hedges the model receives and nothing can test, so treat the template as a first draft of your policy, not as a neutral base layer.
- Why does my prompt check clean when two rules obviously contradict each other?
- Usually because one side of the contradiction is not written as a rule. A conditional with a comma instead of THEN, or an instruction with no modal, is prose to the checker, and prose is never compared with anything. Rewrite both lines as rules with a modal and a THEN, and a real conflict becomes a blocking logic/contradiction error.
- Should I delete the starter prompt or edit it?
- Import it and edit it. typeglish import keeps every word, lifts the curly-brace slots into declared inputs, and gives you a worklist; work down the worklist before you add a single rule of your own, so every rule you add is checked against the template instead of hiding behind it.
- How do I stop my support agent saying I don't know without making it invent answers?
- Keep the ban on inventing and replace the words with an act. NEVER invent an answer, plus WHEN the knowledge base has no answer THEN MUST offer the customer a follow-up email, gives the customer something to hold you to, and a $TEST case with an at most 2 sentences assert keeps the reply inside the brand limit.
The starter prompt survives for the same reason a default password does: it worked on the first day, and nobody owns it. When a team finally audits its agent prompt, the rules it wrote itself get argued over line by line and the vendor's lines get skimmed, because they sound like common sense. They are the part of the file most likely to be quietly contradicting everything else. The cheapest hour you can spend on an agent you inherited from a platform is typeglish import on the template, then the worklist, then your own rules, in that order.