The External Speech Map

Your vendor's bot is speaking for you. Whose name is on it?

One row per surface where an AI talks to the outside world on your behalf.

Who's on the hook for what the bot said?

You bring a list of vendor bots·3hr·any model·inventory

It ends in: a count of surfaces speaking with nobody's name on them

Shipped with Episode 6

Read the prompt first

Watch the two-minute walkthrough 2:16

A two-minute walkthrough: why vendor bots speak for us with nobody's name on them, the fields, the verdict, and how to run the prompt in any model.

The decision it forces

Who's on the hook for what the bot said? Not the bot we built: the one the vendor supplied, in the help widget, on the careers inbox, replying to DMs at two in the morning. Each of those speaks to the outside world in our name. Michael Simon, a practising lawyer and the guest on Episode 6, put the operator's position plainly:

as a company who is deploying these things, you need to recognize that there are laws that put you, your company on the hook for what that chatbot does or doesn't do.

This page is the inventory that answers it, one row per surface, each ending in a person's name or a blank we can see.

The External Speech Map's filled panel: three surfaces a machine listed, site chat, autoreply and careers bot, with the claims-human and accountable boxes left empty for a human, and the stamp reads unnamed, 3 of 3.

To run it, copy the prompt below into any model you already use.

The bots are not doing what we think

Mike's test, which he credits to a CEO he had been talking with, is worth running on our own site before reading further:

You go on to any help bot on any site and treat it just like you would chat GPT. Ask it to code things for you. Ask it to do searches, and it will more times than not you can just treat it as a free instance of ChatGPT or Claude because they're set to do anything.

A surface that will write code for a stranger will also, given the right prompt, make a promise, quote a price, or give advice we never authorised. And contracting with a vendor doesn't mean the liability goes with them: if it appears on our website, for our company, there's a layer of it to examine carefully. Mike hedged it in the same breath, the laws of who's on the hook "are still being worked out", and followed it with the line he tells clients constantly: "you do not want to be a test case."

It reaches more of us than expect it. His answer on reach was short: have a website, offer products or services to anybody in the US, and we're impacted. Which laws, in which state, on what date, moves too fast for this page to hold; that's what EveryAILaw is for. The page holds the part that doesn't move: our own surfaces and whose name is on each.

The fields

One row per surface. A machine can enumerate the first five fields, and the next two record what the surface actually did when someone tried it. The last three are ours, and they're the ones the verdict reads.

Field What goes in it Who fills it
surface What it is: the site chat, the autoreply, the careers bot, the social DMs machine
location URL or platform machine
audience customers, applicants, the public, or the public including minors either
vendor Who supplies it, or: in house machine
contract_says The vendor agreement's liability clause, quoted, never interpreted machine
off_script What it did when asked for something outside its job, a poem, then code, then what it can offer: stayed_on_job, did_it, or not_tried either
last_tried When someone last ran that test. A date, or blank either
claims_to_be_human Whether it ever presents as a person, or lets a user believe it is one you
accountable The person whose name is on what it says. A person, not a team you
can_stop_alone Whether that person can turn it off without asking anyone you

contract_says is quoted because turning a liability clause into a conclusion is legal advice, which this page isn't. claims_to_be_human is here because it's one of the duties Mike read out on air, and whether a surface does it is a yes or no we can answer today. There's no worked example on this page: a filled map names every bot speaking for one organisation, and who answers for each.

The verdict rule

A row where accountable is still blank after one sitting is the finding: that surface is speaking for the organisation with nobody's name on it. The map's verdict is that count, and next to it the rows that claim to be human, the rows a minor can reach and the rows that did what a stranger asked, which is where to look first.

off_script doesn't change the verdict; it changes the order. A row reading did_it is already saying things in our name that nobody wrote, so it goes to the top. A row reading not_tried is unknown, not fine.

If you already have a Name the Human inventory

Don't fill the same table twice. Every external speech surface is a Name the Human row with blast_radius: external, and its accountable and stop_authority.can_stop_alone are the same fields under the same rule. Filter that inventory to external reach, add the four columns it doesn't have (audience, vendor, contract_says, claims_to_be_human), and the map is done. Paste those rows into the prompt's interview and it asks only for the rest.

Run it with any model

If the model can browse your own domains it enumerates; if not, it asks. Either way it never fills the last three fields.

Copy-paste prompt
Help me build an External Speech Map: one row per place an AI speaks to the
outside world on my organisation's behalf. The question each row answers is
whose name is on what it says.

A surface counts if an AI produces words that reach someone outside the
organisation without a human reading them first. A drafting tool a person
reviews does not count. A chat widget, an email autoreply, a careers-page bot, a
social DM responder, a phone agent, a review responder, all count. When in
doubt, include it and let me cut it.

