The-Vibe-Company/companionPublic

Web & Mobile UI for Claude Code & Codex . Launch sessions, stream responses, approve tools. All from your browser / mobile

AI summary: A web and mobile UI for deploying and managing secure fleets of task-optimized AI agents.

Stars
2.4K
+1 today
Forks
295
Watchers
6
Open issues
45
Open PRs
57
Contributors
~17
Commits
522
Branches
320

TypeScriptMITCreated Feb 7, 2026Last push 2mo agoLatest release v0.2.0+3 stars this week+4 this month

Star history

since Feb 8, 2026
01K2KFeb 2026Apr 2026Jun 2026Aug 2026
2.4K stars as of Aug 7, 2026, tracked back to Feb 8, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulAugMonWedFri2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 13 commits2026-02-08: 7 commits2026-02-09: 21 commits2026-02-10: 46 commits2026-02-11: 30 commits2026-02-12: 26 commits2026-02-13: 51 commits2026-02-14: 9 commits2026-02-15: 11 commits2026-02-16: 17 commits2026-02-17: 2 commits2026-02-18: 21 commits2026-02-19: 34 commits2026-02-20: 9 commits2026-02-21: 3 commits2026-02-22: 3 commits2026-02-23: 1 commit2026-02-24: 8 commits2026-02-25: 4 commits2026-02-26: 17 commits2026-02-27: 5 commits2026-02-28: 15 commits2026-03-01: 5 commits2026-03-02: 0 commits2026-03-03: 7 commits2026-03-04: 7 commits2026-03-05: 2 commits2026-03-06: 5 commits2026-03-07: 0 commits2026-03-08: 2 commits2026-03-09: 1 commit2026-03-10: 9 commits2026-03-11: 3 commits2026-03-12: 7 commits2026-03-13: 12 commits2026-03-14: 18 commits2026-03-15: 33 commits2026-03-16: 5 commits2026-03-17: 11 commits2026-03-18: 10 commits2026-03-19: 1 commit2026-03-20: 0 commits2026-03-21: 1 commit2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 2 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 3 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 1 commit2026-03-31: 0 commits2026-04-01: 6 commits2026-04-02: 2 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 1 commit2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 8 commits2026-06-04: 2 commits2026-06-05: 1 commit2026-06-06: 1 commit2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits
519 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What companion does

Companion provides a comprehensive user interface for launching and managing fleets of specialized AI agents. It bridges the gap between terminal-based AI tools like Claude Code and user-friendly web/mobile experiences. Users can launch agent sessions, stream responses, and approve tool executions directly from their browser or mobile device. It supports deploying agents with isolated roles, tools, and durable memory that can be shared across the fleet. Furthermore, it integrates with Tailscale to expose dashboards and APIs securely without relying on the public internet.

Power users, teams, and agencies who need to manage multiple specialized AI agents securely. It requires basic knowledge of Docker, networking, and agent configuration.

  • Feature: Provides a responsive web and mobile UI for managing AI agent sessions.
  • Feature: Supports secure deployment of agent fleets with isolated environments and tools.
  • Feature: Implements durable memory systems that can be selectively shared between agents.
  • Feature: Integrates with Tailscale for secure, private access to agent dashboards and APIs.
  • Feature: Allows users to stream responses and manually approve tool executions in real-time.

Where teams use it

Personal Agent Management

Allows individuals to run a suite of dedicated agents for research, coding, and operations from a single dashboard.

Client Fleet Deployment

Enables agencies to deploy isolated, client-ready agent environments with controlled access.

Remote Tool Approval

Lets users monitor agent progress and approve sensitive tool calls from their mobile devices.

Secure Local Hosting

Provides a safe way to expose local agent interfaces to team members using Tailscale.

Getting started: git clone https://github.com/The-Vibe-Company/companion.git

README

main branch

Companion

Launch secure fleets of task-optimized AI agents with tools, memory, and private access.

CI Release License

Companion product overview

Companion helps you go from "I need several specialized agents" to a running fleet you can actually use: each agent gets its own role, tools, memory, runtime, and private access.

  • Run a personal fleet for research, writing, coding, ops, and analysis.
  • Deploy a client-ready fleet with isolated environments and controlled access.
  • Give agents durable Granite memory, then share selected memory between agents.
  • Expose dashboards, APIs, and Open WebUI through Tailscale instead of the public internet.

