mrkeyoor.com_
Sat 05 Sept 18:32 UTC
Dev Toolsevaluationupdated 05 Sept 2026

nono review

nono runs coding agents and the tools they call inside a local operating-system sandbox, limiting which files, networks, commands, and credentials each process can reach. It gives teams a reviewable policy outside the agent's prompt, without requiring a container or virtual machine for each session.

trackingstars / 7d
Verdict

Our nono run built in 363 seconds and passed 6,112 of 6,114 tests, but the failed suite and the project's own warning against production use keep it out of high-stakes deployment today. It is still one of the more thoughtful ways to reduce a local coding agent's reach, especially when delegated tools and API credentials need different rules. Use it for evaluated developer sessions, inspect every profile, and require a clean test result plus stable security guarantees before standardizing it in production.

We ran it

Lab card: what happened when we ran nonoScreenshot of nono (nono.sh)
Install✓ · 50s530 packages
Build✓ · 363s
Tests✗ · 346s6112 passed · 2 failed of 6114 (cargo test)
Repo499 files~230,026 lines of source · 43.3 MB · 13 CI workflows · tests dir

Answers from our run

Does nono build from source?

Dependencies installed in 50 seconds (530 packages), and the build succeeded in 363 seconds. We cloned commit 7772508 into a clean Debian container with 3 CPUs and no project-specific setup.

Do nono's tests pass?

Not all of them: 6112 of 6114 passed and 2 failed when we ran the project's own test command (cargo test). Some failures need services or credentials a bare container does not have.

Who should not use nono?

Production operators who require stable security guarantees: nono's security policy says those guarantees are not yet stable and production use is not recommended.

What are the alternatives to nono?

Sandbox Runtime, E2B, gVisor. Our nono run built in 363 seconds and passed 6,112 of 6,114 tests, but the failed suite and the project's own warning against production use keep it out of high-stakes deployment today.

Setup4/5Many binary install paths; our source build took 363 seconds
Docs5/5Threat model, platform limits, modes, and policies are explicit
Community4/53,965 stars with same-day issue activity and recent releases
Maturity2/5Pre-1.0 security promises are unstable; production is discouraged

Who it’s for

Developers who run Claude Code, Codex, OpenCode, or similar agents against sensitive workstations.
Security teams willing to write and review explicit filesystem, network, command, and credential policies.
Agent platform builders who need separate restrictions for delegated tools such as git, gh, curl, or kubectl.
Rust, Python, TypeScript, or Go developers embedding local process isolation through the available bindings.

Who it’s NOT for

Production operators who require stable security guarantees: nono's security policy says those guarantees are not yet stable and production use is not recommended.
Teams whose threat model requires a separate guest kernel: nono shares the host kernel and user context, and its policy explicitly says it is not a VM or hypervisor boundary.
Users expecting outbound traffic to be denied automatically: the networking guide says sandboxed processes have unrestricted network access by default unless a block or proxy policy is selected.
Native Windows users: the installation guide supports Windows through WSL2 with 84 percent feature coverage, while native Windows is unsupported.
CI jobs that need audit, rollback, and proxy filtering in direct mode: the execution guide says nono wrap provides none of those services.

Setup reality

Our fresh Debian sandbox installed 530 Rust packages in 50 seconds. Building commit 7772508 succeeded in 363 seconds. Cargo test then ran for 346 seconds and failed with exit 101: 6,112 of 6,114 tests passed, while 2 failed. The supplied log tail names the nono-cli manifest_roundtrip test binary and says it finished with 14 passed and 1 failed; it does not identify the other failed test.

Using a release binary is much shorter than the source build. The project documents Homebrew, Debian, RPM, Arch, Nix, and an install script. Core sandboxing needs no hosted account, but protected agent credentials must come from a configured keyring, environment source, or proxy route. Registry profiles can be pulled for specific agents, then forked into JSON that declares filesystem, network, command, and credential rules.

Linux needs kernel 5.13 or newer for Landlock; macOS uses Seatbelt; Windows needs WSL2, where the docs claim 84 percent feature coverage. Native Windows is unsupported. The default supervised mode keeps an unsandboxed parent for audit and proxy services, while direct mode drops those features. Network access is unrestricted until a blocking or allowlist policy is selected. The security policy says the project is in early development and does not recommend production use.

The 499-file project puts policy around local agent processes

nono's 499-file repository contains a Rust command-line tool, core library, network proxy, language bindings, profile registry support, and tests. Its job is to start an agent with an explicit set of filesystem capabilities, then keep that policy outside the agent's control. Profiles exist for Claude Code, Codex, OpenCode, OpenClaw, and other clients. Teams can copy a registry profile, inspect its JSON, restrict it further, and share the result.

The checkout held roughly 230,026 source lines despite occupying only 43.3 MB. Much of the value sits beyond basic file blocking: supervised sessions can record audits, snapshot changes for rollback, filter destinations, broker credentials, and explain denials. Command policies can launch a delegated tool in a second sandbox with narrower access than the parent agent. A profile may let the agent call gh, for example, while giving that command one token and only selected API paths.

