Name the problem. Set the bar. Build the agent.
When generalist agents fall short, equip them with a serverless harness to create custom agents and deploy them as tools, MCPs, or bots.
$5 of runs on us. Every new account starts funded. No card required.
apiVersion : recurse.run/v1alpha1 kind : Agent agent : prompt : prompt.md inputs : type : object properties : query : {type: string} speedup : type : number default : 2 task : type : string default : Optimize {{ input.query }}. outputs : type : object required : [result] properties : result : {type: string} tools : source : tools.py built_in : true register : search : ~ verify : ~
01 A stable contract
The engine refuses a manifest it does not recognize.
02 Define the job
The full manifest pins identity and runtime; the prompt defines what this agent does.
03 Specify the interface
The input schema validates each run, applies defaults, and resolves the full input before the model sees it.
04 A contractual result
Every successful run returns values that match the complete output schema.
05 Only the relevant tools
Cut the noise, only register pertinent functions to become tools alongside Recurse’s built-ins.
› Reconstruct the backpack in the photo. Start with primitives: get the proportions.
Level designer
Writes levels in your native schema, simulates each one, and reads the playthrough back. Failed pacing or reachability checks change the next layout; only levels that pass the simulation reach your editor.
RNA sequence designer
Designs candidate RNA sequences, measures their minimum-energy folds, and repairs only the bases implicated by each mismatch. When the search stalls, the parent agent changes the specialist rather than supplying an answer.
$ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ──
│ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ──
⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ──
├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ──
│ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ──
⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ──
$ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ──
│ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ──
$5 on us. Every new account starts with credit for your first runs.
Build a custom agent for your work
Your coding agent builds it; Recurse runs it. Talk with the founders about your use case.