schuay

Aisan — Development skill for Claude Code

Development community

Coding agents with everything in the box: zero network, zero credentials.

How to install Aisan

This entry records only its repository, not the path inside it, so there is no exact command to give. Open schuay/aisan and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Aisan does

Coding agents with everything in the box: zero network, zero credentials. Bubblewrap confinement plus credential-injecting egress proxies for Claude Code, Codex, and opencode.

Alternatives in Development

  • CORS — Scan an endpoint for CORS misconfiguration — arbitrary-origin reflection, null-origin trust, credential exposu 4.5k ★
  • Opencode Claude Auth — OpenCode plugin that uses your existing Claude Code credentials — no separate login needed 903 ★
  • Agentsys — This automates everything else · 14 plugins · 43 agents · 30 skills · for Claude Code, OpenCode, Codex 655 ★

README

aisan

aisan runs a coding agent with everything in the box: the harness, its state, and your repo. Nothing else. The box has no network route and holds no credential. Model calls still work: each harness gets a host-side proxy that checks requests against an allowlist and attaches the real credential to traffic the box never sees.

python -m pip install aisan   # or: uv tool install aisan
aisan claude /path/to/repo

That is a normal interactive Claude Code session (`aisan codex` and `aisan opencode` work the same way), with three differences:

  • Zero credentials in the box. ~/.claude/.credentials.json is never mounted. The token the client sees is a per-box placeholder; the proxy drops it and attaches the host's real credential: the subscription login by default, or a static API key with --api-key. A test asserts from inside a real box that the credential file does not exist.
  • Zero network by default. The box gets its own network namespace with no route off the machine. The one egress is a loopback relay to the model proxy over a Unix socket. --net opts back into host networking when a task needs it; credential files stay unmounted and model calls still pass through the authenticated proxy.
  • Selected filesystem slices. The repo is bound rw at its real absolute path, system directories ro (/usr, /etc; fresh /proc and /dev), a tmpfs over $HOME and /tmp, and nothing else unless a bind spec names it. Local stdio MCP servers declared on the host are started inside the box, where they inherit its filesystem, cleared environment, and network namespace; remote MCP declarations and their authentication state stay on the host.

Nothing on faith: `--explain`

Every launcher takes `--explain`: it prints the resolved profile and the exact Bubblewrap argv from the same `Box` object used to launch, then exits. Trimmed:

Related Skills