🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Build Custom Linux ISO's and Deployments

by @ziegenbalg

Build, test, and deploy custom Linux ISOs with OpenFactory. Create VMs, run compliance tests, manage recipes.

Versionv1.0.0
Downloads287
Stars⭐ 1
TERMINAL
clawhub install openfactory

πŸ“– About This Skill


name: open-factory slug: open-factory description: Build, test, and deploy custom Linux ISOs with OpenFactory. Create VMs, run compliance tests, manage recipes. version: 1.0.0 author: OpenFactory homepage: https://openfactory.tech

OpenFactory Skill

Build custom Linux ISOs, deploy VMs, run compliance tests, and manage infrastructure β€” all through natural language.

Connection

OpenFactory exposes an MCP (Model Context Protocol) server over SSE.

Endpoint: https://build.openfactory.tech/api/mcp/sse

Authentication (pick one):

  • API Key (recommended): Generate at the OpenFactory console under Settings > MCP Keys. Pass as api_key parameter on every tool call, or as Authorization: Bearer of_mcp_ HTTP header.
  • Session Token: The first tool call returns a session_token in its response. Pass it to all subsequent calls for session continuity.
  • Session token is critical β€” cloud MCP clients rotate IPs between requests. Without passing session_token back, each call looks like a new anonymous user.

    Tools

    Builds

    | Tool | What it does | |------|-------------| | list_builds(status_filter?, limit?) | List your builds. Filter by queued, building, built, failed, completed. | | get_build(build_id) | Get full build details including recipe, ISO path, test results. | | get_build_status(build_id) | Get current status, stage, and progress percentage. | | create_build(recipe) | Create a new build from a recipe (see Recipe Schema below). | | retry_build(build_id) | Retry a failed build with the same recipe. | | get_iso_download_url(build_id) | Get a download URL for the completed ISO. | | deploy_from_git(repo_url, base_image?, branch?) | Build an ISO that auto-deploys a git repo as a service. |

    Recipes

    | Tool | What it does | |------|-------------| | list_recipes(category?, search?) | Browse pre-built recipe templates. Categories: healthcare, industrial, education, municipal, research, ai-development. | | list_recipe_categories() | List all available categories with descriptions. | | get_recipe(recipe_id) | Get full recipe details. | | validate_recipe(recipe) | Validate a recipe without starting a build. | | create_recipe_from_template(template_id, name, modifications) | Fork a template and customize it. |

    Tests

    | Tool | What it does | |------|-------------| | run_tests(build_id, tests?, memory_mb?, vcpus?, timeout_seconds?, keep_environment?) | Spin up a VM from the ISO and run tests. Leave tests empty for defaults (boot, login, packages, network + feature tests). | | get_test_results(run_id) | Get test results: passed/failed assertions, screenshots, VM info. | | list_test_runs(build_id?, limit?) | List test runs, optionally filtered by build. | | stop_test_run(run_id) | Stop a running test and clean up VMs. |

    VMs

    | Tool | What it does | |------|-------------| | list_vms(build_id?) | List running VMs, optionally filtered by build. | | create_vm(build_id, name?, memory_mb?, vcpus?) | Create and boot a VM from a built ISO. | | start_vm(vm_name) | Start a stopped VM. | | stop_vm(vm_name, force?) | Stop a VM. force=true for immediate power-off. | | delete_vm(vm_name) | Delete a VM and its disk. | | screenshot_vm(vm_name) | Capture a PNG screenshot of the VM display. | | get_vm_console_url(vm_name) | Get a VNC console URL for browser access. |

    Recipe Schema

    {
      "name": "My Custom Server",
      "base_image": "ubuntu-24.04",
      "description": "What this variant is for",
      "features": ["ssh", "docker", "monitoring"],
      "packages": ["curl", "htop", "vim"],
      "users": [
        {"username": "admin", "password": "changeme", "groups": ["sudo"]}
      ],
      "services": [
        {"name": "ssh", "config": {"port": 22}}
      ],
      "security": {"hardening_level": "standard"},
      "hardware": {"min_memory_gb": 4, "min_storage_gb": 32},
      "networking": {
        "dns_servers": ["8.8.8.8", "1.1.1.1"]
      }
    }
    

    Supported base images: debian-bookworm, debian-trixie, ubuntu-24.04, fedora-40, fedora-43, opensuse-tumbleweed, elster-os

    Common features: ssh, docker, desktop, development-tools, python, nodejs, monitoring, security-hardening, audit-logging, gxp, hipaa, ollama, claude-code, openclaw, nspawn-containers, agent-containers

    Workflows

    Build a custom Linux ISO

    1. create_build(recipe)          β†’ returns build_id
    2. get_build_status(build_id)    β†’ poll until status is "built"
    3. run_tests(build_id)           β†’ returns run_id
    4. get_test_results(run_id)      β†’ check passed/failed
    5. get_iso_download_url(build_id) β†’ download the ISO
    

    Deploy a git repo as a service

    1. deploy_from_git("https://github.com/user/app.git", base_image="ubuntu-24.04")
       β†’ builds ISO with app auto-deployed at boot
    2. get_build_status(build_id) β†’ poll until built
    3. create_vm(build_id)        β†’ boot a VM running your app
    

    Start from a template

    1. list_recipe_categories()
    2. list_recipes(category="healthcare")
    3. create_recipe_from_template("gxp-medtech-station", "My MedTech", {
         "add_features": ["monitoring"],
         "add_packages": ["prometheus-node-exporter"]
       })
    4. create_build(modified_recipe)
    

    Test a build with compliance checks

    1. run_tests(build_id, tests=["boot", "login", "network"], keep_environment=true)
    2. get_test_results(run_id)
    3. screenshot_vm(vm_name)  β†’ visually verify the desktop
    

    Error Handling

  • Build failed: Use retry_build(build_id) or check the recipe for issues with validate_recipe(recipe).
  • Test failed: Use get_test_results(run_id) to see which assertions failed and why.
  • VM won't start: Check that the build completed successfully with get_build_status(build_id).
  • Rate Limits

  • Builds: 1 concurrent per user (queued if busy)
  • VMs: Up to 10 per user
  • Tests: 1 concurrent per build
  • API calls: No hard limit, be reasonable
  • Examples

    "Build me an Ubuntu server with Docker and SSH"

    {
      "name": "Docker Server",
      "base_image": "ubuntu-24.04",
      "features": ["ssh", "docker"],
      "users": [{"username": "admin", "password": "admin", "groups": ["sudo", "docker"]}]
    }
    

    "Create a Fedora desktop with AI tools"

    {
      "name": "AI Workstation",
      "base_image": "fedora-43",
      "features": ["desktop", "ssh", "python", "ollama", "claude-code"],
      "hardware": {"min_memory_gb": 16, "min_storage_gb": 64}
    }
    

    "Build a GxP-compliant medical device image"

    {
      "name": "MedTech Station",
      "base_image": "debian-bookworm",
      "features": ["ssh", "desktop", "gxp", "hipaa", "audit-logging", "security-hardening"],
      "security": {"hardening_level": "strict"}
    }
    

    πŸ’‘ Examples

    "Build me an Ubuntu server with Docker and SSH"

    {
      "name": "Docker Server",
      "base_image": "ubuntu-24.04",
      "features": ["ssh", "docker"],
      "users": [{"username": "admin", "password": "admin", "groups": ["sudo", "docker"]}]
    }
    

    "Create a Fedora desktop with AI tools"

    {
      "name": "AI Workstation",
      "base_image": "fedora-43",
      "features": ["desktop", "ssh", "python", "ollama", "claude-code"],
      "hardware": {"min_memory_gb": 16, "min_storage_gb": 64}
    }
    

    "Build a GxP-compliant medical device image"

    {
      "name": "MedTech Station",
      "base_image": "debian-bookworm",
      "features": ["ssh", "desktop", "gxp", "hipaa", "audit-logging", "security-hardening"],
      "security": {"hardening_level": "strict"}
    }