[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-sentry-sentry-python-sdk":3,"mdc-6xam68-key":39,"related-org-sentry-sentry-python-sdk":4590,"related-repo-sentry-sentry-python-sdk":4765},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":27,"repoUrl":28,"updatedAt":29,"license":30,"forks":31,"topics":32,"repo":34,"sourceUrl":37,"mdContent":38},"sentry-python-sdk","setup Sentry monitoring for Python","Full Sentry SDK setup for Python. Use when asked to \"add Sentry to Python\", \"install sentry-sdk\", \"setup Sentry in Python\", or configure error monitoring, tracing, profiling, logging, metrics, crons, or AI monitoring for Python applications. Supports Django, Flask, FastAPI, Celery, Starlette, AIOHTTP, Tornado, and more.",{"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,24],{"name":14,"slug":15,"type":16},"Observability","observability","tag",{"name":18,"slug":19,"type":16},"Monitoring","monitoring",{"name":21,"slug":22,"type":16},"Python","python",{"name":9,"slug":8,"type":16},{"name":25,"slug":26,"type":16},"Debugging","debugging",237,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fsentry-for-ai","2026-07-11T05:53:20.781637","Apache-2.0",30,[33],"tag-production",{"repoUrl":28,"stars":27,"forks":31,"topics":35,"description":36},[33],"Teach your AI coding assistant how to use Sentry - setup, debugging, alerts, and more","https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fsentry-for-ai\u002Ftree\u002FHEAD\u002Fskills-legacy\u002Fsentry-python-sdk","---\nname: sentry-python-sdk\ndescription: Full Sentry SDK setup for Python. Use when asked to \"add Sentry to Python\", \"install sentry-sdk\", \"setup Sentry in Python\", or configure error monitoring, tracing, profiling, logging, metrics, crons, or AI monitoring for Python applications. Supports Django, Flask, FastAPI, Celery, Starlette, AIOHTTP, Tornado, and more.\nlicense: Apache-2.0\ncategory: sdk-setup\nparent: sentry-sdk-setup\ndisable-model-invocation: true\n---\n\n> [All Skills](..\u002F..\u002FSKILL_TREE.md) > [SDK Setup](..\u002Fsentry-sdk-setup\u002FSKILL.md) > Python SDK\n\n# Sentry Python SDK\n\nOpinionated wizard that scans your Python project and guides you through complete Sentry setup.\n\n## Invoke This Skill When\n\n- User asks to \"add Sentry to Python\" or \"setup Sentry\" in a Python app\n- User wants error monitoring, tracing, profiling, logging, metrics, or crons in Python\n- User mentions `sentry-sdk`, `sentry_sdk`, or Sentry + any Python framework\n- User wants to monitor Django views, Flask routes, FastAPI endpoints, Celery tasks, or scheduled jobs\n\n> **Note:** SDK versions and APIs below reflect Sentry docs at time of writing (sentry-sdk 2.x).\n> Always verify against [docs.sentry.io\u002Fplatforms\u002Fpython\u002F](https:\u002F\u002Fdocs.sentry.io\u002Fplatforms\u002Fpython\u002F) before implementing.\n\n---\n\n## Phase 1: Detect\n\nRun these commands to understand the project before making recommendations:\n\n```bash\n# Check existing Sentry\ngrep -i sentry requirements.txt pyproject.toml setup.cfg setup.py 2>\u002Fdev\u002Fnull\n\n# Detect web framework\ngrep -rE \"django|flask|fastapi|starlette|aiohttp|tornado|quart|falcon|sanic|bottle|pyramid\" \\\n  requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\n\n# Detect task queues\ngrep -rE \"celery|rq|huey|arq|dramatiq\" requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\n\n# Detect logging libraries\ngrep -E \"loguru\" requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\n\n# Detect AI libraries\ngrep -rE \"openai|anthropic|langchain|huggingface|google-genai|pydantic-ai|litellm\" \\\n  requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\n\n# Detect schedulers \u002F crons\ngrep -rE \"celery|apscheduler|schedule|crontab\" requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\n\n# OpenTelemetry tracing — check for SDK + instrumentations\ngrep -rE \"opentelemetry-sdk|opentelemetry-instrumentation|opentelemetry-distro\" \\\n  requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\ngrep -rn \"TracerProvider\\|trace\\.get_tracer\\|start_as_current_span\" \\\n  --include=\"*.py\" 2>\u002Fdev\u002Fnull | head -5\n\n# Check for companion frontend\nls frontend\u002F web\u002F client\u002F ui\u002F static\u002F templates\u002F 2>\u002Fdev\u002Fnull\n```\n\n**What to note:**\n- Is `sentry-sdk` already in requirements? If yes, check if `sentry_sdk.init()` is present — may just need feature config.\n- Which framework? (Determines where to place `sentry_sdk.init()`.)\n- Which task queue? (Celery needs dual-process init; RQ needs a settings file.)\n- AI libraries? (OpenAI, Anthropic, LangChain are auto-instrumented.)\n- OpenTelemetry tracing? (Use OTLP path instead of native tracing.)\n- Companion frontend? (Triggers Phase 4 cross-link.)\n\n---\n\n## Phase 2: Recommend\n\nBased on what you found, present a concrete proposal. Don't ask open-ended questions — lead with a recommendation:\n\n**Route from OTel detection:**\n- **OTel tracing detected** (`opentelemetry-sdk` \u002F `opentelemetry-distro` in requirements, or `TracerProvider` in source) → use OTLP path: `OTLPIntegration()`; do **not** set `traces_sample_rate`; Sentry links errors to OTel traces automatically\n\n**Always recommended (core coverage):**\n- ✅ **Error Monitoring** — captures unhandled exceptions, supports `ExceptionGroup` (Python 3.11+)\n- ✅ **Logging** — Python `logging` stdlib auto-captured; enhanced if Loguru detected\n\n**Recommend when detected:**\n- ✅ **Tracing** — HTTP framework detected (Django\u002FFlask\u002FFastAPI\u002Fetc.)\n- ✅ **AI Monitoring** — OpenAI\u002FAnthropic\u002FLangChain\u002Fetc. detected (auto-instrumented, zero config)\n- ⚡ **Profiling** — production apps where performance matters; **not available with OTLP path**\n- ⚡ **Crons** — Celery Beat, APScheduler, or cron patterns detected\n- ⚡ **Metrics** — business KPIs, SLO tracking\n\n**Recommendation matrix:**\n\n| Feature | Recommend when... | Reference |\n|---------|------------------|-----------|\n| Error Monitoring | **Always** — non-negotiable baseline | `${SKILL_ROOT}\u002Freferences\u002Ferror-monitoring.md` |\n| OTLP Integration | OTel tracing detected — **replaces** native Tracing | `${SKILL_ROOT}\u002Freferences\u002Ftracing.md` |\n| Tracing | Django\u002FFlask\u002FFastAPI\u002FAIOHTTP\u002Fetc. detected; **skip if OTel tracing detected** | `${SKILL_ROOT}\u002Freferences\u002Ftracing.md` |\n| Profiling | Production + performance-sensitive workload; **skip if OTel tracing detected** (requires `traces_sample_rate`, incompatible with OTLP) | `${SKILL_ROOT}\u002Freferences\u002Fprofiling.md` |\n| Logging | Always (stdlib); enhanced for Loguru | `${SKILL_ROOT}\u002Freferences\u002Flogging.md` |\n| Metrics | Business events or SLO tracking needed | `${SKILL_ROOT}\u002Freferences\u002Fmetrics.md` |\n| Crons | Celery Beat, APScheduler, or cron patterns | `${SKILL_ROOT}\u002Freferences\u002Fcrons.md` |\n| AI Monitoring | OpenAI\u002FAnthropic\u002FLangChain\u002Fetc. detected | `${SKILL_ROOT}\u002Freferences\u002Fai-monitoring.md` |\n\n**OTel tracing detected:** *\"I see OpenTelemetry tracing in the project. I recommend Sentry's OTLP integration for tracing (via your existing OTel setup) + Error Monitoring + Sentry Logging [+ Metrics\u002FCrons\u002FAI Monitoring if applicable]. Shall I proceed?\"*\n\n**No OTel:** *\"I recommend Error Monitoring + Tracing [+ Logging if applicable]. Want Profiling, Crons, or AI Monitoring too?\"*\n\n---\n\n## Phase 3: Guide\n\n### Install\n\n```bash\n# Core SDK (always required)\npip install sentry-sdk\n\n# Optional extras (install only what matches detected framework):\npip install \"sentry-sdk[django]\"\npip install \"sentry-sdk[flask]\"\npip install \"sentry-sdk[fastapi]\"\npip install \"sentry-sdk[celery]\"\npip install \"sentry-sdk[aiohttp]\"\npip install \"sentry-sdk[tornado]\"\n\n# Multiple extras:\npip install \"sentry-sdk[django,celery]\"\n```\n\n> Extras are optional — plain `sentry-sdk` works for all frameworks. Extras install complementary packages.\n\n### Quick Start — Recommended Init\n\nFull init enabling the most features with sensible defaults. Place **before** any app\u002Fframework code:\n\n```python\nimport sentry_sdk\n\nsentry_sdk.init(\n    dsn=os.environ[\"SENTRY_DSN\"],\n    environment=os.environ.get(\"SENTRY_ENVIRONMENT\", \"production\"),\n    release=os.environ.get(\"SENTRY_RELEASE\"),   # e.g. \"myapp@1.0.0\"\n    send_default_pii=True,\n\n    # Tracing (lower to 0.1–0.2 in high-traffic production)\n    traces_sample_rate=1.0,\n\n    # Profiling — continuous, tied to active spans\n    profile_session_sample_rate=1.0,\n    profile_lifecycle=\"trace\",\n\n    # Structured logs (SDK ≥ 2.35.0)\n    enable_logs=True,\n)\n```\n\n### Where to Initialize Per Framework\n\n| Framework | Where to call `sentry_sdk.init()` | Notes |\n|-----------|-----------------------------------|-------|\n| **Django** | Top of `settings.py`, before any imports | No middleware needed — Sentry patches Django internally |\n| **Flask** | Before `app = Flask(__name__)` | Must precede app creation |\n| **FastAPI** | Before `app = FastAPI()` | `StarletteIntegration` + `FastApiIntegration` auto-enabled together |\n| **Starlette** | Before `app = Starlette(...)` | Same auto-integration as FastAPI |\n| **AIOHTTP** | Module level, before `web.Application()` | |\n| **Tornado** | Module level, before app setup | No integration class needed |\n| **Quart** | Before `app = Quart(__name__)` | |\n| **Falcon** | Module level, before `app = falcon.App()` | |\n| **Pyramid** | Module level, before `config = Configurator()` | WSGI framework |\n| **Sanic** | Inside `@app.listener(\"before_server_start\")` | Sanic's lifecycle requires async init |\n| **Celery** | `@signals.celeryd_init.connect` in worker AND in calling process | Dual-process init required |\n| **RQ** | `mysettings.py` loaded by worker via `rq worker -c mysettings` | |\n| **ARQ** | Both worker module and enqueuing process | |\n\n**Django example** (`settings.py`):\n```python\nimport sentry_sdk\n\nsentry_sdk.init(\n    dsn=os.environ[\"SENTRY_DSN\"],\n    send_default_pii=True,\n    traces_sample_rate=1.0,\n    profile_session_sample_rate=1.0,\n    profile_lifecycle=\"trace\",\n    enable_logs=True,\n)\n\n# rest of Django settings...\nINSTALLED_APPS = [...]\n```\n\n**FastAPI example** (`main.py`):\n```python\nimport sentry_sdk\n\nsentry_sdk.init(\n    dsn=os.environ[\"SENTRY_DSN\"],\n    send_default_pii=True,\n    traces_sample_rate=1.0,\n    profile_session_sample_rate=1.0,\n    profile_lifecycle=\"trace\",\n    enable_logs=True,\n)\n\nfrom fastapi import FastAPI\napp = FastAPI()\n```\n\n### Auto-Enabled vs Explicit Integrations\n\nMost integrations activate automatically when their package is installed — no `integrations=[...]` needed:\n\n| Auto-enabled | Explicit required |\n|-------------|-------------------|\n| Django, Flask, FastAPI, Starlette, AIOHTTP, Tornado, Quart, Falcon, Pyramid, Sanic, Bottle | `DramatiqIntegration` |\n| Celery, RQ, Huey, ARQ | `GRPCIntegration` |\n| SQLAlchemy, Redis, asyncpg, pymongo | `StrawberryIntegration` |\n| Requests, HTTPX, httpx2, aiohttp-client | `AsyncioIntegration` |\n| OpenAI, Anthropic, LangChain, Pydantic AI, MCP | `OpenTelemetryIntegration` |\n| Python `logging`, Loguru | `WSGIIntegration` \u002F `ASGIIntegration` |\n\n### For Each Agreed Feature\n\nWalk through features one at a time. Load the reference, follow its steps, verify before moving on:\n\n| Feature | Reference file | Load when... |\n|---------|---------------|-------------|\n| Error Monitoring | `${SKILL_ROOT}\u002Freferences\u002Ferror-monitoring.md` | Always (baseline) |\n| Tracing | `${SKILL_ROOT}\u002Freferences\u002Ftracing.md` | HTTP handlers \u002F distributed tracing |\n| Profiling | `${SKILL_ROOT}\u002Freferences\u002Fprofiling.md` | Performance-sensitive production |\n| Logging | `${SKILL_ROOT}\u002Freferences\u002Flogging.md` | Always; enhanced for Loguru |\n| Metrics | `${SKILL_ROOT}\u002Freferences\u002Fmetrics.md` | Business KPIs \u002F SLO tracking |\n| Crons | `${SKILL_ROOT}\u002Freferences\u002Fcrons.md` | Scheduler \u002F cron patterns detected |\n| AI Monitoring | `${SKILL_ROOT}\u002Freferences\u002Fai-monitoring.md` | AI library detected |\n\nFor each feature: `Read ${SKILL_ROOT}\u002Freferences\u002F\u003Cfeature>.md`, follow steps exactly, verify it works.\n\n---\n\n## Configuration Reference\n\n### Key `sentry_sdk.init()` Options\n\n| Option | Type | Default | Purpose |\n|--------|------|---------|---------|\n| `dsn` | `str` | `None` | SDK disabled if empty; env: `SENTRY_DSN` |\n| `environment` | `str` | `\"production\"` | e.g., `\"staging\"`; env: `SENTRY_ENVIRONMENT` |\n| `release` | `str` | `None` | e.g., `\"myapp@1.0.0\"`; env: `SENTRY_RELEASE` |\n| `send_default_pii` | `bool` | `False` | Include IP, headers, cookies, auth user, query strings (ASGI frameworks) |\n| `traces_sample_rate` | `float` | `None` | Transaction sample rate; `None` disables tracing |\n| `traces_sampler` | `Callable` | `None` | Custom per-transaction sampling (overrides rate) |\n| `profile_session_sample_rate` | `float` | `None` | Continuous profiling session rate |\n| `profile_lifecycle` | `str` | `\"manual\"` | `\"trace\"` = auto-start profiler with spans |\n| `profiles_sample_rate` | `float` | `None` | Transaction-based profiling rate |\n| `enable_logs` | `bool` | `False` | Send logs to Sentry (SDK ≥ 2.35.0) |\n| `sample_rate` | `float` | `1.0` | Error event sample rate |\n| `attach_stacktrace` | `bool` | `False` | Stack traces on `capture_message()` |\n| `max_breadcrumbs` | `int` | `100` | Max breadcrumbs per event |\n| `debug` | `bool` | `False` | Verbose SDK debug output |\n| `before_send` | `Callable` | `None` | Hook to mutate\u002Fdrop error events |\n| `before_send_transaction` | `Callable` | `None` | Hook to mutate\u002Fdrop transaction events |\n| `ignore_errors` | `list` | `[]` | Exception types or regex patterns to suppress |\n| `auto_enabling_integrations` | `bool` | `True` | Set `False` to disable all auto-detection |\n\n#### `OTLPIntegration` Options (pass to constructor)\n\n| Option | Type | Default | Purpose |\n|--------|------|---------|---------|\n| `setup_otlp_traces_exporter` | `bool` | `True` | Auto-configure OTLP exporter; set `False` if you send to your own Collector |\n| `collector_url` | `str` | `None` | OTLP HTTP endpoint of an OTel Collector (e.g., `http:\u002F\u002Flocalhost:4318\u002Fv1\u002Ftraces`); when set, spans are sent to the collector instead of directly to Sentry |\n| `setup_propagator` | `bool` | `True` | Auto-configure Sentry propagator for distributed tracing |\n| `capture_exceptions` | `bool` | `False` | Intercept exceptions recorded via OTel `Span.record_exception` |\n\n### Environment Variables\n\n| Variable | Maps to | Notes |\n|----------|---------|-------|\n| `SENTRY_DSN` | `dsn` | |\n| `SENTRY_RELEASE` | `release` | Also auto-detected from git SHA, Heroku, CircleCI, CodeBuild, GAE |\n| `SENTRY_ENVIRONMENT` | `environment` | |\n| `SENTRY_DEBUG` | `debug` | |\n\n---\n\n## Verification\n\nTest that Sentry is receiving events:\n\n```python\n# Trigger a real error event — check dashboard within seconds\ndivision_by_zero = 1 \u002F 0\n```\n\nOr for a non-crashing check:\n```python\nsentry_sdk.capture_message(\"Sentry Python SDK test\")\n```\n\nIf nothing appears:\n1. Set `debug=True` in `sentry_sdk.init()` — prints SDK internals to stdout\n2. Verify the DSN is correct\n3. Check `SENTRY_DSN` env var is set in the running process\n4. For Celery\u002FRQ: ensure init runs in the **worker** process, not just the calling process\n\n---\n\n## Phase 4: Cross-Link\n\nAfter completing Python setup, check for a companion frontend missing Sentry:\n\n```bash\nls frontend\u002F web\u002F client\u002F ui\u002F 2>\u002Fdev\u002Fnull\ncat frontend\u002Fpackage.json web\u002Fpackage.json client\u002Fpackage.json 2>\u002Fdev\u002Fnull \\\n  | grep -E '\"react\"|\"svelte\"|\"vue\"|\"next\"|\"nuxt\"'\n```\n\nIf a frontend exists without Sentry, suggest the matching skill:\n\n| Frontend detected | Suggest skill |\n|-------------------|--------------|\n| React \u002F Next.js | `sentry-react-sdk` |\n| Svelte \u002F SvelteKit | `sentry-svelte-sdk` |\n| Vue \u002F Nuxt | Use `@sentry\u002Fvue` — see [docs.sentry.io\u002Fplatforms\u002Fjavascript\u002Fguides\u002Fvue\u002F](https:\u002F\u002Fdocs.sentry.io\u002Fplatforms\u002Fjavascript\u002Fguides\u002Fvue\u002F) |\n| Other JS\u002FTS | `sentry-react-sdk` (covers generic browser JS patterns) |\n\n---\n\n## Troubleshooting\n\n| Issue | Solution |\n|-------|----------|\n| Events not appearing | Set `debug=True`, verify DSN, check env vars in the running process |\n| Malformed DSN error | Format: `https:\u002F\u002F\u003Ckey>@o\u003Corg>.ingest.sentry.io\u002F\u003Cproject>` |\n| Django exceptions not captured | Ensure `sentry_sdk.init()` is at the **top** of `settings.py` before other imports |\n| Flask exceptions not captured | Init must happen **before** `app = Flask(__name__)` |\n| FastAPI exceptions not captured | Init before `app = FastAPI()`; both `StarletteIntegration` and `FastApiIntegration` auto-enabled |\n| ASGI chained exceptions suppressed | By default, Sentry's ASGI middleware strips exception chains (`raise exc from None`). To preserve chained exceptions, set `_experiments={\"suppress_asgi_chained_exceptions\": False}` in `sentry_sdk.init()` |\n| Celery task errors not captured | Must call `sentry_sdk.init()` in the **worker process** via `celeryd_init` signal |\n| Sanic init not working | Init must be inside `@app.listener(\"before_server_start\")`, not module level |\n| uWSGI not capturing | Add `--enable-threads --py-call-uwsgi-fork-hooks` to uWSGI command |\n| No traces appearing (native) | Verify `traces_sample_rate` is set (not `None`); check that the integration is auto-enabled |\n| No traces appearing (OTLP) | Verify `sentry-sdk[opentelemetry-otlp]` is installed; do **not** set `traces_sample_rate` when using `OTLPIntegration` |\n| Profiling not starting | Requires `traces_sample_rate > 0` + either `profile_session_sample_rate` or `profiles_sample_rate`; **not compatible with OTLP path** |\n| `enable_logs` not working | Requires SDK ≥ 2.35.0; for direct structured logs use `sentry_sdk.logger`; for stdlib bridging use `LoggingIntegration(sentry_logs_level=...)` |\n| Too many transactions | Lower `traces_sample_rate` or use `traces_sampler` to drop health checks |\n| Cross-request data leaking | Don't use `get_global_scope()` for per-request data — use `get_isolation_scope()` |\n| Query strings not captured (ASGI) | Query strings and client IP in ASGI frameworks (FastAPI, Starlette, etc.) require `send_default_pii=True` |\n| RQ worker not reporting | Pass `--sentry-dsn=\"\"` to disable RQ's own Sentry shortcut; init via settings file instead |\n",{"data":40,"body":44},{"name":4,"description":6,"license":30,"category":41,"parent":42,"disable-model-invocation":43},"sdk-setup","sentry-sdk-setup",true,{"type":45,"children":46},"root",[47,74,80,85,92,134,158,162,168,173,768,776,831,834,840,845,853,913,921,963,971,1035,1043,1274,1297,1318,1321,1327,1334,1566,1581,1587,1599,1747,1753,2131,2147,2247,2263,2363,2369,2382,2520,2526,2531,2697,2710,2713,2719,2732,3429,3442,3623,3629,3746,3749,3755,3760,3783,3788,3802,3807,3859,3862,3868,3873,3978,3983,4085,4088,4094,4584],{"type":48,"tag":49,"props":50,"children":51},"element","blockquote",{},[52],{"type":48,"tag":53,"props":54,"children":55},"p",{},[56,64,66,72],{"type":48,"tag":57,"props":58,"children":60},"a",{"href":59},"..\u002F..\u002FSKILL_TREE.md",[61],{"type":62,"value":63},"text","All Skills",{"type":62,"value":65}," > ",{"type":48,"tag":57,"props":67,"children":69},{"href":68},"..\u002Fsentry-sdk-setup\u002FSKILL.md",[70],{"type":62,"value":71},"SDK Setup",{"type":62,"value":73}," > Python SDK",{"type":48,"tag":75,"props":76,"children":77},"h1",{"id":4},[78],{"type":62,"value":79},"Sentry Python SDK",{"type":48,"tag":53,"props":81,"children":82},{},[83],{"type":62,"value":84},"Opinionated wizard that scans your Python project and guides you through complete Sentry setup.",{"type":48,"tag":86,"props":87,"children":89},"h2",{"id":88},"invoke-this-skill-when",[90],{"type":62,"value":91},"Invoke This Skill When",{"type":48,"tag":93,"props":94,"children":95},"ul",{},[96,102,107,129],{"type":48,"tag":97,"props":98,"children":99},"li",{},[100],{"type":62,"value":101},"User asks to \"add Sentry to Python\" or \"setup Sentry\" in a Python app",{"type":48,"tag":97,"props":103,"children":104},{},[105],{"type":62,"value":106},"User wants error monitoring, tracing, profiling, logging, metrics, or crons in Python",{"type":48,"tag":97,"props":108,"children":109},{},[110,112,119,121,127],{"type":62,"value":111},"User mentions ",{"type":48,"tag":113,"props":114,"children":116},"code",{"className":115},[],[117],{"type":62,"value":118},"sentry-sdk",{"type":62,"value":120},", ",{"type":48,"tag":113,"props":122,"children":124},{"className":123},[],[125],{"type":62,"value":126},"sentry_sdk",{"type":62,"value":128},", or Sentry + any Python framework",{"type":48,"tag":97,"props":130,"children":131},{},[132],{"type":62,"value":133},"User wants to monitor Django views, Flask routes, FastAPI endpoints, Celery tasks, or scheduled jobs",{"type":48,"tag":49,"props":135,"children":136},{},[137],{"type":48,"tag":53,"props":138,"children":139},{},[140,146,148,156],{"type":48,"tag":141,"props":142,"children":143},"strong",{},[144],{"type":62,"value":145},"Note:",{"type":62,"value":147}," SDK versions and APIs below reflect Sentry docs at time of writing (sentry-sdk 2.x).\nAlways verify against ",{"type":48,"tag":57,"props":149,"children":153},{"href":150,"rel":151},"https:\u002F\u002Fdocs.sentry.io\u002Fplatforms\u002Fpython\u002F",[152],"nofollow",[154],{"type":62,"value":155},"docs.sentry.io\u002Fplatforms\u002Fpython\u002F",{"type":62,"value":157}," before implementing.",{"type":48,"tag":159,"props":160,"children":161},"hr",{},[],{"type":48,"tag":86,"props":163,"children":165},{"id":164},"phase-1-detect",[166],{"type":62,"value":167},"Phase 1: Detect",{"type":48,"tag":53,"props":169,"children":170},{},[171],{"type":62,"value":172},"Run these commands to understand the project before making recommendations:",{"type":48,"tag":174,"props":175,"children":180},"pre",{"className":176,"code":177,"language":178,"meta":179,"style":179},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Check existing Sentry\ngrep -i sentry requirements.txt pyproject.toml setup.cfg setup.py 2>\u002Fdev\u002Fnull\n\n# Detect web framework\ngrep -rE \"django|flask|fastapi|starlette|aiohttp|tornado|quart|falcon|sanic|bottle|pyramid\" \\\n  requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\n\n# Detect task queues\ngrep -rE \"celery|rq|huey|arq|dramatiq\" requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\n\n# Detect logging libraries\ngrep -E \"loguru\" requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\n\n# Detect AI libraries\ngrep -rE \"openai|anthropic|langchain|huggingface|google-genai|pydantic-ai|litellm\" \\\n  requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\n\n# Detect schedulers \u002F crons\ngrep -rE \"celery|apscheduler|schedule|crontab\" requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\n\n# OpenTelemetry tracing — check for SDK + instrumentations\ngrep -rE \"opentelemetry-sdk|opentelemetry-instrumentation|opentelemetry-distro\" \\\n  requirements.txt pyproject.toml 2>\u002Fdev\u002Fnull\ngrep -rn \"TracerProvider\\|trace\\.get_tracer\\|start_as_current_span\" \\\n  --include=\"*.py\" 2>\u002Fdev\u002Fnull | head -5\n\n# Check for companion frontend\nls frontend\u002F web\u002F client\u002F ui\u002F static\u002F templates\u002F 2>\u002Fdev\u002Fnull\n","bash","",[181],{"type":48,"tag":113,"props":182,"children":183},{"__ignoreMap":179},[184,196,248,257,266,300,321,329,338,379,387,396,438,446,455,484,504,512,521,562,570,579,608,628,658,704,712,721],{"type":48,"tag":185,"props":186,"children":189},"span",{"class":187,"line":188},"line",1,[190],{"type":48,"tag":185,"props":191,"children":193},{"style":192},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[194],{"type":62,"value":195},"# Check existing Sentry\n",{"type":48,"tag":185,"props":197,"children":199},{"class":187,"line":198},2,[200,206,212,217,222,227,232,237,243],{"type":48,"tag":185,"props":201,"children":203},{"style":202},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[204],{"type":62,"value":205},"grep",{"type":48,"tag":185,"props":207,"children":209},{"style":208},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[210],{"type":62,"value":211}," -i",{"type":48,"tag":185,"props":213,"children":214},{"style":208},[215],{"type":62,"value":216}," sentry",{"type":48,"tag":185,"props":218,"children":219},{"style":208},[220],{"type":62,"value":221}," requirements.txt",{"type":48,"tag":185,"props":223,"children":224},{"style":208},[225],{"type":62,"value":226}," pyproject.toml",{"type":48,"tag":185,"props":228,"children":229},{"style":208},[230],{"type":62,"value":231}," setup.cfg",{"type":48,"tag":185,"props":233,"children":234},{"style":208},[235],{"type":62,"value":236}," setup.py",{"type":48,"tag":185,"props":238,"children":240},{"style":239},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[241],{"type":62,"value":242}," 2>",{"type":48,"tag":185,"props":244,"children":245},{"style":208},[246],{"type":62,"value":247},"\u002Fdev\u002Fnull\n",{"type":48,"tag":185,"props":249,"children":251},{"class":187,"line":250},3,[252],{"type":48,"tag":185,"props":253,"children":254},{"emptyLinePlaceholder":43},[255],{"type":62,"value":256},"\n",{"type":48,"tag":185,"props":258,"children":260},{"class":187,"line":259},4,[261],{"type":48,"tag":185,"props":262,"children":263},{"style":192},[264],{"type":62,"value":265},"# Detect web framework\n",{"type":48,"tag":185,"props":267,"children":269},{"class":187,"line":268},5,[270,274,279,284,289,294],{"type":48,"tag":185,"props":271,"children":272},{"style":202},[273],{"type":62,"value":205},{"type":48,"tag":185,"props":275,"children":276},{"style":208},[277],{"type":62,"value":278}," -rE",{"type":48,"tag":185,"props":280,"children":281},{"style":239},[282],{"type":62,"value":283}," \"",{"type":48,"tag":185,"props":285,"children":286},{"style":208},[287],{"type":62,"value":288},"django|flask|fastapi|starlette|aiohttp|tornado|quart|falcon|sanic|bottle|pyramid",{"type":48,"tag":185,"props":290,"children":291},{"style":239},[292],{"type":62,"value":293},"\"",{"type":48,"tag":185,"props":295,"children":297},{"style":296},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[298],{"type":62,"value":299}," \\\n",{"type":48,"tag":185,"props":301,"children":303},{"class":187,"line":302},6,[304,309,313,317],{"type":48,"tag":185,"props":305,"children":306},{"style":208},[307],{"type":62,"value":308},"  requirements.txt",{"type":48,"tag":185,"props":310,"children":311},{"style":208},[312],{"type":62,"value":226},{"type":48,"tag":185,"props":314,"children":315},{"style":239},[316],{"type":62,"value":242},{"type":48,"tag":185,"props":318,"children":319},{"style":208},[320],{"type":62,"value":247},{"type":48,"tag":185,"props":322,"children":324},{"class":187,"line":323},7,[325],{"type":48,"tag":185,"props":326,"children":327},{"emptyLinePlaceholder":43},[328],{"type":62,"value":256},{"type":48,"tag":185,"props":330,"children":332},{"class":187,"line":331},8,[333],{"type":48,"tag":185,"props":334,"children":335},{"style":192},[336],{"type":62,"value":337},"# Detect task queues\n",{"type":48,"tag":185,"props":339,"children":341},{"class":187,"line":340},9,[342,346,350,354,359,363,367,371,375],{"type":48,"tag":185,"props":343,"children":344},{"style":202},[345],{"type":62,"value":205},{"type":48,"tag":185,"props":347,"children":348},{"style":208},[349],{"type":62,"value":278},{"type":48,"tag":185,"props":351,"children":352},{"style":239},[353],{"type":62,"value":283},{"type":48,"tag":185,"props":355,"children":356},{"style":208},[357],{"type":62,"value":358},"celery|rq|huey|arq|dramatiq",{"type":48,"tag":185,"props":360,"children":361},{"style":239},[362],{"type":62,"value":293},{"type":48,"tag":185,"props":364,"children":365},{"style":208},[366],{"type":62,"value":221},{"type":48,"tag":185,"props":368,"children":369},{"style":208},[370],{"type":62,"value":226},{"type":48,"tag":185,"props":372,"children":373},{"style":239},[374],{"type":62,"value":242},{"type":48,"tag":185,"props":376,"children":377},{"style":208},[378],{"type":62,"value":247},{"type":48,"tag":185,"props":380,"children":382},{"class":187,"line":381},10,[383],{"type":48,"tag":185,"props":384,"children":385},{"emptyLinePlaceholder":43},[386],{"type":62,"value":256},{"type":48,"tag":185,"props":388,"children":390},{"class":187,"line":389},11,[391],{"type":48,"tag":185,"props":392,"children":393},{"style":192},[394],{"type":62,"value":395},"# Detect logging libraries\n",{"type":48,"tag":185,"props":397,"children":399},{"class":187,"line":398},12,[400,404,409,413,418,422,426,430,434],{"type":48,"tag":185,"props":401,"children":402},{"style":202},[403],{"type":62,"value":205},{"type":48,"tag":185,"props":405,"children":406},{"style":208},[407],{"type":62,"value":408}," -E",{"type":48,"tag":185,"props":410,"children":411},{"style":239},[412],{"type":62,"value":283},{"type":48,"tag":185,"props":414,"children":415},{"style":208},[416],{"type":62,"value":417},"loguru",{"type":48,"tag":185,"props":419,"children":420},{"style":239},[421],{"type":62,"value":293},{"type":48,"tag":185,"props":423,"children":424},{"style":208},[425],{"type":62,"value":221},{"type":48,"tag":185,"props":427,"children":428},{"style":208},[429],{"type":62,"value":226},{"type":48,"tag":185,"props":431,"children":432},{"style":239},[433],{"type":62,"value":242},{"type":48,"tag":185,"props":435,"children":436},{"style":208},[437],{"type":62,"value":247},{"type":48,"tag":185,"props":439,"children":441},{"class":187,"line":440},13,[442],{"type":48,"tag":185,"props":443,"children":444},{"emptyLinePlaceholder":43},[445],{"type":62,"value":256},{"type":48,"tag":185,"props":447,"children":449},{"class":187,"line":448},14,[450],{"type":48,"tag":185,"props":451,"children":452},{"style":192},[453],{"type":62,"value":454},"# Detect AI libraries\n",{"type":48,"tag":185,"props":456,"children":458},{"class":187,"line":457},15,[459,463,467,471,476,480],{"type":48,"tag":185,"props":460,"children":461},{"style":202},[462],{"type":62,"value":205},{"type":48,"tag":185,"props":464,"children":465},{"style":208},[466],{"type":62,"value":278},{"type":48,"tag":185,"props":468,"children":469},{"style":239},[470],{"type":62,"value":283},{"type":48,"tag":185,"props":472,"children":473},{"style":208},[474],{"type":62,"value":475},"openai|anthropic|langchain|huggingface|google-genai|pydantic-ai|litellm",{"type":48,"tag":185,"props":477,"children":478},{"style":239},[479],{"type":62,"value":293},{"type":48,"tag":185,"props":481,"children":482},{"style":296},[483],{"type":62,"value":299},{"type":48,"tag":185,"props":485,"children":487},{"class":187,"line":486},16,[488,492,496,500],{"type":48,"tag":185,"props":489,"children":490},{"style":208},[491],{"type":62,"value":308},{"type":48,"tag":185,"props":493,"children":494},{"style":208},[495],{"type":62,"value":226},{"type":48,"tag":185,"props":497,"children":498},{"style":239},[499],{"type":62,"value":242},{"type":48,"tag":185,"props":501,"children":502},{"style":208},[503],{"type":62,"value":247},{"type":48,"tag":185,"props":505,"children":507},{"class":187,"line":506},17,[508],{"type":48,"tag":185,"props":509,"children":510},{"emptyLinePlaceholder":43},[511],{"type":62,"value":256},{"type":48,"tag":185,"props":513,"children":515},{"class":187,"line":514},18,[516],{"type":48,"tag":185,"props":517,"children":518},{"style":192},[519],{"type":62,"value":520},"# Detect schedulers \u002F crons\n",{"type":48,"tag":185,"props":522,"children":524},{"class":187,"line":523},19,[525,529,533,537,542,546,550,554,558],{"type":48,"tag":185,"props":526,"children":527},{"style":202},[528],{"type":62,"value":205},{"type":48,"tag":185,"props":530,"children":531},{"style":208},[532],{"type":62,"value":278},{"type":48,"tag":185,"props":534,"children":535},{"style":239},[536],{"type":62,"value":283},{"type":48,"tag":185,"props":538,"children":539},{"style":208},[540],{"type":62,"value":541},"celery|apscheduler|schedule|crontab",{"type":48,"tag":185,"props":543,"children":544},{"style":239},[545],{"type":62,"value":293},{"type":48,"tag":185,"props":547,"children":548},{"style":208},[549],{"type":62,"value":221},{"type":48,"tag":185,"props":551,"children":552},{"style":208},[553],{"type":62,"value":226},{"type":48,"tag":185,"props":555,"children":556},{"style":239},[557],{"type":62,"value":242},{"type":48,"tag":185,"props":559,"children":560},{"style":208},[561],{"type":62,"value":247},{"type":48,"tag":185,"props":563,"children":565},{"class":187,"line":564},20,[566],{"type":48,"tag":185,"props":567,"children":568},{"emptyLinePlaceholder":43},[569],{"type":62,"value":256},{"type":48,"tag":185,"props":571,"children":573},{"class":187,"line":572},21,[574],{"type":48,"tag":185,"props":575,"children":576},{"style":192},[577],{"type":62,"value":578},"# OpenTelemetry tracing — check for SDK + instrumentations\n",{"type":48,"tag":185,"props":580,"children":582},{"class":187,"line":581},22,[583,587,591,595,600,604],{"type":48,"tag":185,"props":584,"children":585},{"style":202},[586],{"type":62,"value":205},{"type":48,"tag":185,"props":588,"children":589},{"style":208},[590],{"type":62,"value":278},{"type":48,"tag":185,"props":592,"children":593},{"style":239},[594],{"type":62,"value":283},{"type":48,"tag":185,"props":596,"children":597},{"style":208},[598],{"type":62,"value":599},"opentelemetry-sdk|opentelemetry-instrumentation|opentelemetry-distro",{"type":48,"tag":185,"props":601,"children":602},{"style":239},[603],{"type":62,"value":293},{"type":48,"tag":185,"props":605,"children":606},{"style":296},[607],{"type":62,"value":299},{"type":48,"tag":185,"props":609,"children":611},{"class":187,"line":610},23,[612,616,620,624],{"type":48,"tag":185,"props":613,"children":614},{"style":208},[615],{"type":62,"value":308},{"type":48,"tag":185,"props":617,"children":618},{"style":208},[619],{"type":62,"value":226},{"type":48,"tag":185,"props":621,"children":622},{"style":239},[623],{"type":62,"value":242},{"type":48,"tag":185,"props":625,"children":626},{"style":208},[627],{"type":62,"value":247},{"type":48,"tag":185,"props":629,"children":631},{"class":187,"line":630},24,[632,636,641,645,650,654],{"type":48,"tag":185,"props":633,"children":634},{"style":202},[635],{"type":62,"value":205},{"type":48,"tag":185,"props":637,"children":638},{"style":208},[639],{"type":62,"value":640}," -rn",{"type":48,"tag":185,"props":642,"children":643},{"style":239},[644],{"type":62,"value":283},{"type":48,"tag":185,"props":646,"children":647},{"style":208},[648],{"type":62,"value":649},"TracerProvider\\|trace\\.get_tracer\\|start_as_current_span",{"type":48,"tag":185,"props":651,"children":652},{"style":239},[653],{"type":62,"value":293},{"type":48,"tag":185,"props":655,"children":656},{"style":296},[657],{"type":62,"value":299},{"type":48,"tag":185,"props":659,"children":661},{"class":187,"line":660},25,[662,667,671,676,680,684,689,694,699],{"type":48,"tag":185,"props":663,"children":664},{"style":208},[665],{"type":62,"value":666},"  --include=",{"type":48,"tag":185,"props":668,"children":669},{"style":239},[670],{"type":62,"value":293},{"type":48,"tag":185,"props":672,"children":673},{"style":208},[674],{"type":62,"value":675},"*.py",{"type":48,"tag":185,"props":677,"children":678},{"style":239},[679],{"type":62,"value":293},{"type":48,"tag":185,"props":681,"children":682},{"style":239},[683],{"type":62,"value":242},{"type":48,"tag":185,"props":685,"children":686},{"style":208},[687],{"type":62,"value":688},"\u002Fdev\u002Fnull",{"type":48,"tag":185,"props":690,"children":691},{"style":239},[692],{"type":62,"value":693}," |",{"type":48,"tag":185,"props":695,"children":696},{"style":202},[697],{"type":62,"value":698}," head",{"type":48,"tag":185,"props":700,"children":701},{"style":208},[702],{"type":62,"value":703}," -5\n",{"type":48,"tag":185,"props":705,"children":707},{"class":187,"line":706},26,[708],{"type":48,"tag":185,"props":709,"children":710},{"emptyLinePlaceholder":43},[711],{"type":62,"value":256},{"type":48,"tag":185,"props":713,"children":715},{"class":187,"line":714},27,[716],{"type":48,"tag":185,"props":717,"children":718},{"style":192},[719],{"type":62,"value":720},"# Check for companion frontend\n",{"type":48,"tag":185,"props":722,"children":724},{"class":187,"line":723},28,[725,730,735,740,745,750,755,760,764],{"type":48,"tag":185,"props":726,"children":727},{"style":202},[728],{"type":62,"value":729},"ls",{"type":48,"tag":185,"props":731,"children":732},{"style":208},[733],{"type":62,"value":734}," frontend\u002F",{"type":48,"tag":185,"props":736,"children":737},{"style":208},[738],{"type":62,"value":739}," web\u002F",{"type":48,"tag":185,"props":741,"children":742},{"style":208},[743],{"type":62,"value":744}," client\u002F",{"type":48,"tag":185,"props":746,"children":747},{"style":208},[748],{"type":62,"value":749}," ui\u002F",{"type":48,"tag":185,"props":751,"children":752},{"style":208},[753],{"type":62,"value":754}," static\u002F",{"type":48,"tag":185,"props":756,"children":757},{"style":208},[758],{"type":62,"value":759}," templates\u002F",{"type":48,"tag":185,"props":761,"children":762},{"style":239},[763],{"type":62,"value":242},{"type":48,"tag":185,"props":765,"children":766},{"style":208},[767],{"type":62,"value":247},{"type":48,"tag":53,"props":769,"children":770},{},[771],{"type":48,"tag":141,"props":772,"children":773},{},[774],{"type":62,"value":775},"What to note:",{"type":48,"tag":93,"props":777,"children":778},{},[779,799,811,816,821,826],{"type":48,"tag":97,"props":780,"children":781},{},[782,784,789,791,797],{"type":62,"value":783},"Is ",{"type":48,"tag":113,"props":785,"children":787},{"className":786},[],[788],{"type":62,"value":118},{"type":62,"value":790}," already in requirements? If yes, check if ",{"type":48,"tag":113,"props":792,"children":794},{"className":793},[],[795],{"type":62,"value":796},"sentry_sdk.init()",{"type":62,"value":798}," is present — may just need feature config.",{"type":48,"tag":97,"props":800,"children":801},{},[802,804,809],{"type":62,"value":803},"Which framework? (Determines where to place ",{"type":48,"tag":113,"props":805,"children":807},{"className":806},[],[808],{"type":62,"value":796},{"type":62,"value":810},".)",{"type":48,"tag":97,"props":812,"children":813},{},[814],{"type":62,"value":815},"Which task queue? (Celery needs dual-process init; RQ needs a settings file.)",{"type":48,"tag":97,"props":817,"children":818},{},[819],{"type":62,"value":820},"AI libraries? (OpenAI, Anthropic, LangChain are auto-instrumented.)",{"type":48,"tag":97,"props":822,"children":823},{},[824],{"type":62,"value":825},"OpenTelemetry tracing? (Use OTLP path instead of native tracing.)",{"type":48,"tag":97,"props":827,"children":828},{},[829],{"type":62,"value":830},"Companion frontend? (Triggers Phase 4 cross-link.)",{"type":48,"tag":159,"props":832,"children":833},{},[],{"type":48,"tag":86,"props":835,"children":837},{"id":836},"phase-2-recommend",[838],{"type":62,"value":839},"Phase 2: Recommend",{"type":48,"tag":53,"props":841,"children":842},{},[843],{"type":62,"value":844},"Based on what you found, present a concrete proposal. Don't ask open-ended questions — lead with a recommendation:",{"type":48,"tag":53,"props":846,"children":847},{},[848],{"type":48,"tag":141,"props":849,"children":850},{},[851],{"type":62,"value":852},"Route from OTel detection:",{"type":48,"tag":93,"props":854,"children":855},{},[856],{"type":48,"tag":97,"props":857,"children":858},{},[859,864,866,872,874,880,882,888,890,896,898,903,905,911],{"type":48,"tag":141,"props":860,"children":861},{},[862],{"type":62,"value":863},"OTel tracing detected",{"type":62,"value":865}," (",{"type":48,"tag":113,"props":867,"children":869},{"className":868},[],[870],{"type":62,"value":871},"opentelemetry-sdk",{"type":62,"value":873}," \u002F ",{"type":48,"tag":113,"props":875,"children":877},{"className":876},[],[878],{"type":62,"value":879},"opentelemetry-distro",{"type":62,"value":881}," in requirements, or ",{"type":48,"tag":113,"props":883,"children":885},{"className":884},[],[886],{"type":62,"value":887},"TracerProvider",{"type":62,"value":889}," in source) → use OTLP path: ",{"type":48,"tag":113,"props":891,"children":893},{"className":892},[],[894],{"type":62,"value":895},"OTLPIntegration()",{"type":62,"value":897},"; do ",{"type":48,"tag":141,"props":899,"children":900},{},[901],{"type":62,"value":902},"not",{"type":62,"value":904}," set ",{"type":48,"tag":113,"props":906,"children":908},{"className":907},[],[909],{"type":62,"value":910},"traces_sample_rate",{"type":62,"value":912},"; Sentry links errors to OTel traces automatically",{"type":48,"tag":53,"props":914,"children":915},{},[916],{"type":48,"tag":141,"props":917,"children":918},{},[919],{"type":62,"value":920},"Always recommended (core coverage):",{"type":48,"tag":93,"props":922,"children":923},{},[924,944],{"type":48,"tag":97,"props":925,"children":926},{},[927,929,934,936,942],{"type":62,"value":928},"✅ ",{"type":48,"tag":141,"props":930,"children":931},{},[932],{"type":62,"value":933},"Error Monitoring",{"type":62,"value":935}," — captures unhandled exceptions, supports ",{"type":48,"tag":113,"props":937,"children":939},{"className":938},[],[940],{"type":62,"value":941},"ExceptionGroup",{"type":62,"value":943}," (Python 3.11+)",{"type":48,"tag":97,"props":945,"children":946},{},[947,948,953,955,961],{"type":62,"value":928},{"type":48,"tag":141,"props":949,"children":950},{},[951],{"type":62,"value":952},"Logging",{"type":62,"value":954}," — Python ",{"type":48,"tag":113,"props":956,"children":958},{"className":957},[],[959],{"type":62,"value":960},"logging",{"type":62,"value":962}," stdlib auto-captured; enhanced if Loguru detected",{"type":48,"tag":53,"props":964,"children":965},{},[966],{"type":48,"tag":141,"props":967,"children":968},{},[969],{"type":62,"value":970},"Recommend when detected:",{"type":48,"tag":93,"props":972,"children":973},{},[974,985,996,1013,1024],{"type":48,"tag":97,"props":975,"children":976},{},[977,978,983],{"type":62,"value":928},{"type":48,"tag":141,"props":979,"children":980},{},[981],{"type":62,"value":982},"Tracing",{"type":62,"value":984}," — HTTP framework detected (Django\u002FFlask\u002FFastAPI\u002Fetc.)",{"type":48,"tag":97,"props":986,"children":987},{},[988,989,994],{"type":62,"value":928},{"type":48,"tag":141,"props":990,"children":991},{},[992],{"type":62,"value":993},"AI Monitoring",{"type":62,"value":995}," — OpenAI\u002FAnthropic\u002FLangChain\u002Fetc. detected (auto-instrumented, zero config)",{"type":48,"tag":97,"props":997,"children":998},{},[999,1001,1006,1008],{"type":62,"value":1000},"⚡ ",{"type":48,"tag":141,"props":1002,"children":1003},{},[1004],{"type":62,"value":1005},"Profiling",{"type":62,"value":1007}," — production apps where performance matters; ",{"type":48,"tag":141,"props":1009,"children":1010},{},[1011],{"type":62,"value":1012},"not available with OTLP path",{"type":48,"tag":97,"props":1014,"children":1015},{},[1016,1017,1022],{"type":62,"value":1000},{"type":48,"tag":141,"props":1018,"children":1019},{},[1020],{"type":62,"value":1021},"Crons",{"type":62,"value":1023}," — Celery Beat, APScheduler, or cron patterns detected",{"type":48,"tag":97,"props":1025,"children":1026},{},[1027,1028,1033],{"type":62,"value":1000},{"type":48,"tag":141,"props":1029,"children":1030},{},[1031],{"type":62,"value":1032},"Metrics",{"type":62,"value":1034}," — business KPIs, SLO tracking",{"type":48,"tag":53,"props":1036,"children":1037},{},[1038],{"type":48,"tag":141,"props":1039,"children":1040},{},[1041],{"type":62,"value":1042},"Recommendation matrix:",{"type":48,"tag":1044,"props":1045,"children":1046},"table",{},[1047,1071],{"type":48,"tag":1048,"props":1049,"children":1050},"thead",{},[1051],{"type":48,"tag":1052,"props":1053,"children":1054},"tr",{},[1055,1061,1066],{"type":48,"tag":1056,"props":1057,"children":1058},"th",{},[1059],{"type":62,"value":1060},"Feature",{"type":48,"tag":1056,"props":1062,"children":1063},{},[1064],{"type":62,"value":1065},"Recommend when...",{"type":48,"tag":1056,"props":1067,"children":1068},{},[1069],{"type":62,"value":1070},"Reference",{"type":48,"tag":1072,"props":1073,"children":1074},"tbody",{},[1075,1102,1131,1156,1190,1211,1232,1253],{"type":48,"tag":1052,"props":1076,"children":1077},{},[1078,1083,1093],{"type":48,"tag":1079,"props":1080,"children":1081},"td",{},[1082],{"type":62,"value":933},{"type":48,"tag":1079,"props":1084,"children":1085},{},[1086,1091],{"type":48,"tag":141,"props":1087,"children":1088},{},[1089],{"type":62,"value":1090},"Always",{"type":62,"value":1092}," — non-negotiable baseline",{"type":48,"tag":1079,"props":1094,"children":1095},{},[1096],{"type":48,"tag":113,"props":1097,"children":1099},{"className":1098},[],[1100],{"type":62,"value":1101},"${SKILL_ROOT}\u002Freferences\u002Ferror-monitoring.md",{"type":48,"tag":1052,"props":1103,"children":1104},{},[1105,1110,1122],{"type":48,"tag":1079,"props":1106,"children":1107},{},[1108],{"type":62,"value":1109},"OTLP Integration",{"type":48,"tag":1079,"props":1111,"children":1112},{},[1113,1115,1120],{"type":62,"value":1114},"OTel tracing detected — ",{"type":48,"tag":141,"props":1116,"children":1117},{},[1118],{"type":62,"value":1119},"replaces",{"type":62,"value":1121}," native Tracing",{"type":48,"tag":1079,"props":1123,"children":1124},{},[1125],{"type":48,"tag":113,"props":1126,"children":1128},{"className":1127},[],[1129],{"type":62,"value":1130},"${SKILL_ROOT}\u002Freferences\u002Ftracing.md",{"type":48,"tag":1052,"props":1132,"children":1133},{},[1134,1138,1148],{"type":48,"tag":1079,"props":1135,"children":1136},{},[1137],{"type":62,"value":982},{"type":48,"tag":1079,"props":1139,"children":1140},{},[1141,1143],{"type":62,"value":1142},"Django\u002FFlask\u002FFastAPI\u002FAIOHTTP\u002Fetc. detected; ",{"type":48,"tag":141,"props":1144,"children":1145},{},[1146],{"type":62,"value":1147},"skip if OTel tracing detected",{"type":48,"tag":1079,"props":1149,"children":1150},{},[1151],{"type":48,"tag":113,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":62,"value":1130},{"type":48,"tag":1052,"props":1157,"children":1158},{},[1159,1163,1181],{"type":48,"tag":1079,"props":1160,"children":1161},{},[1162],{"type":62,"value":1005},{"type":48,"tag":1079,"props":1164,"children":1165},{},[1166,1168,1172,1174,1179],{"type":62,"value":1167},"Production + performance-sensitive workload; ",{"type":48,"tag":141,"props":1169,"children":1170},{},[1171],{"type":62,"value":1147},{"type":62,"value":1173}," (requires ",{"type":48,"tag":113,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":62,"value":910},{"type":62,"value":1180},", incompatible with OTLP)",{"type":48,"tag":1079,"props":1182,"children":1183},{},[1184],{"type":48,"tag":113,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":62,"value":1189},"${SKILL_ROOT}\u002Freferences\u002Fprofiling.md",{"type":48,"tag":1052,"props":1191,"children":1192},{},[1193,1197,1202],{"type":48,"tag":1079,"props":1194,"children":1195},{},[1196],{"type":62,"value":952},{"type":48,"tag":1079,"props":1198,"children":1199},{},[1200],{"type":62,"value":1201},"Always (stdlib); enhanced for Loguru",{"type":48,"tag":1079,"props":1203,"children":1204},{},[1205],{"type":48,"tag":113,"props":1206,"children":1208},{"className":1207},[],[1209],{"type":62,"value":1210},"${SKILL_ROOT}\u002Freferences\u002Flogging.md",{"type":48,"tag":1052,"props":1212,"children":1213},{},[1214,1218,1223],{"type":48,"tag":1079,"props":1215,"children":1216},{},[1217],{"type":62,"value":1032},{"type":48,"tag":1079,"props":1219,"children":1220},{},[1221],{"type":62,"value":1222},"Business events or SLO tracking needed",{"type":48,"tag":1079,"props":1224,"children":1225},{},[1226],{"type":48,"tag":113,"props":1227,"children":1229},{"className":1228},[],[1230],{"type":62,"value":1231},"${SKILL_ROOT}\u002Freferences\u002Fmetrics.md",{"type":48,"tag":1052,"props":1233,"children":1234},{},[1235,1239,1244],{"type":48,"tag":1079,"props":1236,"children":1237},{},[1238],{"type":62,"value":1021},{"type":48,"tag":1079,"props":1240,"children":1241},{},[1242],{"type":62,"value":1243},"Celery Beat, APScheduler, or cron patterns",{"type":48,"tag":1079,"props":1245,"children":1246},{},[1247],{"type":48,"tag":113,"props":1248,"children":1250},{"className":1249},[],[1251],{"type":62,"value":1252},"${SKILL_ROOT}\u002Freferences\u002Fcrons.md",{"type":48,"tag":1052,"props":1254,"children":1255},{},[1256,1260,1265],{"type":48,"tag":1079,"props":1257,"children":1258},{},[1259],{"type":62,"value":993},{"type":48,"tag":1079,"props":1261,"children":1262},{},[1263],{"type":62,"value":1264},"OpenAI\u002FAnthropic\u002FLangChain\u002Fetc. detected",{"type":48,"tag":1079,"props":1266,"children":1267},{},[1268],{"type":48,"tag":113,"props":1269,"children":1271},{"className":1270},[],[1272],{"type":62,"value":1273},"${SKILL_ROOT}\u002Freferences\u002Fai-monitoring.md",{"type":48,"tag":53,"props":1275,"children":1276},{},[1277,1282,1284],{"type":48,"tag":141,"props":1278,"children":1279},{},[1280],{"type":62,"value":1281},"OTel tracing detected:",{"type":62,"value":1283}," ",{"type":48,"tag":1285,"props":1286,"children":1287},"em",{},[1288,1290,1295],{"type":62,"value":1289},"\"I see OpenTelemetry tracing in the project. I recommend Sentry's OTLP integration for tracing (via your existing OTel setup) + Error Monitoring + Sentry Logging ",{"type":48,"tag":185,"props":1291,"children":1292},{},[1293],{"type":62,"value":1294},"+ Metrics\u002FCrons\u002FAI Monitoring if applicable",{"type":62,"value":1296},". Shall I proceed?\"",{"type":48,"tag":53,"props":1298,"children":1299},{},[1300,1305,1306],{"type":48,"tag":141,"props":1301,"children":1302},{},[1303],{"type":62,"value":1304},"No OTel:",{"type":62,"value":1283},{"type":48,"tag":1285,"props":1307,"children":1308},{},[1309,1311,1316],{"type":62,"value":1310},"\"I recommend Error Monitoring + Tracing ",{"type":48,"tag":185,"props":1312,"children":1313},{},[1314],{"type":62,"value":1315},"+ Logging if applicable",{"type":62,"value":1317},". Want Profiling, Crons, or AI Monitoring too?\"",{"type":48,"tag":159,"props":1319,"children":1320},{},[],{"type":48,"tag":86,"props":1322,"children":1324},{"id":1323},"phase-3-guide",[1325],{"type":62,"value":1326},"Phase 3: Guide",{"type":48,"tag":1328,"props":1329,"children":1331},"h3",{"id":1330},"install",[1332],{"type":62,"value":1333},"Install",{"type":48,"tag":174,"props":1335,"children":1337},{"className":176,"code":1336,"language":178,"meta":179,"style":179},"# Core SDK (always required)\npip install sentry-sdk\n\n# Optional extras (install only what matches detected framework):\npip install \"sentry-sdk[django]\"\npip install \"sentry-sdk[flask]\"\npip install \"sentry-sdk[fastapi]\"\npip install \"sentry-sdk[celery]\"\npip install \"sentry-sdk[aiohttp]\"\npip install \"sentry-sdk[tornado]\"\n\n# Multiple extras:\npip install \"sentry-sdk[django,celery]\"\n",[1338],{"type":48,"tag":113,"props":1339,"children":1340},{"__ignoreMap":179},[1341,1349,1367,1374,1382,1407,1431,1455,1479,1503,1527,1534,1542],{"type":48,"tag":185,"props":1342,"children":1343},{"class":187,"line":188},[1344],{"type":48,"tag":185,"props":1345,"children":1346},{"style":192},[1347],{"type":62,"value":1348},"# Core SDK (always required)\n",{"type":48,"tag":185,"props":1350,"children":1351},{"class":187,"line":198},[1352,1357,1362],{"type":48,"tag":185,"props":1353,"children":1354},{"style":202},[1355],{"type":62,"value":1356},"pip",{"type":48,"tag":185,"props":1358,"children":1359},{"style":208},[1360],{"type":62,"value":1361}," install",{"type":48,"tag":185,"props":1363,"children":1364},{"style":208},[1365],{"type":62,"value":1366}," sentry-sdk\n",{"type":48,"tag":185,"props":1368,"children":1369},{"class":187,"line":250},[1370],{"type":48,"tag":185,"props":1371,"children":1372},{"emptyLinePlaceholder":43},[1373],{"type":62,"value":256},{"type":48,"tag":185,"props":1375,"children":1376},{"class":187,"line":259},[1377],{"type":48,"tag":185,"props":1378,"children":1379},{"style":192},[1380],{"type":62,"value":1381},"# Optional extras (install only what matches detected framework):\n",{"type":48,"tag":185,"props":1383,"children":1384},{"class":187,"line":268},[1385,1389,1393,1397,1402],{"type":48,"tag":185,"props":1386,"children":1387},{"style":202},[1388],{"type":62,"value":1356},{"type":48,"tag":185,"props":1390,"children":1391},{"style":208},[1392],{"type":62,"value":1361},{"type":48,"tag":185,"props":1394,"children":1395},{"style":239},[1396],{"type":62,"value":283},{"type":48,"tag":185,"props":1398,"children":1399},{"style":208},[1400],{"type":62,"value":1401},"sentry-sdk[django]",{"type":48,"tag":185,"props":1403,"children":1404},{"style":239},[1405],{"type":62,"value":1406},"\"\n",{"type":48,"tag":185,"props":1408,"children":1409},{"class":187,"line":302},[1410,1414,1418,1422,1427],{"type":48,"tag":185,"props":1411,"children":1412},{"style":202},[1413],{"type":62,"value":1356},{"type":48,"tag":185,"props":1415,"children":1416},{"style":208},[1417],{"type":62,"value":1361},{"type":48,"tag":185,"props":1419,"children":1420},{"style":239},[1421],{"type":62,"value":283},{"type":48,"tag":185,"props":1423,"children":1424},{"style":208},[1425],{"type":62,"value":1426},"sentry-sdk[flask]",{"type":48,"tag":185,"props":1428,"children":1429},{"style":239},[1430],{"type":62,"value":1406},{"type":48,"tag":185,"props":1432,"children":1433},{"class":187,"line":323},[1434,1438,1442,1446,1451],{"type":48,"tag":185,"props":1435,"children":1436},{"style":202},[1437],{"type":62,"value":1356},{"type":48,"tag":185,"props":1439,"children":1440},{"style":208},[1441],{"type":62,"value":1361},{"type":48,"tag":185,"props":1443,"children":1444},{"style":239},[1445],{"type":62,"value":283},{"type":48,"tag":185,"props":1447,"children":1448},{"style":208},[1449],{"type":62,"value":1450},"sentry-sdk[fastapi]",{"type":48,"tag":185,"props":1452,"children":1453},{"style":239},[1454],{"type":62,"value":1406},{"type":48,"tag":185,"props":1456,"children":1457},{"class":187,"line":331},[1458,1462,1466,1470,1475],{"type":48,"tag":185,"props":1459,"children":1460},{"style":202},[1461],{"type":62,"value":1356},{"type":48,"tag":185,"props":1463,"children":1464},{"style":208},[1465],{"type":62,"value":1361},{"type":48,"tag":185,"props":1467,"children":1468},{"style":239},[1469],{"type":62,"value":283},{"type":48,"tag":185,"props":1471,"children":1472},{"style":208},[1473],{"type":62,"value":1474},"sentry-sdk[celery]",{"type":48,"tag":185,"props":1476,"children":1477},{"style":239},[1478],{"type":62,"value":1406},{"type":48,"tag":185,"props":1480,"children":1481},{"class":187,"line":340},[1482,1486,1490,1494,1499],{"type":48,"tag":185,"props":1483,"children":1484},{"style":202},[1485],{"type":62,"value":1356},{"type":48,"tag":185,"props":1487,"children":1488},{"style":208},[1489],{"type":62,"value":1361},{"type":48,"tag":185,"props":1491,"children":1492},{"style":239},[1493],{"type":62,"value":283},{"type":48,"tag":185,"props":1495,"children":1496},{"style":208},[1497],{"type":62,"value":1498},"sentry-sdk[aiohttp]",{"type":48,"tag":185,"props":1500,"children":1501},{"style":239},[1502],{"type":62,"value":1406},{"type":48,"tag":185,"props":1504,"children":1505},{"class":187,"line":381},[1506,1510,1514,1518,1523],{"type":48,"tag":185,"props":1507,"children":1508},{"style":202},[1509],{"type":62,"value":1356},{"type":48,"tag":185,"props":1511,"children":1512},{"style":208},[1513],{"type":62,"value":1361},{"type":48,"tag":185,"props":1515,"children":1516},{"style":239},[1517],{"type":62,"value":283},{"type":48,"tag":185,"props":1519,"children":1520},{"style":208},[1521],{"type":62,"value":1522},"sentry-sdk[tornado]",{"type":48,"tag":185,"props":1524,"children":1525},{"style":239},[1526],{"type":62,"value":1406},{"type":48,"tag":185,"props":1528,"children":1529},{"class":187,"line":389},[1530],{"type":48,"tag":185,"props":1531,"children":1532},{"emptyLinePlaceholder":43},[1533],{"type":62,"value":256},{"type":48,"tag":185,"props":1535,"children":1536},{"class":187,"line":398},[1537],{"type":48,"tag":185,"props":1538,"children":1539},{"style":192},[1540],{"type":62,"value":1541},"# Multiple extras:\n",{"type":48,"tag":185,"props":1543,"children":1544},{"class":187,"line":440},[1545,1549,1553,1557,1562],{"type":48,"tag":185,"props":1546,"children":1547},{"style":202},[1548],{"type":62,"value":1356},{"type":48,"tag":185,"props":1550,"children":1551},{"style":208},[1552],{"type":62,"value":1361},{"type":48,"tag":185,"props":1554,"children":1555},{"style":239},[1556],{"type":62,"value":283},{"type":48,"tag":185,"props":1558,"children":1559},{"style":208},[1560],{"type":62,"value":1561},"sentry-sdk[django,celery]",{"type":48,"tag":185,"props":1563,"children":1564},{"style":239},[1565],{"type":62,"value":1406},{"type":48,"tag":49,"props":1567,"children":1568},{},[1569],{"type":48,"tag":53,"props":1570,"children":1571},{},[1572,1574,1579],{"type":62,"value":1573},"Extras are optional — plain ",{"type":48,"tag":113,"props":1575,"children":1577},{"className":1576},[],[1578],{"type":62,"value":118},{"type":62,"value":1580}," works for all frameworks. Extras install complementary packages.",{"type":48,"tag":1328,"props":1582,"children":1584},{"id":1583},"quick-start-recommended-init",[1585],{"type":62,"value":1586},"Quick Start — Recommended Init",{"type":48,"tag":53,"props":1588,"children":1589},{},[1590,1592,1597],{"type":62,"value":1591},"Full init enabling the most features with sensible defaults. Place ",{"type":48,"tag":141,"props":1593,"children":1594},{},[1595],{"type":62,"value":1596},"before",{"type":62,"value":1598}," any app\u002Fframework code:",{"type":48,"tag":174,"props":1600,"children":1603},{"className":1601,"code":1602,"language":22,"meta":179,"style":179},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import sentry_sdk\n\nsentry_sdk.init(\n    dsn=os.environ[\"SENTRY_DSN\"],\n    environment=os.environ.get(\"SENTRY_ENVIRONMENT\", \"production\"),\n    release=os.environ.get(\"SENTRY_RELEASE\"),   # e.g. \"myapp@1.0.0\"\n    send_default_pii=True,\n\n    # Tracing (lower to 0.1–0.2 in high-traffic production)\n    traces_sample_rate=1.0,\n\n    # Profiling — continuous, tied to active spans\n    profile_session_sample_rate=1.0,\n    profile_lifecycle=\"trace\",\n\n    # Structured logs (SDK ≥ 2.35.0)\n    enable_logs=True,\n)\n",[1604],{"type":48,"tag":113,"props":1605,"children":1606},{"__ignoreMap":179},[1607,1615,1622,1630,1638,1646,1654,1662,1669,1677,1685,1692,1700,1708,1716,1723,1731,1739],{"type":48,"tag":185,"props":1608,"children":1609},{"class":187,"line":188},[1610],{"type":48,"tag":185,"props":1611,"children":1612},{},[1613],{"type":62,"value":1614},"import sentry_sdk\n",{"type":48,"tag":185,"props":1616,"children":1617},{"class":187,"line":198},[1618],{"type":48,"tag":185,"props":1619,"children":1620},{"emptyLinePlaceholder":43},[1621],{"type":62,"value":256},{"type":48,"tag":185,"props":1623,"children":1624},{"class":187,"line":250},[1625],{"type":48,"tag":185,"props":1626,"children":1627},{},[1628],{"type":62,"value":1629},"sentry_sdk.init(\n",{"type":48,"tag":185,"props":1631,"children":1632},{"class":187,"line":259},[1633],{"type":48,"tag":185,"props":1634,"children":1635},{},[1636],{"type":62,"value":1637},"    dsn=os.environ[\"SENTRY_DSN\"],\n",{"type":48,"tag":185,"props":1639,"children":1640},{"class":187,"line":268},[1641],{"type":48,"tag":185,"props":1642,"children":1643},{},[1644],{"type":62,"value":1645},"    environment=os.environ.get(\"SENTRY_ENVIRONMENT\", \"production\"),\n",{"type":48,"tag":185,"props":1647,"children":1648},{"class":187,"line":302},[1649],{"type":48,"tag":185,"props":1650,"children":1651},{},[1652],{"type":62,"value":1653},"    release=os.environ.get(\"SENTRY_RELEASE\"),   # e.g. \"myapp@1.0.0\"\n",{"type":48,"tag":185,"props":1655,"children":1656},{"class":187,"line":323},[1657],{"type":48,"tag":185,"props":1658,"children":1659},{},[1660],{"type":62,"value":1661},"    send_default_pii=True,\n",{"type":48,"tag":185,"props":1663,"children":1664},{"class":187,"line":331},[1665],{"type":48,"tag":185,"props":1666,"children":1667},{"emptyLinePlaceholder":43},[1668],{"type":62,"value":256},{"type":48,"tag":185,"props":1670,"children":1671},{"class":187,"line":340},[1672],{"type":48,"tag":185,"props":1673,"children":1674},{},[1675],{"type":62,"value":1676},"    # Tracing (lower to 0.1–0.2 in high-traffic production)\n",{"type":48,"tag":185,"props":1678,"children":1679},{"class":187,"line":381},[1680],{"type":48,"tag":185,"props":1681,"children":1682},{},[1683],{"type":62,"value":1684},"    traces_sample_rate=1.0,\n",{"type":48,"tag":185,"props":1686,"children":1687},{"class":187,"line":389},[1688],{"type":48,"tag":185,"props":1689,"children":1690},{"emptyLinePlaceholder":43},[1691],{"type":62,"value":256},{"type":48,"tag":185,"props":1693,"children":1694},{"class":187,"line":398},[1695],{"type":48,"tag":185,"props":1696,"children":1697},{},[1698],{"type":62,"value":1699},"    # Profiling — continuous, tied to active spans\n",{"type":48,"tag":185,"props":1701,"children":1702},{"class":187,"line":440},[1703],{"type":48,"tag":185,"props":1704,"children":1705},{},[1706],{"type":62,"value":1707},"    profile_session_sample_rate=1.0,\n",{"type":48,"tag":185,"props":1709,"children":1710},{"class":187,"line":448},[1711],{"type":48,"tag":185,"props":1712,"children":1713},{},[1714],{"type":62,"value":1715},"    profile_lifecycle=\"trace\",\n",{"type":48,"tag":185,"props":1717,"children":1718},{"class":187,"line":457},[1719],{"type":48,"tag":185,"props":1720,"children":1721},{"emptyLinePlaceholder":43},[1722],{"type":62,"value":256},{"type":48,"tag":185,"props":1724,"children":1725},{"class":187,"line":486},[1726],{"type":48,"tag":185,"props":1727,"children":1728},{},[1729],{"type":62,"value":1730},"    # Structured logs (SDK ≥ 2.35.0)\n",{"type":48,"tag":185,"props":1732,"children":1733},{"class":187,"line":506},[1734],{"type":48,"tag":185,"props":1735,"children":1736},{},[1737],{"type":62,"value":1738},"    enable_logs=True,\n",{"type":48,"tag":185,"props":1740,"children":1741},{"class":187,"line":514},[1742],{"type":48,"tag":185,"props":1743,"children":1744},{},[1745],{"type":62,"value":1746},")\n",{"type":48,"tag":1328,"props":1748,"children":1750},{"id":1749},"where-to-initialize-per-framework",[1751],{"type":62,"value":1752},"Where to Initialize Per Framework",{"type":48,"tag":1044,"props":1754,"children":1755},{},[1756,1782],{"type":48,"tag":1048,"props":1757,"children":1758},{},[1759],{"type":48,"tag":1052,"props":1760,"children":1761},{},[1762,1767,1777],{"type":48,"tag":1056,"props":1763,"children":1764},{},[1765],{"type":62,"value":1766},"Framework",{"type":48,"tag":1056,"props":1768,"children":1769},{},[1770,1772],{"type":62,"value":1771},"Where to call ",{"type":48,"tag":113,"props":1773,"children":1775},{"className":1774},[],[1776],{"type":62,"value":796},{"type":48,"tag":1056,"props":1778,"children":1779},{},[1780],{"type":62,"value":1781},"Notes",{"type":48,"tag":1072,"props":1783,"children":1784},{},[1785,1814,1841,1881,1907,1932,1953,1977,2001,2027,2054,2081,2112],{"type":48,"tag":1052,"props":1786,"children":1787},{},[1788,1796,1809],{"type":48,"tag":1079,"props":1789,"children":1790},{},[1791],{"type":48,"tag":141,"props":1792,"children":1793},{},[1794],{"type":62,"value":1795},"Django",{"type":48,"tag":1079,"props":1797,"children":1798},{},[1799,1801,1807],{"type":62,"value":1800},"Top of ",{"type":48,"tag":113,"props":1802,"children":1804},{"className":1803},[],[1805],{"type":62,"value":1806},"settings.py",{"type":62,"value":1808},", before any imports",{"type":48,"tag":1079,"props":1810,"children":1811},{},[1812],{"type":62,"value":1813},"No middleware needed — Sentry patches Django internally",{"type":48,"tag":1052,"props":1815,"children":1816},{},[1817,1825,1836],{"type":48,"tag":1079,"props":1818,"children":1819},{},[1820],{"type":48,"tag":141,"props":1821,"children":1822},{},[1823],{"type":62,"value":1824},"Flask",{"type":48,"tag":1079,"props":1826,"children":1827},{},[1828,1830],{"type":62,"value":1829},"Before ",{"type":48,"tag":113,"props":1831,"children":1833},{"className":1832},[],[1834],{"type":62,"value":1835},"app = Flask(__name__)",{"type":48,"tag":1079,"props":1837,"children":1838},{},[1839],{"type":62,"value":1840},"Must precede app creation",{"type":48,"tag":1052,"props":1842,"children":1843},{},[1844,1852,1862],{"type":48,"tag":1079,"props":1845,"children":1846},{},[1847],{"type":48,"tag":141,"props":1848,"children":1849},{},[1850],{"type":62,"value":1851},"FastAPI",{"type":48,"tag":1079,"props":1853,"children":1854},{},[1855,1856],{"type":62,"value":1829},{"type":48,"tag":113,"props":1857,"children":1859},{"className":1858},[],[1860],{"type":62,"value":1861},"app = FastAPI()",{"type":48,"tag":1079,"props":1863,"children":1864},{},[1865,1871,1873,1879],{"type":48,"tag":113,"props":1866,"children":1868},{"className":1867},[],[1869],{"type":62,"value":1870},"StarletteIntegration",{"type":62,"value":1872}," + ",{"type":48,"tag":113,"props":1874,"children":1876},{"className":1875},[],[1877],{"type":62,"value":1878},"FastApiIntegration",{"type":62,"value":1880}," auto-enabled together",{"type":48,"tag":1052,"props":1882,"children":1883},{},[1884,1892,1902],{"type":48,"tag":1079,"props":1885,"children":1886},{},[1887],{"type":48,"tag":141,"props":1888,"children":1889},{},[1890],{"type":62,"value":1891},"Starlette",{"type":48,"tag":1079,"props":1893,"children":1894},{},[1895,1896],{"type":62,"value":1829},{"type":48,"tag":113,"props":1897,"children":1899},{"className":1898},[],[1900],{"type":62,"value":1901},"app = Starlette(...)",{"type":48,"tag":1079,"props":1903,"children":1904},{},[1905],{"type":62,"value":1906},"Same auto-integration as FastAPI",{"type":48,"tag":1052,"props":1908,"children":1909},{},[1910,1918,1929],{"type":48,"tag":1079,"props":1911,"children":1912},{},[1913],{"type":48,"tag":141,"props":1914,"children":1915},{},[1916],{"type":62,"value":1917},"AIOHTTP",{"type":48,"tag":1079,"props":1919,"children":1920},{},[1921,1923],{"type":62,"value":1922},"Module level, before ",{"type":48,"tag":113,"props":1924,"children":1926},{"className":1925},[],[1927],{"type":62,"value":1928},"web.Application()",{"type":48,"tag":1079,"props":1930,"children":1931},{},[],{"type":48,"tag":1052,"props":1933,"children":1934},{},[1935,1943,1948],{"type":48,"tag":1079,"props":1936,"children":1937},{},[1938],{"type":48,"tag":141,"props":1939,"children":1940},{},[1941],{"type":62,"value":1942},"Tornado",{"type":48,"tag":1079,"props":1944,"children":1945},{},[1946],{"type":62,"value":1947},"Module level, before app setup",{"type":48,"tag":1079,"props":1949,"children":1950},{},[1951],{"type":62,"value":1952},"No integration class needed",{"type":48,"tag":1052,"props":1954,"children":1955},{},[1956,1964,1974],{"type":48,"tag":1079,"props":1957,"children":1958},{},[1959],{"type":48,"tag":141,"props":1960,"children":1961},{},[1962],{"type":62,"value":1963},"Quart",{"type":48,"tag":1079,"props":1965,"children":1966},{},[1967,1968],{"type":62,"value":1829},{"type":48,"tag":113,"props":1969,"children":1971},{"className":1970},[],[1972],{"type":62,"value":1973},"app = Quart(__name__)",{"type":48,"tag":1079,"props":1975,"children":1976},{},[],{"type":48,"tag":1052,"props":1978,"children":1979},{},[1980,1988,1998],{"type":48,"tag":1079,"props":1981,"children":1982},{},[1983],{"type":48,"tag":141,"props":1984,"children":1985},{},[1986],{"type":62,"value":1987},"Falcon",{"type":48,"tag":1079,"props":1989,"children":1990},{},[1991,1992],{"type":62,"value":1922},{"type":48,"tag":113,"props":1993,"children":1995},{"className":1994},[],[1996],{"type":62,"value":1997},"app = falcon.App()",{"type":48,"tag":1079,"props":1999,"children":2000},{},[],{"type":48,"tag":1052,"props":2002,"children":2003},{},[2004,2012,2022],{"type":48,"tag":1079,"props":2005,"children":2006},{},[2007],{"type":48,"tag":141,"props":2008,"children":2009},{},[2010],{"type":62,"value":2011},"Pyramid",{"type":48,"tag":1079,"props":2013,"children":2014},{},[2015,2016],{"type":62,"value":1922},{"type":48,"tag":113,"props":2017,"children":2019},{"className":2018},[],[2020],{"type":62,"value":2021},"config = Configurator()",{"type":48,"tag":1079,"props":2023,"children":2024},{},[2025],{"type":62,"value":2026},"WSGI framework",{"type":48,"tag":1052,"props":2028,"children":2029},{},[2030,2038,2049],{"type":48,"tag":1079,"props":2031,"children":2032},{},[2033],{"type":48,"tag":141,"props":2034,"children":2035},{},[2036],{"type":62,"value":2037},"Sanic",{"type":48,"tag":1079,"props":2039,"children":2040},{},[2041,2043],{"type":62,"value":2042},"Inside ",{"type":48,"tag":113,"props":2044,"children":2046},{"className":2045},[],[2047],{"type":62,"value":2048},"@app.listener(\"before_server_start\")",{"type":48,"tag":1079,"props":2050,"children":2051},{},[2052],{"type":62,"value":2053},"Sanic's lifecycle requires async init",{"type":48,"tag":1052,"props":2055,"children":2056},{},[2057,2065,2076],{"type":48,"tag":1079,"props":2058,"children":2059},{},[2060],{"type":48,"tag":141,"props":2061,"children":2062},{},[2063],{"type":62,"value":2064},"Celery",{"type":48,"tag":1079,"props":2066,"children":2067},{},[2068,2074],{"type":48,"tag":113,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":62,"value":2073},"@signals.celeryd_init.connect",{"type":62,"value":2075}," in worker AND in calling process",{"type":48,"tag":1079,"props":2077,"children":2078},{},[2079],{"type":62,"value":2080},"Dual-process init required",{"type":48,"tag":1052,"props":2082,"children":2083},{},[2084,2092,2109],{"type":48,"tag":1079,"props":2085,"children":2086},{},[2087],{"type":48,"tag":141,"props":2088,"children":2089},{},[2090],{"type":62,"value":2091},"RQ",{"type":48,"tag":1079,"props":2093,"children":2094},{},[2095,2101,2103],{"type":48,"tag":113,"props":2096,"children":2098},{"className":2097},[],[2099],{"type":62,"value":2100},"mysettings.py",{"type":62,"value":2102}," loaded by worker via ",{"type":48,"tag":113,"props":2104,"children":2106},{"className":2105},[],[2107],{"type":62,"value":2108},"rq worker -c mysettings",{"type":48,"tag":1079,"props":2110,"children":2111},{},[],{"type":48,"tag":1052,"props":2113,"children":2114},{},[2115,2123,2128],{"type":48,"tag":1079,"props":2116,"children":2117},{},[2118],{"type":48,"tag":141,"props":2119,"children":2120},{},[2121],{"type":62,"value":2122},"ARQ",{"type":48,"tag":1079,"props":2124,"children":2125},{},[2126],{"type":62,"value":2127},"Both worker module and enqueuing process",{"type":48,"tag":1079,"props":2129,"children":2130},{},[],{"type":48,"tag":53,"props":2132,"children":2133},{},[2134,2139,2140,2145],{"type":48,"tag":141,"props":2135,"children":2136},{},[2137],{"type":62,"value":2138},"Django example",{"type":62,"value":865},{"type":48,"tag":113,"props":2141,"children":2143},{"className":2142},[],[2144],{"type":62,"value":1806},{"type":62,"value":2146},"):",{"type":48,"tag":174,"props":2148,"children":2150},{"className":1601,"code":2149,"language":22,"meta":179,"style":179},"import sentry_sdk\n\nsentry_sdk.init(\n    dsn=os.environ[\"SENTRY_DSN\"],\n    send_default_pii=True,\n    traces_sample_rate=1.0,\n    profile_session_sample_rate=1.0,\n    profile_lifecycle=\"trace\",\n    enable_logs=True,\n)\n\n# rest of Django settings...\nINSTALLED_APPS = [...]\n",[2151],{"type":48,"tag":113,"props":2152,"children":2153},{"__ignoreMap":179},[2154,2161,2168,2175,2182,2189,2196,2203,2210,2217,2224,2231,2239],{"type":48,"tag":185,"props":2155,"children":2156},{"class":187,"line":188},[2157],{"type":48,"tag":185,"props":2158,"children":2159},{},[2160],{"type":62,"value":1614},{"type":48,"tag":185,"props":2162,"children":2163},{"class":187,"line":198},[2164],{"type":48,"tag":185,"props":2165,"children":2166},{"emptyLinePlaceholder":43},[2167],{"type":62,"value":256},{"type":48,"tag":185,"props":2169,"children":2170},{"class":187,"line":250},[2171],{"type":48,"tag":185,"props":2172,"children":2173},{},[2174],{"type":62,"value":1629},{"type":48,"tag":185,"props":2176,"children":2177},{"class":187,"line":259},[2178],{"type":48,"tag":185,"props":2179,"children":2180},{},[2181],{"type":62,"value":1637},{"type":48,"tag":185,"props":2183,"children":2184},{"class":187,"line":268},[2185],{"type":48,"tag":185,"props":2186,"children":2187},{},[2188],{"type":62,"value":1661},{"type":48,"tag":185,"props":2190,"children":2191},{"class":187,"line":302},[2192],{"type":48,"tag":185,"props":2193,"children":2194},{},[2195],{"type":62,"value":1684},{"type":48,"tag":185,"props":2197,"children":2198},{"class":187,"line":323},[2199],{"type":48,"tag":185,"props":2200,"children":2201},{},[2202],{"type":62,"value":1707},{"type":48,"tag":185,"props":2204,"children":2205},{"class":187,"line":331},[2206],{"type":48,"tag":185,"props":2207,"children":2208},{},[2209],{"type":62,"value":1715},{"type":48,"tag":185,"props":2211,"children":2212},{"class":187,"line":340},[2213],{"type":48,"tag":185,"props":2214,"children":2215},{},[2216],{"type":62,"value":1738},{"type":48,"tag":185,"props":2218,"children":2219},{"class":187,"line":381},[2220],{"type":48,"tag":185,"props":2221,"children":2222},{},[2223],{"type":62,"value":1746},{"type":48,"tag":185,"props":2225,"children":2226},{"class":187,"line":389},[2227],{"type":48,"tag":185,"props":2228,"children":2229},{"emptyLinePlaceholder":43},[2230],{"type":62,"value":256},{"type":48,"tag":185,"props":2232,"children":2233},{"class":187,"line":398},[2234],{"type":48,"tag":185,"props":2235,"children":2236},{},[2237],{"type":62,"value":2238},"# rest of Django settings...\n",{"type":48,"tag":185,"props":2240,"children":2241},{"class":187,"line":440},[2242],{"type":48,"tag":185,"props":2243,"children":2244},{},[2245],{"type":62,"value":2246},"INSTALLED_APPS = [...]\n",{"type":48,"tag":53,"props":2248,"children":2249},{},[2250,2255,2256,2262],{"type":48,"tag":141,"props":2251,"children":2252},{},[2253],{"type":62,"value":2254},"FastAPI example",{"type":62,"value":865},{"type":48,"tag":113,"props":2257,"children":2259},{"className":2258},[],[2260],{"type":62,"value":2261},"main.py",{"type":62,"value":2146},{"type":48,"tag":174,"props":2264,"children":2266},{"className":1601,"code":2265,"language":22,"meta":179,"style":179},"import sentry_sdk\n\nsentry_sdk.init(\n    dsn=os.environ[\"SENTRY_DSN\"],\n    send_default_pii=True,\n    traces_sample_rate=1.0,\n    profile_session_sample_rate=1.0,\n    profile_lifecycle=\"trace\",\n    enable_logs=True,\n)\n\nfrom fastapi import FastAPI\napp = FastAPI()\n",[2267],{"type":48,"tag":113,"props":2268,"children":2269},{"__ignoreMap":179},[2270,2277,2284,2291,2298,2305,2312,2319,2326,2333,2340,2347,2355],{"type":48,"tag":185,"props":2271,"children":2272},{"class":187,"line":188},[2273],{"type":48,"tag":185,"props":2274,"children":2275},{},[2276],{"type":62,"value":1614},{"type":48,"tag":185,"props":2278,"children":2279},{"class":187,"line":198},[2280],{"type":48,"tag":185,"props":2281,"children":2282},{"emptyLinePlaceholder":43},[2283],{"type":62,"value":256},{"type":48,"tag":185,"props":2285,"children":2286},{"class":187,"line":250},[2287],{"type":48,"tag":185,"props":2288,"children":2289},{},[2290],{"type":62,"value":1629},{"type":48,"tag":185,"props":2292,"children":2293},{"class":187,"line":259},[2294],{"type":48,"tag":185,"props":2295,"children":2296},{},[2297],{"type":62,"value":1637},{"type":48,"tag":185,"props":2299,"children":2300},{"class":187,"line":268},[2301],{"type":48,"tag":185,"props":2302,"children":2303},{},[2304],{"type":62,"value":1661},{"type":48,"tag":185,"props":2306,"children":2307},{"class":187,"line":302},[2308],{"type":48,"tag":185,"props":2309,"children":2310},{},[2311],{"type":62,"value":1684},{"type":48,"tag":185,"props":2313,"children":2314},{"class":187,"line":323},[2315],{"type":48,"tag":185,"props":2316,"children":2317},{},[2318],{"type":62,"value":1707},{"type":48,"tag":185,"props":2320,"children":2321},{"class":187,"line":331},[2322],{"type":48,"tag":185,"props":2323,"children":2324},{},[2325],{"type":62,"value":1715},{"type":48,"tag":185,"props":2327,"children":2328},{"class":187,"line":340},[2329],{"type":48,"tag":185,"props":2330,"children":2331},{},[2332],{"type":62,"value":1738},{"type":48,"tag":185,"props":2334,"children":2335},{"class":187,"line":381},[2336],{"type":48,"tag":185,"props":2337,"children":2338},{},[2339],{"type":62,"value":1746},{"type":48,"tag":185,"props":2341,"children":2342},{"class":187,"line":389},[2343],{"type":48,"tag":185,"props":2344,"children":2345},{"emptyLinePlaceholder":43},[2346],{"type":62,"value":256},{"type":48,"tag":185,"props":2348,"children":2349},{"class":187,"line":398},[2350],{"type":48,"tag":185,"props":2351,"children":2352},{},[2353],{"type":62,"value":2354},"from fastapi import FastAPI\n",{"type":48,"tag":185,"props":2356,"children":2357},{"class":187,"line":440},[2358],{"type":48,"tag":185,"props":2359,"children":2360},{},[2361],{"type":62,"value":2362},"app = FastAPI()\n",{"type":48,"tag":1328,"props":2364,"children":2366},{"id":2365},"auto-enabled-vs-explicit-integrations",[2367],{"type":62,"value":2368},"Auto-Enabled vs Explicit Integrations",{"type":48,"tag":53,"props":2370,"children":2371},{},[2372,2374,2380],{"type":62,"value":2373},"Most integrations activate automatically when their package is installed — no ",{"type":48,"tag":113,"props":2375,"children":2377},{"className":2376},[],[2378],{"type":62,"value":2379},"integrations=[...]",{"type":62,"value":2381}," needed:",{"type":48,"tag":1044,"props":2383,"children":2384},{},[2385,2401],{"type":48,"tag":1048,"props":2386,"children":2387},{},[2388],{"type":48,"tag":1052,"props":2389,"children":2390},{},[2391,2396],{"type":48,"tag":1056,"props":2392,"children":2393},{},[2394],{"type":62,"value":2395},"Auto-enabled",{"type":48,"tag":1056,"props":2397,"children":2398},{},[2399],{"type":62,"value":2400},"Explicit required",{"type":48,"tag":1072,"props":2402,"children":2403},{},[2404,2421,2438,2455,2472,2489],{"type":48,"tag":1052,"props":2405,"children":2406},{},[2407,2412],{"type":48,"tag":1079,"props":2408,"children":2409},{},[2410],{"type":62,"value":2411},"Django, Flask, FastAPI, Starlette, AIOHTTP, Tornado, Quart, Falcon, Pyramid, Sanic, Bottle",{"type":48,"tag":1079,"props":2413,"children":2414},{},[2415],{"type":48,"tag":113,"props":2416,"children":2418},{"className":2417},[],[2419],{"type":62,"value":2420},"DramatiqIntegration",{"type":48,"tag":1052,"props":2422,"children":2423},{},[2424,2429],{"type":48,"tag":1079,"props":2425,"children":2426},{},[2427],{"type":62,"value":2428},"Celery, RQ, Huey, ARQ",{"type":48,"tag":1079,"props":2430,"children":2431},{},[2432],{"type":48,"tag":113,"props":2433,"children":2435},{"className":2434},[],[2436],{"type":62,"value":2437},"GRPCIntegration",{"type":48,"tag":1052,"props":2439,"children":2440},{},[2441,2446],{"type":48,"tag":1079,"props":2442,"children":2443},{},[2444],{"type":62,"value":2445},"SQLAlchemy, Redis, asyncpg, pymongo",{"type":48,"tag":1079,"props":2447,"children":2448},{},[2449],{"type":48,"tag":113,"props":2450,"children":2452},{"className":2451},[],[2453],{"type":62,"value":2454},"StrawberryIntegration",{"type":48,"tag":1052,"props":2456,"children":2457},{},[2458,2463],{"type":48,"tag":1079,"props":2459,"children":2460},{},[2461],{"type":62,"value":2462},"Requests, HTTPX, httpx2, aiohttp-client",{"type":48,"tag":1079,"props":2464,"children":2465},{},[2466],{"type":48,"tag":113,"props":2467,"children":2469},{"className":2468},[],[2470],{"type":62,"value":2471},"AsyncioIntegration",{"type":48,"tag":1052,"props":2473,"children":2474},{},[2475,2480],{"type":48,"tag":1079,"props":2476,"children":2477},{},[2478],{"type":62,"value":2479},"OpenAI, Anthropic, LangChain, Pydantic AI, MCP",{"type":48,"tag":1079,"props":2481,"children":2482},{},[2483],{"type":48,"tag":113,"props":2484,"children":2486},{"className":2485},[],[2487],{"type":62,"value":2488},"OpenTelemetryIntegration",{"type":48,"tag":1052,"props":2490,"children":2491},{},[2492,2504],{"type":48,"tag":1079,"props":2493,"children":2494},{},[2495,2497,2502],{"type":62,"value":2496},"Python ",{"type":48,"tag":113,"props":2498,"children":2500},{"className":2499},[],[2501],{"type":62,"value":960},{"type":62,"value":2503},", Loguru",{"type":48,"tag":1079,"props":2505,"children":2506},{},[2507,2513,2514],{"type":48,"tag":113,"props":2508,"children":2510},{"className":2509},[],[2511],{"type":62,"value":2512},"WSGIIntegration",{"type":62,"value":873},{"type":48,"tag":113,"props":2515,"children":2517},{"className":2516},[],[2518],{"type":62,"value":2519},"ASGIIntegration",{"type":48,"tag":1328,"props":2521,"children":2523},{"id":2522},"for-each-agreed-feature",[2524],{"type":62,"value":2525},"For Each Agreed Feature",{"type":48,"tag":53,"props":2527,"children":2528},{},[2529],{"type":62,"value":2530},"Walk through features one at a time. Load the reference, follow its steps, verify before moving on:",{"type":48,"tag":1044,"props":2532,"children":2533},{},[2534,2554],{"type":48,"tag":1048,"props":2535,"children":2536},{},[2537],{"type":48,"tag":1052,"props":2538,"children":2539},{},[2540,2544,2549],{"type":48,"tag":1056,"props":2541,"children":2542},{},[2543],{"type":62,"value":1060},{"type":48,"tag":1056,"props":2545,"children":2546},{},[2547],{"type":62,"value":2548},"Reference file",{"type":48,"tag":1056,"props":2550,"children":2551},{},[2552],{"type":62,"value":2553},"Load when...",{"type":48,"tag":1072,"props":2555,"children":2556},{},[2557,2577,2597,2617,2637,2657,2677],{"type":48,"tag":1052,"props":2558,"children":2559},{},[2560,2564,2572],{"type":48,"tag":1079,"props":2561,"children":2562},{},[2563],{"type":62,"value":933},{"type":48,"tag":1079,"props":2565,"children":2566},{},[2567],{"type":48,"tag":113,"props":2568,"children":2570},{"className":2569},[],[2571],{"type":62,"value":1101},{"type":48,"tag":1079,"props":2573,"children":2574},{},[2575],{"type":62,"value":2576},"Always (baseline)",{"type":48,"tag":1052,"props":2578,"children":2579},{},[2580,2584,2592],{"type":48,"tag":1079,"props":2581,"children":2582},{},[2583],{"type":62,"value":982},{"type":48,"tag":1079,"props":2585,"children":2586},{},[2587],{"type":48,"tag":113,"props":2588,"children":2590},{"className":2589},[],[2591],{"type":62,"value":1130},{"type":48,"tag":1079,"props":2593,"children":2594},{},[2595],{"type":62,"value":2596},"HTTP handlers \u002F distributed tracing",{"type":48,"tag":1052,"props":2598,"children":2599},{},[2600,2604,2612],{"type":48,"tag":1079,"props":2601,"children":2602},{},[2603],{"type":62,"value":1005},{"type":48,"tag":1079,"props":2605,"children":2606},{},[2607],{"type":48,"tag":113,"props":2608,"children":2610},{"className":2609},[],[2611],{"type":62,"value":1189},{"type":48,"tag":1079,"props":2613,"children":2614},{},[2615],{"type":62,"value":2616},"Performance-sensitive production",{"type":48,"tag":1052,"props":2618,"children":2619},{},[2620,2624,2632],{"type":48,"tag":1079,"props":2621,"children":2622},{},[2623],{"type":62,"value":952},{"type":48,"tag":1079,"props":2625,"children":2626},{},[2627],{"type":48,"tag":113,"props":2628,"children":2630},{"className":2629},[],[2631],{"type":62,"value":1210},{"type":48,"tag":1079,"props":2633,"children":2634},{},[2635],{"type":62,"value":2636},"Always; enhanced for Loguru",{"type":48,"tag":1052,"props":2638,"children":2639},{},[2640,2644,2652],{"type":48,"tag":1079,"props":2641,"children":2642},{},[2643],{"type":62,"value":1032},{"type":48,"tag":1079,"props":2645,"children":2646},{},[2647],{"type":48,"tag":113,"props":2648,"children":2650},{"className":2649},[],[2651],{"type":62,"value":1231},{"type":48,"tag":1079,"props":2653,"children":2654},{},[2655],{"type":62,"value":2656},"Business KPIs \u002F SLO tracking",{"type":48,"tag":1052,"props":2658,"children":2659},{},[2660,2664,2672],{"type":48,"tag":1079,"props":2661,"children":2662},{},[2663],{"type":62,"value":1021},{"type":48,"tag":1079,"props":2665,"children":2666},{},[2667],{"type":48,"tag":113,"props":2668,"children":2670},{"className":2669},[],[2671],{"type":62,"value":1252},{"type":48,"tag":1079,"props":2673,"children":2674},{},[2675],{"type":62,"value":2676},"Scheduler \u002F cron patterns detected",{"type":48,"tag":1052,"props":2678,"children":2679},{},[2680,2684,2692],{"type":48,"tag":1079,"props":2681,"children":2682},{},[2683],{"type":62,"value":993},{"type":48,"tag":1079,"props":2685,"children":2686},{},[2687],{"type":48,"tag":113,"props":2688,"children":2690},{"className":2689},[],[2691],{"type":62,"value":1273},{"type":48,"tag":1079,"props":2693,"children":2694},{},[2695],{"type":62,"value":2696},"AI library detected",{"type":48,"tag":53,"props":2698,"children":2699},{},[2700,2702,2708],{"type":62,"value":2701},"For each feature: ",{"type":48,"tag":113,"props":2703,"children":2705},{"className":2704},[],[2706],{"type":62,"value":2707},"Read ${SKILL_ROOT}\u002Freferences\u002F\u003Cfeature>.md",{"type":62,"value":2709},", follow steps exactly, verify it works.",{"type":48,"tag":159,"props":2711,"children":2712},{},[],{"type":48,"tag":86,"props":2714,"children":2716},{"id":2715},"configuration-reference",[2717],{"type":62,"value":2718},"Configuration Reference",{"type":48,"tag":1328,"props":2720,"children":2722},{"id":2721},"key-sentry_sdkinit-options",[2723,2725,2730],{"type":62,"value":2724},"Key ",{"type":48,"tag":113,"props":2726,"children":2728},{"className":2727},[],[2729],{"type":62,"value":796},{"type":62,"value":2731}," Options",{"type":48,"tag":1044,"props":2733,"children":2734},{},[2735,2761],{"type":48,"tag":1048,"props":2736,"children":2737},{},[2738],{"type":48,"tag":1052,"props":2739,"children":2740},{},[2741,2746,2751,2756],{"type":48,"tag":1056,"props":2742,"children":2743},{},[2744],{"type":62,"value":2745},"Option",{"type":48,"tag":1056,"props":2747,"children":2748},{},[2749],{"type":62,"value":2750},"Type",{"type":48,"tag":1056,"props":2752,"children":2753},{},[2754],{"type":62,"value":2755},"Default",{"type":48,"tag":1056,"props":2757,"children":2758},{},[2759],{"type":62,"value":2760},"Purpose",{"type":48,"tag":1072,"props":2762,"children":2763},{},[2764,2805,2853,2898,2933,2973,3007,3040,3080,3113,3146,3180,3219,3254,3287,3320,3353,3388],{"type":48,"tag":1052,"props":2765,"children":2766},{},[2767,2776,2785,2794],{"type":48,"tag":1079,"props":2768,"children":2769},{},[2770],{"type":48,"tag":113,"props":2771,"children":2773},{"className":2772},[],[2774],{"type":62,"value":2775},"dsn",{"type":48,"tag":1079,"props":2777,"children":2778},{},[2779],{"type":48,"tag":113,"props":2780,"children":2782},{"className":2781},[],[2783],{"type":62,"value":2784},"str",{"type":48,"tag":1079,"props":2786,"children":2787},{},[2788],{"type":48,"tag":113,"props":2789,"children":2791},{"className":2790},[],[2792],{"type":62,"value":2793},"None",{"type":48,"tag":1079,"props":2795,"children":2796},{},[2797,2799],{"type":62,"value":2798},"SDK disabled if empty; env: ",{"type":48,"tag":113,"props":2800,"children":2802},{"className":2801},[],[2803],{"type":62,"value":2804},"SENTRY_DSN",{"type":48,"tag":1052,"props":2806,"children":2807},{},[2808,2817,2825,2834],{"type":48,"tag":1079,"props":2809,"children":2810},{},[2811],{"type":48,"tag":113,"props":2812,"children":2814},{"className":2813},[],[2815],{"type":62,"value":2816},"environment",{"type":48,"tag":1079,"props":2818,"children":2819},{},[2820],{"type":48,"tag":113,"props":2821,"children":2823},{"className":2822},[],[2824],{"type":62,"value":2784},{"type":48,"tag":1079,"props":2826,"children":2827},{},[2828],{"type":48,"tag":113,"props":2829,"children":2831},{"className":2830},[],[2832],{"type":62,"value":2833},"\"production\"",{"type":48,"tag":1079,"props":2835,"children":2836},{},[2837,2839,2845,2847],{"type":62,"value":2838},"e.g., ",{"type":48,"tag":113,"props":2840,"children":2842},{"className":2841},[],[2843],{"type":62,"value":2844},"\"staging\"",{"type":62,"value":2846},"; env: ",{"type":48,"tag":113,"props":2848,"children":2850},{"className":2849},[],[2851],{"type":62,"value":2852},"SENTRY_ENVIRONMENT",{"type":48,"tag":1052,"props":2854,"children":2855},{},[2856,2865,2873,2881],{"type":48,"tag":1079,"props":2857,"children":2858},{},[2859],{"type":48,"tag":113,"props":2860,"children":2862},{"className":2861},[],[2863],{"type":62,"value":2864},"release",{"type":48,"tag":1079,"props":2866,"children":2867},{},[2868],{"type":48,"tag":113,"props":2869,"children":2871},{"className":2870},[],[2872],{"type":62,"value":2784},{"type":48,"tag":1079,"props":2874,"children":2875},{},[2876],{"type":48,"tag":113,"props":2877,"children":2879},{"className":2878},[],[2880],{"type":62,"value":2793},{"type":48,"tag":1079,"props":2882,"children":2883},{},[2884,2885,2891,2892],{"type":62,"value":2838},{"type":48,"tag":113,"props":2886,"children":2888},{"className":2887},[],[2889],{"type":62,"value":2890},"\"myapp@1.0.0\"",{"type":62,"value":2846},{"type":48,"tag":113,"props":2893,"children":2895},{"className":2894},[],[2896],{"type":62,"value":2897},"SENTRY_RELEASE",{"type":48,"tag":1052,"props":2899,"children":2900},{},[2901,2910,2919,2928],{"type":48,"tag":1079,"props":2902,"children":2903},{},[2904],{"type":48,"tag":113,"props":2905,"children":2907},{"className":2906},[],[2908],{"type":62,"value":2909},"send_default_pii",{"type":48,"tag":1079,"props":2911,"children":2912},{},[2913],{"type":48,"tag":113,"props":2914,"children":2916},{"className":2915},[],[2917],{"type":62,"value":2918},"bool",{"type":48,"tag":1079,"props":2920,"children":2921},{},[2922],{"type":48,"tag":113,"props":2923,"children":2925},{"className":2924},[],[2926],{"type":62,"value":2927},"False",{"type":48,"tag":1079,"props":2929,"children":2930},{},[2931],{"type":62,"value":2932},"Include IP, headers, cookies, auth user, query strings (ASGI frameworks)",{"type":48,"tag":1052,"props":2934,"children":2935},{},[2936,2944,2953,2961],{"type":48,"tag":1079,"props":2937,"children":2938},{},[2939],{"type":48,"tag":113,"props":2940,"children":2942},{"className":2941},[],[2943],{"type":62,"value":910},{"type":48,"tag":1079,"props":2945,"children":2946},{},[2947],{"type":48,"tag":113,"props":2948,"children":2950},{"className":2949},[],[2951],{"type":62,"value":2952},"float",{"type":48,"tag":1079,"props":2954,"children":2955},{},[2956],{"type":48,"tag":113,"props":2957,"children":2959},{"className":2958},[],[2960],{"type":62,"value":2793},{"type":48,"tag":1079,"props":2962,"children":2963},{},[2964,2966,2971],{"type":62,"value":2965},"Transaction sample rate; ",{"type":48,"tag":113,"props":2967,"children":2969},{"className":2968},[],[2970],{"type":62,"value":2793},{"type":62,"value":2972}," disables tracing",{"type":48,"tag":1052,"props":2974,"children":2975},{},[2976,2985,2994,3002],{"type":48,"tag":1079,"props":2977,"children":2978},{},[2979],{"type":48,"tag":113,"props":2980,"children":2982},{"className":2981},[],[2983],{"type":62,"value":2984},"traces_sampler",{"type":48,"tag":1079,"props":2986,"children":2987},{},[2988],{"type":48,"tag":113,"props":2989,"children":2991},{"className":2990},[],[2992],{"type":62,"value":2993},"Callable",{"type":48,"tag":1079,"props":2995,"children":2996},{},[2997],{"type":48,"tag":113,"props":2998,"children":3000},{"className":2999},[],[3001],{"type":62,"value":2793},{"type":48,"tag":1079,"props":3003,"children":3004},{},[3005],{"type":62,"value":3006},"Custom per-transaction sampling (overrides rate)",{"type":48,"tag":1052,"props":3008,"children":3009},{},[3010,3019,3027,3035],{"type":48,"tag":1079,"props":3011,"children":3012},{},[3013],{"type":48,"tag":113,"props":3014,"children":3016},{"className":3015},[],[3017],{"type":62,"value":3018},"profile_session_sample_rate",{"type":48,"tag":1079,"props":3020,"children":3021},{},[3022],{"type":48,"tag":113,"props":3023,"children":3025},{"className":3024},[],[3026],{"type":62,"value":2952},{"type":48,"tag":1079,"props":3028,"children":3029},{},[3030],{"type":48,"tag":113,"props":3031,"children":3033},{"className":3032},[],[3034],{"type":62,"value":2793},{"type":48,"tag":1079,"props":3036,"children":3037},{},[3038],{"type":62,"value":3039},"Continuous profiling session rate",{"type":48,"tag":1052,"props":3041,"children":3042},{},[3043,3052,3060,3069],{"type":48,"tag":1079,"props":3044,"children":3045},{},[3046],{"type":48,"tag":113,"props":3047,"children":3049},{"className":3048},[],[3050],{"type":62,"value":3051},"profile_lifecycle",{"type":48,"tag":1079,"props":3053,"children":3054},{},[3055],{"type":48,"tag":113,"props":3056,"children":3058},{"className":3057},[],[3059],{"type":62,"value":2784},{"type":48,"tag":1079,"props":3061,"children":3062},{},[3063],{"type":48,"tag":113,"props":3064,"children":3066},{"className":3065},[],[3067],{"type":62,"value":3068},"\"manual\"",{"type":48,"tag":1079,"props":3070,"children":3071},{},[3072,3078],{"type":48,"tag":113,"props":3073,"children":3075},{"className":3074},[],[3076],{"type":62,"value":3077},"\"trace\"",{"type":62,"value":3079}," = auto-start profiler with spans",{"type":48,"tag":1052,"props":3081,"children":3082},{},[3083,3092,3100,3108],{"type":48,"tag":1079,"props":3084,"children":3085},{},[3086],{"type":48,"tag":113,"props":3087,"children":3089},{"className":3088},[],[3090],{"type":62,"value":3091},"profiles_sample_rate",{"type":48,"tag":1079,"props":3093,"children":3094},{},[3095],{"type":48,"tag":113,"props":3096,"children":3098},{"className":3097},[],[3099],{"type":62,"value":2952},{"type":48,"tag":1079,"props":3101,"children":3102},{},[3103],{"type":48,"tag":113,"props":3104,"children":3106},{"className":3105},[],[3107],{"type":62,"value":2793},{"type":48,"tag":1079,"props":3109,"children":3110},{},[3111],{"type":62,"value":3112},"Transaction-based profiling rate",{"type":48,"tag":1052,"props":3114,"children":3115},{},[3116,3125,3133,3141],{"type":48,"tag":1079,"props":3117,"children":3118},{},[3119],{"type":48,"tag":113,"props":3120,"children":3122},{"className":3121},[],[3123],{"type":62,"value":3124},"enable_logs",{"type":48,"tag":1079,"props":3126,"children":3127},{},[3128],{"type":48,"tag":113,"props":3129,"children":3131},{"className":3130},[],[3132],{"type":62,"value":2918},{"type":48,"tag":1079,"props":3134,"children":3135},{},[3136],{"type":48,"tag":113,"props":3137,"children":3139},{"className":3138},[],[3140],{"type":62,"value":2927},{"type":48,"tag":1079,"props":3142,"children":3143},{},[3144],{"type":62,"value":3145},"Send logs to Sentry (SDK ≥ 2.35.0)",{"type":48,"tag":1052,"props":3147,"children":3148},{},[3149,3158,3166,3175],{"type":48,"tag":1079,"props":3150,"children":3151},{},[3152],{"type":48,"tag":113,"props":3153,"children":3155},{"className":3154},[],[3156],{"type":62,"value":3157},"sample_rate",{"type":48,"tag":1079,"props":3159,"children":3160},{},[3161],{"type":48,"tag":113,"props":3162,"children":3164},{"className":3163},[],[3165],{"type":62,"value":2952},{"type":48,"tag":1079,"props":3167,"children":3168},{},[3169],{"type":48,"tag":113,"props":3170,"children":3172},{"className":3171},[],[3173],{"type":62,"value":3174},"1.0",{"type":48,"tag":1079,"props":3176,"children":3177},{},[3178],{"type":62,"value":3179},"Error event sample rate",{"type":48,"tag":1052,"props":3181,"children":3182},{},[3183,3192,3200,3208],{"type":48,"tag":1079,"props":3184,"children":3185},{},[3186],{"type":48,"tag":113,"props":3187,"children":3189},{"className":3188},[],[3190],{"type":62,"value":3191},"attach_stacktrace",{"type":48,"tag":1079,"props":3193,"children":3194},{},[3195],{"type":48,"tag":113,"props":3196,"children":3198},{"className":3197},[],[3199],{"type":62,"value":2918},{"type":48,"tag":1079,"props":3201,"children":3202},{},[3203],{"type":48,"tag":113,"props":3204,"children":3206},{"className":3205},[],[3207],{"type":62,"value":2927},{"type":48,"tag":1079,"props":3209,"children":3210},{},[3211,3213],{"type":62,"value":3212},"Stack traces on ",{"type":48,"tag":113,"props":3214,"children":3216},{"className":3215},[],[3217],{"type":62,"value":3218},"capture_message()",{"type":48,"tag":1052,"props":3220,"children":3221},{},[3222,3231,3240,3249],{"type":48,"tag":1079,"props":3223,"children":3224},{},[3225],{"type":48,"tag":113,"props":3226,"children":3228},{"className":3227},[],[3229],{"type":62,"value":3230},"max_breadcrumbs",{"type":48,"tag":1079,"props":3232,"children":3233},{},[3234],{"type":48,"tag":113,"props":3235,"children":3237},{"className":3236},[],[3238],{"type":62,"value":3239},"int",{"type":48,"tag":1079,"props":3241,"children":3242},{},[3243],{"type":48,"tag":113,"props":3244,"children":3246},{"className":3245},[],[3247],{"type":62,"value":3248},"100",{"type":48,"tag":1079,"props":3250,"children":3251},{},[3252],{"type":62,"value":3253},"Max breadcrumbs per event",{"type":48,"tag":1052,"props":3255,"children":3256},{},[3257,3266,3274,3282],{"type":48,"tag":1079,"props":3258,"children":3259},{},[3260],{"type":48,"tag":113,"props":3261,"children":3263},{"className":3262},[],[3264],{"type":62,"value":3265},"debug",{"type":48,"tag":1079,"props":3267,"children":3268},{},[3269],{"type":48,"tag":113,"props":3270,"children":3272},{"className":3271},[],[3273],{"type":62,"value":2918},{"type":48,"tag":1079,"props":3275,"children":3276},{},[3277],{"type":48,"tag":113,"props":3278,"children":3280},{"className":3279},[],[3281],{"type":62,"value":2927},{"type":48,"tag":1079,"props":3283,"children":3284},{},[3285],{"type":62,"value":3286},"Verbose SDK debug output",{"type":48,"tag":1052,"props":3288,"children":3289},{},[3290,3299,3307,3315],{"type":48,"tag":1079,"props":3291,"children":3292},{},[3293],{"type":48,"tag":113,"props":3294,"children":3296},{"className":3295},[],[3297],{"type":62,"value":3298},"before_send",{"type":48,"tag":1079,"props":3300,"children":3301},{},[3302],{"type":48,"tag":113,"props":3303,"children":3305},{"className":3304},[],[3306],{"type":62,"value":2993},{"type":48,"tag":1079,"props":3308,"children":3309},{},[3310],{"type":48,"tag":113,"props":3311,"children":3313},{"className":3312},[],[3314],{"type":62,"value":2793},{"type":48,"tag":1079,"props":3316,"children":3317},{},[3318],{"type":62,"value":3319},"Hook to mutate\u002Fdrop error events",{"type":48,"tag":1052,"props":3321,"children":3322},{},[3323,3332,3340,3348],{"type":48,"tag":1079,"props":3324,"children":3325},{},[3326],{"type":48,"tag":113,"props":3327,"children":3329},{"className":3328},[],[3330],{"type":62,"value":3331},"before_send_transaction",{"type":48,"tag":1079,"props":3333,"children":3334},{},[3335],{"type":48,"tag":113,"props":3336,"children":3338},{"className":3337},[],[3339],{"type":62,"value":2993},{"type":48,"tag":1079,"props":3341,"children":3342},{},[3343],{"type":48,"tag":113,"props":3344,"children":3346},{"className":3345},[],[3347],{"type":62,"value":2793},{"type":48,"tag":1079,"props":3349,"children":3350},{},[3351],{"type":62,"value":3352},"Hook to mutate\u002Fdrop transaction events",{"type":48,"tag":1052,"props":3354,"children":3355},{},[3356,3365,3374,3383],{"type":48,"tag":1079,"props":3357,"children":3358},{},[3359],{"type":48,"tag":113,"props":3360,"children":3362},{"className":3361},[],[3363],{"type":62,"value":3364},"ignore_errors",{"type":48,"tag":1079,"props":3366,"children":3367},{},[3368],{"type":48,"tag":113,"props":3369,"children":3371},{"className":3370},[],[3372],{"type":62,"value":3373},"list",{"type":48,"tag":1079,"props":3375,"children":3376},{},[3377],{"type":48,"tag":113,"props":3378,"children":3380},{"className":3379},[],[3381],{"type":62,"value":3382},"[]",{"type":48,"tag":1079,"props":3384,"children":3385},{},[3386],{"type":62,"value":3387},"Exception types or regex patterns to suppress",{"type":48,"tag":1052,"props":3389,"children":3390},{},[3391,3400,3408,3417],{"type":48,"tag":1079,"props":3392,"children":3393},{},[3394],{"type":48,"tag":113,"props":3395,"children":3397},{"className":3396},[],[3398],{"type":62,"value":3399},"auto_enabling_integrations",{"type":48,"tag":1079,"props":3401,"children":3402},{},[3403],{"type":48,"tag":113,"props":3404,"children":3406},{"className":3405},[],[3407],{"type":62,"value":2918},{"type":48,"tag":1079,"props":3409,"children":3410},{},[3411],{"type":48,"tag":113,"props":3412,"children":3414},{"className":3413},[],[3415],{"type":62,"value":3416},"True",{"type":48,"tag":1079,"props":3418,"children":3419},{},[3420,3422,3427],{"type":62,"value":3421},"Set ",{"type":48,"tag":113,"props":3423,"children":3425},{"className":3424},[],[3426],{"type":62,"value":2927},{"type":62,"value":3428}," to disable all auto-detection",{"type":48,"tag":3430,"props":3431,"children":3433},"h4",{"id":3432},"otlpintegration-options-pass-to-constructor",[3434,3440],{"type":48,"tag":113,"props":3435,"children":3437},{"className":3436},[],[3438],{"type":62,"value":3439},"OTLPIntegration",{"type":62,"value":3441}," Options (pass to constructor)",{"type":48,"tag":1044,"props":3443,"children":3444},{},[3445,3467],{"type":48,"tag":1048,"props":3446,"children":3447},{},[3448],{"type":48,"tag":1052,"props":3449,"children":3450},{},[3451,3455,3459,3463],{"type":48,"tag":1056,"props":3452,"children":3453},{},[3454],{"type":62,"value":2745},{"type":48,"tag":1056,"props":3456,"children":3457},{},[3458],{"type":62,"value":2750},{"type":48,"tag":1056,"props":3460,"children":3461},{},[3462],{"type":62,"value":2755},{"type":48,"tag":1056,"props":3464,"children":3465},{},[3466],{"type":62,"value":2760},{"type":48,"tag":1072,"props":3468,"children":3469},{},[3470,3510,3551,3584],{"type":48,"tag":1052,"props":3471,"children":3472},{},[3473,3482,3490,3498],{"type":48,"tag":1079,"props":3474,"children":3475},{},[3476],{"type":48,"tag":113,"props":3477,"children":3479},{"className":3478},[],[3480],{"type":62,"value":3481},"setup_otlp_traces_exporter",{"type":48,"tag":1079,"props":3483,"children":3484},{},[3485],{"type":48,"tag":113,"props":3486,"children":3488},{"className":3487},[],[3489],{"type":62,"value":2918},{"type":48,"tag":1079,"props":3491,"children":3492},{},[3493],{"type":48,"tag":113,"props":3494,"children":3496},{"className":3495},[],[3497],{"type":62,"value":3416},{"type":48,"tag":1079,"props":3499,"children":3500},{},[3501,3503,3508],{"type":62,"value":3502},"Auto-configure OTLP exporter; set ",{"type":48,"tag":113,"props":3504,"children":3506},{"className":3505},[],[3507],{"type":62,"value":2927},{"type":62,"value":3509}," if you send to your own Collector",{"type":48,"tag":1052,"props":3511,"children":3512},{},[3513,3522,3530,3538],{"type":48,"tag":1079,"props":3514,"children":3515},{},[3516],{"type":48,"tag":113,"props":3517,"children":3519},{"className":3518},[],[3520],{"type":62,"value":3521},"collector_url",{"type":48,"tag":1079,"props":3523,"children":3524},{},[3525],{"type":48,"tag":113,"props":3526,"children":3528},{"className":3527},[],[3529],{"type":62,"value":2784},{"type":48,"tag":1079,"props":3531,"children":3532},{},[3533],{"type":48,"tag":113,"props":3534,"children":3536},{"className":3535},[],[3537],{"type":62,"value":2793},{"type":48,"tag":1079,"props":3539,"children":3540},{},[3541,3543,3549],{"type":62,"value":3542},"OTLP HTTP endpoint of an OTel Collector (e.g., ",{"type":48,"tag":113,"props":3544,"children":3546},{"className":3545},[],[3547],{"type":62,"value":3548},"http:\u002F\u002Flocalhost:4318\u002Fv1\u002Ftraces",{"type":62,"value":3550},"); when set, spans are sent to the collector instead of directly to Sentry",{"type":48,"tag":1052,"props":3552,"children":3553},{},[3554,3563,3571,3579],{"type":48,"tag":1079,"props":3555,"children":3556},{},[3557],{"type":48,"tag":113,"props":3558,"children":3560},{"className":3559},[],[3561],{"type":62,"value":3562},"setup_propagator",{"type":48,"tag":1079,"props":3564,"children":3565},{},[3566],{"type":48,"tag":113,"props":3567,"children":3569},{"className":3568},[],[3570],{"type":62,"value":2918},{"type":48,"tag":1079,"props":3572,"children":3573},{},[3574],{"type":48,"tag":113,"props":3575,"children":3577},{"className":3576},[],[3578],{"type":62,"value":3416},{"type":48,"tag":1079,"props":3580,"children":3581},{},[3582],{"type":62,"value":3583},"Auto-configure Sentry propagator for distributed tracing",{"type":48,"tag":1052,"props":3585,"children":3586},{},[3587,3596,3604,3612],{"type":48,"tag":1079,"props":3588,"children":3589},{},[3590],{"type":48,"tag":113,"props":3591,"children":3593},{"className":3592},[],[3594],{"type":62,"value":3595},"capture_exceptions",{"type":48,"tag":1079,"props":3597,"children":3598},{},[3599],{"type":48,"tag":113,"props":3600,"children":3602},{"className":3601},[],[3603],{"type":62,"value":2918},{"type":48,"tag":1079,"props":3605,"children":3606},{},[3607],{"type":48,"tag":113,"props":3608,"children":3610},{"className":3609},[],[3611],{"type":62,"value":2927},{"type":48,"tag":1079,"props":3613,"children":3614},{},[3615,3617],{"type":62,"value":3616},"Intercept exceptions recorded via OTel ",{"type":48,"tag":113,"props":3618,"children":3620},{"className":3619},[],[3621],{"type":62,"value":3622},"Span.record_exception",{"type":48,"tag":1328,"props":3624,"children":3626},{"id":3625},"environment-variables",[3627],{"type":62,"value":3628},"Environment Variables",{"type":48,"tag":1044,"props":3630,"children":3631},{},[3632,3652],{"type":48,"tag":1048,"props":3633,"children":3634},{},[3635],{"type":48,"tag":1052,"props":3636,"children":3637},{},[3638,3643,3648],{"type":48,"tag":1056,"props":3639,"children":3640},{},[3641],{"type":62,"value":3642},"Variable",{"type":48,"tag":1056,"props":3644,"children":3645},{},[3646],{"type":62,"value":3647},"Maps to",{"type":48,"tag":1056,"props":3649,"children":3650},{},[3651],{"type":62,"value":1781},{"type":48,"tag":1072,"props":3653,"children":3654},{},[3655,3677,3701,3723],{"type":48,"tag":1052,"props":3656,"children":3657},{},[3658,3666,3674],{"type":48,"tag":1079,"props":3659,"children":3660},{},[3661],{"type":48,"tag":113,"props":3662,"children":3664},{"className":3663},[],[3665],{"type":62,"value":2804},{"type":48,"tag":1079,"props":3667,"children":3668},{},[3669],{"type":48,"tag":113,"props":3670,"children":3672},{"className":3671},[],[3673],{"type":62,"value":2775},{"type":48,"tag":1079,"props":3675,"children":3676},{},[],{"type":48,"tag":1052,"props":3678,"children":3679},{},[3680,3688,3696],{"type":48,"tag":1079,"props":3681,"children":3682},{},[3683],{"type":48,"tag":113,"props":3684,"children":3686},{"className":3685},[],[3687],{"type":62,"value":2897},{"type":48,"tag":1079,"props":3689,"children":3690},{},[3691],{"type":48,"tag":113,"props":3692,"children":3694},{"className":3693},[],[3695],{"type":62,"value":2864},{"type":48,"tag":1079,"props":3697,"children":3698},{},[3699],{"type":62,"value":3700},"Also auto-detected from git SHA, Heroku, CircleCI, CodeBuild, GAE",{"type":48,"tag":1052,"props":3702,"children":3703},{},[3704,3712,3720],{"type":48,"tag":1079,"props":3705,"children":3706},{},[3707],{"type":48,"tag":113,"props":3708,"children":3710},{"className":3709},[],[3711],{"type":62,"value":2852},{"type":48,"tag":1079,"props":3713,"children":3714},{},[3715],{"type":48,"tag":113,"props":3716,"children":3718},{"className":3717},[],[3719],{"type":62,"value":2816},{"type":48,"tag":1079,"props":3721,"children":3722},{},[],{"type":48,"tag":1052,"props":3724,"children":3725},{},[3726,3735,3743],{"type":48,"tag":1079,"props":3727,"children":3728},{},[3729],{"type":48,"tag":113,"props":3730,"children":3732},{"className":3731},[],[3733],{"type":62,"value":3734},"SENTRY_DEBUG",{"type":48,"tag":1079,"props":3736,"children":3737},{},[3738],{"type":48,"tag":113,"props":3739,"children":3741},{"className":3740},[],[3742],{"type":62,"value":3265},{"type":48,"tag":1079,"props":3744,"children":3745},{},[],{"type":48,"tag":159,"props":3747,"children":3748},{},[],{"type":48,"tag":86,"props":3750,"children":3752},{"id":3751},"verification",[3753],{"type":62,"value":3754},"Verification",{"type":48,"tag":53,"props":3756,"children":3757},{},[3758],{"type":62,"value":3759},"Test that Sentry is receiving events:",{"type":48,"tag":174,"props":3761,"children":3763},{"className":1601,"code":3762,"language":22,"meta":179,"style":179},"# Trigger a real error event — check dashboard within seconds\ndivision_by_zero = 1 \u002F 0\n",[3764],{"type":48,"tag":113,"props":3765,"children":3766},{"__ignoreMap":179},[3767,3775],{"type":48,"tag":185,"props":3768,"children":3769},{"class":187,"line":188},[3770],{"type":48,"tag":185,"props":3771,"children":3772},{},[3773],{"type":62,"value":3774},"# Trigger a real error event — check dashboard within seconds\n",{"type":48,"tag":185,"props":3776,"children":3777},{"class":187,"line":198},[3778],{"type":48,"tag":185,"props":3779,"children":3780},{},[3781],{"type":62,"value":3782},"division_by_zero = 1 \u002F 0\n",{"type":48,"tag":53,"props":3784,"children":3785},{},[3786],{"type":62,"value":3787},"Or for a non-crashing check:",{"type":48,"tag":174,"props":3789,"children":3791},{"className":1601,"code":3790,"language":22,"meta":179,"style":179},"sentry_sdk.capture_message(\"Sentry Python SDK test\")\n",[3792],{"type":48,"tag":113,"props":3793,"children":3794},{"__ignoreMap":179},[3795],{"type":48,"tag":185,"props":3796,"children":3797},{"class":187,"line":188},[3798],{"type":48,"tag":185,"props":3799,"children":3800},{},[3801],{"type":62,"value":3790},{"type":48,"tag":53,"props":3803,"children":3804},{},[3805],{"type":62,"value":3806},"If nothing appears:",{"type":48,"tag":3808,"props":3809,"children":3810},"ol",{},[3811,3830,3835,3847],{"type":48,"tag":97,"props":3812,"children":3813},{},[3814,3815,3821,3823,3828],{"type":62,"value":3421},{"type":48,"tag":113,"props":3816,"children":3818},{"className":3817},[],[3819],{"type":62,"value":3820},"debug=True",{"type":62,"value":3822}," in ",{"type":48,"tag":113,"props":3824,"children":3826},{"className":3825},[],[3827],{"type":62,"value":796},{"type":62,"value":3829}," — prints SDK internals to stdout",{"type":48,"tag":97,"props":3831,"children":3832},{},[3833],{"type":62,"value":3834},"Verify the DSN is correct",{"type":48,"tag":97,"props":3836,"children":3837},{},[3838,3840,3845],{"type":62,"value":3839},"Check ",{"type":48,"tag":113,"props":3841,"children":3843},{"className":3842},[],[3844],{"type":62,"value":2804},{"type":62,"value":3846}," env var is set in the running process",{"type":48,"tag":97,"props":3848,"children":3849},{},[3850,3852,3857],{"type":62,"value":3851},"For Celery\u002FRQ: ensure init runs in the ",{"type":48,"tag":141,"props":3853,"children":3854},{},[3855],{"type":62,"value":3856},"worker",{"type":62,"value":3858}," process, not just the calling process",{"type":48,"tag":159,"props":3860,"children":3861},{},[],{"type":48,"tag":86,"props":3863,"children":3865},{"id":3864},"phase-4-cross-link",[3866],{"type":62,"value":3867},"Phase 4: Cross-Link",{"type":48,"tag":53,"props":3869,"children":3870},{},[3871],{"type":62,"value":3872},"After completing Python setup, check for a companion frontend missing Sentry:",{"type":48,"tag":174,"props":3874,"children":3876},{"className":176,"code":3875,"language":178,"meta":179,"style":179},"ls frontend\u002F web\u002F client\u002F ui\u002F 2>\u002Fdev\u002Fnull\ncat frontend\u002Fpackage.json web\u002Fpackage.json client\u002Fpackage.json 2>\u002Fdev\u002Fnull \\\n  | grep -E '\"react\"|\"svelte\"|\"vue\"|\"next\"|\"nuxt\"'\n",[3877],{"type":48,"tag":113,"props":3878,"children":3879},{"__ignoreMap":179},[3880,3911,3946],{"type":48,"tag":185,"props":3881,"children":3882},{"class":187,"line":188},[3883,3887,3891,3895,3899,3903,3907],{"type":48,"tag":185,"props":3884,"children":3885},{"style":202},[3886],{"type":62,"value":729},{"type":48,"tag":185,"props":3888,"children":3889},{"style":208},[3890],{"type":62,"value":734},{"type":48,"tag":185,"props":3892,"children":3893},{"style":208},[3894],{"type":62,"value":739},{"type":48,"tag":185,"props":3896,"children":3897},{"style":208},[3898],{"type":62,"value":744},{"type":48,"tag":185,"props":3900,"children":3901},{"style":208},[3902],{"type":62,"value":749},{"type":48,"tag":185,"props":3904,"children":3905},{"style":239},[3906],{"type":62,"value":242},{"type":48,"tag":185,"props":3908,"children":3909},{"style":208},[3910],{"type":62,"value":247},{"type":48,"tag":185,"props":3912,"children":3913},{"class":187,"line":198},[3914,3919,3924,3929,3934,3938,3942],{"type":48,"tag":185,"props":3915,"children":3916},{"style":202},[3917],{"type":62,"value":3918},"cat",{"type":48,"tag":185,"props":3920,"children":3921},{"style":208},[3922],{"type":62,"value":3923}," frontend\u002Fpackage.json",{"type":48,"tag":185,"props":3925,"children":3926},{"style":208},[3927],{"type":62,"value":3928}," web\u002Fpackage.json",{"type":48,"tag":185,"props":3930,"children":3931},{"style":208},[3932],{"type":62,"value":3933}," client\u002Fpackage.json",{"type":48,"tag":185,"props":3935,"children":3936},{"style":239},[3937],{"type":62,"value":242},{"type":48,"tag":185,"props":3939,"children":3940},{"style":208},[3941],{"type":62,"value":688},{"type":48,"tag":185,"props":3943,"children":3944},{"style":296},[3945],{"type":62,"value":299},{"type":48,"tag":185,"props":3947,"children":3948},{"class":187,"line":250},[3949,3954,3959,3963,3968,3973],{"type":48,"tag":185,"props":3950,"children":3951},{"style":239},[3952],{"type":62,"value":3953},"  |",{"type":48,"tag":185,"props":3955,"children":3956},{"style":202},[3957],{"type":62,"value":3958}," grep",{"type":48,"tag":185,"props":3960,"children":3961},{"style":208},[3962],{"type":62,"value":408},{"type":48,"tag":185,"props":3964,"children":3965},{"style":239},[3966],{"type":62,"value":3967}," '",{"type":48,"tag":185,"props":3969,"children":3970},{"style":208},[3971],{"type":62,"value":3972},"\"react\"|\"svelte\"|\"vue\"|\"next\"|\"nuxt\"",{"type":48,"tag":185,"props":3974,"children":3975},{"style":239},[3976],{"type":62,"value":3977},"'\n",{"type":48,"tag":53,"props":3979,"children":3980},{},[3981],{"type":62,"value":3982},"If a frontend exists without Sentry, suggest the matching skill:",{"type":48,"tag":1044,"props":3984,"children":3985},{},[3986,4002],{"type":48,"tag":1048,"props":3987,"children":3988},{},[3989],{"type":48,"tag":1052,"props":3990,"children":3991},{},[3992,3997],{"type":48,"tag":1056,"props":3993,"children":3994},{},[3995],{"type":62,"value":3996},"Frontend detected",{"type":48,"tag":1056,"props":3998,"children":3999},{},[4000],{"type":62,"value":4001},"Suggest skill",{"type":48,"tag":1072,"props":4003,"children":4004},{},[4005,4022,4039,4067],{"type":48,"tag":1052,"props":4006,"children":4007},{},[4008,4013],{"type":48,"tag":1079,"props":4009,"children":4010},{},[4011],{"type":62,"value":4012},"React \u002F Next.js",{"type":48,"tag":1079,"props":4014,"children":4015},{},[4016],{"type":48,"tag":113,"props":4017,"children":4019},{"className":4018},[],[4020],{"type":62,"value":4021},"sentry-react-sdk",{"type":48,"tag":1052,"props":4023,"children":4024},{},[4025,4030],{"type":48,"tag":1079,"props":4026,"children":4027},{},[4028],{"type":62,"value":4029},"Svelte \u002F SvelteKit",{"type":48,"tag":1079,"props":4031,"children":4032},{},[4033],{"type":48,"tag":113,"props":4034,"children":4036},{"className":4035},[],[4037],{"type":62,"value":4038},"sentry-svelte-sdk",{"type":48,"tag":1052,"props":4040,"children":4041},{},[4042,4047],{"type":48,"tag":1079,"props":4043,"children":4044},{},[4045],{"type":62,"value":4046},"Vue \u002F Nuxt",{"type":48,"tag":1079,"props":4048,"children":4049},{},[4050,4052,4058,4060],{"type":62,"value":4051},"Use ",{"type":48,"tag":113,"props":4053,"children":4055},{"className":4054},[],[4056],{"type":62,"value":4057},"@sentry\u002Fvue",{"type":62,"value":4059}," — see ",{"type":48,"tag":57,"props":4061,"children":4064},{"href":4062,"rel":4063},"https:\u002F\u002Fdocs.sentry.io\u002Fplatforms\u002Fjavascript\u002Fguides\u002Fvue\u002F",[152],[4065],{"type":62,"value":4066},"docs.sentry.io\u002Fplatforms\u002Fjavascript\u002Fguides\u002Fvue\u002F",{"type":48,"tag":1052,"props":4068,"children":4069},{},[4070,4075],{"type":48,"tag":1079,"props":4071,"children":4072},{},[4073],{"type":62,"value":4074},"Other JS\u002FTS",{"type":48,"tag":1079,"props":4076,"children":4077},{},[4078,4083],{"type":48,"tag":113,"props":4079,"children":4081},{"className":4080},[],[4082],{"type":62,"value":4021},{"type":62,"value":4084}," (covers generic browser JS patterns)",{"type":48,"tag":159,"props":4086,"children":4087},{},[],{"type":48,"tag":86,"props":4089,"children":4091},{"id":4090},"troubleshooting",[4092],{"type":62,"value":4093},"Troubleshooting",{"type":48,"tag":1044,"props":4095,"children":4096},{},[4097,4113],{"type":48,"tag":1048,"props":4098,"children":4099},{},[4100],{"type":48,"tag":1052,"props":4101,"children":4102},{},[4103,4108],{"type":48,"tag":1056,"props":4104,"children":4105},{},[4106],{"type":62,"value":4107},"Issue",{"type":48,"tag":1056,"props":4109,"children":4110},{},[4111],{"type":62,"value":4112},"Solution",{"type":48,"tag":1072,"props":4114,"children":4115},{},[4116,4135,4154,4188,4211,4245,4278,4313,4333,4354,4381,4418,4458,4490,4517,4544,4563],{"type":48,"tag":1052,"props":4117,"children":4118},{},[4119,4124],{"type":48,"tag":1079,"props":4120,"children":4121},{},[4122],{"type":62,"value":4123},"Events not appearing",{"type":48,"tag":1079,"props":4125,"children":4126},{},[4127,4128,4133],{"type":62,"value":3421},{"type":48,"tag":113,"props":4129,"children":4131},{"className":4130},[],[4132],{"type":62,"value":3820},{"type":62,"value":4134},", verify DSN, check env vars in the running process",{"type":48,"tag":1052,"props":4136,"children":4137},{},[4138,4143],{"type":48,"tag":1079,"props":4139,"children":4140},{},[4141],{"type":62,"value":4142},"Malformed DSN error",{"type":48,"tag":1079,"props":4144,"children":4145},{},[4146,4148],{"type":62,"value":4147},"Format: ",{"type":48,"tag":113,"props":4149,"children":4151},{"className":4150},[],[4152],{"type":62,"value":4153},"https:\u002F\u002F\u003Ckey>@o\u003Corg>.ingest.sentry.io\u002F\u003Cproject>",{"type":48,"tag":1052,"props":4155,"children":4156},{},[4157,4162],{"type":48,"tag":1079,"props":4158,"children":4159},{},[4160],{"type":62,"value":4161},"Django exceptions not captured",{"type":48,"tag":1079,"props":4163,"children":4164},{},[4165,4167,4172,4174,4179,4181,4186],{"type":62,"value":4166},"Ensure ",{"type":48,"tag":113,"props":4168,"children":4170},{"className":4169},[],[4171],{"type":62,"value":796},{"type":62,"value":4173}," is at the ",{"type":48,"tag":141,"props":4175,"children":4176},{},[4177],{"type":62,"value":4178},"top",{"type":62,"value":4180}," of ",{"type":48,"tag":113,"props":4182,"children":4184},{"className":4183},[],[4185],{"type":62,"value":1806},{"type":62,"value":4187}," before other imports",{"type":48,"tag":1052,"props":4189,"children":4190},{},[4191,4196],{"type":48,"tag":1079,"props":4192,"children":4193},{},[4194],{"type":62,"value":4195},"Flask exceptions not captured",{"type":48,"tag":1079,"props":4197,"children":4198},{},[4199,4201,4205,4206],{"type":62,"value":4200},"Init must happen ",{"type":48,"tag":141,"props":4202,"children":4203},{},[4204],{"type":62,"value":1596},{"type":62,"value":1283},{"type":48,"tag":113,"props":4207,"children":4209},{"className":4208},[],[4210],{"type":62,"value":1835},{"type":48,"tag":1052,"props":4212,"children":4213},{},[4214,4219],{"type":48,"tag":1079,"props":4215,"children":4216},{},[4217],{"type":62,"value":4218},"FastAPI exceptions not captured",{"type":48,"tag":1079,"props":4220,"children":4221},{},[4222,4224,4229,4231,4236,4238,4243],{"type":62,"value":4223},"Init before ",{"type":48,"tag":113,"props":4225,"children":4227},{"className":4226},[],[4228],{"type":62,"value":1861},{"type":62,"value":4230},"; both ",{"type":48,"tag":113,"props":4232,"children":4234},{"className":4233},[],[4235],{"type":62,"value":1870},{"type":62,"value":4237}," and ",{"type":48,"tag":113,"props":4239,"children":4241},{"className":4240},[],[4242],{"type":62,"value":1878},{"type":62,"value":4244}," auto-enabled",{"type":48,"tag":1052,"props":4246,"children":4247},{},[4248,4253],{"type":48,"tag":1079,"props":4249,"children":4250},{},[4251],{"type":62,"value":4252},"ASGI chained exceptions suppressed",{"type":48,"tag":1079,"props":4254,"children":4255},{},[4256,4258,4264,4266,4272,4273],{"type":62,"value":4257},"By default, Sentry's ASGI middleware strips exception chains (",{"type":48,"tag":113,"props":4259,"children":4261},{"className":4260},[],[4262],{"type":62,"value":4263},"raise exc from None",{"type":62,"value":4265},"). To preserve chained exceptions, set ",{"type":48,"tag":113,"props":4267,"children":4269},{"className":4268},[],[4270],{"type":62,"value":4271},"_experiments={\"suppress_asgi_chained_exceptions\": False}",{"type":62,"value":3822},{"type":48,"tag":113,"props":4274,"children":4276},{"className":4275},[],[4277],{"type":62,"value":796},{"type":48,"tag":1052,"props":4279,"children":4280},{},[4281,4286],{"type":48,"tag":1079,"props":4282,"children":4283},{},[4284],{"type":62,"value":4285},"Celery task errors not captured",{"type":48,"tag":1079,"props":4287,"children":4288},{},[4289,4291,4296,4298,4303,4305,4311],{"type":62,"value":4290},"Must call ",{"type":48,"tag":113,"props":4292,"children":4294},{"className":4293},[],[4295],{"type":62,"value":796},{"type":62,"value":4297}," in the ",{"type":48,"tag":141,"props":4299,"children":4300},{},[4301],{"type":62,"value":4302},"worker process",{"type":62,"value":4304}," via ",{"type":48,"tag":113,"props":4306,"children":4308},{"className":4307},[],[4309],{"type":62,"value":4310},"celeryd_init",{"type":62,"value":4312}," signal",{"type":48,"tag":1052,"props":4314,"children":4315},{},[4316,4321],{"type":48,"tag":1079,"props":4317,"children":4318},{},[4319],{"type":62,"value":4320},"Sanic init not working",{"type":48,"tag":1079,"props":4322,"children":4323},{},[4324,4326,4331],{"type":62,"value":4325},"Init must be inside ",{"type":48,"tag":113,"props":4327,"children":4329},{"className":4328},[],[4330],{"type":62,"value":2048},{"type":62,"value":4332},", not module level",{"type":48,"tag":1052,"props":4334,"children":4335},{},[4336,4341],{"type":48,"tag":1079,"props":4337,"children":4338},{},[4339],{"type":62,"value":4340},"uWSGI not capturing",{"type":48,"tag":1079,"props":4342,"children":4343},{},[4344,4346,4352],{"type":62,"value":4345},"Add ",{"type":48,"tag":113,"props":4347,"children":4349},{"className":4348},[],[4350],{"type":62,"value":4351},"--enable-threads --py-call-uwsgi-fork-hooks",{"type":62,"value":4353}," to uWSGI command",{"type":48,"tag":1052,"props":4355,"children":4356},{},[4357,4362],{"type":48,"tag":1079,"props":4358,"children":4359},{},[4360],{"type":62,"value":4361},"No traces appearing (native)",{"type":48,"tag":1079,"props":4363,"children":4364},{},[4365,4367,4372,4374,4379],{"type":62,"value":4366},"Verify ",{"type":48,"tag":113,"props":4368,"children":4370},{"className":4369},[],[4371],{"type":62,"value":910},{"type":62,"value":4373}," is set (not ",{"type":48,"tag":113,"props":4375,"children":4377},{"className":4376},[],[4378],{"type":62,"value":2793},{"type":62,"value":4380},"); check that the integration is auto-enabled",{"type":48,"tag":1052,"props":4382,"children":4383},{},[4384,4389],{"type":48,"tag":1079,"props":4385,"children":4386},{},[4387],{"type":62,"value":4388},"No traces appearing (OTLP)",{"type":48,"tag":1079,"props":4390,"children":4391},{},[4392,4393,4399,4401,4405,4406,4411,4413],{"type":62,"value":4366},{"type":48,"tag":113,"props":4394,"children":4396},{"className":4395},[],[4397],{"type":62,"value":4398},"sentry-sdk[opentelemetry-otlp]",{"type":62,"value":4400}," is installed; do ",{"type":48,"tag":141,"props":4402,"children":4403},{},[4404],{"type":62,"value":902},{"type":62,"value":904},{"type":48,"tag":113,"props":4407,"children":4409},{"className":4408},[],[4410],{"type":62,"value":910},{"type":62,"value":4412}," when using ",{"type":48,"tag":113,"props":4414,"children":4416},{"className":4415},[],[4417],{"type":62,"value":3439},{"type":48,"tag":1052,"props":4419,"children":4420},{},[4421,4426],{"type":48,"tag":1079,"props":4422,"children":4423},{},[4424],{"type":62,"value":4425},"Profiling not starting",{"type":48,"tag":1079,"props":4427,"children":4428},{},[4429,4431,4437,4439,4444,4446,4451,4453],{"type":62,"value":4430},"Requires ",{"type":48,"tag":113,"props":4432,"children":4434},{"className":4433},[],[4435],{"type":62,"value":4436},"traces_sample_rate > 0",{"type":62,"value":4438}," + either ",{"type":48,"tag":113,"props":4440,"children":4442},{"className":4441},[],[4443],{"type":62,"value":3018},{"type":62,"value":4445}," or ",{"type":48,"tag":113,"props":4447,"children":4449},{"className":4448},[],[4450],{"type":62,"value":3091},{"type":62,"value":4452},"; ",{"type":48,"tag":141,"props":4454,"children":4455},{},[4456],{"type":62,"value":4457},"not compatible with OTLP path",{"type":48,"tag":1052,"props":4459,"children":4460},{},[4461,4471],{"type":48,"tag":1079,"props":4462,"children":4463},{},[4464,4469],{"type":48,"tag":113,"props":4465,"children":4467},{"className":4466},[],[4468],{"type":62,"value":3124},{"type":62,"value":4470}," not working",{"type":48,"tag":1079,"props":4472,"children":4473},{},[4474,4476,4482,4484],{"type":62,"value":4475},"Requires SDK ≥ 2.35.0; for direct structured logs use ",{"type":48,"tag":113,"props":4477,"children":4479},{"className":4478},[],[4480],{"type":62,"value":4481},"sentry_sdk.logger",{"type":62,"value":4483},"; for stdlib bridging use ",{"type":48,"tag":113,"props":4485,"children":4487},{"className":4486},[],[4488],{"type":62,"value":4489},"LoggingIntegration(sentry_logs_level=...)",{"type":48,"tag":1052,"props":4491,"children":4492},{},[4493,4498],{"type":48,"tag":1079,"props":4494,"children":4495},{},[4496],{"type":62,"value":4497},"Too many transactions",{"type":48,"tag":1079,"props":4499,"children":4500},{},[4501,4503,4508,4510,4515],{"type":62,"value":4502},"Lower ",{"type":48,"tag":113,"props":4504,"children":4506},{"className":4505},[],[4507],{"type":62,"value":910},{"type":62,"value":4509}," or use ",{"type":48,"tag":113,"props":4511,"children":4513},{"className":4512},[],[4514],{"type":62,"value":2984},{"type":62,"value":4516}," to drop health checks",{"type":48,"tag":1052,"props":4518,"children":4519},{},[4520,4525],{"type":48,"tag":1079,"props":4521,"children":4522},{},[4523],{"type":62,"value":4524},"Cross-request data leaking",{"type":48,"tag":1079,"props":4526,"children":4527},{},[4528,4530,4536,4538],{"type":62,"value":4529},"Don't use ",{"type":48,"tag":113,"props":4531,"children":4533},{"className":4532},[],[4534],{"type":62,"value":4535},"get_global_scope()",{"type":62,"value":4537}," for per-request data — use ",{"type":48,"tag":113,"props":4539,"children":4541},{"className":4540},[],[4542],{"type":62,"value":4543},"get_isolation_scope()",{"type":48,"tag":1052,"props":4545,"children":4546},{},[4547,4552],{"type":48,"tag":1079,"props":4548,"children":4549},{},[4550],{"type":62,"value":4551},"Query strings not captured (ASGI)",{"type":48,"tag":1079,"props":4553,"children":4554},{},[4555,4557],{"type":62,"value":4556},"Query strings and client IP in ASGI frameworks (FastAPI, Starlette, etc.) require ",{"type":48,"tag":113,"props":4558,"children":4560},{"className":4559},[],[4561],{"type":62,"value":4562},"send_default_pii=True",{"type":48,"tag":1052,"props":4564,"children":4565},{},[4566,4571],{"type":48,"tag":1079,"props":4567,"children":4568},{},[4569],{"type":62,"value":4570},"RQ worker not reporting",{"type":48,"tag":1079,"props":4572,"children":4573},{},[4574,4576,4582],{"type":62,"value":4575},"Pass ",{"type":48,"tag":113,"props":4577,"children":4579},{"className":4578},[],[4580],{"type":62,"value":4581},"--sentry-dsn=\"\"",{"type":62,"value":4583}," to disable RQ's own Sentry shortcut; init via settings file instead",{"type":48,"tag":4585,"props":4586,"children":4587},"style",{},[4588],{"type":62,"value":4589},"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":4591,"total":4764},[4592,4615,4629,4644,4658,4675,4691,4705,4715,4726,4736,4751],{"slug":4593,"name":4593,"fn":4594,"description":4595,"org":4596,"tags":4597,"stars":4612,"repoUrl":4613,"updatedAt":4614},"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},[4598,4599,4602,4605,4606,4609],{"name":25,"slug":26,"type":16},{"name":4600,"slug":4601,"type":16},"iOS","ios",{"name":4603,"slug":4604,"type":16},"macOS","macos",{"name":9,"slug":8,"type":16},{"name":4607,"slug":4608,"type":16},"Testing","testing",{"name":4610,"slug":4611,"type":16},"Xcode","xcode",6176,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002FXcodeBuildMCP","2026-04-06T18:13:34.8719",{"slug":4616,"name":4616,"fn":4617,"description":4618,"org":4619,"tags":4620,"stars":4612,"repoUrl":4613,"updatedAt":4628},"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},[4621,4624,4625,4626,4627],{"name":4622,"slug":4623,"type":16},"CLI","cli",{"name":4600,"slug":4601,"type":16},{"name":4603,"slug":4604,"type":16},{"name":4607,"slug":4608,"type":16},{"name":4610,"slug":4611,"type":16},"2026-04-06T18:13:36.13414",{"slug":4630,"name":4630,"fn":4631,"description":4632,"org":4633,"tags":4634,"stars":4641,"repoUrl":4642,"updatedAt":4643},"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},[4635,4638],{"name":4636,"slug":4637,"type":16},"Documentation","documentation",{"name":4639,"slug":4640,"type":16},"Engineering","engineering",861,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills","2026-05-15T06:16:29.695991",{"slug":4645,"name":4645,"fn":4646,"description":4647,"org":4648,"tags":4649,"stars":4641,"repoUrl":4642,"updatedAt":4657},"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},[4650,4653,4654],{"name":4651,"slug":4652,"type":16},"Communications","communications",{"name":9,"slug":8,"type":16},{"name":4655,"slug":4656,"type":16},"Technical Writing","technical-writing","2026-05-15T06:16:33.38217",{"slug":4659,"name":4659,"fn":4660,"description":4661,"org":4662,"tags":4663,"stars":4641,"repoUrl":4642,"updatedAt":4674},"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},[4664,4667,4670,4671],{"name":4665,"slug":4666,"type":16},"Branding","branding",{"name":4668,"slug":4669,"type":16},"Content Creation","content-creation",{"name":9,"slug":8,"type":16},{"name":4672,"slug":4673,"type":16},"UX Copy","ux-copy","2026-05-15T06:16:22.395707",{"slug":4676,"name":4676,"fn":4677,"description":4678,"org":4679,"tags":4680,"stars":4641,"repoUrl":4642,"updatedAt":4690},"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},[4681,4684,4687],{"name":4682,"slug":4683,"type":16},"Claude Code","claude-code",{"name":4685,"slug":4686,"type":16},"Configuration","configuration",{"name":4688,"slug":4689,"type":16},"Security","security","2026-05-15T06:16:44.335977",{"slug":4692,"name":4692,"fn":4693,"description":4694,"org":4695,"tags":4696,"stars":4641,"repoUrl":4642,"updatedAt":4704},"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},[4697,4699,4700,4703],{"name":4698,"slug":4692,"type":16},"Code Review",{"name":4639,"slug":4640,"type":16},{"name":4701,"slug":4702,"type":16},"Performance","performance",{"name":4688,"slug":4689,"type":16},"2026-05-15T06:16:35.824864",{"slug":4706,"name":4706,"fn":4707,"description":4708,"org":4709,"tags":4710,"stars":4641,"repoUrl":4642,"updatedAt":4714},"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},[4711],{"name":4712,"slug":4713,"type":16},"Code Analysis","code-analysis","2026-05-15T06:16:32.127981",{"slug":4716,"name":4716,"fn":4717,"description":4718,"org":4719,"tags":4720,"stars":4641,"repoUrl":4642,"updatedAt":4725},"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},[4721,4724],{"name":4722,"slug":4723,"type":16},"Git","git",{"name":9,"slug":8,"type":16},"2026-07-18T05:15:10.723937",{"slug":4727,"name":4727,"fn":4728,"description":4729,"org":4730,"tags":4731,"stars":4641,"repoUrl":4642,"updatedAt":4735},"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},[4732,4733,4734],{"name":4639,"slug":4640,"type":16},{"name":4722,"slug":4723,"type":16},{"name":9,"slug":8,"type":16},"2026-05-15T06:16:39.458431",{"slug":4737,"name":4737,"fn":4738,"description":4739,"org":4740,"tags":4741,"stars":4641,"repoUrl":4642,"updatedAt":4750},"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},[4742,4745,4746,4748,4749],{"name":4743,"slug":4744,"type":16},"Access Control","access-control",{"name":4712,"slug":4713,"type":16},{"name":1795,"slug":4747,"type":16},"django",{"name":21,"slug":22,"type":16},{"name":4688,"slug":4689,"type":16},"2026-05-15T06:16:43.098698",{"slug":4752,"name":4752,"fn":4753,"description":4754,"org":4755,"tags":4756,"stars":4641,"repoUrl":4642,"updatedAt":4763},"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},[4757,4758,4761,4762],{"name":4698,"slug":4692,"type":16},{"name":4759,"slug":4760,"type":16},"Database","database",{"name":1795,"slug":4747,"type":16},{"name":4701,"slug":4702,"type":16},"2026-05-15T06:16:24.832813",88,{"items":4766,"total":714},[4767,4783,4796,4812,4824,4838,4853],{"slug":4768,"name":4768,"fn":4769,"description":4770,"org":4771,"tags":4772,"stars":27,"repoUrl":28,"updatedAt":4782},"sentry-android-sdk","setup Sentry SDK for Android","Full Sentry SDK setup for Android. Use when asked to \"add Sentry to Android\", \"install sentry-android\", \"setup Sentry in Android\", or configure error monitoring, tracing, profiling, session replay, or logging for Android applications. Supports Kotlin and Java codebases.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4773,4776,4777,4778,4781],{"name":4774,"slug":4775,"type":16},"Android","android",{"name":25,"slug":26,"type":16},{"name":14,"slug":15,"type":16},{"name":4779,"slug":4780,"type":16},"SDK","sdk",{"name":9,"slug":8,"type":16},"2026-07-12T06:08:32.396344",{"slug":4784,"name":4784,"fn":4785,"description":4786,"org":4787,"tags":4788,"stars":27,"repoUrl":28,"updatedAt":4795},"sentry-browser-sdk","setup Sentry error monitoring for browser applications","Full Sentry SDK setup for browser JavaScript. Use when asked to \"add Sentry to a website\", \"install @sentry\u002Fbrowser\", or configure error monitoring, tracing, session replay, or logging for vanilla JavaScript, jQuery, static sites, or WordPress.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4789,4790,4793,4794],{"name":25,"slug":26,"type":16},{"name":4791,"slug":4792,"type":16},"JavaScript","javascript",{"name":18,"slug":19,"type":16},{"name":9,"slug":8,"type":16},"2026-07-18T05:47:44.437436",{"slug":4797,"name":4797,"fn":4798,"description":4799,"org":4800,"tags":4801,"stars":27,"repoUrl":28,"updatedAt":4811},"sentry-cloudflare-sdk","setup Sentry monitoring for Cloudflare","Full Sentry SDK setup for Cloudflare Workers and Pages. Use when asked to \"add Sentry to Cloudflare Workers\", \"install @sentry\u002Fcloudflare\", or configure error monitoring, tracing, logging, crons, or AI monitoring for Cloudflare Workers, Pages, Durable Objects, Queues, Workflows, or Hono on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4802,4805,4808,4809,4810],{"name":4803,"slug":4804,"type":16},"Cloudflare","cloudflare",{"name":4806,"slug":4807,"type":16},"Edge Functions","edge-functions",{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},"2026-07-11T05:53:25.361175",{"slug":4813,"name":4813,"fn":4814,"description":4815,"org":4816,"tags":4817,"stars":27,"repoUrl":28,"updatedAt":4823},"sentry-cocoa-sdk","integrate Sentry SDK into Apple applications","Full Sentry SDK setup for Apple platforms (iOS, macOS, tvOS, watchOS, visionOS). Use when asked to \"add Sentry to iOS\", \"add Sentry to Swift\", \"install sentry-cocoa\", or configure error monitoring, tracing, profiling, session replay, logging, or metrics for Apple applications. Supports SwiftUI and UIKit.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4818,4819,4820,4821,4822],{"name":4600,"slug":4601,"type":16},{"name":4603,"slug":4604,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},"2026-07-11T05:52:57.042493",{"slug":4825,"name":4825,"fn":4826,"description":4827,"org":4828,"tags":4829,"stars":27,"repoUrl":28,"updatedAt":4837},"sentry-dotnet-sdk","setup Sentry SDK for .NET","Full Sentry SDK setup for .NET. Use when asked to \"add Sentry to .NET\", \"install Sentry for C#\", or configure error monitoring, tracing, profiling, logging, or crons for ASP.NET Core, MAUI, WPF, WinForms, Blazor, Azure Functions, or any other .NET application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4830,4833,4834,4835,4836],{"name":4831,"slug":4832,"type":16},".NET","net",{"name":25,"slug":26,"type":16},{"name":14,"slug":15,"type":16},{"name":4779,"slug":4780,"type":16},{"name":9,"slug":8,"type":16},"2026-07-12T06:08:33.793148",{"slug":4839,"name":4839,"fn":4840,"description":4841,"org":4842,"tags":4843,"stars":27,"repoUrl":28,"updatedAt":4852},"sentry-elixir-sdk","setup Sentry SDK for Elixir","Full Sentry SDK setup for Elixir. Use when asked to \"add Sentry to Elixir\", \"install sentry for Elixir\", or configure error monitoring, tracing, logging, or crons for Elixir, Phoenix, or Plug applications. Supports Phoenix, Plug, LiveView, Oban, and Quantum.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4844,4847,4850,4851],{"name":4845,"slug":4846,"type":16},"Backend","backend",{"name":4848,"slug":4849,"type":16},"Elixir","elixir",{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},"2026-07-11T05:53:11.69581",{"slug":4854,"name":4854,"fn":4855,"description":4856,"org":4857,"tags":4858,"stars":27,"repoUrl":28,"updatedAt":4865},"sentry-fix-issues","fix production issues with Sentry","Find and fix issues from Sentry using MCP. Use when asked to fix Sentry errors, debug production issues, investigate exceptions, or resolve bugs reported in Sentry. Methodically analyzes stack traces, breadcrumbs, traces, and context to identify root causes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4859,4860,4863,4864],{"name":25,"slug":26,"type":16},{"name":4861,"slug":4862,"type":16},"Incident Response","incident-response",{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},"2026-07-12T06:08:35.550824"]