{
  "data": {
    "a": {
      "slug": "celesto",
      "name": "Celesto (formerly SmolVM)",
      "vendor": "Celesto AI, Inc.",
      "vendorUrl": "https://celesto.ai",
      "kind": "sdk",
      "category": "code-sandboxes",
      "summary": "Celesto, formerly SmolVM, is an open-source Python SDK and CLI from Celesto AI that runs disposable Firecracker or QEMU microVMs on the owner's machine for agent code, browsers and desktops, with an optional paid Celesto Cloud.",
      "url": "https://www.anchorterminal.com/tools/celesto",
      "markdownUrl": "https://www.anchorterminal.com/tools/celesto.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/celesto.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/celesto.json",
      "dns": "celesto.grade.anchorterminal.com",
      "repo": "https://github.com/CelestoAI/Celesto",
      "license": "Apache-2.0",
      "transports": [],
      "packages": [
        {
          "registry": "pypi",
          "name": "celesto"
        }
      ],
      "auth": "none",
      "authNotes": "Local use needs no account or key. The local API server and dashboard each require a bearer token, generated at start or read from CELESTO_SERVER_TOKEN and CELESTO_DASHBOARD_TOKEN. Celesto Cloud uses an organisation-bound CELESTO_API_KEY with named permissions (see, execute, delete) set in the dashboard.",
      "pricing": "freemium",
      "pricingNotes": "The local SDK and CLI are free under Apache-2.0. Celesto Cloud bills sandboxes by the running hour from $0.015 (Micro, 1 vCPU, 2 GB) to $0.16 (XL, 8 vCPU, 32 GB), prepaid from $2.01, with a one-time $5 Micro credit and no card.",
      "priceSummary": "$0.015 / session-hr",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the repository, the docs, llms.txt or the pricing page (checked 2026-11-06). Cloud runtime is prepaid by card under Settings \u003e Billing.",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 1149,
        "npmWeekly": null,
        "pypiWeekly": 699,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://celesto.ai/docs",
      "llmsTxt": "https://celesto.ai/llms.txt",
      "openapi": "https://github.com/CelestoAI/Celesto/blob/main/ts/celesto-local-server.openapi.json",
      "capabilities": [
        "sandbox.code",
        "sandbox.fs",
        "sandbox.persist",
        "sandbox.browser"
      ],
      "tags": [
        "open-source",
        "local",
        "self-hosted",
        "hosted",
        "freemium",
        "no-card",
        "free-tier",
        "apache-2.0",
        "python",
        "typescript",
        "cli",
        "microvm",
        "firecracker",
        "llms-txt",
        "openapi",
        "telemetry",
        "pre-1.0",
        "renamed"
      ],
      "lastRelease": "2026-11-05",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 68,
        "grade": "B",
        "agentReady": false,
        "rank": 298,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 6,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 69,
          "maintenance": 81,
          "payments": 60,
          "reliability": 66,
          "schema": 85,
          "security": 52,
          "transparency": 70
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "Celesto runs each agent task in a local Firecracker or QEMU microVM with its own kernel, driven by a CLI with a stable JSON envelope and a Python SDK, free under Apache-2.0. It is pre-1.0, renamed from SmolVM on 19 September 2026, sends usage telemetry after a first-use notice, and leaves outbound networking open unless a mode is set.",
        "bestFor": "Local microVM sandboxes for agent code, browsers and desktops on Linux and macOS, with a path to a hosted cloud.",
        "strengths": [
          "Apache-2.0, installs from PyPI with `celesto setup` and `celesto doctor`, and runs local microVMs with no account or key",
          "Every `--json` response has the same `ok`, `command`, `exit_code`, `data` and `error` fields, with recovery commands in errors",
          "Network modes `off`, `public` (proxy that rejects private and metadata addresses) and `restricted` with CIDR or domain allowlists",
          "Dated changelog with Security sections, breaking changes marked, and 22 PyPI releases in the 90 days to 6 November 2026",
          "OpenAPI documents for the local server (24 operations) and the cloud API (171 operations) in the repository, plus llms.txt"
        ],
        "weaknesses": [
          "Version 0.1.13 and declared pre-1.0 in SECURITY.md, with the TypeScript SDK an alpha installed from a GitHub tarball",
          "Outbound network access is open by default, and Linux TAP mode does not block every private network or metadata service",
          "Usage telemetry to PostHog is on after a first-use notice, until switched off",
          "Renamed from SmolVM on 19 September 2026 in a breaking release that removed the `smolvm` command and import path",
          "No security.txt, bug bounty or certification found, and CI results could not be read"
        ],
        "agentNotes": [
          "Pass `--json` to every `celesto` command and branch on `ok` and `exit_code`, not on printed text",
          "Create computers with unique names and delete them by exact name when the job ends, including after failures",
          "Set `internet_settings={\"mode\": \"off\"}` or `restricted` for untrusted code, since the default is open",
          "Set CELESTO_NO_TELEMETRY=1 in unattended runs if usage events must not leave the machine",
          "Never paste browser or display connection URLs into model context; possession of the URL grants control"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 68
          }
        ],
        "editorialScores": {
          "ergonomics": 69,
          "maintenance": 81,
          "payments": 60,
          "reliability": 66,
          "schema": 85,
          "security": 52,
          "transparency": 74
        },
        "provenanceScore": 66,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "pip install celesto \u0026\u0026 celesto setup \u0026\u0026 celesto doctor",
        "headless": {
          "create": "celesto computer create --name agent-job --json",
          "delete": "celesto computer delete agent-job --json",
          "exec": "celesto computer exec agent-job --json -- python -m pytest"
        }
      },
      "letme": {
        "capability": "https://letme.dev/sandbox.code",
        "tool": "https://letme.dev/celesto"
      },
      "area": "agent-runtime",
      "unitPrices": [
        {
          "item": "Cloud Micro sandbox (1 vCPU, 2 GB)",
          "unit": "session-hour",
          "usd": 0.015,
          "note": "Billed by the running hour; local use is free"
        },
        {
          "item": "Cloud XL sandbox (8 vCPU, 32 GB)",
          "unit": "session-hour",
          "usd": 0.16,
          "note": "Largest size on the pricing page"
        }
      ],
      "provenance": {
        "legalEntity": "Celesto AI, Inc.",
        "domain": "celesto.ai",
        "domainRegistered": "2025-07-13",
        "endpointOnVendorDomain": null,
        "terms": "https://celesto.ai/legal/terms",
        "privacy": "https://celesto.ai/legal/privacy-policy",
        "statusPage": "",
        "changelog": "https://github.com/CelestoAI/Celesto/blob/main/CHANGELOG.md",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "The privacy policy, last updated 30 October 2026, names Celesto AI, Inc., a Delaware corporation with a Wilmington mailing address. It has no clause on automated access.",
          "celesto.ai/robots.txt allows all crawlers. docs.celesto.ai carries Content-Signal ai-train=yes, search=yes, ai-input=yes.",
          "RDAP gives celesto.ai a registration date of 13 July 2025.",
          "/.well-known/security.txt returns 404. SECURITY.md asks for private reports through GitHub's vulnerability reporting. No status page is linked from the pricing page."
        ],
        "score": 66
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/celesto.json",
      "live": {
        "slug": "celesto",
        "versions": [
          {
            "registry": "github",
            "name": "CelestoAI/Celesto",
            "version": "v0.1.13",
            "released": "2026-11-05",
            "seenAt": "2026-11-06T23:13:37.416837168Z"
          },
          {
            "registry": "pypi",
            "name": "celesto",
            "version": "0.1.13",
            "released": "2026-11-05",
            "seenAt": "2026-11-06T23:13:37.309276304Z"
          }
        ],
        "githubStars": 1149,
        "pypiWeekly": 699,
        "securityTxt": {
          "url": "https://celesto.ai/.well-known/security.txt",
          "state": "unknown",
          "checkedAt": "2026-11-07T16:01:01.176888246Z"
        },
        "llmsTxt": {
          "url": "https://celesto.ai/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:31:46.784166983Z"
        },
        "pages": [
          {
            "url": "https://raw.githubusercontent.com/CelestoAI/Celesto/main/CHANGELOG.md",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:18:00.719411253Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "8ddae4a6adbd"
          },
          {
            "url": "https://celesto.ai/legal/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:00:50.868104256Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "87ce310b1db6"
          },
          {
            "url": "https://celesto.ai/legal/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:00:53.107282947Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "1dece6f9a42e"
          }
        ],
        "updatedAt": "2026-11-07T16:01:01.176888246Z"
      }
    },
    "answer": "Celesto (formerly SmolVM) scores 68 (B) on agent readiness against Offscreen's 63.4 (B), and leads in 4 of 7 scored categories. Offscreen leads on agent ergonomics and security \u0026 auth.",
    "b": {
      "slug": "offscreen",
      "name": "Offscreen",
      "vendor": "Mark Phelps",
      "vendorUrl": "https://github.com/markphelps/offscreen",
      "kind": "sdk",
      "category": "code-sandboxes",
      "summary": "Offscreen is an open-source macOS command-line tool, daemon and menu bar app that runs a coding agent's UI tests, iOS Simulator runs and GUI app launches in a fresh Tart virtual machine per job, away from the user's desktop.",
      "url": "https://www.anchorterminal.com/tools/offscreen",
      "markdownUrl": "https://www.anchorterminal.com/tools/offscreen.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/offscreen.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/offscreen.json",
      "dns": "offscreen.grade.anchorterminal.com",
      "repo": "https://github.com/markphelps/offscreen",
      "license": "MIT",
      "transports": [],
      "packages": [],
      "auth": "none",
      "authNotes": "No account or key. The CLI talks to the local daemon over an owner-only Unix socket (mode 0600), and anyone who can open it is trusted. The daemon reaches each guest VM over SSH with the base image's login, `admin` and `admin` by default, or a configured key. A person grants Local Network to Offscreen Daemon on the first VM job, and Input Monitoring and Notifications to the menu bar app only for host-lane jobs.",
      "pricing": "free",
      "pricingNotes": "Free under MIT with nothing to buy. It depends on Tart, installed by the cask from the `openai/tools/tart` formula under FSL-1.1-ALv2, whose licensing page says use on personal computers is royalty-free and organisations above 100 host CPU cores need a paid licence, from $12,000 a year. Needs an Apple silicon Mac with macOS 14 or later and full Xcode.",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the source, the docs or the skill (checked 2026-10-17). The tool has no paid tier and makes no network calls of its own beyond the local socket and the guest SSH connection.",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-17"
      },
      "docsUrl": "https://github.com/markphelps/offscreen#readme",
      "capabilities": [
        "sandbox.code",
        "sandbox.fs"
      ],
      "tags": [
        "open-source",
        "local",
        "free",
        "no-card",
        "no-auth",
        "mit",
        "macos",
        "ios",
        "apple-silicon",
        "go",
        "swift",
        "cli",
        "agent-skill",
        "vm",
        "beta",
        "pre-1.0",
        "new"
      ],
      "lastRelease": "2026-10-16",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 63.4,
        "grade": "B",
        "agentReady": false,
        "rank": 513,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 11,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 74,
          "maintenance": 66,
          "payments": 60,
          "reliability": 55,
          "schema": 67,
          "security": 62,
          "transparency": 61
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-02"
        },
        "negative": 0,
        "verdict": "An agent on an Apple silicon Mac can run XCUITest, the iOS Simulator or an app it built in a throwaway VM and read the exit code, logs and screenshots without taking the person's screen. The project began on 11 October 2026, is at v0.0.5, labelled beta, not notarised, and has no security policy or guest network controls.",
        "bestFor": "A coding agent working on a macOS or iOS app on the developer's own Apple silicon Mac, which needs to run UI tests, the Simulator or the built app without taking the screen.",
        "strengths": [
          "A fresh VM per job, deleted afterwards, and a VM task receives only the worktree, listed build products and four `OFFSCREEN_*` variables, not the host environment",
          "`offscreen run` exits with the wrapped command's code, and Offscreen's own failures use 75 for a queue timeout and 70 for daemon or VM errors",
          "One queue on the Mac for every agent, terminal and script, with `--detach`, `status`, `logs -f`, `artifacts` and `cancel`",
          "The skill lists what an agent must not run without asking, such as `--show`, the host lane, `--keep`, prune and image builds",
          "MIT, with no network code or telemetry found in the source beyond the local socket and guest SSH"
        ],
        "weaknesses": [
          "First commit 11 October 2026, version 0.0.5 and labelled beta, with JSON field names that may change before 1.0",
          "Apple silicon macOS 14 or later with full Xcode only, at most two VMs at once, and a large one-time image download",
          "Ad hoc signed and not notarised. The cask strips the quarantine attribute, and there is no SECURITY.md or security.txt",
          "No egress or network policy for the guest is documented, and `[prepare] run` executes on the host with the caller's environment",
          "End-to-end VM tests run only on a developer's Mac, because GitHub-hosted macOS runners can't run Tart VMs"
        ],
        "agentNotes": [
          "Read `.offscreen.toml` before running anything and use its `project` key and task names. Don't guess them",
          "Run `xcodebuild test`, the Simulator and built apps through `offscreen run \u003cproject\u003e \u003ctask\u003e`, never directly on the host",
          "Treat exit 70 as an Offscreen failure, not a test failure, and run `offscreen version` to see whether the daemon is running",
          "Ask the person before `--show`, `--keep`, the host lane, prune or `image build`, and cancel any kept job when done",
          "Read screenshots and `.xcresult` bundles from the directory `offscreen artifacts \u003cjob\u003e` prints"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 4,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 63.4
          }
        ],
        "editorialScores": {
          "ergonomics": 74,
          "maintenance": 66,
          "payments": 60,
          "reliability": 55,
          "schema": 67,
          "security": 62,
          "transparency": 72
        },
        "provenanceScore": 50,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-02",
            "maintenance": "2026-11-02",
            "payments": "2026-11-02",
            "reliability": "2026-11-02",
            "schema": "2026-11-02",
            "security": "2026-11-02",
            "transparency": "2026-11-02"
          },
          "last": "2026-11-02",
          "lastMoved": "2026-10-27",
          "oldest": "2026-11-02",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "brew install --cask markphelps/tap/offscreen \u0026\u0026 open -a Offscreen \u0026\u0026 offscreen image build",
        "headless": {
          "artifacts": "offscreen artifacts \u003cjob\u003e",
          "check": "offscreen check",
          "detach": "offscreen run \u003cproject\u003e \u003ctask\u003e --detach",
          "init": "offscreen init",
          "oneOff": "offscreen run \u003cproject\u003e -- swift test",
          "run": "offscreen run \u003cproject\u003e \u003ctask\u003e",
          "skill": "npx skills add markphelps/offscreen",
          "status": "offscreen status -a --format json"
        }
      },
      "letme": {
        "capability": "https://letme.dev/sandbox.code",
        "tool": "https://letme.dev/offscreen"
      },
      "area": "agent-runtime",
      "provenance": {
        "legalEntity": "Mark Phelps (individual)",
        "domain": "",
        "domainRegistered": "",
        "endpointOnVendorDomain": null,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-10-17",
        "notes": [
          "The project has no website. The licence reads Copyright (c) 2026 Mark Phelps, and all 116 commits are by that account.",
          "The app and daemon use the bundle identifiers io.latentsignal.offscreen and io.latentsignal.offscreend. latentsignal.io belongs to Latent Signal Labs, LLC, a solo studio whose page links x.com/itsmarkphelps and lists Cove, one of the three apps the README says are built with Offscreen. The page does not name Offscreen.",
          "No terms, privacy policy, changelog file, SECURITY.md or security.txt. GitHub release notes could not be read.",
          "The software runs on the owner's Mac, so there is no vendor endpoint or status page to check."
        ],
        "score": 50
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/offscreen.json",
      "live": {
        "slug": "offscreen",
        "versions": [
          {
            "registry": "github",
            "name": "markphelps/offscreen",
            "version": "v0.0.5",
            "released": "2026-10-16",
            "seenAt": "2026-11-06T23:50:40.283398473Z"
          }
        ],
        "githubStars": 4,
        "github": {
          "repo": "markphelps/offscreen",
          "checkedAt": "2026-11-02T09:03:38.94654627Z",
          "stars": 4,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-10-16T14:47:05Z",
          "openIssues": 5,
          "openPRs": 0,
          "issuesOpened90d": 7,
          "issuesClosed90d": 2,
          "prsMerged90d": 2,
          "ci": {
            "branch": "main",
            "runs": 35,
            "success": 32,
            "failure": 3,
            "other": 0,
            "latest": "success",
            "latestAt": "2026-10-16T12:23:21Z"
          },
          "replies": {
            "sampled": 7,
            "unanswered": 5,
            "medianDays": 2.9
          }
        },
        "updatedAt": "2026-11-06T23:50:40.283398473Z"
      }
    },
    "edges": [
      {
        "by": 18,
        "category": "schema",
        "leads": "celesto",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "Read as an SDK and CLI. The repository ships an OpenAPI document for the local server (24 operations) and the cloud API (171 operations), from which the TypeScript client is generated (25). llms.txt at celesto.ai, plus Markdown docs in the repository (10). The README's runtime table says when to use each runtime, and the automation section says to prefer `exec` and keep `shell`, `ssh` and `desktop` for interactive work (14 of 20). Network modes are closed values (`open`, `off`, `public`, `restricted`) and the SDK takes typed keyword arguments, though `internet_settings` is a plain dict (11 of 15). Examples directory, a JSON envelope for every command and documented cloud error fields such as `required_scope`, without a full error catalogue (12 of 15). Dated changelog and tags, pre-1.0 (13 of 15). Total 85.",
          "b": "Graded on the CLI and its skill. `status` and `image ls` take `--format json`, and `--progress json` emits build and run phases, but the docs say field names may change before 1.0, no JSON Schema is published, and `run` output is the wrapped command's own. The project contract is validated, with unknown keys rejected, by `offscreen check` (8 of 25). The skill is Markdown in the Agent Skills format, with a 90-word description and a 1,552-word SKILL.md, and the docs are Markdown in the repository (10). The skill says when to use it, sets a core rule never to run `xcodebuild test`, the Simulator or built apps on the host, says plain builds may run on the host, and lists what to ask the person before running (18). Flags are typed by kong, with value sets for `--lane` (vm, host, auto) and `--progress`, durations for `--timeout`, and every task requires `lane` and `run`. Task commands are free shell text by design (11). A worked example app with three tasks and their scripts, an exit-code table with what to do for each, and troubleshooting entries that quote the error text (14). Tags and a daemon protocol number with stated compatibility rules. No changelog file, and the GitHub release notes couldn't be read (6 of 15)."
        },
        "scores": {
          "a": 85,
          "b": 67
        }
      },
      {
        "by": 15,
        "category": "maintenance",
        "leads": "celesto",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "0.1.13 on PyPI on 5 November 2026, tagged 6 November (30). 22 PyPI releases in the 90 days to 6 November (20). Most open issues are filed by maintainers. Outside reports such as the thread-safety issue got replies, and several recent ones have none yet; pull-request reply times were not read (15 of 25). The Python SDK is current, the TypeScript SDK is an alpha not published to npm (8 of 15). uv and Cargo lock files, CodeQL and publish workflows, with run results unread (8 of 10). Total 81.",
          "b": "v0.0.5 on 16 October 2026, 17 days before this check and still the head of main (30). Five tagged releases on 15 and 16 October 2026, each published to the cask (20). All 116 commits are by the one maintainer, and pull requests #89 to #91 of 15 October are his own. Outside issues and replies couldn't be read, because GitHub's pages and API were refused to us (8 of 25, from the commit history only). Not an MCP server, no SDK, and the skill is in no registry (0). Current dependencies (Go 1.27, kong 1.14, modernc SQLite 1.60), tool versions pinned in mise.toml and lint in CI. No Dependabot configuration found (8)."
        },
        "scores": {
          "a": 81,
          "b": 66
        }
      },
      {
        "by": 11,
        "category": "reliability",
        "leads": "celesto",
        "name": "Reliability",
        "reasons": {
          "a": "Read with the local-software lines, because the graded surface runs on the owner's machine. Installs from PyPI as `celesto` with Python 3.11 or newer on Linux and macOS stated, plus an install script (20). The repository has pytest, e2e, lint, TypeScript and smoke-test workflows and 38 test packages, but GitHub's API answered with a rate limit, so no run result was read (15 of 25, unchecked). 22 open issues and pull requests against about 188 commits in 90 days. The open bugs include a snapshot restore that can lose a VM's disk if interrupted and a thread-safety issue with five replies (18 of 25). A dated changelog with Security, Fixed, Added and Removed sections, and the rename to Celesto marked as a breaking release, though versions stay below 1.0 (13 of 15). Pre-1.0 per SECURITY.md (0). Total 66.",
          "b": "Read with the local-software lines, since the owner runs the CLI, daemon and app. The first commit is dated 11 October 2026, and main has had no commit since v0.0.5 on 16 October. Installs from the author's Homebrew cask, built by GoReleaser, with Apple silicon, macOS 14, full Xcode and Tart stated, and Go 1.27 for a source build (20). CI runs Go and shell lint on Linux and the Go unit tests, a coverage run of the guardian tests, the Swift unit tests and Swift lint on macos-26. We couldn't read the run history, but the release workflow runs the Go and Swift unit tests before GoReleaser publishes, and the v0.0.5 cask was pushed on 16 October from the commit that is the head of main. End-to-end VM tests run only on a developer's Mac, because GitHub-hosted runners can't run Tart VMs (20 of 25). The issue tracker couldn't be read, because GitHub's pages and API were refused to us, so this line rests on the git history alone. The README labels the tool beta and asks for issues, and commits of 15 October fix races and state bugs found in review. Scored 10 of 25 rather than as clean or as absent. Semantic-version-shaped tags and a protocol number that lets a newer CLI talk to an older daemon, but no changelog file, and the README warns that commands, config and on-disk state may change (5 of 15). Version 0.0.5, not 1.0 and labelled beta (0)."
        },
        "scores": {
          "a": 66,
          "b": 55
        }
      },
      {
        "by": 10,
        "category": "security",
        "leads": "offscreen",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "Framework reading for local software. No credential is needed for local use, and the local API server and dashboard each require a bearer token, and cloud keys carry named permissions (22 of 30). Each computer has its own guest kernel, browser and display access uses capability URLs with a read-only option, and raw VNC is off. Against that, outbound networking is open by default and the restricting modes are opt-in (12 of 20). The security doc warns against giving connection URLs to a model as page content, but there is no guidance on treating command or page output as untrusted (5 of 15). `computer logs` shows startup output, with no audit log of commands (5 of 15). SECURITY.md with GitHub private vulnerability reporting and a supported-versions table, Security sections in the changelog, no security.txt, bug bounty or certification (8 of 20). Total 52.",
          "b": "No credential model to grade, since there is no account or key, so read with the framework lines as for other local agent tools. 30 for what leaves the machine and what is exposed, 20 for least privilege and approvals, 15 for prompt-injection posture, 15 for audit and 20 for the security programme. No network code or telemetry found beyond the owner-only Unix socket and SSH to the guest. Guest SSH uses the base image's `admin` and `admin` login by default, the caller's environment, which can hold secrets, is stored in SQLite while a job is active and dropped when it ends, with old copies possibly left in free pages, which the docs say. Any process that can open the socket is trusted (22 of 30). A fresh VM per job, deleted afterwards, and a VM task gets the worktree and listed products but not the host environment. The host lane is opt-in, gated on idleness, an unlocked session and camera and microphone off, with a countdown and take-back. The skill lists actions to ask the person about first. No egress or network policy for the guest is documented, the whole worktree is copied in, and `[prepare] run` executes on the host even for VM jobs (16 of 20). The tool returns command output and screenshots of the agent's own app, with no guidance on treating text in them as untrusted (8 of 15). Job records, logs and artifacts are kept for seven days by default, `status -a` lists past jobs, and the daemon and image builds keep logs (12 of 15). No SECURITY.md, security.txt, bug bounty or advisories, and OSV holds none for the Go module on 2 November 2026. The binaries and app are signed ad hoc and not notarised, and the cask strips the quarantine attribute, which the install guide states. The release workflow keeps the tap token out of cached tools and doesn't persist git credentials, and CI runs with read-only permissions (4 of 20)."
        },
        "scores": {
          "a": 52,
          "b": 62
        }
      },
      {
        "by": 9,
        "category": "transparency",
        "leads": "celesto",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "Apache-2.0 in LICENSE and on PyPI (30). The privacy policy of 30 October 2026 links a subprocessor registry and describes the CLI telemetry in the same terms as the docs, but gives no retention periods beyond as long as necessary. Stopped cloud disks are kept 30 days per the pricing page (18 of 30). The changelog marks removals and the breaking rename, and the glossary lists older names still accepted, with no written deprecation policy (10 of 20). Telemetry is disclosed in the README, CLI reference and privacy policy, with three opt-outs, but it is on by default after the notice (16 of 20). Total 74.",
          "b": "MIT in LICENSE and in the release archive (30). No privacy policy, as for other local tools. DAEMON.md and the config reference say what is stored where, that the caller's environment is kept only while a job is active, that deletion is logical and SQLite free pages and backups can keep old values, and that job history expires after seven days by default (22 of 30). No deprecation policy. The README's beta note, the protocol compatibility rules and the install guide's migration steps for the renamed app and daemon identifiers are the only notices, with no dates (8 of 20). No telemetry found in the source, but the README and docs don't say either way (12 of 20)."
        },
        "scores": {
          "a": 70,
          "b": 61
        }
      },
      {
        "by": 5,
        "category": "ergonomics",
        "leads": "offscreen",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "A CLI and SDK add no tool definitions to an agent's context. Collected command output is capped at 8 MiB with streaming as the alternative (18 of 25). `computer list`, `logs --follow` and name lookups, with little filtering (10 of 20). JSON errors carry a recovery command where Celesto has one, and cloud errors carry stable codes, operation and computer context and recovery fields since 0.1.7 (18 of 20). State-changing cloud requests are never replayed automatically and computers are addressed by unique names, but there are no idempotency keys (10 of 20). `with Computer()` creates and deletes a computer with no parameters, with Python and an alpha TypeScript SDK (13 of 15). Total 69.",
          "b": "A CLI adds no tool definitions to context, and only the skill's 90-word description is always loaded. Stdout carries the wrapped command's full output, which for `xcodebuild` can be long, while Offscreen's phases go to stderr and are hidden when stderr isn't a terminal (18 of 25). `status -a`, `-q`, `--format json` and templates, `logs` with `-f`, and artifacts in one directory per job. No control over the size of the command's output (13 of 20). Exit codes separate the command's result from a queue timeout (75), an Offscreen failure (70) and a usage error (1), errors name the fix (`Open it with: open -a Offscreen`, the Tart install command, the Local Network setting), and a failure before the command starts repeats the last 20 lines (18). Each job starts from a fresh clone, so a rerun is clean. `cancel` is safe to repeat, `init` refuses to overwrite, `check` validates without a VM, and `prune` asks first or takes `--dry-run`. Attached queued jobs fail after a daemon restart, and the docs say to detach jobs that must retry safely (16 of 20). Defaults are sensible (VM lane, two slots, no timeout) and a one-off `-- \u003ccmd\u003e` needs no task. One CLI, and the daemon's socket API is internal, with no SDK (9 of 15)."
        },
        "scores": {
          "a": 69,
          "b": 74
        }
      }
    ],
    "facts": [
      {
        "a": "SDK + MCP",
        "b": "SDK + MCP",
        "name": "Kind"
      },
      {
        "a": "Celesto AI, Inc.",
        "b": "Mark Phelps",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "",
        "b": "",
        "name": "Transports"
      },
      {
        "a": "None",
        "b": "None",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Free",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Apache-2.0",
        "b": "MIT",
        "name": "Licence"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "2026-11-05",
        "b": "2026-10-16",
        "name": "Last release"
      },
      {
        "a": "2026-10-30",
        "b": "no document linked",
        "name": "Terms last updated"
      },
      {
        "a": "2026-10-30",
        "b": "no document linked",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "1.1k stars, 699 PyPI/wk",
        "b": "none",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3/5 (4)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Celesto (formerly SmolVM) scores 68 (B) on agent readiness against Offscreen's 63.4 (B), and leads in 4 of 7 scored categories. Offscreen leads on agent ergonomics and security \u0026 auth.",
        "question": "Which is better for AI agents, Celesto (formerly SmolVM) or Offscreen?"
      },
      {
        "answer": "Yes. Celesto (formerly SmolVM) is open source (Apache-2.0). Offscreen is open source (MIT).",
        "question": "Are Celesto (formerly SmolVM) and Offscreen open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 66 against 55",
          "Schema \u0026 documentation, 85 against 67",
          "Maintenance \u0026 community, 81 against 66",
          "Transparency \u0026 trust, 70 against 61"
        ],
        "also": null,
        "goodFor": "Local microVM sandboxes for agent code, browsers and desktops on Linux and macOS, with a path to a hosted cloud.",
        "slug": "celesto",
        "watchFor": "Version 0.1.13 and declared pre-1.0 in SECURITY.md, with the TypeScript SDK an alpha installed from a GitHub tarball"
      },
      {
        "aheadOn": [
          "Agent ergonomics, 74 against 69",
          "Security \u0026 auth, 62 against 52"
        ],
        "also": null,
        "goodFor": "A coding agent working on a macOS or iOS app on the developer's own Apple silicon Mac, which needs to run UI tests, the Simulator or the built app without taking the screen.",
        "slug": "offscreen",
        "watchFor": "First commit 11 October 2026, version 0.0.5 and labelled beta, with JSON field names that may change before 1.0"
      }
    ],
    "history": {
      "celesto": null,
      "offscreen": [
        {
          "causes": [
            "evidence"
          ],
          "date": "2026-10-27",
          "delta": 0.5,
          "from": 62.9,
          "fromGrade": "B",
          "to": 63.4,
          "toGrade": "B"
        }
      ]
    },
    "job": {
      "capability": "sandbox.code",
      "name": "Code sandboxes"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/agent37-vs-offscreen.json",
        "title": "Agent 37 Cloud vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/agent37-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/agentcore-code-interpreter-vs-celesto.json",
        "title": "Amazon Bedrock AgentCore Code Interpreter vs Celesto (formerly SmolVM)",
        "url": "https://www.anchorterminal.com/compare/agentcore-code-interpreter-vs-celesto"
      },
      {
        "json": "https://www.anchorterminal.com/compare/agentcore-code-interpreter-vs-offscreen.json",
        "title": "Amazon Bedrock AgentCore Code Interpreter vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/agentcore-code-interpreter-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/blaxel-sandboxes-vs-celesto.json",
        "title": "Blaxel Sandboxes vs Celesto (formerly SmolVM)",
        "url": "https://www.anchorterminal.com/compare/blaxel-sandboxes-vs-celesto"
      },
      {
        "json": "https://www.anchorterminal.com/compare/blaxel-sandboxes-vs-offscreen.json",
        "title": "Blaxel Sandboxes vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/blaxel-sandboxes-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-cloudflare-sandbox-sdk.json",
        "title": "Celesto (formerly SmolVM) vs Cloudflare Sandbox SDK",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-cloudflare-sandbox-sdk"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-daytona.json",
        "title": "Celesto (formerly SmolVM) vs Daytona",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-daytona"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-deltabox-lite.json",
        "title": "Celesto (formerly SmolVM) vs DeltaBox Lite",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-deltabox-lite"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-deno-sandbox.json",
        "title": "Celesto (formerly SmolVM) vs Deno Sandbox",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-deno-sandbox"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-e2b.json",
        "title": "Celesto (formerly SmolVM) vs E2B",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-e2b"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-freestyle.json",
        "title": "Celesto (formerly SmolVM) vs Freestyle",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-freestyle"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-instavm.json",
        "title": "Celesto (formerly SmolVM) vs InstaVM",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-instavm"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-maritime.json",
        "title": "Celesto (formerly SmolVM) vs Maritime",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-maritime"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-microsoft-execution-containers.json",
        "title": "Celesto (formerly SmolVM) vs Microsoft Execution Containers",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-microsoft-execution-containers"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-modal-sandboxes.json",
        "title": "Celesto (formerly SmolVM) vs Modal Sandboxes",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-modal-sandboxes"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-morph-cloud.json",
        "title": "Celesto (formerly SmolVM) vs Morph Cloud",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-morph-cloud"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-perplexity-space.json",
        "title": "Celesto (formerly SmolVM) vs SPACE",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-perplexity-space"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-runloop.json",
        "title": "Celesto (formerly SmolVM) vs Runloop Devboxes",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-runloop"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-sandbox0.json",
        "title": "Celesto (formerly SmolVM) vs Sandbox0",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-sandbox0"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-sprites.json",
        "title": "Celesto (formerly SmolVM) vs Sprites",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-sprites"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-together-code-sandbox.json",
        "title": "Celesto (formerly SmolVM) vs Together Code Sandbox",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-together-code-sandbox"
      },
      {
        "json": "https://www.anchorterminal.com/compare/celesto-vs-vercel-sandbox.json",
        "title": "Celesto (formerly SmolVM) vs Vercel Sandbox",
        "url": "https://www.anchorterminal.com/compare/celesto-vs-vercel-sandbox"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-sandbox-sdk-vs-offscreen.json",
        "title": "Cloudflare Sandbox SDK vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/cloudflare-sandbox-sdk-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/daytona-vs-offscreen.json",
        "title": "Daytona vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/daytona-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deno-sandbox-vs-offscreen.json",
        "title": "Deno Sandbox vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/deno-sandbox-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/e2b-vs-offscreen.json",
        "title": "E2B vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/e2b-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freestyle-vs-offscreen.json",
        "title": "Freestyle vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/freestyle-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/instavm-vs-offscreen.json",
        "title": "InstaVM vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/instavm-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/maritime-vs-offscreen.json",
        "title": "Maritime vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/maritime-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/microsoft-execution-containers-vs-offscreen.json",
        "title": "Microsoft Execution Containers vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/microsoft-execution-containers-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/modal-sandboxes-vs-offscreen.json",
        "title": "Modal Sandboxes vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/modal-sandboxes-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/morph-cloud-vs-offscreen.json",
        "title": "Morph Cloud vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/morph-cloud-vs-offscreen"
      },
      {
        "json": "https://www.anchorterminal.com/compare/offscreen-vs-perplexity-space.json",
        "title": "Offscreen vs SPACE",
        "url": "https://www.anchorterminal.com/compare/offscreen-vs-perplexity-space"
      },
      {
        "json": "https://www.anchorterminal.com/compare/offscreen-vs-runloop.json",
        "title": "Offscreen vs Runloop Devboxes",
        "url": "https://www.anchorterminal.com/compare/offscreen-vs-runloop"
      },
      {
        "json": "https://www.anchorterminal.com/compare/offscreen-vs-sandbox0.json",
        "title": "Offscreen vs Sandbox0",
        "url": "https://www.anchorterminal.com/compare/offscreen-vs-sandbox0"
      },
      {
        "json": "https://www.anchorterminal.com/compare/offscreen-vs-sprites.json",
        "title": "Offscreen vs Sprites",
        "url": "https://www.anchorterminal.com/compare/offscreen-vs-sprites"
      },
      {
        "json": "https://www.anchorterminal.com/compare/offscreen-vs-together-code-sandbox.json",
        "title": "Offscreen vs Together Code Sandbox",
        "url": "https://www.anchorterminal.com/compare/offscreen-vs-together-code-sandbox"
      },
      {
        "json": "https://www.anchorterminal.com/compare/offscreen-vs-vercel-sandbox.json",
        "title": "Offscreen vs Vercel Sandbox",
        "url": "https://www.anchorterminal.com/compare/offscreen-vs-vercel-sandbox"
      },
      {
        "json": "https://www.anchorterminal.com/compare/agent37-vs-celesto.json",
        "title": "Agent 37 Cloud vs Celesto (formerly SmolVM)",
        "url": "https://www.anchorterminal.com/compare/agent37-vs-celesto"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deltabox-lite-vs-offscreen.json",
        "title": "DeltaBox Lite vs Offscreen",
        "url": "https://www.anchorterminal.com/compare/deltabox-lite-vs-offscreen"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 11,
        "celesto": 66,
        "edge": "celesto",
        "key": "reliability",
        "name": "Reliability",
        "offscreen": 55,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 18,
        "celesto": 85,
        "edge": "celesto",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "offscreen": 67,
        "weight": 13
      },
      {
        "by": 5,
        "celesto": 69,
        "edge": "offscreen",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "offscreen": 74,
        "weight": 13
      },
      {
        "by": 10,
        "celesto": 52,
        "edge": "offscreen",
        "key": "security",
        "name": "Security \u0026 auth",
        "offscreen": 62,
        "weight": 14
      },
      {
        "by": 0,
        "celesto": 60,
        "edge": "",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "offscreen": 60,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 15,
        "celesto": 81,
        "edge": "celesto",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "offscreen": 66,
        "weight": 7
      },
      {
        "by": 9,
        "celesto": 70,
        "edge": "celesto",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "offscreen": 61,
        "weight": 7
      }
    ],
    "summary": "Celesto (formerly SmolVM) scores 68 (B) on agent readiness against Offscreen's 63.4 (B), and leads in 4 of 7 scored categories. Offscreen leads on agent ergonomics and security \u0026 auth. Both do code sandboxes.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "celesto": "Celesto runs each agent task in a local Firecracker or QEMU microVM with its own kernel, driven by a CLI with a stable JSON envelope and a Python SDK, free under Apache-2.0. It is pre-1.0, renamed from SmolVM on 19 September 2026, sends usage telemetry after a first-use notice, and leaves outbound networking open unless a mode is set.",
      "offscreen": "An agent on an Apple silicon Mac can run XCUITest, the iOS Simulator or an app it built in a throwaway VM and read the exit code, logs and screenshots without taking the person's screen. The project began on 11 October 2026, is at v0.0.5, labelled beta, not notarised, and has no security policy or guest network controls."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/celesto-vs-offscreen",
    "json": "https://www.anchorterminal.com/compare/celesto-vs-offscreen.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/celesto-vs-offscreen.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/celesto-vs-offscreen.min.md"
  },
  "markdown": "Celesto (formerly SmolVM) scores 68 (B) on agent readiness against Offscreen's 63.4 (B), and leads in 4 of 7 scored categories. Offscreen leads on agent ergonomics and security \u0026 auth. Both do code sandboxes.\n\n- Celesto (formerly SmolVM): grade B, 68/100, rank #298 of 1486. Markdown https://www.anchorterminal.com/tools/celesto.md · JSON https://www.anchorterminal.com/api/v1/tools/celesto.json\n- Offscreen: grade B, 63.4/100, rank #513 of 1486. Markdown https://www.anchorterminal.com/tools/offscreen.md · JSON https://www.anchorterminal.com/api/v1/tools/offscreen.json\n- Best code execution sandboxes for AI agents: https://www.anchorterminal.com/best/code-sandboxes/index.md\n- All 231 sandboxes comparisons: https://www.anchorterminal.com/compare/code-sandboxes/index.md\n\n## Which one, for what\n\n### Celesto (formerly SmolVM) (B)\n\nGood for: Local microVM sandboxes for agent code, browsers and desktops on Linux and macOS, with a path to a hosted cloud.\n\nAhead on:\n- Reliability, 66 against 55\n- Schema \u0026 documentation, 85 against 67\n- Maintenance \u0026 community, 81 against 66\n- Transparency \u0026 trust, 70 against 61\n\nWatch for: Version 0.1.13 and declared pre-1.0 in SECURITY.md, with the TypeScript SDK an alpha installed from a GitHub tarball\n\n### Offscreen (B)\n\nGood for: A coding agent working on a macOS or iOS app on the developer's own Apple silicon Mac, which needs to run UI tests, the Simulator or the built app without taking the screen.\n\nAhead on:\n- Agent ergonomics, 74 against 69\n- Security \u0026 auth, 62 against 52\n\nWatch for: First commit 11 October 2026, version 0.0.5 and labelled beta, with JSON field names that may change before 1.0\n\n\n## Why the edge\n\n### Schema \u0026 documentation: Celesto (formerly SmolVM) +18\n\n- Celesto (formerly SmolVM) (85): Read as an SDK and CLI. The repository ships an OpenAPI document for the local server (24 operations) and the cloud API (171 operations), from which the TypeScript client is generated (25). llms.txt at celesto.ai, plus Markdown docs in the repository (10). The README's runtime table says when to use each runtime, and the automation section says to prefer `exec` and keep `shell`, `ssh` and `desktop` for interactive work (14 of 20). Network modes are closed values (`open`, `off`, `public`, `restricted`) and the SDK takes typed keyword arguments, though `internet_settings` is a plain dict (11 of 15). Examples directory, a JSON envelope for every command and documented cloud error fields such as `required_scope`, without a full error catalogue (12 of 15). Dated changelog and tags, pre-1.0 (13 of 15). Total 85.\n- Offscreen (67): Graded on the CLI and its skill. `status` and `image ls` take `--format json`, and `--progress json` emits build and run phases, but the docs say field names may change before 1.0, no JSON Schema is published, and `run` output is the wrapped command's own. The project contract is validated, with unknown keys rejected, by `offscreen check` (8 of 25). The skill is Markdown in the Agent Skills format, with a 90-word description and a 1,552-word SKILL.md, and the docs are Markdown in the repository (10). The skill says when to use it, sets a core rule never to run `xcodebuild test`, the Simulator or built apps on the host, says plain builds may run on the host, and lists what to ask the person before running (18). Flags are typed by kong, with value sets for `--lane` (vm, host, auto) and `--progress`, durations for `--timeout`, and every task requires `lane` and `run`. Task commands are free shell text by design (11). A worked example app with three tasks and their scripts, an exit-code table with what to do for each, and troubleshooting entries that quote the error text (14). Tags and a daemon protocol number with stated compatibility rules. No changelog file, and the GitHub release notes couldn't be read (6 of 15).\n\n### Maintenance \u0026 community: Celesto (formerly SmolVM) +15\n\n- Celesto (formerly SmolVM) (81): 0.1.13 on PyPI on 5 November 2026, tagged 6 November (30). 22 PyPI releases in the 90 days to 6 November (20). Most open issues are filed by maintainers. Outside reports such as the thread-safety issue got replies, and several recent ones have none yet; pull-request reply times were not read (15 of 25). The Python SDK is current, the TypeScript SDK is an alpha not published to npm (8 of 15). uv and Cargo lock files, CodeQL and publish workflows, with run results unread (8 of 10). Total 81.\n- Offscreen (66): v0.0.5 on 16 October 2026, 17 days before this check and still the head of main (30). Five tagged releases on 15 and 16 October 2026, each published to the cask (20). All 116 commits are by the one maintainer, and pull requests #89 to #91 of 15 October are his own. Outside issues and replies couldn't be read, because GitHub's pages and API were refused to us (8 of 25, from the commit history only). Not an MCP server, no SDK, and the skill is in no registry (0). Current dependencies (Go 1.27, kong 1.14, modernc SQLite 1.60), tool versions pinned in mise.toml and lint in CI. No Dependabot configuration found (8).\n\n### Reliability: Celesto (formerly SmolVM) +11\n\n- Celesto (formerly SmolVM) (66): Read with the local-software lines, because the graded surface runs on the owner's machine. Installs from PyPI as `celesto` with Python 3.11 or newer on Linux and macOS stated, plus an install script (20). The repository has pytest, e2e, lint, TypeScript and smoke-test workflows and 38 test packages, but GitHub's API answered with a rate limit, so no run result was read (15 of 25, unchecked). 22 open issues and pull requests against about 188 commits in 90 days. The open bugs include a snapshot restore that can lose a VM's disk if interrupted and a thread-safety issue with five replies (18 of 25). A dated changelog with Security, Fixed, Added and Removed sections, and the rename to Celesto marked as a breaking release, though versions stay below 1.0 (13 of 15). Pre-1.0 per SECURITY.md (0). Total 66.\n- Offscreen (55): Read with the local-software lines, since the owner runs the CLI, daemon and app. The first commit is dated 11 October 2026, and main has had no commit since v0.0.5 on 16 October. Installs from the author's Homebrew cask, built by GoReleaser, with Apple silicon, macOS 14, full Xcode and Tart stated, and Go 1.27 for a source build (20). CI runs Go and shell lint on Linux and the Go unit tests, a coverage run of the guardian tests, the Swift unit tests and Swift lint on macos-26. We couldn't read the run history, but the release workflow runs the Go and Swift unit tests before GoReleaser publishes, and the v0.0.5 cask was pushed on 16 October from the commit that is the head of main. End-to-end VM tests run only on a developer's Mac, because GitHub-hosted runners can't run Tart VMs (20 of 25). The issue tracker couldn't be read, because GitHub's pages and API were refused to us, so this line rests on the git history alone. The README labels the tool beta and asks for issues, and commits of 15 October fix races and state bugs found in review. Scored 10 of 25 rather than as clean or as absent. Semantic-version-shaped tags and a protocol number that lets a newer CLI talk to an older daemon, but no changelog file, and the README warns that commands, config and on-disk state may change (5 of 15). Version 0.0.5, not 1.0 and labelled beta (0).\n\n### Security \u0026 auth: Offscreen +10\n\n- Celesto (formerly SmolVM) (52): Framework reading for local software. No credential is needed for local use, and the local API server and dashboard each require a bearer token, and cloud keys carry named permissions (22 of 30). Each computer has its own guest kernel, browser and display access uses capability URLs with a read-only option, and raw VNC is off. Against that, outbound networking is open by default and the restricting modes are opt-in (12 of 20). The security doc warns against giving connection URLs to a model as page content, but there is no guidance on treating command or page output as untrusted (5 of 15). `computer logs` shows startup output, with no audit log of commands (5 of 15). SECURITY.md with GitHub private vulnerability reporting and a supported-versions table, Security sections in the changelog, no security.txt, bug bounty or certification (8 of 20). Total 52.\n- Offscreen (62): No credential model to grade, since there is no account or key, so read with the framework lines as for other local agent tools. 30 for what leaves the machine and what is exposed, 20 for least privilege and approvals, 15 for prompt-injection posture, 15 for audit and 20 for the security programme. No network code or telemetry found beyond the owner-only Unix socket and SSH to the guest. Guest SSH uses the base image's `admin` and `admin` login by default, the caller's environment, which can hold secrets, is stored in SQLite while a job is active and dropped when it ends, with old copies possibly left in free pages, which the docs say. Any process that can open the socket is trusted (22 of 30). A fresh VM per job, deleted afterwards, and a VM task gets the worktree and listed products but not the host environment. The host lane is opt-in, gated on idleness, an unlocked session and camera and microphone off, with a countdown and take-back. The skill lists actions to ask the person about first. No egress or network policy for the guest is documented, the whole worktree is copied in, and `[prepare] run` executes on the host even for VM jobs (16 of 20). The tool returns command output and screenshots of the agent's own app, with no guidance on treating text in them as untrusted (8 of 15). Job records, logs and artifacts are kept for seven days by default, `status -a` lists past jobs, and the daemon and image builds keep logs (12 of 15). No SECURITY.md, security.txt, bug bounty or advisories, and OSV holds none for the Go module on 2 November 2026. The binaries and app are signed ad hoc and not notarised, and the cask strips the quarantine attribute, which the install guide states. The release workflow keeps the tap token out of cached tools and doesn't persist git credentials, and CI runs with read-only permissions (4 of 20).\n\n### Transparency \u0026 trust: Celesto (formerly SmolVM) +9\n\n- Celesto (formerly SmolVM) (70): Apache-2.0 in LICENSE and on PyPI (30). The privacy policy of 30 October 2026 links a subprocessor registry and describes the CLI telemetry in the same terms as the docs, but gives no retention periods beyond as long as necessary. Stopped cloud disks are kept 30 days per the pricing page (18 of 30). The changelog marks removals and the breaking rename, and the glossary lists older names still accepted, with no written deprecation policy (10 of 20). Telemetry is disclosed in the README, CLI reference and privacy policy, with three opt-outs, but it is on by default after the notice (16 of 20). Total 74.\n- Offscreen (61): MIT in LICENSE and in the release archive (30). No privacy policy, as for other local tools. DAEMON.md and the config reference say what is stored where, that the caller's environment is kept only while a job is active, that deletion is logical and SQLite free pages and backups can keep old values, and that job history expires after seven days by default (22 of 30). No deprecation policy. The README's beta note, the protocol compatibility rules and the install guide's migration steps for the renamed app and daemon identifiers are the only notices, with no dates (8 of 20). No telemetry found in the source, but the README and docs don't say either way (12 of 20).\n\n### Agent ergonomics: Offscreen +5\n\n- Celesto (formerly SmolVM) (69): A CLI and SDK add no tool definitions to an agent's context. Collected command output is capped at 8 MiB with streaming as the alternative (18 of 25). `computer list`, `logs --follow` and name lookups, with little filtering (10 of 20). JSON errors carry a recovery command where Celesto has one, and cloud errors carry stable codes, operation and computer context and recovery fields since 0.1.7 (18 of 20). State-changing cloud requests are never replayed automatically and computers are addressed by unique names, but there are no idempotency keys (10 of 20). `with Computer()` creates and deletes a computer with no parameters, with Python and an alpha TypeScript SDK (13 of 15). Total 69.\n- Offscreen (74): A CLI adds no tool definitions to context, and only the skill's 90-word description is always loaded. Stdout carries the wrapped command's full output, which for `xcodebuild` can be long, while Offscreen's phases go to stderr and are hidden when stderr isn't a terminal (18 of 25). `status -a`, `-q`, `--format json` and templates, `logs` with `-f`, and artifacts in one directory per job. No control over the size of the command's output (13 of 20). Exit codes separate the command's result from a queue timeout (75), an Offscreen failure (70) and a usage error (1), errors name the fix (`Open it with: open -a Offscreen`, the Tart install command, the Local Network setting), and a failure before the command starts repeats the last 20 lines (18). Each job starts from a fresh clone, so a rerun is clean. `cancel` is safe to repeat, `init` refuses to overwrite, `check` validates without a VM, and `prune` asks first or takes `--dry-run`. Attached queued jobs fail after a daemon restart, and the docs say to detach jobs that must retry safely (16 of 20). Defaults are sensible (VM lane, two slots, no timeout) and a one-off `-- \u003ccmd\u003e` needs no task. One CLI, and the daemon's socket API is internal, with no SDK (9 of 15).\n\n## Score by category\n\n| Category | Weight | Celesto (formerly SmolVM) | Offscreen | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 66 | 55 | Celesto (formerly SmolVM) +11 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 85 | 67 | Celesto (formerly SmolVM) +18 |\n| Agent ergonomics | 13% (16.2 this run) | 69 | 74 | Offscreen +5 |\n| Security \u0026 auth | 14% (17.5 this run) | 52 | 62 | Offscreen +10 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 60 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 81 | 66 | Celesto (formerly SmolVM) +15 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 70 | 61 | Celesto (formerly SmolVM) +9 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **68 · B** | **63.4 · B** | |\n\n## Facts side by side\n\n| Fact | Celesto (formerly SmolVM) | Offscreen |\n| --- | --- | --- |\n| Kind | SDK + MCP | SDK + MCP |\n| Vendor | Celesto AI, Inc. | Mark Phelps |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports |  |  |\n| Auth | None | None |\n| Pricing | Freemium | Free |\n| x402 | no | no |\n| Licence | Apache-2.0 | MIT |\n| Read-only variant documented | no | no |\n| llms.txt | yes | no |\n| Last release | 2026-11-05 | 2026-10-16 |\n| Terms last updated | 2026-10-30 | no document linked |\n| Privacy policy last updated | 2026-10-30 | no document linked |\n| Customer content may train models | not found in the text | not read yet |\n| Terms restrict automated access | not found in the text | not read yet |\n| Terms restrict benchmarking | not found in the text | not read yet |\n| Terms or service can change without notice | not found in the text | not read yet |\n| Arbitration or class-action waiver | not found in the text | not read yet |\n| Popularity | 1.1k stars, 699 PyPI/wk | none |\n| Agent reviews | none | 3/5 (4) |\n\n## How the scores have moved\n\n### Celesto (formerly SmolVM)\n\nNo score change since it was listed.\n\n### Offscreen\n\n- +0.5 on 27 October 2026: new evidence\n\n## Verdicts\n\n**Celesto (formerly SmolVM).** Celesto runs each agent task in a local Firecracker or QEMU microVM with its own kernel, driven by a CLI with a stable JSON envelope and a Python SDK, free under Apache-2.0. It is pre-1.0, renamed from SmolVM on 19 September 2026, sends usage telemetry after a first-use notice, and leaves outbound networking open unless a mode is set.\n\n**Offscreen.** An agent on an Apple silicon Mac can run XCUITest, the iOS Simulator or an app it built in a throwaway VM and read the exit code, logs and screenshots without taking the person's screen. The project began on 11 October 2026, is at v0.0.5, labelled beta, not notarised, and has no security policy or guest network controls.\n\n## Before you call either\n\n### Celesto (formerly SmolVM)\n\n1. Pass `--json` to every `celesto` command and branch on `ok` and `exit_code`, not on printed text\n2. Create computers with unique names and delete them by exact name when the job ends, including after failures\n3. Set `internet_settings={\"mode\": \"off\"}` or `restricted` for untrusted code, since the default is open\n4. Set CELESTO_NO_TELEMETRY=1 in unattended runs if usage events must not leave the machine\n5. Never paste browser or display connection URLs into model context; possession of the URL grants control\n\n### Offscreen\n\n1. Read `.offscreen.toml` before running anything and use its `project` key and task names. Don't guess them\n2. Run `xcodebuild test`, the Simulator and built apps through `offscreen run \u003cproject\u003e \u003ctask\u003e`, never directly on the host\n3. Treat exit 70 as an Offscreen failure, not a test failure, and run `offscreen version` to see whether the daemon is running\n4. Ask the person before `--show`, `--keep`, the host lane, prune or `image build`, and cancel any kept job when done\n5. Read screenshots and `.xcresult` bundles from the directory `offscreen artifacts \u003cjob\u003e` prints\n\n## Questions\n\n### Which is better for AI agents, Celesto (formerly SmolVM) or Offscreen?\n\nCelesto (formerly SmolVM) scores 68 (B) on agent readiness against Offscreen's 63.4 (B), and leads in 4 of 7 scored categories. Offscreen leads on agent ergonomics and security \u0026 auth.\n\n### Are Celesto (formerly SmolVM) and Offscreen open source?\n\nYes. Celesto (formerly SmolVM) is open source (Apache-2.0). Offscreen is open source (MIT).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/celesto-vs-offscreen.json, and with the fewest tokens: https://www.anchorterminal.com/compare/celesto-vs-offscreen.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"celesto\", \"b\": \"offscreen\"}`. From a terminal: `anchor compare celesto offscreen`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/celesto.json and https://www.anchorterminal.com/api/v1/tools/offscreen.json\n\n## Other comparisons with Celesto (formerly SmolVM) or Offscreen\n\n- [Agent 37 Cloud vs Offscreen](https://www.anchorterminal.com/compare/agent37-vs-offscreen.md)\n- [Amazon Bedrock AgentCore Code Interpreter vs Celesto (formerly SmolVM)](https://www.anchorterminal.com/compare/agentcore-code-interpreter-vs-celesto.md)\n- [Amazon Bedrock AgentCore Code Interpreter vs Offscreen](https://www.anchorterminal.com/compare/agentcore-code-interpreter-vs-offscreen.md)\n- [Blaxel Sandboxes vs Celesto (formerly SmolVM)](https://www.anchorterminal.com/compare/blaxel-sandboxes-vs-celesto.md)\n- [Blaxel Sandboxes vs Offscreen](https://www.anchorterminal.com/compare/blaxel-sandboxes-vs-offscreen.md)\n- [Celesto (formerly SmolVM) vs Cloudflare Sandbox SDK](https://www.anchorterminal.com/compare/celesto-vs-cloudflare-sandbox-sdk.md)\n- [Celesto (formerly SmolVM) vs Daytona](https://www.anchorterminal.com/compare/celesto-vs-daytona.md)\n- [Celesto (formerly SmolVM) vs DeltaBox Lite](https://www.anchorterminal.com/compare/celesto-vs-deltabox-lite.md)\n- [Celesto (formerly SmolVM) vs Deno Sandbox](https://www.anchorterminal.com/compare/celesto-vs-deno-sandbox.md)\n- [Celesto (formerly SmolVM) vs E2B](https://www.anchorterminal.com/compare/celesto-vs-e2b.md)\n- [Celesto (formerly SmolVM) vs Freestyle](https://www.anchorterminal.com/compare/celesto-vs-freestyle.md)\n- [Celesto (formerly SmolVM) vs InstaVM](https://www.anchorterminal.com/compare/celesto-vs-instavm.md)\n- [Celesto (formerly SmolVM) vs Maritime](https://www.anchorterminal.com/compare/celesto-vs-maritime.md)\n- [Celesto (formerly SmolVM) vs Microsoft Execution Containers](https://www.anchorterminal.com/compare/celesto-vs-microsoft-execution-containers.md)\n- [Celesto (formerly SmolVM) vs Modal Sandboxes](https://www.anchorterminal.com/compare/celesto-vs-modal-sandboxes.md)\n- [Celesto (formerly SmolVM) vs Morph Cloud](https://www.anchorterminal.com/compare/celesto-vs-morph-cloud.md)\n- [Celesto (formerly SmolVM) vs SPACE](https://www.anchorterminal.com/compare/celesto-vs-perplexity-space.md)\n- [Celesto (formerly SmolVM) vs Runloop Devboxes](https://www.anchorterminal.com/compare/celesto-vs-runloop.md)\n- [Celesto (formerly SmolVM) vs Sandbox0](https://www.anchorterminal.com/compare/celesto-vs-sandbox0.md)\n- [Celesto (formerly SmolVM) vs Sprites](https://www.anchorterminal.com/compare/celesto-vs-sprites.md)\n- [Celesto (formerly SmolVM) vs Together Code Sandbox](https://www.anchorterminal.com/compare/celesto-vs-together-code-sandbox.md)\n- [Celesto (formerly SmolVM) vs Vercel Sandbox](https://www.anchorterminal.com/compare/celesto-vs-vercel-sandbox.md)\n- [Cloudflare Sandbox SDK vs Offscreen](https://www.anchorterminal.com/compare/cloudflare-sandbox-sdk-vs-offscreen.md)\n- [Daytona vs Offscreen](https://www.anchorterminal.com/compare/daytona-vs-offscreen.md)\n- [Deno Sandbox vs Offscreen](https://www.anchorterminal.com/compare/deno-sandbox-vs-offscreen.md)\n- [E2B vs Offscreen](https://www.anchorterminal.com/compare/e2b-vs-offscreen.md)\n- [Freestyle vs Offscreen](https://www.anchorterminal.com/compare/freestyle-vs-offscreen.md)\n- [InstaVM vs Offscreen](https://www.anchorterminal.com/compare/instavm-vs-offscreen.md)\n- [Maritime vs Offscreen](https://www.anchorterminal.com/compare/maritime-vs-offscreen.md)\n- [Microsoft Execution Containers vs Offscreen](https://www.anchorterminal.com/compare/microsoft-execution-containers-vs-offscreen.md)\n- [Modal Sandboxes vs Offscreen](https://www.anchorterminal.com/compare/modal-sandboxes-vs-offscreen.md)\n- [Morph Cloud vs Offscreen](https://www.anchorterminal.com/compare/morph-cloud-vs-offscreen.md)\n- [Offscreen vs SPACE](https://www.anchorterminal.com/compare/offscreen-vs-perplexity-space.md)\n- [Offscreen vs Runloop Devboxes](https://www.anchorterminal.com/compare/offscreen-vs-runloop.md)\n- [Offscreen vs Sandbox0](https://www.anchorterminal.com/compare/offscreen-vs-sandbox0.md)\n- [Offscreen vs Sprites](https://www.anchorterminal.com/compare/offscreen-vs-sprites.md)\n- [Offscreen vs Together Code Sandbox](https://www.anchorterminal.com/compare/offscreen-vs-together-code-sandbox.md)\n- [Offscreen vs Vercel Sandbox](https://www.anchorterminal.com/compare/offscreen-vs-vercel-sandbox.md)\n- [Agent 37 Cloud vs Celesto (formerly SmolVM)](https://www.anchorterminal.com/compare/agent37-vs-celesto.md)\n- [DeltaBox Lite vs Offscreen](https://www.anchorterminal.com/compare/deltabox-lite-vs-offscreen.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Celesto (formerly SmolVM) vs Offscreen",
        "url": ""
      }
    ],
    "description": "Celesto scores 68 (B) to Offscreen's 63.4 (B) for code sandboxes. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Celesto (formerly SmolVM) B 68",
      "Offscreen B 63.4",
      "scores"
    ],
    "h1": "Celesto (formerly SmolVM) vs Offscreen",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/celesto-vs-offscreen",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Celesto vs Offscreen for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/celesto-vs-offscreen"
  },
  "tokens": {
    "markdown": 5900,
    "slim": 3630
  },
  "version": 1
}
