{
  "schemaVersion": "1.0",
  "item": {
    "slug": "kiln",
    "name": "Kiln",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/codeofaxel/kiln",
    "canonicalUrl": "https://clawhub.ai/codeofaxel/kiln",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/kiln",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=kiln",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "COMPLETED_TASKS.md",
      "DISASTER_RECOVERY.md",
      "FORGE_LAUNCH_DAY_TASKS.md",
      "LESSONS_LEARNED.md",
      "LICENSE_STRATEGY.md",
      "LONGTERM_VISION_TASKS.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/kiln"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/kiln",
    "agentPageUrl": "https://openagent3.xyz/skills/kiln/agent",
    "manifestUrl": "https://openagent3.xyz/skills/kiln/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/kiln/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Kiln — Agent Skill Definition",
        "body": "You are controlling a physical 3D printer through Kiln.\nPhysical actions are irreversible and can damage hardware. Follow\nthese rules strictly."
      },
      {
        "title": "Quick Start",
        "body": "kiln setup          # interactive wizard — finds printers, saves config\nkiln verify         # check everything is working\nkiln status --json  # see what the printer is doing\n\nThen ask the human what they'd like to print."
      },
      {
        "title": "Which Interface to Use",
        "body": "Kiln supports two interfaces. Pick based on your capabilities:\n\nCLIMCPUse whenYou have a shell/exec toolYou have an MCP client configuredHow it workskiln <command> [flags] --jsonMCP tool calls with JSON argumentsResponse formatJSON to stdout (with --json)Structured JSON objectsSetupJust env vars + kiln on PATHkiln serve running as MCP serverTool count107 CLI commands273 MCP toolsBest forQuick start, debugging, simple workflowsTight integration, full tool catalog\n\nDon't know which? Try CLI first. Run kiln status --json. If that\nworks, you're good. MCP gives you more tools but requires server setup."
      },
      {
        "title": "CLI Interface",
        "body": "Run commands via your shell/exec tool. Always use --json for\nmachine-readable output.\n\nkiln <command> [options] --json"
      },
      {
        "title": "First-Time Setup",
        "body": "If the printer isn't configured yet, run these first:\n\n# Interactive wizard: auto-discovers printers, saves config, tests connection\nkiln setup\n\n# Or manually add a printer\nkiln auth --name my-printer --host http://192.168.1.100 --type octoprint --api-key YOUR_KEY\n\n# Verify everything works (Python, slicer, config, printer reachable, database)\nkiln verify\n\n# Scan network for printers\nkiln discover --json\n\nAfter setup, config is saved to ~/.kiln/config.yaml — no env vars needed."
      },
      {
        "title": "Core Commands",
        "body": "# Check printer status (start here)\nkiln status --json\n\n# List files on printer\nkiln files --json\n\n# Run safety checks before printing\nkiln preflight --json\nkiln preflight --material PLA --json\n\n# Upload a G-code file\nkiln upload /path/to/model.gcode --json\n\n# Start printing (auto-uploads local files, auto-runs preflight)\nkiln print model.gcode --json\nkiln print model.gcode --dry-run --json   # preview without starting\n\n# Cancel / pause / resume\nkiln cancel --json\nkiln pause --json\nkiln resume --json\n\n# Set temperatures\nkiln temp --tool 210 --bed 60 --json\nkiln temp --json                        # read current temps (no flags)\n\n# Send raw G-code\nkiln gcode G28 \"G1 X50 Y50 F3000\" --json\n\n# Slice STL to G-code\nkiln slice model.stl --json\nkiln slice model.stl --print-after --json   # slice + upload + print\n\n# Webcam snapshot\nkiln snapshot --save photo.jpg --json\n\n# Wait for print to finish (blocks until done)\nkiln wait --json\n\n# Print history\nkiln history --json\nkiln history --status completed --json\n\n# Discover printers on network\nkiln discover --json\n\n# Cost estimate\nkiln cost model.gcode --json"
      },
      {
        "title": "Outsourced Manufacturing (Fulfillment)",
        "body": "No local printer? Printer busy? Kiln can outsource to manufacturing\nservices (Craftcloud, Sculpteo) with the same CLI.\n\n# List available materials from configured service\nkiln order materials --json\n\n# Get a manufacturing quote (uploads model, returns pricing + lead time)\nkiln order quote model.stl -m pla_standard --json\n\n# Place the order [confirm — ask human first, shows price]\nkiln order place QUOTE_ID --json\n\n# Track order status\nkiln order status ORDER_ID --json\n\n# Cancel (if still cancellable)\nkiln order cancel ORDER_ID --json\n\n# Compare local printing vs. outsourced cost side-by-side\nkiln compare-cost model.gcode --fulfillment-material pla_standard --json\n\nSetup: Set one of these env vars (or add to ~/.kiln/config.yaml):\n\nexport KILN_CRAFTCLOUD_API_KEY=\"your_key\"     # Craftcloud (easiest — one key)\n# OR\nexport KILN_SCULPTEO_API_KEY=\"your_key\"       # Sculpteo\n\nAgent workflow: Check local printer → if unavailable/busy → quote\nfulfillment → present price to human → human approves → place order →\nreturn tracking link."
      },
      {
        "title": "Text & Sketch to 3D Generation",
        "body": "Generate printable 3D models from text descriptions or napkin sketches.\nKiln auto-discovers providers from environment variables.\n\n# List available generation providers [safe]\nkiln generate list --json\n\n# Generate a model from text [confirm — creates new file]\nkiln generate \"a small vase with organic curves\" --provider gemini --json\nkiln generate \"phone stand\" --provider meshy --style organic --json\n\n# Check generation status (for async providers like Meshy/Tripo3D)\nkiln generate status JOB_ID --json\n\n# Download completed result\nkiln generate download JOB_ID --json\n\nMCP equivalents:\n\n{\"name\": \"list_generation_providers\", \"arguments\": {}}\n{\"name\": \"generate_model\", \"arguments\": {\"prompt\": \"a small vase\", \"provider\": \"gemini\"}}\n{\"name\": \"check_generation_status\", \"arguments\": {\"job_id\": \"gemini-abc123\"}}\n{\"name\": \"download_generated_model\", \"arguments\": {\"job_id\": \"gemini-abc123\"}}\n\nAvailable providers (set env var to enable):\n\nProviderEnv VarTypeAsync?Gemini Deep ThinkKILN_GEMINI_API_KEYAI reasoning → OpenSCAD → STLNo (synchronous)MeshyKILN_MESHY_API_KEYCloud text-to-3DYes (poll status)Tripo3DKILN_TRIPO3D_API_KEYCloud text-to-3DYes (poll status)Stability AIKILN_STABILITY_API_KEYCloud text-to-3DYes (poll status)OpenSCAD(local binary)Parametric code → STLNo (synchronous)\n\nGemini Deep Think uses Google's Gemini API to reason about geometry\nand generate precise OpenSCAD code, which is compiled locally to STL.\nSupports text descriptions and sketch/napkin-drawing descriptions.\nRequires OpenSCAD installed locally.\n\nAgent workflow: Ask what the user wants → generate with best\navailable provider → validate mesh → slice → print."
      },
      {
        "title": "Model Marketplace Search",
        "body": "Search and download existing 3D models from online marketplaces before\ngenerating from scratch.\n\n# Search across all connected marketplaces [safe]\nkiln search \"phone stand\" --json\n\n# Search a specific marketplace [safe]\nkiln search \"vase\" --marketplace thingiverse --json\n\n# Get model details [safe]\nkiln model-details thingiverse MODEL_ID --json\n\n# Download a model file [confirm — downloads to local disk]\nkiln model-download thingiverse MODEL_ID --json\n\nMCP equivalents:\n\n{\"name\": \"search_all_models\", \"arguments\": {\"query\": \"phone stand\"}}\n{\"name\": \"search_models\", \"arguments\": {\"query\": \"vase\", \"marketplace\": \"thingiverse\"}}\n{\"name\": \"get_model_details\", \"arguments\": {\"marketplace\": \"thingiverse\", \"model_id\": \"12345\"}}\n{\"name\": \"download_model_file\", \"arguments\": {\"marketplace\": \"thingiverse\", \"model_id\": \"12345\"}}\n\nSupported marketplaces: Thingiverse, MyMiniFactory, Thangs,\nCults3D, GrabCAD, Etsy.\n\nAgent workflow: User describes what they want → search marketplaces\n→ present top results → if nothing fits, generate from text instead."
      },
      {
        "title": "Fleet Management",
        "body": "Manage multiple printers as a fleet with job queuing and smart routing.\n\n# Register a printer in the fleet [guarded]\nkiln fleet add --name ender3 --host http://192.168.1.100 --type octoprint --json\n\n# Fleet-wide status [safe]\nkiln fleet status --json\n\n# Submit a job to the queue (auto-routes to best available printer)\nkiln fleet print model.gcode --json\n\n# View job queue [safe]\nkiln fleet queue --json\n\nMCP equivalents:\n\n{\"name\": \"fleet_status\", \"arguments\": {}}\n{\"name\": \"register_printer\", \"arguments\": {\"name\": \"ender3\", \"host\": \"http://192.168.1.100\", \"type\": \"octoprint\"}}\n{\"name\": \"submit_fleet_job\", \"arguments\": {\"filename\": \"model.gcode\"}}\n{\"name\": \"list_queue\", \"arguments\": {}}"
      },
      {
        "title": "Webhooks",
        "body": "Register HTTP endpoints to receive real-time notifications.\n\n# Register a webhook [guarded]\nkiln webhook add https://example.com/hook --events print_complete,print_failed --json\n\n# List webhooks [safe]\nkiln webhook list --json\n\n# Delete a webhook [confirm]\nkiln webhook delete WEBHOOK_ID --json\n\nAll payloads are signed with HMAC-SHA256 for verification."
      },
      {
        "title": "Multi-Printer Support",
        "body": "# List saved printers\nkiln printers --json\n\n# Target a specific printer (works with any command)\nkiln --printer my-ender3 status --json\nkiln --printer bambu-x1c print model.gcode --json\n\nRun kiln --help for all commands. kiln <command> --help for options."
      },
      {
        "title": "CLI Response Format",
        "body": "Success — exit code 0, JSON to stdout:\n\n{\"status\": \"printing\", \"filename\": \"model.gcode\", \"progress\": 42.5,\n \"temps\": {\"tool\": 210.0, \"bed\": 60.0}}\n\nError — non-zero exit code, JSON with \"error\":\n\n{\"error\": \"Printer is offline\"}\n\nWarnings — \"warnings\" array alongside normal data:\n\n{\"status\": \"ok\", \"warnings\": [\"Hotend temperature above typical PLA range\"]}\n\nCheck exit code first (0 = success), then \"warnings\" in the JSON."
      },
      {
        "title": "Example Responses",
        "body": "kiln status --json (printing):\n\n{\"status\": \"success\", \"data\": {\"printer\": {\"status\": \"printing\", \"temps\": {\"tool0\": {\"actual\": 210.0, \"target\": 210.0}, \"bed\": {\"actual\": 60.0, \"target\": 60.0}}}, \"job\": {\"filename\": \"model.gcode\", \"progress\": 42.5, \"time_left\": 3600}}}\n\nkiln print model.gcode --json (started):\n\n{\"status\": \"success\", \"message\": \"Print started\", \"filename\": \"model.gcode\"}\n\nkiln order quote model.stl -m pla_standard --json:\n\n{\"status\": \"success\", \"quote_id\": \"q_abc123\", \"price_usd\": 12.50, \"lead_time_days\": 5, \"shipping_options\": [{\"id\": \"std\", \"price_usd\": 4.99, \"days\": 7}]}"
      },
      {
        "title": "MCP Interface",
        "body": "If your platform has an MCP client, Kiln exposes 273 tools as an MCP\nserver. Tools are called by name with JSON arguments — your MCP client\nhandles the transport."
      },
      {
        "title": "Starting the MCP Server",
        "body": "kiln serve\n\nOr configure in Claude Desktop (~/.config/Claude/claude_desktop_config.json):\n\n{\n  \"mcpServers\": {\n    \"kiln\": {\n      \"command\": \"kiln\",\n      \"args\": [\"serve\"],\n      \"env\": {\n        \"KILN_PRINTER_HOST\": \"http://your-printer-ip\",\n        \"KILN_PRINTER_API_KEY\": \"your_key\",\n        \"KILN_PRINTER_TYPE\": \"octoprint\"\n      }\n    }\n  }\n}"
      },
      {
        "title": "MCP Tool Call Format",
        "body": "{\"name\": \"printer_status\", \"arguments\": {}}\n{\"name\": \"start_print\", \"arguments\": {\"filename\": \"model.gcode\"}}\n{\"name\": \"set_temperature\", \"arguments\": {\"tool_temp\": 210, \"bed_temp\": 60}}\n{\"name\": \"send_gcode\", \"arguments\": {\"commands\": [\"G28\", \"G1 X50 Y50 F3000\"]}}\n{\"name\": \"upload_file\", \"arguments\": {\"file_path\": \"/path/to/model.gcode\"}}\n\nParameter names and types are auto-documented by the server — your\nclient shows them. Call get_started() for an onboarding guide."
      },
      {
        "title": "MCP Response Format",
        "body": "All tools return JSON objects. Same pattern as CLI:\n\nSuccess: tool-specific fields\nError: {\"error\": \"message\", \"status\": \"error\"}\nWarnings: \"warnings\" array alongside data"
      },
      {
        "title": "Setup",
        "body": "Set these environment variables before using Kiln (CLI or MCP):\n\nexport KILN_PRINTER_HOST=\"http://your-printer-ip\"\nexport KILN_PRINTER_API_KEY=\"your_api_key\"\nexport KILN_PRINTER_TYPE=\"octoprint\"   # or: moonraker, bambu, prusaconnect, elegoo\n\nVerify connectivity:\n\nkiln status --json"
      },
      {
        "title": "File Intelligence",
        "body": "G-code files on printers often have cryptic names (test5112.gcode,\nspacer_v3.gcode). Kiln extracts metadata from G-code headers so you\ncan reason about files without relying on filenames.\n\n# Analyze a specific file [safe]\nkiln analyze-file benchy.gcode --json\n\nReturns structured metadata:\n\n{\n  \"material\": \"PLA\",\n  \"estimated_time_seconds\": 6150,\n  \"tool_temp\": 210.0,\n  \"bed_temp\": 60.0,\n  \"slicer\": \"PrusaSlicer 2.7.0\",\n  \"layer_height\": 0.2,\n  \"filament_used_mm\": 4523.45\n}\n\nHow to use file intelligence:\n\nList files: kiln files --json — each file now includes metadata\nCheck material match before printing: compare material field with\nloaded material (kiln material show --json)\nCheck estimated time: use estimated_time_seconds to assess duration\nValidate temperatures: compare tool_temp/bed_temp with safety profile\n\nExample: Choosing an overnight print\n\n\"I found 3 files on your printer:\n- benchy.gcode — PLA, ~45 min, 210°C/60°C\n- phone_stand.gcode — PLA, ~2h 10m, 210°C/60°C\n- test5112.gcode — PETG, ~8h 30m, 240°C/80°C\n\nYou have PLA loaded. phone_stand.gcode is the best match for overnight\n(PLA-compatible, reasonable duration). Want me to start it?\""
      },
      {
        "title": "Safety Model",
        "body": "Kiln enforces physical safety — it will hard-block commands that\nexceed temperature limits, contain dangerous G-code, or fail pre-flight\nchecks. You cannot bypass these.\n\nYou enforce operational judgment — deciding when to ask the\nhuman for confirmation vs. acting autonomously. This document defines\nthose rules."
      },
      {
        "title": "Autonomy Tiers",
        "body": "The human configures how much autonomous control you have. Check\nkiln autonomy show --json to see the current level.\n\nLevelNameBehavior0Confirm All(Default) Every confirm-level tool requires human approval.1Pre-screenedYou may skip confirmation IF the operation passes configured constraints (material, time, temperature).2Full TrustYou may execute any tool autonomously. Only emergency tools still need confirmation."
      },
      {
        "title": "Level 1 Constraints",
        "body": "At Level 1, the human pre-configures safety boundaries:\n\n# ~/.kiln/config.yaml\nautonomy:\n  level: 1\n  constraints:\n    max_print_time_seconds: 14400     # 4 hours max\n    allowed_materials: [\"PLA\", \"PETG\"] # only these materials\n    max_tool_temp: 260                 # hotend ceiling\n    max_bed_temp: 100                  # bed ceiling\n    require_first_layer_check: true    # must monitor first layer before leaving print unattended\n\nYour workflow at Level 1:\n\nAnalyze the file (kiln files --json or kiln analyze-file FILE --json)\nCheck constraints: material in allowed list? Time under limit? Temps OK?\nIf ALL constraints pass → proceed without asking\nIf ANY constraint fails → ask the human, explain which constraint failed\n\nExample: Level 1 autonomous print\n\nFile: phone_stand.gcode\n  Material: PLA ✓ (in allowed list)\n  Time: 2h 10m ✓ (under 4h limit)\n  Tool temp: 210°C ✓ (under 260°C limit)\n  Bed temp: 60°C ✓ (under 100°C limit)\n→ All constraints passed. Starting print autonomously.\n\nExample: Level 1 blocked print\n\nFile: test5112.gcode\n  Material: PETG ✓\n  Time: 8h 30m ✗ (exceeds 4h limit)\n→ Constraint failed. Asking human for permission."
      },
      {
        "title": "Level 2 Full Trust",
        "body": "The human has explicitly given you permission to operate freely.\nThis is typically set with a statement like:\n\n\"Every file on my printer is for generic PLA, will print in under 2 hours, and is safe.\"\n\nAt Level 2, you may start prints, set temperatures, and send G-code\nwithout asking — but you MUST still:\n\nRun preflight checks (Kiln does this automatically)\nRespect Kiln's hard safety limits (temperature caps, blocked G-code)\nReport what you did after the fact\nMonitor the print if camera is available"
      },
      {
        "title": "Env Var Override",
        "body": "export KILN_AUTONOMY_LEVEL=1  # Quick override without editing config"
      },
      {
        "title": "Tool Safety Levels",
        "body": "Every command has a safety level. Follow the expected behavior exactly.\nAutonomy level modifies confirm-level behavior only. Safe, guarded,\nand emergency levels are unaffected by autonomy settings.\n\nLevelMeaningYour BehaviorsafeRead-only, no physical effectCall freely. No confirmation needed.guardedHas physical effect but low-risk. Kiln enforces limits.Call without asking. Report what you did.confirmIrreversible or significant state change.Depends on autonomy level. Level 0: ask human. Level 1: check constraints. Level 2: proceed.emergencySafety-critical.Always ask the human unless active danger (thermal runaway, collision)."
      },
      {
        "title": "Safe (read-only, call freely)",
        "body": "CommandDescriptionkiln status --jsonPrinter state, temps, progresskiln files --jsonList files on printerkiln preflight --jsonPre-print safety checkskiln printers --jsonList saved printerskiln discover --jsonScan network for printerskiln history --jsonPrint historykiln cost FILE --jsonCost estimationkiln snapshot --jsonWebcam snapshotkiln verify / kiln doctorSystem health checkkiln material show --jsonCurrent materialkiln material spools --jsonSpool inventorykiln level --status --jsonBed leveling statuskiln firmware status --jsonFirmware versionskiln plugins list --jsonInstalled pluginskiln order materials --jsonList fulfillment materialskiln order status ID --jsonTrack orderkiln order quote FILE --jsonGet manufacturing quotekiln compare-cost FILE --jsonLocal vs. outsourced costkiln autonomy show --jsonCurrent autonomy level and constraintskiln analyze-file FILE --jsonG-code file metadata (material, time, temps)kiln watch --jsonMonitor active print's first layer (read-only)"
      },
      {
        "title": "Guarded (low-risk, report what you did)",
        "body": "CommandDescriptionkiln pause --jsonPause print (reversible)kiln resume --jsonResume print (reversible)kiln upload FILE --jsonUpload G-code (Kiln validates)kiln slice FILE --jsonSlice model (CPU only, no printer effect)kiln wait --jsonWait for print to finishkiln material set --jsonSet loaded material"
      },
      {
        "title": "Confirm (ask human first)",
        "body": "CommandDescriptionWhat to confirmkiln print FILE --jsonStart printing (auto-preflight, --dry-run to preview, --skip-preflight to bypass)File name and materialkiln cancel --jsonCancel printIrreversible — print cannot resumekiln temp --tool X --bed Y --jsonSet temperaturesWhat temp and whykiln gcode CMD... --jsonRaw G-codeWhat commands and whykiln slice FILE --print-after --jsonSlice + printFull pipelinekiln level --trigger --jsonBed levelingPhysical bed probingkiln firmware update --jsonFirmware updateHigh riskkiln order place QUOTE_ID --jsonPlace manufacturing orderPrice and shippingkiln order cancel ORDER_ID --jsonCancel orderMay not be reversiblekiln autonomy set LEVEL --jsonChange autonomy levelSecurity-sensitivestart_monitored_print (MCP)Start print + monitor first layerFile name and material"
      },
      {
        "title": "Emergency (ask human unless active danger)",
        "body": "CommandDescriptionkiln gcode M112 --jsonEmergency stop. Only for genuine emergencies."
      },
      {
        "title": "Upload and Print",
        "body": "# 1. Dry-run first [safe — preview what will happen]\nkiln print model.gcode --dry-run --json\n\n# 2. Start print [confirm — ask human first]\n#    kiln print auto-uploads local files AND runs preflight automatically\n#    \"Ready to print model.gcode with PLA. Proceed?\"\nkiln print model.gcode --json\n\n# 3. Monitor progress [safe]\nkiln status --json              # check periodically\nkiln snapshot --save check.jpg  # visual check after first layer\n\n# 4. Wait for completion [safe]\nkiln wait --json\n\nkiln print auto-uploads local files and runs pre-flight checks.\nUse --skip-preflight to bypass, --dry-run to preview without starting."
      },
      {
        "title": "Temperature Adjustment",
        "body": "# 1. Check current temps [safe]\nkiln temp --json\n\n# 2. Set temps [confirm — tell human: \"Setting hotend to 210°C, bed to 60°C for PLA. OK?\"]\nkiln temp --tool 210 --bed 60 --json\n# IF warnings: relay them"
      },
      {
        "title": "Emergency Response",
        "body": "# 1. Detect issue\nkiln status --json   # check for ERROR state or temp anomalies\n\n# 2. IF thermal runaway or physical danger:\nkiln gcode M112 --json   # emergency stop — may bypass confirmation\n# Then immediately tell human: \"Emergency stop triggered because: {reason}\"\n\n# 3. IF quality issue but no immediate danger:\n# Ask human: \"Detected potential failure. Cancel print?\"\nkiln cancel --json   # only after human confirms"
      },
      {
        "title": "Print Monitoring Loop",
        "body": "Preferred: Use start_monitored_print (MCP) or kiln watch (CLI).\nThese tools combine starting the print with automatic first-layer monitoring.\n\n# CLI — start print with first-layer monitoring\nkiln watch --printer myprinter --delay 120 --checks 3 --interval 60 --json\n\n# MCP — start_monitored_print tool does the same thing\n\nstart_monitored_print / kiln watch:\n\nStarts the print\nWaits 2 minutes for first layer to begin\nCaptures 3 webcam snapshots at 1-minute intervals\nReturns snapshots + heuristic analysis (brightness, variance, warnings)\nAuto-pauses if a failure is reported with confidence >= 0.8\n\nMonitoring tiers (adapt to your capabilities):\n\nYour CapabilitiesHow to MonitorVision + CameraInspect the returned base64 snapshots visually. Look for bed adhesion, warping, extrusion consistency.No Vision + CameraUse the snapshot_analysis fields: brightness, variance, warnings, heuristic_pass. Low brightness = camera off. Low variance = empty bed or blocked camera.No CameraFall back to telemetry: kiln status --json every 5 min. Watch for temp anomalies, progress stalls, error states.\n\nAfter first-layer check passes, continue periodic monitoring:\n\nEvery 5-10 minutes: kiln status --json — check for:\n\nTemperature anomalies (sudden drops = heater failure)\nProgress stalls (same % for >10 min = possible jam)\nError states\n\n\nOn completion: cool down heaters\n\nSituationActionCommandFirst layer failurePause + alert humankiln pause --jsonTemperature anomalyAlert humankiln status --jsonFilament runoutPause + alert humankiln pause --jsonProgress stalledAlert human (do NOT cancel)kiln status --jsonSpaghetti / detachEmergency stopkiln gcode M112 --jsonNormal completionCool downkiln temp --tool 0 --bed 0 --json"
      },
      {
        "title": "Autonomous Overnight Print",
        "body": "The full workflow for safe autonomous printing while the user sleeps:\n\n1. Analyze:  kiln analyze-file FILE --json\n             → Get material, estimated time, temps from G-code metadata.\n\n2. Check autonomy:  kiln autonomy show --json\n             → Verify Level 1+ and constraints pass.\n\n3. Start with monitoring:  start_monitored_print(file_name=\"FILE\")\n             → Starts print + automatic first-layer checks.\n\n4. Review first layer snapshots:\n   - Vision agents: inspect the images directly\n   - Text agents: check heuristic_pass, brightness, variance\n   - If issues: print is already auto-paused. Alert human.\n   - If clean: print continues unattended.\n\n5. Periodic telemetry:  kiln status --json  (every 10 min)\n             → Watch for temp drift, progress stalls, errors.\n\n6. Completion:  kiln temp --tool 0 --bed 0 --json\n             → Cool down. Report result to human in morning.\n\nKey safety net: If require_first_layer_check is enabled in autonomy\nconstraints, the agent MUST use start_monitored_print instead of\nstart_print. The autonomy check will remind you with\n\"require_first_layer_check\": true in the response."
      },
      {
        "title": "Heater Idle Protection",
        "body": "Never set temperatures on an idle printer unless the human explicitly\nasks for pre-heating. If you do, remind: \"Heaters are on. Remember to\nturn them off when done.\"\n\nKiln includes a heater watchdog that automatically cools down\nheaters left on without an active print. Default timeout is 30 minutes\n(KILN_HEATER_TIMEOUT). Set to 0 to disable. The watchdog will NOT\nintervene while a print is active — it only triggers on idle heaters."
      },
      {
        "title": "Relay All Warnings",
        "body": "When Kiln returns warnings, always relay them to the human verbatim."
      },
      {
        "title": "Never Generate G-code",
        "body": "Never write or modify G-code. Use kiln slice for slicing, or use\npre-sliced files already on the printer."
      },
      {
        "title": "Material Awareness",
        "body": "Before printing, check loaded material (kiln material show --json).\nIf mismatched with what the G-code expects, warn the human."
      },
      {
        "title": "First-Layer Monitoring",
        "body": "If camera available, check the first few minutes of a new print with\nkiln snapshot. If something looks wrong, ask the human before acting."
      },
      {
        "title": "What Kiln Enforces (you cannot bypass)",
        "body": "ProtectionHowMax temperature per printer modelSafety profiles (per KILN_PRINTER_MODEL)Blocked G-code commandsM112, M500-502, M552-554, M997 always rejectedPre-flight before printingMandatory — kiln print runs it automaticallyG-code validation on uploadFull file scanned for blocked commandsG-code validation on sendEvery kiln gcode call is validatedRate limitingDangerous commands have cooldowns to prevent spamFile size limits500MB upload maxHeater auto-offIdle heaters auto-cool after KILN_HEATER_TIMEOUT min (default 30)"
      },
      {
        "title": "Licensing & Feature Tiers",
        "body": "Kiln uses a tiered licensing model. Most features are free forever.\n\nTierPriceKey FeaturesFree$0All printer control, slicing, safety enforcement, text-to-3D generation, marketplace search, CLI + MCP tools, single printerProPaidFleet management (multi-printer), fleet analytics, priority job queueBusinessPaidOutsourced manufacturing (Craftcloud/Sculpteo fulfillment ordering + cancellation)EnterprisePaidDedicated MCP server, SSO authentication, audit trail export, role-based access, lockable safety profiles, on-prem deployment\n\nRevenue tracking: Kiln takes a 2.5% platform fee on revenue from\nmodels published through Kiln's marketplace pipeline (configurable via\nKILN_PLATFORM_FEE_PCT, range 0.0–15.0%). Local printing is always free.\n\nLicense key: Set via KILN_LICENSE_KEY env var or ~/.kiln/license file.\nNo key = free tier. Keys are prefixed kiln_pro_, kiln_biz_, kiln_ent_."
      },
      {
        "title": "Configuration",
        "body": "Preferred: kiln setup (interactive wizard, saves to ~/.kiln/config.yaml).\n\nAlternative: env vars (useful for Docker/CI):\n\nEnv VarPurposeDefaultKILN_PRINTER_HOSTPrinter URL (e.g. http://192.168.1.100)(from config)KILN_PRINTER_API_KEYPrinter API key(from config)KILN_PRINTER_TYPEoctoprint / moonraker / bambu / prusaconnect / elegoooctoprintKILN_PRINTER_MODELSafety profile id (e.g. ender3, bambu_x1c)(generic limits)KILN_AUTONOMY_LEVELAutonomy tier: 0 (confirm all), 1 (pre-screened), 2 (full trust)0KILN_HEATER_TIMEOUTMinutes before idle heaters auto-cool (0=disabled)30KILN_MONITOR_REQUIRE_FIRST_LAYERRequire first-layer monitoring for autonomous printsfalseKILN_MONITOR_FIRST_LAYER_DELAYSeconds before first snapshot after print starts120KILN_MONITOR_FIRST_LAYER_CHECKSNumber of first-layer snapshots to capture3KILN_MONITOR_FIRST_LAYER_INTERVALSeconds between first-layer snapshots60KILN_MONITOR_AUTO_PAUSEAuto-pause on detected failuretrueKILN_MONITOR_REQUIRE_CAMERARefuse to start monitored print without camerafalseKILN_VISION_AUTO_PAUSEAuto-pause on vision failure detection (confidence >= 0.8)falseKILN_CRAFTCLOUD_API_KEYCraftcloud fulfillment API key(none)KILN_SCULPTEO_API_KEYSculpteo partner API key(none)KILN_MESHY_API_KEYMeshy text-to-3D API key(none)KILN_TRIPO3D_API_KEYTripo3D text-to-3D API key(none)KILN_STABILITY_API_KEYStability AI text-to-3D API key(none)KILN_GEMINI_API_KEYGoogle Gemini Deep Think API key(none)KILN_LICENSE_KEYLicense key (Pro/Business/Enterprise)(free tier)KILN_PLATFORM_FEE_PCTPlatform fee % on marketplace revenue2.5"
      }
    ],
    "body": "Kiln — Agent Skill Definition\n\nYou are controlling a physical 3D printer through Kiln. Physical actions are irreversible and can damage hardware. Follow these rules strictly.\n\nQuick Start\nkiln setup          # interactive wizard — finds printers, saves config\nkiln verify         # check everything is working\nkiln status --json  # see what the printer is doing\n\n\nThen ask the human what they'd like to print.\n\nWhich Interface to Use\n\nKiln supports two interfaces. Pick based on your capabilities:\n\n\tCLI\tMCP\nUse when\tYou have a shell/exec tool\tYou have an MCP client configured\nHow it works\tkiln <command> [flags] --json\tMCP tool calls with JSON arguments\nResponse format\tJSON to stdout (with --json)\tStructured JSON objects\nSetup\tJust env vars + kiln on PATH\tkiln serve running as MCP server\nTool count\t107 CLI commands\t273 MCP tools\nBest for\tQuick start, debugging, simple workflows\tTight integration, full tool catalog\n\nDon't know which? Try CLI first. Run kiln status --json. If that works, you're good. MCP gives you more tools but requires server setup.\n\nCLI Interface\n\nRun commands via your shell/exec tool. Always use --json for machine-readable output.\n\nkiln <command> [options] --json\n\nFirst-Time Setup\n\nIf the printer isn't configured yet, run these first:\n\n# Interactive wizard: auto-discovers printers, saves config, tests connection\nkiln setup\n\n# Or manually add a printer\nkiln auth --name my-printer --host http://192.168.1.100 --type octoprint --api-key YOUR_KEY\n\n# Verify everything works (Python, slicer, config, printer reachable, database)\nkiln verify\n\n# Scan network for printers\nkiln discover --json\n\n\nAfter setup, config is saved to ~/.kiln/config.yaml — no env vars needed.\n\nCore Commands\n# Check printer status (start here)\nkiln status --json\n\n# List files on printer\nkiln files --json\n\n# Run safety checks before printing\nkiln preflight --json\nkiln preflight --material PLA --json\n\n# Upload a G-code file\nkiln upload /path/to/model.gcode --json\n\n# Start printing (auto-uploads local files, auto-runs preflight)\nkiln print model.gcode --json\nkiln print model.gcode --dry-run --json   # preview without starting\n\n# Cancel / pause / resume\nkiln cancel --json\nkiln pause --json\nkiln resume --json\n\n# Set temperatures\nkiln temp --tool 210 --bed 60 --json\nkiln temp --json                        # read current temps (no flags)\n\n# Send raw G-code\nkiln gcode G28 \"G1 X50 Y50 F3000\" --json\n\n# Slice STL to G-code\nkiln slice model.stl --json\nkiln slice model.stl --print-after --json   # slice + upload + print\n\n# Webcam snapshot\nkiln snapshot --save photo.jpg --json\n\n# Wait for print to finish (blocks until done)\nkiln wait --json\n\n# Print history\nkiln history --json\nkiln history --status completed --json\n\n# Discover printers on network\nkiln discover --json\n\n# Cost estimate\nkiln cost model.gcode --json\n\nOutsourced Manufacturing (Fulfillment)\n\nNo local printer? Printer busy? Kiln can outsource to manufacturing services (Craftcloud, Sculpteo) with the same CLI.\n\n# List available materials from configured service\nkiln order materials --json\n\n# Get a manufacturing quote (uploads model, returns pricing + lead time)\nkiln order quote model.stl -m pla_standard --json\n\n# Place the order [confirm — ask human first, shows price]\nkiln order place QUOTE_ID --json\n\n# Track order status\nkiln order status ORDER_ID --json\n\n# Cancel (if still cancellable)\nkiln order cancel ORDER_ID --json\n\n# Compare local printing vs. outsourced cost side-by-side\nkiln compare-cost model.gcode --fulfillment-material pla_standard --json\n\n\nSetup: Set one of these env vars (or add to ~/.kiln/config.yaml):\n\nexport KILN_CRAFTCLOUD_API_KEY=\"your_key\"     # Craftcloud (easiest — one key)\n# OR\nexport KILN_SCULPTEO_API_KEY=\"your_key\"       # Sculpteo\n\n\nAgent workflow: Check local printer → if unavailable/busy → quote fulfillment → present price to human → human approves → place order → return tracking link.\n\nText & Sketch to 3D Generation\n\nGenerate printable 3D models from text descriptions or napkin sketches. Kiln auto-discovers providers from environment variables.\n\n# List available generation providers [safe]\nkiln generate list --json\n\n# Generate a model from text [confirm — creates new file]\nkiln generate \"a small vase with organic curves\" --provider gemini --json\nkiln generate \"phone stand\" --provider meshy --style organic --json\n\n# Check generation status (for async providers like Meshy/Tripo3D)\nkiln generate status JOB_ID --json\n\n# Download completed result\nkiln generate download JOB_ID --json\n\n\nMCP equivalents:\n\n{\"name\": \"list_generation_providers\", \"arguments\": {}}\n{\"name\": \"generate_model\", \"arguments\": {\"prompt\": \"a small vase\", \"provider\": \"gemini\"}}\n{\"name\": \"check_generation_status\", \"arguments\": {\"job_id\": \"gemini-abc123\"}}\n{\"name\": \"download_generated_model\", \"arguments\": {\"job_id\": \"gemini-abc123\"}}\n\n\nAvailable providers (set env var to enable):\n\nProvider\tEnv Var\tType\tAsync?\nGemini Deep Think\tKILN_GEMINI_API_KEY\tAI reasoning → OpenSCAD → STL\tNo (synchronous)\nMeshy\tKILN_MESHY_API_KEY\tCloud text-to-3D\tYes (poll status)\nTripo3D\tKILN_TRIPO3D_API_KEY\tCloud text-to-3D\tYes (poll status)\nStability AI\tKILN_STABILITY_API_KEY\tCloud text-to-3D\tYes (poll status)\nOpenSCAD\t(local binary)\tParametric code → STL\tNo (synchronous)\n\nGemini Deep Think uses Google's Gemini API to reason about geometry and generate precise OpenSCAD code, which is compiled locally to STL. Supports text descriptions and sketch/napkin-drawing descriptions. Requires OpenSCAD installed locally.\n\nAgent workflow: Ask what the user wants → generate with best available provider → validate mesh → slice → print.\n\nModel Marketplace Search\n\nSearch and download existing 3D models from online marketplaces before generating from scratch.\n\n# Search across all connected marketplaces [safe]\nkiln search \"phone stand\" --json\n\n# Search a specific marketplace [safe]\nkiln search \"vase\" --marketplace thingiverse --json\n\n# Get model details [safe]\nkiln model-details thingiverse MODEL_ID --json\n\n# Download a model file [confirm — downloads to local disk]\nkiln model-download thingiverse MODEL_ID --json\n\n\nMCP equivalents:\n\n{\"name\": \"search_all_models\", \"arguments\": {\"query\": \"phone stand\"}}\n{\"name\": \"search_models\", \"arguments\": {\"query\": \"vase\", \"marketplace\": \"thingiverse\"}}\n{\"name\": \"get_model_details\", \"arguments\": {\"marketplace\": \"thingiverse\", \"model_id\": \"12345\"}}\n{\"name\": \"download_model_file\", \"arguments\": {\"marketplace\": \"thingiverse\", \"model_id\": \"12345\"}}\n\n\nSupported marketplaces: Thingiverse, MyMiniFactory, Thangs, Cults3D, GrabCAD, Etsy.\n\nAgent workflow: User describes what they want → search marketplaces → present top results → if nothing fits, generate from text instead.\n\nFleet Management\n\nManage multiple printers as a fleet with job queuing and smart routing.\n\n# Register a printer in the fleet [guarded]\nkiln fleet add --name ender3 --host http://192.168.1.100 --type octoprint --json\n\n# Fleet-wide status [safe]\nkiln fleet status --json\n\n# Submit a job to the queue (auto-routes to best available printer)\nkiln fleet print model.gcode --json\n\n# View job queue [safe]\nkiln fleet queue --json\n\n\nMCP equivalents:\n\n{\"name\": \"fleet_status\", \"arguments\": {}}\n{\"name\": \"register_printer\", \"arguments\": {\"name\": \"ender3\", \"host\": \"http://192.168.1.100\", \"type\": \"octoprint\"}}\n{\"name\": \"submit_fleet_job\", \"arguments\": {\"filename\": \"model.gcode\"}}\n{\"name\": \"list_queue\", \"arguments\": {}}\n\nWebhooks\n\nRegister HTTP endpoints to receive real-time notifications.\n\n# Register a webhook [guarded]\nkiln webhook add https://example.com/hook --events print_complete,print_failed --json\n\n# List webhooks [safe]\nkiln webhook list --json\n\n# Delete a webhook [confirm]\nkiln webhook delete WEBHOOK_ID --json\n\n\nAll payloads are signed with HMAC-SHA256 for verification.\n\nMulti-Printer Support\n# List saved printers\nkiln printers --json\n\n# Target a specific printer (works with any command)\nkiln --printer my-ender3 status --json\nkiln --printer bambu-x1c print model.gcode --json\n\n\nRun kiln --help for all commands. kiln <command> --help for options.\n\nCLI Response Format\n\nSuccess — exit code 0, JSON to stdout:\n\n{\"status\": \"printing\", \"filename\": \"model.gcode\", \"progress\": 42.5,\n \"temps\": {\"tool\": 210.0, \"bed\": 60.0}}\n\n\nError — non-zero exit code, JSON with \"error\":\n\n{\"error\": \"Printer is offline\"}\n\n\nWarnings — \"warnings\" array alongside normal data:\n\n{\"status\": \"ok\", \"warnings\": [\"Hotend temperature above typical PLA range\"]}\n\n\nCheck exit code first (0 = success), then \"warnings\" in the JSON.\n\nExample Responses\n\nkiln status --json (printing):\n\n{\"status\": \"success\", \"data\": {\"printer\": {\"status\": \"printing\", \"temps\": {\"tool0\": {\"actual\": 210.0, \"target\": 210.0}, \"bed\": {\"actual\": 60.0, \"target\": 60.0}}}, \"job\": {\"filename\": \"model.gcode\", \"progress\": 42.5, \"time_left\": 3600}}}\n\n\nkiln print model.gcode --json (started):\n\n{\"status\": \"success\", \"message\": \"Print started\", \"filename\": \"model.gcode\"}\n\n\nkiln order quote model.stl -m pla_standard --json:\n\n{\"status\": \"success\", \"quote_id\": \"q_abc123\", \"price_usd\": 12.50, \"lead_time_days\": 5, \"shipping_options\": [{\"id\": \"std\", \"price_usd\": 4.99, \"days\": 7}]}\n\nMCP Interface\n\nIf your platform has an MCP client, Kiln exposes 273 tools as an MCP server. Tools are called by name with JSON arguments — your MCP client handles the transport.\n\nStarting the MCP Server\nkiln serve\n\n\nOr configure in Claude Desktop (~/.config/Claude/claude_desktop_config.json):\n\n{\n  \"mcpServers\": {\n    \"kiln\": {\n      \"command\": \"kiln\",\n      \"args\": [\"serve\"],\n      \"env\": {\n        \"KILN_PRINTER_HOST\": \"http://your-printer-ip\",\n        \"KILN_PRINTER_API_KEY\": \"your_key\",\n        \"KILN_PRINTER_TYPE\": \"octoprint\"\n      }\n    }\n  }\n}\n\nMCP Tool Call Format\n{\"name\": \"printer_status\", \"arguments\": {}}\n{\"name\": \"start_print\", \"arguments\": {\"filename\": \"model.gcode\"}}\n{\"name\": \"set_temperature\", \"arguments\": {\"tool_temp\": 210, \"bed_temp\": 60}}\n{\"name\": \"send_gcode\", \"arguments\": {\"commands\": [\"G28\", \"G1 X50 Y50 F3000\"]}}\n{\"name\": \"upload_file\", \"arguments\": {\"file_path\": \"/path/to/model.gcode\"}}\n\n\nParameter names and types are auto-documented by the server — your client shows them. Call get_started() for an onboarding guide.\n\nMCP Response Format\n\nAll tools return JSON objects. Same pattern as CLI:\n\nSuccess: tool-specific fields\nError: {\"error\": \"message\", \"status\": \"error\"}\nWarnings: \"warnings\" array alongside data\nSetup\n\nSet these environment variables before using Kiln (CLI or MCP):\n\nexport KILN_PRINTER_HOST=\"http://your-printer-ip\"\nexport KILN_PRINTER_API_KEY=\"your_api_key\"\nexport KILN_PRINTER_TYPE=\"octoprint\"   # or: moonraker, bambu, prusaconnect, elegoo\n\n\nVerify connectivity:\n\nkiln status --json\n\nFile Intelligence\n\nG-code files on printers often have cryptic names (test5112.gcode, spacer_v3.gcode). Kiln extracts metadata from G-code headers so you can reason about files without relying on filenames.\n\n# Analyze a specific file [safe]\nkiln analyze-file benchy.gcode --json\n\n\nReturns structured metadata:\n\n{\n  \"material\": \"PLA\",\n  \"estimated_time_seconds\": 6150,\n  \"tool_temp\": 210.0,\n  \"bed_temp\": 60.0,\n  \"slicer\": \"PrusaSlicer 2.7.0\",\n  \"layer_height\": 0.2,\n  \"filament_used_mm\": 4523.45\n}\n\n\nHow to use file intelligence:\n\nList files: kiln files --json — each file now includes metadata\nCheck material match before printing: compare material field with loaded material (kiln material show --json)\nCheck estimated time: use estimated_time_seconds to assess duration\nValidate temperatures: compare tool_temp/bed_temp with safety profile\n\nExample: Choosing an overnight print\n\n\"I found 3 files on your printer:\n- benchy.gcode — PLA, ~45 min, 210°C/60°C\n- phone_stand.gcode — PLA, ~2h 10m, 210°C/60°C\n- test5112.gcode — PETG, ~8h 30m, 240°C/80°C\n\nYou have PLA loaded. phone_stand.gcode is the best match for overnight\n(PLA-compatible, reasonable duration). Want me to start it?\"\n\nSafety Model\n\nKiln enforces physical safety — it will hard-block commands that exceed temperature limits, contain dangerous G-code, or fail pre-flight checks. You cannot bypass these.\n\nYou enforce operational judgment — deciding when to ask the human for confirmation vs. acting autonomously. This document defines those rules.\n\nAutonomy Tiers\n\nThe human configures how much autonomous control you have. Check kiln autonomy show --json to see the current level.\n\nLevel\tName\tBehavior\n0\tConfirm All\t(Default) Every confirm-level tool requires human approval.\n1\tPre-screened\tYou may skip confirmation IF the operation passes configured constraints (material, time, temperature).\n2\tFull Trust\tYou may execute any tool autonomously. Only emergency tools still need confirmation.\nLevel 1 Constraints\n\nAt Level 1, the human pre-configures safety boundaries:\n\n# ~/.kiln/config.yaml\nautonomy:\n  level: 1\n  constraints:\n    max_print_time_seconds: 14400     # 4 hours max\n    allowed_materials: [\"PLA\", \"PETG\"] # only these materials\n    max_tool_temp: 260                 # hotend ceiling\n    max_bed_temp: 100                  # bed ceiling\n    require_first_layer_check: true    # must monitor first layer before leaving print unattended\n\n\nYour workflow at Level 1:\n\nAnalyze the file (kiln files --json or kiln analyze-file FILE --json)\nCheck constraints: material in allowed list? Time under limit? Temps OK?\nIf ALL constraints pass → proceed without asking\nIf ANY constraint fails → ask the human, explain which constraint failed\n\nExample: Level 1 autonomous print\n\nFile: phone_stand.gcode\n  Material: PLA ✓ (in allowed list)\n  Time: 2h 10m ✓ (under 4h limit)\n  Tool temp: 210°C ✓ (under 260°C limit)\n  Bed temp: 60°C ✓ (under 100°C limit)\n→ All constraints passed. Starting print autonomously.\n\n\nExample: Level 1 blocked print\n\nFile: test5112.gcode\n  Material: PETG ✓\n  Time: 8h 30m ✗ (exceeds 4h limit)\n→ Constraint failed. Asking human for permission.\n\nLevel 2 Full Trust\n\nThe human has explicitly given you permission to operate freely. This is typically set with a statement like:\n\n\"Every file on my printer is for generic PLA, will print in under 2 hours, and is safe.\"\n\nAt Level 2, you may start prints, set temperatures, and send G-code without asking — but you MUST still:\n\nRun preflight checks (Kiln does this automatically)\nRespect Kiln's hard safety limits (temperature caps, blocked G-code)\nReport what you did after the fact\nMonitor the print if camera is available\nEnv Var Override\nexport KILN_AUTONOMY_LEVEL=1  # Quick override without editing config\n\nTool Safety Levels\n\nEvery command has a safety level. Follow the expected behavior exactly. Autonomy level modifies confirm-level behavior only. Safe, guarded, and emergency levels are unaffected by autonomy settings.\n\nLevel\tMeaning\tYour Behavior\nsafe\tRead-only, no physical effect\tCall freely. No confirmation needed.\nguarded\tHas physical effect but low-risk. Kiln enforces limits.\tCall without asking. Report what you did.\nconfirm\tIrreversible or significant state change.\tDepends on autonomy level. Level 0: ask human. Level 1: check constraints. Level 2: proceed.\nemergency\tSafety-critical.\tAlways ask the human unless active danger (thermal runaway, collision).\nCommand Safety Classifications\nSafe (read-only, call freely)\nCommand\tDescription\nkiln status --json\tPrinter state, temps, progress\nkiln files --json\tList files on printer\nkiln preflight --json\tPre-print safety checks\nkiln printers --json\tList saved printers\nkiln discover --json\tScan network for printers\nkiln history --json\tPrint history\nkiln cost FILE --json\tCost estimation\nkiln snapshot --json\tWebcam snapshot\nkiln verify / kiln doctor\tSystem health check\nkiln material show --json\tCurrent material\nkiln material spools --json\tSpool inventory\nkiln level --status --json\tBed leveling status\nkiln firmware status --json\tFirmware versions\nkiln plugins list --json\tInstalled plugins\nkiln order materials --json\tList fulfillment materials\nkiln order status ID --json\tTrack order\nkiln order quote FILE --json\tGet manufacturing quote\nkiln compare-cost FILE --json\tLocal vs. outsourced cost\nkiln autonomy show --json\tCurrent autonomy level and constraints\nkiln analyze-file FILE --json\tG-code file metadata (material, time, temps)\nkiln watch --json\tMonitor active print's first layer (read-only)\nGuarded (low-risk, report what you did)\nCommand\tDescription\nkiln pause --json\tPause print (reversible)\nkiln resume --json\tResume print (reversible)\nkiln upload FILE --json\tUpload G-code (Kiln validates)\nkiln slice FILE --json\tSlice model (CPU only, no printer effect)\nkiln wait --json\tWait for print to finish\nkiln material set --json\tSet loaded material\nConfirm (ask human first)\nCommand\tDescription\tWhat to confirm\nkiln print FILE --json\tStart printing (auto-preflight, --dry-run to preview, --skip-preflight to bypass)\tFile name and material\nkiln cancel --json\tCancel print\tIrreversible — print cannot resume\nkiln temp --tool X --bed Y --json\tSet temperatures\tWhat temp and why\nkiln gcode CMD... --json\tRaw G-code\tWhat commands and why\nkiln slice FILE --print-after --json\tSlice + print\tFull pipeline\nkiln level --trigger --json\tBed leveling\tPhysical bed probing\nkiln firmware update --json\tFirmware update\tHigh risk\nkiln order place QUOTE_ID --json\tPlace manufacturing order\tPrice and shipping\nkiln order cancel ORDER_ID --json\tCancel order\tMay not be reversible\nkiln autonomy set LEVEL --json\tChange autonomy level\tSecurity-sensitive\nstart_monitored_print (MCP)\tStart print + monitor first layer\tFile name and material\nEmergency (ask human unless active danger)\nCommand\tDescription\nkiln gcode M112 --json\tEmergency stop. Only for genuine emergencies.\nRecommended Workflows\nUpload and Print\n# 1. Dry-run first [safe — preview what will happen]\nkiln print model.gcode --dry-run --json\n\n# 2. Start print [confirm — ask human first]\n#    kiln print auto-uploads local files AND runs preflight automatically\n#    \"Ready to print model.gcode with PLA. Proceed?\"\nkiln print model.gcode --json\n\n# 3. Monitor progress [safe]\nkiln status --json              # check periodically\nkiln snapshot --save check.jpg  # visual check after first layer\n\n# 4. Wait for completion [safe]\nkiln wait --json\n\n\nkiln print auto-uploads local files and runs pre-flight checks. Use --skip-preflight to bypass, --dry-run to preview without starting.\n\nTemperature Adjustment\n# 1. Check current temps [safe]\nkiln temp --json\n\n# 2. Set temps [confirm — tell human: \"Setting hotend to 210°C, bed to 60°C for PLA. OK?\"]\nkiln temp --tool 210 --bed 60 --json\n# IF warnings: relay them\n\nEmergency Response\n# 1. Detect issue\nkiln status --json   # check for ERROR state or temp anomalies\n\n# 2. IF thermal runaway or physical danger:\nkiln gcode M112 --json   # emergency stop — may bypass confirmation\n# Then immediately tell human: \"Emergency stop triggered because: {reason}\"\n\n# 3. IF quality issue but no immediate danger:\n# Ask human: \"Detected potential failure. Cancel print?\"\nkiln cancel --json   # only after human confirms\n\nPrint Monitoring Loop\n\nPreferred: Use start_monitored_print (MCP) or kiln watch (CLI). These tools combine starting the print with automatic first-layer monitoring.\n\n# CLI — start print with first-layer monitoring\nkiln watch --printer myprinter --delay 120 --checks 3 --interval 60 --json\n\n# MCP — start_monitored_print tool does the same thing\n\n\nstart_monitored_print / kiln watch:\n\nStarts the print\nWaits 2 minutes for first layer to begin\nCaptures 3 webcam snapshots at 1-minute intervals\nReturns snapshots + heuristic analysis (brightness, variance, warnings)\nAuto-pauses if a failure is reported with confidence >= 0.8\n\nMonitoring tiers (adapt to your capabilities):\n\nYour Capabilities\tHow to Monitor\nVision + Camera\tInspect the returned base64 snapshots visually. Look for bed adhesion, warping, extrusion consistency.\nNo Vision + Camera\tUse the snapshot_analysis fields: brightness, variance, warnings, heuristic_pass. Low brightness = camera off. Low variance = empty bed or blocked camera.\nNo Camera\tFall back to telemetry: kiln status --json every 5 min. Watch for temp anomalies, progress stalls, error states.\n\nAfter first-layer check passes, continue periodic monitoring:\n\nEvery 5-10 minutes: kiln status --json — check for:\nTemperature anomalies (sudden drops = heater failure)\nProgress stalls (same % for >10 min = possible jam)\nError states\nOn completion: cool down heaters\nSituation\tAction\tCommand\nFirst layer failure\tPause + alert human\tkiln pause --json\nTemperature anomaly\tAlert human\tkiln status --json\nFilament runout\tPause + alert human\tkiln pause --json\nProgress stalled\tAlert human (do NOT cancel)\tkiln status --json\nSpaghetti / detach\tEmergency stop\tkiln gcode M112 --json\nNormal completion\tCool down\tkiln temp --tool 0 --bed 0 --json\nAutonomous Overnight Print\n\nThe full workflow for safe autonomous printing while the user sleeps:\n\n1. Analyze:  kiln analyze-file FILE --json\n             → Get material, estimated time, temps from G-code metadata.\n\n2. Check autonomy:  kiln autonomy show --json\n             → Verify Level 1+ and constraints pass.\n\n3. Start with monitoring:  start_monitored_print(file_name=\"FILE\")\n             → Starts print + automatic first-layer checks.\n\n4. Review first layer snapshots:\n   - Vision agents: inspect the images directly\n   - Text agents: check heuristic_pass, brightness, variance\n   - If issues: print is already auto-paused. Alert human.\n   - If clean: print continues unattended.\n\n5. Periodic telemetry:  kiln status --json  (every 10 min)\n             → Watch for temp drift, progress stalls, errors.\n\n6. Completion:  kiln temp --tool 0 --bed 0 --json\n             → Cool down. Report result to human in morning.\n\n\nKey safety net: If require_first_layer_check is enabled in autonomy constraints, the agent MUST use start_monitored_print instead of start_print. The autonomy check will remind you with \"require_first_layer_check\": true in the response.\n\nOperational Policies\nHeater Idle Protection\n\nNever set temperatures on an idle printer unless the human explicitly asks for pre-heating. If you do, remind: \"Heaters are on. Remember to turn them off when done.\"\n\nKiln includes a heater watchdog that automatically cools down heaters left on without an active print. Default timeout is 30 minutes (KILN_HEATER_TIMEOUT). Set to 0 to disable. The watchdog will NOT intervene while a print is active — it only triggers on idle heaters.\n\nRelay All Warnings\n\nWhen Kiln returns warnings, always relay them to the human verbatim.\n\nNever Generate G-code\n\nNever write or modify G-code. Use kiln slice for slicing, or use pre-sliced files already on the printer.\n\nMaterial Awareness\n\nBefore printing, check loaded material (kiln material show --json). If mismatched with what the G-code expects, warn the human.\n\nFirst-Layer Monitoring\n\nIf camera available, check the first few minutes of a new print with kiln snapshot. If something looks wrong, ask the human before acting.\n\nWhat Kiln Enforces (you cannot bypass)\nProtection\tHow\nMax temperature per printer model\tSafety profiles (per KILN_PRINTER_MODEL)\nBlocked G-code commands\tM112, M500-502, M552-554, M997 always rejected\nPre-flight before printing\tMandatory — kiln print runs it automatically\nG-code validation on upload\tFull file scanned for blocked commands\nG-code validation on send\tEvery kiln gcode call is validated\nRate limiting\tDangerous commands have cooldowns to prevent spam\nFile size limits\t500MB upload max\nHeater auto-off\tIdle heaters auto-cool after KILN_HEATER_TIMEOUT min (default 30)\nLicensing & Feature Tiers\n\nKiln uses a tiered licensing model. Most features are free forever.\n\nTier\tPrice\tKey Features\nFree\t$0\tAll printer control, slicing, safety enforcement, text-to-3D generation, marketplace search, CLI + MCP tools, single printer\nPro\tPaid\tFleet management (multi-printer), fleet analytics, priority job queue\nBusiness\tPaid\tOutsourced manufacturing (Craftcloud/Sculpteo fulfillment ordering + cancellation)\nEnterprise\tPaid\tDedicated MCP server, SSO authentication, audit trail export, role-based access, lockable safety profiles, on-prem deployment\n\nRevenue tracking: Kiln takes a 2.5% platform fee on revenue from models published through Kiln's marketplace pipeline (configurable via KILN_PLATFORM_FEE_PCT, range 0.0–15.0%). Local printing is always free.\n\nLicense key: Set via KILN_LICENSE_KEY env var or ~/.kiln/license file. No key = free tier. Keys are prefixed kiln_pro_, kiln_biz_, kiln_ent_.\n\nConfiguration\n\nPreferred: kiln setup (interactive wizard, saves to ~/.kiln/config.yaml).\n\nAlternative: env vars (useful for Docker/CI):\n\nEnv Var\tPurpose\tDefault\nKILN_PRINTER_HOST\tPrinter URL (e.g. http://192.168.1.100)\t(from config)\nKILN_PRINTER_API_KEY\tPrinter API key\t(from config)\nKILN_PRINTER_TYPE\toctoprint / moonraker / bambu / prusaconnect / elegoo\toctoprint\nKILN_PRINTER_MODEL\tSafety profile id (e.g. ender3, bambu_x1c)\t(generic limits)\nKILN_AUTONOMY_LEVEL\tAutonomy tier: 0 (confirm all), 1 (pre-screened), 2 (full trust)\t0\nKILN_HEATER_TIMEOUT\tMinutes before idle heaters auto-cool (0=disabled)\t30\nKILN_MONITOR_REQUIRE_FIRST_LAYER\tRequire first-layer monitoring for autonomous prints\tfalse\nKILN_MONITOR_FIRST_LAYER_DELAY\tSeconds before first snapshot after print starts\t120\nKILN_MONITOR_FIRST_LAYER_CHECKS\tNumber of first-layer snapshots to capture\t3\nKILN_MONITOR_FIRST_LAYER_INTERVAL\tSeconds between first-layer snapshots\t60\nKILN_MONITOR_AUTO_PAUSE\tAuto-pause on detected failure\ttrue\nKILN_MONITOR_REQUIRE_CAMERA\tRefuse to start monitored print without camera\tfalse\nKILN_VISION_AUTO_PAUSE\tAuto-pause on vision failure detection (confidence >= 0.8)\tfalse\nKILN_CRAFTCLOUD_API_KEY\tCraftcloud fulfillment API key\t(none)\nKILN_SCULPTEO_API_KEY\tSculpteo partner API key\t(none)\nKILN_MESHY_API_KEY\tMeshy text-to-3D API key\t(none)\nKILN_TRIPO3D_API_KEY\tTripo3D text-to-3D API key\t(none)\nKILN_STABILITY_API_KEY\tStability AI text-to-3D API key\t(none)\nKILN_GEMINI_API_KEY\tGoogle Gemini Deep Think API key\t(none)\nKILN_LICENSE_KEY\tLicense key (Pro/Business/Enterprise)\t(free tier)\nKILN_PLATFORM_FEE_PCT\tPlatform fee % on marketplace revenue\t2.5"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/codeofaxel/kiln",
    "publisherUrl": "https://clawhub.ai/codeofaxel/kiln",
    "owner": "codeofaxel",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/kiln",
    "downloadUrl": "https://openagent3.xyz/downloads/kiln",
    "agentUrl": "https://openagent3.xyz/skills/kiln/agent",
    "manifestUrl": "https://openagent3.xyz/skills/kiln/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/kiln/agent.md"
  }
}