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 like accounts/fireworks/models/llama-v3p1-70b-instruct.
ollama
A model on your own machine or network, defaulting to http://localhost:11434/v1. Model ids look like llama3.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:

a system prompt with some spine
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

  1. 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.
  2. A ready AI reply is queued in the background, so provider work never blocks the widget.
  3. If the workspace has indexed knowledge, the question is embedded and the closest passages are retrieved.
  4. The last 20 messages of the thread go to your provider along with your system prompt, the retrieved passages, the request_human tool, and any enabled Tools on a tested Connection.
  5. 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.
  6. 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.
Anthropic is the exception. It serves no embeddings API at all, so its key can't be reused — leave these blank and knowledge sources won't index. Point them at OpenAI, a local Ollama, or anything else serving /v1/embeddings, and chat keeps running on Claude.
a typical Claude-for-chat setup
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.

Next