Times in the margin
After a run every line shows the seconds it took. The lines add up to the run time exactly, and the removed volume to the total.
Studio's program editor is wired to the twin. Every line gets the time it took, every mistake gets a rule and a line number, and every change can run to the end before it reaches metal.

Built on Scintilla, the editing component of Notepad++ and SciTE, with G-code colouring and a margin that the twin fills in.
After a run every line shows the seconds it took. The lines add up to the run time exactly, and the removed volume to the total.
0.4 s after you stop typing, the controller's check mode and 15 static rules go through the program. Findings sit in the margin, each with its suggested fix.
The status bar shows what the controller's modal state will be after the line under the cursor: units, plane, distance mode, work offset, feed, spindle, coolant, tool.
Stop at a line, or when force, spindle load, following error or chatter margin crosses a limit, at the first cut, a near miss, a rapid into material, a collision or an alarm. Virtual time freezes; the motion is not changed.
Studio writes the start block for any line: tool, offsets, spindle, coolant and a safe approach. Example 02 restarted at line 460 leaves the same workpiece as an uninterrupted run.
Every program you load or change is kept as a version with who and why; your own files are never overwritten. Ctrl+D compares two side by side, with their run times.
Check mode finds what the controller refuses. These rules find what it runs anyway — and what this machine cannot do at all.
S01 | Warning | No safe start block before the first move (units, distance mode, plane, work offset): the program relies on the controller's state. |
S02 | Warning | No M2/M30 at the end: the controller keeps its modes, the spindle and the coolant. |
S03 | Info | A tool change (M6) with the tool below Z0: retract first. |
S04 | Error | A cutting move before any F: the controller refuses it (error:22) or uses the feed left from before. |
S05 | Warning | The spindle started without S, or S outside the spindle's range. |
S06 | Info | F above the axes' top speed in the move's direction: the planner caps it. |
S08 | Info | Dense short lines: the planner's queue holds too little path to brake from F, so the feed stays lower. |
S09 | Info | A deep straight plunge: consider a ramp or a helix and a centre-cutting tool. |
S10 | Warning | A rapid below Z0, deeper than the program has cut so far: a rapid into material breaks tools. |
S11 | Error | An arc the controller refuses (error:33): radius and end point do not agree. |
S12 | Warning | The water-cooled spindle turns during feed moves without its coolant (M8). |
S14 | Warning | A tool of a different length in the spindle than the one that set Z zero, and no tool measurement or new Z0 before the first cut. |
S15 | Error | The program reads Fanuc system variables (for example G43 H#4120); this controller has none, so they read as 0. |
S16 | Error | G33 threading or G33.1 rigid tapping needs a spindle encoder, which the MC-1 does not have. |
S17 | Warning | Characters the controller acts on at once: ! ~ ? in comments, and bytes of non-ASCII text. |
For every line Studio records whether the programmed feed was reached, and if not, what held it back — from the controller's own junction and braking arithmetic, not from a guess.

The optimizer changes numbers, not the path. Every candidate runs to the end on a fresh twin and is only accepted if nothing got worse.

Describe features instead of lines and the CAM writes the program for the blank on the table, runs it in the twin and, where the tool would chatter, writes it again at a stable spindle speed or with a shallower pass.

When a part is more than a few features, the CAM takes over: drawings, text and meshes in; pockets, contours, adaptive clearing, engraving and 3D roughing and finishing out — with cutting data estimated from the twin's physics and a trial run in the twin.
SVG and DXF drawings, text in a single-line or outline font, simple shapes and formulas, and meshes (STL, OBJ, 3MF, glTF) for 3D work.
Pockets with islands (offset, adaptive, zigzag), contours with tabs, trochoidal slots, holes and threads, engraving and V-carving, and 3D roughing and finishing on three axes.
From the material and the tool, the twin picks a spindle speed on a stability lobe and limits each depth by chatter, spindle power, the fixture's grip and tool deflection; the program says why.
By default every program runs to the end in the twin; chattering or overloaded operations are rewritten, then the feeds are tuned line by line. The CAM runs on your computer.
More about the CAM: the CAM page.
The editor is driven from the keyboard; the F keys always act on the machine, and F1 is the E-stop.
| Alt+3 | the Program workspace: library, editor, check |
| Ctrl+K | load into the machine and check |
| Ctrl+Shift+O | optimize |
| Ctrl+B | a breakpoint on the line; Ctrl+Shift+B: a conditional pause |
| Ctrl+D | compare with a saved version |
| Ctrl+. | apply the suggested fix |
| F5 | cycle start, or continue after a pause |
| F1 | E-stop, in every workspace |
No. The result arrives in the editor as an undoable edit, next to the version before it; both are kept as versions. Your own files are never overwritten.
Yes. Open any G-code file; the check and the rules tell you which lines this controller would refuse or run differently than intended.
It is now the quickest way into the CAM: describe simple features and the CAM writes, checks and proves the program. For whole parts, use the CAM workspace or ask your AI assistant.
They are what the twin computes with nominal machine and cutting parameters. They become measured numbers when the MC-1 prototypes are calibrated against the twin.
Load an example, change a line and watch the margin, the rules and the run time answer.