The goal is simple: tomorrow, launching a fleet of useful agents should feel like copying a workspace, editing a few names and secrets, previewing the plan, then deploying.

What You Can Launch

Output What it means in practice
Personal agent fleet A set of named agents for your own workflows: research, content, coding, data, operations
Client fleet A repeatable workspace you can adapt and deploy for a client without rebuilding the ops stack
Specialized agents Each agent can have its own identity, model, dashboard, API server, tools, and vaults
Shared memory layer Granite vaults give agents durable memory and can be shared between selected agents
Private access Agents run in isolated environments and are reachable through Tailscale VPN
Shared chat surface Open WebUI can connect to the enabled Hermes API servers in the fleet
Operational view Outputs, drift reports, graph data, and a local dashboard show what is running

Example Fleets

Fleet Agents you might run
Solo operator Research agent, writing agent, coding agent, ops agent, analyst agent
Client deployment Support agent, knowledge-base agent, reporting agent, workflow automation agent
Internal team Engineering agent, sales enablement agent, finance analyst, customer insight agent

Each fleet is meant to be reproducible: keep the workspace, change the names, providers, secrets, identities, and vault links, then deploy another fleet with the same operating model.

Quickstart

Install the CLI:

curl -fsSL https://raw.githubusercontent.com/The-Vibe-Company/companion/main/install.sh | sh

The installer writes companion to ~/.local/bin by default. Make sure that directory is on your PATH.

Create a demo workspace:

companion init --workspace ./companion-demo

Check the files Companion generated:

companion validate --workspace ./companion-demo

Preview the fleet plan:

companion plan --workspace ./companion-demo

That is the loop: edit TOML, validate, plan, apply when the plan is right.

Deploy For Real

You can validate the workspace shape before deploying, but live provider-backed operations need credentials for the providers you configure.

Create .env next to companion.toml:

FLY_API_TOKEN=
TS_AUTHKEY=
TAILSCALE_API_KEY=
OPENROUTER_API_KEY=
API_SERVER_KEY=
WEBUI_SECRET_KEY=

Then apply the plan:

cd companion-demo
$EDITOR .env
companion apply --workspace .

Secrets are read from .env and then from your shell environment. Shell values win. Companion prints secret names only, never secret values.

Provider-backed commands may read live Fly, Tailscale, or OpenRouter state. apply mutates live resources. Keep one workspace, one .env, and one .companion/state.sqlite as the operating home for a fleet unless you are deliberately migrating.

What Companion Manages

Need Companion gives you
Persistent agents One Fly app, volume, secrets bundle, config render, and rollout per agent
Task specialization Agent-level identity, model, runtime, dashboard, API server, and vault settings
Private networking Tailscale hostnames and device drift checks
Model routing OpenRouter provider refs and optional model catalog validation
Memory Default Granite vaults and cross-agent vault connections
Tools Workspace-defined runtime wiring for Hermes, Granite MCP, Open WebUI, and provider integrations
Chat Shared Open WebUI backed by enabled Hermes API servers
Client deployments Copyable workspaces that can be adapted per client, team, or fleet
Local visibility Outputs, drift reports, graph data, and a small dashboard
Safer ops Deterministic resource addresses, generated artifacts, SQLite evidence, explicit destroy

How It Works

Companion treats a folder as the source of truth:

companion.toml
providers.toml
defaults.toml
webui.toml
dashboard.toml
agents/
  example-agent.toml
vaults/
  shared.toml
identities/
  example-agent/SOUL.md
.env
.companion/
  state.sqlite
  generated/

The TOML files describe desired state: providers, defaults, agents, identities, tools, Granite vaults, secure networking, and Open WebUI. Companion compiles that state into typed resources, compares it with observed provider state, writes generated Fly TOML under .companion/generated/, applies changes idempotently, and records evidence in .companion/state.sqlite.

Companion technical architecture

Workspace Files

The repository root is not a live workspace. Keep real fleet configuration, provider orgs/tailnets, app names, identities, vault links, and .env files under .local/ or outside the repository. Public examples should stay anonymized.

Validate from a workspace:

companion validate --workspace .

companion.toml is the index:

workspace = "example-companion"

[backend.local]
state = ".companion/state.sqlite"

