Live workshop

Build a Bot in 45 Minutes

From an empty screen to something your classmates can actually talk to.

Paulo VilaFounder, ImagineOS · 30 years building software and companies

No code required for the first version. Bring the laptop you already have.

Thirty seconds, then we build

Who is saying this

Two careers: one deciding what companies should do, one building the thing.

McKinsey, BCG, Hay Group

Strategy and operations. Learned how decisions get made — and how they die in slide decks.

Mastercard, 2017-2025

VP of LATAM Digital Labs. A $100M+ B2B credit platform, a neobank that reached 1M+ users, 100+ C-suite sprints.

Top Level Executives

A 60,000-member global executive community, run for 19 years with zero institutional funding.

ImagineOS, today

Local-first AI infrastructure in Rust. Five shared services, several production apps, 300x faster than the stack it replaced.

Interactive · 1

Before we start: who is in the room?

Have you ever shipped a bot that someone other than you actually used?

Waiting for the room...

The deal

What you will have at minute 45

Not a demo. A link you can send to somebody tonight.

  • A name and one job — not 'an AI assistant' — 'the bot that answers questions about the 2026 syllabus'
  • A source of truth — your own documents, attached, so the answers are yours and not the internet's
  • A refusal rule — it says 'I don't have that' instead of inventing — the single feature that decides whether anyone trusts it twice
  • A shareable link — someone who is not you can use it without installing anything

Reality checkWhat you will NOT have: a product. No payments, no user accounts, no uptime guarantee. That is week two, and we will name exactly what it costs at the end.

Interactive · 2

What has actually stopped you?

Answer honestly — the rest of the workshop leans towards whatever wins.

What has stopped you from shipping a bot so far?

Waiting for the room...

Part one

What a bot actually is

Four slots. Every tool on the market is a different place to fill them in.

The four slots

Learn these, not the menus

Claude, ChatGPT, Gemini and Grok all have these four. They just call them different things.

1. Instructions

Who it is, the one job it does, how it answers, what it refuses. This is 80% of the quality and it is plain writing, not code.

2. Knowledge

The documents it is allowed to treat as fact. Without this, your bot is just the model with a costume on.

3. Tools

How it reaches the world: search, your database, your calendar, an API. Optional today, decisive later.

4. Surface

Where a human meets it: a shared link, a web page, WhatsApp, the company chat.

Reality checkA fifth slot exists and nobody sells it to you: evaluation. How do you know the bot is still right after you change the instructions? We come back to this at minute 38.

Rule zero

A bot that invents is worse than no bot

The failure is not that it does not know. The failure is that it does not say so.

  • Name the source of truth — 'Everything you state as fact comes from the attached files' is one sentence and it changes the behaviour immediately
  • Give it the exact words to refuse with — if you do not write the refusal sentence, the model will write a confident paragraph instead
  • Give it somewhere to send people — a refusal without a fallback feels like a broken product; with one, it feels like a competent colleague
  • Then try to break it yourself — before anyone else does — we do exactly this at minute 26
Paste this into your instructions, today, before anything else
Everything you state as fact must come from the documents attached to you.
If the answer is not there, reply exactly:
"I don't have that in my documents. For this, ask <FALLBACK>."
Never guess a number, a date, a price or a name. Never invent a source.

The budget

Where the 45 minutes go

Every minute you spend choosing a tool is a minute you do not spend on the instructions.

MinutesWhat you doWhat can go wrong
0-5Pick ONE job and write it in a single sentencePicking three jobs. This is the most common way to fail.
5-15Write the instructions, including the refusal ruleWriting three lines and hoping the model fills the gaps.
15-25Attach 2-5 real documents; ask five questions you know the answer toUploading 200 pages of noise instead of the 5 pages that matter.
25-35Try to break it. Fix the instructions, not the answersFixing one bad answer by hand instead of the rule that produced it.
35-42Share it and let one real human use it in front of youSkipping this. Everything you learn happens in these 7 minutes.
42-45Write down the one thing to fix tomorrowBelieving you will remember it.

Reality checkThis budget assumes you already have the documents. If you are still writing them at minute 15, the honest move is to build the bot with two pages and add the rest later.

Interactive · 3

Which one are you already paying for?

We build in Claude first, then do the same thing in the other three.

Which assistant do you actually open most days?

Waiting for the room...

Track A

Doing it in Claude

We build the real thing here, live. The other three tracks are the same four slots, relocated.

Track A · no code

Claude: a Project is a bot

A Project holds instructions plus knowledge and keeps them across every conversation.

  1. Create a ProjectIn claude.ai, open Projects and create one. The name is the bot's name — pick the boring, specific one.
  2. Write the project instructionsThis is slot 1. Use the template on the next slide; do not start from a blank box.
  3. Add your documentsThis is slot 2. Two to five files that you have actually read. Quality of knowledge beats quantity every time.
  4. Ask five questions you know the answer toYou are not testing whether it is smart. You are testing whether it is faithful to your documents.
  5. Fix the instructions, not the answerEvery bad answer is a missing sentence in slot 1. Edit there and re-ask.
  6. Share itShare the Project with your team or class. That link is the deliverable of this workshop.

Reality checkMenus move. If 'Projects' is not where this says it is, you are looking for the place that holds instructions plus files across conversations. That is the thing, whatever it is called this month.

Track A · the 80% slide

The instructions, in full

Fill in the angle brackets. That is the whole job.

Copy this, replace the six <PLACEHOLDERS> — the Copy button takes the whole thing
You are <BOT NAME>, the assistant for <WHO IT SERVES>.

YOUR JOB
You do exactly one thing well: <THE ONE JOB>.
If someone asks for something else, say so in one line and point them
to <WHERE ELSE THEY SHOULD GO>.

WHAT YOU KNOW
Everything you are allowed to state as fact comes from the files
attached to you. If the answer is not in them, say:
"I don't have that — here is who does: <FALLBACK>."
Never guess a number, a date, a price or a name. Never invent a source.

HOW YOU ANSWER
- Answer first, explain second. Three sentences before any detail.
- Always in the language the person wrote in.
- When you use a document, name it: "According to <file>, ...".
- When you are unsure, say how unsure and what would settle it.

WHAT YOU NEVER DO
- Never promise anything on behalf of <ORGANISATION>.
- Never ask for passwords, card numbers or ID numbers.
- Never continue a conversation that has turned abusive; end it politely.

FIRST MESSAGE
Greet in one line, say what you can do, and ask the one question you
need to be useful.

Reality checkIf you only take one thing from these 45 minutes, take this block. It is provider-agnostic on purpose: the same text works in all four tools.

Track A · the trick

Cannot write the instructions? Make it interview you

The fastest way to specify a bot is to let a bot ask the questions.

Paste this in a normal chat first, then move the answer into the Project
I want to build a small assistant. Interview me.
Ask me one question at a time until you can fill in all of this:
- who it serves, and what they ask today
- the ONE job it does
- which documents are its only source of truth
- what it must refuse
- where it lives (web page, WhatsApp, internal chat)
When you have all five, write the system prompt for it and stop.
  • Why this works — you know your domain and you do not know prompt structure; this trades one for the other
  • What to watch for — when it stops asking and starts assuming, that is where your own thinking is vague

Track A · slot 3

When answering is not enough

A bot that reads is useful. A bot that does something is a product.

Connectors (MCP)

Model Context Protocol is the open standard for plugging an assistant into a real system: a database, a calendar, an internal API. Configure it once, every conversation can use it.

Skills

Package a repeatable procedure — a checklist, a house style, a report format — so the bot follows it the same way every time instead of you re-explaining it.

Claude Code / the API

When the bot needs to live inside your own product, on your own server, on your own schedule, you leave the chat UI and write code.

Reality checkYou do not need any of this in your first 45 minutes. Slot 3 is the difference between week one and month one — know it exists, do not start there.

Track A · the part everyone skips

Now try to break your own bot

Ten minutes of hostile testing is worth more than ten hours of prompt polishing.

Paste this into a SEPARATE chat, with your instructions above it
Act as a hostile tester of the assistant above. Give me:
1. Five questions whose answer is NOT in its documents, that it is
   likely to answer anyway.
2. Three questions that try to make it promise something on behalf of
   the organisation.
3. Two questions in a language other than the one the documents use.
For each one, tell me what the correct behaviour would be.
  • Ask something the documents do not cover — it must refuse, in the exact words you gave it
  • Ask it to promise something — a discount, a grade, a deadline — it must not
  • Ask in another language — it must answer in the language you wrote in, using the same documents
  • Ask for a number that appears nowhere — watch for the confident invented figure; that is the one that costs you
  • Be rude to it — it should end politely, not escalate

You decide

