[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-sentry-sentry-otel-exporter-setup":3,"mdc-lcoo8-key":36,"related-org-sentry-sentry-otel-exporter-setup":2791,"related-repo-sentry-sentry-otel-exporter-setup":2971},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":31,"sourceUrl":34,"mdContent":35},"sentry-otel-exporter-setup","configure OpenTelemetry Collector with Sentry","Configure the OpenTelemetry Collector with Sentry Exporter for multi-project routing and automatic project creation. Use when setting up OTel with Sentry, configuring collector pipelines for traces and logs, or routing telemetry from multiple services to Sentry projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"sentry","Sentry","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fsentry.png","getsentry",[13,17,20,23],{"name":14,"slug":15,"type":16},"Observability","observability","tag",{"name":18,"slug":19,"type":16},"Monitoring","monitoring",{"name":21,"slug":22,"type":16},"OpenTelemetry","opentelemetry",{"name":9,"slug":8,"type":16},19,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fsentry-agent-skills","2026-07-18T05:47:19.56718","Apache-2.0",2,[30],"tag-production",{"repoUrl":25,"stars":24,"forks":28,"topics":32,"description":33},[30],null,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fsentry-agent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fsentry-otel-exporter-setup","---\nname: sentry-otel-exporter-setup\ndescription: Configure the OpenTelemetry Collector with Sentry Exporter for multi-project routing and automatic project creation. Use when setting up OTel with Sentry, configuring collector pipelines for traces and logs, or routing telemetry from multiple services to Sentry projects.\nlicense: Apache-2.0\n---\n\n# Sentry OTel Exporter Setup\n\n**Terminology**: Always capitalize \"Sentry Exporter\" when referring to the exporter component.\n\nConfigure the OpenTelemetry Collector to send traces and logs to Sentry using the Sentry Exporter.\n\n## Setup Overview\n\nCopy this checklist to track your progress:\n\n```\nOTel Exporter Setup:\n- [ ] Step 1: Check for existing configuration\n- [ ] Step 2: Check collector version and install if needed\n- [ ] Step 3: Configure project creation settings\n- [ ] Step 4: Write collector config\n- [ ] Step 5: Add environment variable placeholders\n- [ ] Step 6: Run the collector\n- [ ] Step 7: Verify setup\n```\n\n## Step 1: Check for Existing Configuration\n\nSearch for existing OpenTelemetry Collector configs by looking for YAML files containing `receivers:`. Also check for files named `otel-collector-config.*`, `collector-config.*`, or `otelcol.*`.\n\n**If an existing config is found**: Ask the user which approach they want:\n- **Modify existing config**: Add Sentry Exporter to the existing file (recommended to avoid duplicates)\n- **Create separate config**: Keep existing config unchanged and create a new one for testing\n\n**Wait for the user's answer and record their choice before proceeding to Step 2.** The rest of the workflow depends on this decision.\n\n**If no config exists**: Note that you'll create a new `collector-config.yaml` in Step 4, then proceed to Step 2.\n\n## Step 2: Check Collector Version\n\nThe Sentry Exporter requires **otelcol-contrib v0.145.0 or later**.\n\n### Check for existing collector\n\n1. Run `which otelcol-contrib` to check if it's on PATH, or check for `.\u002Fotelcol-contrib` in the project\n2. If found, run the appropriate version command and parse the version number\n3. **Record the collector path** (e.g., `otelcol-contrib` if on PATH, or `.\u002Fotelcol-contrib` if local) for use in later steps\n\n| Existing Version | Action |\n|------------------|--------|\n| ≥ 0.145.0 | Skip to Step 3 — existing collector is compatible |\n| \u003C 0.145.0 | Proceed with installation below |\n| Not installed | Proceed with installation below |\n\n### Installation\n\nAsk the user how they want to run the collector:\n- **Binary**: Download from GitHub releases. No Docker required.\n- **Docker**: Run as a container. Requires Docker installed.\n\n### Binary Installation\n\nFetch the latest release version from GitHub:\n```bash\ncurl -s https:\u002F\u002Fapi.github.com\u002Frepos\u002Fopen-telemetry\u002Fopentelemetry-collector-releases\u002Freleases\u002Flatest | grep '\"tag_name\"' | cut -d'\"' -f4\n```\n\n**Important**: The GitHub API returns versions with a `v` prefix (e.g., `v0.145.0`). The download URL path requires the full tag with `v` prefix, but the filename and Docker tags use the numeric version without the prefix (e.g., `0.145.0`).\n\nDetect the user's platform and download the binary:\n\n1. Run `uname -s` and `uname -m` to detect OS and architecture\n2. Map to release values:\n   - Darwin + arm64 → `darwin_arm64`\n   - Darwin + x86_64 → `darwin_amd64`\n   - Linux + x86_64 → `linux_amd64`\n   - Linux + aarch64 → `linux_arm64`\n3. Download and extract:\n```bash\ncurl -LO https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-collector-releases\u002Freleases\u002Fdownload\u002Fv\u003Cnumeric_version>\u002Fotelcol-contrib_\u003Cnumeric_version>_\u003Cos>_\u003Carch>.tar.gz\ntar -xzf otelcol-contrib_\u003Cnumeric_version>_\u003Cos>_\u003Carch>.tar.gz\nchmod +x otelcol-contrib\n```\n\nExample: For version `v0.145.0`, the URL uses `v0.145.0` in the path but `0.145.0` in the filename.\n\nPerform these steps for the user—do not just show them the commands.\n\n4. **Ask the user** if they want to delete the downloaded tarball to save disk space (~50MB):\n   - **Yes, delete it**: Remove the tarball\n   - **No, keep it**: Leave the tarball in place\n\n**Wait for the user's response.** Only delete if they explicitly choose to:\n```bash\nrm otelcol-contrib_\u003Cnumeric_version>_\u003Cos>_\u003Carch>.tar.gz\n```\n\n### Docker Installation\n\n1. Verify Docker is installed by running `docker --version`\n2. Fetch the latest release tag from GitHub (same as above)\n3. Pull the image using the numeric version (without `v` prefix):\n```bash\ndocker pull otel\u002Fopentelemetry-collector-contrib:\u003Cnumeric_version>\n```\n\nExample: For GitHub tag `v0.145.0`, use `docker pull otel\u002Fopentelemetry-collector-contrib:0.145.0`.\n\nThe `docker run` command comes later in Step 6 after the config is created.\n\n## Step 3: Configure Sentry Project Creation\n\nAsk the user whether to enable automatic Sentry project creation. Do not recommend either option:\n- **Yes**: Projects created from service.name. Requires at least one team in your Sentry org. All new projects are assigned to the first team found. Initial data may be dropped during creation.\n- **No**: Projects must exist in Sentry before telemetry arrives.\n\n**Wait for the user's answer before proceeding to Step 4.**\n\n**If user chooses Yes**: Warn them that the exporter will scan all projects and use the first team it finds. All auto-created projects will be assigned to that team. If they don't have any teams yet, they should create one in Sentry first.\n\n## Step 4: Write Collector Config\n\n**Use the decision from Step 1** - if the user chose to modify an existing config, edit that file. If they chose to create a separate config, create a new file. **Record the config file path** for use in Steps 5 and 6.\n\nFetch the latest configuration from the Sentry Exporter documentation:\n\n- **Example config** (use as template): `https:\u002F\u002Fraw.githubusercontent.com\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib\u002Fmain\u002Fexporter\u002Fsentryexporter\u002Fdocs\u002Fexample-config.yaml`\n- **Full spec** (all available options): `https:\u002F\u002Fraw.githubusercontent.com\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib\u002Fmain\u002Fexporter\u002Fsentryexporter\u002Fdocs\u002Fspec.md`\n\nUse WebFetch to retrieve the example config as a starting template. Reference the spec if the user needs advanced options not shown in the example.\n\n### If editing an existing config (per Step 1 decision)\n\nAdd the `sentry` exporter to the `exporters:` section and include it in the appropriate pipelines (`traces`, `logs`). Do not remove or modify other exporters unless the user requests it.\n\n### If creating a new config (per Step 1 decision)\n\nCreate `collector-config.yaml` based on the fetched example. Ensure credentials use environment variable references (`${env:SENTRY_ORG_SLUG}`, `${env:SENTRY_AUTH_TOKEN}`).\n\nIf user chose auto-create in Step 3, add `auto_create_projects: true` to the sentry exporter.\n\n### Add Debug Exporter (Recommended)\n\nFor troubleshooting during setup, add a `debug` exporter with `verbosity: detailed` to the pipelines. This logs all telemetry to console. Remove it once setup is verified.\n\n## Step 5: Add Environment Variable Placeholders\n\nThe Sentry Exporter requires two environment variables. You will add placeholder values that the user fills in themselves—never actual credentials.\n\n**Language constraint**: NEVER say \"add credentials\", \"add environment variables\", or \"add the token\" without explicitly stating these are **placeholders**. Always clarify the user fills them in later.\n\nDO NOT say:\n- \"Let me add the environment variables\"\n- \"I'll add the credentials to your .env\"\n- \"Adding the Sentry auth token\"\n\nSAY INSTEAD:\n- \"I'll add placeholder environment variables for you to fill in\"\n- \"Adding placeholder values—you'll replace these with your actual credentials\"\n- \"I'll set up the env var keys with placeholder values\"\n\nSearch for existing `.env` files in the project using glob `**\u002F.env`. **Always ask the user which file to use**—do not infer from context or guess based on open files.\n\nPresent the discovered options:\n- **[path to discovered .env file]**: Add to existing file (list each discovered path)\n- **Create new at root**: Create .env in project root\n\n**Wait for the user's explicit selection.** Do not proceed until they choose. Record the env file path for use in Steps 5 (validation) and 6 (running).\n\nAdd these placeholder values to the chosen file:\n\n```bash\nSENTRY_ORG_SLUG=your-org-slug\nSENTRY_AUTH_TOKEN=your-token-here\n```\n\nAfter adding the placeholders, tell the user how to get their real values from Sentry:\n\n1. **Sentry org slug**: In Sentry, go to **Settings → Organization Settings → Organization Slug**. This is also your subdomain (e.g., `myorg` in `https:\u002F\u002Fmyorg.sentry.io`)\n2. **Sentry auth token**: Create an Internal Integration in Sentry:\n   - In Sentry, go to **Settings → Developer Settings → Custom Integrations**\n   - Click **Create New Integration** → Choose **Internal Integration**\n   - Set permissions:\n     - **Organization: Read** — required\n     - **Project: Read** — required\n     - **Project: Write** — required only if using `auto_create_projects`\n   - Save, then click **Create New Token** and copy it\n\nEnsure the chosen `.env` file is in `.gitignore`.\n\n### Wait for user to set credentials\n\nAfter explaining how to get the values, ask the user to confirm when they've updated the `.env` file:\n- **Yes, credentials are set**: Proceed to validate and run the collector\n- **Not yet**: I'll wait while you update the .env file\n\nIf user selects \"Not yet\", wait and ask again. Do not proceed to Step 6 until credentials are confirmed.\n\n### Validate config\n\nOnce credentials are set, validate the configuration using the appropriate method based on the installation choice from Step 2.\n\n**Use the config file path from Step 1** (either the existing config you modified or the new `collector-config.yaml`).\n\n#### Binary validation\n\nUse the collector path recorded in Step 2 (either `otelcol-contrib` if on PATH, or `.\u002Fotelcol-contrib` if local).\n\n**Load environment variables first**, then run validation:\n\n```bash\nset -a && source \"\u003Cenv_file>\" && set +a && \"\u003Ccollector_path>\" validate --config \"\u003Cconfig_file>\"\n```\n\n#### Docker validation\n\n**Note**: Docker volume mounts require absolute paths. If `\u003Cconfig_file>` or `\u003Cenv_file>` are relative paths, prefix them with `$(pwd)\u002F`. If they're already absolute paths, use them directly.\n\n```bash\ndocker run --rm \\\n  -v \"\u003Cabsolute_config_path>\":\u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml \\\n  --env-file \"\u003Cenv_file>\" \\\n  otel\u002Fopentelemetry-collector-contrib:\u003Cnumeric_version> \\\n  validate --config \u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml\n```\n\nUse the `.env` file path chosen in Step 5.\n\n**If validation fails:**\n1. Review the error message carefully\n2. Fix the issues in the config file\n3. Run validation again\n4. Repeat until validation passes\n\n**Once validation passes**, ask the user if they're ready to run the collector:\n- **Yes, run it now**: Proceed to Step 6 and start the collector\n- **Not yet**: Wait. The user may want to review the config or prepare their environment first.\n\n**Wait for the user's confirmation before proceeding to Step 6.**\n\n## Step 6: Run the Collector\n\n**Only reach this step after the user confirms they're ready to run the collector.**\n\n**Give the user the run command but do not execute it automatically.** The user will run it themselves.\n\nProvide the appropriate command based on the installation method chosen in Step 2.\n\n**Use the actual paths chosen earlier:**\n- **Config file**: From Step 1 (existing config or new `collector-config.yaml`)\n- **Env file**: From Step 5 (the `.env` file the user selected)\n- **Collector path**: From Step 2 (either `otelcol-contrib` if on PATH, or `.\u002Fotelcol-contrib` if local)\n\n### Binary\n\n**Load environment variables first**, then run the collector:\n\n```bash\nset -a && source \"\u003Cenv_file>\" && set +a && \"\u003Ccollector_path>\" --config \"\u003Cconfig_file>\"\n```\n\n### Docker\n\n**Note**: Docker volume mounts require absolute paths. If `\u003Cconfig_file>` or `\u003Cenv_file>` are relative paths, prefix them with `$(pwd)\u002F`. If they're already absolute paths, use them directly.\n\n**If re-running**: Stop and remove any existing container first:\n```bash\ndocker stop otel-collector 2>\u002Fdev\u002Fnull; docker rm otel-collector 2>\u002Fdev\u002Fnull\n```\n\n```bash\ndocker run -d \\\n  --name otel-collector \\\n  -p 4317:4317 \\\n  -p 4318:4318 \\\n  -p 13133:13133 \\\n  -v \"\u003Cabsolute_config_path>\":\u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml \\\n  --env-file \"\u003Cenv_file>\" \\\n  otel\u002Fopentelemetry-collector-contrib:\u003Cnumeric_version>\n```\n\nUse the same numeric version (without `v` prefix) that was pulled in Step 2.\n\nAfter providing the command, tell the user to run it when they're ready, then proceed to Step 7 for verification.\n\n## Step 7: Verify Setup\n\n1. Check collector logs for successful startup (no errors about invalid config or failed connections)\n2. Look for log messages indicating connection to Sentry\n3. Send test telemetry from an instrumented service and verify it appears in Sentry\n\n**Success criteria:**\n- Collector starts without errors\n- Traces and\u002For logs appear in Sentry within 60 seconds of sending\n\nIf using Docker, check logs with `docker logs otel-collector`.\n\n## Troubleshooting\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| \"failed to create project\" | Missing Project:Write permission | Update Internal Integration permissions in Sentry |\n| \"no team found\" | No teams in org | Create a team in Sentry before enabling auto-create |\n| \"invalid auth token\" | Wrong token type or expired | Use Internal Integration token, not user auth token |\n| \"connection refused\" on 4317\u002F4318 | Collector not running or port conflict | Check collector logs and ensure ports are available |\n| Validation fails with env var errors | .env file not loaded or placeholders not replaced | Ensure real credentials are in .env and the file is sourced |\n| \"container name already in use\" | Previous container exists | Run `docker stop otel-collector && docker rm otel-collector` |\n",{"data":37,"body":38},{"name":4,"description":6,"license":27},{"type":39,"children":40},"root",[41,49,61,66,73,78,91,97,134,144,169,179,197,203,214,221,276,342,348,353,376,382,387,477,518,523,603,816,842,847,884,894,973,979,1010,1052,1071,1084,1090,1095,1118,1126,1136,1142,1159,1164,1199,1204,1210,1245,1251,1277,1290,1296,1317,1323,1328,1345,1350,1368,1373,1391,1419,1424,1450,1460,1465,1507,1512,1643,1662,1668,1680,1703,1708,1714,1719,1735,1742,1760,1770,1862,1868,1900,2029,2041,2049,2072,2082,2104,2112,2118,2126,2136,2141,2149,2208,2213,2222,2296,2300,2326,2336,2398,2565,2577,2582,2588,2606,2614,2627,2639,2645,2785],{"type":42,"tag":43,"props":44,"children":45},"element","h1",{"id":4},[46],{"type":47,"value":48},"text","Sentry OTel Exporter Setup",{"type":42,"tag":50,"props":51,"children":52},"p",{},[53,59],{"type":42,"tag":54,"props":55,"children":56},"strong",{},[57],{"type":47,"value":58},"Terminology",{"type":47,"value":60},": Always capitalize \"Sentry Exporter\" when referring to the exporter component.",{"type":42,"tag":50,"props":62,"children":63},{},[64],{"type":47,"value":65},"Configure the OpenTelemetry Collector to send traces and logs to Sentry using the Sentry Exporter.",{"type":42,"tag":67,"props":68,"children":70},"h2",{"id":69},"setup-overview",[71],{"type":47,"value":72},"Setup Overview",{"type":42,"tag":50,"props":74,"children":75},{},[76],{"type":47,"value":77},"Copy this checklist to track your progress:",{"type":42,"tag":79,"props":80,"children":84},"pre",{"className":81,"code":83,"language":47},[82],"language-text","OTel Exporter Setup:\n- [ ] Step 1: Check for existing configuration\n- [ ] Step 2: Check collector version and install if needed\n- [ ] Step 3: Configure project creation settings\n- [ ] Step 4: Write collector config\n- [ ] Step 5: Add environment variable placeholders\n- [ ] Step 6: Run the collector\n- [ ] Step 7: Verify setup\n",[85],{"type":42,"tag":86,"props":87,"children":89},"code",{"__ignoreMap":88},"",[90],{"type":47,"value":83},{"type":42,"tag":67,"props":92,"children":94},{"id":93},"step-1-check-for-existing-configuration",[95],{"type":47,"value":96},"Step 1: Check for Existing Configuration",{"type":42,"tag":50,"props":98,"children":99},{},[100,102,108,110,116,118,124,126,132],{"type":47,"value":101},"Search for existing OpenTelemetry Collector configs by looking for YAML files containing ",{"type":42,"tag":86,"props":103,"children":105},{"className":104},[],[106],{"type":47,"value":107},"receivers:",{"type":47,"value":109},". Also check for files named ",{"type":42,"tag":86,"props":111,"children":113},{"className":112},[],[114],{"type":47,"value":115},"otel-collector-config.*",{"type":47,"value":117},", ",{"type":42,"tag":86,"props":119,"children":121},{"className":120},[],[122],{"type":47,"value":123},"collector-config.*",{"type":47,"value":125},", or ",{"type":42,"tag":86,"props":127,"children":129},{"className":128},[],[130],{"type":47,"value":131},"otelcol.*",{"type":47,"value":133},".",{"type":42,"tag":50,"props":135,"children":136},{},[137,142],{"type":42,"tag":54,"props":138,"children":139},{},[140],{"type":47,"value":141},"If an existing config is found",{"type":47,"value":143},": Ask the user which approach they want:",{"type":42,"tag":145,"props":146,"children":147},"ul",{},[148,159],{"type":42,"tag":149,"props":150,"children":151},"li",{},[152,157],{"type":42,"tag":54,"props":153,"children":154},{},[155],{"type":47,"value":156},"Modify existing config",{"type":47,"value":158},": Add Sentry Exporter to the existing file (recommended to avoid duplicates)",{"type":42,"tag":149,"props":160,"children":161},{},[162,167],{"type":42,"tag":54,"props":163,"children":164},{},[165],{"type":47,"value":166},"Create separate config",{"type":47,"value":168},": Keep existing config unchanged and create a new one for testing",{"type":42,"tag":50,"props":170,"children":171},{},[172,177],{"type":42,"tag":54,"props":173,"children":174},{},[175],{"type":47,"value":176},"Wait for the user's answer and record their choice before proceeding to Step 2.",{"type":47,"value":178}," The rest of the workflow depends on this decision.",{"type":42,"tag":50,"props":180,"children":181},{},[182,187,189,195],{"type":42,"tag":54,"props":183,"children":184},{},[185],{"type":47,"value":186},"If no config exists",{"type":47,"value":188},": Note that you'll create a new ",{"type":42,"tag":86,"props":190,"children":192},{"className":191},[],[193],{"type":47,"value":194},"collector-config.yaml",{"type":47,"value":196}," in Step 4, then proceed to Step 2.",{"type":42,"tag":67,"props":198,"children":200},{"id":199},"step-2-check-collector-version",[201],{"type":47,"value":202},"Step 2: Check Collector Version",{"type":42,"tag":50,"props":204,"children":205},{},[206,208,213],{"type":47,"value":207},"The Sentry Exporter requires ",{"type":42,"tag":54,"props":209,"children":210},{},[211],{"type":47,"value":212},"otelcol-contrib v0.145.0 or later",{"type":47,"value":133},{"type":42,"tag":215,"props":216,"children":218},"h3",{"id":217},"check-for-existing-collector",[219],{"type":47,"value":220},"Check for existing collector",{"type":42,"tag":222,"props":223,"children":224},"ol",{},[225,246,251],{"type":42,"tag":149,"props":226,"children":227},{},[228,230,236,238,244],{"type":47,"value":229},"Run ",{"type":42,"tag":86,"props":231,"children":233},{"className":232},[],[234],{"type":47,"value":235},"which otelcol-contrib",{"type":47,"value":237}," to check if it's on PATH, or check for ",{"type":42,"tag":86,"props":239,"children":241},{"className":240},[],[242],{"type":47,"value":243},".\u002Fotelcol-contrib",{"type":47,"value":245}," in the project",{"type":42,"tag":149,"props":247,"children":248},{},[249],{"type":47,"value":250},"If found, run the appropriate version command and parse the version number",{"type":42,"tag":149,"props":252,"children":253},{},[254,259,261,267,269,274],{"type":42,"tag":54,"props":255,"children":256},{},[257],{"type":47,"value":258},"Record the collector path",{"type":47,"value":260}," (e.g., ",{"type":42,"tag":86,"props":262,"children":264},{"className":263},[],[265],{"type":47,"value":266},"otelcol-contrib",{"type":47,"value":268}," if on PATH, or ",{"type":42,"tag":86,"props":270,"children":272},{"className":271},[],[273],{"type":47,"value":243},{"type":47,"value":275}," if local) for use in later steps",{"type":42,"tag":277,"props":278,"children":279},"table",{},[280,299],{"type":42,"tag":281,"props":282,"children":283},"thead",{},[284],{"type":42,"tag":285,"props":286,"children":287},"tr",{},[288,294],{"type":42,"tag":289,"props":290,"children":291},"th",{},[292],{"type":47,"value":293},"Existing Version",{"type":42,"tag":289,"props":295,"children":296},{},[297],{"type":47,"value":298},"Action",{"type":42,"tag":300,"props":301,"children":302},"tbody",{},[303,317,330],{"type":42,"tag":285,"props":304,"children":305},{},[306,312],{"type":42,"tag":307,"props":308,"children":309},"td",{},[310],{"type":47,"value":311},"≥ 0.145.0",{"type":42,"tag":307,"props":313,"children":314},{},[315],{"type":47,"value":316},"Skip to Step 3 — existing collector is compatible",{"type":42,"tag":285,"props":318,"children":319},{},[320,325],{"type":42,"tag":307,"props":321,"children":322},{},[323],{"type":47,"value":324},"\u003C 0.145.0",{"type":42,"tag":307,"props":326,"children":327},{},[328],{"type":47,"value":329},"Proceed with installation below",{"type":42,"tag":285,"props":331,"children":332},{},[333,338],{"type":42,"tag":307,"props":334,"children":335},{},[336],{"type":47,"value":337},"Not installed",{"type":42,"tag":307,"props":339,"children":340},{},[341],{"type":47,"value":329},{"type":42,"tag":215,"props":343,"children":345},{"id":344},"installation",[346],{"type":47,"value":347},"Installation",{"type":42,"tag":50,"props":349,"children":350},{},[351],{"type":47,"value":352},"Ask the user how they want to run the collector:",{"type":42,"tag":145,"props":354,"children":355},{},[356,366],{"type":42,"tag":149,"props":357,"children":358},{},[359,364],{"type":42,"tag":54,"props":360,"children":361},{},[362],{"type":47,"value":363},"Binary",{"type":47,"value":365},": Download from GitHub releases. No Docker required.",{"type":42,"tag":149,"props":367,"children":368},{},[369,374],{"type":42,"tag":54,"props":370,"children":371},{},[372],{"type":47,"value":373},"Docker",{"type":47,"value":375},": Run as a container. Requires Docker installed.",{"type":42,"tag":215,"props":377,"children":379},{"id":378},"binary-installation",[380],{"type":47,"value":381},"Binary Installation",{"type":42,"tag":50,"props":383,"children":384},{},[385],{"type":47,"value":386},"Fetch the latest release version from GitHub:",{"type":42,"tag":79,"props":388,"children":392},{"className":389,"code":390,"language":391,"meta":88,"style":88},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -s https:\u002F\u002Fapi.github.com\u002Frepos\u002Fopen-telemetry\u002Fopentelemetry-collector-releases\u002Freleases\u002Flatest | grep '\"tag_name\"' | cut -d'\"' -f4\n","bash",[393],{"type":42,"tag":86,"props":394,"children":395},{"__ignoreMap":88},[396],{"type":42,"tag":397,"props":398,"children":401},"span",{"class":399,"line":400},"line",1,[402,408,414,419,425,430,435,440,445,449,454,459,463,468,472],{"type":42,"tag":397,"props":403,"children":405},{"style":404},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[406],{"type":47,"value":407},"curl",{"type":42,"tag":397,"props":409,"children":411},{"style":410},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[412],{"type":47,"value":413}," -s",{"type":42,"tag":397,"props":415,"children":416},{"style":410},[417],{"type":47,"value":418}," https:\u002F\u002Fapi.github.com\u002Frepos\u002Fopen-telemetry\u002Fopentelemetry-collector-releases\u002Freleases\u002Flatest",{"type":42,"tag":397,"props":420,"children":422},{"style":421},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[423],{"type":47,"value":424}," |",{"type":42,"tag":397,"props":426,"children":427},{"style":404},[428],{"type":47,"value":429}," grep",{"type":42,"tag":397,"props":431,"children":432},{"style":421},[433],{"type":47,"value":434}," '",{"type":42,"tag":397,"props":436,"children":437},{"style":410},[438],{"type":47,"value":439},"\"tag_name\"",{"type":42,"tag":397,"props":441,"children":442},{"style":421},[443],{"type":47,"value":444},"'",{"type":42,"tag":397,"props":446,"children":447},{"style":421},[448],{"type":47,"value":424},{"type":42,"tag":397,"props":450,"children":451},{"style":404},[452],{"type":47,"value":453}," cut",{"type":42,"tag":397,"props":455,"children":456},{"style":410},[457],{"type":47,"value":458}," -d",{"type":42,"tag":397,"props":460,"children":461},{"style":421},[462],{"type":47,"value":444},{"type":42,"tag":397,"props":464,"children":465},{"style":410},[466],{"type":47,"value":467},"\"",{"type":42,"tag":397,"props":469,"children":470},{"style":421},[471],{"type":47,"value":444},{"type":42,"tag":397,"props":473,"children":474},{"style":410},[475],{"type":47,"value":476}," -f4\n",{"type":42,"tag":50,"props":478,"children":479},{},[480,485,487,493,495,501,503,508,510,516],{"type":42,"tag":54,"props":481,"children":482},{},[483],{"type":47,"value":484},"Important",{"type":47,"value":486},": The GitHub API returns versions with a ",{"type":42,"tag":86,"props":488,"children":490},{"className":489},[],[491],{"type":47,"value":492},"v",{"type":47,"value":494}," prefix (e.g., ",{"type":42,"tag":86,"props":496,"children":498},{"className":497},[],[499],{"type":47,"value":500},"v0.145.0",{"type":47,"value":502},"). The download URL path requires the full tag with ",{"type":42,"tag":86,"props":504,"children":506},{"className":505},[],[507],{"type":47,"value":492},{"type":47,"value":509}," prefix, but the filename and Docker tags use the numeric version without the prefix (e.g., ",{"type":42,"tag":86,"props":511,"children":513},{"className":512},[],[514],{"type":47,"value":515},"0.145.0",{"type":47,"value":517},").",{"type":42,"tag":50,"props":519,"children":520},{},[521],{"type":47,"value":522},"Detect the user's platform and download the binary:",{"type":42,"tag":222,"props":524,"children":525},{},[526,546,598],{"type":42,"tag":149,"props":527,"children":528},{},[529,530,536,538,544],{"type":47,"value":229},{"type":42,"tag":86,"props":531,"children":533},{"className":532},[],[534],{"type":47,"value":535},"uname -s",{"type":47,"value":537}," and ",{"type":42,"tag":86,"props":539,"children":541},{"className":540},[],[542],{"type":47,"value":543},"uname -m",{"type":47,"value":545}," to detect OS and architecture",{"type":42,"tag":149,"props":547,"children":548},{},[549,551],{"type":47,"value":550},"Map to release values:\n",{"type":42,"tag":145,"props":552,"children":553},{},[554,565,576,587],{"type":42,"tag":149,"props":555,"children":556},{},[557,559],{"type":47,"value":558},"Darwin + arm64 → ",{"type":42,"tag":86,"props":560,"children":562},{"className":561},[],[563],{"type":47,"value":564},"darwin_arm64",{"type":42,"tag":149,"props":566,"children":567},{},[568,570],{"type":47,"value":569},"Darwin + x86_64 → ",{"type":42,"tag":86,"props":571,"children":573},{"className":572},[],[574],{"type":47,"value":575},"darwin_amd64",{"type":42,"tag":149,"props":577,"children":578},{},[579,581],{"type":47,"value":580},"Linux + x86_64 → ",{"type":42,"tag":86,"props":582,"children":584},{"className":583},[],[585],{"type":47,"value":586},"linux_amd64",{"type":42,"tag":149,"props":588,"children":589},{},[590,592],{"type":47,"value":591},"Linux + aarch64 → ",{"type":42,"tag":86,"props":593,"children":595},{"className":594},[],[596],{"type":47,"value":597},"linux_arm64",{"type":42,"tag":149,"props":599,"children":600},{},[601],{"type":47,"value":602},"Download and extract:",{"type":42,"tag":79,"props":604,"children":606},{"className":389,"code":605,"language":391,"meta":88,"style":88},"curl -LO https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-collector-releases\u002Freleases\u002Fdownload\u002Fv\u003Cnumeric_version>\u002Fotelcol-contrib_\u003Cnumeric_version>_\u003Cos>_\u003Carch>.tar.gz\ntar -xzf otelcol-contrib_\u003Cnumeric_version>_\u003Cos>_\u003Carch>.tar.gz\nchmod +x otelcol-contrib\n",[607],{"type":42,"tag":86,"props":608,"children":609},{"__ignoreMap":88},[610,719,797],{"type":42,"tag":397,"props":611,"children":612},{"class":399,"line":400},[613,617,622,627,632,637,643,648,653,657,661,665,669,674,678,683,688,692,696,700,705,710,714],{"type":42,"tag":397,"props":614,"children":615},{"style":404},[616],{"type":47,"value":407},{"type":42,"tag":397,"props":618,"children":619},{"style":410},[620],{"type":47,"value":621}," -LO",{"type":42,"tag":397,"props":623,"children":624},{"style":410},[625],{"type":47,"value":626}," https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-collector-releases\u002Freleases\u002Fdownload\u002Fv",{"type":42,"tag":397,"props":628,"children":629},{"style":421},[630],{"type":47,"value":631},"\u003C",{"type":42,"tag":397,"props":633,"children":634},{"style":410},[635],{"type":47,"value":636},"numeric_versio",{"type":42,"tag":397,"props":638,"children":640},{"style":639},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[641],{"type":47,"value":642},"n",{"type":42,"tag":397,"props":644,"children":645},{"style":421},[646],{"type":47,"value":647},">",{"type":42,"tag":397,"props":649,"children":650},{"style":410},[651],{"type":47,"value":652},"\u002Fotelcol-contrib_",{"type":42,"tag":397,"props":654,"children":655},{"style":421},[656],{"type":47,"value":631},{"type":42,"tag":397,"props":658,"children":659},{"style":410},[660],{"type":47,"value":636},{"type":42,"tag":397,"props":662,"children":663},{"style":639},[664],{"type":47,"value":642},{"type":42,"tag":397,"props":666,"children":667},{"style":421},[668],{"type":47,"value":647},{"type":42,"tag":397,"props":670,"children":671},{"style":410},[672],{"type":47,"value":673},"_",{"type":42,"tag":397,"props":675,"children":676},{"style":421},[677],{"type":47,"value":631},{"type":42,"tag":397,"props":679,"children":680},{"style":410},[681],{"type":47,"value":682},"o",{"type":42,"tag":397,"props":684,"children":685},{"style":639},[686],{"type":47,"value":687},"s",{"type":42,"tag":397,"props":689,"children":690},{"style":421},[691],{"type":47,"value":647},{"type":42,"tag":397,"props":693,"children":694},{"style":410},[695],{"type":47,"value":673},{"type":42,"tag":397,"props":697,"children":698},{"style":421},[699],{"type":47,"value":631},{"type":42,"tag":397,"props":701,"children":702},{"style":410},[703],{"type":47,"value":704},"arc",{"type":42,"tag":397,"props":706,"children":707},{"style":639},[708],{"type":47,"value":709},"h",{"type":42,"tag":397,"props":711,"children":712},{"style":421},[713],{"type":47,"value":647},{"type":42,"tag":397,"props":715,"children":716},{"style":410},[717],{"type":47,"value":718},".tar.gz\n",{"type":42,"tag":397,"props":720,"children":721},{"class":399,"line":28},[722,727,732,737,741,745,749,753,757,761,765,769,773,777,781,785,789,793],{"type":42,"tag":397,"props":723,"children":724},{"style":404},[725],{"type":47,"value":726},"tar",{"type":42,"tag":397,"props":728,"children":729},{"style":410},[730],{"type":47,"value":731}," -xzf",{"type":42,"tag":397,"props":733,"children":734},{"style":410},[735],{"type":47,"value":736}," otelcol-contrib_",{"type":42,"tag":397,"props":738,"children":739},{"style":421},[740],{"type":47,"value":631},{"type":42,"tag":397,"props":742,"children":743},{"style":410},[744],{"type":47,"value":636},{"type":42,"tag":397,"props":746,"children":747},{"style":639},[748],{"type":47,"value":642},{"type":42,"tag":397,"props":750,"children":751},{"style":421},[752],{"type":47,"value":647},{"type":42,"tag":397,"props":754,"children":755},{"style":410},[756],{"type":47,"value":673},{"type":42,"tag":397,"props":758,"children":759},{"style":421},[760],{"type":47,"value":631},{"type":42,"tag":397,"props":762,"children":763},{"style":410},[764],{"type":47,"value":682},{"type":42,"tag":397,"props":766,"children":767},{"style":639},[768],{"type":47,"value":687},{"type":42,"tag":397,"props":770,"children":771},{"style":421},[772],{"type":47,"value":647},{"type":42,"tag":397,"props":774,"children":775},{"style":410},[776],{"type":47,"value":673},{"type":42,"tag":397,"props":778,"children":779},{"style":421},[780],{"type":47,"value":631},{"type":42,"tag":397,"props":782,"children":783},{"style":410},[784],{"type":47,"value":704},{"type":42,"tag":397,"props":786,"children":787},{"style":639},[788],{"type":47,"value":709},{"type":42,"tag":397,"props":790,"children":791},{"style":421},[792],{"type":47,"value":647},{"type":42,"tag":397,"props":794,"children":795},{"style":410},[796],{"type":47,"value":718},{"type":42,"tag":397,"props":798,"children":800},{"class":399,"line":799},3,[801,806,811],{"type":42,"tag":397,"props":802,"children":803},{"style":404},[804],{"type":47,"value":805},"chmod",{"type":42,"tag":397,"props":807,"children":808},{"style":410},[809],{"type":47,"value":810}," +x",{"type":42,"tag":397,"props":812,"children":813},{"style":410},[814],{"type":47,"value":815}," otelcol-contrib\n",{"type":42,"tag":50,"props":817,"children":818},{},[819,821,826,828,833,835,840],{"type":47,"value":820},"Example: For version ",{"type":42,"tag":86,"props":822,"children":824},{"className":823},[],[825],{"type":47,"value":500},{"type":47,"value":827},", the URL uses ",{"type":42,"tag":86,"props":829,"children":831},{"className":830},[],[832],{"type":47,"value":500},{"type":47,"value":834}," in the path but ",{"type":42,"tag":86,"props":836,"children":838},{"className":837},[],[839],{"type":47,"value":515},{"type":47,"value":841}," in the filename.",{"type":42,"tag":50,"props":843,"children":844},{},[845],{"type":47,"value":846},"Perform these steps for the user—do not just show them the commands.",{"type":42,"tag":222,"props":848,"children":850},{"start":849},4,[851],{"type":42,"tag":149,"props":852,"children":853},{},[854,859,861],{"type":42,"tag":54,"props":855,"children":856},{},[857],{"type":47,"value":858},"Ask the user",{"type":47,"value":860}," if they want to delete the downloaded tarball to save disk space (~50MB):\n",{"type":42,"tag":145,"props":862,"children":863},{},[864,874],{"type":42,"tag":149,"props":865,"children":866},{},[867,872],{"type":42,"tag":54,"props":868,"children":869},{},[870],{"type":47,"value":871},"Yes, delete it",{"type":47,"value":873},": Remove the tarball",{"type":42,"tag":149,"props":875,"children":876},{},[877,882],{"type":42,"tag":54,"props":878,"children":879},{},[880],{"type":47,"value":881},"No, keep it",{"type":47,"value":883},": Leave the tarball in place",{"type":42,"tag":50,"props":885,"children":886},{},[887,892],{"type":42,"tag":54,"props":888,"children":889},{},[890],{"type":47,"value":891},"Wait for the user's response.",{"type":47,"value":893}," Only delete if they explicitly choose to:",{"type":42,"tag":79,"props":895,"children":897},{"className":389,"code":896,"language":391,"meta":88,"style":88},"rm otelcol-contrib_\u003Cnumeric_version>_\u003Cos>_\u003Carch>.tar.gz\n",[898],{"type":42,"tag":86,"props":899,"children":900},{"__ignoreMap":88},[901],{"type":42,"tag":397,"props":902,"children":903},{"class":399,"line":400},[904,909,913,917,921,925,929,933,937,941,945,949,953,957,961,965,969],{"type":42,"tag":397,"props":905,"children":906},{"style":404},[907],{"type":47,"value":908},"rm",{"type":42,"tag":397,"props":910,"children":911},{"style":410},[912],{"type":47,"value":736},{"type":42,"tag":397,"props":914,"children":915},{"style":421},[916],{"type":47,"value":631},{"type":42,"tag":397,"props":918,"children":919},{"style":410},[920],{"type":47,"value":636},{"type":42,"tag":397,"props":922,"children":923},{"style":639},[924],{"type":47,"value":642},{"type":42,"tag":397,"props":926,"children":927},{"style":421},[928],{"type":47,"value":647},{"type":42,"tag":397,"props":930,"children":931},{"style":410},[932],{"type":47,"value":673},{"type":42,"tag":397,"props":934,"children":935},{"style":421},[936],{"type":47,"value":631},{"type":42,"tag":397,"props":938,"children":939},{"style":410},[940],{"type":47,"value":682},{"type":42,"tag":397,"props":942,"children":943},{"style":639},[944],{"type":47,"value":687},{"type":42,"tag":397,"props":946,"children":947},{"style":421},[948],{"type":47,"value":647},{"type":42,"tag":397,"props":950,"children":951},{"style":410},[952],{"type":47,"value":673},{"type":42,"tag":397,"props":954,"children":955},{"style":421},[956],{"type":47,"value":631},{"type":42,"tag":397,"props":958,"children":959},{"style":410},[960],{"type":47,"value":704},{"type":42,"tag":397,"props":962,"children":963},{"style":639},[964],{"type":47,"value":709},{"type":42,"tag":397,"props":966,"children":967},{"style":421},[968],{"type":47,"value":647},{"type":42,"tag":397,"props":970,"children":971},{"style":410},[972],{"type":47,"value":718},{"type":42,"tag":215,"props":974,"children":976},{"id":975},"docker-installation",[977],{"type":47,"value":978},"Docker Installation",{"type":42,"tag":222,"props":980,"children":981},{},[982,993,998],{"type":42,"tag":149,"props":983,"children":984},{},[985,987],{"type":47,"value":986},"Verify Docker is installed by running ",{"type":42,"tag":86,"props":988,"children":990},{"className":989},[],[991],{"type":47,"value":992},"docker --version",{"type":42,"tag":149,"props":994,"children":995},{},[996],{"type":47,"value":997},"Fetch the latest release tag from GitHub (same as above)",{"type":42,"tag":149,"props":999,"children":1000},{},[1001,1003,1008],{"type":47,"value":1002},"Pull the image using the numeric version (without ",{"type":42,"tag":86,"props":1004,"children":1006},{"className":1005},[],[1007],{"type":47,"value":492},{"type":47,"value":1009}," prefix):",{"type":42,"tag":79,"props":1011,"children":1013},{"className":389,"code":1012,"language":391,"meta":88,"style":88},"docker pull otel\u002Fopentelemetry-collector-contrib:\u003Cnumeric_version>\n",[1014],{"type":42,"tag":86,"props":1015,"children":1016},{"__ignoreMap":88},[1017],{"type":42,"tag":397,"props":1018,"children":1019},{"class":399,"line":400},[1020,1025,1030,1035,1039,1043,1047],{"type":42,"tag":397,"props":1021,"children":1022},{"style":404},[1023],{"type":47,"value":1024},"docker",{"type":42,"tag":397,"props":1026,"children":1027},{"style":410},[1028],{"type":47,"value":1029}," pull",{"type":42,"tag":397,"props":1031,"children":1032},{"style":410},[1033],{"type":47,"value":1034}," otel\u002Fopentelemetry-collector-contrib:",{"type":42,"tag":397,"props":1036,"children":1037},{"style":421},[1038],{"type":47,"value":631},{"type":42,"tag":397,"props":1040,"children":1041},{"style":410},[1042],{"type":47,"value":636},{"type":42,"tag":397,"props":1044,"children":1045},{"style":639},[1046],{"type":47,"value":642},{"type":42,"tag":397,"props":1048,"children":1049},{"style":421},[1050],{"type":47,"value":1051},">\n",{"type":42,"tag":50,"props":1053,"children":1054},{},[1055,1057,1062,1064,1070],{"type":47,"value":1056},"Example: For GitHub tag ",{"type":42,"tag":86,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":47,"value":500},{"type":47,"value":1063},", use ",{"type":42,"tag":86,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":47,"value":1069},"docker pull otel\u002Fopentelemetry-collector-contrib:0.145.0",{"type":47,"value":133},{"type":42,"tag":50,"props":1072,"children":1073},{},[1074,1076,1082],{"type":47,"value":1075},"The ",{"type":42,"tag":86,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":47,"value":1081},"docker run",{"type":47,"value":1083}," command comes later in Step 6 after the config is created.",{"type":42,"tag":67,"props":1085,"children":1087},{"id":1086},"step-3-configure-sentry-project-creation",[1088],{"type":47,"value":1089},"Step 3: Configure Sentry Project Creation",{"type":42,"tag":50,"props":1091,"children":1092},{},[1093],{"type":47,"value":1094},"Ask the user whether to enable automatic Sentry project creation. Do not recommend either option:",{"type":42,"tag":145,"props":1096,"children":1097},{},[1098,1108],{"type":42,"tag":149,"props":1099,"children":1100},{},[1101,1106],{"type":42,"tag":54,"props":1102,"children":1103},{},[1104],{"type":47,"value":1105},"Yes",{"type":47,"value":1107},": Projects created from service.name. Requires at least one team in your Sentry org. All new projects are assigned to the first team found. Initial data may be dropped during creation.",{"type":42,"tag":149,"props":1109,"children":1110},{},[1111,1116],{"type":42,"tag":54,"props":1112,"children":1113},{},[1114],{"type":47,"value":1115},"No",{"type":47,"value":1117},": Projects must exist in Sentry before telemetry arrives.",{"type":42,"tag":50,"props":1119,"children":1120},{},[1121],{"type":42,"tag":54,"props":1122,"children":1123},{},[1124],{"type":47,"value":1125},"Wait for the user's answer before proceeding to Step 4.",{"type":42,"tag":50,"props":1127,"children":1128},{},[1129,1134],{"type":42,"tag":54,"props":1130,"children":1131},{},[1132],{"type":47,"value":1133},"If user chooses Yes",{"type":47,"value":1135},": Warn them that the exporter will scan all projects and use the first team it finds. All auto-created projects will be assigned to that team. If they don't have any teams yet, they should create one in Sentry first.",{"type":42,"tag":67,"props":1137,"children":1139},{"id":1138},"step-4-write-collector-config",[1140],{"type":47,"value":1141},"Step 4: Write Collector Config",{"type":42,"tag":50,"props":1143,"children":1144},{},[1145,1150,1152,1157],{"type":42,"tag":54,"props":1146,"children":1147},{},[1148],{"type":47,"value":1149},"Use the decision from Step 1",{"type":47,"value":1151}," - if the user chose to modify an existing config, edit that file. If they chose to create a separate config, create a new file. ",{"type":42,"tag":54,"props":1153,"children":1154},{},[1155],{"type":47,"value":1156},"Record the config file path",{"type":47,"value":1158}," for use in Steps 5 and 6.",{"type":42,"tag":50,"props":1160,"children":1161},{},[1162],{"type":47,"value":1163},"Fetch the latest configuration from the Sentry Exporter documentation:",{"type":42,"tag":145,"props":1165,"children":1166},{},[1167,1183],{"type":42,"tag":149,"props":1168,"children":1169},{},[1170,1175,1177],{"type":42,"tag":54,"props":1171,"children":1172},{},[1173],{"type":47,"value":1174},"Example config",{"type":47,"value":1176}," (use as template): ",{"type":42,"tag":86,"props":1178,"children":1180},{"className":1179},[],[1181],{"type":47,"value":1182},"https:\u002F\u002Fraw.githubusercontent.com\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib\u002Fmain\u002Fexporter\u002Fsentryexporter\u002Fdocs\u002Fexample-config.yaml",{"type":42,"tag":149,"props":1184,"children":1185},{},[1186,1191,1193],{"type":42,"tag":54,"props":1187,"children":1188},{},[1189],{"type":47,"value":1190},"Full spec",{"type":47,"value":1192}," (all available options): ",{"type":42,"tag":86,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":47,"value":1198},"https:\u002F\u002Fraw.githubusercontent.com\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib\u002Fmain\u002Fexporter\u002Fsentryexporter\u002Fdocs\u002Fspec.md",{"type":42,"tag":50,"props":1200,"children":1201},{},[1202],{"type":47,"value":1203},"Use WebFetch to retrieve the example config as a starting template. Reference the spec if the user needs advanced options not shown in the example.",{"type":42,"tag":215,"props":1205,"children":1207},{"id":1206},"if-editing-an-existing-config-per-step-1-decision",[1208],{"type":47,"value":1209},"If editing an existing config (per Step 1 decision)",{"type":42,"tag":50,"props":1211,"children":1212},{},[1213,1215,1220,1222,1228,1230,1236,1237,1243],{"type":47,"value":1214},"Add the ",{"type":42,"tag":86,"props":1216,"children":1218},{"className":1217},[],[1219],{"type":47,"value":8},{"type":47,"value":1221}," exporter to the ",{"type":42,"tag":86,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":47,"value":1227},"exporters:",{"type":47,"value":1229}," section and include it in the appropriate pipelines (",{"type":42,"tag":86,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":47,"value":1235},"traces",{"type":47,"value":117},{"type":42,"tag":86,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":47,"value":1242},"logs",{"type":47,"value":1244},"). Do not remove or modify other exporters unless the user requests it.",{"type":42,"tag":215,"props":1246,"children":1248},{"id":1247},"if-creating-a-new-config-per-step-1-decision",[1249],{"type":47,"value":1250},"If creating a new config (per Step 1 decision)",{"type":42,"tag":50,"props":1252,"children":1253},{},[1254,1256,1261,1263,1269,1270,1276],{"type":47,"value":1255},"Create ",{"type":42,"tag":86,"props":1257,"children":1259},{"className":1258},[],[1260],{"type":47,"value":194},{"type":47,"value":1262}," based on the fetched example. Ensure credentials use environment variable references (",{"type":42,"tag":86,"props":1264,"children":1266},{"className":1265},[],[1267],{"type":47,"value":1268},"${env:SENTRY_ORG_SLUG}",{"type":47,"value":117},{"type":42,"tag":86,"props":1271,"children":1273},{"className":1272},[],[1274],{"type":47,"value":1275},"${env:SENTRY_AUTH_TOKEN}",{"type":47,"value":517},{"type":42,"tag":50,"props":1278,"children":1279},{},[1280,1282,1288],{"type":47,"value":1281},"If user chose auto-create in Step 3, add ",{"type":42,"tag":86,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":47,"value":1287},"auto_create_projects: true",{"type":47,"value":1289}," to the sentry exporter.",{"type":42,"tag":215,"props":1291,"children":1293},{"id":1292},"add-debug-exporter-recommended",[1294],{"type":47,"value":1295},"Add Debug Exporter (Recommended)",{"type":42,"tag":50,"props":1297,"children":1298},{},[1299,1301,1307,1309,1315],{"type":47,"value":1300},"For troubleshooting during setup, add a ",{"type":42,"tag":86,"props":1302,"children":1304},{"className":1303},[],[1305],{"type":47,"value":1306},"debug",{"type":47,"value":1308}," exporter with ",{"type":42,"tag":86,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":47,"value":1314},"verbosity: detailed",{"type":47,"value":1316}," to the pipelines. This logs all telemetry to console. Remove it once setup is verified.",{"type":42,"tag":67,"props":1318,"children":1320},{"id":1319},"step-5-add-environment-variable-placeholders",[1321],{"type":47,"value":1322},"Step 5: Add Environment Variable Placeholders",{"type":42,"tag":50,"props":1324,"children":1325},{},[1326],{"type":47,"value":1327},"The Sentry Exporter requires two environment variables. You will add placeholder values that the user fills in themselves—never actual credentials.",{"type":42,"tag":50,"props":1329,"children":1330},{},[1331,1336,1338,1343],{"type":42,"tag":54,"props":1332,"children":1333},{},[1334],{"type":47,"value":1335},"Language constraint",{"type":47,"value":1337},": NEVER say \"add credentials\", \"add environment variables\", or \"add the token\" without explicitly stating these are ",{"type":42,"tag":54,"props":1339,"children":1340},{},[1341],{"type":47,"value":1342},"placeholders",{"type":47,"value":1344},". Always clarify the user fills them in later.",{"type":42,"tag":50,"props":1346,"children":1347},{},[1348],{"type":47,"value":1349},"DO NOT say:",{"type":42,"tag":145,"props":1351,"children":1352},{},[1353,1358,1363],{"type":42,"tag":149,"props":1354,"children":1355},{},[1356],{"type":47,"value":1357},"\"Let me add the environment variables\"",{"type":42,"tag":149,"props":1359,"children":1360},{},[1361],{"type":47,"value":1362},"\"I'll add the credentials to your .env\"",{"type":42,"tag":149,"props":1364,"children":1365},{},[1366],{"type":47,"value":1367},"\"Adding the Sentry auth token\"",{"type":42,"tag":50,"props":1369,"children":1370},{},[1371],{"type":47,"value":1372},"SAY INSTEAD:",{"type":42,"tag":145,"props":1374,"children":1375},{},[1376,1381,1386],{"type":42,"tag":149,"props":1377,"children":1378},{},[1379],{"type":47,"value":1380},"\"I'll add placeholder environment variables for you to fill in\"",{"type":42,"tag":149,"props":1382,"children":1383},{},[1384],{"type":47,"value":1385},"\"Adding placeholder values—you'll replace these with your actual credentials\"",{"type":42,"tag":149,"props":1387,"children":1388},{},[1389],{"type":47,"value":1390},"\"I'll set up the env var keys with placeholder values\"",{"type":42,"tag":50,"props":1392,"children":1393},{},[1394,1396,1402,1404,1410,1412,1417],{"type":47,"value":1395},"Search for existing ",{"type":42,"tag":86,"props":1397,"children":1399},{"className":1398},[],[1400],{"type":47,"value":1401},".env",{"type":47,"value":1403}," files in the project using glob ",{"type":42,"tag":86,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":47,"value":1409},"**\u002F.env",{"type":47,"value":1411},". ",{"type":42,"tag":54,"props":1413,"children":1414},{},[1415],{"type":47,"value":1416},"Always ask the user which file to use",{"type":47,"value":1418},"—do not infer from context or guess based on open files.",{"type":42,"tag":50,"props":1420,"children":1421},{},[1422],{"type":47,"value":1423},"Present the discovered options:",{"type":42,"tag":145,"props":1425,"children":1426},{},[1427,1440],{"type":42,"tag":149,"props":1428,"children":1429},{},[1430,1438],{"type":42,"tag":54,"props":1431,"children":1432},{},[1433],{"type":42,"tag":397,"props":1434,"children":1435},{},[1436],{"type":47,"value":1437},"path to discovered .env file",{"type":47,"value":1439},": Add to existing file (list each discovered path)",{"type":42,"tag":149,"props":1441,"children":1442},{},[1443,1448],{"type":42,"tag":54,"props":1444,"children":1445},{},[1446],{"type":47,"value":1447},"Create new at root",{"type":47,"value":1449},": Create .env in project root",{"type":42,"tag":50,"props":1451,"children":1452},{},[1453,1458],{"type":42,"tag":54,"props":1454,"children":1455},{},[1456],{"type":47,"value":1457},"Wait for the user's explicit selection.",{"type":47,"value":1459}," Do not proceed until they choose. Record the env file path for use in Steps 5 (validation) and 6 (running).",{"type":42,"tag":50,"props":1461,"children":1462},{},[1463],{"type":47,"value":1464},"Add these placeholder values to the chosen file:",{"type":42,"tag":79,"props":1466,"children":1468},{"className":389,"code":1467,"language":391,"meta":88,"style":88},"SENTRY_ORG_SLUG=your-org-slug\nSENTRY_AUTH_TOKEN=your-token-here\n",[1469],{"type":42,"tag":86,"props":1470,"children":1471},{"__ignoreMap":88},[1472,1490],{"type":42,"tag":397,"props":1473,"children":1474},{"class":399,"line":400},[1475,1480,1485],{"type":42,"tag":397,"props":1476,"children":1477},{"style":639},[1478],{"type":47,"value":1479},"SENTRY_ORG_SLUG",{"type":42,"tag":397,"props":1481,"children":1482},{"style":421},[1483],{"type":47,"value":1484},"=",{"type":42,"tag":397,"props":1486,"children":1487},{"style":410},[1488],{"type":47,"value":1489},"your-org-slug\n",{"type":42,"tag":397,"props":1491,"children":1492},{"class":399,"line":28},[1493,1498,1502],{"type":42,"tag":397,"props":1494,"children":1495},{"style":639},[1496],{"type":47,"value":1497},"SENTRY_AUTH_TOKEN",{"type":42,"tag":397,"props":1499,"children":1500},{"style":421},[1501],{"type":47,"value":1484},{"type":42,"tag":397,"props":1503,"children":1504},{"style":410},[1505],{"type":47,"value":1506},"your-token-here\n",{"type":42,"tag":50,"props":1508,"children":1509},{},[1510],{"type":47,"value":1511},"After adding the placeholders, tell the user how to get their real values from Sentry:",{"type":42,"tag":222,"props":1513,"children":1514},{},[1515,1548],{"type":42,"tag":149,"props":1516,"children":1517},{},[1518,1523,1525,1530,1532,1538,1540,1546],{"type":42,"tag":54,"props":1519,"children":1520},{},[1521],{"type":47,"value":1522},"Sentry org slug",{"type":47,"value":1524},": In Sentry, go to ",{"type":42,"tag":54,"props":1526,"children":1527},{},[1528],{"type":47,"value":1529},"Settings → Organization Settings → Organization Slug",{"type":47,"value":1531},". This is also your subdomain (e.g., ",{"type":42,"tag":86,"props":1533,"children":1535},{"className":1534},[],[1536],{"type":47,"value":1537},"myorg",{"type":47,"value":1539}," in ",{"type":42,"tag":86,"props":1541,"children":1543},{"className":1542},[],[1544],{"type":47,"value":1545},"https:\u002F\u002Fmyorg.sentry.io",{"type":47,"value":1547},")",{"type":42,"tag":149,"props":1549,"children":1550},{},[1551,1556,1558],{"type":42,"tag":54,"props":1552,"children":1553},{},[1554],{"type":47,"value":1555},"Sentry auth token",{"type":47,"value":1557},": Create an Internal Integration in Sentry:\n",{"type":42,"tag":145,"props":1559,"children":1560},{},[1561,1571,1588,1631],{"type":42,"tag":149,"props":1562,"children":1563},{},[1564,1566],{"type":47,"value":1565},"In Sentry, go to ",{"type":42,"tag":54,"props":1567,"children":1568},{},[1569],{"type":47,"value":1570},"Settings → Developer Settings → Custom Integrations",{"type":42,"tag":149,"props":1572,"children":1573},{},[1574,1576,1581,1583],{"type":47,"value":1575},"Click ",{"type":42,"tag":54,"props":1577,"children":1578},{},[1579],{"type":47,"value":1580},"Create New Integration",{"type":47,"value":1582}," → Choose ",{"type":42,"tag":54,"props":1584,"children":1585},{},[1586],{"type":47,"value":1587},"Internal Integration",{"type":42,"tag":149,"props":1589,"children":1590},{},[1591,1593],{"type":47,"value":1592},"Set permissions:\n",{"type":42,"tag":145,"props":1594,"children":1595},{},[1596,1606,1615],{"type":42,"tag":149,"props":1597,"children":1598},{},[1599,1604],{"type":42,"tag":54,"props":1600,"children":1601},{},[1602],{"type":47,"value":1603},"Organization: Read",{"type":47,"value":1605}," — required",{"type":42,"tag":149,"props":1607,"children":1608},{},[1609,1614],{"type":42,"tag":54,"props":1610,"children":1611},{},[1612],{"type":47,"value":1613},"Project: Read",{"type":47,"value":1605},{"type":42,"tag":149,"props":1616,"children":1617},{},[1618,1623,1625],{"type":42,"tag":54,"props":1619,"children":1620},{},[1621],{"type":47,"value":1622},"Project: Write",{"type":47,"value":1624}," — required only if using ",{"type":42,"tag":86,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":47,"value":1630},"auto_create_projects",{"type":42,"tag":149,"props":1632,"children":1633},{},[1634,1636,1641],{"type":47,"value":1635},"Save, then click ",{"type":42,"tag":54,"props":1637,"children":1638},{},[1639],{"type":47,"value":1640},"Create New Token",{"type":47,"value":1642}," and copy it",{"type":42,"tag":50,"props":1644,"children":1645},{},[1646,1648,1653,1655,1661],{"type":47,"value":1647},"Ensure the chosen ",{"type":42,"tag":86,"props":1649,"children":1651},{"className":1650},[],[1652],{"type":47,"value":1401},{"type":47,"value":1654}," file is in ",{"type":42,"tag":86,"props":1656,"children":1658},{"className":1657},[],[1659],{"type":47,"value":1660},".gitignore",{"type":47,"value":133},{"type":42,"tag":215,"props":1663,"children":1665},{"id":1664},"wait-for-user-to-set-credentials",[1666],{"type":47,"value":1667},"Wait for user to set credentials",{"type":42,"tag":50,"props":1669,"children":1670},{},[1671,1673,1678],{"type":47,"value":1672},"After explaining how to get the values, ask the user to confirm when they've updated the ",{"type":42,"tag":86,"props":1674,"children":1676},{"className":1675},[],[1677],{"type":47,"value":1401},{"type":47,"value":1679}," file:",{"type":42,"tag":145,"props":1681,"children":1682},{},[1683,1693],{"type":42,"tag":149,"props":1684,"children":1685},{},[1686,1691],{"type":42,"tag":54,"props":1687,"children":1688},{},[1689],{"type":47,"value":1690},"Yes, credentials are set",{"type":47,"value":1692},": Proceed to validate and run the collector",{"type":42,"tag":149,"props":1694,"children":1695},{},[1696,1701],{"type":42,"tag":54,"props":1697,"children":1698},{},[1699],{"type":47,"value":1700},"Not yet",{"type":47,"value":1702},": I'll wait while you update the .env file",{"type":42,"tag":50,"props":1704,"children":1705},{},[1706],{"type":47,"value":1707},"If user selects \"Not yet\", wait and ask again. Do not proceed to Step 6 until credentials are confirmed.",{"type":42,"tag":215,"props":1709,"children":1711},{"id":1710},"validate-config",[1712],{"type":47,"value":1713},"Validate config",{"type":42,"tag":50,"props":1715,"children":1716},{},[1717],{"type":47,"value":1718},"Once credentials are set, validate the configuration using the appropriate method based on the installation choice from Step 2.",{"type":42,"tag":50,"props":1720,"children":1721},{},[1722,1727,1729,1734],{"type":42,"tag":54,"props":1723,"children":1724},{},[1725],{"type":47,"value":1726},"Use the config file path from Step 1",{"type":47,"value":1728}," (either the existing config you modified or the new ",{"type":42,"tag":86,"props":1730,"children":1732},{"className":1731},[],[1733],{"type":47,"value":194},{"type":47,"value":517},{"type":42,"tag":1736,"props":1737,"children":1739},"h4",{"id":1738},"binary-validation",[1740],{"type":47,"value":1741},"Binary validation",{"type":42,"tag":50,"props":1743,"children":1744},{},[1745,1747,1752,1753,1758],{"type":47,"value":1746},"Use the collector path recorded in Step 2 (either ",{"type":42,"tag":86,"props":1748,"children":1750},{"className":1749},[],[1751],{"type":47,"value":266},{"type":47,"value":268},{"type":42,"tag":86,"props":1754,"children":1756},{"className":1755},[],[1757],{"type":47,"value":243},{"type":47,"value":1759}," if local).",{"type":42,"tag":50,"props":1761,"children":1762},{},[1763,1768],{"type":42,"tag":54,"props":1764,"children":1765},{},[1766],{"type":47,"value":1767},"Load environment variables first",{"type":47,"value":1769},", then run validation:",{"type":42,"tag":79,"props":1771,"children":1773},{"className":389,"code":1772,"language":391,"meta":88,"style":88},"set -a && source \"\u003Cenv_file>\" && set +a && \"\u003Ccollector_path>\" validate --config \"\u003Cconfig_file>\"\n",[1774],{"type":42,"tag":86,"props":1775,"children":1776},{"__ignoreMap":88},[1777],{"type":42,"tag":397,"props":1778,"children":1779},{"class":399,"line":400},[1780,1786,1791,1796,1801,1806,1811,1815,1819,1824,1829,1833,1838,1843,1848,1852,1857],{"type":42,"tag":397,"props":1781,"children":1783},{"style":1782},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1784],{"type":47,"value":1785},"set",{"type":42,"tag":397,"props":1787,"children":1788},{"style":410},[1789],{"type":47,"value":1790}," -a",{"type":42,"tag":397,"props":1792,"children":1793},{"style":421},[1794],{"type":47,"value":1795}," &&",{"type":42,"tag":397,"props":1797,"children":1798},{"style":1782},[1799],{"type":47,"value":1800}," source",{"type":42,"tag":397,"props":1802,"children":1803},{"style":421},[1804],{"type":47,"value":1805}," \"",{"type":42,"tag":397,"props":1807,"children":1808},{"style":410},[1809],{"type":47,"value":1810},"\u003Cenv_file>",{"type":42,"tag":397,"props":1812,"children":1813},{"style":421},[1814],{"type":47,"value":467},{"type":42,"tag":397,"props":1816,"children":1817},{"style":421},[1818],{"type":47,"value":1795},{"type":42,"tag":397,"props":1820,"children":1821},{"style":1782},[1822],{"type":47,"value":1823}," set",{"type":42,"tag":397,"props":1825,"children":1826},{"style":410},[1827],{"type":47,"value":1828}," +a",{"type":42,"tag":397,"props":1830,"children":1831},{"style":421},[1832],{"type":47,"value":1795},{"type":42,"tag":397,"props":1834,"children":1835},{"style":404},[1836],{"type":47,"value":1837}," \"\u003Ccollector_path>\"",{"type":42,"tag":397,"props":1839,"children":1840},{"style":410},[1841],{"type":47,"value":1842}," validate",{"type":42,"tag":397,"props":1844,"children":1845},{"style":410},[1846],{"type":47,"value":1847}," --config",{"type":42,"tag":397,"props":1849,"children":1850},{"style":421},[1851],{"type":47,"value":1805},{"type":42,"tag":397,"props":1853,"children":1854},{"style":410},[1855],{"type":47,"value":1856},"\u003Cconfig_file>",{"type":42,"tag":397,"props":1858,"children":1859},{"style":421},[1860],{"type":47,"value":1861},"\"\n",{"type":42,"tag":1736,"props":1863,"children":1865},{"id":1864},"docker-validation",[1866],{"type":47,"value":1867},"Docker validation",{"type":42,"tag":50,"props":1869,"children":1870},{},[1871,1876,1878,1883,1885,1890,1892,1898],{"type":42,"tag":54,"props":1872,"children":1873},{},[1874],{"type":47,"value":1875},"Note",{"type":47,"value":1877},": Docker volume mounts require absolute paths. If ",{"type":42,"tag":86,"props":1879,"children":1881},{"className":1880},[],[1882],{"type":47,"value":1856},{"type":47,"value":1884}," or ",{"type":42,"tag":86,"props":1886,"children":1888},{"className":1887},[],[1889],{"type":47,"value":1810},{"type":47,"value":1891}," are relative paths, prefix them with ",{"type":42,"tag":86,"props":1893,"children":1895},{"className":1894},[],[1896],{"type":47,"value":1897},"$(pwd)\u002F",{"type":47,"value":1899},". If they're already absolute paths, use them directly.",{"type":42,"tag":79,"props":1901,"children":1903},{"className":389,"code":1902,"language":391,"meta":88,"style":88},"docker run --rm \\\n  -v \"\u003Cabsolute_config_path>\":\u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml \\\n  --env-file \"\u003Cenv_file>\" \\\n  otel\u002Fopentelemetry-collector-contrib:\u003Cnumeric_version> \\\n  validate --config \u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml\n",[1904],{"type":42,"tag":86,"props":1905,"children":1906},{"__ignoreMap":88},[1907,1929,1959,1983,2011],{"type":42,"tag":397,"props":1908,"children":1909},{"class":399,"line":400},[1910,1914,1919,1924],{"type":42,"tag":397,"props":1911,"children":1912},{"style":404},[1913],{"type":47,"value":1024},{"type":42,"tag":397,"props":1915,"children":1916},{"style":410},[1917],{"type":47,"value":1918}," run",{"type":42,"tag":397,"props":1920,"children":1921},{"style":410},[1922],{"type":47,"value":1923}," --rm",{"type":42,"tag":397,"props":1925,"children":1926},{"style":639},[1927],{"type":47,"value":1928}," \\\n",{"type":42,"tag":397,"props":1930,"children":1931},{"class":399,"line":28},[1932,1937,1941,1946,1950,1955],{"type":42,"tag":397,"props":1933,"children":1934},{"style":410},[1935],{"type":47,"value":1936},"  -v",{"type":42,"tag":397,"props":1938,"children":1939},{"style":421},[1940],{"type":47,"value":1805},{"type":42,"tag":397,"props":1942,"children":1943},{"style":410},[1944],{"type":47,"value":1945},"\u003Cabsolute_config_path>",{"type":42,"tag":397,"props":1947,"children":1948},{"style":421},[1949],{"type":47,"value":467},{"type":42,"tag":397,"props":1951,"children":1952},{"style":410},[1953],{"type":47,"value":1954},":\u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml",{"type":42,"tag":397,"props":1956,"children":1957},{"style":639},[1958],{"type":47,"value":1928},{"type":42,"tag":397,"props":1960,"children":1961},{"class":399,"line":799},[1962,1967,1971,1975,1979],{"type":42,"tag":397,"props":1963,"children":1964},{"style":410},[1965],{"type":47,"value":1966},"  --env-file",{"type":42,"tag":397,"props":1968,"children":1969},{"style":421},[1970],{"type":47,"value":1805},{"type":42,"tag":397,"props":1972,"children":1973},{"style":410},[1974],{"type":47,"value":1810},{"type":42,"tag":397,"props":1976,"children":1977},{"style":421},[1978],{"type":47,"value":467},{"type":42,"tag":397,"props":1980,"children":1981},{"style":639},[1982],{"type":47,"value":1928},{"type":42,"tag":397,"props":1984,"children":1985},{"class":399,"line":849},[1986,1991,1995,1999,2003,2007],{"type":42,"tag":397,"props":1987,"children":1988},{"style":410},[1989],{"type":47,"value":1990},"  otel\u002Fopentelemetry-collector-contrib:",{"type":42,"tag":397,"props":1992,"children":1993},{"style":421},[1994],{"type":47,"value":631},{"type":42,"tag":397,"props":1996,"children":1997},{"style":410},[1998],{"type":47,"value":636},{"type":42,"tag":397,"props":2000,"children":2001},{"style":639},[2002],{"type":47,"value":642},{"type":42,"tag":397,"props":2004,"children":2005},{"style":421},[2006],{"type":47,"value":647},{"type":42,"tag":397,"props":2008,"children":2009},{"style":639},[2010],{"type":47,"value":1928},{"type":42,"tag":397,"props":2012,"children":2014},{"class":399,"line":2013},5,[2015,2020,2024],{"type":42,"tag":397,"props":2016,"children":2017},{"style":410},[2018],{"type":47,"value":2019},"  validate",{"type":42,"tag":397,"props":2021,"children":2022},{"style":410},[2023],{"type":47,"value":1847},{"type":42,"tag":397,"props":2025,"children":2026},{"style":410},[2027],{"type":47,"value":2028}," \u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml\n",{"type":42,"tag":50,"props":2030,"children":2031},{},[2032,2034,2039],{"type":47,"value":2033},"Use the ",{"type":42,"tag":86,"props":2035,"children":2037},{"className":2036},[],[2038],{"type":47,"value":1401},{"type":47,"value":2040}," file path chosen in Step 5.",{"type":42,"tag":50,"props":2042,"children":2043},{},[2044],{"type":42,"tag":54,"props":2045,"children":2046},{},[2047],{"type":47,"value":2048},"If validation fails:",{"type":42,"tag":222,"props":2050,"children":2051},{},[2052,2057,2062,2067],{"type":42,"tag":149,"props":2053,"children":2054},{},[2055],{"type":47,"value":2056},"Review the error message carefully",{"type":42,"tag":149,"props":2058,"children":2059},{},[2060],{"type":47,"value":2061},"Fix the issues in the config file",{"type":42,"tag":149,"props":2063,"children":2064},{},[2065],{"type":47,"value":2066},"Run validation again",{"type":42,"tag":149,"props":2068,"children":2069},{},[2070],{"type":47,"value":2071},"Repeat until validation passes",{"type":42,"tag":50,"props":2073,"children":2074},{},[2075,2080],{"type":42,"tag":54,"props":2076,"children":2077},{},[2078],{"type":47,"value":2079},"Once validation passes",{"type":47,"value":2081},", ask the user if they're ready to run the collector:",{"type":42,"tag":145,"props":2083,"children":2084},{},[2085,2095],{"type":42,"tag":149,"props":2086,"children":2087},{},[2088,2093],{"type":42,"tag":54,"props":2089,"children":2090},{},[2091],{"type":47,"value":2092},"Yes, run it now",{"type":47,"value":2094},": Proceed to Step 6 and start the collector",{"type":42,"tag":149,"props":2096,"children":2097},{},[2098,2102],{"type":42,"tag":54,"props":2099,"children":2100},{},[2101],{"type":47,"value":1700},{"type":47,"value":2103},": Wait. The user may want to review the config or prepare their environment first.",{"type":42,"tag":50,"props":2105,"children":2106},{},[2107],{"type":42,"tag":54,"props":2108,"children":2109},{},[2110],{"type":47,"value":2111},"Wait for the user's confirmation before proceeding to Step 6.",{"type":42,"tag":67,"props":2113,"children":2115},{"id":2114},"step-6-run-the-collector",[2116],{"type":47,"value":2117},"Step 6: Run the Collector",{"type":42,"tag":50,"props":2119,"children":2120},{},[2121],{"type":42,"tag":54,"props":2122,"children":2123},{},[2124],{"type":47,"value":2125},"Only reach this step after the user confirms they're ready to run the collector.",{"type":42,"tag":50,"props":2127,"children":2128},{},[2129,2134],{"type":42,"tag":54,"props":2130,"children":2131},{},[2132],{"type":47,"value":2133},"Give the user the run command but do not execute it automatically.",{"type":47,"value":2135}," The user will run it themselves.",{"type":42,"tag":50,"props":2137,"children":2138},{},[2139],{"type":47,"value":2140},"Provide the appropriate command based on the installation method chosen in Step 2.",{"type":42,"tag":50,"props":2142,"children":2143},{},[2144],{"type":42,"tag":54,"props":2145,"children":2146},{},[2147],{"type":47,"value":2148},"Use the actual paths chosen earlier:",{"type":42,"tag":145,"props":2150,"children":2151},{},[2152,2168,2185],{"type":42,"tag":149,"props":2153,"children":2154},{},[2155,2160,2162,2167],{"type":42,"tag":54,"props":2156,"children":2157},{},[2158],{"type":47,"value":2159},"Config file",{"type":47,"value":2161},": From Step 1 (existing config or new ",{"type":42,"tag":86,"props":2163,"children":2165},{"className":2164},[],[2166],{"type":47,"value":194},{"type":47,"value":1547},{"type":42,"tag":149,"props":2169,"children":2170},{},[2171,2176,2178,2183],{"type":42,"tag":54,"props":2172,"children":2173},{},[2174],{"type":47,"value":2175},"Env file",{"type":47,"value":2177},": From Step 5 (the ",{"type":42,"tag":86,"props":2179,"children":2181},{"className":2180},[],[2182],{"type":47,"value":1401},{"type":47,"value":2184}," file the user selected)",{"type":42,"tag":149,"props":2186,"children":2187},{},[2188,2193,2195,2200,2201,2206],{"type":42,"tag":54,"props":2189,"children":2190},{},[2191],{"type":47,"value":2192},"Collector path",{"type":47,"value":2194},": From Step 2 (either ",{"type":42,"tag":86,"props":2196,"children":2198},{"className":2197},[],[2199],{"type":47,"value":266},{"type":47,"value":268},{"type":42,"tag":86,"props":2202,"children":2204},{"className":2203},[],[2205],{"type":47,"value":243},{"type":47,"value":2207}," if local)",{"type":42,"tag":215,"props":2209,"children":2211},{"id":2210},"binary",[2212],{"type":47,"value":363},{"type":42,"tag":50,"props":2214,"children":2215},{},[2216,2220],{"type":42,"tag":54,"props":2217,"children":2218},{},[2219],{"type":47,"value":1767},{"type":47,"value":2221},", then run the collector:",{"type":42,"tag":79,"props":2223,"children":2225},{"className":389,"code":2224,"language":391,"meta":88,"style":88},"set -a && source \"\u003Cenv_file>\" && set +a && \"\u003Ccollector_path>\" --config \"\u003Cconfig_file>\"\n",[2226],{"type":42,"tag":86,"props":2227,"children":2228},{"__ignoreMap":88},[2229],{"type":42,"tag":397,"props":2230,"children":2231},{"class":399,"line":400},[2232,2236,2240,2244,2248,2252,2256,2260,2264,2268,2272,2276,2280,2284,2288,2292],{"type":42,"tag":397,"props":2233,"children":2234},{"style":1782},[2235],{"type":47,"value":1785},{"type":42,"tag":397,"props":2237,"children":2238},{"style":410},[2239],{"type":47,"value":1790},{"type":42,"tag":397,"props":2241,"children":2242},{"style":421},[2243],{"type":47,"value":1795},{"type":42,"tag":397,"props":2245,"children":2246},{"style":1782},[2247],{"type":47,"value":1800},{"type":42,"tag":397,"props":2249,"children":2250},{"style":421},[2251],{"type":47,"value":1805},{"type":42,"tag":397,"props":2253,"children":2254},{"style":410},[2255],{"type":47,"value":1810},{"type":42,"tag":397,"props":2257,"children":2258},{"style":421},[2259],{"type":47,"value":467},{"type":42,"tag":397,"props":2261,"children":2262},{"style":421},[2263],{"type":47,"value":1795},{"type":42,"tag":397,"props":2265,"children":2266},{"style":1782},[2267],{"type":47,"value":1823},{"type":42,"tag":397,"props":2269,"children":2270},{"style":410},[2271],{"type":47,"value":1828},{"type":42,"tag":397,"props":2273,"children":2274},{"style":421},[2275],{"type":47,"value":1795},{"type":42,"tag":397,"props":2277,"children":2278},{"style":404},[2279],{"type":47,"value":1837},{"type":42,"tag":397,"props":2281,"children":2282},{"style":410},[2283],{"type":47,"value":1847},{"type":42,"tag":397,"props":2285,"children":2286},{"style":421},[2287],{"type":47,"value":1805},{"type":42,"tag":397,"props":2289,"children":2290},{"style":410},[2291],{"type":47,"value":1856},{"type":42,"tag":397,"props":2293,"children":2294},{"style":421},[2295],{"type":47,"value":1861},{"type":42,"tag":215,"props":2297,"children":2298},{"id":1024},[2299],{"type":47,"value":373},{"type":42,"tag":50,"props":2301,"children":2302},{},[2303,2307,2308,2313,2314,2319,2320,2325],{"type":42,"tag":54,"props":2304,"children":2305},{},[2306],{"type":47,"value":1875},{"type":47,"value":1877},{"type":42,"tag":86,"props":2309,"children":2311},{"className":2310},[],[2312],{"type":47,"value":1856},{"type":47,"value":1884},{"type":42,"tag":86,"props":2315,"children":2317},{"className":2316},[],[2318],{"type":47,"value":1810},{"type":47,"value":1891},{"type":42,"tag":86,"props":2321,"children":2323},{"className":2322},[],[2324],{"type":47,"value":1897},{"type":47,"value":1899},{"type":42,"tag":50,"props":2327,"children":2328},{},[2329,2334],{"type":42,"tag":54,"props":2330,"children":2331},{},[2332],{"type":47,"value":2333},"If re-running",{"type":47,"value":2335},": Stop and remove any existing container first:",{"type":42,"tag":79,"props":2337,"children":2339},{"className":389,"code":2338,"language":391,"meta":88,"style":88},"docker stop otel-collector 2>\u002Fdev\u002Fnull; docker rm otel-collector 2>\u002Fdev\u002Fnull\n",[2340],{"type":42,"tag":86,"props":2341,"children":2342},{"__ignoreMap":88},[2343],{"type":42,"tag":397,"props":2344,"children":2345},{"class":399,"line":400},[2346,2350,2355,2360,2365,2370,2375,2380,2385,2389,2393],{"type":42,"tag":397,"props":2347,"children":2348},{"style":404},[2349],{"type":47,"value":1024},{"type":42,"tag":397,"props":2351,"children":2352},{"style":410},[2353],{"type":47,"value":2354}," stop",{"type":42,"tag":397,"props":2356,"children":2357},{"style":410},[2358],{"type":47,"value":2359}," otel-collector",{"type":42,"tag":397,"props":2361,"children":2362},{"style":421},[2363],{"type":47,"value":2364}," 2>",{"type":42,"tag":397,"props":2366,"children":2367},{"style":410},[2368],{"type":47,"value":2369},"\u002Fdev\u002Fnull",{"type":42,"tag":397,"props":2371,"children":2372},{"style":421},[2373],{"type":47,"value":2374},";",{"type":42,"tag":397,"props":2376,"children":2377},{"style":404},[2378],{"type":47,"value":2379}," docker",{"type":42,"tag":397,"props":2381,"children":2382},{"style":410},[2383],{"type":47,"value":2384}," rm",{"type":42,"tag":397,"props":2386,"children":2387},{"style":410},[2388],{"type":47,"value":2359},{"type":42,"tag":397,"props":2390,"children":2391},{"style":421},[2392],{"type":47,"value":2364},{"type":42,"tag":397,"props":2394,"children":2395},{"style":410},[2396],{"type":47,"value":2397},"\u002Fdev\u002Fnull\n",{"type":42,"tag":79,"props":2399,"children":2401},{"className":389,"code":2400,"language":391,"meta":88,"style":88},"docker run -d \\\n  --name otel-collector \\\n  -p 4317:4317 \\\n  -p 4318:4318 \\\n  -p 13133:13133 \\\n  -v \"\u003Cabsolute_config_path>\":\u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml \\\n  --env-file \"\u003Cenv_file>\" \\\n  otel\u002Fopentelemetry-collector-contrib:\u003Cnumeric_version>\n",[2402],{"type":42,"tag":86,"props":2403,"children":2404},{"__ignoreMap":88},[2405,2424,2440,2457,2473,2489,2517,2541],{"type":42,"tag":397,"props":2406,"children":2407},{"class":399,"line":400},[2408,2412,2416,2420],{"type":42,"tag":397,"props":2409,"children":2410},{"style":404},[2411],{"type":47,"value":1024},{"type":42,"tag":397,"props":2413,"children":2414},{"style":410},[2415],{"type":47,"value":1918},{"type":42,"tag":397,"props":2417,"children":2418},{"style":410},[2419],{"type":47,"value":458},{"type":42,"tag":397,"props":2421,"children":2422},{"style":639},[2423],{"type":47,"value":1928},{"type":42,"tag":397,"props":2425,"children":2426},{"class":399,"line":28},[2427,2432,2436],{"type":42,"tag":397,"props":2428,"children":2429},{"style":410},[2430],{"type":47,"value":2431},"  --name",{"type":42,"tag":397,"props":2433,"children":2434},{"style":410},[2435],{"type":47,"value":2359},{"type":42,"tag":397,"props":2437,"children":2438},{"style":639},[2439],{"type":47,"value":1928},{"type":42,"tag":397,"props":2441,"children":2442},{"class":399,"line":799},[2443,2448,2453],{"type":42,"tag":397,"props":2444,"children":2445},{"style":410},[2446],{"type":47,"value":2447},"  -p",{"type":42,"tag":397,"props":2449,"children":2450},{"style":410},[2451],{"type":47,"value":2452}," 4317:4317",{"type":42,"tag":397,"props":2454,"children":2455},{"style":639},[2456],{"type":47,"value":1928},{"type":42,"tag":397,"props":2458,"children":2459},{"class":399,"line":849},[2460,2464,2469],{"type":42,"tag":397,"props":2461,"children":2462},{"style":410},[2463],{"type":47,"value":2447},{"type":42,"tag":397,"props":2465,"children":2466},{"style":410},[2467],{"type":47,"value":2468}," 4318:4318",{"type":42,"tag":397,"props":2470,"children":2471},{"style":639},[2472],{"type":47,"value":1928},{"type":42,"tag":397,"props":2474,"children":2475},{"class":399,"line":2013},[2476,2480,2485],{"type":42,"tag":397,"props":2477,"children":2478},{"style":410},[2479],{"type":47,"value":2447},{"type":42,"tag":397,"props":2481,"children":2482},{"style":410},[2483],{"type":47,"value":2484}," 13133:13133",{"type":42,"tag":397,"props":2486,"children":2487},{"style":639},[2488],{"type":47,"value":1928},{"type":42,"tag":397,"props":2490,"children":2492},{"class":399,"line":2491},6,[2493,2497,2501,2505,2509,2513],{"type":42,"tag":397,"props":2494,"children":2495},{"style":410},[2496],{"type":47,"value":1936},{"type":42,"tag":397,"props":2498,"children":2499},{"style":421},[2500],{"type":47,"value":1805},{"type":42,"tag":397,"props":2502,"children":2503},{"style":410},[2504],{"type":47,"value":1945},{"type":42,"tag":397,"props":2506,"children":2507},{"style":421},[2508],{"type":47,"value":467},{"type":42,"tag":397,"props":2510,"children":2511},{"style":410},[2512],{"type":47,"value":1954},{"type":42,"tag":397,"props":2514,"children":2515},{"style":639},[2516],{"type":47,"value":1928},{"type":42,"tag":397,"props":2518,"children":2520},{"class":399,"line":2519},7,[2521,2525,2529,2533,2537],{"type":42,"tag":397,"props":2522,"children":2523},{"style":410},[2524],{"type":47,"value":1966},{"type":42,"tag":397,"props":2526,"children":2527},{"style":421},[2528],{"type":47,"value":1805},{"type":42,"tag":397,"props":2530,"children":2531},{"style":410},[2532],{"type":47,"value":1810},{"type":42,"tag":397,"props":2534,"children":2535},{"style":421},[2536],{"type":47,"value":467},{"type":42,"tag":397,"props":2538,"children":2539},{"style":639},[2540],{"type":47,"value":1928},{"type":42,"tag":397,"props":2542,"children":2544},{"class":399,"line":2543},8,[2545,2549,2553,2557,2561],{"type":42,"tag":397,"props":2546,"children":2547},{"style":410},[2548],{"type":47,"value":1990},{"type":42,"tag":397,"props":2550,"children":2551},{"style":421},[2552],{"type":47,"value":631},{"type":42,"tag":397,"props":2554,"children":2555},{"style":410},[2556],{"type":47,"value":636},{"type":42,"tag":397,"props":2558,"children":2559},{"style":639},[2560],{"type":47,"value":642},{"type":42,"tag":397,"props":2562,"children":2563},{"style":421},[2564],{"type":47,"value":1051},{"type":42,"tag":50,"props":2566,"children":2567},{},[2568,2570,2575],{"type":47,"value":2569},"Use the same numeric version (without ",{"type":42,"tag":86,"props":2571,"children":2573},{"className":2572},[],[2574],{"type":47,"value":492},{"type":47,"value":2576}," prefix) that was pulled in Step 2.",{"type":42,"tag":50,"props":2578,"children":2579},{},[2580],{"type":47,"value":2581},"After providing the command, tell the user to run it when they're ready, then proceed to Step 7 for verification.",{"type":42,"tag":67,"props":2583,"children":2585},{"id":2584},"step-7-verify-setup",[2586],{"type":47,"value":2587},"Step 7: Verify Setup",{"type":42,"tag":222,"props":2589,"children":2590},{},[2591,2596,2601],{"type":42,"tag":149,"props":2592,"children":2593},{},[2594],{"type":47,"value":2595},"Check collector logs for successful startup (no errors about invalid config or failed connections)",{"type":42,"tag":149,"props":2597,"children":2598},{},[2599],{"type":47,"value":2600},"Look for log messages indicating connection to Sentry",{"type":42,"tag":149,"props":2602,"children":2603},{},[2604],{"type":47,"value":2605},"Send test telemetry from an instrumented service and verify it appears in Sentry",{"type":42,"tag":50,"props":2607,"children":2608},{},[2609],{"type":42,"tag":54,"props":2610,"children":2611},{},[2612],{"type":47,"value":2613},"Success criteria:",{"type":42,"tag":145,"props":2615,"children":2616},{},[2617,2622],{"type":42,"tag":149,"props":2618,"children":2619},{},[2620],{"type":47,"value":2621},"Collector starts without errors",{"type":42,"tag":149,"props":2623,"children":2624},{},[2625],{"type":47,"value":2626},"Traces and\u002For logs appear in Sentry within 60 seconds of sending",{"type":42,"tag":50,"props":2628,"children":2629},{},[2630,2632,2638],{"type":47,"value":2631},"If using Docker, check logs with ",{"type":42,"tag":86,"props":2633,"children":2635},{"className":2634},[],[2636],{"type":47,"value":2637},"docker logs otel-collector",{"type":47,"value":133},{"type":42,"tag":67,"props":2640,"children":2642},{"id":2641},"troubleshooting",[2643],{"type":47,"value":2644},"Troubleshooting",{"type":42,"tag":277,"props":2646,"children":2647},{},[2648,2669],{"type":42,"tag":281,"props":2649,"children":2650},{},[2651],{"type":42,"tag":285,"props":2652,"children":2653},{},[2654,2659,2664],{"type":42,"tag":289,"props":2655,"children":2656},{},[2657],{"type":47,"value":2658},"Error",{"type":42,"tag":289,"props":2660,"children":2661},{},[2662],{"type":47,"value":2663},"Cause",{"type":42,"tag":289,"props":2665,"children":2666},{},[2667],{"type":47,"value":2668},"Fix",{"type":42,"tag":300,"props":2670,"children":2671},{},[2672,2690,2708,2726,2744,2762],{"type":42,"tag":285,"props":2673,"children":2674},{},[2675,2680,2685],{"type":42,"tag":307,"props":2676,"children":2677},{},[2678],{"type":47,"value":2679},"\"failed to create project\"",{"type":42,"tag":307,"props":2681,"children":2682},{},[2683],{"type":47,"value":2684},"Missing Project:Write permission",{"type":42,"tag":307,"props":2686,"children":2687},{},[2688],{"type":47,"value":2689},"Update Internal Integration permissions in Sentry",{"type":42,"tag":285,"props":2691,"children":2692},{},[2693,2698,2703],{"type":42,"tag":307,"props":2694,"children":2695},{},[2696],{"type":47,"value":2697},"\"no team found\"",{"type":42,"tag":307,"props":2699,"children":2700},{},[2701],{"type":47,"value":2702},"No teams in org",{"type":42,"tag":307,"props":2704,"children":2705},{},[2706],{"type":47,"value":2707},"Create a team in Sentry before enabling auto-create",{"type":42,"tag":285,"props":2709,"children":2710},{},[2711,2716,2721],{"type":42,"tag":307,"props":2712,"children":2713},{},[2714],{"type":47,"value":2715},"\"invalid auth token\"",{"type":42,"tag":307,"props":2717,"children":2718},{},[2719],{"type":47,"value":2720},"Wrong token type or expired",{"type":42,"tag":307,"props":2722,"children":2723},{},[2724],{"type":47,"value":2725},"Use Internal Integration token, not user auth token",{"type":42,"tag":285,"props":2727,"children":2728},{},[2729,2734,2739],{"type":42,"tag":307,"props":2730,"children":2731},{},[2732],{"type":47,"value":2733},"\"connection refused\" on 4317\u002F4318",{"type":42,"tag":307,"props":2735,"children":2736},{},[2737],{"type":47,"value":2738},"Collector not running or port conflict",{"type":42,"tag":307,"props":2740,"children":2741},{},[2742],{"type":47,"value":2743},"Check collector logs and ensure ports are available",{"type":42,"tag":285,"props":2745,"children":2746},{},[2747,2752,2757],{"type":42,"tag":307,"props":2748,"children":2749},{},[2750],{"type":47,"value":2751},"Validation fails with env var errors",{"type":42,"tag":307,"props":2753,"children":2754},{},[2755],{"type":47,"value":2756},".env file not loaded or placeholders not replaced",{"type":42,"tag":307,"props":2758,"children":2759},{},[2760],{"type":47,"value":2761},"Ensure real credentials are in .env and the file is sourced",{"type":42,"tag":285,"props":2763,"children":2764},{},[2765,2770,2775],{"type":42,"tag":307,"props":2766,"children":2767},{},[2768],{"type":47,"value":2769},"\"container name already in use\"",{"type":42,"tag":307,"props":2771,"children":2772},{},[2773],{"type":47,"value":2774},"Previous container exists",{"type":42,"tag":307,"props":2776,"children":2777},{},[2778,2779],{"type":47,"value":229},{"type":42,"tag":86,"props":2780,"children":2782},{"className":2781},[],[2783],{"type":47,"value":2784},"docker stop otel-collector && docker rm otel-collector",{"type":42,"tag":2786,"props":2787,"children":2788},"style",{},[2789],{"type":47,"value":2790},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2792,"total":2970},[2793,2818,2832,2847,2861,2878,2894,2908,2918,2929,2939,2957],{"slug":2794,"name":2794,"fn":2795,"description":2796,"org":2797,"tags":2798,"stars":2815,"repoUrl":2816,"updatedAt":2817},"xcodebuildmcp","build and test Apple apps with XcodeBuildMCP","Official skill for XcodeBuildMCP. Use when doing iOS\u002FmacOS\u002FwatchOS\u002FtvOS\u002FvisionOS work (build, test, run, debug, log, UI automation).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2799,2802,2805,2808,2809,2812],{"name":2800,"slug":2801,"type":16},"Debugging","debugging",{"name":2803,"slug":2804,"type":16},"iOS","ios",{"name":2806,"slug":2807,"type":16},"macOS","macos",{"name":9,"slug":8,"type":16},{"name":2810,"slug":2811,"type":16},"Testing","testing",{"name":2813,"slug":2814,"type":16},"Xcode","xcode",6176,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002FXcodeBuildMCP","2026-04-06T18:13:34.8719",{"slug":2819,"name":2819,"fn":2820,"description":2821,"org":2822,"tags":2823,"stars":2815,"repoUrl":2816,"updatedAt":2831},"xcodebuildmcp-cli","build and test Apple apps via CLI","Official skill for the XcodeBuildMCP CLI. Use when doing iOS\u002FmacOS\u002FwatchOS\u002FtvOS\u002FvisionOS work (build, test, run, debug, log, UI automation).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2824,2827,2828,2829,2830],{"name":2825,"slug":2826,"type":16},"CLI","cli",{"name":2803,"slug":2804,"type":16},{"name":2806,"slug":2807,"type":16},{"name":2810,"slug":2811,"type":16},{"name":2813,"slug":2814,"type":16},"2026-04-06T18:13:36.13414",{"slug":2833,"name":2833,"fn":2834,"description":2835,"org":2836,"tags":2837,"stars":2844,"repoUrl":2845,"updatedAt":2846},"agents-md","maintain project instruction files","Creates and maintains concise AGENTS.md and CLAUDE.md project instruction files. Use when asked to create AGENTS.md, update AGENTS.md, maintain agent docs, set up CLAUDE.md, document repository agent conventions, or keep coding-agent instructions minimal and reference-backed.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2838,2841],{"name":2839,"slug":2840,"type":16},"Documentation","documentation",{"name":2842,"slug":2843,"type":16},"Engineering","engineering",861,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills","2026-05-15T06:16:29.695991",{"slug":2848,"name":2848,"fn":2849,"description":2850,"org":2851,"tags":2852,"stars":2844,"repoUrl":2845,"updatedAt":2860},"blog-writing-guide","write and review engineering blog posts","Write, review, and improve blog posts for the Sentry engineering blog following Sentry's specific writing standards, voice, and quality bar. Use this skill whenever someone asks to write a blog post, draft a technical article, review blog content, improve a draft, write a product announcement, create an engineering deep-dive, or produce any written content destined for the Sentry blog or developer audience. Also trigger when the user mentions \"blog post,\" \"blog draft,\" \"write-up,\" \"announcement post,\" \"engineering post,\" \"deep dive,\" \"postmortem,\" or asks for help with technical writing for Sentry. Even if the user just says \"help me write about [feature\u002Ftopic]\" — if it sounds like it could become a Sentry blog post, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2853,2856,2857],{"name":2854,"slug":2855,"type":16},"Communications","communications",{"name":9,"slug":8,"type":16},{"name":2858,"slug":2859,"type":16},"Technical Writing","technical-writing","2026-05-15T06:16:33.38217",{"slug":2862,"name":2862,"fn":2863,"description":2864,"org":2865,"tags":2866,"stars":2844,"repoUrl":2845,"updatedAt":2877},"brand-guidelines","write copy following Sentry brand guidelines","Write copy following Sentry brand guidelines. Use when writing UI text, error messages, empty states, onboarding flows, 404 pages, documentation, marketing copy, or any user-facing content. Covers both Plain Speech (default) and Sentry Voice tones.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2867,2870,2873,2874],{"name":2868,"slug":2869,"type":16},"Branding","branding",{"name":2871,"slug":2872,"type":16},"Content Creation","content-creation",{"name":9,"slug":8,"type":16},{"name":2875,"slug":2876,"type":16},"UX Copy","ux-copy","2026-05-15T06:16:22.395707",{"slug":2879,"name":2879,"fn":2880,"description":2881,"org":2882,"tags":2883,"stars":2844,"repoUrl":2845,"updatedAt":2893},"claude-settings-audit","generate Claude Code settings permissions","Analyze a repository to generate recommended Claude Code settings.json permissions. Use when setting up a new project, auditing existing settings, or determining which read-only bash commands to allow. Detects tech stack, build tools, and monorepo structure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2884,2887,2890],{"name":2885,"slug":2886,"type":16},"Claude Code","claude-code",{"name":2888,"slug":2889,"type":16},"Configuration","configuration",{"name":2891,"slug":2892,"type":16},"Security","security","2026-05-15T06:16:44.335977",{"slug":2895,"name":2895,"fn":2896,"description":2897,"org":2898,"tags":2899,"stars":2844,"repoUrl":2845,"updatedAt":2907},"code-review","perform code reviews for Sentry projects","Perform code reviews following Sentry engineering practices. Use when reviewing pull requests, examining code changes, or providing feedback on code quality. Covers security, performance, testing, and design review.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2900,2902,2903,2906],{"name":2901,"slug":2895,"type":16},"Code Review",{"name":2842,"slug":2843,"type":16},{"name":2904,"slug":2905,"type":16},"Performance","performance",{"name":2891,"slug":2892,"type":16},"2026-05-15T06:16:35.824864",{"slug":2909,"name":2909,"fn":2910,"description":2911,"org":2912,"tags":2913,"stars":2844,"repoUrl":2845,"updatedAt":2917},"code-simplifier","simplify and refine source code","Simplifies and refines code for clarity, consistency, and maintainability while preserving all functionality. Use when asked to \"simplify code\", \"clean up code\", \"refactor for clarity\", \"improve readability\", or review recently modified code for elegance. Focuses on project-specific best practices.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2914],{"name":2915,"slug":2916,"type":16},"Code Analysis","code-analysis","2026-05-15T06:16:32.127981",{"slug":2919,"name":2919,"fn":2920,"description":2921,"org":2922,"tags":2923,"stars":2844,"repoUrl":2845,"updatedAt":2928},"commit","create commits with Sentry conventions","Use for every request to commit changes or draft a commit message. Creates Sentry-style conventional commits with issue references.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2924,2927],{"name":2925,"slug":2926,"type":16},"Git","git",{"name":9,"slug":8,"type":16},"2026-07-18T05:15:10.723937",{"slug":2930,"name":2930,"fn":2931,"description":2932,"org":2933,"tags":2934,"stars":2844,"repoUrl":2845,"updatedAt":2938},"create-branch","create git branches for Sentry workflows","Create a git branch following Sentry naming conventions. Use when asked to \"create a branch\", \"new branch\", \"start a branch\", \"make a branch\", \"switch to a new branch\", or when starting new work on the default branch.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2935,2936,2937],{"name":2842,"slug":2843,"type":16},{"name":2925,"slug":2926,"type":16},{"name":9,"slug":8,"type":16},"2026-05-15T06:16:39.458431",{"slug":2940,"name":2940,"fn":2941,"description":2942,"org":2943,"tags":2944,"stars":2844,"repoUrl":2845,"updatedAt":2956},"django-access-review","review Django access control and IDOR","Django access control and IDOR security review. Use when reviewing Django views, DRF viewsets, ORM queries, or any Python\u002FDjango code handling user authorization. Trigger keywords: \"IDOR\", \"access control\", \"authorization\", \"Django permissions\", \"object permissions\", \"tenant isolation\", \"broken access\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2945,2948,2949,2952,2955],{"name":2946,"slug":2947,"type":16},"Access Control","access-control",{"name":2915,"slug":2916,"type":16},{"name":2950,"slug":2951,"type":16},"Django","django",{"name":2953,"slug":2954,"type":16},"Python","python",{"name":2891,"slug":2892,"type":16},"2026-05-15T06:16:43.098698",{"slug":2958,"name":2958,"fn":2959,"description":2960,"org":2961,"tags":2962,"stars":2844,"repoUrl":2845,"updatedAt":2969},"django-perf-review","review and optimize Django performance","Django performance code review. Use when asked to \"review Django performance\", \"find N+1 queries\", \"optimize Django\", \"check queryset performance\", \"database performance\", \"Django ORM issues\", or audit Django code for performance problems.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2963,2964,2967,2968],{"name":2901,"slug":2895,"type":16},{"name":2965,"slug":2966,"type":16},"Database","database",{"name":2950,"slug":2951,"type":16},{"name":2904,"slug":2905,"type":16},"2026-05-15T06:16:24.832813",88,{"items":2972,"total":799},[2973,2993,3000],{"slug":2974,"name":2974,"fn":2975,"description":2976,"org":2977,"tags":2978,"stars":24,"repoUrl":25,"updatedAt":2992},"sentry-create-alert","create and configure Sentry alerts","Create Sentry alerts using the workflow engine API. Use when asked to create alerts, set up notifications, configure issue priority alerts, or build workflow automations. Supports email, Slack, PagerDuty, Discord, and other notification actions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2979,2982,2985,2988,2989],{"name":2980,"slug":2981,"type":16},"Alerting","alerting",{"name":2983,"slug":2984,"type":16},"Automation","automation",{"name":2986,"slug":2987,"type":16},"Email","email",{"name":9,"slug":8,"type":16},{"name":2990,"slug":2991,"type":16},"Slack","slack","2026-07-18T05:47:21.895881",{"slug":4,"name":4,"fn":5,"description":6,"org":2994,"tags":2995,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2996,2997,2998,2999],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"name":9,"slug":8,"type":16},{"slug":3001,"name":3001,"fn":3002,"description":3003,"org":3004,"tags":3005,"stars":24,"repoUrl":25,"updatedAt":3017},"sentry-setup-ai-monitoring","setup Sentry AI Agent Monitoring","Setup Sentry AI Agent Monitoring in any project. Use when asked to monitor LLM calls, track AI agents, or instrument OpenAI\u002FAnthropic\u002FVercel AI\u002FLangChain\u002FGoogle GenAI\u002FPydantic AI. Detects installed AI SDKs and configures appropriate integrations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3006,3009,3012,3015,3016],{"name":3007,"slug":3008,"type":16},"Agents","agents",{"name":3010,"slug":3011,"type":16},"Instrumentation","instrumentation",{"name":3013,"slug":3014,"type":16},"LLM","llm",{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},"2026-07-18T05:47:22.376586"]