CompanyHelm - Distributed Coding Agent Orchestrator
June 5, 2026 · View on GitHub
CompanyHelm is an open-source control plane for running AI coding agent in dedicated environments. Each agent session is completely isolated and allows to run coding tasks in a distributed fashion. Agents are model agnostic and multiple company-provided model providers are supported (OpenAI, Anthropic, Google, OpenRouter, OpenAI-compatible APIs, and OpenAI Codex OAuth). Agents can be customized with MCP, Skills and custom instructions.
A few things it can do today:
- Isolation: every agent session runs in a fresh E2B VM
- E2E testing: agents can spin up your app and run end-to-end tests in isolation
- Feature videos: agents can generate demo videos for new features and attach them to PRs
- Live demos: you can open a remote desktop and interact with the feature before merging
- Multi-repo workflows: agents can operate across multiple repos in the same session
- Collaboration: you can invite other users into the same company workspace
CompanyHelm Cloud (Free) · Discord
Monorepo with:
apps/api: API/server app published internally as the@companyhelm/serverworkspace packageapps/web: Web apppackages/runner: standalone runner CLI package published as@companyhelm/runner
Toolchain
Use the exact local toolchain versions below to avoid lockfile drift and inconsistent installs:
- Node.js
20.20.0 - npm
11.6.2
If you use nvm:
nvm install
nvm use
npm install -g npm@11.6.2
Requirements
- Node.js
20.20.0 - npm
11.6.2 - Docker with Docker Compose
Local quick start
- Install the correct Node.js version and npm version.
nvm install
nvm use
npm install -g npm@11.6.2
- Copy the web app example environment file.
cp apps/web/.env.example apps/web/.env.local
Copy apps/api/.env.example to apps/api/.env.local, then fill in the required GitHub App, Exa,
E2B, local-auth, and encryption-related values before starting npm run dev:api.
apps/api/config/local.yaml reads those values directly from the environment.
- Install dependencies.
npm install
- Start Postgres, Redis, and pgAdmin.
npm run db:up
- Start the API.
npm run dev:api
- Start the web app in a second terminal.
npm run dev:web
Local URLs
- Web app:
http://localhost:5173 - Web health:
http://localhost:5173/health - API GraphQL:
http://localhost:4000/graphql - API health:
http://localhost:4000/health - pgAdmin:
http://localhost:15050 - Redis:
localhost:16379
Local development defaults to HTTP for both the web app and API. Keep VITE_GRAPHQL_URL pointed at
http://localhost:4000/graphql unless you also choose to proxy the API over HTTPS locally.
Environment variables
apps/web/.env.example contains the Vite variables used by local web development.
A few notes:
- Copy it to
apps/web/.env.localso Vite picks it up automatically. apps/api/config/local.yamluses local auth by default and reads GitHub App, Exa, and E2B values from environment variables.- The placeholder values in
apps/web/.env.exampleare enough to boot the web shell locally. - Self-hosters must configure their own GitHub App before using GitHub install flows.
- Replace the placeholders with real secrets before using GitHub install flows, model provider credentials, or CompanyHelm-backed compute.
Web runtime config
Local Vite development uses VITE_AUTH_PROVIDER=local and VITE_GRAPHQL_URL from your local
environment by default. Set VITE_TERMS_OF_SERVICE_URL and VITE_PRIVACY_POLICY_URL when you need
the local app to show deployment-specific legal links.
Common commands
Development
Start both apps with Turbo:
npm run dev
Run the standalone runner CLI during development:
npm run dev:runner -- status
Databases
Start local services:
npm run db:up
Stop local services:
npm run db:down
Reset local services and volumes:
npm run db:reset
Run database migrations:
npm run db:migrate
Generate Drizzle files:
npm run db:generate
Before committing
Run everything you need before committing:
npm run test:all
That command runs the API and web checks, and it also runs the API test suite. It also runs the web tests plus the runner CLI checks and tests.
Publishing npm packages
The public npm packages are published by GitHub Actions from release tags or by manually running
the Publish npm packages workflow:
@companyhelm/runnerfrompackages/runner
The workflow skips a package version when that exact version already exists in the npm registry.
Publishing requires either npm trusted publishing for this repository or an NPM_TOKEN secret
scoped to the protected npm-publish GitHub environment with permission to publish the runner package. Because npm trusted publishers can only
be configured for packages that already exist in npm, the first publish of any future brand-new
package must use NPM_TOKEN or another manual bootstrap publish. After that first publish, trusted
publishing can be configured in npm and used by this workflow.
The workflow is split into a verification job and a protected npm-publish environment job. The
publish job receives only the already-packed package tarballs and is the only job with npm OIDC
permission. Tag-triggered publishes must use vMAJOR.MINOR.PATCH tags whose commits are contained
in origin/main; manual dispatch must run from main.