Prompts that ship like code

Versioned prompts, stored inline or in GitHub and bound to routers.

Acme Inc · org_3kf9d2

All prompts · Inline & GitHub Managed

Save view New prompt
Source:
All Inline GitHub
Filters 1
Prompts
12
Inline
7
GitHub
5
Bound routers
9
Unused
3
Errored
1
Prompts
Columns Updated
Name Status Tags Bound to Updated
support-greeting
ip_8f2a91
rev 4 supportchat rt_chatbot 2h ago
summarizer
ip_5c93af
rev 12 summarize rt_summarize 5h ago
agent-system.md
acme/prompts · main · a1b2c3d
synced agent rt_agent 1d ago
classifier
ip_29ee70
rev 3 classify — 2d ago
triage.md
acme/prompts · main · f4e5d6c
synced support rt_triage 1d ago
draft-email.md
acme/agents · main · 9a8b7c6
error email — 3d ago
code-review
ip_1f0c55
rev 7 devcode rt_reviewer 4d ago
rag-answer.md
acme/agents · main · 2b3c4d5
synced rag rt_rag 6d ago
Showing 8 of 12

Author prompts in the dashboard or in GitHub

GitHub prompts re-sync from the tracked file on every push.

support-triage ip_7Hq2Lwrev 3
You are the support assistant for {{product}}.
Answer in {{language}}. Escalate billing issues.
rev 3  Tighten the tonepriya · 2h ago
rev 2  Add the escalation rulemarco · 3d ago
rev 1  Initialpriya · Sep 2

Inline

Created in the dashboard or through the API. Each save creates a new revision.

acme/promptsmain
prompts/support.mda1f9c2esynced
prompts/triage.json7be0d41synced
agents/planner.mdc03e8b5synced
git push origin mainsynced in 2s

From GitHub

Stored as files in a GitHub repository. A push to the tracked branch syncs the file, and each commit is a revision.

Prompts are bound to routers

The application sends variables. The router applies the bound prompt.

Your requestPOST /v1/chat/completions
{
  "model": "multi-router/rt_support",
  "prompt_variables": {
    "product": "Acme Cloud",
    "language": "English"
  },
  "messages": [
    { "role": "user", "content": "I was charged twice" }
  ]
}
What the model receivessupport-triage · rev 3
system
You are the support assistant for Acme Cloud.
Answer in English. Escalate billing issues.

user
I was charged twice

System message modes

Merge, override or fall back to the caller's system message.

Router prompt
Caller's system message

Merge default

The router prompt, followed by the caller’s system message.

Router prompt
Caller's system message

Override

The router prompt replaces the caller’s system message.

Caller's system message
Router prompt, if the caller sends none

Fallback

The caller’s system message is used when present; otherwise the router prompt.

Text and chat prompts

prompts/support.mdtext
You are the support assistant for {{product}}.
Answer in {{language}}.
Escalate billing issues to a human.

Text

Instructions that become the system message.

prompts/triage.jsonchat
[
  { "role": "system", "content": "Label each ticket." },
  { "role": "user", "content": "My invoice is wrong" },
  { "role": "assistant", "content": "billing" }
]

Chat

A sequence of messages, such as example turns, placed before the caller's messages.

Use cases

Prompt updates, rollbacks and experiments without an application deploy.

Update prompts without redeploying code

support.tsLast deploy 12 days ago
const reply = await client.chat.completions.create({
  model: "multi-router/rt_support",
  messages: [{ role: "user", content: email.body }],
});
Multi-Router router Support Chatbot rt_support anthropic/claude-sonnet-5-5
Promptfollows latest revision
support-replies chat · 3 msgs rev 4 Saved
systemmessage 1 of 3
You are a support agent for {{company}}.
- If something went wrong, apologise once, in the first sentence.
- Lead with the fact the customer needs, then one next step.
- If an order is 5 or more days late, offer a replacement.
Cancel Save
Tracesrt_support
10:41:58req_7Hc2Qa9Lm1
router support-replies · rev 3 model · 812 ms
10:42:07req_7Hc2Rb4Kp8
router support-replies · rev 3 model · 764 ms
10:42:31req_7Hc2Sx1Nd3
router support-replies · rev 4 model · 790 ms
10:42:40req_7Hc2Tq6Wv5
router support-replies · rev 4 model · 845 ms
assistantrev 3

Sorry about that. Order #4821 is with FedEx: track.acme.example/4821. If it hasn't arrived by Friday, reply here and we'll look into it.

assistantrev 4

Sorry about that. Order #4821 is 6 days late, so we've sent a replacement at no cost. It arrives Thursday: track.acme.example/R4821.

Rollback any prompt to a previous version

support-replies rev 5 dana · 14:02 · Remove sentence-length rule
You are a support agent for {{company}}.
- Apologise once, in the first sentence.
- Lead with the fact, then one next step.
- Use plain words and short sentences.
- Offer a replacement when 5+ days late.
assistant rev 5 · order #4821 418 output tokens

