{"id":40909542,"url":"https://github.com/envhaven/envhaven","last_synced_at":"2026-05-05T07:02:51.964Z","repository":{"id":333209552,"uuid":"1117196661","full_name":"envhaven/envhaven","owner":"envhaven","description":"Batteries-included development environment for agentic workflows.","archived":false,"fork":false,"pushed_at":"2026-01-31T02:10:02.000Z","size":842,"stargazers_count":12,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-31T14:35:11.935Z","etag":null,"topics":["claude-code","cli","codex","docker","gemini","opencode"],"latest_commit_sha":null,"homepage":"https://envhaven.com","language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/envhaven.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-16T01:10:28.000Z","updated_at":"2026-01-31T02:07:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"0da89f6e-db07-4834-8c6d-a5b9774a0ad4","html_url":"https://github.com/envhaven/envhaven","commit_stats":null,"previous_names":["envhaven/envhaven"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/envhaven/envhaven","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envhaven%2Fenvhaven","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envhaven%2Fenvhaven/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envhaven%2Fenvhaven/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envhaven%2Fenvhaven/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/envhaven","download_url":"https://codeload.github.com/envhaven/envhaven/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envhaven%2Fenvhaven/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29287135,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T21:57:15.303Z","status":"ssl_error","status_checked_at":"2026-02-09T21:57:11.537Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","cli","codex","docker","gemini","opencode"],"created_at":"2026-01-22T03:01:00.664Z","updated_at":"2026-05-05T07:02:51.956Z","avatar_url":"https://github.com/envhaven.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\".github/logo-white.svg\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\".github/logo.svg\"\u003e\n    \u003cimg alt=\"EnvHaven\" src=\".github/logo.svg\" width=\"80\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eEnvHaven\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eBatteries-included development environment for agentic workflows.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/envhaven/envhaven/actions\"\u003e\u003cimg src=\"https://github.com/envhaven/envhaven/actions/workflows/docker.yml/badge.svg\" alt=\"Build\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/product-overview.gif\" alt=\"EnvHaven product overview\" width=\"640\"\u003e\n\u003c/p\u003e\n\nAs tools like Claude Code, OpenCode and Codex gain agency, they need full system access to be effective. Running them locally carries risk (`rm -rf` accidents, credential leaks) and friction (installing runtimes, approving every action).\n\nEnvHaven is an isolated, remote environment with every major AI coding tool built-in. The container provides the isolation, so all agents ship with full access by default. No approval prompts, no confirmation dialogs. Your local machine stays untouched.\n\n**Workflow Freedom:**\n- **Browser-only** — Deploy the image, open VS Code in your browser, run `opencode`. Zero setup.\n- **Local editor + remote AI** — Use the Haven CLI to sync your project. Edit in Neovim, Zed, Jetbrains, et al. while agents run in the container. Changes sync in ~200ms.\n\n---\n\n## Why EnvHaven\n\n🛡️ **Zero-Risk AI environment**\nGive autonomous agents full access in a containerized environment. If they break something, nuke the workspace and start over. Your local machine stays untouched.\n\n🖥️ **Pick Up Where You Left Off**\nStart Claude Code on your laptop, close the lid, resume from your desktop—same session, same state. Your AI agents and dev servers keep running while you're away. Come back from any device.\n\n🌲 **Evergreen AI Tooling**\nThe landscape moves too fast to manage manually. EnvHaven ships with 12+ AI CLI tools (Claude Code, OpenCode, Aider, Codex, Gemini CLI, Goose, Mistral Vibe, etc.) built-in and ready to run.\n\n🌐 **Instant Public URLs** *(Managed only)*\nEvery managed workspace gets a wildcard `*.envhaven.app` domain. Deploy a web app, webhook receiver, or Discord bot—live instantly. No ngrok, no tunnels, no DNS.\n\n💾 **Persistent \u0026 Owned**\nUnlike ephemeral environments (Codespaces) or walled gardens (Replit), EnvHaven workspaces are persistent Linux environments you own.\n\n⚡ **Open Model**\n- **Self-Hosted**: Free forever, open-source Docker image and CLI. Run it on your own server.\n- **Managed** ($10/mo): Zero-config hosting with custom domains, always-on workspaces, and no DevOps.\n\n---\n\n## Who It's For\n\n| Persona | Use Case |\n|---------|----------|\n| **Vibe Coders** | That ship by prompting their way to products. Need a \"magic box\" where code just runs, already fully setup. |\n| **AI-Native Devs** | Power users of agentic coding tools like Claude Code or OpenCode that want a standardized, pre-configured backend for their agents. |\n| **Setup Purists** | Developers married to their beautifully tuned and customized editor. Use Haven CLI to keep your workflow while agents run wild in a contained environment.  |\n| **Bot Builders** | Those who vibe-code 24/7 persistent scripts (Discord, Telegram or even trading bots). |\n\n## Quick Start\n\n### Path A: Browser-Only (Zero Setup)\nDeploy the image and code immediately in the browser.\n\n```bash\ndocker run -d \\\n  --name envhaven \\\n  -p 8443:8443 \\\n  -p 2222:22 \\\n  -e PASSWORD=password \\\n  -e SUDO_PASSWORD=password \\\n  ghcr.io/envhaven/envhaven:latest\n```\n\n1. Open `https://localhost:8443` (Password: `password`)\n2. Open terminal—you're dropped into a persistent session\n3. Run `opencode`, `claude`, or `aider` and start coding\n\n**Multiple AI tools at once?** Click `+` in the footer or use the sidebar to create new terminals. Each runs in its own persistent session—close your browser and they keep running.\n\n### Path B: Local Editor + Remote AI (Haven CLI)\nUse your local editor. Files sync bidirectionally. Agents run in the container.\n\n**1. Install Haven CLI**\n```bash\ncurl -fsSL https://envhaven.com/install.sh | sh\n```\n\n**2. Connect to your workspace**\n```bash\ncd my-project\n\n# Managed workspace (shorthand)\nhaven connect . myproject-alice\n\n# Self-hosted container\nhaven connect . abc@your-server.com:2222\n```\n*Files sync in ~200ms.*\n\n**3. Run remote commands**\n```bash\nhaven opencode     # Runs OpenCode in the container\nhaven make build   # Runs make in the container\nhaven npm install  # Runs npm in the container\n```\n\n\u003e **Self-hosted?** You'll need to configure SSH keys first. See [SSH Access](#ssh-access).\n\n## What's Included\n\nThe image (`ghcr.io/envhaven/envhaven`) comes batteries-included.\n\n### AI Coding Agents\nNo API keys are pre-set. You can set them directly in the UI via the bundled EnvHaven Extension in code-server.\n\nYou can also provide your own keys via env vars (`-e ANTHROPIC_API_KEY=...`) or config files.\n\n| Tool | Command | Description |\n|------|---------|-------------|\n| **OpenCode** | `opencode` | SST's autonomous coding agent |\n| **Claude Code** | `claude` | Anthropic's official CLI |\n| **Aider** | `aider` | AI pair programming |\n| **Codex** | `codex` | OpenAI's coding agent |\n| **Gemini CLI** | `gemini` | Google's AI in terminal |\n| **Goose** | `goose` | Block's developer agent |\n| **Mistral Vibe** | `vibe` | Powered by Devstral |\n| **Qwen Code** | `qwen` | Alibaba's coding assistant |\n| **Amp** | `amp` | Sourcegraph's coding agent |\n| **Augment** | `auggie` | Context-aware coding agent |\n| **Kiro** | `kiro-cli` | AWS-powered AI CLI |\n| **Factory Droid** | `droid` | Factory's AI agent |\n\n### Zero-Friction Permissions\n\nEnvHaven workspaces are structurally isolated. The container provides the isolation, so all agents are pre-configured with full access by default. No approval prompts, no confirmation dialogs. Agents execute immediately.\n\nYou can re-enable prompts per tool by editing the relevant config or unsetting the env var. See the in-workspace `AGENTS.md` for details.\n\n### Runtimes \u0026 SDKs\n| Language | Version | Notes |\n|----------|---------|-------|\n| **Node.js** | 20.x | LTS |\n| **Bun** | Latest | Fast JS runtime |\n| **Python** | 3.12 | Managed via `uv` |\n| **Go** | 1.22 | |\n| **Rust** | Stable | Via rustup |\n\n### Dev Tools\n- **Core:** `zsh`, `git`, `curl`, `wget`, `zip`, `unzip`\n- **Utils:** `ripgrep`, `fd`, `jq`, `sqlite3`, `htop`\n- **Media:** `ffmpeg` (video/audio), `playwright` (browser automation)\n- **Integrations:** `gh` (GitHub CLI), `docker` (client)\n\n## Haven CLI Architecture\n\nThe CLI enables a hybrid workflow: **Local Editor + Remote Compute**.\n\n- **Latency:** ~200ms bidirectional sync.\n- **Compatibility:** Works with any editor.\n- **Independence:** The sync daemon runs in the background; close the CLI and sync continues.\n\n```\n┌────────────────────────────────────────────────────────────────────────┐\n│                            YOUR MACHINE                                │\n│                                                                        │\n│  ┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐   │\n│  │  Local Editors  │     │    Haven CLI    │     │  Local Builds   │   │\n│  │                 │     │                 │     │                 │   │\n│  │  vim            │     │  haven connect  │     │  binaries       │   │\n│  │  vscode         │     │  haven status   │     │  native apps    │   │\n│  │  zed            │     │  haven \u003ccmd\u003e    │     │  certs+signing  │   │\n│  │                 │     │                 │     │                 │   │\n│  └────────┬────────┘     └────────┬────────┘     └────────┬────────┘   │\n│           │                       │                       │            │\n│           ▼                       ▼                       ▼            │\n│  ┌──────────────────────────────────────────────────────────────────┐  │\n│  │                    ~/projects/myapp/                             │  │\n│  └──────────────────────────────────────────────────────────────────┘  │\n│                                   ▲                                    │\n└───────────────────────────────────┼────────────────────────────────────┘\n                                    │\n                           Files sync in ~200ms\n                        via SSH + Mutagen Protocol\n                                    │\n┌───────────────────────────────────┼────────────────────────────────────┐\n│                                   ▼                                    │\n│  ┌──────────────────────────────────────────────────────────────────┐  │\n│  │                    /config/workspace/myapp/                      │  │\n│  └──────────────────────────────────────────────────────────────────┘  │\n│           ▲                       ▲                       ▲            │\n│           │                       │                       │            │\n│  ┌────────┴────────┐     ┌────────┴────────┐     ┌────────┴────────┐   │\n│  │  Claude Code    │     │    OpenCode     │     │     aider       │   │\n│  │  Long-running   │     │  Long-running   │     │  Task-based     │   │\n│  │  AI sessions    │     │  AI sessions    │     │  AI sessions    │   │\n│  └─────────────────┘     └─────────────────┘     └─────────────────┘   │\n│                                                                        │\n│                          ENVHAVEN CONTAINER                            │\n└────────────────────────────────────────────────────────────────────────┘\n```\n\n**Why this matters:**\n- **AI agents need contained compute:** They require massive context windows, long-running processes, specific toolchains, and might do dangerous stuff some time.\n- **You need your editor:** You rely on your custom keybindings, themes, and muscle memory.\n- **Flexibility:** Both workflows work independently or together.\n\n## Docker Compose\n\nFor persistent deployments, use `docker-compose.yml` with `.env`:\n\n```bash\ncp .env.example .env    # Copy and edit with your passwords/API keys\ndocker compose up -d\n```\n\nOr use inline environment variables for quick testing:\n\n```yaml\nservices:\n  envhaven:\n    image: ghcr.io/envhaven/envhaven:latest\n    container_name: envhaven\n    environment:\n      - PUID=1000\n      - PGID=1000\n      - TZ=Etc/UTC\n      - PASSWORD=password        # Web UI password\n      - SUDO_PASSWORD=password   # sudo/SSH password\n    volumes:\n      - ./config:/config         # Persist home directory\n    ports:\n      - 8443:8443               # Web UI\n      - 2222:22                 # SSH Access\n    restart: unless-stopped\n```\n\nSee [Configuration Reference](docs/configuration.md) for all options including AI API keys and SSH setup.\n\n## SSH Access\n\nSSH enables the Haven CLI and direct terminal access.\n\n| Setup | SSH Host | Haven CLI |\n|-------|----------|-----------|\n| **Managed** | `ssh-{subdomain}.envhaven.app` | `haven connect . myproject-alice` |\n| **Self-hosted** | `your-server:2222` | `haven connect . abc@your-server:2222` |\n\n**Self-hosted setup:** Import your GitHub keys automatically:\n\n```yaml\nenvironment:\n  - PUBLIC_KEY_URL=https://github.com/yourusername.keys\nports:\n  - \"2222:22\"\n```\n\nSee [Configuration Reference](docs/configuration.md) for all SSH options.\n\n## Documentation\n\n- **[AI Tools Guide](docs/ai-tools.md)** — Setup guides, API keys, and usage examples for all 12+ AI coding tools\n- **[Configuration Reference](docs/configuration.md)** — Complete env vars, SSH setup, Docker mods, and compose examples\n- **[Development Guide](docs/development.md)** — Building from source, testing, and contributing\n- **[Haven CLI](cli/README.md)** — CLI source and architecture\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenvhaven%2Fenvhaven","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenvhaven%2Fenvhaven","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenvhaven%2Fenvhaven/lists"}