AGENT SKILL

instantly-multi-env-setup

Configure Instantly across development, staging, and production environments. Use when setting up multi-environment deployments, configuring per-environment secrets, or implementing environment-specific Instantly configurations. Trigger with phrases like "instantly environments", "instantly staging", "instantly dev prod", "instantly environment setup", "instantly config by env".

License 许可
MIT
最近更新
2026-05-26
Stars
★ 0
Forks
0

01 前言 Front Matter

name
instantly-multi-env-setup
author
Jeremy Longshore <jeremy@intentsolutions.io>
license
MIT
version
1.0.0
description
Configure Instantly across development, staging, and production environments. Use when setting up multi-environment deployments, configuring per-environment secrets, or implementing environment-specific Instantly configurations. Trigger with phrases like "instantly environments", "instantly staging", "instantly dev prod", "instantly environment setup", "instantly config by env".
allowed-tools
Read, Write, Edit, Bash(aws:*), Bash(gcloud:*), Bash(vault:*)
compatible-with
claude-code, codex, openclaw

03 SKILL.md 正文

Instantly Multi-Environment Setup

Overview

Configure Instantly across development, staging, and production environments with isolated API keys, environment-specific settings, and proper secret management. Each environment gets its own credentials and configuration to prevent cross-environment data leakage.

Prerequisites

  • Separate Instantly API keys per environment
  • Secret management solution (environment variables, Vault, or cloud secrets)
  • CI/CD pipeline with environment-aware deployment
  • Application with environment detection logic

Environment Strategy

Environment Purpose API Key Source Settings
Development Local development .env.local Debug enabled, relaxed limits
Staging Pre-production testing CI/CD secrets Production-like settings
Production Live traffic Secret manager Optimized, hardened

Instructions

Step 1: Configuration Structure

config/
  instantly/
    base.ts           # Shared defaults
    development.ts    # Dev overrides
    staging.ts        # Staging overrides
    production.ts     # Prod overrides
    index.ts          # Environment resolver

Step 2: Base Configuration

// config/instantly/base.ts
export const baseConfig = {
  timeout: 30000,  # 30000: 30 seconds in ms
  maxRetries: 3,
  cache: {
    enabled: true,
    ttlSeconds: 300,  # 300: timeout: 5 minutes
  },
};

Step 3: Environment-Specific Configs

// config/instantly/development.ts
import { baseConfig } from "./base";

export const developmentConfig = {
  ...baseConfig,
  apiKey: process.env.INSTANTLY_API_KEY_DEV,
  debug: true,
  cache: { enabled: false, ttlSeconds: 60 },
};

// config/instantly/staging.ts
import { baseConfig } from "./base";

export const stagingConfig = {
  ...baseConfig,
  apiKey: process.env.INSTANTLY_API_KEY_STAGING,
  debug: false,
};

// config/instantly/production.ts
import { baseConfig } from "./base";

export const productionConfig = {
  ...baseConfig,
  apiKey: process.env.INSTANTLY_API_KEY_PROD,
  debug: false,
  timeout: 60000,  # 60000: 1 minute in ms
  maxRetries: 5,
  cache: { enabled: true, ttlSeconds: 600 },  # 600: timeout: 10 minutes
};

Step 4: Environment Resolver

// config/instantly/index.ts
import { developmentConfig } from "./development";
import { stagingConfig } from "./staging";
import { productionConfig } from "./production";

type Environment = "development" | "staging" | "production";

const configs = {
  development: developmentConfig,
  staging: stagingConfig,
  production: productionConfig,
};

export function detectEnvironment(): Environment {
  const env = process.env.NODE_ENV || "development";
  if (env === "production") return "production";
  if (env === "staging" || process.env.VERCEL_ENV === "preview") return "staging";
  return "development";
}

export function getInstantlyConfig() {
  const env = detectEnvironment();
  const config = configs[env];

  if (!config.apiKey) {
    throw new Error(`INSTANTLY_API_KEY not set for environment: ${env}`);
  }

  return { ...config, environment: env };
}

