February 1, 2025 · 6 min read
How Bronte plans and executes inside Houdini
Bronte is an in-process agent for Houdini that plans, executes, and self-verifies with guardrails. This post walks through how the current system is wired: the planning graph, context capture, tool registry, and the verifier pass that keeps changes safe.
Planning loop
At the core is a LangGraph state machine with four steps (plan → execute → verify → respond). Each user message triggers a plan request, then the agent executes tool calls, runs verification, and produces a summary. Failures flow back into metadata and trigger a retry with an updated plan until we either succeed or hit the retry limit.
Context without heavy pulls
Before planning, we capture a lightweight scene snapshot: selected nodes, a capped listing of /obj children, and a whitelist of common parms (transforms, scale, radius, group, etc.). This text goes to the planner along with a structured snapshot so we avoid hauling large geometry or full parameter blocks just to make a plan.
Tool registry
All Houdini actions run through a structured registry. Tools declare schemas, scopes (read-only, safe-write, full-access), and are executed in-process—no network hop. The registry validates arguments up front and captures logs (like created node paths) for later auditing.
Verifier guardrails
After a tool reports success, we optionally run a verifier to sanity-check the result. If a verifier fails, the call is marked as an error and we feed the failure back into planning. This keeps the agent honest—“success” isn’t accepted until the post-check clears.
Retries and logging
Verification failures are logged in metadata with an attempt log and a verification_status flag. The planner sees these issues on the next iteration, so it can change tactics (e.g., create parents before SOP nodes, prefer configure_* helpers over raw node creation). We cap retries via Settings.max_retry_attempts to avoid infinite loops.
What this means
The result is an agent that stays inside Houdini, reads only what it needs, executes through a vetted tool surface, and self-checks before calling a step done. If you'd like to see it on your scenes, reach out and we'll onboard you to the beta.
