Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Installation

Cowboy runs in two modes:

  • Litepip install, portable, no NixOS. The agent runs in your terminal with the core tools.
  • Full (NixOS) — agents run as managed services with network isolation, credential injection, and seccomp confinement.

Both modes require Zellij on PATH — the agent runtime is a Zellij plugin. The Nix packages pull it in for you; for the pip install you provide it yourself.

Lite (pip)

pip install get-cowboy        # PyPI package is "get-cowboy", binary is "cowboy"
cowboy --version

If you don’t already have Zellij:

nix-env -iA nixpkgs.zellij    # or: cargo install zellij / brew install zellij

You can also run it without installing, via uv:

uvx --from get-cowboy cowboy --help

Nix (CLI only)

The default flake package is the WASM plugin, so install the CLI package explicitly:

# Install the cowboy CLI into your profile
nix profile install github:dmadisetti/cowboy#get-cowboy

# Or run it without installing
nix run github:dmadisetti/cowboy#get-cowboy -- --help

Full (NixOS module)

Add the flake input and import the module, then enable one or more agents under services.cowboy.agents.<name>:

# flake.nix
{
  inputs.cowboy.url = "github:dmadisetti/cowboy";

  outputs = { self, nixpkgs, cowboy, ... }: {
    nixosConfigurations.your-host = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        ./configuration.nix
        cowboy.nixosModules.default
      ];
    };
  };
}
# configuration.nix
{
  services.cowboy.agents.dev = {
    enable = true;
    user = "alice";
    model = "claude-sonnet-4-20250514";
  };
}

This gives each agent a systemd-managed session, a network namespace forced through the credential proxy, optional seccomp confinement (services.cowboy.sheepdog), and optional message bridges (services.cowboy.bridges). The full set of per-agent options lives in Configuration.

macOS is supported via cowboy.darwinModules.default (launchd + pf instead of systemd + netns). Seccomp confinement is Linux-only.

Container

nix build .#docker-image
docker load < result          # loads cowboy:latest (or: podman load < result)
docker run -it cowboy:latest

The image bundles Zellij, the Python CLI, the harness plugin, and the bridge services.

Configuration after install

Set provider credentials as environment variables (lite mode) or via the NixOS module (full mode). Config files are JSON, read in order of increasing precedence:

/etc/cowboy/config.json      # optional hand-written system defaults (not emitted by the NixOS module)
~/.config/cowboy/config.json # user overrides
.cowboy/config.json          # project overrides (lite mode)
export ANTHROPIC_API_KEY="sk-ant-..."
export EXA_API_KEY="..."      # optional, for web search

See Configuration for the full key reference.

Next steps