Step 5: Secret Management

# Local development (.env.local - git-ignored)
INSTANTLY_API_KEY_DEV=your-dev-key

# GitHub Actions
# Settings > Environments > staging/production > Secrets
# Add INSTANTLY_API_KEY_STAGING and INSTANTLY_API_KEY_PROD

# AWS Secrets Manager
aws secretsmanager create-secret \
  --name instantly/production/api-key \
  --secret-string "your-prod-key"

# GCP Secret Manager
echo -n "your-prod-key" | gcloud secrets create instantly-api-key-prod --data-file=-
# .github/workflows/deploy.yml
jobs:
  deploy-staging:
    environment: staging
    env:
      INSTANTLY_API_KEY_STAGING: ${{ secrets.INSTANTLY_API_KEY_STAGING }}

  deploy-production:
    environment: production
    env:
      INSTANTLY_API_KEY_PROD: ${{ secrets.INSTANTLY_API_KEY_PROD }}

Error Handling

Issue Cause Solution
Wrong environment Missing NODE_ENV Set environment variable in deployment
Secret not found Wrong secret path Verify secret manager configuration
Cross-env data leak Shared API key Use separate keys per environment
Config validation fail Missing field Add startup validation with Zod schema

Examples

Quick Environment Check

const config = getInstantlyConfig();
console.log(`Running in ${config.environment}`);
console.log(`Cache enabled: ${config.cache.enabled}`);

Startup Validation

import { z } from "zod";

const configSchema = z.object({
  apiKey: z.string().min(1, "INSTANTLY_API_KEY is required"),
  environment: z.enum(["development", "staging", "production"]),
  timeout: z.number().positive(),
});

const config = configSchema.parse(getInstantlyConfig());

Resources

Next Steps

For deployment, see instantly-deploy-integration.

Output

  • Configuration files or code changes applied to the project
  • Validation report confirming correct implementation
  • Summary of changes made and their rationale

04 同仓库更多 Skills

SamuelChien
SamuelChien/mega-skills-collection

zustand-store-ts

Create Zustand stores with TypeScript, subscribeWithSelector middleware, and proper state/action separation. Use when building React state management, creating global stores, or implementing reactive state patterns with Zustand.

★ 0
SamuelChien
SamuelChien/mega-skills-collection

zustand-store-creator

Zustand Store Creator - Auto-activating skill for Frontend Development. Triggers on: zustand store creator, zustand store creator Part of the Frontend Development skill category.

★ 0
SamuelChien
SamuelChien/mega-skills-collection

zero-trust-config-helper

Zero Trust Config Helper - Auto-activating skill for Security Advanced. Triggers on: zero trust config helper, zero trust config helper Part of the Security Advanced skill category.

★ 0
SamuelChien
SamuelChien/mega-skills-collection

zapier-integration-helper

Zapier Integration Helper - Auto-activating skill for Business Automation. Triggers on: zapier integration helper, zapier integration helper Part of the Business Automation skill category.

★ 0
SamuelChien
SamuelChien/mega-skills-collection

zai-cli

Execute z.AI CLI providing vision, search, reader, and GitHub exploration via CLI and MCP. Use when user needs image/video analysis, OCR, UI-to-code conversion, error diagnosis, real-time web search, web page to markdown extraction, or GitHub code exploration. Trigger with phrases like "analyze this image", "search the web for", "read this page", "explore this repo", or "use zai". Requires Z_AI_API_KEY.

★ 0
SamuelChien
SamuelChien/mega-skills-collection

yt-research

Research competitor YouTube channels, niches, and trending topics for your content strategy. Use this skill whenever the user says "research channels", "analyze competitors", "find trending topics", "niche analysis", "competitive research", "what are other creators doing", "scrape YouTube channels", or wants to understand the competitive landscape for a specific tool or topic area. Use when working with yt research. Trigger with 'yt', 'research'.

★ 0