Open source · MIT · any site

An AI assistant for any site.

A chat widget that answers from your own pages, cites every claim, and keeps your model key off the page — on VitePress, Docusaurus, React, Vue or a single script tag.

$ npm i @cloflin/docpilot$ npx docpilot init
Why it exists

Hosted answer services keep your content, your readers' questions and the price. DocPilot keeps none of them: the search index is a static file you build, the search runs in the reader's browser, and the only server is the one already serving your site.

It is built for grounded answers — every claim numbered, every citation checked against what was actually retrieved, and a plain “I couldn’t find this” when your pages don’t say.

Start with the introduction, read why it is safe to ship, or try the pieces below.

A few pieces you can try.

Guide › Rate limits
Rate limits
Each key may send 600 requests a minute. Rate limits reset on a rolling 60-second window. A 429 response carries a Retry-After header.
DocPilot
Ask about Acme
All docsAI-generated. Check the linked pages.
Ask about a selection →
DocPilot
How do I authenticate requests?
Send an API key as a Bearer token1. To change keys without downtime, create the new one before revoking the old2.
Ask about Acme
All docsAI-generated. Check the linked pages.
Sources and passages →
DocPilot
How can I help you today?
I search through your documentation to help you find setup guides, feature details and troubleshooting tips, fast.
Ask about Acme
All docsAI-generated. Check the linked pages.
Search scope →
What the reader sees
How do webhooks retry?
Failed deliveries are retried with exponential backoff: 1 min, 5 min, 30 min, then hourly, up to 8 attempts over 24 hours. Each attempt carries the same event id, so a handler must be idempotent…
Can I replay one by hand?
Yes. Open Webhooks → Deliveries, pick the event and press Replay. A replay is a new attempt with the original payload and the same event id, and it does not reset the retry schedule.
→
What the model is sent
userHow do webhooks retry?
assistantFailed deliveries are retried with exponential backoff: 1 min, 5 min, 30 min, then hourly, up to 8 attempts over 24 hours. Each attempt carries the same event id, so a handler must be idempotent…summaryRetries use exponential backoff, 8 attempts over 24 h, same event id.
userCan I replay one by hand?
assistantYes. Open Webhooks → Deliveries, pick the event and press Replay. A replay is a new attempt with the original payload and the same event id, and it does not reset the retry schedule.
Conversation memory →
Question
deepseek/deepseek-v4-flashwaiting
openai/gpt-4o-miniwaiting
google/gemini-2.5-flashwaiting
Rotates on a 429, a retired id, a moderation refusal, a 5xx or an empty reply. Never on Stop, a 401, or once an answer is painting.
Model fallback →
DocPilot
How do I rotate a key?
Create a second key, deploy it, then revoke the first1.
Ask about Acme
All docsAI-generated. Check the linked pages.
localStorage
docpilot:history
[{ "title": "How do I rotate a key?", … },{ "title": "Webhook retries and backoff", … },{ "title": "Deploying behind nginx", … },{ "title": "Translate the panel to German", … },]
4 of 20 conversations · on this device only
Conversation history →
How do I rebuild the index in CI?
τ 0.64
best passage scores 0.84
Model call
yes
Reader sees
a cited answer
Relevance gate →
enrudejaares
DocPilot
How can I help you today?
Ask about Acme
All docs
Every language →