[load]
providers = "providers.toml"
defaults = "defaults.toml"
webui = "webui.toml"
agents = "agents/*.toml"
vaults = "vaults/*.toml"

providers.toml names the provider accounts and the environment variables that hold credentials:

[fly.default]
org = "example-org"
region = "cdg"
token_env = "FLY_API_TOKEN"

[tailscale.default]
tailnet = "example.ts.net"
api_key_env = "TAILSCALE_API_KEY"
auth_key_secret = "TS_AUTHKEY"

[openrouter.default]
base_url = "https://openrouter.ai/api/v1"
api_key_env = "OPENROUTER_API_KEY"

One agent is one small file:

[agent]
id = "example-agent"
runtime = "fly.default"
network = "tailscale.default"
model_provider = "openrouter.default"
lifecycle = "present"
protect = true
fly_app = "example-companion-agent"
tailscale_hostname = "example-agent"
identity = "identities/example-agent/SOUL.md"

[default_vault]
enabled = true
name = "Example Agent"
mcp_role = "write"

Use lifecycle = "absent" to request deletion. Removing TOML alone does not silently destroy protected remote data.

Ready-to-copy examples live in examples/minimal and examples/webui.

Common Workflows

Workflow Command
Validate local workspace files companion validate --workspace .
Validate provider access and OpenRouter models companion validate --providers --workspace .
Preview every resource companion plan --workspace .
Preview one agent or resource companion plan example-agent --workspace .
Apply the current plan companion apply --workspace .
Apply one agent companion apply example-agent --workspace .
Print fleet outputs companion output --workspace .
Read one output companion output open_webui_url --raw --workspace .
Run the status dashboard companion dashboard --addr 127.0.0.1:8787 --workspace .

Plan output is resource-oriented:

+ create fly_app.agent.example-agent example-companion-agent
= no-op fly_volume.agent_data.example-agent vol_xxx
~ update fly_secrets.agent.example-agent API_SERVER_KEY,OPENROUTER_API_KEY
! drift tailscale_device.agent.example-agent missing example-agent
- delete fly_app.agent.old example-companion-old

Dashboard routes:

Route Purpose
/ Live fleet status page (auto-refreshing)
/api/status Status snapshot JSON
/healthz Liveness probe
/agents Agent table
/agents/<id> Agent detail
/graph Vault connection graph
/graph?format=json Graph JSON
/drift Drift report

Deploy Safely

Stable resource addresses make plans readable and repeatable:

fly_app.agent.<id>
fly_volume.agent_data.<id>
fly_secrets.agent.<id>
fly_config.agent.<id>
rollout.agent.<id>
tailscale_device.agent.<id>
granite_vault.default.<id>
openwebui_config.main
fly_app.openwebui.main
fly_volume.openwebui_data.main
fly_secrets.openwebui.main
rollout.openwebui.main
dashboard_config.main
fly_app.dashboard.main
fly_secrets.dashboard.main
rollout.dashboard.main

State is evidence, not desired config:

companion state list --workspace .
companion state show fly_app.agent.example-agent --workspace .
companion state rm fly_app.agent.example-agent --workspace .

Import existing resources before managing them:

companion import fly_app.agent.example-agent example-companion-agent --workspace .
companion import fly_volume.agent_data.example-agent vol_xxx --attrs app=example-companion-agent --workspace .

Destroy is explicit:

companion destroy fly_app.agent.example-agent --confirm example-agent --workspace .

Persistent data requires backup intent:

companion destroy fly_volume.agent_data.example-agent --confirm example-agent --destroy-data --backup-first --workspace .

Missing desired resources become orphans until you import, remove state, set lifecycle = "absent", or run an explicit destroy.

Granite, Identity, And WebUI

Hermes uses SOUL.md as the identity layer. Companion keeps the source file in the workspace and installs it during rollout.

companion identity init example-agent --name "Example Agent" --workspace .
companion identity render example-agent --workspace .

Use companion_soul for fleet-wide identity rules that must be appended to every agent SOUL.md, for example a shared Granite memory policy:

[defaults.companion_soul]
path = "identities/companion-soul.md"

Agents can opt out without changing their own identity file:

[companion_soul]
enabled = false

Every agent can have a default Granite vault:

[default_vault]
enabled = true
name = "Example Agent"
mcp_enabled = true
mcp_role = "write"
sync_serve = true
write_serve = true

Agents can also connect to other Granite vaults with vault_connections. Use mode = "write" for HTTP MCP write access and mode = "sync" for Granite sync remotes.

[[vault_connections]]
name = "shared-vault"
mode = "sync"
role = "write"
host = "shared-vault"
token_secret_name = "GRANITE_SHARED_VAULT_WRITE_TOKEN"
mcp_name = "granite_shared_vault"

Deploy the shared Open WebUI through the same resource engine:

companion apply openwebui --workspace .

If an agent does not set api_server.open_webui_url or api_server.open_webui_host, Companion resolves the current Tailscale DNS name and injects it into OPENAI_API_BASE_URLS.

Status Dashboard

companion dashboard serves a live status view of the whole fleet — one page that shows every agent and the Open WebUI, with health, Tailscale presence, Fly machine state, model, and a drift summary. The UI is embedded in the binary (go:embed), so there is no separate build step. Run it locally against a workspace:

companion dashboard --addr 127.0.0.1:8787 --workspace .

serve is kept as an alias. The page polls /api/status (JSON) on an interval; /healthz is a liveness probe.

You can also deploy it on its own dedicated instance, reachable only over Tailscale, by enabling [dashboard] in the workspace:

[dashboard]
enabled = true
fly_app = "example-companion-dashboard"
tailscale_hostname = "companion-dashboard"
port = 9300
refresh_interval = 30
memory = "256mb"   # smallest Fly machine; the dashboard is stateless
cpus = 1
tailscale_serve = true

companion apply then deploys the dashboard as a tiny, stateless Fly app (smallest machine, no volume, no public Fly HTTP service) that holds read-only Fly/Tailscale tokens as Fly secrets and polls the fleet on a timer. The set of services and URLs it polls is a non-secret topology manifest (.companion/generated/fleet.json) that apply keeps in sync: dashboard_config.main carries the topology fingerprint, so adding or changing an agent and re-applying redeploys the dashboard with the refreshed targets — no manual rebuild. This mirrors how openwebui_config.main keeps Open WebUI's backend URLs current.

The deployed image is built from Dockerfile.dashboard (the companion binary + Tailscale + fleet.json). To run it on your own server instead, git clone the repo and go build ./cmd/companion, then run companion dashboard --manifest <fleet.json> with FLY_API_TOKEN/TAILSCALE_API_KEY in the environment.

Control Plane

The control plane is the mutable, Tailscale-only Companion admin app. It runs companion console on Fly, mounts a persistent /workspace volume, and uses the same workspace/state engine as the local CLI. Bootstrap a new control-plane workspace locally:

companion init --control-plane --workspace ./my-fleet \
  --control-plane-app my-companion-control \
  --control-plane-hostname companion-control \
  --tailnet example.ts.net

The generated TOML stores only secret names such as FLY_API_TOKEN, TAILSCALE_API_KEY, TS_AUTHKEY, and OPENROUTER_API_KEY; set the corresponding values in your shell or .env before deploying. Use --no-deploy to write and register the workspace without creating Fly resources.

The local CLI tracks multiple workspaces in ~/.companion/workspaces.json:

companion workspace list
companion workspace use my-fleet
companion control-plane status
companion control-plane upgrade
companion control-plane export --output ./control-plane-workspace.tgz

control-plane upgrade redeploys the same Fly app from the current checkout while preserving the Fly volume, secrets, and SQLite state.

Development

go test ./...
sh -n install.sh
bash -n install.sh bin/start-on-fly bin/run-hermes-process bin/start-open-webui-on-fly bin/start-dashboard-on-fly bin/start-control-plane-on-fly bin/build-console-ui
go run ./cmd/companion validate --workspace examples/minimal
go run ./cmd/companion plan --workspace examples/minimal

Provider e2e tests use local httptest.Server mocks for Fly, Tailscale, and OpenRouter, plus a fake rollout runner. Do not hit live provider resources from tests unless a future live suite is explicitly gated.

Developer install from source:

go install github.com/The-Vibe-Company/companion/cmd/companion@main

Release Please manages version PRs, changelog updates, tags, and GitHub Releases. Release assets contain a single companion binary for Linux and macOS.

License

Companion is released under the MIT License.

Legacy Note

The previous Companion web UI codebase is archived at archived/legacy-companion/. Companion is now the Go control plane described above.

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

167 total
  1. v0.2.0v0.2.0Jun 3, 2026124 downloads

    ## [0.2.0](https://github.com/The-Vibe-Company/companion/compare/v0.1.0...v0.2.0) (2026-06-03) ### Features * add Linux systemd support for service install/uninstall ([#169](https://github.com/The-Vibe-Company/companion/issues/169)) ([73fb3f7](https://github.com/The-Vibe-Company/companion/commit/73fb3f721efde79fec50f9c74a4f078f821c35d3)) * add MCP server management support ([#198](https://github.com/The-Vibe-Company/companion/issues/198)) ([018cf1f](https://github.com/The-Vibe-Company/companion/commit/018cf1f65ea5e281c19a39367f8cccf14ac56c1f)) * add release-please for automated npm publishing ([#24](https://github.com/The-Vibe-Company/companion/issues/24)) ([93b24ee](https://github.com/The-Vibe-Company/companion/commit/93b24ee4a12b3f32e81f59a348b25e89aaa86dce)) * **agents:** add conversational chat SDK, cloud relay, and runs view ([#471](https://github.com/The-Vibe-Company/companion/issues/471)) ([e8420c8](https://github.com/The-Vibe-Company/companion/commit/e8420c824cc07b8bb374ec15b6b01653e94daef6)) * **agents:** add Linear Agent Interaction SDK integration ([#486](https://github.com/The-Vibe-Company/companion/issues/486)) ([64b838d](https://github.com/The-Vibe-Company/companio

  2. the-companion: v0.95.0the-companion-v0.95.0Apr 1, 2026

    ## [0.95.0](https://github.com/The-Vibe-Company/companion/compare/the-companion-v0.94.0...the-companion-v0.95.0) (2026-04-01) ### Features * **keepalive:** proactive CLI relaunch when frontend is disconnected ([#634](https://github.com/The-Vibe-Company/companion/issues/634)) ([6a0e7c5](https://github.com/The-Vibe-Company/companion/commit/6a0e7c599c1700ca750fee2b6ad93f8aed362e99)) ### Bug Fixes * **workbench:** remove terminal and session extras ([#632](https://github.com/The-Vibe-Company/companion/issues/632)) ([9b5e675](https://github.com/The-Vibe-Company/companion/commit/9b5e67535233acb987f60348a7f3d90d6f76f83c))

  3. the-companion: v0.94.0the-companion-v0.94.0Mar 30, 2026

    ## [0.94.0](https://github.com/The-Vibe-Company/companion/compare/the-companion-v0.93.0...the-companion-v0.94.0) (2026-03-27) ### Features * **settings:** add provider token configuration for Claude Code and Codex ([#623](https://github.com/The-Vibe-Company/companion/issues/623)) ([a555985](https://github.com/The-Vibe-Company/companion/commit/a5559854b55b9605a0203a1ac07a998696487ddf))

  4. the-companion: v0.93.0the-companion-v0.93.0Mar 27, 2026

    ## [0.93.0](https://github.com/The-Vibe-Company/companion/compare/the-companion-v0.92.5...the-companion-v0.93.0) (2026-03-27) ### Features * **claude:** support channels protocol updates ([#613](https://github.com/The-Vibe-Company/companion/issues/613)) ([5baccb1](https://github.com/The-Vibe-Company/companion/commit/5baccb13ba0b87d2dfcaa9e0241951ca9febc684)) * **onboarding:** add provider setup wizard for Claude Code and Codex ([#615](https://github.com/The-Vibe-Company/companion/issues/615)) ([c2f2b55](https://github.com/The-Vibe-Company/companion/commit/c2f2b55118cb576532746cbde87eab4de4b87001)) * **recording-hub:** add hidden recording hub for replay, compat testing, and diagnostics ([#617](https://github.com/The-Vibe-Company/companion/issues/617)) ([6f6d411](https://github.com/The-Vibe-Company/companion/commit/6f6d411cc4e7cb7d16216f179212ef7ea44e4a40)) ### Bug Fixes * **linear:** log webhook acceptance and rejection ([#612](https://github.com/The-Vibe-Company/companion/issues/612)) ([08e495b](https://github.com/The-Vibe-Company/companion/commit/08e495b3ac06323d1113a43328682deedeac373d)) * **sidebar:** reconcile client sessions with server on poll ([#621](https://github.co

  5. the-companion: v0.92.5the-companion-v0.92.5Mar 18, 2026

    ## [0.92.5](https://github.com/The-Vibe-Company/companion/compare/the-companion-v0.92.4...the-companion-v0.92.5) (2026-03-18) ### Code Refactoring * **linear:** separate OAuth Apps from Tickets integration ([#607](https://github.com/The-Vibe-Company/companion/issues/607)) ([6710519](https://github.com/The-Vibe-Company/companion/commit/6710519081bcbde1c785c34075b9a56c5b52d898))

