@danieljvdm/dev-kit 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/README.md +6 -6
  2. package/package.json +1 -1
  3. package/skill-sources.jsonc +2 -33
  4. package/skill-sources.lock.json +15 -117
  5. package/skills/animate/LICENSE +21 -0
  6. package/skills/animate/NOTICE +10 -0
  7. package/skills/animate/SKILL.md +34 -0
  8. package/skills/animate/references/gestures.md +27 -0
  9. package/skills/animate/references/glossary.md +136 -0
  10. package/skills/animate/references/implementation.md +22 -0
  11. package/skills/animate/references/opportunities.md +18 -0
  12. package/skills/animate/references/principles.md +48 -0
  13. package/skills/animate/references/review.md +19 -0
  14. package/skills/cloudflare-workers/LICENSE +202 -0
  15. package/skills/cloudflare-workers/NOTICE +9 -0
  16. package/skills/cloudflare-workers/SKILL.md +26 -0
  17. package/skills/cloudflare-workers/references/durable-objects.md +68 -0
  18. package/skills/cloudflare-workers/references/sandbox.md +48 -0
  19. package/skills/cloudflare-workers/references/workers.md +63 -0
  20. package/skills/cloudflare-workers/references/wrangler.md +56 -0
  21. package/skills/design-ui/LICENSE +21 -0
  22. package/skills/design-ui/NOTICE +8 -0
  23. package/skills/design-ui/SKILL.md +29 -0
  24. package/skills/design-ui/references/appearance.md +22 -0
  25. package/skills/design-ui/references/components.md +33 -0
  26. package/skills/design-ui/references/exploration.md +50 -0
  27. package/skills/design-ui/references/libraries.md +39 -0
  28. package/skills/design-ui/references/themes.md +23 -0
  29. package/skills/dev-kit/SKILL.md +19 -38
  30. package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
  31. package/skills/dev-kit/references/skills.md +2 -2
  32. package/skills/effect-development/SKILL.md +27 -0
  33. package/skills/effect-development/agents/openai.yaml +4 -0
  34. package/skills/effect-development/references/api/index.md +32 -0
  35. package/skills/effect-development/references/api/schema-codecs.md +15 -0
  36. package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
  37. package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
  38. package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
  39. package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
  40. package/skills/effect-development/references/atom/index.md +40 -0
  41. package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
  42. package/skills/effect-development/references/cli/index.md +39 -0
  43. package/skills/effect-development/references/setup.md +15 -0
  44. package/skills/open-pull-request/SKILL.md +10 -70
  45. package/skills/open-pull-request/references/evidence.md +22 -0
  46. package/skills/open-pull-request/references/explanation.md +21 -0
  47. package/skills/open-pull-request/references/publication.md +21 -0
  48. package/skills/sentry/LICENSE +202 -0
  49. package/skills/sentry/LICENSE-UPSTREAM +21 -0
  50. package/skills/sentry/NOTICE +14 -0
  51. package/skills/sentry/SKILL.md +33 -0
  52. package/skills/sentry/references/alert-payloads.md +105 -0
  53. package/skills/sentry/references/alerts.md +17 -0
  54. package/skills/sentry/references/artifacts.md +25 -0
  55. package/skills/sentry/references/auth-token.md +65 -0
  56. package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
  57. package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
  58. package/skills/sentry/references/concepts/crons.md +50 -0
  59. package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
  60. package/skills/sentry/references/concepts/errors.md +40 -0
  61. package/skills/sentry/references/concepts/logging.md +85 -0
  62. package/skills/sentry/references/concepts/metrics.md +49 -0
  63. package/skills/sentry/references/concepts/monitors.md +78 -0
  64. package/skills/sentry/references/concepts/profiling.md +38 -0
  65. package/skills/sentry/references/concepts/reduce-volume.md +49 -0
  66. package/skills/sentry/references/concepts/releases.md +43 -0
  67. package/skills/sentry/references/concepts/session-replay.md +35 -0
  68. package/skills/sentry/references/concepts/tracing.md +54 -0
  69. package/skills/sentry/references/concepts/user-feedback.md +36 -0
  70. package/skills/sentry/references/debug-artifacts/android.md +68 -0
  71. package/skills/sentry/references/debug-artifacts/apple.md +96 -0
  72. package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
  73. package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
  74. package/skills/sentry/references/debug-artifacts/index.md +75 -0
  75. package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
  76. package/skills/sentry/references/debug-artifacts/matching.md +73 -0
  77. package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
  78. package/skills/sentry/references/first-error-setup.md +25 -0
  79. package/skills/sentry/references/instrumentation.md +30 -0
  80. package/skills/sentry/references/issues.md +32 -0
  81. package/skills/sentry/references/new-project.md +17 -0
  82. package/skills/sentry/references/otel-exporter.md +30 -0
  83. package/skills/sentry/references/release-workflow.md +31 -0
  84. package/skills/sentry/references/releases/ci-pipeline.md +214 -0
  85. package/skills/sentry/references/releases/index.md +93 -0
  86. package/skills/sentry/references/releases/suspect-commits.md +155 -0
  87. package/skills/sentry/references/releases/tagging.md +131 -0
  88. package/skills/sentry/references/releases/troubleshooting.md +67 -0
  89. package/skills/sentry/references/sdks/android/crons.md +305 -0
  90. package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
  91. package/skills/sentry/references/sdks/android/index.md +748 -0
  92. package/skills/sentry/references/sdks/android/integrations.md +48 -0
  93. package/skills/sentry/references/sdks/android/logging.md +374 -0
  94. package/skills/sentry/references/sdks/android/metrics.md +288 -0
  95. package/skills/sentry/references/sdks/android/profiling.md +397 -0
  96. package/skills/sentry/references/sdks/android/session-replay.md +406 -0
  97. package/skills/sentry/references/sdks/android/tracing.md +861 -0
  98. package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
  99. package/skills/sentry/references/sdks/browser/index.md +714 -0
  100. package/skills/sentry/references/sdks/browser/logging.md +315 -0
  101. package/skills/sentry/references/sdks/browser/profiling.md +236 -0
  102. package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
  103. package/skills/sentry/references/sdks/browser/tracing.md +561 -0
  104. package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
  105. package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
  106. package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
  107. package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
  108. package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
  109. package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
  110. package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
  111. package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
  112. package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
  113. package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
  114. package/skills/sentry/references/sdks/cocoa/index.md +497 -0
  115. package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
  116. package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
  117. package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
  118. package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
  119. package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
  120. package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
  121. package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
  122. package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
  123. package/skills/sentry/references/sdks/dotnet/index.md +614 -0
  124. package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
  125. package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
  126. package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
  127. package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
  128. package/skills/sentry/references/sdks/elixir/crons.md +371 -0
  129. package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
  130. package/skills/sentry/references/sdks/elixir/index.md +383 -0
  131. package/skills/sentry/references/sdks/elixir/logging.md +239 -0
  132. package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
  133. package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
  134. package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
  135. package/skills/sentry/references/sdks/flutter/index.md +728 -0
  136. package/skills/sentry/references/sdks/flutter/logging.md +387 -0
  137. package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
  138. package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
  139. package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
  140. package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
  141. package/skills/sentry/references/sdks/go/crons.md +270 -0
  142. package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
  143. package/skills/sentry/references/sdks/go/index.md +324 -0
  144. package/skills/sentry/references/sdks/go/logging.md +354 -0
  145. package/skills/sentry/references/sdks/go/metrics.md +273 -0
  146. package/skills/sentry/references/sdks/go/profiling.md +46 -0
  147. package/skills/sentry/references/sdks/go/tracing.md +366 -0
  148. package/skills/sentry/references/sdks/index.md +41 -0
  149. package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
  150. package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
  151. package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
  152. package/skills/sentry/references/sdks/nestjs/index.md +699 -0
  153. package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
  154. package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
  155. package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
  156. package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
  157. package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
  158. package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
  159. package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
  160. package/skills/sentry/references/sdks/nextjs/index.md +491 -0
  161. package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
  162. package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
  163. package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
  164. package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
  165. package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
  166. package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
  167. package/skills/sentry/references/sdks/node/crons.md +432 -0
  168. package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
  169. package/skills/sentry/references/sdks/node/index.md +942 -0
  170. package/skills/sentry/references/sdks/node/logging.md +380 -0
  171. package/skills/sentry/references/sdks/node/metrics.md +278 -0
  172. package/skills/sentry/references/sdks/node/profiling.md +373 -0
  173. package/skills/sentry/references/sdks/node/tracing.md +878 -0
  174. package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
  175. package/skills/sentry/references/sdks/php/crons.md +265 -0
  176. package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
  177. package/skills/sentry/references/sdks/php/index.md +362 -0
  178. package/skills/sentry/references/sdks/php/laravel.md +542 -0
  179. package/skills/sentry/references/sdks/php/logging.md +242 -0
  180. package/skills/sentry/references/sdks/php/metrics.md +193 -0
  181. package/skills/sentry/references/sdks/php/profiling.md +115 -0
  182. package/skills/sentry/references/sdks/php/symfony.md +552 -0
  183. package/skills/sentry/references/sdks/php/tracing.md +516 -0
  184. package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
  185. package/skills/sentry/references/sdks/python/crons.md +218 -0
  186. package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
  187. package/skills/sentry/references/sdks/python/index.md +361 -0
  188. package/skills/sentry/references/sdks/python/logging.md +234 -0
  189. package/skills/sentry/references/sdks/python/metrics.md +154 -0
  190. package/skills/sentry/references/sdks/python/profiling.md +120 -0
  191. package/skills/sentry/references/sdks/python/tracing.md +364 -0
  192. package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
  193. package/skills/sentry/references/sdks/react/index.md +492 -0
  194. package/skills/sentry/references/sdks/react/logging.md +364 -0
  195. package/skills/sentry/references/sdks/react/profiling.md +322 -0
  196. package/skills/sentry/references/sdks/react/react-features.md +1272 -0
  197. package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
  198. package/skills/sentry/references/sdks/react/tracing.md +1415 -0
  199. package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
  200. package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
  201. package/skills/sentry/references/sdks/react-native/index.md +1030 -0
  202. package/skills/sentry/references/sdks/react-native/logging.md +444 -0
  203. package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
  204. package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
  205. package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
  206. package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
  207. package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
  208. package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
  209. package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
  210. package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
  211. package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
  212. package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
  213. package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
  214. package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
  215. package/skills/sentry/references/sdks/ruby/crons.md +184 -0
  216. package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
  217. package/skills/sentry/references/sdks/ruby/index.md +297 -0
  218. package/skills/sentry/references/sdks/ruby/logging.md +168 -0
  219. package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
  220. package/skills/sentry/references/sdks/ruby/migration.md +321 -0
  221. package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
  222. package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
  223. package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
  224. package/skills/sentry/references/sdks/svelte/index.md +467 -0
  225. package/skills/sentry/references/sdks/svelte/logging.md +344 -0
  226. package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
  227. package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
  228. package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
  229. package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
  230. package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
  231. package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
  232. package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
  233. package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
  234. package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
  235. package/skills/sentry/references/search-query-language.md +226 -0
  236. package/skills/sentry/references/semantics/angular.md +7 -0
  237. package/skills/sentry/references/semantics/app.md +28 -0
  238. package/skills/sentry/references/semantics/art.md +17 -0
  239. package/skills/sentry/references/semantics/aws.md +43 -0
  240. package/skills/sentry/references/semantics/browser.md +34 -0
  241. package/skills/sentry/references/semantics/cache.md +12 -0
  242. package/skills/sentry/references/semantics/client.md +8 -0
  243. package/skills/sentry/references/semantics/cloud.md +12 -0
  244. package/skills/sentry/references/semantics/cloudflare.md +23 -0
  245. package/skills/sentry/references/semantics/code.md +11 -0
  246. package/skills/sentry/references/semantics/culture.md +11 -0
  247. package/skills/sentry/references/semantics/db.md +21 -0
  248. package/skills/sentry/references/semantics/device.md +43 -0
  249. package/skills/sentry/references/semantics/error.md +7 -0
  250. package/skills/sentry/references/semantics/event.md +8 -0
  251. package/skills/sentry/references/semantics/exception.md +10 -0
  252. package/skills/sentry/references/semantics/faas.md +19 -0
  253. package/skills/sentry/references/semantics/file.md +8 -0
  254. package/skills/sentry/references/semantics/flag.md +7 -0
  255. package/skills/sentry/references/semantics/gcp.md +16 -0
  256. package/skills/sentry/references/semantics/gen_ai.md +53 -0
  257. package/skills/sentry/references/semantics/general.md +11 -0
  258. package/skills/sentry/references/semantics/graphql.md +9 -0
  259. package/skills/sentry/references/semantics/grpc.md +19 -0
  260. package/skills/sentry/references/semantics/http.md +34 -0
  261. package/skills/sentry/references/semantics/index.md +63 -0
  262. package/skills/sentry/references/semantics/jsonrpc.md +8 -0
  263. package/skills/sentry/references/semantics/jvm.md +12 -0
  264. package/skills/sentry/references/semantics/koa.md +7 -0
  265. package/skills/sentry/references/semantics/logger.md +7 -0
  266. package/skills/sentry/references/semantics/mcp.md +37 -0
  267. package/skills/sentry/references/semantics/mdc.md +7 -0
  268. package/skills/sentry/references/semantics/messaging.md +23 -0
  269. package/skills/sentry/references/semantics/middleware.md +7 -0
  270. package/skills/sentry/references/semantics/navigation.md +9 -0
  271. package/skills/sentry/references/semantics/nel.md +11 -0
  272. package/skills/sentry/references/semantics/network.md +17 -0
  273. package/skills/sentry/references/semantics/os.md +15 -0
  274. package/skills/sentry/references/semantics/otel.md +10 -0
  275. package/skills/sentry/references/semantics/params.md +7 -0
  276. package/skills/sentry/references/semantics/process.md +14 -0
  277. package/skills/sentry/references/semantics/react.md +7 -0
  278. package/skills/sentry/references/semantics/remix.md +7 -0
  279. package/skills/sentry/references/semantics/resource.md +7 -0
  280. package/skills/sentry/references/semantics/rpc.md +10 -0
  281. package/skills/sentry/references/semantics/score.md +10 -0
  282. package/skills/sentry/references/semantics/sentry.md +69 -0
  283. package/skills/sentry/references/semantics/server.md +8 -0
  284. package/skills/sentry/references/semantics/service.md +8 -0
  285. package/skills/sentry/references/semantics/session.md +7 -0
  286. package/skills/sentry/references/semantics/state.md +7 -0
  287. package/skills/sentry/references/semantics/thread.md +8 -0
  288. package/skills/sentry/references/semantics/timber.md +7 -0
  289. package/skills/sentry/references/semantics/trpc.md +8 -0
  290. package/skills/sentry/references/semantics/ui.md +18 -0
  291. package/skills/sentry/references/semantics/url.md +15 -0
  292. package/skills/sentry/references/semantics/user.md +17 -0
  293. package/skills/sentry/references/semantics/user_agent.md +7 -0
  294. package/skills/sentry/references/semantics/vercel.md +42 -0
  295. package/skills/sentry/references/setup-verification.md +39 -0
  296. package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
  297. package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
  298. package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
  299. package/skills/sentry/references/snapshots/index.md +19 -0
  300. package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
  301. package/skills/sentry/references/snapshots/snapshots.md +123 -0
  302. package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
  303. package/skills/testing/LICENSE +21 -0
  304. package/skills/testing/NOTICE +7 -0
  305. package/skills/testing/SKILL.md +13 -19
  306. package/skills/testing/agents/openai.yaml +1 -2
  307. package/skills/testing/references/selection.md +23 -0
  308. package/skills/testing/references/tdd.md +19 -0
  309. package/skills/testing/references/test-design.md +17 -0
  310. package/src/catalog.ts +1 -7
  311. package/skills/build-effect-apis/SKILL.md +0 -81
  312. package/skills/build-effect-apis/agents/openai.yaml +0 -4
  313. package/skills/build-effect-clis/SKILL.md +0 -92
  314. package/skills/build-effect-clis/agents/openai.yaml +0 -4
  315. package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
  316. package/skills/effect-atom-state/SKILL.md +0 -97
  317. package/skills/effect-atom-state/agents/openai.yaml +0 -4
  318. package/skills/effect-ts/SKILL.md +0 -35
  319. package/skills/effect-ts/agents/openai.yaml +0 -4
  320. /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
  321. /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
  322. /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
  323. /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
  324. /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
  325. /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
  326. /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
  327. /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
  328. /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
  329. /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
