Set up the AI agent
Doorwick doesn't resell tokens. You bring your own provider key, the model bills you directly, and you can point the whole thing at a server in your own building if you'd rather.
Where it lives
AI agent in the workspace settings, or /workspaces/:id/ai. Settings are per workspace — two products can run different models, different prompts, and different keys. It's owner-only, because the key on this page is billed to you by your provider.
Pick a provider
Five options, and the last one is the interesting one:
- anthropic
- Claude, called natively. Model ids look like
claude-haiku-4-5-20251001. - openai
- Called natively. Model ids look like
gpt-4o-mini. - fireworks
- Open-weight models on Fireworks, defaulting to
https://api.fireworks.ai/inference/v1. Model ids look likeaccounts/fireworks/models/llama-v3p1-70b-instruct. - ollama
- A model on your own machine or network, defaulting to
http://localhost:11434/v1. Model ids look likellama3.1. Nothing leaves your infrastructure. - custom
- Anything that speaks the OpenAI chat API — vLLM, LM Studio, a gateway, a colleague's endpoint. The base URL is required here.
Fireworks, Ollama, and custom endpoints are all driven through the OpenAI-compatible adapter pointed at the base URL you give them, so anything that implements that API works whether or not we've heard of it.
The settings, one by one
- AI agent enabled
- The master switch. Doorwick turns it on only after the current chat and embedding provider checks pass, serving knowledge exists, and the latest managed release is healthy. Until then, new conversations start human-handled instead of pretending an answer is on the way. Your keys and prompt stay saved either way.
- Model
- A free-text field, not a dropdown, so a model released this morning works this morning. Doorwick passes the id straight through; a typo surfaces as a provider error rather than a validation message.
- API base URL
- Shown for Fireworks, Ollama, and custom. Leave it blank to accept the default above; required for custom.
- API key
- Write-only and encrypted at rest. Once saved it shows as dots and never comes back to the browser — leave the field blank when you save other changes and the stored key is kept.
- System prompt
- The agent's standing instructions. It ships with a sensible default: be friendly and concise, answer honestly, and escalate rather than guess.
- Temperature
- 0 to 2, default 0.7. Lower is more repeatable and duller; higher is more varied and more likely to wander. For support, 0.3–0.7 is the useful range.
Save provider changes, then use Run provider checks in the readiness card. Checks are bound to the exact saved model, endpoints, and credentials; changing any of them requires a fresh check and keeps visitor AI off until the new configuration passes.
Writing a system prompt that behaves
The default is deliberately short, and short prompts age better than long ones. What's worth adding is anything about your business the model can't infer:
You are the support assistant for Acme, which sells accounting
software to UK sole traders.
Be brief — two or three sentences unless asked for more.
Never quote a price; prices change and you will be wrong.
Never promise a refund, a date, or an exception to policy.
If someone is angry, or asks anything about their own account,
bill, or data, call request_human immediately.Instructions about grounding and citations don't belong here — Doorwick adds those itself on every request that has knowledge behind it. Tone, preferred phrases, and troubleshooting playbooks belong on Skills.
What happens on a visitor message
- The message arrives. If effective readiness changed after the conversation opened, Doorwick returns the human-handoff notice in that same request so the widget never waits silently for a reply job that cannot run.
- A ready AI reply is queued in the background, so provider work never blocks the widget.
- If the workspace has indexed knowledge, the question is embedded and the closest passages are retrieved.
- The last 20 messages of the thread go to your provider along with your system prompt, the retrieved passages, the
request_humantool, and any enabled Tools on a tested Connection. - The widget shows the current phase while the model works, then displays the finished answer after any tool calls are complete. Provisional text is never shown to the visitor.
- The finished reply is saved with its provider, model, latency, and token counts — that's where the token figures on the analytics page come from.
Doorwick exposes visitor AI only after the current chat and embedding configuration has passed readiness, at least one embedded source is serving, and the latest managed release is activated. If retrieval returns no usable approved knowledge—or the model produces a hedged no-answer—Doorwick enforces the handoff on the server instead of relying on prompt compliance. The conversation becomes Pending human, and your team is emailed. A broken key never leaves someone talking to a wall.
The tools the agent can call
request_human is always available. Calling it sets the conversation to pending human, posts a system note with the reason, and notifies your team. Escalating well is still the thing a support agent must never get wrong.
Enabled Connections and Tools are additional tools on the same turn. The model gets the Tool's name, description, and parameters — never the Connection credential. Read Tools may run when the visitor is allowed to use them. Action Tools wait for the widget's Confirm / Not now controls; a typed “yes” does not authorize the call.
Brand voice and playbooks belong on Skills, not in the system prompt. Grounded answers, human handoff, and safe connected actions stay on.
Embeddings
Knowledge sources are indexed by embedding them, and embeddings always speak the OpenAI-compatible /v1/embeddings API — which isn't the same question as who handles chat. The Embeddings section at the bottom of the AI agent page is where that's decided:
- Model
- Defaults to
text-embedding-3-small. Clear the field to put the default back. - Base URL
- Where embedding calls go. Blank means "wherever chat goes", which is right for OpenAI, Fireworks, Ollama, and custom endpoints.
- API key
- Blank means "reuse the chat key". Write-only and encrypted, same as the chat key.
/v1/embeddings, and chat keeps running on Claude.Provider anthropic
Model claude-haiku-4-5-20251001
API key sk-ant-…
Embeddings
Base URL https://api.openai.com/v1
API key sk-…The AI agent page warns you when embeddings have nowhere to go, and so does the Knowledge page — you won't find out by watching sources fail.