Apple Silicon ยท macOS 26.0+

macOS,
on demand.

Headless, API-first macOS virtual machine management for Apple Silicon. Create, install, start and automate fresh macOS 26.0+ VMs through one agent and one REST API.

  • REST API
  • OCI images
  • SSH and VNC
  • Jeballtofile
  • Ephemeral VMs
  • 2 concurrent VMs
  • macOS 26.0+
Runtime

One local service.
Full VM control.

JeballtoAgent runs as a menu bar app on Apple Silicon and exposes the full VM lifecycle through one REST API. CI integrations and the CLI are clients of that surface, not separate systems.

REST CI CLI Ops Agent

Headless by default.

One local endpoint. Every VM operation behind it.

The agent owns VM lifecycle, networking, images, automation and persistence so every client can stay small. Start with curl, use the CLI for local operations, then connect CI controllers or your own orchestrator when you need job automation.

It stays close to the platform with Apple Virtualization, restart-safe state and a small dependency surface. The interface stays the same whether you are booting one VM by hand or wiring it into CI.

  • VM modelPersistent machines or disposable workers
  • PersistenceVM state is saved to disk and restored after graceful agent restarts
  • Dependenciesoras, Sparkle and Yams
  • AutomationJeballtofile blueprints and keystroke injection
Features

Build, boot,
connect and reuse.

The core surface stays compact, but it covers the full path from blank disk to reusable image and repeatable automation.

REST lifecycle

Create, start, stop, pause, resume, clone, snapshot and delete VMs through explicit HTTP endpoints, including disposable CI workflows.

OCI images

Pull, push and reuse full macOS images through ECR, ACR, Artifact Registry or any OCI-compatible registry.

SSH & VNC

Forward terminal and graphical access automatically, then execute commands inside the guest, capture screenshots or inject keystrokes.

Parallel VMs

Run up to two virtual machines in parallel on one host, with graceful restart support for stateful machines when the agent comes back.

Jeballtofile

Describe provisioning in YAML or JSON, then let the agent run install, wait, execute and keystroke steps in order.

Automatic install

Download the latest IPSW from Apple or supply your own source, then automate Setup Assistant before SSH is ready.

Get Started

Install, launch,
make the first request.

Install the menu bar agent, copy its bearer token and your first macOS VM is only a few API calls away.

~/ terminal
# Grab the latest release
$ curl -LO github.com/jeballto/jeballto/releases/latest/download/JeballtoAgent.zip

# Unpack and install the app bundle
$ unzip JeballtoAgent.zip
$ mv JeballtoAgent.app /Applications/

# Launch the menu bar agent
$ open /Applications/JeballtoAgent.app

# Copy the bearer token from the menu bar
$ export TOKEN=your-token

# Create your first VM
$ curl -X POST \
    http://agent-host:8011/v1/vms \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"name":"dev-vm"}'
  1. Download the release

    Grab the signed ZIP from GitHub Releases. Each release expands to a single JeballtoAgent.app bundle.

  2. Move to Applications

    Move JeballtoAgent.app into /Applications, launch it and let it sit in your menu bar.

  3. Copy the token and call the API

    Use the menu bar item to copy the bearer token or read it from ~/Library/Application Support/Jeballto/config.json. From there, your first POST /vms is one request away.

API Flow

Four calls
to a running Mac.

Same REST surface supports manual calls, CLI convenience and CI automation. Tabs below show the smallest useful path from VM definition to desktop access.

~ bootstrap.sh
# Create a VM with 4 cores, 8 GB RAM and 64 GB disk
curl -s -X POST http://agent-host:8011/v1/vms \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "dev-vm",
    "resources": {
      "cpuCount": 4,
      "memorySize": "8GB",
      "diskSize": "64GB"
    }
  }'
CI Integrations

Fresh macOS workers,
per job.

Official adapters connect CI platforms to JeballtoAgent. Each one handles platform setup, labels and cleanup while the agent owns VM lifecycle.

Runner controller

GitHub Actions

Prepares ephemeral macOS runners through the agent, verifies the runner toolchain and cleans idle VMs after jobs finish.

Custom executor

GitLab CI

Maps GitLab lifecycle hooks to VM create, prepare, run and cleanup calls against JeballtoAgent.

Cloud plugin

Jenkins

Provisions labeled macOS workers, applies capacity rules and shields jobs from host-level VM details.

CLI

Use the Python CLI for day-to-day agent operations: create VMs, pull images, run Jeballtofiles and inspect state from a shell.

Resources

Releases, docs
and source.

Stable entry points for every public component. Start with release notes, then move into deployed documentation or source code.

Agent

JeballtoAgent

Menu bar app, REST API, VM lifecycle, images, GUI, SSH and VNC.

GitHub

Actions Runner

Ephemeral runner controller for GitHub Actions jobs.

GitLab

GitLab Executor

Custom executor that provisions one macOS VM per CI job.

Jenkins

Jenkins Plugin

Cloud plugin for labels, templates, capacity and provisioning.

CLI

Python CLI

Operator tool for VMs, images and Jeballtofile automation.

Versions

Match releases
across components.

Keep the agent, CI adapters and CLI on the same release line unless release notes say otherwise.

Version Matrix

Use matched beta versions unless release notes say otherwise.

JeballtoAgent GitHub GitLab Jenkins CLI
1.0.0-beta.1 1.0.0-beta.1 1.0.0-beta.1 1.0.0-beta.1 1.0.0b1
License

Open components,
same license.

Official public components use Mozilla Public License 2.0.

Mozilla Public License 2.0

JeballtoAgent, the official CI integrations and the Python CLI are published under MPL 2.0. Each source repository includes its own license file and notices.

Contact

Questions, bugs,
or implementation support.

Whether you are evaluating the agent, wiring it into CI or debugging a specific workflow, the best route depends on whether you need support, want to report a bug or want to talk implementation details.

Install the agent.
Drive it with code.

Download the menu bar app, copy the bearer token and bring up a fresh macOS VM through one clean endpoint.

Public beta software. APIs and behavior may change before the stable release.