Code frequency

additions and deletions
+220.5K-220.5KWeek of 2026-02-01: +9,603 linesWeek of 2026-02-01: -364 linesWeek of 2026-02-08: +58,260 linesWeek of 2026-02-08: -17,392 linesWeek of 2026-02-15: +31,799 linesWeek of 2026-02-15: -13,012 linesWeek of 2026-02-22: +50,843 linesWeek of 2026-02-22: -3,867 linesWeek of 2026-03-01: +17,727 linesWeek of 2026-03-01: -3,453 linesWeek of 2026-03-08: +52,422 linesWeek of 2026-03-08: -18,624 linesWeek of 2026-03-15: +20,156 linesWeek of 2026-03-15: -4,393 linesWeek of 2026-03-22: +4,541 linesWeek of 2026-03-22: -10 linesWeek of 2026-03-29: +2,142 linesWeek of 2026-03-29: -705 linesWeek of 2026-04-05: +0 linesWeek of 2026-04-05: -0 linesWeek of 2026-04-12: +0 linesWeek of 2026-04-12: -0 linesWeek of 2026-04-19: +0 linesWeek of 2026-04-19: -0 linesWeek of 2026-04-26: +0 linesWeek of 2026-04-26: -0 linesWeek of 2026-05-03: +0 linesWeek of 2026-05-03: -0 linesWeek of 2026-05-10: +0 linesWeek of 2026-05-10: -0 linesWeek of 2026-05-17: +0 linesWeek of 2026-05-17: -0 linesWeek of 2026-05-24: +592 linesWeek of 2026-05-24: -47 linesWeek of 2026-05-31: +220,519 linesWeek of 2026-05-31: -187,551 linesWeek of 2026-06-07: +0 linesWeek of 2026-06-07: -0 linesWeek of 2026-06-14: +0 linesWeek of 2026-06-14: -0 linesWeek of 2026-06-21: +0 linesWeek of 2026-06-21: -0 linesWeek of 2026-06-28: +0 linesWeek of 2026-06-28: -0 linesWeek of 2026-07-05: +0 linesWeek of 2026-07-05: -0 linesWeek of 2026-07-12: +0 linesWeek of 2026-07-12: -0 linesWeek of 2026-07-19: +0 linesWeek of 2026-07-19: -0 linesWeek of 2026-07-26: +0 linesWeek of 2026-07-26: -0 linesWeek of 2026-08-02: +0 linesWeek of 2026-08-02: -0 linesFeb 1, 2026Aug 2, 2026
+468.6K lines added, -249.4K removed over the last year.

Commits per week

