EXECUTION RUNTIME: GROK BOT LINUX SANDBOX (/workspace) LIVE TEMPLATES: 15 AVAILABLE (FREE + $19, $29, $39 & $49 · CARD) · ZERO SUBSCRIPTIONS PRIVACY: LOCAL CREDENTIAL VAULT · ZERO DATA EXFILTRATION
● AVAILABLE NOW · PHASE 2 LIVE · $29 · card (ONE-TIME · 3 REBINDS)

print-farm-ops · Category: Robotics & Manufacturing / 3D Print Farm & Slicer Queue Ops

3D Print Farm & Slicer Queue Ops — Catch the wrong-temperature plate, the empty spool and the money-losing SKU before the printers run.

Your OrcaSlicer, Bambu Studio and PrusaSlicer projects, your spool ledger and your storefront SKU table already hold the answers. This auditor reads them offline, checks nozzle, temperature, infill and enclosure safety for PLA-CF, PAHT-CF, PETG, TPU and more, tracks filament BOM and drying hygiene, prices every part (filament, power, machine, labour), and schedules the next production run across your printers from SKU sales velocity, across 4 deterministic buckets. It never contacts a printer and never edits a project file.

SKU: print-farm-ops · Skills: print-farm-ops-setup + print-farm-ops · Runtime: 2,165 lines stdlib Python · Price: $29.00 USD one-time · card, Apple Pay or Google Pay

⚡ Works in Grok Bot + Cursor + Claude Code + Any Terminal (Zero-Dep Python 3 CLI Included)
Install in Grok Bot → See Real Sample Audit View in Homepage Catalog

What It Does: The 4-Bucket Technical Breakdown

  • Local-only inputs: OrcaSlicer, Bambu Studio and PrusaSlicer / SuperSlicer .3mf and .gcode.3mf projects, plain .gcode, and optional CSV / JSON spool, SKU and printer tables. 3MF archives are opened with hardened ZIP limits.
  • 4 deterministic audit buckets:
    1. .3mf / .gcode Slicer Profile & Thermal/Mechanical Safety Audit: nozzle and bed temperatures against each material's envelope and degradation limit (THERMAL_RUNAWAY_OR_OUT_OF_RANGE, TEMP_MATERIAL_MISMATCH), abrasive CF/GF filament on a brass nozzle or a nozzle under 0.4 mm (ABRASIVE_FILAMENT_BRASS_NOZZLE, ABRASIVE_CLOG_RISK_SMALL_NOZZLE), PAHT / PA / ABS on an open-frame printer (ENCLOSURE_REQUIRED_OPEN_FRAME), TPU volumetric speed, layer height against nozzle diameter, and weak infill pattern, thin walls or low infill on structural parts (WEAK_INFILL_PATTERN_STRUCTURAL, STRUCTURAL_UNDER_WALLED). Unsafe archives (ARCHIVE_SAFETY_VIOLATION) and embedded printer API keys (EMBEDDED_PRINTER_CREDENTIAL, value never shown) are flagged.
    2. Spool Inventory & Moisture Hygiene: remaining grams against each material's queued demand with a scrap buffer (SPOOL_INSUFFICIENT_FOR_QUEUE, SPOOL_LOW_STOCK), drying cadence for hygroscopic spools such as PAHT-CF, PA, TPU and PETG (HYGROSCOPIC_DRYING_OVERDUE) and desiccant age (DESICCANT_CHANGE_OVERDUE).
    3. Unit Economics & Per-Part BOM Margin Audit: filament, electricity, machine time and labour per unit, net of marketplace fee and shipping, with a gross-margin check (SKU_NEGATIVE_MARGIN, SKU_CRITICAL_MARGIN_COMPRESSION, SKU_BELOW_TARGET_MARGIN) and a table-versus-slice BOM comparison (PLATE_BOM_MISMATCH).
    4. Storefront SKU Run-Rate & Multi-Printer Queue Scheduler: days of supply from sales velocity, lead time and safety stock (SKU_BACKORDER_DEFICIT, SKU_STOCKOUT_IMMINENT, SKU_REORDER_TRIGGER), a greedy earliest-finish schedule across your printers honouring nozzle, temperature and enclosure limits (NO_COMPATIBLE_PRINTER_FOR_JOB, FARM_CAPACITY_OVERLOAD), written to a priority CSV with --queue-csv.
  • Recurring delta mode (--state PATH --delta): tracks spool draw-down (SPOOL_DEPLETED), SKU supply drops (SKU_DAYS_OF_SUPPLY_DROP) and slicer profile drift (PROFILE_DRIFT_DETECTED) between runs, suited to a scheduled UpdateRoutine.

How It Runs (5 Steps)

1 · License pre-flight
.wattcoin_license_check.py --sku print-farm-ops must return "state": "OK" before every run.
2 · Pinned runtime check
Setup verifies the canonical SHA-256 of print_farm_ops.py and bot_common.py against the pinned values; any mismatch stops the run.
3 · Parse projects & tables
--3mf / --dir slicer files, then --spools, --orders and --printers; credentials in tables are refused.
4 · 4-bucket audit & schedule
Slicer safety, spool hygiene, unit economics and SKU run-rate checks, then a greedy multi-printer queue.
5 · Report, queue, diff
Text/Markdown/JSON report, --queue-csv, optional --state --delta events, and a fail-closed exit code.

Real Sample Audit: 4-printer composite & functional-part farm

Sample disclosure: this is a representative sample, not a customer report. It was produced against public or fictional test targets; account and credential values are placeholders or redacted (for example wck_<REDACTED>), and no private keys, seed phrases or secrets are ever shown. Your own report will differ in content and length.

Excerpt from --format markdown on a synthetic farm (Bambu X1C, P1S, A1 and a Voron 2.4; 8 plates, 6 spools, 6 SKUs). All spools, prices and plates are fabricated for illustration and no printer was contacted. Output is unedited; omitted parts are marked. Exit 3: the worst finding is CRITICAL at the default --fail-on medium.

# 3D Print Farm & Slicer Queue Ops Report

```
snapshot   2026-10-27 00:00:00 UTC | tool=print-farm-ops
endpoints  local-files
```

**Inputs:** 8 slicer file(s) / 8 plate(s), 6 spool(s), 6 SKU(s), 4 printer(s)

## Summary

| critical | high | medium | low | info | worst |
|---|---|---|---|---|---|
| 9 | 11 | 6 | 1 | 0 | CRITICAL |

## Bucket 1 - Slicer profile & thermal / mechanical safety

| file | plate | slicer | printer | nozzle | material | layer | walls | infill | N/B C | hrs | g |
|---|---|---|---|---|---|---|---|---|---|---|---|
| bracket_placf.gcode.3mf | 1 | BambuStudio | Bambu Lab X1 Carbon | 0.40 hardened_steel | PLA-CF | 0.20 | 2 | 10% grid | 230/55 | 3.00 | 62.0 |
| calibration_pla_hot.gcode.3mf | 1 | BambuStudio | Voron 2.4 350 | 0.40 tungsten_carbide | PLA | 0.20 | 3 | 20% gyroid | 265/55 | 0.60 | 6.0 |
| fanduct_placf_a1.gcode.3mf | 1 | BambuStudio | Bambu Lab A1 | 0.40 brass | PLA-CF | 0.20 | 3 | 20% gyroid | 230/55 | 1.80 | 21.0 |
| gear_pahtcf.gcode.3mf | 1 | BambuStudio | Bambu Lab P1S | 0.60 hardened_steel | PAHT-CF | 0.28 | 4 | 30% gyroid | 210/55 | 5.50 | 88.0 |

[... 4 more plate rows omitted ...]

- **CRITICAL** `ABRASIVE_FILAMENT_BRASS_NOZZLE` fanduct_placf_a1.gcode.3mf: abrasive filament PLA-CF sliced for a brass nozzle (slicer file); it will wear through it, use a hardened / tungsten nozzle
- **CRITICAL** `THERMAL_RUNAWAY_OR_OUT_OF_RANGE` calibration_pla_hot.gcode.3mf: PLA sliced at 265 C exceeds its 250 C degradation limit (charring, heat-creep jams, fumes)
- **HIGH** `STRUCTURAL_UNDER_WALLED` bracket_placf.gcode.3mf: structural part is under-built: infill 10% (<15%), 2 wall loops (<3)
- **HIGH** `TEMP_MATERIAL_MISMATCH` gear_pahtcf.gcode.3mf: PAHT-CF sliced with nozzle 210 C (envelope 270-315 C) and bed 55 C (envelope 80-115 C); the filament preset was probably not switched
- **HIGH** `WEAK_INFILL_PATTERN_STRUCTURAL` bracket_placf.gcode.3mf: grid infill on a structural part: the nozzle re-crosses infill lines and shear strength is poor; use gyroid, cross_hatch or cubic
- **MEDIUM** `ABRASIVE_CLOG_RISK_SMALL_NOZZLE` pulley_pa6cf.gcode.3mf: heavily filled PA6-CF on a 0.4 mm nozzle clogs often; a 0.6 mm hardened nozzle is recommended
- **MEDIUM** `TPU_HIGH_VOLUMETRIC_SPEED` gasket_tpu.gcode.3mf: TPU max volumetric speed 9 mm3/s exceeds 6.0 (extruder gear buckling / jams)

## Bucket 2 - Spool inventory, moisture hygiene & BOM depletion

[... spool ledger and per-material demand tables omitted ...]

- **CRITICAL** `SPOOL_INSUFFICIENT_FOR_QUEUE` PA6-CF: queue needs 27 g (incl. scrap buffer) but 0 g on hand across 0 spool(s); short by 27 g
- **CRITICAL** `SPOOL_INSUFFICIENT_FOR_QUEUE` PAHT-CF: queue needs 458 g (incl. scrap buffer) but only 310 g on hand across 1 spool(s); short by 148 g
- **CRITICAL** `SPOOL_INSUFFICIENT_FOR_QUEUE` PLA-CF: queue needs 1634 g (incl. scrap buffer) but only 520 g on hand across 1 spool(s); short by 1114 g
- **HIGH** `HYGROSCOPIC_DRYING_OVERDUE` spool S-PAHT-1 (PAHT-CF) drying overdue: last dried 26 days ago (limit 7 days); wet filament strings, bubbles and loses strength
- **HIGH** `HYGROSCOPIC_DRYING_OVERDUE` spool S-TPU-1 (TPU) drying overdue: no dried_at recorded (limit 7 days); wet filament strings, bubbles and loses strength
- **HIGH** `SPOOL_LOW_STOCK` spool S-PETG-2 (Polymaker PETG) has 130 g left (<= 150 g floor); swap before a long print
- **LOW** `DESICCANT_CHANGE_OVERDUE` spool S-PAHT-1 desiccant last changed 87 days ago (limit 60)

## Bucket 3 - Unit economics & per-part BOM

| sku | material | filament | power | machine | labor | COGS | price | net rev | profit | margin |
|---|---|---|---|---|---|---|---|---|---|---|
| BRK-CF-01 | PLA-CF | $0.73 | $0.03 | $0.78 | $2.20 | $3.73 | $18.00 | $10.26 | $6.53 | 36.3% |
| GEAR-PAHT-02 | PAHT-CF | $4.35 | $0.07 | $2.29 | $3.67 | $10.38 | $24.00 | $16.08 | $5.70 | 23.8% |
| CLIP-PETG-03 | PETG | $0.06 | $0.00 | $0.11 | $1.10 | $1.28 | $7.50 | $6.53 | $5.25 | 69.9% |
| GASKET-TPU-04 | TPU | $0.15 | $0.02 | $0.45 | $1.47 | $2.08 | $4.50 | $3.92 | $1.83 | 40.7% |
| VASE-PLA-05 | PLA | $1.88 | $0.20 | $5.75 | $1.83 | $9.65 | $16.00 | $8.72 | -$0.93 | -5.8% |
| MINI-PLA-06 | PLA | $0.36 | $0.10 | $3.54 | $1.83 | $5.83 | $12.00 | $6.44 | $0.61 | 5.1% |

[... unlinked-plate cost table omitted ...]

- **CRITICAL** `SKU_NEGATIVE_MARGIN` VASE-PLA-05 loses $0.93 per unit (COGS $9.65 vs net revenue $8.72)
- **HIGH** `SKU_CRITICAL_MARGIN_COMPRESSION` GEAR-PAHT-02 gross margin 23.8% is under 25% (profit $5.70 on $24.00)
- **HIGH** `SKU_CRITICAL_MARGIN_COMPRESSION` MINI-PLA-06 gross margin 5.1% is under 25% (profit $0.61 on $12.00)
- **MEDIUM** `PLATE_BOM_MISMATCH` GASKET-TPU-04 vs gasket_tpu.gcode.3mf#1: hours/unit table 0.50 vs sliced 0.37 (-27%); costs and queue hours use the table values
- **MEDIUM** `SKU_BELOW_TARGET_MARGIN` BRK-CF-01 gross margin 36.3% is below the 45.0% target
- **MEDIUM** `SKU_BELOW_TARGET_MARGIN` GASKET-TPU-04 gross margin 40.7% is below the 45.0% target

## Bucket 4 - SKU run-rate & multi-printer queue

[... run-rate table and printer load table omitted ...]

Scheduled queue (greedy earliest-finish):

| # | tier | sku | material | plates | units | printer | hrs | grams | COGS | margin | days supply |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1_BACKORDER | BRK-CF-01 | PLA-CF | 11 | 44 | voron-01 | 33.0 | 709 | $3.73 | 36.3% | 0.0 |
| 1 | 1_BACKORDER | BRK-CF-01 | PLA-CF | 14 | 55 | x1c-01 | 42.0 | 903 | $3.73 | 36.3% | 0.0 |
| 2 | 1_BACKORDER | MINI-PLA-06 | PLA | 5 | 5 | UNASSIGNED | 20.0 | 94 | $5.83 | 5.1% | 0.0 |
| 3 | 2_STOCKOUT_RISK | GASKET-TPU-04 | TPU | 1 | 3 | a1-01 | 3.0 | 25 | $2.08 | 40.7% | 1.2 |
| 4 | 2_STOCKOUT_RISK | GEAR-PAHT-02 | PAHT-CF | 5 | 10 | p1s-01 | 27.5 | 458 | $10.38 | 23.8% | 2.7 |
| 5 | 3_SAFETY_REPLENISH | CLIP-PETG-03 | PETG | 1 | 6 | a1-01 | 1.5 | 31 | $1.28 | 69.9% | 4.0 |

- **CRITICAL** `NO_COMPATIBLE_PRINTER_FOR_JOB` MINI-PLA-06 (PLA) needs [0.2 mm nozzle, 215 C hotend, 55 C bed] but no online printer provides: 0.2 mm nozzle
- **CRITICAL** `SKU_BACKORDER_DEFICIT` BRK-CF-01: 3 on hand vs 90 open orders; 87 customer unit(s) are waiting on the print queue
- **CRITICAL** `SKU_BACKORDER_DEFICIT` MINI-PLA-06: 0 on hand vs 2 open orders; 2 customer unit(s) are waiting on the print queue
- **HIGH** `FARM_CAPACITY_OVERLOAD` farm capacity overload: 1 urgent job(s) would finish after their lead time (BRK-CF-01)
- **HIGH** `SKU_STOCKOUT_IMMINENT` GASKET-TPU-04: 1.2 days of supply is below the 2 day lead time; it will stock out before a reprint lands
- **HIGH** `SKU_STOCKOUT_IMMINENT` GEAR-PAHT-02: 2.7 days of supply is below the 6 day lead time; it will stock out before a reprint lands
- **MEDIUM** `SKU_REORDER_TRIGGER` CLIP-PETG-03: 4.0 days of supply is below lead time + safety stock (5 days); queue 1 plate(s)

## Delta since baseline

baseline run: 27 finding(s) recorded as NEW; no prior state

exit_code 3 (fail-on=medium)

---

[... SCOPE_NOTE omitted (printed in full with every report) ...]

CLI Reference: Flags & Exit Codes

FlagMeaning
PATH ... / --3mf PATHSlicer files (.3mf, .gcode.3mf, .gcode) or directories; --3mf audits one file.
--dir DIRRecursively discover slicer files (max 500; skips node_modules, .git, virtualenvs, dist, build).
--spools PATHSpool ledger (CSV or JSON): material, remaining grams, reorder threshold, drying and desiccant dates, cost per kg.
--orders PATH / --inventory PATHStorefront SKU table: plate file, grams and hours per unit, on-hand, open orders, daily velocity, lead time, price, fees, shipping.
--printers PATHPrinter table: nozzle diameter and type, enclosure, temperature limits, capacity hours, loaded materials.
--kwh-rate / --printer-wattsElectricity price per kWh and average printer draw for the power cost line.
--machine-rate-hr / --labor-rate-hrMachine overhead and labour USD per hour for the cost stack.
--failure-rate-pctScrap / failed-print allowance added to filament demand and cost.
--margin-target-pctGross-margin target (0–100) for SKU_BELOW_TARGET_MARGIN.
--queue-csv PATHWrite the scheduled multi-printer queue as a new CSV (refuses inputs and .3mf / .gcode targets).
--state PATH --deltaStore a snapshot (0600) and report events, new, changed and resolved findings against it. Degraded runs never overwrite it.
--format {text,markdown,json} / --json / --out PATHReport format and destination.
--fail-on {none,info,low,medium,high,critical}Exit threshold (default medium).
--now ISOOverride the report clock for reproducible runs and drying-age maths.
Exit codeMeaning
0Completed with nothing at or above --fail-on.
1Worst finding is MEDIUM (or LOW/INFO with a lower threshold).
2Worst finding is HIGH.
3Worst finding is CRITICAL.
10Bad input or refusal: missing file, bad flag, --delta without --state, a credential or access code in arguments or tables.
11Degraded: unreadable, malformed or unsafe input, or nothing to audit. Never a clean result.

Mandatory Refusal Boundaries

  • Offline and read-only. No network request: no Bambu Cloud, MQTT, Moonraker, Klipper, OctoPrint or PrusaLink call. It never sends G-code, starts, stops or heats a printer, and never modifies or overwrites a .3mf or .gcode file. --queue-csv only writes a new CSV.
  • No credentials. API keys, seed phrases and printer LAN access codes in arguments or tables are refused (exit 10) and never echoed. A slicer file with an embedded printer key raises EMBEDDED_PRINTER_CREDENTIAL without showing the value.
  • Your files only. It audits projects and tables you own or are authorised to review, and will not bypass thermal-runaway protection or recommend running unattended against a CRITICAL finding.
  • Heuristic, not certification. Thermal and structural findings are checks of slicer metadata, not mechanical-engineering certification and not a substitute for hardware fire-safety protection. Cost, margin and reorder figures are arithmetic on the numbers you supply, not financial, tax or accounting advice.

Scope note (printed with every report): 100% offline, local, read-only inspection of slicer files and the spool, order and printer tables you supply; no network request, no G-code sent, no print started, stopped or heated, no project file modified; credentials and printer access codes refused; heuristic checks; not engineering certification or financial advice.

Pinned Runtime Hashes (SHA-256 Verified)

Runtime URLs are license-gated: send X-License-Key: wcl_... or X-Agent-Key: wck_... (unauthenticated requests get 401). The served file carries a per-license watermark block (5 lines), so compare the X-Canonical-SHA256 response header (or the SHA-256 after stripping the block) against the pins above. The recommended path is the setup skill installer:

python3 /workspace/.wattcoin_license_check.py --sku print-farm-ops --install-runtime ... --expected-sha256 29edc5e8664be0b6823edc6ea985467fba83430f03d5781cd6fe341684abb669

