DOWNLOADS PRODUCTS
GCode Sentinel — gold tool head icon
THE NEW CNC GOLD STANDARD
IN ACTIVE DEVELOPMENT — NEW FEATURES ADDED CONTINUOUSLY

An advanced AI-infused
CNC platform designed
around machine vision.

Stream G-code, jog, and run multi-file production cycles with IO automation — while a local vision model confirms every setup and an AI agent stands one command away from the feed-hold. Everything runs on your network. Nothing leaves it.

Explore the platform See AI control macOS BETA — COMING SOONWindows & Linux support to follow
BUILT FOR THE BENCH

Run lights-out automation on a machine that fits on a workbench. Mill PCBs with confidence — mesh-compensated Z makes isolation routing on thin copper practical, not a gamble. Tuned for hobbyist routers and micro mills — imperfect frames, no homing switches, no big-iron budget — and the same platform drives industrial-grade equipment just as comfortably: if it speaks grblHAL, GCode Sentinel runs it — and support for more CNC controllers is in the works.

0
MCP tools for AI agents
100%
local — zero cloud calls
0
connection modes — serial · remote · simulator
0
dependencies — one swiftc build
PART NESTING

One file. Six parts.
Zero re-CAMing.

Stop merging parts into one monolithic G-code file. Load the same .nc as many times as the bed allows — each instance carries its own work zero, stored as an offset from the parked origin. Arrange parts where the clamps are, not where CAM put them. Move the park, and the entire nest follows.

GCode Sentinel — PROBE_HOLDER.nc × 6, each at its own zero SIM
GCode Sentinel bed view: six instances of one .nc file nested on the bed, the selected part highlighted in teal, yellow transition paths between models

A zero for every part

Click a file, zero it where it sits — done. Zeros live as deltas off the parked origin, so re-zeroing the park shifts the whole nest together. One CAM export runs at six positions.

Injected rapid retracts

CAM's lazy Z pull-outs are rewritten to your retract feed at send time, and a clearance plane is injected between models — the yellow transition paths you see on the bed. Plunges stay sacred.

Program loop

Flip Loop and the machine runs itself: scripted steps swap the finished part for the next blank — vacuum, clamps, loading arm — the vision model confirms the reload, and the bed starts over. Continuous operation, no one standing at the machine.

Project saves

Save bundles the files, every zero, loop state, overrides, and bed setup into one program folder. Load it next month and it re-anchors to wherever park is that day.

Configure — bed, retract plane, return-to-park
Configure sheet: bed size, grid spacing, Z park height, model-change retract clearance, return to park when done
Dial in the bed, the clearance plane between models, and whether the head parks itself when the program chain completes.
Live G-code — every line, as it streams
Live G-code panel streaming jog, G10 work-offset and program lines alongside the 3D nested toolpaths
The live stream shows exactly what the controller gets — including the injected G10 offsets and retract moves.
MESH MAPPING

Your bed isn't flat.
Your cuts can be.

Hobbyist machines lie about Z. Spoilboards sit a few tenths out of tram, gantries sag mid-span, extrusions twist, and MDF moves with the weather. Mesh mapping measures the bed you actually have — then compensates every cut against it, so a 0.2 mm engrave is 0.2 mm in the far corner too, not air on one side and a trench on the other.

Mesh map — 25-point Z probe · surface range 0.349 mm Z PROBE
GCode Sentinel mesh mapping: a guided 5×5 Z-probe grid with measured heights and a heat-mapped 3D surface of the real bed

Guided probing

Pick 3×3, 4×4, or 5×5 — the head walks point to point while the app talks you through it. Every point gets a two-touch probe: fast contact, back off, slow re-touch for repeatable numbers. The probe block's height is subtracted, so the mesh stores the true bed.

The truth, heat-mapped

The measured surface renders in the 3D view, blue to red, low to high — you see the sagging rail or proud corner instantly, with the total range read out (0.349 mm on this bed) before you commit to a cut.

Compensation on every cut

Enable the mesh and Z follows the measured surface instead of the imaginary flat one — consistent engrave depth across the whole sheet, surfacing passes that skim evenly, V-carves that don't fade out halfway.

Save it, anchor it

Meshes save by name and anchor to the parked zero — re-park at the same corner next week, load the mesh, cut. A manual tram mode covers setups without a probe, and Clear wipes it when you resurface the board.

THE COCKPIT

Everything between you
and the spindle.

A full machine-control cockpit, built native in SwiftUI. No Electron, no runtime, no waiting.

Live 3D toolpath

SceneKit view of every feed and rapid, with a live tool marker tracking real machine position. Finished passes dim as the job streams — 350k-segment files stay smooth.

Built-in simulator

A virtual grblHAL lives inside the app. Jog it, stream programs, run full cycles — motion modeled at commanded feed, identical control paths to real hardware.

Production job cycles

Queue cuts and script steps in order, loop for the next blank. Scripts drive vacuum, clamps, a loading arm — lights-out runs with a vision check before every cut.

Vision-gated setups

A local Qwen3-VL model (≈2.8 GB, llama.cpp) answers questions about the camera frame. If it can't confirm the setup, the cycle feed-holds instead of cutting.

Surfacing generator

Flatten stock in seconds: area, depth, bit, overlap, raster direction. Generates a serpentine program with finishing pass, previews it in 3D, queues it like any file.

JavaScript macros

