[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EEVMXWWZ2M63BKTM44T0CQ":3,"skill-same:01M6EEVMXWWZ2M63BKTM44T0CQ":50},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":23,"linkOnly":24,"markdownContent":25,"markdownBody":25,"frontMatter":26,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":30,"repositoryHtmlUrl":31,"repositoryHomepageUrl":32,"ownerHtmlUrl":33,"ownerBlogUrl":6,"ownerDescription":34,"updatedAt":35,"install":36,"resources":49},"01M6EEVMXWWZ2M63BKTM44T0CQ","doppler",null,"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\u002FTerminalSkills\u002Fskills\u002Fdoppler\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[5],"2026-11-10 10:12:30",false,"# Doppler\n\n## Overview\n\nManage application secrets and environment variables through the Doppler CLI. Covers authentication, project\u002Fconfig setup, secret injection into processes, secret CRUD operations, bulk import\u002Fexport, service tokens for CI\u002FCD, template-based secret substitution, and integrations with Docker and Kubernetes.\n\n## Instructions\n\n### 1. Install and authenticate\n\n```bash\n# macOS\nbrew install dopplerhq\u002Fcli\u002Fdoppler\n# Debian\u002FUbuntu — see https:\u002F\u002Fdocs.doppler.com\u002Fdocs\u002Finstall-cli for full apt setup\n# Windows\nwinget install doppler.doppler\n```\n\nAuthenticate and verify:\n\n```bash\ndoppler login\ndoppler me\n```\n\n### 2. Set up a project directory\n\nLink the current directory to a Doppler project and config (creates `doppler.yaml`):\n\n```bash\ndoppler setup\ndoppler setup --project my-api --config dev --no-interactive\n```\n\n### 3. Inject secrets into processes\n\nRun any command with secrets injected as environment variables:\n\n```bash\ndoppler run -- npm start\ndoppler run -- python manage.py runserver\ndoppler run -- docker compose up\n```\n\nOverride the project\u002Fconfig per command:\n\n```bash\ndoppler run -p payments-api -c stg -- .\u002Frun-tests.sh\n```\n\nRun multiple chained commands:\n\n```bash\ndoppler run --command=\".\u002Fconfigure && .\u002Fprocess-jobs; .\u002Fcleanup\"\n```\n\n### 4. Read and manage secrets\n\nList all secrets:\n\n```bash\ndoppler secrets\ndoppler secrets --only-names\n```\n\nGet a single secret value:\n\n```bash\ndoppler secrets get DATABASE_URL --plain\n```\n\nGet multiple secrets as JSON:\n\n```bash\ndoppler secrets get DATABASE_URL REDIS_URL API_KEY --json\n```\n\n### 5. Set and update secrets\n\n```bash\ndoppler secrets set API_KEY=\"sk-live-abc123def456\"\ndoppler secrets set DB_HOST=\"db.prod.internal\" DB_PORT=\"5432\"\ncat tls-cert.pem | doppler secrets set TLS_CERT              # from file\u002Fstdin\ndoppler secrets set PORT=\"8080\" --type integer\ndoppler secrets set STRIPE_KEY=\"sk_live_...\" --visibility restricted\ndoppler secrets delete DEPRECATED_KEY\n```\n\n### 6. Download and upload secrets in bulk\n\nDownload in various formats:\n\n```bash\ndoppler secrets download --no-file --format=json\ndoppler secrets download --no-file --format=env > .env\ndoppler secrets download --no-file --format=yaml > config.yaml\n```\n\nSupported formats: `json`, `yaml`, `env`, `env-no-quotes`, `docker`, `dotnet-json`.\n\nUpload from a file:\n\n```bash\ndoppler secrets upload .env\ndoppler secrets upload secrets.json\n```\n\n### 7. Mount secrets as ephemeral files\n\nMount secrets as a named pipe (most secure file-based method):\n\n```bash\ndoppler run --mount .env -- npm start\ndoppler run --mount config.json --mount-format json -- .\u002Fapp\n```\n\nLimit file reads for extra security:\n\n```bash\ndoppler run --mount .env --mount-max-reads 1 -- php artisan config:cache\n```\n\n### 8. Use secret templates\n\nCreate a template file (e.g., `config.tmpl`):\n\n```\ndb_host: {{.DB_HOST}}\ndb_port: {{.DB_PORT}}\n{{with .LOG_FILE}}\nlog_file: {{.}}\n{{end}}\n```\n\nSubstitute and output:\n\n```bash\ndoppler secrets substitute config.tmpl --output config.yaml\n```\n\nPipe directly to kubectl:\n\n```bash\nkubectl apply -f \u003C(doppler secrets substitute k8s-secret.yaml.tmpl)\n```\n\n### 9. Create service tokens for CI\u002FCD\n\n```bash\ndoppler configs tokens create ci-deploy -p payments-api -c prd --max-age 24h --plain\n```\n\nUse in CI via env var or inline flag:\n\n```bash\nexport DOPPLER_TOKEN=\"dp.st.prd.xxxx\"\ndoppler run -- .\u002Fdeploy.sh\ndoppler run --token=\"dp.st.prd.xxxx\" -- .\u002Fdeploy.sh\n```\n\n### 10. Name transformers\n\nTransform secret names for framework compatibility:\n\n```bash\ndoppler run --name-transformer camel -- node app.js        # API_KEY → apiKey\ndoppler run --name-transformer tf-var -- terraform apply    # API_KEY → TF_VAR_api_key\ndoppler run --name-transformer lower-snake -- python app.py # API_KEY → api_key\n```\n\nAvailable transformers: `camel`, `upper-camel`, `lower-snake`, `tf-var`, `dotnet-env`, `lower-kebab`.\n\n### 11. Docker and Kubernetes integration\n\nPass secrets to Docker containers:\n\n```bash\ndocker run --env-file \u003C(doppler secrets download --no-file --format docker) my-app:latest\n```\n\nCreate a Kubernetes secret:\n\n```bash\nkubectl create secret generic app-secrets \\\n  --from-env-file \u003C(doppler secrets download --no-file --format docker)\n```\n\n## Examples\n\n### Example 1: Setting up a new microservice with Doppler\n\n**User request:** \"Set up Doppler for our Node.js order-service with dev and production configs\"\n\n**Actions:**\n```bash\ncd ~\u002Fprojects\u002Forder-service\ndoppler setup --project order-service --config dev --no-interactive\n\n# Set dev secrets\ndoppler secrets set \\\n  DATABASE_URL=\"postgresql:\u002F\u002Flocalhost:5432\u002Forders_dev\" \\\n  REDIS_URL=\"redis:\u002F\u002Flocalhost:6379\u002F0\" \\\n  STRIPE_KEY=\"sk_test_your_stripe_test_key_here\" \\\n  LOG_LEVEL=\"debug\" \\\n  -p order-service -c dev\n\n# Set production secrets\ndoppler secrets set \\\n  DATABASE_URL=\"postgresql:\u002F\u002Fdb.prod.internal:5432\u002Forders\" \\\n  REDIS_URL=\"redis:\u002F\u002Fredis.prod.internal:6379\u002F0\" \\\n  STRIPE_KEY=\"sk_live_51HG4...\" \\\n  LOG_LEVEL=\"warn\" \\\n  -p order-service -c prd\n\n# Run locally with dev secrets\ndoppler run -- npm run dev\n\n# Generate a production service token for CI\u002FCD\ndoppler configs tokens create railway-deploy -p order-service -c prd --max-age 720h --plain\n```\n\n### Example 2: Migrating secrets from .env files to Doppler\n\n**User request:** \"Migrate our auth-service .env secrets to Doppler\"\n\n**Actions:**\n```bash\ndoppler login\ndoppler secrets upload .env -p auth-service -c dev\ndoppler secrets -p auth-service -c dev               # verify import\n\n# Update start command: replace \"source .env && node server.js\" with:\ndoppler run -p auth-service -c dev -- node server.js\n\n# Remove .env from repo\necho \".env\" >> .gitignore\n```\n\nTeam members onboard with:\n```bash\ndoppler login && doppler setup && doppler run -- node server.js\n```\n\n## Guidelines\n\n- Always use `doppler run` to inject secrets rather than downloading to plain-text files. The `--mount` flag with named pipes is the most secure file-based option.\n- Use `doppler setup` in project directories so subsequent commands inherit the project\u002Fconfig context automatically.\n- Create service tokens with `--max-age` for CI\u002FCD pipelines instead of using personal auth tokens.\n- Use `--visibility restricted` for highly sensitive secrets like private keys and API credentials.\n- When piping secret values into files (e.g., `doppler secrets get KEY --plain > file`), set file permissions immediately: `chmod 600 file`.\n- Add `HISTIGNORE='*doppler secrets set*'` to your shell profile to prevent secrets from appearing in shell history.\n- Use name transformers (`--name-transformer`) when frameworks expect specific variable naming conventions.\n- For Kubernetes, prefer process substitution `\u003C(doppler secrets download ...)` over writing files to disk.\n- Use `--no-file --format` flags to pipe secret downloads directly to stdout without writing temporary files.\n- Run `doppler update` periodically to keep the CLI current.\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fdoppler",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":7,"skillName":5,"commands":37,"prompt":47,"zipAvailable":48},[38,41,44],{"tool":39,"command":40},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill doppler",{"tool":42,"command":43},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill doppler",{"tool":45,"command":46},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill doppler","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fdoppler\u002FSKILL.md",true,[],[51,63,73,82,88,95],{"skillNo":52,"name":53,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":59,"publishedAt":23},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[56],{"categoryNo":57,"categoryName":58,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":69,"publishedAt":23},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":57,"categoryName":58,"taxonomyType":20,"taxonomyTypeDesc":21},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":23},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":23},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":23},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":57,"categoryName":58,"taxonomyType":20,"taxonomyTypeDesc":21},[90],{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":23},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]