
Run your coding agent in the cloud. GitTerm runs Opencode in remote workspaces on the cloud provider or sandbox of your choice, so you can code from any device with your own model keys.
The fastest way to self-host:
ADMIN_EMAIL and ADMIN_PASSWORD.proxy service a wildcard domain like *.your-domain.com.Required services:
| Service | Purpose |
|---|---|
| PostgreSQL | Database |
| Redis | Cache and pub/sub |
| server | Main API |
| web | Dashboard and auth UI |
| proxy | Caddy reverse proxy |
| listener | Webhook and event ingress |
| worker | Background jobs |
Worker cron jobs:
| Worker | Schedule | Purpose |
|---|---|---|
idle-reaper |
*/10 * * * * |
Stops idle workspaces and enforces quotas |
daily-reset |
0 0 * * * |
Logs daily usage stats once per day |
Caddy can route workspaces either by path or subdomain:
https://your-domain.com/ws/{workspace-subdomain}/
https://{workspace-subdomain}.your-domain.com
https://{port}-{workspace-subdomain}.your-domain.com
Use path routing when you do not control wildcard DNS. Use subdomain routing for apps that rely on relative asset paths.
Open a port on a running workspace to get a live, shareable URL like https://{port}-{workspace-subdomain}.your-domain.com. This is handy for previewing a dev server or sharing a running app while an agent works on it.
GitTerm can run workspaces on any of these providers. Configure each one in the admin panel before users create workspaces. Click a provider for its full setup guide.
| Provider | Type | Webhook | Setup guide |
|---|---|---|---|
| Railway | Compute | Yes | Guide |
| AWS | Compute | No | Guide |
| E2B | Sandbox | Yes | Guide |
| Daytona | Sandbox | No | Guide |
| Cloudflare Sandbox | Sandbox | No | Guide |
Field definitions for every provider live in packages/schema/src/provider-registry.ts.
Providers that use webhooks send events to the GitTerm listener. The endpoint depends on how you expose GitTerm:
https://<your-base-domain>/listener/trpc/...https://<listener-base-url>/trpc/...If your listener service is not public, use the proxy form. Exact endpoints are in each provider guide.
GitHub integration is optional. It allows users to connect repositories and perform git actions from their workspaces.
Set these env vars on the server service:
GITHUB_APP_IDGITHUB_APP_PRIVATE_KEYGITHUB_APP_CLIENT_ID (for login with the same GitHub App)GITHUB_APP_CLIENT_SECRET (for login with the same GitHub App)Set GITHUB_APP_ID and GITHUB_APP_PRIVATE_KEY together for repo integration. Set
GITHUB_APP_CLIENT_ID and GITHUB_APP_CLIENT_SECRET if GitHub login is enabled.
A separate GitHub OAuth App is not required.
GitHub App setup:
https://<base-domain>/api/auth/callback/githubhttps://<api-url>/api/github/callbackhttps://<your-base-domain>/listener/trpc/github.handleInstallationWebhookhttps://<listener-base-url>/trpc/github.handleInstallationWebhookSee CONTRIBUTING.md for local setup and service URLs.
Common commands:
bun run dev
bun run build
bun run check-types
bun run db:push
bun run db:studio
bun run db:generate
bun run db:migrate
MIT. See LICENSE.
GitTerm is an independent project and is not affiliated with, endorsed by, or sponsored by Opencode or its maintainers. "Opencode" and any related names or marks belong to their respective owners.
$ claude mcp add gitterm \
-- python -m otcore.mcp_server <graph>