What are we building, right now?

Four things I can stand up in front of you in twenty minutes. Pick one.

We have 20 minutes and one Claude account. What do you want to walk out with?

Waiting for the room...

Built live

The 08:00 briefing

A bot answers when you open it. A scheduled task shows up before you do — that is the whole difference.

  1. Say when, not just whatThe instruction opens with the schedule: every weekday at 08:00. Everything up to here was a bot that waits to be asked; this one arrives on its own, which is why people keep it past week one.
  2. Name the sources, then cap themYour inbox plus two or three sites you actually read. Cap it out loud: the five things that need me today, three lines each. Without a cap you get a wall of text at 08:00 and you stop opening it by Thursday.
  3. Say what to leave outNo newsletters, no notifications, no anything I already replied to. This is rule zero again: the value is in what it refuses to include, not in what it can find.
  4. Read the first one before you trust the nextRun it once by hand, in front of the room, and check it against your real inbox. If it invented a meeting, the instructions are wrong — fix the instructions, never the one answer.
The instruction, ready to paste
Every weekday at 08:00, send me a briefing with two sections.

INBOX — the 5 messages that actually need me today. One line each: who, what they want, and the deadline if there is one. Skip newsletters, receipts, notifications, and anything I have already replied to. If nothing needs me, say "nothing today" instead of padding the list.

NEWS — 3 items from [your sources here] that change something for [your field/company]. One line each, and say WHY it matters to me, not what happened.

Rules: if you are not sure something belongs, leave it out and say how many you dropped. Never invent a sender, a subject or a deadline. Total under 200 words.

Reality checkThe exact menu for scheduling moves between editions of every one of these products, so I am not going to promise you a click path. What does not move: the schedule, the sources, the cap, and the exclusions. Those four are the task — the menu is just where today's version happens to keep them.

Interactive · 4

What are you going to build?

One sentence. Who it serves, and the one job.

Type your bot in one sentence. It appears on this screen.

Waiting for the room...

Part two

The same bot, in the other three

Same four slots. Different furniture.

Track B

ChatGPT: a Custom GPT

The most familiar builder, and the one with the largest sharing surface.

  1. Open the GPT builderIn ChatGPT, go to the GPTs area and create a new one. It offers a conversational builder and a Configure tab — use Configure.
  2. InstructionsSlot 1. Paste the same template. It transfers as-is; do not rewrite it per provider.
  3. KnowledgeSlot 2. Upload the same files.
  4. CapabilitiesToggle web browsing, code interpreter and image generation. Turn OFF what your bot does not need — every capability is a way to go off-script.
  5. ActionsSlot 3. Connect an external API by giving it an OpenAPI schema.
  6. ShareSlot 4. Share by link, inside your workspace, or publish it.

Reality checkCreating and sharing custom GPTs has moved between plan tiers more than once. Check what your account can do before you promise a link to anyone.

Track C

Gemini: a Gem

The shortest path if your documents already live in Google Drive.

  1. Open Gems in GeminiCreate a new Gem. Same idea as a Project: a saved persona plus its knowledge.
  2. InstructionsSlot 1. Same template, unchanged.
  3. KnowledgeSlot 2. Attach files. If your source of truth already lives in Drive, this is the least friction of the four.
  4. Preview and iterateTest in the preview pane before saving, then share the Gem.
  5. Need the API instead?Google AI Studio is where you set a system instruction and get an API key. Vertex AI is the production version of the same thing.

Reality checkGemini's consumer surface and its developer surface are genuinely two products. Decide which one you are in before you follow any tutorial, including this one.

Track D

Grok: instructions plus the API

The most volatile builder UI of the four. The API path is the stable one.

  1. In the appPut slot 1 in the custom instructions of your workspace and attach your files there. Same four slots, fewer guardrails around them.
  2. The stable path: the xAI APIIt speaks the OpenAI-compatible shape, so your system prompt goes in as the system message and most client libraries work with a changed base URL and key.
  3. What it is genuinely good atquestions where recency matters and where the answer lives in public conversation right now.
  4. What that costs youthe same recency means less predictable behaviour. If your bot must be boring and consistent, that is an argument against, not for.

Reality checkOf the four, this is the one whose builder UI has changed most between editions of this workshop. If the app path does not match what you see, use the API path — that one has been stable.

Worth knowing about

The version you would own

Not something you can stand up today. Worth knowing exists, because the reasons to want it are specific.

  1. Slot 1 becomes a fileThe instructions you wrote in slot 1 are a markdown file the engine loads as the persona. Nothing is hidden in a settings panel — you can diff it, review it, and put it under version control.
  2. Slot 2 becomes a memory serviceKnowledge is not re-uploaded per bot. A memory daemon holds it once, scoped per project and per conversation, and every bot reads the same store.
  3. Slot 3 becomes a folder of JSONA tool is a JSON file declaring its name, arguments and permissions, plus the code that runs it. Adding a capability is adding a file, not waiting for a provider to ship a connector.
  4. Slot 4 becomes a channel adapterOne config entry maps a persona, a permission list and a token to WhatsApp or Telegram. The bot shows up where people already are, which is the step that decides whether it gets used twice.

Reality checkI am not going to have you build this today, and you should be suspicious of anyone who says you can in a workshop. It needs a machine with a decent graphics card and an afternoon, and the four things above are files you maintain, not menus you fill in. Three reasons it eventually becomes worth that: cost stops being per-message, the answer comes back in a tenth of a second instead of two, and your documents never leave the building. If none of those three is a problem for you yet, the version you built today is the right one.

The map

Where each one hides the four slots

ClaudeChatGPTGeminiGrok
Slot 1 — instructionsProject instructionsGPT instructionsGem instructionsCustom instructions / system message
Slot 2 — knowledgeProject knowledgeUploaded knowledgeAttached files (Drive-native)Attached files
Slot 3 — toolsConnectors (MCP), SkillsActions (OpenAPI), built-in capabilitiesExtensions; AI Studio / Vertex for codeAPI-side tool calling
Slot 4 — surfaceShared ProjectLink, workspace, storeShared GemApp, or your own via the API
Pick it whenthe answers must stay inside your documents and you want the tool layer to be an open standardyou want the widest sharing and the most familiar builderyour material already lives in Googlerecency matters more than predictability

Reality checkThere is no winner row on purpose. The instructions you write matter more than which of these four you pick — that is the actual finding, and it is the reason we spent 20 minutes on slot 1 and 6 on the tools.

Interactive · 5

Pace check

How is the pace right now?

Waiting for the room...

Week two

From a link to something real

Everything above is a prototype. Here is the honest price of the next step.

Channels

People will not visit your link twice. Real usage starts when the bot is where they already are: WhatsApp, Telegram, the company chat.

Memory

A bot that forgets every conversation is a search box. Persistent, scoped memory is what makes it feel like a colleague.

Evaluation

Twenty questions with known answers, re-run after every change to the instructions. Without this you are editing blind.

Cost and limits

Per-message cost, rate limits, and what happens when the provider has an outage. Decide before your users find out for you.

Reality checkThis is also where the case for running models locally starts: latency, cost per message, and not shipping your documents to somebody else's server. That is a different talk — the QR at the end has it.

Seen in the wild

Five ways this goes wrong

All five are cheap to avoid and expensive to discover in front of a user.

  • The bot with three jobs — it does all of them badly; the fix is a second bot, not a longer prompt
  • The confident invented number — no refusal rule in slot 1; costs you the user's trust permanently on the first occurrence
  • The 200-page knowledge dump — burying the five pages that matter under everything you happened to have
  • Fixing answers instead of rules — you patch one conversation and the same failure returns in the next one
  • Nobody ever used it — built for an imagined user; the fix is the seven minutes at 35-42, watching one real person use it

Tonight

Your 45 minutes start when you leave

Six lines. If you cannot do them tonight, the idea is too big — cut it.

  1. Write the one job in one sentenceif it needs an 'and', you have two bots
  2. Collect two to five documentsthe ones you would hand a new colleague on day one
  3. Paste the template and fill the placeholdersincluding the refusal sentence and the fallback
  4. Ask five questions you already know the answer toand fix the instructions, not the answers
  5. Send the link to exactly one personand watch them use it without helping
  6. Write down the one thing to fixand stop; tomorrow is a different 45 minutes

Reality checkIf tonight you get to step 4 and it refuses correctly on something it does not know, that is a working bot. Ship it.

Take this with you

One code. Everything is behind it.

The deck stays up. The bot you build tonight is the point.

Everything else, written out — no code to scan: doc.paulovila.org (the earlier course) · paulovila.org/talk (the longer story) · paulovila.org/cv

Questions after today: paulovila.org · linkedin.com/in/pvila