integrations
Manage integrations
Manage integrations
## Usage
```
integrations <subcommand> [args...]
```
## Aliases
int
## Subcommands
### integrations list
List your integrations
**Usage:**
```
integrations list [--json [--usage]]
```
**Options:**
- `--json`: output in JSON format
- `--usage`: include per-VM usage (lastUsedAt, usedByVMs); JSON only
### integrations setup
Set up a service integration
**Usage:**
```
integrations setup <type> [args...]
```
### integrations setup github
Set up GitHub integration
**Usage:**
```
integrations setup github [--list|--verify|-d]
```
**Options:**
- `-d`: disconnect GitHub account
- `--delete`: disconnect GitHub account
- `--list`: list connected GitHub accounts
- `--verify`: verify GitHub connections are working
### integrations setup chatgpt
Set up ChatGPT account access for LLM integrations
**Usage:**
```
integrations setup chatgpt [--name=<account-name>|--list|--verify|-d]
```
**Options:**
- `-d`: disconnect ChatGPT account
- `--delete`: disconnect ChatGPT account
- `--list`: list connected ChatGPT accounts
- `--name`: local ChatGPT account name (default chatgpt)
- `--verify`: verify ChatGPT connections are working
### integrations add
Add a new integration
**Usage:**
```
integrations add <type> --name=<name> [--team] [args...]
```
**Options:**
- `--act-as-user`: authenticate as your GitHub user instead of the exe.dev app (github only); pushes and API calls are attributed to your GitHub account
- `--attach`: attach to a spec (vm:<name>, tag:<name>, or auto:all); can be repeated
- `--bearer`: bearer token (shorthand for --header="Authorization:Bearer TOKEN"; combines with --header)
- `--comment`: optional free-form comment stored with the integration
- `--fields`: comma-separated reflection fields to expose (email, integrations, tags, comment, default_port); 'all' exposes every field including ones added in the future; 'none' disables every field
- `--for`: time-box every --attach to a duration from now (e.g. 2h, 45m); access lapses automatically
- `--header`: header to inject (e.g. X-Auth:secret); can be repeated
- `--name`: integration name (required)
- `--no-auth`: create an http-proxy with no injected authentication
- `--peer`: authenticate with a generated API key scoped to the target VM; combines with --header/--bearer
- `--readonly`: restrict the integration to read access (github only); git push and write API calls are rejected
- `--repository`: GitHub repository in owner/repo format (required for github)
- `--target`: target URL (required for http-proxy)
- `--team`: create as a team integration
### integrations remove
Remove an integration
**Usage:**
```
integrations remove <name> [--team]
```
**Options:**
- `--team`: operate on a team integration
### integrations test
Test an integration's credential (connection check)
**Usage:**
```
integrations test <name> [--team]
```
**Options:**
- `--team`: operate on a team integration
### integrations edit
Edit an integration
**Usage:**
```
integrations edit <name> [--team] [args...]
```
**Options:**
- `--act-as-user`: authenticate as your GitHub user instead of the exe.dev app (github only)
- `--bearer`: bearer token (shorthand for --header="Authorization:Bearer TOKEN"; combines with --header)
- `--clear-header`: remove injected headers for http-proxy
- `--comment`: free-form comment stored with the integration
- `--fields`: comma-separated reflection fields to expose (email, integrations, tags, comment, default_port); 'all' exposes every field including ones added in the future; 'none' disables every field
- `--header`: header to inject for http-proxy; can be repeated; replaces all existing headers
- `--no-auth`: remove injected authentication for http-proxy
- `--readonly`: restrict the integration to read access (github only)
- `--repository`: GitHub repository in owner/repo format
- `--target`: target URL for http-proxy
- `--team`: edit a team integration
- `--webhook-url`: replacement Discord webhook URL
### integrations attach
Attach an integration to a VM, tag, or all VMs
A <spec> controls where the integration is mounted:
vm:<vm-name> attach to a specific VM (personal only)
tag:<tag-name> attach to every VM with the given tag
auto:all attach to all current and future VMs (personal only)
You can attach the same integration multiple times with different specs.
Team integrations only support tag:<tag-name>.
A grant can be time-boxed with --for <duration> or --until <RFC3339>;
when it lapses, access stops immediately, with nothing to revoke.
Re-attaching the same spec with a new --for/--until extends or shortens it.
**Usage:**
```
integrations attach <name> <spec> [--team] [--for <duration> | --until <time>]
```
**Options:**
- `--for`: time-box the attachment to a duration from now (e.g. 2h, 45m); access lapses automatically
- `--team`: operate on a team integration
- `--until`: time-box the attachment until an RFC3339 instant (e.g. 2026-08-03T20:00:00Z)
**Examples:**
```
int attach my-mcp vm:dev1
int attach my-mcp tag:production
int attach my-mcp auto:all
int attach shared-mcp tag:production
int attach gmail vm:dev1 --for 2h
```
### integrations detach
Detach an integration from a VM, tag, or all VMs
**Usage:**
```
integrations detach <name> <spec> [--team]
```
**Options:**
- `--team`: operate on a team integration
### integrations rename
Rename an integration
**Usage:**
```
integrations rename <name> <new-name> [--team]
```
**Options:**
- `--team`: operate on a team integration
### integrations catalog
Browse the catalog of ready-made service integrations
**Usage:**
```
integrations catalog [service-or-search-term]
```
**Examples:**
```
int catalog
int catalog stripe
```