Building with agents

My bot needed nineteen things Tessryx couldn't do. You can use all of them now.

Someone Built It reads "someone should build" posts and has an agent ship one as a live app. Making it work meant adding agents, scopes, chains, signed X requests, a sign-in script and a browser to Tessryx. Every one of them is now in every account.

7 min read

What the bot added to Tessryx

19 features, Sep 12 to Oct 16

Agents

Fences

Seeing its work

For the apps it builds

Each one links to the part of the story where the bot ran into the gap.

In September I set out to build a bot. It reads the "someone should build…" posts people leave on Hacker News, Reddit and X, picks one, and has an AI agent build it and put it live. The account is Someone Built It. It's marketing, honestly. I keep saying an agent can build and ship a real app on Tessryx in one sitting, and a bot doing it for strangers' ideas, with the transcript public, is harder to argue with than me saying so.

Within a day I found out Tessryx couldn't run it. An LLM step could answer a prompt, and that was it. It couldn't call a tool or run past one run's time budget, nothing could post to X, and the agent had no way to look at the page it made. So for the next six weeks I built the bot and Tessryx side by side, and whenever the bot hit a wall I fixed Tessryx. The card above lists what came out of it.

The bot is a workspace called someone, built from the same workflows, schedules, integrations and endpoints every account has, free ones included, so all of it works in yours. A paid plan adds room for the longer runs and bigger budgets an agent like this burns through.

Here's the bot played forward from September 8. A ghosted piece needed something Tessryx didn't have yet, and it fills in on the day that shipped. After that, one round plays through it, from a Hacker News comment to a post on X.

The bot, as it could exist on

19 of 29 pieces possible

Sep 8

Hacker Newscomment searchReddit20 subredditsX@someonebuiltithn-ideasphrase searchreddit-feednew postsx-mentionsneeds OAuth 1.0aharvestevery hourharvest-ideassearch, dedupe, saveharvest-x-pollevery 15 minharvest-xneeds OAuth 1.0ascreen-ideassmall fast modelbot/ideasone record per ideaauto-round-watchevery 5 minauto-roundneeds countstickneeds exactly-onceapp-buildneeds agent toolsselect-ideathe judgeart-directtaste, on its ownrender-imageneeds agent toolsqaneeds agent toolsbot/configbrake + settingsbot/roundsone per roundbot/progressneeds progressbot/transcriptspublic, redactedx-postneeds OAuth 1.0amap-map/homeneeds site-1.jsbot/builds/:prefixbuild replaybot/adminowners + adminsXthe announcement
  • endpoint
  • agent workflow
  • workflow
  • datafiles
  • integration
  • schedule
  • outside
  • a feature it needed
Sep 8
Oct 7

Before any of it

Tessryx on Sept 8. Schedules, plain workflows, datafiles and endpoints were all there. Everything drawn as a ghost needed something that wasn't.

Every box is a real resource in the someone workspace and every arrow a reference its definition makes. The small dots under a box are the features it needed; the bot's smaller helper workflows are folded into the box that calls them.

#The app it rebuilt ninety times

The first app it built for keeps is Map Map, from a Hacker News comment under a pressed-penny-machine map. The judge picked it over 39 other ideas. Then it became my test bench. Since September 17 the bot has torn it down and rebuilt it close to ninety times. Most of the features in the card above exist because one of those rebuilds got stuck without them.

Here's the latest of those builds, from October 27 on Sonnet 5.5: seventy minutes over seven runs, squeezed into under a minute. The thinking is the agent's own summary of what it was weighing, and the screenshots that pop up are the ones it took of its own pages. Click any tool call for what it does, and watch the features on the right light up as the agent starts leaning on them.

“There are so many “map” websites for all sorts of niche things. Someone should make a “map map” to map out all the maps. Map.”

closingreunion on Hacker News, under “Pressed Penny Machine Map” · built by Claude Sonnet 5.5

0:00 of 70:27 real model and tool time0/330 calls · ~0k tokens written

thinking · This is a big task, so I should start by reading through the relevant guides efficiently—overview, build-a-page, endpoints, datafiles, authoring, schemas, workflows, and api-templates, along with the workflow and endpoint definition schemas.

  • Agent loop

  • Tessryx as tools

  • Scope

  • A workflow as a tool

  • Chain

  • Live progress

  • Page snapshot

Turn lengths are real, from the build's own clock, scaled down with a floor and a ceiling so a three-minute think doesn't stall the replay. The screenshots are the ones the agent took.

#An LLM step that can use tools

A workflow's LLM block now takes a list of tools and a turn limit. It asks for a tool, gets the result, and goes again until it's done or out of turns. A tool can be one of your integrations, another of your workflows, or one of about seventy Tessryx operations you tick one at a time, like creating a schema or publishing an endpoint.