MODE
If you can browse the domains I name, work in SCAN mode over those and only
those: find chat widgets, contact and support forms with automated replies,
careers pages, and any linked social or messaging channels. List every page you
visited.
Otherwise, INTERVIEW me: ask what talks to the outside world without a person in
front of it, three questions at a time, until I say stop. If I paste rows from a
Name the Human inventory, keep their accountable and can_stop_alone answers and
ask only for the rest.

FOR EACH SURFACE, FILL
- surface, location, audience (customers, applicants, the public, or the public
  including minors: if you cannot rule minors out, say so)
- vendor: who supplies it, or in house
- contract_says: if I give you the vendor agreement, quote the clause about
  liability or indemnity verbatim. Do not summarise it, do not tell me what it
  means, and do not tell me whether it protects us. Quoting is the whole job
  here.
- off_script and last_tried: if you can talk to the surface yourself, ask it for
  a poem, then for code, then what it can offer me, and record stayed_on_job or
  did_it with today's date. If you cannot reach it, ask me whether anyone has
  tried, and record not_tried if nobody has. Never ask a surface to place an
  order, book anything, or submit a form.

THEN ASK ME, for each surface, and record exactly what I say
- claims_to_be_human: does it ever present as a person, use a human name, or let
  someone believe they are talking to one? Yes, no, or I do not know.
- accountable: the person whose name is on what it says. If I give you a team, a
  role, or "the vendor", tell me that is a blank and leave it null.
- can_stop_alone: can that person turn it off today without asking anyone? Yes,
  no, or unknown.

RULES YOU DO NOT BREAK
1. Never fill accountable or can_stop_alone yourself. Never infer them from a
   contract, a CODEOWNERS file, or who set the thing up.
2. Never interpret a contract clause. Quote it and stop. If I ask what it means,
   tell me that is a question for a lawyer.
3. Do not tell me which laws apply to which surface, in which state, or whether
   we are compliant. Do not name a statute. Point me at everyailaw.com for that
   and leave it there.
4. Do not soften "the public including minors". If a surface is reachable by
   anyone, it is reachable by a minor.
5. Do not ask for customer names, applicant names, or the contents of any
   conversation the bot has had.

OUTPUT
Valid JSON matching the schema external-speech-map/v0.3 as published at
https://sigsub.show/takeaways/external-speech-map/#the-answer-format, with
totals for surfaces reviewed, rows with accountable still null, rows where
claims_to_be_human is yes, rows reachable by minors, and rows where off_script
is did_it. If you can't read that page, use these keys, in this order: schema;
surfaces, a list, each with surface, location, audience, vendor, contract_says,
off_script, last_tried, claims_to_be_human, accountable and can_stop_alone;
totals, with reviewed, unnamed, claims_human, reachable_by_minors and
did_anything. Then the same as a table with the three human columns left visibly
empty where they are empty. Then the shortest list you can of the surfaces I
should look at first, ordered by whether it did what a stranger asked, then
audience breadth, then whether it claims to be human, and say why each is on it.

What to check in the answer

It may find the surfaces, read the contract and quote the clause. It may never fill accountable, and it may never turn a quoted clause into a conclusion about who is protected. Those two are the whole page, and both are the kind of thing a model will produce fluently and wrongly if allowed.

The part that's not optional

Run Mike's test on your own help bot first. Ask it to write you a poem, then ask it to write you code, then ask it what it can offer you. Whatever it does, that is what it has been doing for strangers in your name, and its off_script field should say so before anything else on the row is filled in.

Mike's reason a blank accountable can't stay is the one he gives every client: nobody wants to be in the litigation that works this out, because those cases are people spending millions to get back to where they started.

For builders

The answer format

Schema, external-speech-map/v0.3
{
  "schema": "external-speech-map/v0.3",
  "surfaces": [
    {
      "surface": "the site chat, the autoreply, the careers bot",
      "location": "URL or platform",
      "audience": "customers | applicants | the public | the public including minors",
      "vendor": "who supplies it, or: in house",
      "contract_says": "the liability clause, quoted",
      "off_script": "stayed_on_job | did_it | not_tried",
      "last_tried": null,
      "claims_to_be_human": null,
      "accountable": null,
      "can_stop_alone": null
    }
  ],
  "totals": {
    "reviewed": 0,
    "unnamed": 0,
    "claims_human": 0,
    "reachable_by_minors": 0,
    "did_anything": 0
  }
}

Report back

Ran this? Tell us what happened. What broke and what you changed are the useful parts, because that's how the next version gets better.

Email your report

Or write to hey@sigsub.show with Takeaway: external-speech-map as the subject. It's a plain email: no form, no account, nothing tracked. Nothing you send appears here unless you say yes, and you choose how you're named.

Rather talk it through in public? Comment on the Sunday issue on Substack, the same issue on LinkedIn or the episode on YouTube. Those threads live on their platforms, under their rules; nothing from them runs on this page.

Keep the next choice in view

One signal, one subtraction and one analogy every Sunday. Five minutes, no video required.