wingthing

module
v0.35.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 14, 2026 License: MIT

README

wingthing

cinch

Sandboxed AI agents on your machine, accessible from anywhere.

wt egg claude              # sandboxed Claude Code session
wt start                   # connect your machine to the relay
open app.wingthing.ai      # start sessions from any browser

How it works

wt egg spawns an agent inside an OS-level sandbox. macOS uses Seatbelt (sandbox-exec). Linux uses user namespaces and seccomp. No containers, no VMs.

Every session runs in its own sandboxed process. Detach and reattach without losing state.

wt egg claude              # Claude Code
wt egg codex               # Codex
wt egg ollama              # local inference, free, offline
wt egg list                # active sessions
wt egg stop <id>           # kill one
Sandbox

Out of the box, the sandbox is opinionated: CWD is writable, home is read-only, sensitive directories (~/.ssh, ~/.gnupg, ~/.aws, etc.) are denied, and only essential env vars are passed through. Network is blocked except for exactly what your agent needs - Claude gets api.anthropic.com, Ollama gets localhost, Gemini gets *.googleapis.com, etc. A local CONNECT proxy enforces domain-level filtering so agents can only reach their own API, not the entire internet. You don't configure any of this - agent binaries, config directories, network rules, and env vars are all auto-detected.

Drop an egg.yaml in your project to customize. Configs are additive - you only declare what you're changing from the defaults.

# egg.yaml - add SSH access and extra network on top of defaults
fs:
  - "ro:~/.ssh"       # overrides the default deny for ~/.ssh
network:
  - "github.com"      # add a domain on top of agent defaults
env:
  - SSH_AUTH_SOCK      # pass SSH agent socket

Use base: none for a blank slate if you want full control. Use the sandbox builder on the homepage to generate configs visually.

Remote access

wt wing opens an outbound WebSocket to the relay. No port forwarding, no static IP, works behind NAT.

wt login                   # authenticate with GitHub
wt start                   # background daemon
wt status                  # check it
wt stop                    # stop it
browser (xterm.js) <-> relay (dumb pipe) <-> your machine

The relay never sees your data. Sessions are end-to-end encrypted (ECDH + AES-GCM). The relay forwards opaque bytes.

Open app.wingthing.ai to browse your connected wings, start sessions, and view session history.

Agents

wt doctor shows what's installed. Swap agents per-session.

Agent CLI
Claude Code claude
Codex codex
Cursor Agent agent
Ollama ollama
Gemini gemini

Install

curl -fsSL https://wingthing.ai/install.sh | sh

Or build from source (Go 1.25+, Node.js):

git clone https://github.com/ehrlich-b/wingthing.git
cd wingthing && make check

Update with wt update.

Self-hosting

Single binary, SQLite, no external deps.

wt serve --addr :8080
wt wing --relay http://localhost:8080

License

MIT

Directories

Path Synopsis
cmd
wt command
internal
egg
ws

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL