Skip to content

wandb/catnip

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Catnip Logo

🐾 Catnip

The developer environment that's like catnip for agentic programming.

GitHub Stars Docker Pulls Version

πŸ”₯ Parallel vibe coding in containers. Stay organized, get notified, create anything! 😎

Catnip UI Screenshot

πŸš€ Why Catnip?

Catnip's purpose is to make asynchronous coding agents more accessible and productive.

  • πŸ”’ Isolated Sandbox: All code runs containerized environment using either Docker or Apple's new Container SDK. We can use --dangerously-skip-permissions without fear!
  • πŸ§‘β€πŸ’» Worktree Management: Worktree's let you spawn multiple agents in parallel. Catnip keeps everything organized.
  • πŸ’» Full Terminal Access: Open multiple terminals via the web interface, CLI, or directly via SSH.
  • πŸ‘€ Preview Changes: Catnip has a built in proxy and port detection. Start a web service and preview it live!
  • 🌐 Universal Access: Still a big fan of Cursor or VS Code? No problem, full remote development directly in your IDE is supported.

⚑ Quick Start

curl -sSfL install.catnip.sh | sh
# Optionally start catnip from an existing git repo
cd ~/Development/my_awesome_project
catnip run
# Open http://localhost:8080 πŸŽ‰

πŸ€“ How it works

graph TB
    subgraph host ["πŸ–₯️ Host System"]
        catnip["<b>catnip</b><br/>Go Binary"]
    end

    subgraph container ["🐳 wandb/catnip Container"]
        server["<b>Catnip Server</b><br/>Port 8080"]

        subgraph worktrees ["πŸ“ Git Worktrees"]
            wt1["<b>main</b><br/>worktree"]
            wt2["<b>feature-a</b><br/>worktree"]
            wt3["<b>feature-b</b><br/>worktree"]
        end

        subgraph services ["πŸš€ Services"]
            svc1["<b>Port 3000</b><br/>Service"]
            svc2["<b>Port 5000</b><br/>Service"]
            svc3["<b>Port 8000</b><br/>Service"]
        end
    end

    catnip -.->|"πŸš€ Launches"| server
    server -.->|"πŸ“‹ Manages"| wt1
    server -.->|"πŸ“‹ Manages"| wt2
    server -.->|"πŸ“‹ Manages"| wt3
    server -.->|"πŸ”€ Proxies"| svc1
    server -.->|"πŸ”€ Proxies"| svc2
    server -.->|"πŸ”€ Proxies"| svc3

    classDef hostStyle fill:#2563eb,stroke:#1e40af,stroke-width:2px,color:#ffffff
    classDef serverStyle fill:#7c3aed,stroke:#6d28d9,stroke-width:2px,color:#ffffff
    classDef worktreeStyle fill:#2563eb,stroke:#1e40af,stroke-width:2px,color:#ffffff
    classDef serviceStyle fill:#7c3aed,stroke:#6d28d9,stroke-width:2px,color:#ffffff

    class catnip hostStyle
    class server serverStyle
    class wt1,wt2,wt3 worktreeStyle
    class svc1,svc2,svc3 serviceStyle
Loading

catnip is a golang binary with a vite SPA embedded in it. The wandb/catnip container was inspired by the openai/codex-universal container.

It comes pre-configured with node, python, golang, gcc, and rust. You can have the container install a different version of the language on boot by setting any of these environment variables:

# Set specific language versions
CATNIP_NODE_VERSION=20.11.0
CATNIP_PYTHON_VERSION=3.12
CATNIP_RUST_VERSION=1.75.0
CATNIP_GO_VERSION=1.22

Note

In the future we intend to support custom base images.

Environment Setup

Catnip currently looks for a file named setup.sh in the root of your repo and runs it when a workspace is created. This is a great place to run pnpm install or uv sync etc.

Environment variables

catnip run accepts -e arguments. For instance if you want to pass ANTHROPIC_API_KEY from your host into the container you can simply add -e ANTHROPIC_API_KEY and then all terminals and sessions within the container will see that variable. You can also explicitly set variables, -e ANTHROPIC_BASE_URL=https://some.otherprovider.com/v1

SSH

The catnip run command configures SSH within the container by default. It creates a key pair named catnip_remote and configures a catnip host allowing you to run ssh catnip or open a remote development environment via the Remote-SSH extension. You can disable ssh by adding --disable-ssh to the run command.

Docker in Docker

If you want the catnip container to be able to run docker commands, pass the --dind flag to the catnip run command. This mounts the docker socket from the host into the container allowing your terminals and agents to build or run containers.

Git

If you run catnip from within a git repo, we mount the repo into the container and create a default workspace. When you start a claude session in Catnip the system automatically commits changes as claude makes them.

Tip

The workspace within the container is committing to a custom ref refs/catnip/$NAME. For convenience we also create a nicely named branch like feature/make-something-great. This branch is kept in sync with the workspace ref which means you can run git checkout feature/make-something-great outside of the container to see changes locally!

We also run a git server in the container. You will see a Git option in the "Open in..." menu that will provide you with a clone command like:

git clone -o catnip http://localhost:8080/my-sick-repo.git

As you create new workspaces in the container, you can run git fetch catnip back on your host to see your changes outside of the container!

Ports

Catnip forwards ports directly to the host system. When a service starts within the container, Catnip automatically detects and forwards the port, making it accessible at http://localhost:$PORT. Each workspace also has the PORT environment variable set to a known free port. For convenience, services can also be accessed through the Catnip UI proxy at http://localhost:8080/$PORT.

Note

If a port isn't bindable on the host (e.g., already in use), Catnip will automatically find and use the first available port instead. The UI will notify you of the actual port being used.

πŸ—ΊοΈ Roadmap

Coming Soon

  • 🎯 Custom base images
  • πŸ”„ Restore to previous checkpoints
  • πŸ€– Support for more AI coding agents
  • 🌐 Cloud based deployments
  • πŸ”§ Plugin ecosystem

❓ FAQ

How is Catnip different from Jules, Open SWE, or Conductor Catnip is Open Source, built to be extensible, and prioritizes local development first with support for cloud based deployments on the roadmap.
What AI assistants does Catnip support?

Currently optimized for Claude Code, with support for additional AI coding assistants likely coming soon. The architecture is designed to be extensible.

Did you develop Catnip with Catnip? Big time... Inception 🀯

🀝 Contributing

We welcome contributions! Catnip is designed to make agentic programming more powerful and accessible.

  1. 🍴 Fork the repository
  2. 🌿 Run catnip in dev mode catnip run --dev (you must run this from within the catnip repo)
  3. πŸ’» Make your changes
  4. βœ… Add tests if applicable
  5. πŸ“€ Submit a pull request

πŸ“„ License

This project is licensed under the Apache 2.0 - see the LICENSE file for details.


Made with ❀️ by the Weights & Biases team
Star on GitHub

About

Like catnip, a highly addictive agentic coding tool

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •