Cofounder CLI

Managed Setup

One managed run provisions the company's baseline resources; then inspect what it created and what's still missing.

Managed setup is the fast path to a working company: one run provisions the baseline — repository, deploy target, database, email, billing, and a managed Meta ads account (see Ads) — then reports what succeeded and what's still waiting on you.

Start a run

MCPCLIAPI
company_setup_startcofounder company setup, cofounder company setup startPOST /cofounder-cli/v1/company/setup
company_setup_start_profilecofounder company setup start-profile --profile managed-app-v1 --required-capability company-emailPOST /cofounder-cli/v1/company/setup/profile
company_setup_getcofounder company setup status, cofounder company setup getGET /cofounder-cli/v1/company/setup
company_setup_retrycofounder company setup retry <run-id>POST /cofounder-cli/v1/company/setup/{run_id}/retry
company_statuscofounder company statusGET /cofounder-cli/v1/company/status
cofounder company setup
cofounder company setup status

Setup creates real accounts and projects (GitHub, Vercel, and the rest), so start it only when the founder asks. It runs in the background: the command returns right away, and setup status shows each step until the run finishes. company status is the one-line version. Use setup start-profile instead when your app needs specific capabilities, such as a company inbox (--required-capability company-email).

Automatic Mailtrap sender provisioning and Supabase Auth email setup are temporarily paused during onboarding. New runs and resumed pending steps skip this work and report it as not_applicable in setup status. Configure app email separately with the email tools. Existing email configurations stay in place; successful setup does not confirm delivery to an inbox.

If a step fails on something transient, don't restart. Grab the failed run's run_id from setup status and pass it to retry, which picks up from the failed step.

Phone is the one baseline resource that's opt-in: on the CLI, pass --phone to provision the company's number in the same command (--country and --area-code pick it). The request fires right after the setup run starts (it's not a step inside the run), so if it fails, retry it directly with cofounder phone provision rather than setup retry. On MCP it's always a separate phone_provision call.

To watch the run live:

cofounder watch company

Inspect what you got

See Company resources for what Cofounder tracks.

Every managed resource (the repo binding, the database, the inbox, the phone number) shows up as a company resource with a state, so listing them tells you what's live and what's missing:

MCPCLIAPI
resources_listcofounder company resources list, cofounder resources listGET /cofounder-cli/v1/company/resources
resources_getcofounder resources get --resource-id <id>GET /cofounder-cli/v1/company/resources/{resource_id}

Copy the resource_id exactly as the list prints it; connected resources carry composite ids like connected:github, not just UUIDs.

On the CLI there's a shortcut: cofounder company resources show <primitive> inspects by resource type (resources show code for the repository) and prompts when several match. The primitives are the ones resources list prints.

A resource that failed to provision shows up as a gap rather than silently missing. Its detail view explains why, and billing failures point you at cofounder company billing resources retry --binding-id <id>.

Choose between resources of the same type

A company can have more than one resource of a type, such as two inboxes. Mark one as the default and commands that need that type use it without asking:

MCPCLIAPI
resources_default_setcofounder resources default set --resource-id <id> [--scope <scope>]POST /cofounder-cli/v1/company/resources/{resource_id}/default
resources_default_clearcofounder resources default clear --resource-id <id>DELETE /cofounder-cli/v1/company/resources/{resource_id}/default
resources_resolvecofounder resources resolve --resource-type <type>POST /cofounder-cli/v1/company/resources/resolve
resources_renamecofounder resources rename --resource-id <id> --display-name <name>PATCH /cofounder-cli/v1/company/resources/{resource_id}

resources resolve tells you which resource of a type (for example mailbox) a command would use. Pass one selector — a resource_id, key, handle, or display_name, as resources list prints them — else it uses the default, else the only one. If there are several and no default, it lists them so you can pick. company resources show <primitive> <selector> accepts the same set. A social account is the default for its own platform: resources default set picks that platform for you (a --scope must match it, and ads-only accounts can't be defaults); resources list shows each resource's default_scope and the valid_scopes it accepts. Clearing a default doesn't delete the resource, and renaming changes only its display name.

Invite people into resources

Company admins can grant people write access to the managed GitHub repos and admin access to the managed Vercel projects:

MCPCLIAPI
code_access_invitecofounder code access invite --github-username <name>POST /cofounder-cli/v1/settings/repo-import/access-invite
hosting_access_invitecofounder company connections invite vercel --email <email>, cofounder hosting access invite --email <email>POST /cofounder-cli/v1/settings/managed-project-access/vercel-invite
cofounder code access invite --github-username octocat
cofounder company connections invite vercel --email dev@acme.co

GitHub invitations land as repo-collaborator invites; Vercel invitations go by email. The other person accepts to get access on their own account. A repository you imported yourself isn't included. If an invite fails partway, some may already have gone out. Check before sending again.

Next steps

Once the resources exist, Deploy and Operate covers the day-to-day work on them.