last 52 weeks
1900Week of 2025-08-09: 0 commitsWeek of 2025-08-16: 0 commitsWeek of 2025-08-23: 0 commitsWeek of 2025-08-30: 0 commitsWeek of 2025-09-06: 0 commitsWeek of 2025-09-13: 0 commitsWeek of 2025-09-20: 0 commitsWeek of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 13 commitsWeek of 2026-02-08: 190 commitsWeek of 2026-02-15: 97 commitsWeek of 2026-02-22: 53 commitsWeek of 2026-03-01: 26 commitsWeek of 2026-03-08: 52 commitsWeek of 2026-03-15: 61 commitsWeek of 2026-03-22: 5 commitsWeek of 2026-03-29: 9 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 1 commitsWeek of 2026-05-31: 12 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 0 commitsAug 9, 2025Aug 2, 2026
519 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 1 commitsSun 8:00 — 6 commitsSun 9:00 — 1 commitsSun 10:00 — 2 commitsSun 11:00 — 5 commitsSun 12:00 — 5 commitsSun 13:00 — 3 commitsSun 14:00 — 0 commitsSun 15:00 — 6 commitsSun 16:00 — 3 commitsSun 17:00 — 3 commitsSun 18:00 — 5 commitsSun 19:00 — 0 commitsSun 20:00 — 10 commitsSun 21:00 — 8 commitsSun 22:00 — 1 commitsSun 23:00 — 2 commitsMon 0:00 — 5 commitsMon 1:00 — 2 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 1 commitsMon 7:00 — 0 commitsMon 8:00 — 2 commitsMon 9:00 — 1 commitsMon 10:00 — 0 commitsMon 11:00 — 0 commitsMon 12:00 — 0 commitsMon 13:00 — 0 commitsMon 14:00 — 0 commitsMon 15:00 — 0 commitsMon 16:00 — 1 commitsMon 17:00 — 0 commitsMon 18:00 — 3 commitsMon 19:00 — 3 commitsMon 20:00 — 2 commitsMon 21:00 — 1 commitsMon 22:00 — 18 commitsMon 23:00 — 8 commitsTue 0:00 — 2 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 4 commitsTue 8:00 — 4 commitsTue 9:00 — 14 commitsTue 10:00 — 2 commitsTue 11:00 — 1 commitsTue 12:00 — 6 commitsTue 13:00 — 8 commitsTue 14:00 — 6 commitsTue 15:00 — 5 commitsTue 16:00 — 3 commitsTue 17:00 — 1 commitsTue 18:00 — 7 commitsTue 19:00 — 5 commitsTue 20:00 — 6 commitsTue 21:00 — 5 commitsTue 22:00 — 4 commitsTue 23:00 — 3 commitsWed 0:00 — 0 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 2 commitsWed 8:00 — 2 commitsWed 9:00 — 1 commitsWed 10:00 — 5 commitsWed 11:00 — 4 commitsWed 12:00 — 3 commitsWed 13:00 — 0 commitsWed 14:00 — 7 commitsWed 15:00 — 4 commitsWed 16:00 — 6 commitsWed 17:00 — 10 commitsWed 18:00 — 2 commitsWed 19:00 — 3 commitsWed 20:00 — 9 commitsWed 21:00 — 20 commitsWed 22:00 — 6 commitsWed 23:00 — 5 commitsThu 0:00 — 0 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 2 commitsThu 7:00 — 0 commitsThu 8:00 — 1 commitsThu 9:00 — 1 commitsThu 10:00 — 1 commitsThu 11:00 — 3 commitsThu 12:00 — 5 commitsThu 13:00 — 4 commitsThu 14:00 — 4 commitsThu 15:00 — 3 commitsThu 16:00 — 4 commitsThu 17:00 — 3 commitsThu 18:00 — 1 commitsThu 19:00 — 1 commitsThu 20:00 — 13 commitsThu 21:00 — 15 commitsThu 22:00 — 7 commitsThu 23:00 — 24 commitsFri 0:00 — 1 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 2 commitsFri 8:00 — 2 commitsFri 9:00 — 9 commitsFri 10:00 — 3 commitsFri 11:00 — 2 commitsFri 12:00 — 4 commitsFri 13:00 — 1 commitsFri 14:00 — 5 commitsFri 15:00 — 7 commitsFri 16:00 — 14 commitsFri 17:00 — 6 commitsFri 18:00 — 2 commitsFri 19:00 — 2 commitsFri 20:00 — 9 commitsFri 21:00 — 9 commitsFri 22:00 — 6 commitsFri 23:00 — 2 commitsSat 0:00 — 0 commitsSat 1:00 — 0 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 1 commitsSat 8:00 — 7 commitsSat 9:00 — 5 commitsSat 10:00 — 8 commitsSat 11:00 — 4 commitsSat 12:00 — 0 commitsSat 13:00 — 1 commitsSat 14:00 — 1 commitsSat 15:00 — 4 commitsSat 16:00 — 1 commitsSat 17:00 — 2 commitsSat 18:00 — 4 commitsSat 19:00 — 8 commitsSat 20:00 — 8 commitsSat 21:00 — 5 commitsSat 22:00 — 0 commitsSat 23:00 — 1 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Feb 10, 2026daily#6+270
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    453.6K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    385.5K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • anomalyco/opencode

    The open source coding agent.

    194.7K stars · TypeScript