The default filesystem is narrow while network access is open

Our 43.3 MB checkout supports a useful default for files: the common run command can expose the working directory while leaving unrelated home-directory data invisible. That reduces damage from a recursive edit or an agent wandering into SSH and cloud configuration. The profile format distinguishes read, write, and combined access, and nono why explains a denial. Those details make the boundary inspectable outside an agent's natural-language instructions.

Network policy needs deliberate attention. The documentation states that a sandboxed process has unrestricted network access by default. Operators must add a full block, allowed domains, or a named network profile to narrow egress. The supervised proxy can also inject a real API credential after the child presents a placeholder, keeping the secret out of the child process. That is useful only when the selected client honors the proxy path and the endpoint rules describe the calls it truly needs.

What happened when we ran it

Our sandbox installed 530 packages in 50 seconds, then built commit 7772508 successfully in 363 seconds. The repository contained 13 CI workflow files and a tests directory, while our scan found no Dockerfile. That fits a local binary whose main isolation mechanisms come from the host operating system. The measurement setup used an unprivileged Debian container with 3 CPUs, 12 GB of RAM, no secrets, and the lab-rust:1 image.

Cargo test ran for 346 seconds and exited with code 101. Its aggregate result was 6,112 passed and 2 failed out of 6,114. The tail shows many test binaries succeeding, then one binary ending with 14 passed and 1 failed. Cargo identifies nono-cli --test manifest_roundtrip as the rerun target. The tail does not name the other failed test or explain either failure, so any more specific diagnosis would be guesswork. This commit did not produce a clean suite in our fresh container.

A shared kernel is the boundary, and the project says so plainly

The 6,114-test suite reflects the size of the policy surface, but it does not turn nono into a virtual machine. On Linux, nono uses Landlock and related kernel controls. macOS uses Seatbelt. Both constrain processes inside the host's kernel and user context. The security policy says a genuine escape means exceeding the authority granted by the effective policy. Access that an operator explicitly allowed is expected behavior, even if the permission later proves too broad for the workload.

That model can be a good fit for interactive coding because it starts local tools without a container daemon or guest image. It is a poor fit when the untrusted program must face a separate kernel boundary. The same security policy calls the project early, says breaking changes may arrive without notice, warns that security guarantees remain unstable, and does not recommend production deployment. Those sentences carry more weight than the README's customer endorsements when deciding where sensitive automation may run.

WSL2 has 84 percent coverage and direct mode drops five services

The 230,026 source lines cover several execution paths, and their differences affect policy. Linux requires kernel 5.13 or newer. macOS has its own capability behavior. WSL2 uses Linux Landlock with documented 84 percent feature coverage, while native Windows is unsupported. Under WSL2, capability expansion is unavailable and proxy-based network filtering is blocked by default. A cross-platform team should test the same agent profile on each operating system rather than treating one JSON file as proof of identical enforcement.

Supervised mode leaves a trusted parent outside the child sandbox to provide audit records, rollback, diagnostics, capability prompts, and proxy filtering. Direct mode replaces itself with the target command and has less attack surface, but loses all five of those services. That trade is sensible for a small CI wrapper whose policy is fixed. It is much less attractive for an interactive agent that needs credential routing or an explanation when a tool fails. Selecting a mode is part of the security design, not a speed toggle.

v0.75.0 ships quickly while its security contract is still moving

GitHub recorded the last push on September 4, 2026, one day before this review, and listed 3,965 stars plus 172 combined issues and pull requests. Open issues were still being created and updated on September 5. Release v0.75.0 arrived on September 1 with proxy fixes, profile work, tool-sandbox examples, and security-model clarification. The README also warns that APIs may change before 1.0 and tells users to migrate registry references from the retired always-further namespace to nolabs-ai.

Our 363-second build succeeded, and 6,112 passing tests show far more engineering than an experimental shell wrapper. The 2 failures still matter because policy and manifest behavior are part of the product, while the upstream production warning settles the deployment question. nono is worth testing around local Claude Code or Codex sessions where a human can inspect permissions and respond to failures. A production agent runner should wait for the project's own security stance to change and for its chosen commit to pass every relevant check.

Alternatives

ProjectWhat it isPick it when
Sandbox RuntimeAnthropic's lightweight OS-level filesystem and network sandbox for local commands.pick this instead when you want a smaller local restriction layer and do not need nono's registry, credential broker, or delegated-tool policies.
E2BA platform for giving agents isolated cloud environments with development tools.pick this instead when disposable remote machines fit better than constraining agents on a developer workstation.
gVisor gh↗A container runtime sandbox with an application kernel between workloads and the host.pick this instead when container workloads need a stronger kernel boundary and agent-specific profiles are secondary.

What people are saying

  1. [github-trending] nolabs-ai/nono

Sources

  1. nono repository and README
  2. nono security policy
  3. nono installation and platform support
  4. nono networking guide
  5. nono execution modes
  6. nono v0.75.0 release

More dev tools reviews

openssl · lazycodex · ai-toolbox · cli · comprehensive-rust · aseprite · the whole board →