Skip to main content
instantly-multi-env-setup Configure Instantly.ai across development, staging, and production environments.
Use when setting up multi-workspace deployments, isolating test from production,
or managing per-environment API keys and webhook endpoints.
Trigger with phrases like "instantly environments", "instantly staging",
"instantly dev prod", "instantly multi-env", "instantly workspace isolation".
跳到安装 Skills Marketplace 发现并探索由社区构建的 Agent Skills
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/jeremylongshore/claude-code-plugins-plus-skills --skill instantly-multi-env-setup命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
下载 Zip 下载中... 同仓库更多 Skills Implement user sign-up and sign-in flows with Clerk.
Use when building authentication UI, customizing sign-in experience,
or implementing OAuth social login.
Trigger with phrases like "clerk sign-in", "clerk sign-up",
"clerk login flow", "clerk OAuth", "clerk social login".
Implement session management and middleware with Clerk.
Use when managing user sessions, configuring route protection,
or implementing token refresh and custom JWT templates.
Trigger with phrases like "clerk session", "clerk middleware",
"clerk route protection", "clerk token", "clerk JWT".
Configure enterprise SSO, role-based access control, and organization management.
Use when implementing SSO integration, configuring role-based permissions,
or setting up organization-level controls.
Trigger with phrases like "clerk SSO", "clerk RBAC",
"clerk enterprise", "clerk roles", "clerk permissions", "clerk organizations".
name instantly-multi-env-setup description Configure Instantly.ai across development, staging, and production environments.
Use when setting up multi-workspace deployments, isolating test from production,
or managing per-environment API keys and webhook endpoints.
Trigger with phrases like "instantly environments", "instantly staging",
"instantly dev prod", "instantly multi-env", "instantly workspace isolation".
allowed-tools Read, Write, Edit, Bash(npm:*), Grep version 1.12.0 license MIT author Jeremy Longshore <jeremy@intentsolutions.io> tags ["saas","instantly","multi-environment","configuration"] compatibility Designed for Claude Code, also compatible with Codex and OpenClaw
Instantly Multi-Environment Setup
Overview
Configure Instantly API v2 integrations across development, staging, and production environments. Instantly uses workspace-level isolation — each workspace has its own accounts, campaigns, leads, and API keys. This skill covers workspace separation, environment-specific configuration, mock server for dev, and safe promotion workflows.
Environment Strategy
Environment Instantly Backend API Keys Webhooks Purpose Development Mock server mock-keylocalhost:3000 Code iteration Staging Separate workspace Staging key staging.yourapp.com Integration testing Production Production workspace Prod key prod.yourapp.com Live outreach
Instructions
Step 1: Environment Configuration
import "dotenv/config" ;
type Env = "development" | "staging" | "production" ;
interface InstantlyConfig {
env : Env ;
apiKey : string ;
baseUrl : string ;
webhookSecret : string ;
useMock : boolean ;
dailyLimitCap : number ;
enableRealSending : boolean ;
}
export function getConfig ( ): InstantlyConfig {
const env = (process. . || ) ;
: < , > = {
: {
: ,
: process. . || ,
: ,
: ,
: ,
: ,
: ,
},
: {
: ,
: process. . || ,
: ,
: process. . || ,
: ,
: ,
: ,
},
: {
: ,
: process. . || ,
: ,
: process. . || ,
: ,
: ,
: ,
},
};
config = configs[env];
(!config. && !config. ) {
( );
}
config;
}
env
NODE_ENV
"development"
as
Env
const
configs
Record
Env
InstantlyConfig
development
env
"development"
apiKey
env
INSTANTLY_API_KEY_DEV
"mock-key"
baseUrl
"https://developer.instantly.ai/_mock/api/v2"
webhookSecret
"dev-secret"
useMock
true
dailyLimitCap
5
enableRealSending
false
staging
env
"staging"
apiKey
env
INSTANTLY_API_KEY_STAGING
""
baseUrl
"https://api.instantly.ai/api/v2"
webhookSecret
env
INSTANTLY_WEBHOOK_SECRET_STAGING
""
useMock
false
dailyLimitCap
10
enableRealSending
true
production
env
"production"
apiKey
env
INSTANTLY_API_KEY_PROD
""
baseUrl
"https://api.instantly.ai/api/v2"
webhookSecret
env
INSTANTLY_WEBHOOK_SECRET_PROD
""
useMock
false
dailyLimitCap
100
enableRealSending
true
const
if
useMock
apiKey
throw
new
Error
`INSTANTLY_API_KEY_${env.toUpperCase()} is required for ${env} `
return
Step 2: Environment-Specific .env Files
NODE_ENV=development
INSTANTLY_API_KEY_DEV=mock-key
INSTANTLY_BASE_URL=https://developer.instantly.ai/_mock/api/v2
INSTANTLY_WEBHOOK_SECRET=dev-secret-123
NODE_ENV=staging
INSTANTLY_API_KEY_STAGING=your-staging-workspace-key
INSTANTLY_BASE_URL=https://api.instantly.ai/api/v2
INSTANTLY_WEBHOOK_SECRET_STAGING=staging-secret-456
NODE_ENV=production
INSTANTLY_API_KEY_PROD=your-production-workspace-key
INSTANTLY_BASE_URL=https://api.instantly.ai/api/v2
INSTANTLY_WEBHOOK_SECRET_PROD=prod-secret-789
Step 3: Safe Campaign Creation with Environment Guards import { getConfig } from "./config" ;
import { InstantlyClient } from "./instantly/client" ;
const config = getConfig ();
const client = new InstantlyClient (config.apiKey , config.baseUrl );
async function createCampaignSafe (name : string , sequences : any [] ) {
const envPrefix = config.env === "production" ? "" : `[${config.env.toUpperCase()} ] ` ;
const safeName = `${envPrefix} ${name} ` ;
const campaign = await client.campaigns .create ({
name : safeName,
daily_limit : Math .min (50 , config.dailyLimitCap ),
sequences,
campaign_schedule : {
start_date : new Date ().toISOString ().split ("T" )[0 ],
schedules : [{
name : "Business Hours" ,
timing : { from : "09:00" , to : "17:00" },
days : { "1" : true , "2" : true , "3" : true , "4" : true , "5" : true , "0" : false , "6" : false },
timezone : "America/New_York" ,
}],
},
stop_on_reply : true ,
});
console .log (`[${config.env} ] Campaign created: ${campaign.name} (${campaign.id} )` );
if (config.env !== "production" ) {
await client.campaigns .activate (campaign.id );
console .log (`[${config.env} ] Campaign auto-activated (non-prod)` );
} else {
console .log (`[production] Campaign created in DRAFT — manual activation required` );
}
return campaign;
}
Step 4: Workspace Isolation Verification async function verifyWorkspaceIsolation ( ) {
const config = getConfig ();
const workspace = await client.request <{
id : string ; name : string ;
}>("/workspaces/current" );
console .log (`Environment: ${config.env} ` );
console .log (`Workspace: ${workspace.name} (${workspace.id} )` );
const expectedWorkspaceNames : Record <string , string []> = {
development : ["dev" , "test" , "mock" ],
staging : ["staging" , "stage" , "qa" ],
production : ["prod" , "production" , "live" ],
};
const expected = expectedWorkspaceNames[config.env ] || [];
const nameMatch = expected.some ((n ) =>
workspace.name .toLowerCase ().includes (n)
);
if (!nameMatch && config.env !== "development" ) {
console .warn (`WARNING: Workspace name "${workspace.name} " doesn't match expected ${config.env} pattern` );
console .warn ("Verify you're using the correct API key for this environment" );
}
const accounts = await client.accounts .list (5 );
console .log (`Accounts in workspace: ${accounts.length} ` );
}
Step 5: Webhook Registration Per Environment async function setupWebhooksForEnv ( ) {
const config = getConfig ();
const webhookBaseUrls : Record <string , string > = {
development : "http://localhost:3000" ,
staging : "https://staging-webhooks.yourapp.com" ,
production : "https://webhooks.yourapp.com" ,
};
const baseUrl = webhookBaseUrls[config.env ];
const existing = await client.webhooks .list ();
for (const w of existing) {
if (w.name .startsWith (`[${config.env} ]` )) {
await client.webhooks .delete (w.id );
}
}
const events = ["reply_received" , "email_bounced" , "lead_interested" , "lead_meeting_booked" ];
for (const event of events) {
await client.webhooks .create ({
name : `[${config.env} ] ${event} ` ,
target_hook_url : `${baseUrl} /webhooks/instantly` ,
event_type : event,
headers : { "X-Webhook-Secret" : config.webhookSecret },
});
}
console .log (`[${config.env} ] Registered ${events.length} webhooks -> ${baseUrl} ` );
}
Promotion Workflow Development (mock) → Staging (real API, test data) → Production (live)
| | |
| Code changes | Integration test | Manual activation
| Unit tests | Small lead list (10) | Full lead list
| Mock server | Staging workspace | Production workspace
| | Webhook verification | Monitoring + alerts
Error Handling Error Cause Solution Wrong workspace API key mismatch Run verifyWorkspaceIsolation() Prod campaign auto-launched Missing environment guard Add if (env !== "production") check Webhook pointing to wrong env Stale webhook registration Re-run setupWebhooksForEnv() Staging data in production Cross-env contamination Use separate workspaces with separate API keys
Resources
Next Steps For observability and monitoring, see instantly-observability.