OpenClaw 2.0 hackathon Submit your agent by September 24.·11:59pm PT on the Agent Index Learn more

Build and deploy an agent you can text, in 10 minutes

View on GitHub

The fastest path is to hand the Plow setup prompt to your coding agent. Prefer to see every step? The walkthrough below builds your image, pushes it, and deploys it to Plow.

1
Install

Get the plow-agents CLI and log in

Clone the CLI repo, put its bin on your PATH, then log in and list the phone lines an agent can be deployed on. Keep the ID of a free line for step 5.

git clone https://github.com/plow-pbc/plow-agents.git
export PATH="$PWD/plow-agents/bin:$PATH"
plow-agents login   # text the activation phrase to the number it prints
plow-agents lines   # note a free line ID (ln_xxx)
2
Prepare

Bring your own agent, or start Plow-ready

Any container works. Your image reads PLOW_API_BASE from its environment and sends PLOW_AGENT_TOKEN as a bearer when it is set, and its CMD is PID 1. That is the whole contract.

Dockerfile
FROM python:3.11-slim
COPY agent.py /agent.py
CMD ["python", "/agent.py"]
Would rather not package it yourself? Start from a Plow-ready runtime such as the Hermes base, which has the Plow pieces wired in already. Keep credentials out of the repo and the build: add /plow-credentials to both .gitignore and .dockerignore.
3
Build

Build the image

Plow's VMs are amd64, so the image is built for linux/amd64.

plow-agents image build ghcr.io/YOUR_ACCOUNT/my-agent:v1
4
Push

Push it to a public registry

Plow pulls anonymously, so the package has to be public. Log in to the registry with a classic PAT carrying write:packages, then push.

docker login ghcr.io -u YOUR_GITHUB_USERNAME
plow-agents image push ghcr.io/YOUR_ACCOUNT/my-agent:v1
After the first push, make the package public in your registry settings, then copy the full repository@sha256:… reference from the last line of output. Plow deploys by digest, never by tag: a tag names different bytes next week.
5
Deploy

Deploy it to Plow

Hand Plow the digest and the free line from step 1. Plow creates the VM and returns; it does not wait for your agent to boot.

plow-agents deploy ghcr.io/YOUR_ACCOUNT/my-agent@sha256: --line ln_xxx
plow-agents agents   # poll until the status is running
This is where the agent runs: on Plow, not on your machine. To deploy a Plow-ready listing instead of your own image, pass a slug: plow-agents deploy exe:hermes --line ln_xxx.
6
Chat

Text it

Once the status is running, text the number plow-agents lines shows for that line. When it replies, your hosted agent is live. A failed status prints the failure code beside it.

Your agent is live.

It is hosted on Plow, and it answers over chat from your line.

Full flow and troubleshooting live in the plow-pbc/plow-agents README.

Develop locally when you need to.

You can run the same agent on your own machine with Docker Compose while you work on it. Use this for development and debugging. The deployed agent runs on Plow.

Local

Run it with Compose

Copy the example Compose file into your agent repository, claim a free line, and bring it up.

curl -fsSL https://raw.githubusercontent.com/plow-pbc/plow-agents/main/compose.example.yml -o compose.yml
plow-agents lines
plow-agents deploy --local --line ln_xxx
docker compose logs -f

When you are finished, release the line and tear the stack down.

plow-agents revoke
docker compose down -v

Start from a working agent template.

Clone a base image or a full example, then make it yours. Every template is a real repo.

Base image

Hermes agent

plow-pbc/plow-hermes-agent

The preconfigured Hermes runtime with the chat plugin ready. The default starting point.

Use this template
Example

Life assistant

plow-pbc/life-assistant-hermes-agent

A fuller example with instructions, skills, and tools wired up for everyday tasks.

Open example
Copied