Skip to content

Agent tools from #42: router, joints, finishes, outlines, faces, layout, queries and previews - #63

Open
furilo wants to merge 2 commits into
BenchUp3D:mainfrom
furilo:agent-tools-42
Open

furilo wants to merge 2 commits into
BenchUp3D:mainfrom
furilo:agent-tools-42

Conversation

@furilo

@furilo furilo commented Nov 14, 2026

Copy link
Copy Markdown
Contributor

Part of #42: the agent tools that agents needed most in the testing behind #41, plus a way to keep checking them with agents.

Tools (benchup-tools, so the CLI, MCP and the in-app assistant share them)

#42 item Tools
1. Router profiles add_profile and remove_profile, with edges named by the faces they lie between ([["+z", "-y"]] is the top front edge). get_object lists a board's profiles
3. Trimming, finishes, estimates trim, keep_end and trim_axis in joint params, plus set_joint; set_finish; get_estimate (finishing, joinery and router time with BenchUp's default allowances, and wood by material)
4. Board from a profile create_profile_board: a 2D outline with arcs (bulge or sagitta), plane, thickness, grain, material and tag in one call
5. Face operations split_face (by a line or a plane, pieces ordered and with centres) and merge_faces (coplanar seams, holes such as a mortise's mouth, T-junctions)
6. Distribute distribute (equal gaps or centres, with or without gaps at the limits)
7. Stock thickness change_thickness: keeps outer faces, keeps each joint's share of the thickness, and moves boards that only butt against a resized board
8. Scene filters get_scene ids, depth, fields and sections (the example project goes from 35.8 KB to about 1 KB)
9. Free space and surroundings measure_space (free gap along each axis to the nearest face) and find_surfaces (walls and floors made of plain faces)
10. Joint geometry get_object on a joint: region, the tenon or tongue actually cut, depth and direction, and whether the cut in b is through, stopped or closed
11. Rendered preview benchup render and MCP render_view: a PNG of a standard view without a GPU. Joints and profiles are cut, dimensions and notes are drawn, and overlapping labels are reported
12. check_model against a baseline check_model {"only_new": true}: only the problems the batch introduced

Also:

Not included:

Docs

  • docs/agent-guide.md (benchup guide) covers:
    • the new tools;
    • an Over MCP section;
    • what the rabbet joint really cuts, and how to rout a classic rabbet instead;
    • the planes of create_profile_board;
    • the drawer back;
    • the limits for distribute;
    • the precision limit.
  • docs/cli.md covers render and the MCP tools.

Agent evaluation (second commit)

crates/benchup-cli/evals keeps the cases used to test the tools with agents that only know what the tools tell them:

Summary of the rounds:

Round Cases Commands (errors) Result
4 (before this PR) 12 ~245 (~7) 11 ✅, 1 ⚠️
5 (first with these tools) 17 258 (9) for the 12 original cases 15 ✅, 2 ⚠️. Found 9 tool bugs, fixed here
6 (after the fixes, 6 cases) 6 135 (5), down from 159 (9) for the same cases in round 5 5 ✅, 1 ⚠️ partial by design

The cases the tools were made for dropped most: lengthening the desk went from ~61 to 23 commands, and the curved bedside table from 36 to 16, first try.

tests/evals.rs replays the reference solutions with the real binary and checks them with check_model, so a change that breaks what agents did fails without running agents. CI now runs the benchup-tools and benchup-cli tests, which it did not run before. This is the first time the CLI tests run on Windows.

Testing

  • cargo test -p benchup-tools -p benchup-cli: 67 tool tests, 22 CLI tests and the evals replay.
  • Manual checks with the release binary on the example project: dry-run batches, MCP over stdio and renders of every view.
  • benchup-core and benchup-app are unchanged.

🤖 Generated with Claude Code

furilo and others added 2 commits November 14, 2026 13:17
From the agent tests behind BenchUp3D#41, the tools agents needed most:

- Router profiles on board edges (add_profile, remove_profile), with edges
  named by the faces they lie between.
- Joint trimming and set_joint; get_object shows a joint's geometry, the
  part actually cut and whether the cut in b is through, stopped or closed.
- Finishes (set_finish) and a time estimate (get_estimate).
- Boards from a 2D outline with arcs (create_profile_board).
- Face operations (split_face, merge_faces), distribute and
  change_thickness, which keeps outer faces, joint shares and butting parts.
- Scene filters, measure_space and find_surfaces for walls and floors made
  of plain faces, and check_model {only_new} for a batch's new problems.
- A PNG preview without a GPU (benchup render, MCP render_view), with
  joints cut, dimensions and notes, reporting overlapping labels.
- Over MCP, run_batch (with dry runs and $N references) and undo.
- benchup open on macOS passes the file as a launch argument when BenchUp
  is not running (the app cannot take an open event at start-up, BenchUp3D#58).

The agent guide and CLI docs cover the new tools, MCP and the findings of
two agent rounds. The Cutting Plan and the items that need a core decision
stay open in BenchUp3D#42; the joint precision limit is BenchUp3D#61.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
crates/benchup-cli/evals holds the 17 cases used to test the tools with
agents (12 from BenchUp3D#41 and 5 for the BenchUp3D#42 tools), their seed projects,
reference solutions, the prompt every agent gets, a script that prepares a
round and the results of rounds 1 to 6.

tests/evals.rs replays the reference solutions with the real binary and
checks them with check_model, so a change that breaks what agents did
fails without running agents. CI now runs the benchup-tools and
benchup-cli tests, which it did not run before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant