Skip to content

In development

Nobody opens it. That is the point.

PawPost Agent watches a shelter's adoption list page on its own. When a new animal appears, it produces a ready-to-post vertical video with narration and captions, then interrupts a person only when there is a real decision to make.

See it run

One animal, start to posted.

A full cycle: the agent finds a listing, chooses photos, writes and checks a script, then stops to ask before it spends a render.

Why an agent and not a script

Most of the work is mechanical. Four parts are not.

Importing a listing, uploading photos, queueing a render — those steps are deterministic, and looping them would be a shell script rather than an agent. Four decisions in the pipeline genuinely require judgement, and those are the only ones the agent is trusted with.

Everything else is a tool it sequences without deliberating over.

  • Whether to post at allListings carry status in plain prose: rescue only, medical hold, bite history. A rescue-only animal must never get a public adoption video, and a keyword filter cannot tell the difference.
  • Which photos, in what orderA scrape returns up to twelve images mixed with logos, text cards, and shots through cage bars. The agent sees the actual images and picks the few that show the animal, lead photo first.
  • Whether the script will surviveNarration is capped as spoken, not as written, and “12 lbs” becomes “twelve pounds.” The agent measures both and tightens the copy before a render slot is wasted.
  • What a failure meansA gated listing, a page it cannot parse, and a rate limit each need a different response. Collapsing them into “failed” discards the only useful information available.

Human in the loop

It asks before it acts.

Rendering a video is gated. The agent pauses, writes the question to disk, and exits. The process that asks does not have to be the process that hears the answer, so you can restart the agent and the question is still waiting.

A blocked animal never blocks the queue. The next cycle picks up someone else while that one waits for a person.

  • Approve or decline from a dashboard or the command line
  • Every judgement logged with its reasoning and rejected alternatives
  • Questions survive a crash or a restart
  • Holds no shelter credentials and no database access

Where it stands

Honest about the edges.

The agent runs end to end today against a single animal listing. Two things are still open before it can watch a whole shelter unattended.

Works now

Point it at one animal's listing page and it imports the details, picks and orders the photos, writes the script and captions, asks permission, and produces the finished video.

Open: list pages

Most shelter list pages build their animal grid in the browser after load, so there is nothing for a plain reader to extract. Watching a full shelter needs a rendering browser or a per-shelter data feed.

Open: hosting

It runs as a long-lived local process with a loopback-only dashboard. A hosted version needs authentication on the approval surface before it can be exposed.

Open source

Built on the Strands Agents SDK and published under the MIT license, so the decisions above can be read rather than taken on trust.

This page describes work in progress. The post creator is live and free to use today — the agent is the same pipeline with the clicking removed.

Run a shelter? Tell us what would have to be true for you to trust this.

Contact PawPost