flexkit plugins
Manages the plugins of a project: browse the catalog, install a plugin, connect accounts and list the tools the agent can use with them. It does what Studio → AI → Plugins does.
Most subcommands need a user session: sign in with flexkit login. A project API token can run ls and inspect; the other subcommands, tools included, answer A user session is required. See Roles.
Synopsis
flexkit plugins <subcommand> [arguments] [options]Without a subcommand, flexkit plugins runs flexkit plugins ls.
plugins ls
Lists the plugins in use in the project: installed, or with at least one connected account. --available lists the catalog plugins you can add, and --all lists both.
flexkit plugins ls [--available | --all] [--json] [--project <id>]The STATUS column shows connected, needs_auth (every account needs a new sign-in), installed (no account yet), available or disabled. CONNECTS WITH tells how an account is added: sign-in (OAuth in Studio), token or credentials.
Examples
# List the plugins in use
flexkit plugins ls
# Browse the catalog
flexkit plugins ls --available
# Print the ids of plugins with a connected account
flexkit plugins ls --json | jq -r '.[] | select(.connections | length > 0) | .id'plugins inspect
Shows a plugin: version, how it connects, the scopes it supports, the accounts you can see, its skills and MCP servers, and the automations that use it. Alias: get.
flexkit plugins inspect <pluginId> [--json] [--project <id>]Examples
# Show the Gmail plugin
flexkit plugins inspect gmail
# Print the connected accounts as JSON
flexkit plugins inspect slack --json | jq '.plugin.connections'plugins add
Installs a catalog plugin in the project. When an owner disabled the plugin earlier, add enables it again. Aliases: install, enable.
flexkit plugins add <pluginId> [--json] [--project <id>]Connecting an account also installs the plugin, so add is only needed to install one before anyone connects it.
Examples
# Install the Shopify plugin
flexkit plugins add shopify
# Install it in another project
flexkit plugins add google-calendar --project abcdefghijplugins rm
Disables a plugin in the project. The agent, automations and MCP clients stop using it. Its accounts stay connected, so flexkit plugins add turns it back on; remove accounts with flexkit plugins disconnect. Aliases: remove, disable.
flexkit plugins rm <pluginId> [--yes] [--json] [--project <id>]The command asks for confirmation. Pass --yes to skip the question; without a terminal it refuses to run unless you pass --yes.
Examples
# Disable the Slack plugin
flexkit plugins rm slack
# Disable it from a script
flexkit plugins rm slack --yesplugins connect
Connects an account to a plugin. A project account is shared by everyone in the project; a personal account is yours, and the agent prefers it when it acts for you. --scope picks one; by default the CLI connects a project account when your role allows it, and a personal one otherwise.
flexkit plugins connect <pluginId> [--scope project|personal] [--api-token <value|@file|->] [--method <key>] [--set <key=value>]... [--reconnect <connectionId>] [--no-browser] [--no-wait] [--json] [--project <id>]How an account is connected depends on the plugin:
- Sign-in plugins (Gmail, Google Calendar, Slack, HubSpot…) finish the provider’s OAuth sign-in in Studio. The CLI opens the plugin’s page in Studio; choose Connect, sign in, and the CLI prints the new account as soon as it appears. With
--no-browser, or without a terminal, it prints the link instead of opening it.--no-waitreturns right away. - Token plugins take a token from the provider. Pass it with
--api-token(inline,@file, or-to read stdin) or type it at the prompt; the input is masked. - Credentials plugins (Shopify) take several fields. Pass them with
--set key=value; missing required fields are prompted for. When the plugin offers several ways to connect,--methodchooses one.--setvalues can also be@fileor-. Runflexkit plugins inspect <pluginId> --jsonto see the fields (.plugin.connect).
Flexkit checks a token or credentials with the provider before saving them, and never returns them. --reconnect <connectionId> replaces the token or credentials of an existing account instead of adding one; reconnect a sign-in account from Studio.
Examples
# Connect your own Gmail account (opens Studio)
flexkit plugins connect gmail --scope personal
# Connect a Shopify store with a Dev Dashboard app
flexkit plugins connect shopify --method client \
--set shop=acme.myshopify.com --set clientId=4f1c0d7e9a2b --set clientSecret=@secret.txt
# Connect a legacy Shopify custom app token
flexkit plugins connect shopify --method token --set shop=acme.myshopify.com --set accessToken=-
# Pipe a token in from an environment variable
echo "$TINYBIRD_TOKEN" | flexkit plugins connect tinybird --api-token -plugins disconnect
Disconnects an account and revokes its stored credentials. Pass the plugin id, with --connection when it has several accounts (in a terminal the CLI asks which one), or pass the connection id itself.
flexkit plugins disconnect <pluginId|connectionId> [--connection <id>] [--yes] [--json] [--project <id>]You can disconnect your personal accounts; project accounts need the owner or developer role.
Examples
# Disconnect your Gmail account
flexkit plugins disconnect gmail
# Disconnect one of several Slack workspaces without a prompt
flexkit plugins disconnect slack --connection 6c2f1b0e-3d4a-4f7b-9a8e-1c2d3e4f5a6b --yesplugins tools
Lists the tools a plugin offers through one of your accounts, the same list the agent sees. ACCESS is read for tools the plugin marks read-only (they run without approval and on read-only MCP connections), destructive for tools marked destructive, and write otherwise.
flexkit plugins tools <pluginId> [--connection <id>] [--refresh] [--json] [--project <id>]By default the CLI uses the account the agent would use: your primary personal account, else the primary project account. The list is cached; --refresh asks the provider again, for example after you changed the scopes of the provider app.
Examples
# List the Gmail tools
flexkit plugins tools gmail
# Print the names of read-only tools
flexkit plugins tools hubspot --json | jq -r '.servers[].tools[] | select(.annotations.readOnlyHint) | .name'
# Refresh the list after changing app scopes
flexkit plugins tools shopify --refreshOptions
You can also use all global options.
Roles
With a project API token, ls and inspect work with the token’s role but never as the member who created it: they show project accounts only. tools needs a user session, since listing an account’s tools can renew its credentials and calls the provider. Installing, removing, connecting and disconnecting need a user session too.
Common workflows
# Set up Shopify for the whole project from a CI job
flexkit plugins connect shopify --scope project --method client \
--set shop="$SHOP_DOMAIN" --set clientId="$SHOPIFY_CLIENT_ID" --set clientSecret=- <<< "$SHOPIFY_CLIENT_SECRET"
# Check which plugins need a new sign-in
flexkit plugins ls --json | jq -r '.[] | select(.connections | any(.status == "needs_auth")) | .id'The tools are also available to MCP clients through list_plugin_tools and call_plugin_tool; see flexkit mcp.