@@ -0,0 +1,383 @@
1
+ # Sentry Elixir SDK
2
+
3
+ Opinionated wizard that scans your Elixir project and guides you through complete Sentry
4
+ setup.
5
+
6
+ > **Note:** SDK versions and APIs below reflect Sentry docs at time of writing (sentry
7
+ > v13.2.0, requires Elixir ~> 1.13). Always verify against
8
+ > [docs.sentry.io/platforms/elixir/](https://docs.sentry.io/platforms/elixir/) before
9
+ > implementing.
10
+
11
+ ---
12
+
13
+ ## Phase 1: Detect
14
+
15
+ Run these commands to understand the project before making any recommendations:
16
+
17
+ ```bash
18
+ # Check existing Sentry dependency
19
+ grep -i sentry mix.exs 2>/dev/null
20
+
21
+ # Detect Elixir version
22
+ cat .tool-versions 2>/dev/null | grep elixir
23
+ grep "elixir:" mix.exs 2>/dev/null
24
+
25
+ # Detect Phoenix or Plug
26
+ grep -E '"phoenix"|"plug"' mix.exs 2>/dev/null
27
+
28
+ # Detect Phoenix LiveView
29
+ grep "phoenix_live_view" mix.exs 2>/dev/null
30
+
31
+ # Detect Oban (job queue / crons)
32
+ grep "oban" mix.exs 2>/dev/null
33
+
34
+ # Detect Quantum (cron scheduler)
35
+ grep "quantum" mix.exs 2>/dev/null
36
+
37
+ # Detect OpenTelemetry usage
38
+ grep "opentelemetry" mix.exs 2>/dev/null
39
+
40
+ # Check for companion frontend
41
+ ls assets/ frontend/ web/ client/ 2>/dev/null
42
+ ```
43
+
44
+ **What to note:**
45
+
46
+ | Signal | Impact |
47
+ | ------------------------------ | -------------------------------------------------------------------------------- |
48
+ | `sentry` already in `mix.exs`? | Skip install; go to Phase 2 (configure features) |
49
+ | Phoenix detected? | Add `Sentry.PlugCapture`, `Sentry.PlugContext`, optionally `Sentry.LiveViewHook` |
50
+ | LiveView detected? | Add `Sentry.LiveViewHook` to the `live_view` macro in `my_app_web.ex` |
51
+ | Oban detected? | Recommend Crons + error capture via Oban integration |
52
+ | Quantum detected? | Recommend Crons via Quantum integration |
53
+ | OpenTelemetry already present? | Tracing setup only needs `Sentry.OpenTelemetry.*` config |
54
+ | Frontend directory found? | Trigger Phase 4 cross-link suggestion |
55
+
56
+ ---
57
+
58
+ ## Phase 2: Recommend
59
+
60
+ Based on what you found, present a concrete recommendation.
61
+ Don’t ask open-ended questions — lead with a proposal:
62
+
63
+ **Recommended (core coverage):**
64
+
65
+ - ✅ **Error Monitoring** — always; captures exceptions and crash reports
66
+ - ✅ **Logging** — `Sentry.LoggerHandler` forwards crash reports and error logs to Sentry
67
+ - ✅ **Tracing** — if Phoenix, Plug, or Ecto detected (via OpenTelemetry)
68
+
69
+ **Optional (enhanced observability):**
70
+
71
+ - ⚡ **Crons** — detect silent failures in scheduled jobs (Oban, Quantum, or manual
72
+ GenServer)
73
+ - ⚡ **Sentry Logs** — forward structured logs to Sentry Logs Protocol (sentry v12.0.0+)
74
+
75
+ **Recommendation logic:**
76
+
77
+ | Feature | Recommend when … |
78
+ | ---------------- | -------------------------------------------------------------------------------------------- |
79
+ | Error Monitoring | **Always** — non-negotiable baseline |
80
+ | Logging | **Always** — `LoggerHandler` captures crashes that aren’t explicit `capture_exception` calls |
81
+ | Tracing | Phoenix, Plug, Ecto, or OpenTelemetry imports detected |
82
+ | Crons | Oban, Quantum, or periodic `GenServer`/`Task` patterns detected |
83
+ | Sentry Logs | sentry v12.0.0+ in use and structured log search is needed |
84
+
85
+ Propose: _“I recommend setting up Error Monitoring + Logging
86
+ [+ Tracing if Phoenix/Ecto detected]. Want me to also add Crons or Sentry Logs?”_
87
+
88
+ ---
89
+
90
+ ## Phase 3: Guide
91
+
92
+ ### Option 1: Igniter Installer (Recommended)
93
+
94
+ > **You need to run this yourself** — the Igniter installer requires interactive
95
+ > terminal input that the agent can’t handle.
96
+ > Copy-paste into your terminal:
97
+ >
98
+ > ```bash
99
+ > mix igniter.install sentry
100
+ > ```
101
+ >
102
+ > Available since sentry v11.0.0. It auto-configures `config/config.exs`,
103
+ > `config/prod.exs`, `config/runtime.exs`, and `lib/my_app/application.ex`.
104
+ >
105
+ > **Once it finishes, come back and skip to [Verification](#verification).**
106
+
107
+ If the user skips the Igniter installer, proceed with Option 2 (Manual Setup) below.
108
+
109
+ ---
110
+
111
+ ### Option 2: Manual Setup
112
+
113
+ #### Install
114
+
115
+ Add to `mix.exs` dependencies:
116
+
117
+ ```elixir
118
+ # mix.exs
119
+ defp deps do
120
+ [
121
+ {:sentry, "~> 13.0"},
122
+ {:finch, "~> 0.21"}
123
+ # Add jason if using Elixir < 1.18:
124
+ # {:jason, "~> 1.4"},
125
+ ]
126
+ end
127
+ ```
128
+
129
+ ```bash
130
+ mix deps.get
131
+ ```
132
+
133
+ #### Configure
134
+
135
+ ```elixir
136
+ # config/config.exs
137
+ config :sentry,
138
+ dsn: System.get_env("SENTRY_DSN"),
139
+ environment_name: config_env(),
140
+ enable_source_code_context: true,
141
+ root_source_code_paths: [File.cwd!()],
142
+ in_app_otp_apps: [:my_app]
143
+ ```
144
+
145
+ For runtime configuration (recommended for DSN and release):
146
+
147
+ ```elixir
148
+ # config/runtime.exs
149
+ import Config
150
+
151
+ config :sentry,
152
+ dsn: System.fetch_env!("SENTRY_DSN"),
153
+ release: System.get_env("SENTRY_RELEASE", "my-app@#{Application.spec(:my_app, :vsn)}")
154
+ ```
155
+
156
+ #### Quick Start — Recommended Init Config
157
+
158
+ This config enables the most features with sensible defaults:
159
+
160
+ ```elixir
161
+ # config/config.exs
162
+ config :sentry,
163
+ dsn: System.get_env("SENTRY_DSN"),
164
+ environment_name: config_env(),
165
+ enable_source_code_context: true,
166
+ root_source_code_paths: [File.cwd!()],
167
+ in_app_otp_apps: [:my_app]
168
+
169
+ # Logger handler — captures crash reports. Defined under your OTP app's :logger
170
+ # key so that Logger.add_handlers(:my_app) (below) actually loads it. Handlers
171
+ # nested under `config :sentry` would be ignored by add_handlers/1.
172
+ config :my_app, :logger, [
173
+ {:handler, :sentry_handler, Sentry.LoggerHandler, %{
174
+ config: %{
175
+ metadata: [:request_id],
176
+ capture_log_messages: true,
177
+ level: :error
178
+ }
179
+ }}
180
+ ]
181
+ ```
182
+
183
+ #### Activate Logger Handler
184
+
185
+ Add `Logger.add_handlers/1` in `Application.start/2`:
186
+
187
+ ```elixir
188
+ # lib/my_app/application.ex
189
+ def start(_type, _args) do
190
+ Logger.add_handlers(:my_app) # activates the :sentry_handler configured above
191
+
192
+ children = [
193
+ MyAppWeb.Endpoint
194
+ # ... other children
195
+ ]
196
+
197
+ Supervisor.start_link(children, strategy: :one_for_one)
198
+ end
199
+ ```
200
+
201
+ #### Phoenix Integration
202
+
203
+ **`lib/my_app_web/endpoint.ex`**
204
+
205
+ ```elixir
206
+ defmodule MyAppWeb.Endpoint do
207
+ use Sentry.PlugCapture # Add ABOVE use Phoenix.Endpoint (Cowboy adapter only)
208
+ use Phoenix.Endpoint, otp_app: :my_app
209
+
210
+ # ...
211
+
212
+ plug Plug.Parsers,
213
+ parsers: [:urlencoded, :multipart, :json],
214
+ pass: ["*/*"],
215
+ json_decoder: Phoenix.json_library()
216
+
217
+ plug Sentry.PlugContext # Add BELOW Plug.Parsers
218
+ # ...
219
+ end
220
+ ```
221
+
222
+ > **Note:** `Sentry.PlugCapture` is only needed for the **Cowboy** adapter.
223
+ > Phoenix 1.7+ defaults to **Bandit**, where `PlugCapture` is harmless but unnecessary.
224
+ > `Sentry.PlugContext` is always recommended — it enriches events with HTTP request
225
+ > data.
226
+
227
+ **LiveView errors — `lib/my_app_web.ex`**
228
+
229
+ ```elixir
230
+ def live_view do
231
+ quote do
232
+ use Phoenix.LiveView
233
+
234
+ on_mount Sentry.LiveViewHook # captures errors in mount/handle_event/handle_info
235
+ end
236
+ end
237
+ ```
238
+
239
+ #### Plain Plug Application
240
+
241
+ ```elixir
242
+ defmodule MyApp.Router do
243
+ use Plug.Router
244
+ use Sentry.PlugCapture # Cowboy only
245
+
246
+ plug Plug.Parsers, parsers: [:urlencoded, :multipart]
247
+ plug Sentry.PlugContext
248
+ # ...
249
+ end
250
+ ```
251
+
252
+ ### For Each Agreed Feature
253
+
254
+ Walk through features one at a time.
255
+ Load the reference file for each, follow its steps, and verify before moving to the
256
+ next:
257
+
258
+ | Feature | Reference file | Load when … |
259
+ | ---------------- | ----------------------- | ---------------------------------------- |
260
+ | Error Monitoring | `./error-monitoring.md` | Always (baseline) |
261
+ | Tracing | `./tracing.md` | Phoenix / Ecto / OpenTelemetry detected |
262
+ | Logging | `./logging.md` | `LoggerHandler` or Sentry Logs setup |
263
+ | Crons | `./crons.md` | Oban, Quantum, or periodic jobs detected |
264
+
265
+ For each feature: `Read ./<feature>.md`, follow steps exactly, verify it works.
266
+
267
+ ---
268
+
269
+ ## Configuration Reference
270
+
271
+ ### Key Config Options
272
+
273
+ | Option | Type | Default | Purpose |
274
+ | ----------------------------- | ----------------------------------- | --------------------------- | ---------------------------------------------------------------------------------------------------------- |
275
+ | `:dsn` | `string \| nil` | `nil` | SDK disabled if nil; env: `SENTRY_DSN` |
276
+ | `:environment_name` | `atom \| string` | `"production"` | e.g., `:prod`; env: `SENTRY_ENVIRONMENT` |
277
+ | `:release` | `string \| nil` | `nil` | e.g., `"my-app@1.0.0"`; env: `SENTRY_RELEASE` |
278
+ | `:sample_rate` | `float` | `1.0` | Error event sample rate (0.0–1.0) |
279
+ | `:enable_source_code_context` | `boolean` | `false` | Include source lines around errors |
280
+ | `:root_source_code_paths` | `[path]` | `[]` | Required when source context is enabled |
281
+ | `:in_app_otp_apps` | `[atom]` | `[]` | OTP apps whose modules are “in-app” in stacktraces |
282
+ | `:before_send` | `(event -> event \| nil) \| {m, f}` | `nil` | Hook to mutate or drop error events |
283
+ | `:after_send_event` | `(event, result -> any) \| {m, f}` | `nil` | Hook called after event is sent |
284
+ | `:filter` | `module` | `Sentry.DefaultEventFilter` | Module implementing `Sentry.EventFilter` |
285
+ | `:max_breadcrumbs` | `integer` | `100` | Max breadcrumbs per process |
286
+ | `:max_stacktrace_arg_length` | `integer` | `10000` | Max length (in graphemes) of each inspected function argument in stacktrace vars (v13.2.0+) |
287
+ | `:dedup_events` | `boolean` | `true` | Deduplicate identical events within ~30 seconds |
288
+ | `:tags` | `map` | `%{}` | Global tags sent with every event |
289
+ | `:traces_sample_rate` | `float \| nil` | `nil` | Non-nil enables tracing (requires OTel setup) |
290
+ | `:traces_sampler` | `fn \| {m, f} \| nil` | `nil` | Custom per-transaction sampling |
291
+ | `:enable_logs` | `boolean` | `false` | Enable Sentry Logs Protocol (v12.0.0+) |
292
+ | `:scrubber` | `keyword` | `[]` | Scrubber config (v13.1.1+); keys: `:conn_private_allow_list` (list of atoms kept from `Plug.Conn.private`) |
293
+ | `:test_mode` | `boolean` | `false` | Capture events in-memory for testing |
294
+
295
+ ### Default PII Guidance
296
+
297
+ Most Sentry SDKs expose a send-default-PII option.
298
+ As of sentry v12, the Elixir SDK does not expose a `send_default_pii` config option in
299
+ its documented option list or current config schema, so do **not** add a non-existent
300
+ option. For richer user context, use `Sentry.PlugContext` and explicitly set allowed
301
+ fields with `Sentry.Context.set_user_context/1`, then scrub with `:before_send` if
302
+ needed. If a future Elixir SDK release adds `send_default_pii`, recommend setting it.
303
+
304
+ **Automatic PII Scrubbing:** As of v13.1.0, stacktrace frame variables and
305
+ `FunctionClauseError`/`Phoenix.ActionClauseError` arguments are automatically scrubbed
306
+ for sensitive data using the same scrubber rules as HTTP request data.
307
+ Use `:scrubber` config to customize which `Plug.Conn.private` keys are retained.
308
+
309
+ ### Environment Variables
310
+
311
+ | Variable | Maps to | Purpose |
312
+ | -------------------- | ------------------- | ---------------------------------- |
313
+ | `SENTRY_DSN` | `:dsn` | Data Source Name |
314
+ | `SENTRY_RELEASE` | `:release` | App version (e.g., `my-app@1.0.0`) |
315
+ | `SENTRY_ENVIRONMENT` | `:environment_name` | Deployment environment |
316
+
317
+ ---
318
+
319
+ ## Verification
320
+
321
+ Test that Sentry is receiving events:
322
+
323
+ ```bash
324
+ # Send a test event from your project
325
+ MIX_ENV=dev mix sentry.send_test_event
326
+ ```
327
+
328
+ Or add a temporary call in a controller action:
329
+
330
+ ```elixir
331
+ # Temporary test — remove after confirming
332
+ def index(conn, _params) do
333
+ Sentry.capture_message("Sentry Elixir SDK test event")
334
+ text(conn, "sent")
335
+ end
336
+ ```
337
+
338
+ Check the Sentry dashboard within a few seconds.
339
+ If nothing appears:
340
+
341
+ 1. Set `config :sentry, log_level: :debug` for verbose SDK output
342
+ 2. Verify `SENTRY_DSN` is set and the project exists
343
+ 3. Confirm `:environment_name` is not set to a value Sentry filters in your alert rules
344
+
345
+ ---
346
+
347
+ ## Phase 4: Cross-Link
348
+
349
+ After completing Elixir setup, check for a companion frontend missing Sentry coverage:
350
+
351
+ ```bash
352
+ ls assets/ frontend/ web/ client/ ui/ 2>/dev/null
353
+ cat assets/package.json frontend/package.json 2>/dev/null | grep -E '"react"|"svelte"|"vue"|"next"'
354
+ ```
355
+
356
+ If a frontend directory exists without Sentry configured, suggest the matching skill:
357
+
358
+ | Frontend detected | Suggest skill |
359
+ | ------------------ | -------------------------------------------------------------------------------------------------------------- |
360
+ | React / Next.js | [`react`](../react/index.md) or [`nextjs`](../nextjs/index.md) |
361
+ | Svelte / SvelteKit | [`svelte`](../svelte/index.md) |
362
+ | Vue | See [docs.sentry.io/platforms/javascript/guides/vue/](https://docs.sentry.io/platforms/javascript/guides/vue/) |
363
+ | Other JS/TS | [`browser`](../browser/index.md) |
364
+
365
+ Connecting Phoenix backend and JavaScript frontend with linked Sentry projects enables
366
+ **distributed tracing** — stack traces that span the browser, Phoenix HTTP server, and
367
+ downstream services in a single trace view.
368
+
369
+ ---
370
+
371
+ ## Troubleshooting
372
+
373
+ | Issue | Solution |
374
+ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
375
+ | Events not appearing | Verify `SENTRY_DSN` is set; run `mix sentry.send_test_event`; set `log_level: :debug` |
376
+ | Missing stack traces on captured exceptions | Pass `stacktrace: __STACKTRACE__` in the `rescue` block: `Sentry.capture_exception(e, stacktrace: __STACKTRACE__)` |
377
+ | `PlugCapture` not working on Bandit | `Sentry.PlugCapture` is Cowboy-only; with Bandit errors surface via `LoggerHandler` |
378
+ | Source code context missing in production | Run `mix sentry.package_source_code` before building your OTP release |
379
+ | Context not appearing on async events | `Sentry.Context.*` is process-scoped; pass values explicitly or propagate Logger metadata across processes |
380
+ | Oban integration not reporting crons | Requires Oban v2.17.6+ or Oban Pro; cron jobs must have `"cron" => true` in job meta |
381
+ | Duplicate events from Cowboy/Bandit crashes | Set `excluded_domains: [:cowboy, :bandit]` in `LoggerHandler` config (both excluded by default as of v13.1.0) |
382
+ | `finch` not starting | Ensure `{:finch, "~> 0.21"}` is in deps; Finch is the default HTTP client since v12.0.0 |
383
+ | JSON encoding error | Add `{:jason, "~> 1.4"}` and set `json_library: Jason` for Elixir < 1.18 |
@@ -0,0 +1,239 @@
1
+ # Logging — Sentry Elixir SDK
2
+
3
+ > Minimum SDK: `sentry` v9.0.0+ for `Sentry.LoggerHandler`; v12.0.0+ for Sentry Logs
4
+ > Protocol
5
+
6
+ The Elixir SDK provides two independent logging mechanisms:
7
+
8
+ 1. **`Sentry.LoggerHandler`** — Erlang `:logger` handler that forwards crash reports and
9
+ error log messages from your app to Sentry as _error events_. This is the primary way
10
+ to catch errors that weren’t explicitly passed to `capture_exception/2`.
11
+
12
+ 2. **Sentry Logs Protocol** (v12.0.0+) — Forwards structured log entries to Sentry’s
13
+ Logs product, where they appear alongside errors and traces.
14
+
15
+ ---
16
+
17
+ ## Sentry.LoggerHandler
18
+
19
+ ### Configuration
20
+
21
+ The recommended setup uses the `:logger` key in your app’s config and activates handlers
22
+ in `Application.start/2`.
23
+
24
+ **Step 1: Define the handler in config**
25
+
26
+ ```elixir
27
+ # config/config.exs
28
+ config :my_app, :logger, [
29
+ {:handler, :sentry_handler, Sentry.LoggerHandler, %{
30
+ config: %{
31
+ metadata: [:request_id, :user_id], # Logger metadata keys to include as extra context
32
+ capture_log_messages: true, # Send all :error messages, not just crash reports
33
+ level: :error # Minimum log level (default: :error)
34
+ }
35
+ }}
36
+ ]
37
+ ```
38
+
39
+ **Step 2: Activate in Application.start/2**
40
+
41
+ ```elixir
42
+ # lib/my_app/application.ex
43
+ def start(_type, _args) do
44
+ Logger.add_handlers(:my_app) # activates all handlers defined in config :my_app, :logger
45
+
46
+ children = [
47
+ MyAppWeb.Endpoint
48
+ # ... other children
49
+ ]
50
+
51
+ Supervisor.start_link(children, strategy: :one_for_one)
52
+ end
53
+ ```
54
+
55
+ **Alternative: Add handler directly in Application.start/2**
56
+
57
+ ```elixir
58
+ def start(_type, _args) do
59
+ :logger.add_handler(:sentry_handler, Sentry.LoggerHandler, %{
60
+ config: %{
61
+ metadata: [:request_id],
62
+ capture_log_messages: true,
63
+ level: :error
64
+ }
65
+ })
66
+
67
+ Supervisor.start_link(children, strategy: :one_for_one)
68
+ end
69
+ ```
70
+
71
+ ### LoggerHandler Configuration Options
72
+
73
+ | Option | Type | Default | Description |
74
+ | ----------------------- | ------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------- |
75
+ | `:level` | `Logger.level \| nil` | `:error` | Minimum log level to forward to Sentry |
76
+ | `:excluded_domains` | `[atom]` | `[:cowboy]` | Domains to skip (cowboy excluded by default to avoid double-reporting with `PlugCapture`) |
77
+ | `:metadata` | `[atom] \| :all` | `[]` | Logger metadata keys to include as extra context on the Sentry event |
78
+ | `:tags_from_metadata` | `[atom]` | `[]` | Metadata keys to promote to Sentry tags (searchable). Since v10.9.0 |
79
+ | `:capture_log_messages` | `boolean` | `false` | When `true`, all `:error`+ log messages are sent; when `false`, only crash reports (supervisor crashes, process exits) are sent |
80
+ | `:rate_limiting` | `[max_events: integer, interval: integer] \| nil` | `nil` | Rate limit; e.g., `[max_events: 10, interval: 1_000]`. Since v10.5.0 |
81
+ | `:sync_threshold` | `non_neg_integer \| nil` | `100` | Queue depth before switching to sync mode. Since v10.6.0 |
82
+ | `:discard_threshold` | `non_neg_integer \| nil` | `nil` | Queue depth above which events are dropped (cannot combine with `:sync_threshold`). Since v10.9.0 |
83
+
84
+ ### Capturing specific log levels only
85
+
86
+ ```elixir
87
+ config :my_app, :logger, [
88
+ {:handler, :sentry_handler, Sentry.LoggerHandler, %{
89
+ config: %{
90
+ level: :warning, # :debug | :info | :warning | :error | :critical
91
+ capture_log_messages: true,
92
+ metadata: :all # include all Logger metadata
93
+ }
94
+ }}
95
+ ]
96
+ ```
97
+
98
+ ### Rate limiting
99
+
100
+ Prevent log storms from flooding Sentry:
101
+
102
+ ```elixir
103
+ config :my_app, :logger, [
104
+ {:handler, :sentry_handler, Sentry.LoggerHandler, %{
105
+ config: %{
106
+ capture_log_messages: true,
107
+ level: :error,
108
+ rate_limiting: [max_events: 20, interval: 60_000] # max 20 events per minute
109
+ }
110
+ }}
111
+ ]
112
+ ```
113
+
114
+ ### Promoting metadata to Sentry tags
115
+
116
+ Tags are indexed and searchable in Sentry.
117
+ Promote high-value metadata keys:
118
+
119
+ ```elixir
120
+ config :my_app, :logger, [
121
+ {:handler, :sentry_handler, Sentry.LoggerHandler, %{
122
+ config: %{
123
+ metadata: [:request_id, :user_id, :region],
124
+ tags_from_metadata: [:region], # "region" becomes a searchable Sentry tag
125
+ capture_log_messages: true,
126
+ level: :error
127
+ }
128
+ }}
129
+ ]
130
+ ```
131
+
132
+ ### LoggerBackend (legacy)
133
+
134
+ `Sentry.LoggerBackend` is the older Elixir `Logger` backend.
135
+ Prefer `LoggerHandler` for new projects.
136
+ `LoggerBackend` will eventually be deprecated.
137
+
138
+ ```elixir
139
+ # lib/my_app/application.ex
140
+ def start(_type, _args) do
141
+ Logger.add_backend(Sentry.LoggerBackend)
142
+ # ...
143
+ end
144
+
145
+ # config/config.exs
146
+ config :logger, Sentry.LoggerBackend,
147
+ level: :warning,
148
+ excluded_domains: [],
149
+ metadata: [:foo_bar],
150
+ capture_log_messages: true
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Sentry Logs Protocol (since v12.0.0)
156
+
157
+ The Sentry Logs feature sends structured log entries to Sentry’s Logs product — separate
158
+ from error events. This enables log search, log-to-trace correlation, and dashboards
159
+ alongside your error data.
160
+
161
+ ### Enable
162
+
163
+ ```elixir
164
+ # config/config.exs
165
+ config :sentry,
166
+ enable_logs: true, # auto-attaches a TelemetryProcessor-backed LoggerHandler
167
+ logs: [
168
+ level: :info, # minimum log level (default: :info)
169
+ metadata: [:request_id, :user_id], # metadata keys to include as log attributes
170
+ excluded_domains: [:cowboy, :ecto_sql] # domains to skip
171
+ ]
172
+ ```
173
+
174
+ `enable_logs: true` automatically wires up a Logger handler that captures log entries
175
+ and forwards them to the Sentry Logs Protocol endpoint via the `TelemetryProcessor`.
176
+
177
+ ### Filter logs before sending
178
+
179
+ ```elixir
180
+ config :sentry,
181
+ enable_logs: true,
182
+ before_send_log: fn log_event ->
183
+ # Return nil to drop the log; return log_event to send it
184
+ if log_event.level == :debug, do: nil, else: log_event
185
+ end
186
+ ```
187
+
188
+ ### Route all categories through TelemetryProcessor
189
+
190
+ By default only logs use the `TelemetryProcessor` ring buffer.
191
+ You can route errors, check-ins, and transactions through it too:
192
+
193
+ ```elixir
194
+ config :sentry,
195
+ enable_logs: true,
196
+ telemetry_processor_categories: [:log, :error, :check_in, :transaction]
197
+ ```
198
+
199
+ ---
200
+
201
+ ## How the Two Systems Interact
202
+
203
+ | What | LoggerHandler | Sentry Logs Protocol |
204
+ | ----------------- | ------------------------------- | ----------------------------------------------- |
205
+ | Appears in Sentry | Issues (errors) | Logs product |
206
+ | Use for | Crash reports, unhandled errors | Structured log search, log-to-trace correlation |
207
+ | Min SDK version | v9.0.0 | v12.0.0 |
208
+ | Config key | `:logger` in app config | `:enable_logs` in sentry config |
209
+
210
+ You can run both simultaneously.
211
+ A common setup: `LoggerHandler` at `:error` level for issues, and Sentry Logs at `:info`
212
+ for structured log search.
213
+
214
+ ---
215
+
216
+ ## Best Practices
217
+
218
+ - Prefer `Sentry.LoggerHandler` over `Sentry.LoggerBackend` for new projects —
219
+ `LoggerHandler` is the Erlang `:logger` handler and runs in the calling process, which
220
+ is more efficient
221
+ - Set `excluded_domains: [:cowboy]` (the default) to avoid duplicate events when using
222
+ `Sentry.PlugCapture` with Cowboy
223
+ - Enable `capture_log_messages: true` to catch error-level log messages that are not
224
+ explicit `capture_exception` calls
225
+ - Use `tags_from_metadata` to promote high-cardinality identifiers (user ID, region,
226
+ request ID) to searchable Sentry tags
227
+ - Apply `rate_limiting` in high-throughput services to prevent log storms from
228
+ overwhelming your Sentry quota
229
+
230
+ ## Troubleshooting
231
+
232
+ | Issue | Solution |
233
+ | ------------------------------------ | --------------------------------------------------------------------------------- |
234
+ | LoggerHandler not capturing anything | Verify `Logger.add_handlers(:my_app)` is called in `Application.start/2` |
235
+ | Duplicate events from Cowboy crashes | `excluded_domains: [:cowboy]` is the default; check if it was removed from config |
236
+ | No Sentry Logs entries appearing | Ensure `enable_logs: true` is set and sentry v12.0.0+ is in use |
237
+ | Log metadata not appearing in Sentry | List keys explicitly in `metadata:` option; or use `metadata: :all` |
238
+ | Too many log events hitting quota | Add `rate_limiting: [max_events: N, interval: ms]` to `LoggerHandler` config |
239
+ | `LoggerBackend` warnings in logs | Migrate to `Sentry.LoggerHandler`; `LoggerBackend` will be deprecated |