[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FA8TN8EC280Y0KCS5B7DF5":3,"skill-same:01M6FA8TN8EC280Y0KCS5B7DF5":74},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":56,"ownerHtmlUrl":57,"ownerBlogUrl":6,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M6FA8TN8EC280Y0KCS5B7DF5","evernote-multi-env-setup",null,"Configure multi-environment setup for Evernote integrations.\nUse when setting up dev, staging, and production environments,\nor managing environment-specific configurations.\nTrigger with phrases like \"evernote environments\", \"evernote staging\",\n\"evernote dev setup\", \"multiple environments evernote\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fevernote-multi-env-setup\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"setup","evernote","evernote multi env setup","multi","env setup","env","up","evernote-multi","environments","io","multi-environment","openclaw","edit","write","read","integrations","configure","Bash","code","dev setup","2026-11-10 10:12:30",false,"---\nname: evernote-multi-env-setup\ndescription: |\n  Configure multi-environment setup for Evernote integrations.\n  Use when setting up dev, staging, and production environments,\n  or managing environment-specific configurations.\n  Trigger with phrases like \"evernote environments\", \"evernote staging\",\n  \"evernote dev setup\", \"multiple environments evernote\".\nallowed-tools: Read, Write, Edit, Bash(npm:*), Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ncompatible-with: claude-code, codex, openclaw\ntags: [saas, evernote, evernote-multi]\n\n---\n# Evernote Multi-Environment Setup\n\n## Overview\nConfigure separate development, staging, and production environments for Evernote integrations with proper isolation, configuration management, and environment-aware client factories.\n\n## Prerequisites\n- Multiple Evernote API keys (sandbox for dev\u002Fstaging, production for prod)\n- Environment management infrastructure\n- CI\u002FCD pipeline (see `evernote-ci-integration`)\n\n## Instructions\n\n### Step 1: Environment Configuration Files\n\nCreate per-environment config files that define the Evernote endpoint, sandbox flag, rate limit settings, and logging level.\n\n```javascript\n\u002F\u002F config\u002Fenvironments.js\nconst configs = {\n  development: {\n    sandbox: true,\n    apiUrl: 'https:\u002F\u002Fsandbox.evernote.com',\n    rateLimitDelayMs: 0,  \u002F\u002F No throttle in dev\n    logLevel: 'debug'\n  },\n  staging: {\n    sandbox: true,\n    apiUrl: 'https:\u002F\u002Fsandbox.evernote.com',\n    rateLimitDelayMs: 100,\n    logLevel: 'info'\n  },\n  production: {\n    sandbox: false,\n    apiUrl: 'https:\u002F\u002Fwww.evernote.com',\n    rateLimitDelayMs: 200,\n    logLevel: 'warn'\n  }\n};\n\nmodule.exports = configs[process.env.NODE_ENV || 'development'];\n```\n\n### Step 2: Environment Variables\n\nDefine environment-specific `.env` files. Each environment uses its own API key and token. The `EVERNOTE_SANDBOX` flag controls which Evernote endpoint the SDK connects to.\n\n```bash\n# .env.development - sandbox with dev token\nEVERNOTE_SANDBOX=true\nEVERNOTE_DEV_TOKEN=S=s1:U=...\n\n# .env.production - production with OAuth\nEVERNOTE_SANDBOX=false\nEVERNOTE_CONSUMER_KEY=prod-key\nEVERNOTE_CONSUMER_SECRET=prod-secret\n```\n\n### Step 3: Environment-Aware Client Factory\n\nBuild a factory that creates properly configured Evernote clients based on the active environment. Include validation that production never uses sandbox tokens.\n\n### Step 4: Docker Compose for Local Development\n\nDefine services for the app, Redis (caching), and a webhook receiver (ngrok or localtunnel) in `docker-compose.yml`. Mount `.env.development` as environment file.\n\n### Step 5: Health Check Endpoint\n\nCreate a `\u002Fhealth` endpoint that verifies Evernote API connectivity, reports the active environment, and checks cache availability.\n\n```javascript\napp.get('\u002Fhealth', async (req, res) => {\n  const checks = {\n    environment: process.env.NODE_ENV,\n    sandbox: config.sandbox,\n    evernoteApi: 'unknown',\n    cacheConnected: false\n  };\n  try {\n    await userStore.getUser();\n    checks.evernoteApi = 'connected';\n  } catch { checks.evernoteApi = 'error'; }\n  res.json(checks);\n});\n```\n\nFor the full configuration loader, client factory, Docker setup, and CI\u002FCD environment matrix, see [Implementation Guide](references\u002Fimplementation-guide.md).\n\n## Output\n- Per-environment configuration files (development, staging, production)\n- Environment-aware Evernote client factory\n- `.env` templates for each environment\n- Docker Compose setup for local development\n- Health check endpoint with environment reporting\n- CI\u002FCD configuration with environment-specific secrets\n\n## Error Handling\n| Error | Cause | Solution |\n|-------|-------|----------|\n| `Invalid consumer key` | Using sandbox key in production | Verify `EVERNOTE_SANDBOX` matches key type |\n| Wrong environment | `NODE_ENV` not set | Default to `development`, warn in logs |\n| Sandbox data in production | Environment misconfiguration | Add startup validation that checks key\u002Fenv match |\n| Docker connection refused | Service not started | Run `docker compose up` before testing |\n\n## Resources\n- [12 Factor App - Config](https:\u002F\u002F12factor.net\u002Fconfig)\n- [Evernote Sandbox](https:\u002F\u002Fsandbox.evernote.com)\n- [Docker Compose](https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002F)\n\n## Next Steps\nFor observability setup, see `evernote-observability`.\n\n## Examples\n\n**Three-environment setup**: Development uses sandbox Developer Token for instant testing. Staging uses sandbox OAuth for integration testing. Production uses production OAuth with full rate limiting and monitoring.\n\n**Docker local dev**: Run `docker compose up` to start the app with Redis caching and ngrok for webhook testing, all preconfigured for the sandbox environment.\n\n","# Evernote Multi-Environment Setup\n\n## Overview\nConfigure separate development, staging, and production environments for Evernote integrations with proper isolation, configuration management, and environment-aware client factories.\n\n## Prerequisites\n- Multiple Evernote API keys (sandbox for dev\u002Fstaging, production for prod)\n- Environment management infrastructure\n- CI\u002FCD pipeline (see `evernote-ci-integration`)\n\n## Instructions\n\n### Step 1: Environment Configuration Files\n\nCreate per-environment config files that define the Evernote endpoint, sandbox flag, rate limit settings, and logging level.\n\n```javascript\n\u002F\u002F config\u002Fenvironments.js\nconst configs = {\n  development: {\n    sandbox: true,\n    apiUrl: 'https:\u002F\u002Fsandbox.evernote.com',\n    rateLimitDelayMs: 0,  \u002F\u002F No throttle in dev\n    logLevel: 'debug'\n  },\n  staging: {\n    sandbox: true,\n    apiUrl: 'https:\u002F\u002Fsandbox.evernote.com',\n    rateLimitDelayMs: 100,\n    logLevel: 'info'\n  },\n  production: {\n    sandbox: false,\n    apiUrl: 'https:\u002F\u002Fwww.evernote.com',\n    rateLimitDelayMs: 200,\n    logLevel: 'warn'\n  }\n};\n\nmodule.exports = configs[process.env.NODE_ENV || 'development'];\n```\n\n### Step 2: Environment Variables\n\nDefine environment-specific `.env` files. Each environment uses its own API key and token. The `EVERNOTE_SANDBOX` flag controls which Evernote endpoint the SDK connects to.\n\n```bash\n# .env.development - sandbox with dev token\nEVERNOTE_SANDBOX=true\nEVERNOTE_DEV_TOKEN=S=s1:U=...\n\n# .env.production - production with OAuth\nEVERNOTE_SANDBOX=false\nEVERNOTE_CONSUMER_KEY=prod-key\nEVERNOTE_CONSUMER_SECRET=prod-secret\n```\n\n### Step 3: Environment-Aware Client Factory\n\nBuild a factory that creates properly configured Evernote clients based on the active environment. Include validation that production never uses sandbox tokens.\n\n### Step 4: Docker Compose for Local Development\n\nDefine services for the app, Redis (caching), and a webhook receiver (ngrok or localtunnel) in `docker-compose.yml`. Mount `.env.development` as environment file.\n\n### Step 5: Health Check Endpoint\n\nCreate a `\u002Fhealth` endpoint that verifies Evernote API connectivity, reports the active environment, and checks cache availability.\n\n```javascript\napp.get('\u002Fhealth', async (req, res) => {\n  const checks = {\n    environment: process.env.NODE_ENV,\n    sandbox: config.sandbox,\n    evernoteApi: 'unknown',\n    cacheConnected: false\n  };\n  try {\n    await userStore.getUser();\n    checks.evernoteApi = 'connected';\n  } catch { checks.evernoteApi = 'error'; }\n  res.json(checks);\n});\n```\n\nFor the full configuration loader, client factory, Docker setup, and CI\u002FCD environment matrix, see [Implementation Guide](references\u002Fimplementation-guide.md).\n\n## Output\n- Per-environment configuration files (development, staging, production)\n- Environment-aware Evernote client factory\n- `.env` templates for each environment\n- Docker Compose setup for local development\n- Health check endpoint with environment reporting\n- CI\u002FCD configuration with environment-specific secrets\n\n## Error Handling\n| Error | Cause | Solution |\n|-------|-------|----------|\n| `Invalid consumer key` | Using sandbox key in production | Verify `EVERNOTE_SANDBOX` matches key type |\n| Wrong environment | `NODE_ENV` not set | Default to `development`, warn in logs |\n| Sandbox data in production | Environment misconfiguration | Add startup validation that checks key\u002Fenv match |\n| Docker connection refused | Service not started | Run `docker compose up` before testing |\n\n## Resources\n- [12 Factor App - Config](https:\u002F\u002F12factor.net\u002Fconfig)\n- [Evernote Sandbox](https:\u002F\u002Fsandbox.evernote.com)\n- [Docker Compose](https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002F)\n\n## Next Steps\nFor observability setup, see `evernote-observability`.\n\n## Examples\n\n**Three-environment setup**: Development uses sandbox Developer Token for instant testing. Staging uses sandbox OAuth for integration testing. Production uses production OAuth with full rate limiting and monitoring.\n\n**Docker local dev**: Run `docker compose up` to start the app with Redis caching and ngrok for webhook testing, all preconfigured for the sandbox environment.\n\n",{"name":5,"tags":44,"author":46,"license":15,"version":47,"description":48,"allowed-tools":49,"compatible-with":50},[45,20,26],"saas","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Configure multi-environment setup for Evernote integrations.\nUse when setting up dev, staging, and production environments,\nor managing environment-specific configurations.\nTrigger with phrases like \"evernote environments\", \"evernote staging\",\n\"evernote dev setup\", \"multiple environments evernote\".\n","Read, Write, Edit, Bash(npm:*), Grep","claude-code, codex, openclaw","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fevernote-multi-env-setup",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill evernote-multi-env-setup",{"tool":66,"command":67},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill evernote-multi-env-setup",{"tool":69,"command":70},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill evernote-multi-env-setup","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fevernote-multi-env-setup\u002FSKILL.md",true,[],[75,89,99,108,114,121],{"skillNo":76,"name":77,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":85,"publishedAt":39},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[80],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[86,87,88],"model","model hierarchy","model hierarchy skill",{"skillNo":90,"name":91,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":95,"publishedAt":39},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[94],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[96,97,98],"MCP","zoom","zoom mcp",{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":39},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[105,106,107,97],"sdk","zoom apps sdk","apps",{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":39},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[110],{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":120,"publishedAt":39},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[119],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[116],{"skillNo":122,"name":123,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":39},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[123]]