尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
A desktop workbench for making CAD parts with an AI coding agent. You point at the part, Claude Code writes the build123d code, torno builds it on every save.
翻译准备中
正在加载完整 README。
查看完整 README ↗[!NOTE] torno is new and early. It is developed on Linux (Arch, Wayland) 100% using claudecode and also runs on macOS, which has seen less use. Expect rough edges, and please open an issue when you find one.
Coding agents are good at writing build123d models, the Python CAD library on top of OpenCascade. Two things get in the way. The agent can't see what it made, and it's hard for you to tell it which face is wrong, or by how much.
torno fixes both. It runs Claude Code next to a live 3D view of the model. You pin a note to a face, measure a wall or draw on the view, and the agent gets exactly what you pointed at: the face's ref, the exact measured value, your note. The agent also gets tools to look at the model, measure it and cut sections through it, so it can check its own work before it hands it back.
torno is not a modeller. It has no sketcher, no feature tree and no way to edit a solid by hand. The model is the Python file, and torno shows it.
lid/F12, never as vague words.look (a picture of your view, marks
included), measure, section, check (overlaps and printability), diff between builds, try_fillet
and more.claude, under your own login, and torno
leaves its settings alone. In your folders, torno writes only under <project>/.torno/.It goes well with prismatic parts that have sizes you measured: brackets, enclosures, holders, a lid and a box, hole patterns. It needs more from you for a part that must fit a place you can only scan, and for an assembly of more than three or four parts that touch. It does not go well with organic shapes described in words alone, gears and threads written by hand, or sizes read from a photo. Whatever the part, give a measured number, a scan or a dimension mark in place of a description. The manual has the lists.
A workspace is a folder of projects. Each project is a folder with one build123d model in it:
projects/
├── bracket/
│ └── bracket.py
└── hollow/
└── hollow.py
A model gives its parts as a dict, or as make_<part>() functions, or as module-level shapes:
from dataclasses import dataclass
from build123d import Box, Cylinder, Pos
@dataclass(frozen=True)
class Params:
side: float = 40
wall: float = 2
def assembly(p):
inner, height = p.side - 2 * p.wall, p.side - p.wall
tub = Pos(0, 0, height / 2) * Box(p.side, p.side, height)
tub -= Pos(0, 0, p.wall + inner / 2) * Box(inner, inner, inner)
tub += Pos(0, 0, p.wall + 10) * Cylinder(3, 20)
lid = Pos(0, 0, height + p.wall / 2) * Box(p.side, p.side, p.wall)
return {"tub": tub, "lid": lid}
The app is Electron and three.js. The kernel is a Python package that loads models and tessellates them in
forked workers. Each project gets its own Claude Code session, in the project's folder, connected to torno's MCP
server on 127.0.0.1. See Projects and builds for the full rules.
PATH are for Unix; WSL2 is untried)claude) on your PATH, logged intorno checks all of this on its first screen, under "Ready to work", and says what's missing. The first build
sets up torno's own Python environment with build123d and bd_warehouse (about 900 MB, once). If your workspace has its own
pyproject.toml, torno uses that environment instead and never changes it. Run uv sync there once yourself.
More in Requirements.
git clone https://github.com/luisg0nc/torno.git
cd torno
pnpm install
scripts/torno ~/projects # open a folder as the workspace
scripts/torno # the workspace you opened last, or the first screen
The launcher rebuilds the app when the sources change, so git pull and run it again. On the first screen,
Open the example opens a small project, an enclosure with its brief and a few marks, in a temporary copy, so you can try everything without touching
your own files.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