The setup and audit skills verify both canonical digests before every run and refuse to execute either file on a mismatch. Both are locked at chmod 500. The runtime is stdlib-only Python and is covered by 393 unit tests.

Technical FAQ

Which slicers and file types does it read?
OrcaSlicer, Bambu Studio and PrusaSlicer / SuperSlicer projects (.3mf and .gcode.3mf) and plain .gcode files with slicer comment blocks. It reads nozzle diameter and type, layer height, wall loops, infill density and pattern, filament type, nozzle and bed temperatures, print time and filament grams per plate. 3MF archives are opened with hardened ZIP limits (entry count, per-entry and total size, compression ratio and path traversal), and an unsafe archive is rejected before parsing.
Does it connect to my printers or start prints?
No. It is 100% offline and read-only: no Bambu Cloud, MQTT, Moonraker, Klipper, OctoPrint or PrusaLink call, no G-code is sent, nothing is started, stopped or heated, and it never modifies a .3mf or .gcode file. The only file it creates besides the report and state file is the --queue-csv output, which refuses any input path or .3mf / .gcode target.
What tables does it need for the spool, margin and queue buckets?
Optional CSV or JSON files: --spools (spool_id, material, remaining_g, reorder_threshold_g, dried_at, cost per kg and more), --orders or --inventory (sku, plate_file, grams_per_unit, print_hours_per_unit, units_per_plate, on_hand, open_orders, daily_sales_velocity, lead_time_days, sale_price_usd, marketplace fee and shipping) and --printers (nozzle, enclosure, temperature limits, capacity hours). Header names are case-insensitive. Cost inputs that are missing are reported as findings instead of guessed silently.
How is the production queue scheduled?
SKUs are tiered by days of supply: BACKORDER, then STOCKOUT_RISK (days of supply below lead time), then SAFETY_REPLENISH. Plates are assigned greedily to the printer that finishes earliest, honouring sliced nozzle diameter, temperature limits and enclosure needs, and the result is written with --queue-csv. It does not enforce printer model, because plate G-code is slicer and printer specific. Jobs no online printer can run raise NO_COMPATIBLE_PRINTER_FOR_JOB.
What does delta mode watch?
With --state PATH --delta the auditor stores spool levels, SKU days of supply and tier, and per-plate slicer settings hashes. Later runs report SPOOL_DEPLETED, SKU_DAYS_OF_SUPPLY_DROP and PROFILE_DRIFT_DETECTED (HIGH when filament type, nozzle temperature, nozzle diameter or nozzle type changed). The first run is a baseline, and a degraded run never overwrites the state.
What does it refuse to do?
It refuses printer credentials, API keys, seed phrases and LAN access codes in arguments and tables (exit 10, value never echoed); a slicer file that embeds a printhost API key raises EMBEDDED_PRINTER_CREDENTIAL without showing it. It will not connect to hardware, send G-code, bypass thermal-runaway protection or silently edit a project file. Findings are heuristic checks of slicer metadata, not engineering certification or a substitute for hardware fire-safety protection, and cost and margin figures are arithmetic on your inputs, not financial advice.

Licensing & Setup

$29.00 USD one-time, paid by card, Apple Pay or Google Pay, with up to 3 workspace-reset rebinds and no subscription. On Turn 1 the print-farm-ops-setup skill installs the read-only license helper (0500), verifies and installs the SHA-256-pinned runtime, registers and activates your agent key, binds your wcl_... code through stdin, runs a self-check audit on a built-in unsafe spool and SKU table, and offers a first audit of your own farm plus an optional scheduled queue and spool delta routine. The license code is never printed in chat.

One wcl_... key, two runtimes. Your license key works inside Grok Bot and from any local terminal or IDE agent (Cursor, Claude Code, Windsurf, CI/CD) via the standalone single-file Python 3 CLI (/runtime/print_farm_ops.py) — Python 3.10+ standard library only, zero pip install dependencies, with --json / --markdown output.