Skip to content

feat(cli): Add root-level composio connections command for consumer namespace #3187

@ja-818

Description

@ja-818

Problem

The CLI has no consumer-namespace commands for two fundamental operations:

  1. List connected appscomposio dev connected-accounts list is developer-project-scoped and doesn't see consumer/"for you" connections
  2. List all available appscomposio dev toolkits list requires composio dev init and developer project setup; there's no root-level catalog command

Real-world impact

We're building Houston, a desktop app that uses Composio for integrations. Our Integrations tab needs to show: (a) which apps the user is connected to, and (b) the full catalog of available apps. Without consumer-level commands, we resort to:

For connection status — probing each app individually via an SSRF side-channel:

// Abuse the SSRF guard in `composio proxy` to detect connections
composio proxy https://invalid.invalid/ --toolkit gmail
// "ToolRouterV2_NoActiveConnection" → not connected
// "ExternalProxy_SSRFBlocked" → connected

We run this 45 times in parallel (one subprocess per app). ~5 seconds latency.

For the app catalog — scraping composio.dev/toolkits HTML to extract initialToolkits JSON, plus a hardcoded static list of 45 popular apps with manually curated names and logo URLs.

Proposed Solution

Two new root-level commands that mirror existing developer-namespace functionality but operate in consumer mode (no project setup required):

1. composio connections

composio connections                          # List active connections
composio connections --toolkits gmail,slack    # Filter by toolkit
composio connections --status EXPIRED          # Show expired connections

2. composio apps

composio apps                    # Full catalog (~982 apps) with connection status
composio apps --query "email"    # Search by name/description
composio apps --connected        # Show only connected apps

Both commands reuse existing infrastructure:

  • resolveCommandProject({ mode: 'consumer' }) for consumer user ID resolution
  • client.connectedAccounts.list() for connection data
  • repo.searchToolkits() + client.toolRouter.session.toolkits() for catalog + logos + status
  • Existing format utilities (formatConnectedAccountsTable, formatToolkitsTable, etc.)

What this replaces for consumer-facing apps:

  • SSRF probe trick (45 subprocess spawns → 1 command)
  • Hardcoded static app catalogs
  • HTML scraping of composio.dev
  • ~5-second first-load latency → sub-1 second
  • Polling-based connection status detection

Related

PR submitted: #3188

Metadata

Metadata

Labels

cliabout the composio universal cli

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions