Website Concierge

An embedded chat widget that answers visitor questions, captures leads, and books appointments straight from a local business website.

An embedded chat widget that answers visitor questions, captures leads, and books appointments straight from a local business website. Most visitors leave a small-business site without a word. This works the 20+ hours a week your team is offline, turning quiet traffic into booked appointments.

This is the whole blueprint, nothing held back: the model, the tools, the exact prompt, the source on disk, and the setup. Everything you need to run Website Concierge yourself is on this page, and it deploys in an afternoon.

See it running

Agents like Website Concierge run behind an embedded chat widget that sits on the website. Here is that pattern, live: every action stays visible and reviewable. Click into it.

crescendo.51ultron.com/kits/chat-widget

What it does

Website Concierge handles the work end to end:

  • Answer visitor questions instantly from your own site content
  • Book appointments in the chat without a single form
  • Capture a name and contact from every warm visitor who is not ready yet
  • Alert the owner in real time on every booking and hot lead

The anatomy

An agent is a composition, not a prompt: a model, the tools it is allowed to call, the integrations that give those tools reach, and the rules that keep it honest. Here is Website Concierge on one card.

Website Conciergeblueprint
Model
claude-sonnet-4-6
Tools
answer_from_sitebook_appointmentcapture_leadnotify_owner
Integrations
Cal.comResend
Guardrails
/workspace/site.md: services, prices, hours, location, faqs; /workspace/calendar: live availability via cal.com

The instructions

Every run is governed by this prompt. It is short on purpose: enough to make Website Concierge reliable, not so much that it can misread itself. Copy it as a starting point for any agent you build.

Website Concierge
You are the concierge on a local business website. You greet visitors, answer their questions from the site content, and turn interest into a booked appointment or a captured lead before they leave. CONTEXT loaded per site: - /workspace/site.md: services, prices, hours, location, FAQs - /workspace/calendar: live availability via Cal.com FLOW: 1. Open warm and specific: name the business, offer help. 2. Answer only from site.md. If something is not there, say you will have the owner confirm and capture the lead. 3. When a visitor shows intent, offer to book. Check availability and call book_appointment. 4. If they are not ready to book, call capture_lead with what they wanted so the owner can follow up. 5. Every conversation ends with either a booking or a captured contact. Never let a warm visitor leave empty. RULES: - Short, friendly replies. This is a chat bubble, not a document. - Never invent prices, hours, or availability. - Ask for an email or phone before the visitor leaves. - Notify the owner in real time on every booking and every hot lead.

The source, on disk

Three files carry the whole agent: the definition with its tools, the environment it expects, and the setup. Walk them.

website-concierge/website-concierge.ts1.5 KB
1import { agent, tool } from "@agent-sdk"
2import { z } from "zod"
3
4export default agent({
5 model: "claude-sonnet-4-6",
6 runtime: "claude-code",
7 permissionMode: "bypassPermissions",
8 maxTurns: 20,
9 systemPrompt, // prompt.md, verbatim
10 surface: {
11 type: "embedded-widget",
12 position: "bottom-right",
13 },
14 tools: {
15 answer_from_site: tool({
16 description: "Answer a question from the site content",
17 inputSchema: z.object({ question: z.string() }),
18 execute: async ({ question }) => {
19 // grep /workspace/site.md, return cited answer
20 },
21 }),
22 book_appointment: tool({
23 description: "Book a confirmed appointment",
24 inputSchema: z.object({
25 name: z.string(),
26 email: z.string().email(),
27 service: z.string(),
28 startsAt: z.string(),
29 }),
30 execute: async ({ name, email, service, startsAt }) => {
31 // POST Cal.com booking, email confirmation
32 },
33 }),
34 capture_lead: tool({
35 description: "Capture a visitor who is not ready to book",
36 inputSchema: z.object({
37 name: z.string().optional(),
38 contact: z.string(),
39 interest: z.string(),
40 }),
41 execute: async ({ name, contact, interest }) => {
42 // store lead + notify owner
43 },
44 }),
45 notify_owner: tool({
46 description: "Real-time alert to the owner",
47 inputSchema: z.object({ summary: z.string() }),
48 execute: async ({ summary }) => {
49 // Resend email / SMS to owner
50 },
51 }),
52 },
53})

The business case

If you run an agency, Website Concierge is also a product. It sells into local services, clinics, restaurants, real estate, gyms, and the numbers work at very small scale.

$2,000

setup you can charge

$400/mo

monthly retainer

20+

hours saved weekly

Ship it

The whole install is a handful of commands and the keys from the env file. Run the list, then point Website Concierge at real work.

Deploy checklist

0 of 6

That is the entire blueprint: one model, 4 tools, and a prompt. Built by hand it costs you an afternoon. Inside Ultron it costs you a sentence, because you can build this exact agent in the workforce and watch it run before you commit to anything.

Build Website Concierge in Ultron

1
Describe what you want

Start from this blueprint or your own words. Ultron reads the intent and picks the tools.

2
It builds the agent

The model, the tools, the prompt, the console. Assembled in front of you, nothing to wire.

3
Watch it run

Test it live in the chat, then put it to work. You review what it does, it does the rest.

Keep reading