Check a price and send it on WhatsApp

This agent came from one screen recording: open the idealo price-comparison page for a PS5 Slim Digital Edition, read the price, and send it to a contact on WhatsApp. Ditto AI turned that into two steps, a read-only headless browser for the public page and a WhatsApp tool with write access, and denied everything else.

What it does

Someone asks what a product costs today. The agent opens the price-comparison page you opened, reads the price, and sends it to the same contact on WhatsApp. It's the shape of any "check a number, tell a person" chore: a price, a stock level, an exchange rate, a delivery date.

It was recorded once on our own Mac, with nothing written by hand. What follows is what Ditto AI exported, quoted rather than tidied up.

The steps, as Ditto listed them

When this runs: "Request for an updated PS5 price check"

#StepTool it must use
1navigatethe headless browser: open the idealo offers page for the PS5 Slim Digital Edition
2reportWhatsApp

Success, as recorded: "PS5 price today 579 now". That was the price on the day of the recording; a run reads the page again and reports what it says then.

The procedure also carries Ditto's standard failure rule: a read-only step that fails may be retried or done with a different call on the same server, but a step that sends anything must not be retried or rerouted. The agent stops and reports what differed instead.

Tools and what each may do

ToolAccessHow it's reachedSwappable for
idealoreadthe headless browser, since it's a public pagenone
WhatsAppwritewazap-mcp, an MCP server from npmai.darkfunnels/whatsapp-sales-agent, as listed by the app

The idealo page is public, so it needs no account and no MCP server: Ditto opens it in one headless browser with a fresh, in-memory profile. Sending a WhatsApp message needs your own account, so that step gets a real integration, found in the MCP registry and npm. Before a server like that counts as working, Ditto starts it and makes one read-only call; it never sends a message to test it.

The permission policy

Derived by table lookup from what the recording actually did. Nobody wrote it.

ALLOW  idealo                                 read
ALLOW  WhatsApp                               write
DENY   *

The agent may use these two tools and nothing else. Access is set per tool, not per action: the WhatsApp tool is allowed as a whole, with write access, because sending is what the recording did.

What the export looks like

For Ditto's own runner the agent is a folder with two files: SKILL.md, the procedure above, and opencode.json, which attaches the two tool servers:

"mcp": {
  "browser":  { "type": "local", "command": ["npx", "-y", "@playwright/mcp@latest",
                "--browser", "chrome", "--headless", "--isolated", "--user-agent", "…"] },
  "whatsapp": { "type": "local", "command": ["npx", "-y", "wazap-mcp"] }
}

Installed into Claude Code or Kiro instead, the same procedure becomes a skill, the same servers go into that tool's MCP config, and the policy becomes its allowlist.

Honest limits

  • wazap-mcp is a community server, not a WhatsApp product. Its npm description says it works over Baileys with a pairing-code login: you link it from your phone the way you'd link WhatsApp Web. Read its README before you connect an account you care about.
  • The page is fixed. The recording used one product's page, so that's the page the agent opens. To watch another product, record it once with that page, or change the step in review.
  • Sending is a write. With "Ask before it creates, sends or changes anything" turned on, every message is shown to you as a draft first.

Build your own

Record the version of this you actually do: the page you check, the person or group you tell. Ditto works out the steps, finds the tools, and shows you the policy before anything runs. How it works covers each stage.

Do it once. Then hand it off.

Record a task on your Mac and Ditto AI builds the agent. You read it before it runs.

macOS 15 or later · Apple silicon · Opening it the first time