Skip to content

Sandbox validation

--sandbox is the fourth and most rigorous stage of the Axint pipeline. It takes the generated Swift, drops it into a deterministic Swift Package Manager project in a temp directory, and runs swift build.

If the build succeeds, you know the generated Swift is actually valid — not just plausible-looking. If it fails, you get the real Swift compiler output as a diagnostic, pointing at the generated line.

How it works

┌─────────────────────────┐
IR ──────► │ generator.ts │
└──────────┬──────────────┘
│ Swift source
┌─────────────────────────┐
│ sandbox/ │ ← created in $TMPDIR
│ ├── Package.swift │ on first run, reused after
│ ├── Sources/ │
│ │ └── Intent.swift │
│ └── .build/ │ warm cache ≈ 1.2s
└──────────┬──────────────┘
│ swift build
pass / fail

The sandbox lives at $TMPDIR/axint-sandbox/ by default. The .build/ cache survives across runs, which is why the first run takes ~4 seconds (cold) and every subsequent run takes ~1.2 seconds (warm).

When to use it

  • Locally — when you want hard proof the intent compiles before opening Xcode.
  • CI — on a macOS runner, the sandbox gives you end-to-end validation for every PR.
  • From MCP — set sandbox: true in axint_compile and the MCP server will include the Swift build output in its response. This is how Claude Code and Cursor know whether an intent is actually valid.

Requirements

  • macOS
  • Xcode 16 or later, or xcode-select --install for the command-line tools only

On Linux or Windows, the sandbox stage is skipped with a friendly warning unless you pass --strict-sandbox, which will exit non-zero.

Programmatic use

You can also use the sandbox from your own code via the reusable sandboxCompile() API exported from @axint/compiler:

import { sandboxCompile } from "@axint/compiler";
const result = await sandboxCompile(swiftCode);
if (!result.success) {
console.error(result.stderr);
process.exit(1);
}