Expose a sandbox or a local port to the public web with one command, at <name>.neko.computer.
macOS and Linux, both aarch64:
curl -fsSL https://install.neko.computer | sh
Or with Homebrew: brew install superhq-ai/tap/neko. Update later with neko upgrade.
neko login # sign in via the SuperHQ device grant (app.superhq.ai)
neko tunnel 3000 # tunnel a local 127.0.0.1:3000 port (no sandbox)
neko tunnel 3000 --workspace acme # own the public tunnel in a SuperHQ workspace
neko run --port 3000 -- npm run dev # reach the sandbox from your machine, no account
neko run --tunnel 3000 -- npm run dev # anonymous, ephemeral sandbox, public URL
neko run --tunnel 3000 -w acme -- npm run dev
neko run alice --tunnel 3000 -- npm run dev # a persistent named computer
neko run base --allow-net --checkpoint clean -- sh -c 'apt-get install -y python3' # build a reusable checkpoint
neko run web --from base@clean --tunnel 3000 -- python3 -m http.server 3000
Managing computers and checkpoints:
neko clone base@clean staging # a computer from a ref (shared node) or an image file
neko ls # list computers
neko history alice # the checkpoint history of a computer
neko rm alice # remove a computer and reclaim its orphaned checkpoints
neko gc # sweep checkpoints orphaned by crashes or interrupted ops
--port forwards a sandbox port to 127.0.0.1 on your machine, which is all local: no account, no sign-in, nothing hosted. Use --port 3000:8000 for a different host port. --tunnel is the same plumbing pointed at the public internet instead, which needs SuperHQ Pro.
A computer is a named, versioned sandbox: a branch ref over a shared tree of checkpoints (immutable disk snapshots). neko run NAME resumes from the computer head; --from branches from a checkpoint; --checkpoint snapshots on the way down. Opening a tunnel requires neko login.
neko run boots an isolated Linux microVM, mounts the current directory read-only at /workspace, and runs the command there. argv is passed directly, with no shell, so pipes and && need an explicit sh -c. The base image is a minimal Debian: install what the command needs inline, or bake it into a checkpoint. The image downloads on first run.
A sandbox starts closed, and each door is opened by a flag. Both defaults are printed at boot, so a command that trips over one has the reason in view.
neko run --allow-net -- sh -c 'apt-get update && apt-get install -y python3'
neko run --allow-host '*.npmjs.org' -- npm install # that host and no other
neko run --write -- npm run build # keep the output on the host
neko run --mount ~/data:/data --mount .:/src:rw -- ./build.sh
- Networking is off. The guest boots with no network device at all, so nothing reaches the internet and nothing leaves.
--allow-netopens it;--allow-host PATTERN(repeatable, implies--allow-net) opens only the hosts you name, through a host-side proxy. Tunnels and--portare unaffected either way: they reach the guest over vsock, not over its network. - The current directory is mounted read-only at
/workspace. This is not a wall the command hits: the guest lays an overlay over the share, sonpm installand build output succeed and land in a scratch layer that goes away with the sandbox, leaving your tree untouched.--writeshares it read-write instead, so writes are real.--mount HOST:GUEST[:ro|:rw]mounts elsewhere, is repeatable, and is read-only unless it ends in:rw;--workdirsets where the command runs, defaulting to the first mount's guest path.
Installing at every boot is both slow and a reason to keep egress open. Bake the runtime into a checkpoint once with --allow-net, then boot from it offline:
neko run base --allow-net --checkpoint node -- sh -c 'apt-get update && apt-get install -y nodejs npm'
neko run web --from base@node --tunnel 3000 -- npm start
neko run --term puts a terminal into the sandbox on the web: it opens a private tunnel of its own and serves the terminal at https://<name>.neko.computer/__neko/term (the bare URL redirects there). Only members of your workspace can open it (--private SLUG to name one), and each visit gets its own login shell. Add --tunnel PORT to expose an app port on the same tunnel alongside the terminal.
neko run --term # a computer in the browser
neko run alice --term # a persistent one
neko run --term --tunnel 3000 -- npm run dev # app plus terminal
neko ships as an agent skill so coding agents (Claude Code, Cursor, Copilot, and more) can open a tunnel whenever they need a public URL for a sandbox or a local port.
# Install with the skills CLI
npx skills add superhq-ai/neko-computer
# Or copy it into your project manually
cp -r skills/neko .claude/skills/nekoThe skill lives at skills/neko/SKILL.md.
The edge worker is a library: deploy your own tunnel domain and point the CLI at it. See docs/self-hosting.md.
crates/nekothe Rust CLIedgethe Cloudflare tunnel Worker and Durable Objectskills/nekothe agent skilldocsthe tunnel protocol, self-hosting, and development notes
The wire protocol is specified in docs/specs/tunnel-protocol.md.
Apache-2.0. See LICENSE.