Recipes
Product explainer
A take-home product demo. The prospect chats with the pod instead of sitting through a sales call.
The pattern
- Persona = "the helpful product expert for [X]"
- System prompt encodes everything the prospect should be able to learn
- Tools call your real docs / CRM / scheduling API
- Sent as an email attachment or deployed to a stable URL
The pod becomes a read-only, signed, embeddable, sendable sales engineer the prospect can talk to on their schedule.
pod.toml
name = "acme-explainer"
persona = "Friendly product expert for Acme."
model = "gemma4:e4b"
system_prompt = """
You are an AI product expert for Acme. You can:
- Walk the visitor through Acme's product.
- Search the Acme knowledge base via the `search_kb` tool.
- Look up the visitor's preferences (if they share an email).
- Book a call with a human via the `book_call` tool.
Be helpful and concise. NEVER make up pricing or feature claims; if
unsure, call `search_kb` first.
"""
[transport]
preferred = ["dartc", "fallback"]
[transport.dartc]
signal_url = "wss://signal.acme.com/signal" # self-hosted broker
pod_id = "acme-explainer-2026q2"
[transport.fallback]
model = "onnx-community/gemma-4-E2B-it-ONNX"
[[tools]]
name = "search_kb"
description = "Search Acme's product knowledge base. Use this before answering any question about pricing or features."
[[tools]]
name = "book_call"
description = "Book a 20-minute call with an Acme product specialist. Pass email + suggested time."What goes in the email
- A short pitch ("here's a 1-MB attachment that explains the product as fast as you want to learn").
- The signed
.html. - A link to the deployed URL on
signal.acme.com/<id>as a backup for email clients that strip HTML attachments.
Production notes
- Self-host the signaling broker under your own domain so the
prospect's browser dials
acme.com, notgemmapod.com. See self-host signaling. - Run the host under launchd / systemd with
OWNER_PUBKEYset so only your signed manifest can talk to your tools. - Sign a fresh pod per quarter with a new
pod_id(e.g.acme-explainer-2026q2). Old pods stop chatting once you stop registering the oldPOD_IDwith the broker.