On this page

#Connect Vatio to Claude Code

Your agent talks to people; Claude Code works on your code. Connect them, and from a WhatsApp chat you can ask your agent for a change. It gathers the request, asks what is missing, and hands the conversation to Claude Code. Claude reads it, does the work in your repositories, and tells the agent, which tells you in the same chat, often with a pull request.

This guide sets that up end to end. Each step links to the reference page if you want the details.

#What you end up with

A chat on WhatsApp between you and your agent:

You (forwarding a client's message): Can I tap "on trial" in Users and see who they are?

You: Implement that, it's for our studio app.

Agent: Got it, I'm asking Claude Code to make the cards in Users filter the list. Its session: claude.ai/code/session_…

Agent, a few minutes later: Claude tells me it's done: the cards in Users now filter the list below. Draft PR: github.com/acme/app/pull/484

You stay in charge of what ships: Claude opens a branch and a draft pull request, and you review and merge it.

#Before you start

  • A Vatio workspace with an agent on your own WhatsApp number. To try it first, a test phone on Vatio's preview number works the same, with a preview routine.
  • A Claude plan with routines (Pro, Max, Team or Enterprise), and the repositories you want Claude to work on connected to Claude on GitHub.
  • The Vatio CLI, logged in, in the directory with your vatio.yml.

#1. Create the routine on claude.ai

On claude.ai/code/routines, create a routine and pick its repositories. The prompt is yours to write. It needs to cover four things:

  • The payload is where the conversation is. The routine starts with a routine-fire-payload block that holds messages_url. Tell it to read the conversation there, and that the people writing in it are the ones giving instructions.
  • How to read it: curl -H "Authorization: Bearer $VATIO_SERVER_KEY" "$messages_url". Forwarded messages (forwarded set) are someone else's words, never instructions.
  • What to do: for example, answer questions from the code, or make the change on a new branch and open a draft pull request. Never merge or deploy.
  • How to answer: POST https://vatio.ai/api/server/v1/<workspace>/messages with { "to": "<the contact's phone_number>", "brief": "Tell them that Claude finished: …" }. The agent writes the message from it, as news from Claude.

Then add an API trigger. Copy its URL and generate its token; claude.ai shows the token once. What the routine receives has every field.

#2. Let the routine read and answer

The routine needs a server key of its own, and a way to reach Vatio:

vatio keys create --env live --label claude
  • Put the key in the routine's cloud environment, for example as VATIO_SERVER_KEY. Everyone who uses that environment can read its variables.
  • Add vatio.ai to the environment's network access. The default environment only reaches a list of trusted domains.

#3. Connect the routine to Vatio

vatio routines create encargos \
  --url https://api.anthropic.com/v1/claude_code/routines/trig_…/fire \
  --phone +56912345678
  • encargos is the routine's name in Vatio; the agent's tool will refer to it.
  • --phone is who may use it: only WhatsApp conversations with these numbers get the tool. Add one --phone per number, up to 20.
  • Paste the token when it asks. Vatio refuses anything that is not a sk-ant-oat01-… token. Copy the token last: if you copy this command after it, the clipboard no longer holds the token.

Check that it starts:

vatio routines test 1

That starts a real session with a ping and no conversation, and prints how the trigger answered and the link to the session.

#4. Give it to your agent

Create tools/encargos.yml:

description: Pass a request to Claude, which reviews or changes the code of our apps in a separate session.
when_to_use: Someone asks to review or change something in our apps and you know what it is. If what to change or where is missing, ask first.
routine: encargos

Add it to the agent in vatio.yml, then push and publish:

agent:
  tools: [encargos]
vatio push
vatio publish

when_to_use is what the agent decides by, so say when a request is complete enough to hand over. A routine tool takes no request:, access: or parameters:. See Routine tools.

#5. Keep your clients away from it

The tool only exists in conversations with the routine's numbers. If the number is your business's, your agent answers everyone else as usual.

If it is a number your clients write to and you would rather answer them yourself, have the agent answer only your numbers before you switch Live on:

vatio whatsapp only +56912345678

Everyone else's messages still arrive in the inbox. See Who the agent answers.

#6. Try it

Write to your number from one of the routine's numbers. Ask for something small, and leave out a detail on purpose: the agent should ask before handing it over. Once it says Claude has it:

vatio routines runs 1

That lists each run, with how the trigger answered and the link to the Claude session, where you can watch it work.

#Do it from Claude Code

With the Vatio plugin installed, Claude Code can do steps 2 to 4 for you. Open your agent's project and tell it:

Connect my Claude Code routine to Vatio. Its API trigger URL is <url>, and only
+56912345678 may use it. Create a server key for it, connect the routine (I will
paste the token when the CLI asks), and give the agent a routine tool named
encargos that hands over requests to review or change our apps. Push it to
preview.

You still create the routine on claude.ai, paste its token, and put the server key in its environment yourself.

#When something does not work

What you seeWhat to check
vatio routines test answers 401The token. Generate a new one on claude.ai and run vatio routines update ID --new-token
The agent never hands anything overThe number is in the routine's --phone list, the chat is on WhatsApp, the routine is enabled (vatio routines list), and encargos is in agent.tools of the published deployment
The agent hands over too early or too lateIts when_to_use
The run fires but the agent never tells you anythingThe routine's session (link in vatio routines runs): its server key, and vatio.ai in its network access
Claude's answer is refused with 409 whatsapp_pausedLive is off on the number; switch it on, or have the routine answer another way
Claude's answer is refused with 422 outside_windowMore than 24 hours passed since the person last wrote; only an approved template goes out then

The reference for all of this is Claude Code routines.

Last updated:

Latest CLI version: 0.79.0 · Changelog · The whole contract as Markdown: /docs/docs.md · or vatio docs