Five macro slots take plain G-code, IO commands, waits — or full JavaScript with live machine state. A spindle toggle is one line of JS.

Remote mode — optional

Out of the box, the Mac drives the machine directly over USB serial. When the machine lives elsewhere, an optional sender agent on a PC at the controller keeps the streaming loop machine-side while your Mac — and your AI — drive it over LAN or VPN.

ESP32 IO board

Relay outputs for vacuum, lights, clamps, mist; debounced fault inputs for driver alarms, doors, e-stop. Incoming signals can feed-hold the CNC on their own.

Live overrides

Travel and spindle 0–200% mid-cut, applied at send time. Change spindle override mid-job and the commanded S is re-issued live. Z-only plunges are never scaled — plunge speed is sacred.

AI-NATIVE

Your machine speaks
MCP.

GCode Sentinel ships an MCP server exposing ~40 machine-control tools. Claude — or any MCP-capable agent — can check status, jog, zero, generate surfacing programs, build and run cycles, flip IO relays, interrogate the camera, and hit the e-stop.

  • Conversational machining: "flatten this stock, 120×80, take off half a mil"
  • Hard safety protocol — spindle and job starts require explicit user words
  • Loopback HTTP API for everything else: scripts, dashboards, shop tooling
claude — cnc session
flatten this stock — 120×80, take 0.6 mm off the top, 1/4" bit
⚙ deck(size_x=120, size_y=80, size_z=0.6, bit_fraction="1/4", overlap_percent=40)
✓ Surfacing program generated — 46 passes, 3 layers + finishing. Previewing in 3D.
Loaded and previewed. Stepover 3.8 mm, est. 11 min. Say the word and I'll run it.
is the part still clamped?
⚙ vision_ask("Is the workpiece secured in the vise with both clamps visible?")
✓ YES — workpiece seated, both clamps engaged.
run it
⚙ run_job()
▶ Streaming… 2,841 / 6,120 lines · 46% · S12000 · F1200
THE SENTINEL

A second pair of eyes,
on your bench.

Between every step of an automated cycle, a VISION line asks a local vision model to confirm what the camera sees. Wrong answer? The machine feed-holds and the cycle stops — nothing cuts on a bad setup.

The model runs on your Mac via llama.cpp — about 2.8 GB of RAM, loaded only while the vision switch is on. A frame-difference motion watchdog backs it up, auto-feed-holding the moment something moves that shouldn't.

load_and_cut.txt — cycle script step
# Side A — load, clamp, verify, cut
IO vacuum_on
IO clamp_on
WAIT 1
VISION Is the blank seated against both stops
       with the clamp fully closed?
# ── model must answer YES, or the cycle
# feed-holds right here ──
G0 X0 Y0
M3 S12000
VISION confirmed — continuing cycle
Camera — motion watchdog · sensitivity 4% WATCHDOG
GCode Sentinel Camera tab watching a spindle cutting aluminum, chips flying, with motion watchdog and sensitivity controls
The Camera tab: a frame-difference watchdog feed-holds the instant something moves that shouldn't, while the vision model answers questions about the frame. (Shown with example footage.)
ON THE WATCH LIST

If you can phrase it as a question, the sentinel can stand guard over it:

Failed jobs — a snapped bit cutting air, gouged stock, a spindle that stopped making chips. Caught between passes, not discovered an hour later.
Loose parts — the workpiece shifted in the vise or pulled free of the tabs. Feed-hold before the next plunge, not after the part becomes a projectile.
Jig & fixture checks — right jig on the bed, part oriented correctly, every clamp closed, stops seated — verified before each cycle step is allowed to cut.
Tool integrity — flutes intact and stickout sane after a tool change, before the first plunge trusts them.
A clear envelope — a forgotten wrench on the bed, a chip pile burying the work, a hand where it shouldn't be.
Fail scripts — any failed check can trigger a recovery sequence: feed-hold, spindle off, vacuum released, lights flashing, cycle stopped — your machine fails safe, on script.

Vision-gated cycle checks run today; continuous active monitoring is in development.

UNDER THE HOOD

Local-first, end to end.

Every link in the chain runs on hardware you own. The AI, the vision model, the streaming loop — all of it stays inside your walls.

Claude / any AI agent
MCP · ~40 machine tools
GCode Sentinel.app
jog · 3D toolpath · cycles · macros
HTTP API 127.0.0.1:17895
Local vision model
llama.cpp · :17897 · 100% offline
Sender agent
PC at the machine · :17896 · owns the streaming loop
grblHAL CNC
router / mill — the cutting happens here
ESP32 IO board
vacuum · clamps · sensors · e-stop
BUILT PARANOID

Safety isn't a feature.
It's the architecture.

One-tap E-STOP & feed-hold — no confirmations between you and stopping the machine. Realtime bytes, ahead of every queue.
Machine-origin filter — G28 / G30 / G53 stripped from manual sends, macros, and loaded programs by default. No surprise rapids into the frame.
Explicit-consent spindle — neither the UI nor an AI agent can start the cutter or a job without a deliberate, explicit request.
Hardware fault inputs — driver alarms, door switches, and a physical e-stop wire into the IO board and halt motion on their own.

And the rule the manual leads with: software stops are conveniences — wire a physical e-stop.

The new CNC gold standard.

Put a sentinel on your machine — native macOS · grblHAL · runs entirely on your network.

Product updates only · unsubscribe anytime · currently in active development, hardware bring-up in progress.