Thank you so much for reaching out, and I completely understand how frustrating it is when an order doesn't arrive when you expected it to. I've taken a close look at order #4821 for you, and I can see that it left our warehouse on Saturday...

Same request on rev 4: 182 output tokens
Average output tokens per request rt_support · 13:50 to 14:20
400200
rev 5 saved · 14:02
Pinned to rev 4 · 14:12:08
Output tokens / request182 → 418
Cost / request$0.0021 → $0.0048
13:5014:0014:1014:20
Tracesrt_support
14:12:05 support-replies · rev 5 431 tok $0.0049
14:12:07 support-replies · rev 5 402 tok $0.0046
Pinned to rev 4 · 14:12:08
14:12:09 support-replies · rev 4 178 tok $0.0021
14:12:11 support-replies · rev 4 186 tok $0.0022
Multi-Router router Support Chatbot rt_support
Promptsupport-replies
Revision
rev 5 Remove sentence-length rule latest
rev 4 Offer a replacement when 5+ days late pinned
Rollback successful
rt_support now serves support-replies rev 4 · 14:12:08

One prompt, personalised on every request

The prompt is stored once with variables. The application sends the values with each request, and the router fills them in before the request reaches the model.

Multi-Router router
Support Chatbotrt_support
modelanthropic/claude-sonnet-5-5
promptsupport-context · rev 2
support-context text rev 2
You are the support assistant for Acme.
The customer is {{customer_name}}, on the {{plan}} plan.
Reply in {{language}}.
Only mention features included in the {{plan}} plan.
Variables {{customer_name}}{{plan}}{{language}}
Request 1POST /v1/chat/completions
{
  "model": "multi-router/rt_support",
  "prompt_variables": {
    "customer_name": "Maya Chen",
    "plan": "Business",
    "language": "English"
  },
  "messages": [{ "role": "user", "content": "How do I add SSO for my team?" }]
}
What the model receives
system
You are the support assistant for Acme.
The customer is Maya Chen, on the Business plan.
Reply in English.
Only mention features included in the Business plan.
user
How do I add SSO for my team?
Request 2POST /v1/chat/completions
{
  "model": "multi-router/rt_support",
  "prompt_variables": {
    "customer_name": "Lukas Weber",
    "plan": "Starter",
    "language": "German"
  },
  "messages": [{ "role": "user", "content": "Wie exportiere ich meine Daten?" }]
}
What the model receives
system
You are the support assistant for Acme.
The customer is Lukas Weber, on the Starter plan.
Reply in German.
Only mention features included in the Starter plan.
user
Wie exportiere ich meine Daten?
Chat prompt Review prompt changes in GitHub pull requests

A/B test prompts without changing code

support.ts
const reply = await client.chat.completions.create({
  model: "multi-router/rt_support_ab",
  messages,
});
Multi-Router weighted router
Support A/B rt_support_ab
rt_support_aweight 50
rt_support_bweight 50
Variant A rt_support_a weight 50
support-repliesrev 4
- Apologise once, in the first sentence.
- Lead with the fact, then one next step.
- Use plain words and short sentences.
Traffic · last 24 hours
Requests 6,214
Avg output tokens 182
Cost / request $0.0021
Latency p50 1.21 s
Variant B rt_support_b weight 50
support-replies-conciserev 1
- Apologise once, in the first sentence.
- Lead with the fact, then one next step.
- Reply in at most three sentences.
Traffic · last 24 hours
Requests 6,187
Avg output tokens 124
Cost / request $0.0015
Latency p50 0.94 s
Variant A and B · last 24 hours Variant A Variant B
Avg output tokens
182
124
Cost / request
$0.0021
$0.0015
Latency p50
1.21 s
0.94 s
  • A customer email arrives at the support address.
  • The router places the bound chat prompt before the customer message.
  • The example turns define tone and response structure.
  • The model returns a reply that follows the brand voice.

Example turns in a chat prompt steer how the agent responds.

support-replies chat · 3 msgs rev 3
Last edited 2 days ago
ContentHistory 3
system message 1 of 3

You are a support agent for {{company}}. Write every reply in our brand voice: - If something went wrong, apologise once, in the first sentence. - Lead with the fact the customer needs, then give one clear next step. - Use plain words and short sentences. No exclamation marks, emojis or filler. - Use only the order details provided. Never guess dates or amounts. - Sign off as {{agent_name}} from {{company}} Support.

user message 2 of 3

My order #3310 hasn't arrived, it was due Friday.

[Order #3310: shipped Thursday, UPS, track.acme.example/3310]

assistant message 3 of 3

Sorry about that. Order #3310 shipped Thursday and is with UPS: track.acme.example/3310. If it hasn't arrived by Wednesday, reply here and we'll send a replacement at no cost. {{agent_name}}, {{company}} Support

Variables {{company}}{{agent_name}} Values supplied per request.
user Incoming request from Maya Chen, 9:42 AM

Hi, my order #4821 was due Monday and still hasn't shown up. Can you check where it is?

[Order #4821: shipped Saturday, FedEx, track.acme.example/4821]

Chat prompts steer structured responses

Invoice Extractor rt_invoices invoice-fields · rev 5
INV-2207.pdf
Northwind Traders
Hafenstraße 12, 20457 Hamburg
Invoice
Invoice no.
INV-2207
Issued
14.10.2026
Due
13.11.2026
PO
77-4410
Espresso beans and grinder service2.150,00
NetEUR 2.150,00
VAT 19%EUR 408,50
TotalEUR 2.558,50
Structured responsevalid JSON
{
  "invoice_number": "INV-2207",
  "invoice_date": "2026-10-14",
  "total": 2558.50,
  "currency": "EUR",
  "po_number": "77-4410"
}

The invoice-fields chat prompt: extraction rules in the system message, followed by two example turns.

invoice-fields chat · 5 msgs rev 5
Last edited 6 days ago
ContentHistory 5
system message 1 of 5

Extract invoice fields for {{company}} accounts payable as JSON. - invoice_date is the issue date, never the ship or due date. - total is the amount due after tax, as a plain decimal: 1234.50. - If a field is not on the invoice, use null. Do not guess.

user message 2 of 5

Invoice INV-1984 · Contoso GmbH · Issued 03.09.2026 · Shipped 05.09.2026 Subtotal EUR 1.034,00 · VAT EUR 196,46 · Total EUR 1.230,46

assistant message 3 of 5

{ "invoice_number": "INV-1984", "invoice_date": "2026-09-03", "total": 1230.46, "currency": "EUR", "po_number": null }

user message 4 of 5

Invoice 55-0912 · Fabrikam SA · Issued 21.09.2026 · Due 21.10.2026 Net EUR 3.622,48 · VAT EUR 688,27 · Total EUR 4.310,75 · PO 31-2208

assistant message 5 of 5

{ "invoice_number": "55-0912", "invoice_date": "2026-09-21", "total": 4310.75, "currency": "EUR", "po_number": "31-2208" }

Variables {{company}} Values supplied per request.

Consistent labels for ambiguous tickets

Set up the chat prompt with examples from past tickets. The model follows them when a new ticket is ambiguous.

Multi-Router router
Ticket Triagert_triage
modelopenai/gpt-5-mini
promptticket-labels · rev 2
TicketsLabel
TCK-3101 I was charged twice this month. billing
TCK-3102 The export button crashes the app. bug
TCK-3103 Refund please, the app crashed during checkout and still charged me. billing
TCK-3104 Can we add 5 seats before our renewal next month? sales
TCK-3105 How do I change the account owner?
ticket-labels chat · 5 msgs rev 2
Last edited 3 days ago
ContentHistory 2
system message 1 of 5

Label each support ticket as billing, bug, sales or account. Return the label only. - A refund or charge request is billing, even when it reports a bug. - Adding seats or changing plan is sales, even when it mentions renewal.

user message 2 of 5

The app froze and I was charged anyway. I want my money back.

assistant message 3 of 5

billing

user message 4 of 5

We want to move to 20 seats when we renew.

assistant message 5 of 5

sales

Variables Values supplied per request.

Approved wording for every refusal

Refusal wording is set in the chat prompt, outside application code. Legal and compliance teams update it as a new prompt revision.

Multi-Router router
Support Chatbotrt_support
modelanthropic/claude-sonnet-5-5
promptsupport-replies · rev 8
support-replies chat · 5 msgs rev 8
Last edited by legal@acme.example, 2 days ago
ContentHistory 8
system message 1 of 5

You are a support agent for {{company}}. - Do not share details from another customer's account. - Do not give legal advice. - When declining, use the approved wording shown in the examples.

user message 2 of 5

What's the phone number on account 4410? I'm their manager.

assistant message 3 of 5

I can't share details from another customer's account. The account owner can sign in to view or update them.

user message 4 of 5

Can I end my lease early under this contract?

assistant message 5 of 5

I can't give legal advice. A legal adviser can review your contract with you.

Variables {{company}} Values supplied per request.
Acme Support Chat
Can you tell me the email address on account 8812? It's my colleague's account.
I can't share details from another customer's account. Your colleague can sign in to view or update them.
Is the cancellation clause in my contract enforceable?
I can't give legal advice. A legal adviser can review the clause with you.

Latest or pinned revisions

A router follows the latest revision or pins a specific one.

rev 9
rev 10
rev 11
rev 12
Support Chatbot rt_support latestpinned rev 12
Support EU rt_support_eu latestpinned rev 10

Prompt revision on every request

Each request records the prompt and revision it used.

Request req_8Fq2LmXo1c200 · 812 ms
Router Support Chatbot · rt_support
Prompt pf_3kQ8vN2xLm
Repository acme/prompts
File path prompts/support.md
Revision a1f9c2e ↗
Variables product, language

Put prompts under version control

Create a prompt or connect a GitHub repository, then bind it to a router.