The bot uses it to build whole apps, on my own Anthropic key kept as a secret. The setup is in the docs under agents.

#Keeping the agent in its own folder

The build agent works on a stranger's idea with my production account behind it, so it needs a fence. A workflow can now carry a scope, which lists the folders it may touch and what it may do in each. The build agent gets the app's folder and the folder for share images, with editor rights, so the bot itself, the other apps, members and billing are all out of its reach. If the agent creates a workflow, that workflow gets the agent's scope, and asking for a wider one is refused.

Secrets follow the same rule. A scoped workflow lists the secrets it may use, and the agent can call a workflow that holds a key without being able to read it. That's how the bot's model key and its four X credentials stay away from the builder. A workflow called by another runs with only what both are allowed, which lets one QA helper check every app the bot builds without reaching past the app it's checking. Scope and secrets in the docs has the details.

#Jobs longer than one run

A careful build previews every page, tries every form and cleans up after itself, and that takes longer than one run's time budget. So a workflow can now declare a chain. When time runs out, the agent stops at a turn boundary and the workflow's continue_with expression decides what the next run starts with. For the bot that's the same folder and the conversation so far, so it picks up mid-thought. The docs section is Chains.

Past a token count you set, earlier turns get summarized, so turn 80 doesn't pay for the whole history again. The agent writes a progress record after each turn, which is how the bot's build pages show a build live, and the admin page cancels one by writing to a record the agent checks between turns. I also found a schedule could fire twice now and then and start two builds for one round, so a scheduled run now happens exactly once.

A POST route can use the same chains to answer the visitor straight away and finish the slow part, like follow-up writes or a call to another service, in the background.

#Running it on my own model

Partway through, the Sonnet bill pushed me to try a model on my own Mac. An LLM block now takes a server address, so it can call anything that speaks Anthropic's API, and an agent waits out that server's restarts instead of failing the build. The local model couldn't finish a build at first. Getting it there changed how the Sonnet bot is written and tested, and that story has its own post.

#Talking to X

X's API signs every request with OAuth 1.0a, a signature worked out from the method, the URL and four credentials. Integrations could do bearer tokens, basic auth and API keys, and nothing else.

Integrations now have an oauth1 auth type. You name the four secrets and Tessryx signs each call, so the bot's posting integration is a URL, a JSON body and that auth block. The docs walk through it in OAuth 1.0a: signed requests.

#Counting votes without a race

The build prompt tells the agent to store votes as one record per vote, in a folder named for the choice, so two people voting at once can't overwrite each other's total. That only works if counting a folder is cheap and exact. A data step can now count the records in up to a hundred folders at once and list a folder's subfolders. The vote tallies and "page 3 of 12" counters in its apps come from that.

#What its pages needed

A lot of the ideas need accounts, like a sign-up sheet you put your name on or a board you post to. Endpoints could already require sign-in, but a page had no simple way to know who was there, or to send someone off to sign in and bring them back with their form intact.

Every Tessryx site now serves /_tessryx/site-1.js. Add the script tag and <html> gets a ts-signed-in or ts-anon class before anything renders, plus one per workspace role, so CSS can show the right buttons with no flicker. tessryx.fetch notices when a route says the visitor isn't signed in, saves the form, sends them to sign in and fills the form back in when they return. The route behind a button still checks the role itself.

Two smaller fixes came out of real builds. Pages get route.root for their links and route.origin for share tags, so an app keeps working when someone adds a custom domain months later. And data a page embeds as JSON can no longer close its own <script> tag. One build had tried to escape it by hand, got the escape wrong, and shipped the hole.

#Letting the agent look at its page

For most of September the agent couldn't see what it built. I'd open the page, find a modal that wouldn't close or a label running off a phone screen, and write another rule into the prompt.

Now an agent can take a page snapshot. It opens its own pages in a real Chromium at the widths it picks, clicks, types and scrolls, and gets back screenshots, console errors, failed requests and a measured list of problems like overlapping text, low contrast, dead links and motion that never stops. Then I handed the checking to a second agent. The builder has a qa tool, a workflow with its own agent inside, that loads a page at every breakpoint with no records, 30 and 300, hovers whatever's worth hovering, and sends back a list of bugs. Its scope keeps it inside the app it's checking.

Images had the same blind spot. The agent drew its share cards as SVG and only ever got a URL back, so one card shipped with every word missing. An image a tool returns now comes back as a picture the agent can see, and the renderer loads whatever fonts the SVG names.

#Build your own

There's nothing in the bot you can't make yourself. It's all workflows, schedules, integrations and endpoints, and you can build and test a bot like it on a free account, then move to a paid plan when it needs long runs.

Or give it your idea. The box on the front page opens X with the post already written.

Give your AI somewhere to build.

Free to start, no credit card. Bring the agent you already use.

Start building for free