Paseo Hub

> [!WARNING] > Paseo Hub is in early development. Expect breaking changes and data loss. [Join the Paseo Discord](https://discord.gg/jz8T2uahpH) to learn more about the project. Paseo Hub is the self-hosted automation layer for [Paseo](https://paseo.sh). Connect the services where work arrives, describe environments and agents in `.paseo/hub.yml`, define triggers under `.paseo/workflows/`, and run them on the machines where your development environments already live. - **Your machines:** Hub dispatches to Paseo daemons on your laptop, devbox, or build server. - **Your configuration:** Keep triggers, environments, permissions, and prompts in version control. - **Your services:** Start agents from GitHub, Slack, Discord, or manual runs. - **One audit trail:** See every event, configuration revision, execution, and result. ```text GitHub ─┐ ┌─ laptop Slack ─┼─ Paseo Hub ────┼─ devbox Discord ┘ └─ build server ``` ## Develop locally You need Node.js and npm. A fresh checkout runs with an embedded database and no external services: ```sh npm install npm run dev ``` Open . Hub stores the embedded database and its generated authentication secret in `.dev/paseo-hub` and keeps both across restarts. Set `PASEO_HUB_DATA_DIR` to use a different directory, or set `DATABASE_URL` to use PostgreSQL instead: ```sh DATABASE_URL=postgres://postgres:postgres@localhost:5432/paseo_hub npm run dev ``` Embedded mode supports one Hub process per data directory. Docker Compose continues to run Hub with PostgreSQL. ## Run with Docker Compose You need Docker, Docker Compose, and a public HTTPS URL when connecting external providers. ```sh git clone https://github.com/getpaseo/hub.git cd hub cp .env.example .env ``` Set these values in `.env`: ```dotenv PASEO_HUB_APP_URL=https://hub.example.com PASEO_BOOTSTRAP_ORGANIZATION=My organization PASEO_BOOTSTRAP_OWNER_EMAIL=me@example.com PASEO_BOOTSTRAP_OWNER_PASSWORD=replace-with-a-temporary-password ``` Hub generates and stores its authentication secret in the database. Advanced deployments may set `PASEO_HUB_AUTH_SECRET` to override it without replacing the stored secret. Billing is optional: leave `STRIPE_SECRET_KEY` unset and Hub runs with no billing surface at all. See [docs/billing.md](docs/billing.md). Then start Hub and PostgreSQL: ```sh docker compose up -d ``` Open `PASEO_HUB_APP_URL`, sign in with the bootstrap account, and replace its temporary password. Connect a daemon with: ```sh paseo hub connect https://hub.example.com ``` The image is published as `ghcr.io/getpaseo/hub:latest`. See the [Hub documentation](https://paseo.sh/docs/hub) for provider setup, workflow configuration, Docker, and Fly deployment. ## Provider options and Hub tools Workflow steps may pass a JSON-compatible, provider-native `agent.options` object. Hub preserves the names and nesting exactly; the selected Paseo provider validates and applies them: ```yaml agent: provider: codex model: gpt-5.5 thinkingOptionId: high options: sandbox_workspace_write: writable_roots: - /var/cache/npm network_access: false ``` Options are specific to the selected provider and are not portable. Omit `mode` to inherit the provider or daemon default. Tool preapproval is not configurable in Hub YAML: Hub grants only the execution-scoped MCP tools it materializes (`finish_execution`, plus an allowed output tool such as `reply`). Provider or machine policy still controls every unrelated tool. A read-only provider configuration is defense in depth; Hub output authorization remains enforced by the execution MCP server. ## Public API Each Hub serves a self-hosted API reference at `/api/reference` and its generated OpenAPI 3.1 contract at `/api/openapi.json`. The short [public API guide](docs/public-api.md) covers CLI login, versioning, credential scopes, and request correlation. ## License Apache-2.0