CtrlK
BlogDocsLog inGet started
Tessl Logo

aopab/jscad-codegen

Generate, validate, and render JSCAD v2 CAD scripts from natural language prompts

94

1.64x
Quality

94%

Does it follow best practices?

Impact

97%

1.64x

Average score across 3 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-1/

{
  "context": "Tests whether the agent follows the named-coordinate-system rules: all dimensions declared as named constants, all center/translate positions derived as named variables (no inline arithmetic), correct open-front box formulas, and cutter shapes oversized to avoid co-planar faces.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "All dimensions named",
      "description": "All numeric dimensions (wall thickness, inner width, depth, height) are declared as named constants at the top of main() — no bare magic numbers appear in primitive calls",
      "max_score": 10
    },
    {
      "name": "Named center coordinates",
      "description": "Center coordinates used in center: parameters or translate() calls are assigned to named variables (e.g. innerZCenter, ribXCenter) — not computed inline at the call site",
      "max_score": 15
    },
    {
      "name": "No inline arithmetic in center/translate",
      "description": "No expression like translate([x, (outerD/2 - wall)/2, innerH/2 + wall/2], ...) appears in the code — all position arguments reference named constants only",
      "max_score": 15
    },
    {
      "name": "Open-front depth formula",
      "description": "Outer depth equals innerD + wall (one wall, not two) because the front is open, not innerD + 2*wall",
      "max_score": 10
    },
    {
      "name": "Inner Y-center offset",
      "description": "The center Y coordinate for inner parts uses the -wall/2 offset pattern to align inner content toward the open front, not simply 0",
      "max_score": 10
    },
    {
      "name": "Cutter oversized",
      "description": "Mounting holes (or any subtract cutter) have their cutting dimension (height/depth through the wall) set to wall + 2 or more — not exactly equal to wall thickness",
      "max_score": 10
    },
    {
      "name": "Correct cuboid size format",
      "description": "Every cuboid call uses size: [x, y, z] array — no scalar size values",
      "max_score": 8
    },
    {
      "name": "Correct cylinder params",
      "description": "Mounting hole cylinders use radius (not r) and height (not h or length)",
      "max_score": 7
    },
    {
      "name": "No imports or require",
      "description": "The script contains no import or require statements — uses injected scope names (primitives, booleans, transforms) directly",
      "max_score": 8
    },
    {
      "name": "main(params = {}) signature",
      "description": "The entry function is defined as main(params = {}) — not main() with no default, not a different name",
      "max_score": 7
    }
  ]
}

evals

scenario-1

criteria.json

task.md

tile.json