.local/skills/integrations/SKILL.md
Search and manage Replit integrations including blueprints, connectors, and connections. Use for authentication, databases, payments, and third-party API integrations.
npx skillsauth add akhil151/dtpapp integrationsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Integrations allow first-class usage of Third-Party (and some First-party) technologies. If the integration exists, you can ask user to "connect" their account (Google, Linear, GitHub, Stripe, etc) to their Replit account, which critically gives you, the Replit Agent, access to new capabilities (e.g. view their Google Sheets, read their Linear issues, setup & access payment systems, etc). You must follow the steps outlined here to successfully make these "connections".
Before asking the user for any API key, secret, or credential, always search for a Replit integration first. Replit integrations handle OAuth and secrets securely, and many common services (Google Sheets, Linear, Stripe, GitHub, OpenAI, etc.) are already supported. Asking the user for credentials when an integration exists adds a lot of unnecessary friction. Users typically do not know about our integration system, you must proactive in suggesting it when it (and only when) it is relevant.
Integrations include blueprints (code templates), connectors (OAuth/API integrations + templates), and connections (already established integrations).
Use this skill when:
As a web search (use web-search skill if available), searching files within the project, media generation (use media-generation skill, including image generation APIs), fetching data to respond to a user's question (use query-integration-data skill).
There are three types of integrations, and they represent different stages of a lifecycle:
connector (not_setup)
→ user completes OAuth via proposeIntegration
→ connection (not_added)
→ addIntegration ← wires the connection to this project, adds dependencies
→ proposeIntegration ← establishes the OAuth token for this Repl
→ now it is a functioning connection (added + authorized, ready to use)
blueprint (not_installed)
→ addIntegration or proposeIntegration
→ blueprint (installed, code + packages added to project), ready to use
not_setupproposeIntegration which allows the user through the OAuth flowconnector:ccfg_google-sheet_E42A9F6DA6...not_added (authorized but not wired to this project) or added (active in this project)addIntegration first to wire the connection to this project, then call proposeIntegration to establish the OAuth token for this Repl. Both steps are required on first setup. The token may also expire later — see Common Pitfalls.searchIntegrations returns a connection for a service, it means the user has already completed OAuth at the account level — but you still need addIntegration to wire the project, then proposeIntegration to establish the OAuth token for this Replconnection:conn_linear_01MG99PAJR6MQ5...NOTE: You must not delay calling proposeIntegration even if it waits for the user. You will be blocked and not have access to test the feature you build because you don't have access to real data, real APIs, etc, which is even more inefficient than reaching out to the user as soon as you know you need the integration to get accepted.
not_installed or previously_installedaddIntegration directly; if requiresConfirmation is True, use proposeIntegration insteadblueprint:javascript_openaiAll functions are available directly in the code_execution sandbox. Always use console.log() on return values — functions execute silently with no output if you don't.
Search for available integrations. Always run this first. Try a few different query terms if the first search returns nothing — results depend on keyword matching.
Returns: Dict with:
integrations: list of integration objects, each with id, displayName, description, integrationType, statusaskForBlueprintConfirmation: boolean — if True, blueprint additions in this environment will require user confirmation; expect requiresConfirmation: True back from addIntegration and be ready to call proposeIntegration insteadconst results = await searchIntegrations("Google Sheets");
console.log(results);
// { integrations: [{ id: 'connector:ccfg_google-sheet_...', displayName: 'Google Sheets',
// description: '...', integrationType: 'connector', status: 'not_setup' }], ... }
// Always log — calling without console.log produces no visible output!
for (const item of results.integrations) {
console.log(`${item.id} type=${item.integrationType} status=${item.status}`);
}
Notes:
connection (not a connector) in results"stripe", "payments", "stripe payment processing" may return different resultsid field is the exact string to pass to subsequent functionsFetch full details and the code snippet for an integration without adding it to the project.
Returns: Dict with integrationType, integrationId, displayName, renderedContent
Note: addIntegration returns the exact same renderedContent blob, so in most cases you don't need to call this separately — just read the result of addIntegration. The main reason to call viewIntegration first is if you want to inspect the package name, code snippet, or documentation URL before committing to the install.
const info = await viewIntegration("connection:conn_linear_01KG10PAJR6MQ525SQSWEB8QHC");
console.log(info.renderedContent); // Same blob you'd get from addIntegration
Add a blueprint or connection to the current project. Do not use for connectors (those with integrationType: connector and status: not_setup) — use proposeIntegration for those.
Returns: Dict with:
success: booleanrequiresConfirmation: boolean — if True, call proposeIntegration insteadconnectionAlreadyAdded: boolean — if True, the connection is already wired to this project; skip addIntegration but still call proposeIntegration to ensure the OAuth token is validrenderedContent: same XML blob as viewIntegrationobservations: list of stringified observation objects (verbose; contains npm install output)Side effect: Automatically installs required packages. This will restart or crash a running dev server — be aware if calling mid-session while the workflow is running.
const result = await addIntegration("connection:conn_linear_01KG10PAJR6MQ525SQSWEB8QHC");
console.log(result.success); // true
console.log(result.observations); // Contains package installation output as stringified objects
// Handle confirmation requirement
if (!result.success && result.requiresConfirmation) {
proposeIntegration("connection:conn_linear_01KG10PAJR6MQ525SQSWEB8QHC");
}
After calling addIntegration:
renderedContent to get the code snippetPropose a connector to the user. This is a control-flow operation — it exits the agent loop immediately and waits for the user to complete OAuth or confirm setup. Nothing after this call will execute in the current loop.
Returns: Dict with success, displayName, exitLoop (always True)
Use for:
status: not_setup (user needs to go through OAuth)addIntegration returns requiresConfirmation: True// Always explain to the user what is about to happen before calling this
// The agent loop exits after this — no further code runs
const result = await proposeIntegration("connector:ccfg_google-sheet_E42A9F6CA62546F68A1FECA0E8");
Notes:
connectionaddIntegration with the new connection:... IDAfter addIntegration or viewIntegration, the renderedContent contains a code snippet. Key things to know:
server/googleSheets.ts)getUncachable___Client() function — call it fresh on every requestREPLIT_CONNECTORS_HOSTNAME, REPL_IDENTITY, WEB_REPL_RENEWAL) that Replit injects automatically — no setup neededsearchIntegrations and all other functions return silently unless you console.log() the outputintegrationType firstsearchIntegrations returns a connection, the user is already authenticated at the account level — use addIntegration to wire the project, then proposeIntegration to establish the OAuth token for this Repl. Both steps are always requiredgetUncachable___Client() freshaddIntegration runs package installation (e.g. npm, uv), which can crash a running dev server. Restart the workflow after adding integrationsaddIntegration succeeds for a connection but the app throws "not connected" at runtime, the token may be expired or missing. Call proposeIntegration with the same connection ID to trigger re-authorization, then restart the workflowtools
Manage application workflows including configuration, restart, and removal.
development
Search the web and fetch content from URLs. Use for real-time information, API documentation, and current events.
testing
Run automated UI tests against your application using a Playwright-based testing subagent. Use after implementing features to verify they work correctly.
data-ai
Create reusable skills that extend agent capabilities. Use when the user asks to create a skill, teach you something reusable, or save instructions for future tasks.