Repository navigation
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Follow-up to #13 and the CLI PR (#41). These are the agent tools to add next, from four rounds of testing with coding agents. They are ordered by how often agents needed them and how much they would save. Each item says what agents had to do instead.
Expose what BenchUp already has
- Router profiles as a tool: chamfer, bevel, roundover, cove, rabbet, groove and other profiles on an edge, using the core router (
model.routes). Agents asked for chamfered tops and rounded edges, and drew outlines by hand to fake them. - The Cutting Plan: stock layouts with saw kerf and grain, and the real number of sheets.
get_cut_listonly gives an area lower bound, so agents worked out the layout by hand. The plan lives inbenchup-app/src/cutting_plan.rstoday; it would need to move to the core or the tools. - Trimming excess material at joints (
JointSettings::trim), and wood finishes and estimates.
Modeling
- A board from a profile: a 2D outline with arcs (bulge or sagitta), a plane, a thickness and a grain, in one call. Today it takes
draw_polyline,push_pull,groupandset_grain, with arc points computed in a script. The script also has to pick a segment count that does not break joints (see below). - Face operations: split a face by a line or plane, returning the pieces with their centres, and merge coplanar faces after a push. Erasing a seam edge removes the faces on it.
distribute: spread objects evenly along an axis between two limits (shelves).- Change stock thickness: resize a set of boards, keeping the outer faces and joint overlaps. Today this takes about 13 calls with anchors.
Reading the model
- Scene filters: ids, depth and fields. On the example project
get_sceneis about 35 KB. - Free space and surroundings: the free gap between boards at a given height, and walls or floors made of loose faces inside groups. Agents probed 36 entities one by one to find a wall.
- Joint geometry: the tenon or groove box in world coordinates, and whether a groove is through or stopped.
- A rendered preview (PNG of a view) to check a result, and dimension overlap, without opening the app.
check_modelagainst a baseline: report only new problems in a dry run.
Needs a decision in the core
- Components and outside joints: joints between a board inside a component instance and a board outside it, and turning existing boards into instances of one definition without losing their joints. Today, "make the housed shelves one component" cannot be done.
- Precision: some segment counts in curved boards (32 or 40) make joints impossible to cut, where 24 or 48 work. This needs a minimal reproduction.
- Full-thickness push_pull leaves stray faces and edges (board stops being a closed solid) #39 (full-thickness push/pull leaves stray faces) and Erasing a board leaves its wood joints pointing at a missing id #36 (erased boards keep their joints).
Separate track
- The live bridge and in-app Agent connection from Add an MCP server and optional agent add-ons (Agent connection, Build with MIRA) #3, so agents can edit the open window instead of the file.
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
Activity
Maaxion commentedon Nov 13, 2026
I'm already working on one set of improvements to the cutting plan
furilo commentedon Nov 14, 2026
On it!
furilo commentedon Nov 14, 2026
On Precision (Needs a decision in the core): minimal reproduction in #61. The second mortise-and-tenon cut on the same board fails with "Each body must be a closed solid", depending on the order and on exact coordinates. The issue includes a core test, about 2,000 swept cases and a trace of where the mesh breaks.