Working build ยท 2026

evolvBot

Giving AI agents a body in the physical world.

An extensible platform where an agent designs, fabricates, and grows the body it needs โ€” imagining in simulation, printing components, ordering parts. The first build works: it finds a TV remote and puts it back on the table.

โ–ถ Watch it work Build the robot โ†’
Read the brief
01 The Vision

Today's AI agents think and act in software. evolvBot gives them hands.

Perception and reasoning have outrun embodiment. evolvBot is the platform where an agent doesn't just use a fixed body โ€” it designs, fabricates, and grows the body it needs to finish a job, then tests the result against reality.

Vision

Enable AI agents to fully operate in the physical world.

Agents that act on matter, not just bits.

Mission

An extensible platform for an agent to evolve its physical self.

By printing components, ordering parts, and imagining solutions in simulated worlds.

The core loop
01
Imagine
Reason about what's missing; design a fix inside a physics sim.
โ†’
02
Fabricate
3D-print the part, or order what it can't make.
โ†’
03
Embody
Attach it and test the new capability for real.
โ†’
04
Evolve
Feed results back; capability compounds.
02 Phase 0 โ€” the system

An agent that extends its own reach, in simulation.

The smallest honest slice of the vision. A minimal robot body has a target it cannot reach. Claude imagines a bolt-on extension; a PyBullet simulator tests it; the result feeds back; the agent refines until it reaches โ€” one closed loop, need โ†’ design โ†’ test โ†’ evolve.

Read the full implementation plan โ†’
reach + part = L+d bare reach = L ฮธ link ยท L mount frame part ยท d target (R)
Why 1-DOF makes the design problem honest

A single revolute joint with a straight rigid extension can't change its radius โ€” the effective tip traces a circle of radius L + d. To hit a target at radius R, the agent must design d โ‰ˆ R โˆ’ L: too short and too long both miss. That forces precision (not "long enough"), makes both error directions meaningful feedback, and makes minimizing material a real objective.

# reach test โ€” sweep the joint angle ฮธ across its range bare reach = L effective = L + d # 1-DOF, straight extension reached โ‡” | R โˆ’ (L + d) | โ‰ค ฮต โˆง ฮธ โˆˆ [ฮธmin, ฮธmax] โˆง no collision
Architecture

Six small units, each with one job and a clean interface. The Claude call sits behind a Designer protocol, so the whole loop runs โ€” and is fully tested โ€” with no API key.

ModuleOne jobInterface
body.pyDefine the minimal body + attachment interfaceBody, MountFrame, forward_kinematics(ฮธ)
problem.pyCompose a taskProblem(body, target, constraints)
part.pySpec โ†’ geometry + artifactbuild_part(spec), export_stl()
sim.pyTest a part in PyBullettest(problem, part) โ†’ TestResult
designer.pyPropose the next partClaudeDesigner ยท FakeDesigner
loop.pyOrchestrate the cyclerun(problem, designer, max_iters)
loop.py โ€” the closed loop
for i in range(max_iters): spec = designer.propose(problem, history) # Claude โ†” structured output part = build_part(spec) # geometry (+ real STL) result = sim.test(problem, part) # PyBullet reach test history.append(Attempt(spec, result)) if result.reached: break # need โ†’ design โ†’ test โ†’ evolve
The core abstraction โ€” the body โ†” part seam

Phase 0 deliberately defines the minimal body and the attachment interface where every future part bolts on โ€” the seam the whole platform is built around. A part fixes rigidly to the MountFrame; its far end becomes the new effective end-effector. In Phase 2 a real mechanical connector maps onto this same frame.

body: base โ†’ joint โ†’ link โ†’ MountFrame โ†’ designed part โ†’ new reach
part.py โ€” Claude's structured output
class PartSpec(BaseModel): length_cm: float # 0โ€“40 tip_angle_deg: float = 0.0 # โˆ’90โ€“90 diameter_cm: float = 2.0 # 0.5โ€“5.0 rationale: str # reasoning, logged
sim.py โ€” the result
@dataclass class TestResult: reached: bool distance_cm: float radial_error_cm: float # ยฑ over/under collided: bool notes: str # โ†’ feedback

Ranges are validated client-side with Pydantic (the structured-output API ignores min/max); an invalid or unbuildable spec becomes a failed attempt with feedback, never a crash. The reach test is a deterministic ฮธ-sweep (1ยฐ steps) over the joint range โ€” no IK solver โ€” so it's trivially unit-testable.

The designer โ€” Claude in the loop
  • claude-opus-4-8 via the Python anthropic SDK.
  • Structured output โ€” messages.parse(output_format=PartSpec); every proposal is a validated spec.
  • Adaptive thinking โ€” thinking={"type":"adaptive"}, effort="medium" for the "imagining."
  • Prompt caching โ€” the stable system prompt is cached; only the per-iteration attempt history varies.
  • Feedback โ€” each round, a plain-language critique derived from TestResult ("short by 8.2 cm", "overshot by 3.0 cm").
Testing โ€” deterministic by design

FakeDesigner returns scripted specs, so loop, sim, and part are tested offline, $0, CI-safe: d=15cm โ†’ reached, d=5cm โ†’ short, d=30cm โ†’ overshoot; [short, correct] โ†’ reaches on iteration 2. The only non-deterministic seam โ€” ClaudeDesigner โ€” is one key-gated smoke test.

Stack & definition of done
Python 3.11PyBulletCadQuery โ†’ STL Pydanticanthropic SDKclaude-opus-4-8
  • Loop closes on a real reach in โ‰ค 6 iterations with ClaudeDesigner.
  • Every iteration logs the spec + rationale + feedback.
  • Exports a print-ready .stl of the winning part and a GIF of the reach.
  • Deterministic tests pass with no network access.

All tooling is free/open-source; the only metered cost is the Claude API โ€” a few cents per full run, $0 on the offline FakeDesigner path.

03 It works

Built end-to-end in simulation โ€” it finds the remote and puts it back.

The full loop runs as one pipeline: perceive โ†’ navigate โ†’ evolve the arm (within budget) โ†’ grasp โ†’ place. The minimal robot can't reach the floor, so it designs a longer arm, orders the parts, swaps it on, and finishes the job โ€” all offline, $0, with 51 tests green.

evolvBot finding the TV remote and placing it on the table, in simulation
The run. Find the remote โ†’ drive to it โ†’ evolve the arm (order a 30+28 cm arm for $16.70, under the $100 cap) โ†’ grasp โ†’ drive to the table โ†’ place it on top.
Six key frames from the robot's onboard camera with live detection overlays
From the bot's eyes. Six key frames from the onboard camera. The teal box + red crosshair are the live colour detection; the numbers are the 3D position it back-projects through depth. You can watch its own arm reach in frames 3โ€“6.
~2 cm
perception error โ€” camera + depth back-projection
$16.70
arm parts ordered, of a $100 cap (< $10/part)
M0โ†’M6
engine โ†’ 3D arm โ†’ mobile โ†’ grasp โ†’ evolve โ†’ perceive โ†’ task
51 โœ“
tests passing, fully offline & $0
Honest about what's real

Everything above runs in a PyBullet simulation. The two real-world hooks are built but gated: a Claude-vision detector (Claude reads the frame instead of colour-thresholding) runs with an API key, and a real Bambu X1 print generates the STL here but only prints from the home environment on an explicit OK.

04 Real physics

Then we made the contact real โ€” and taught it to clean a window.

We ported the world to MuJoCo so grasping is physical, not a kinematic weld: the jaws close, friction carries the object, gravity settles it. Two new acceptance tasks prove it โ€” both shown here from the robot's own onboard camera. The arm is a plain serial chain โ€” a shoulder yaw, then shoulder, elbow and wrist pitch joints โ€” with a dark housing on each hinge so you can see exactly where it pivots.

Acceptance A โ€” a real grasp. The contact gripper closes on the remote, friction holds it through the swing, and it's released onto the table where gravity settles it. No weld โ€” it could slip or drop, and it has to actually hold.
Acceptance B โ€” clear a window. The pane is taller than the arm can reach from its default mount, so the robot evolves a vertical lift, drops its carriage to the sill, and rasters the whole pane in sustained sliding contact โ€” the wet cloth (blue pad), then a dry one (yellow pad). Coverage is scored edge-to-edge from real contact points: 100% on both passes, sill to header.
no weld
grasp held by real friction + contact, in MuJoCo
100% ร—2
window covered โ€” wet pass & dry pass, no missed spot
$9.50
two wiper cloths ordered (each < $10, $100 cap)
77 โœ“
tests passing, fully offline & $0
Why MuJoCo

Wiping needs sustained sliding contact โ€” impossible to fake with a weld. MuJoCo gives real contact, friction, and metric-depth cameras, so perception reads something camera-like and the hands actually have to grip. Same Claude-driven loop, same three swappable seams (designer ยท fabricator ยท detector) โ€” just an honest body.

05 The robot

Now we're building it โ€” a real machine you can print and bolt together.

The simulation above is the digital twin of a physical robot, part-for-part. The basic body is exactly the parts that pass the two acceptances โ€” a 4-DOF arm on a vertical lift with a magnetic tool-changer that swaps a wiper and a gripper, on an ESP32-CAM base. Every chore beyond it is a rung on an evolutionary ladder: each milestone bolts on one new printed or ordered part, and a task can't be attempted until the parts below it exist.

Rendering of the evolvBot basic body โ€” a 4-DOF arm on a lift with a wiper, on a teal base
The basic body (M0). Yaw + shoulder + elbow + wrist (links 28 / 24 / 14 cm, ~66 cm reach) on a 0โ€“10 cm Z-lift, with the quick-change wiper / gripper. This is the MuJoCo model made physical โ€” it passes both acceptances and costs $78 to build, every part under $10.
The evolutionary ladder โ€” six stages
M0 robot render
Acceptance โœ“
M0 ยท Reach & Wipe
Arm ยท Z-lift ยท tool-changer ยท wiper/gripper. Clean a window; remote on the table. T1โ€“T7
M1 robot render
In sim โœ“
M1 ยท Mobility
+ a mobile base. Now drives across the room, collision-free (T8, T11) โ€” proven in sim below. Push & carry next.
M2 robot render
Planned
M2 ยท Floor care
+ a floor squeegee + coverage. Sweep and mop a zone. T12โ€“T14
M3 robot render
Planned
M3 ยท Force
+ a torque wrist + base anchor. Open a drawer, a door. T15โ€“T17
M4 robot render
Planned
M4 ยท Payload
+ a carry deck + pour spout. Carry a tray, water a plant. T18โ€“T20
M5 robot render
Planned
M5 ยท Stairs
+ tri-star wheel clusters + a tail. Climb a flight, carry up. T21โ€“T24

Dependency: M0 โ†’ M1 โ†’ {M2, M3, M4} โ†’ M5. 24 graded tasks double as the physical tests and the milestone steps.

M1 just went live in sim โ€” it moves. The base plans a collision-free route around the wall and drives across the room to the goal (green pad). It stows its arm first โ€” folded inside the base footprint โ€” so no part of it sweeps into what it passes. And "collision-free" isn't the planner's word: it's scored from real MuJoCo contacts over the whole robot โ€” base, every arm link and the tool โ€” against the wall: zero touches, the whole 2.4 m. The rule is strict everywhere now: the robot may touch only the floor and the thing it's working on. Carrying a grasped object while driving is the next step.
Parts to buy โ€” the M0 shopping list

Every line is under $10 and either off-the-shelf or home-printable โ€” the project's budget rule, kept in the real world.

PartQty~ $Where
Servos โ€” MG996R ร—4 + MG90S ร—2626AliExpress / Amazon
ESP32-CAM (compute + camera)18AliExpress / Amazon
PCA9685 16-ch servo driver13Adafruit / AliExpress
MPU-6050 IMU13AliExpress / Amazon
6 V 5 A PSU / UBEC18Amazon / AliExpress
608ZZ bearings + 8 mm shaft14Amazon / hardware store
T8 lead-screw + brass nut15AliExpress / Amazon
Neodymium magnets 6ร—3 mm64Amazon / AliExpress
Microfiber pads + compliance foam15Grocery / hardware store
M3 screws + heat-set insert kit16Amazon / hardware store
PLA filament (~250 g โ€” all printed parts)16Bambu Lab / Amazon
Basic body total$78every part < $10
  • Upgrade path: Feetech STS3215 bus servos (the SO-ARM100 / LeRobot lineage โ€” encoder + position feedback) ~$14 each. Better control, but they break the < $10/part rule.
  • Honest budgeting: the โ‰ค $100 cap is the simulation's per-run budget; M0 fits inside it ($78). The full stair-climbing carrier (M0โ†’M5) is โ‰ˆ $172 โ€” a real mobile robot needs motors and a battery, and we say so.
Read the assembly guide โ€” prints ยท wiring ยท bring-up โ†’
06 Platform roadmap

From a sim loop to a self-fabricating agent.

Phase 0 is done โ€” and the simulation above already runs the whole need โ†’ design โ†’ fabricate โ†’ test โ†’ place loop end-to-end (the Phase 4 acceptance test, in sim). The rungs below are the path to doing it in the physical world.

Phase 0

Reach, in simulation Done โœ“

Minimal body, the attachment interface, the agent-driven design loop, and a real STL artifact.

Phase 1

A richer design space

Multi-segment parts and obstacles; a growing library of learned components.

Phase 2

Close the sim-to-real gap

Slice and actually print the winning part; verify it on real hardware.

Phase 3

Order what it can't make

The agent sources parts from vendors and extends its own embodiment.

Phase 4

The full platform

A human states a goal; the agent does whatever it takes โ€” imagine in sim, fabricate (print or order), test in reality, iterate โ€” until it's met.