@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,131 @@
1
+ # AI / Agent Monitoring — What & Why
2
+
3
+ ## What it is
4
+
5
+ Tracing specialized for LLM apps.
6
+ LLM calls, agent runs, tool calls, and agent-to-agent handoffs are captured as
7
+ `gen_ai.*` spans carrying model, token usage, cost, and latency.
8
+ It is built on [tracing](tracing.md), so tracing must be on
9
+ (`tracesSampleRate`/`traces_sample_rate` > 0) — without spans there is nothing to attach
10
+ `gen_ai` data to.
11
+
12
+ Auto-instrumented for detected AI SDKs on **JavaScript, Python, and Laravel** (OpenAI,
13
+ Anthropic, Vercel AI, LangChain/LangGraph, Google GenAI, HuggingFace, Pydantic AI, and
14
+ Laravel AI; `litellm` needs explicit registration).
15
+ Every other platform is manual `gen_ai.*` instrumentation, or unsupported — the platform
16
+ `index.md` says which.
17
+
18
+ **Auto-instrumentation is runtime-dependent, not just language-dependent.** It patches
19
+ the AI client at require/import time, so it only applies on a patchable runtime.
20
+ On workerd (Cloudflare Workers) and in browser/client-side code there is nothing to
21
+ patch — those need build-time instrumentation (the Cloudflare Vite plugin) or a manual
22
+ client wrapper (`Sentry.instrumentOpenAiClient` and friends).
23
+ Check the platform’s `ai-monitoring.md` before assuming “it’s JavaScript, so it’s
24
+ automatic”.
25
+
26
+ ## What the artifact shows
27
+
28
+ A trace _is_ the agent run: a `gen_ai.invoke_agent` span parents the `gen_ai.chat` (LLM
29
+ call), `gen_ai.execute_tool`, and `gen_ai.handoff` children it triggered.
30
+ Read cost and latency off the child spans’ token attributes.
31
+ Two views surface it: the **AI Agents** dashboard and **Explore > Conversations**.
32
+
33
+ The span `op` is `gen_ai.{operation}` — `chat`, `embeddings`, `generate_content`,
34
+ `text_completion` for calls, plus `invoke_agent`, `execute_tool`, `handoff`. The span
35
+ **name** repeats the operation with its subject: `chat gpt-4o`,
36
+ `invoke_agent Weather Agent`, `execute_tool get_weather`,
37
+ `handoff from triage to billing`. Attributes accept primitives only; arrays/objects are
38
+ JSON-stringified. The canonical attribute set lives under
39
+ `references/semantics/gen_ai.md` in skills that hydrate semantic conventions (see the
40
+ instrument skill’s Semantic conventions list).
41
+ The SDK docs can lag, and deprecated attributes are omitted from that reference on
42
+ purpose.
43
+
44
+ ## Conversations
45
+
46
+ Conversations groups spans by `gen_ai.conversation.id` into a chat-style timeline.
47
+ A conversation can span multiple traces (a page refresh mid-chat), and one trace can
48
+ hold spans from multiple conversations — the two are independent.
49
+
50
+ **Conversation ID format matters:** use a short, opaque identifier — alphanumeric with
51
+ dashes or underscores only (a UUID, or a prefixed id like `conv_5j66Up…`). Never use a
52
+ URL, email, or other free-form text: Sentry uses the id as a URL path segment, so a
53
+ value containing a slash breaks Conversations for that session.
54
+ Some integrations infer the id automatically (Python OpenAI Agents, Node OpenAI, Laravel
55
+ AI agents using `Conversational` + `RemembersConversations`); everything else sets it
56
+ explicitly. The view also needs input/output capture and gen_ai span streaming (both on
57
+ by default on recent JS/Python SDKs; Laravel AI spans are emitted directly) or it
58
+ renders empty, and a `setUser`/`set_user` call to populate the User column where
59
+ supported.
60
+
61
+ ## Token accounting (avoid negative costs)
62
+
63
+ Sentry computes cost from token attributes, and cached/reasoning counts are **subsets**
64
+ of the totals, not separate buckets: `gen_ai.usage.input_tokens` already includes
65
+ `.input_tokens.cached`, and `gen_ai.usage.output_tokens` already includes
66
+ `.output_tokens.reasoning`. Reporting a subset larger than its total makes Sentry
67
+ subtract past zero and show a negative cost.
68
+
69
+ ## Input/output message shape
70
+
71
+ `gen_ai.input.messages` and `gen_ai.output.messages` are JSON-stringified arrays of
72
+ `{role, parts}`, where each part is `{type, content}` — part types include `text`,
73
+ `reasoning`, `tool_call`, and `tool_call_response`.
74
+
75
+ Extended thinking (Anthropic `thinking`, Gemini `thought`, DeepSeek `reasoning_content`)
76
+ belongs in a **`reasoning` part, never folded into a `text` part**: Sentry surfaces
77
+ reasoning separately and filters it out of the user-facing Conversations view, so
78
+ thinking passed as `text` shows up as if the model said it.
79
+ When prior thinking is fed back into a multi-turn request, keep those same `reasoning`
80
+ parts in the assistant messages inside `gen_ai.input.messages`.
81
+
82
+ The system prompt is separate from the messages — it goes in
83
+ `gen_ai.system_instructions` — as is the tool catalog offered to the model,
84
+ `gen_ai.tool.definitions`. Both are model input and carry the same PII weight as the
85
+ messages.
86
+
87
+ ## PII
88
+
89
+ Prompts and model outputs are user content and are **likely PII**. JavaScript captures
90
+ input/output by default (governed by `dataCollection.genAI`); Python gates it behind
91
+ `send_default_pii=True`; Laravel gates it behind `SENTRY_SEND_DEFAULT_PII=true`. Confirm
92
+ the privacy policy and regulations allow it and **ask the user before enabling capture**
93
+ — see [data-scrubbing.md](data-scrubbing.md).
94
+
95
+ ## Setup essentials
96
+
97
+ - Tracing must be on; then detect the AI SDK and let auto-instrumentation handle it
98
+ (JS/Python/Laravel AI), or instrument `gen_ai.*` spans manually.
99
+ - Sample AI traces at **100%** — see Sampling below.
100
+ - Set a `gen_ai.conversation.id` wherever multi-turn chats need grouping.
101
+
102
+ ## Sampling
103
+
104
+ An agent run is one span tree and the sampling decision is made at the **root**;
105
+ children inherit it unconditionally.
106
+ Drop the root and every `gen_ai` child goes with it — so at any rate below 1.0 you lose
107
+ whole agent runs, not a fraction of each.
108
+ Which root depends on the app:
109
+
110
+ - **The `gen_ai` span is itself the root** (cron job, queue consumer, CLI): the sampler
111
+ function sees the `gen_ai.*` op directly — match on it and return 1.0.
112
+ - **The `gen_ai` spans hang off an HTTP transaction** (most web apps): the sampler never
113
+ runs for them, because the request was already sampled before any AI code executed.
114
+ Keep the AI-serving routes at 1.0 instead.
115
+
116
+ If AI is the core product, skip the sampler and keep tracing at 1.0 outright.
117
+
118
+ **Read the app’s current rate before changing it, and ask.** If tracing is below 1.0
119
+ with no sampler configured, say what the current rate is and what a dropped root costs,
120
+ then wait for an answer — raising trace volume is the user’s cost decision, the same as
121
+ the PII gate above.
122
+
123
+ When 100% tracing isn’t affordable, metrics and logs are sampled independently of
124
+ traces: emit token counts and per-call log records on every LLM call to keep full
125
+ cost/usage coverage alongside sampled traces.
126
+
127
+ ## Related
128
+
129
+ - [`tracing.md`](tracing.md) — AI monitoring is tracing; spans are the substrate.
130
+ - [`data-scrubbing.md`](data-scrubbing.md) — prompt/output capture is the PII decision.
131
+ - [`reduce-volume.md`](reduce-volume.md) — the volume/cost tradeoff across signals.
@@ -0,0 +1,78 @@
1
+ # Choosing a signal
2
+
3
+ Sentry captures several distinct **signals**. They are not interchangeable.
4
+ Picking the right one is the single most important instrumentation decision, and the
5
+ wrong one is the most common waste of quota.
6
+ Decide by the question you are trying to answer.
7
+
8
+ | You want to know… | Reach for | Why |
9
+ | --------------------------------------------------------------------------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------- |
10
+ | _Something broke — what, where, and why?_ | **Error** | An exception/crash with a stack trace, grouped into an issue. The default, always-on signal. |
11
+ | _Why is this slow? What’s the chain of calls? Did the request flow through the system as expected?_ | **Span / trace** | Timing and structure of a request across services (distributed tracing). Powers performance-issue detection (N+1, slow DB). |
12
+ | _What happened leading up to this?_ | **Log** | A searchable, structured, trace-connected record of discrete events. Narrative context, not timing. |
13
+ | _How many / how much / what’s the trend over time?_ | **Metric** | An aggregate number (counter / gauge / distribution) for a KPI you watch and alert on. |
14
+ | _Which exact function/line is burning CPU?_ | **Profile** | Code-level sampling under a traced transaction. Requires tracing on. |
15
+ | _What did the user actually see and do?_ | **Session Replay** | A video-like reproduction of a frontend/mobile session around an error or UX problem. |
16
+ | _What does the user think went wrong?_ | **User Feedback** | A qualitative report from a human, linked to the surrounding context. |
17
+ | _Did my scheduled job run on time?_ | **Cron monitor** | Check-ins that detect missed, late, or failed recurring jobs. |
18
+
19
+ Most of these signals carry the same **trace ID**, so once one surfaces a problem you
20
+ can pivot to the others in the same request — the trace is the connective tissue that
21
+ ties errors, spans, logs, replays, and metrics together for debugging.
22
+
23
+ ## Comparisons
24
+
25
+ - **Error vs. log.** An exception your code can’t handle is an **error** (capture it as
26
+ one — it groups into an issue and gets a stack trace).
27
+ A noteworthy thing that happened but isn’t a failure is a **log**. Don’t log-spam
28
+ things that should be errors; don’t capture routine events as errors and pollute the
29
+ issue stream.
30
+ - **Log vs. span.** A log answers _what happened_; a span answers _how long it took and
31
+ what it called_. If you find yourself logging start/end timestamps to measure
32
+ duration, you want a span instead.
33
+ - **Span vs. metric.** A span is one sampled instance of an operation (great for “show me
34
+ a slow request”). An **Application Metric** is a numeric measurement aggregated over
35
+ all occurrences at query time (great for “alert when p95 latency exceeds 500ms”) and,
36
+ unlike a traditional metric, can carry high-cardinality attributes.
37
+ - **Metric vs. counting events.** Don’t emit a custom metric for something Sentry already
38
+ derives from errors/spans (issue counts, throughput, latency percentiles, crash-free
39
+ rate). Reserve custom metrics for **business/operational KPIs** Sentry can’t see —
40
+ `checkout.failed`, `queue.depth`, `cache.hit_ratio`.
41
+ - **Profile rides on tracing.** Profiling is not a standalone signal — it samples
42
+ _inside_ traced transactions.
43
+ Tracing must be on first.
44
+
45
+ ## What to instrument where
46
+
47
+ - **Errors:** everywhere, always.
48
+ This is the baseline and the first thing to get working.
49
+ - **Tracing:** the request **boundaries** first — incoming HTTP, outbound HTTP, DB /
50
+ cache / queue. Auto-instrumentation covers most of these once tracing is on.
51
+ Add custom spans only for meaningful business operations.
52
+ - **Logging:** a few high-signal events per request with structured attributes — not a
53
+ firehose.
54
+ - **Metrics:** a small, deliberate set of KPIs that map to a real decision or alert.
55
+ - **Replay:** frontend (and mobile) only; high sampling on errors, low on normal
56
+ sessions.
57
+ - **Crons:** every scheduled job whose silent failure would hurt.
58
+
59
+ When the user is unsure, ask what question they’re trying to answer and map it with the
60
+ table above. When they say “set it up properly” / “you pick the defaults,” lean on the
61
+ recommended baseline: **errors + tracing at a modest sample rate + releases + source
62
+ maps**, then add logs/replay/profiling as the use case warrants.
63
+
64
+ ## Cross-cutting concepts (not signals)
65
+
66
+ These shape how the signals above behave and how you act on them — each has its own
67
+ reference:
68
+
69
+ - **Releases** — tie every event to a deployed version.
70
+ Unlocks regression detection, crash-free rates, suspect commits, and
71
+ resolve-in-next-release.
72
+ - **Monitors → Issues → Alerts** — Sentry’s detection-and-response model.
73
+ _Monitors_ decide when a signal becomes an **issue**; _Alerts_ act on issues.
74
+ - **Data scrubbing / PII** — what’s sensitive, and the defense-in-depth model for
75
+ keeping it out.
76
+ - **Volume & cost** — what to keep vs.
77
+ drop, and where to sample.
78
+ - **Search query language** — the `key:value` grammar shared by every query surface.
@@ -0,0 +1,50 @@
1
+ # Cron / Scheduled-Job Monitoring — What & Why
2
+
3
+ Monitoring for recurring jobs — cron jobs, scheduled tasks, queue workers.
4
+ Sentry watches for runs that are **missed**, **late**, **timed out**, or **failed** and
5
+ turns those into issues.
6
+ It works via **check-ins**: the job reports `in_progress` when it starts and
7
+ `ok`/`error` when it finishes; a run that never checks in (or checks in late) is flagged
8
+ against the monitor’s schedule.
9
+
10
+ Reach for it where **silent failure is dangerous** — a nightly billing run, a data sync,
11
+ a backup — and “it didn’t run” is as bad as “it crashed.”
12
+
13
+ ## Why a cron issue often isn’t where you’d look
14
+
15
+ - **A “missed” issue frequently isn’t in the job code.** Missed means no check-in
16
+ arrived in the expected window — commonly the **scheduler** (misconfigured, skipped,
17
+ never started the job), a **network** problem (outbound firewall, flaky connection),
18
+ or a timeout. Don’t assume the job body threw.
19
+ - **The real exception is a separate error event on the same trace.** If the SDK is
20
+ configured, errors thrown during the run are captured as normal error events and tied
21
+ back to the check-in through the run’s trace — follow the trace from the cron issue to
22
+ find them.
23
+ - **Issue creation is threshold-gated,** not per-failure: `failure_issue_threshold` (N
24
+ consecutive failures before an issue opens) and `recovery_threshold` (N consecutive
25
+ OKs before it resolves).
26
+ A single failure may not create an issue.
27
+ - **Absence of alerts ≠ healthy.** A monitor broken for weeks gets auto-muted — it stops
28
+ producing issues and notifications while billing continues.
29
+ A silent monitor may be muted, not passing.
30
+
31
+ ## Setup essentials
32
+
33
+ - **Monitor config is data** (server-side): the schedule (crontab — 5-field only — or
34
+ interval), the **`timezone`**, **`checkin_margin`** (how late counts as missed), and
35
+ **`max_runtime`** (how long counts as hung).
36
+ Set the last two to the job’s real timing — tight enough to catch a hang, loose enough
37
+ to avoid false alarms.
38
+ - **Check-ins are code** (SDK-side).
39
+ Paths: the SDK **`withMonitor` / decorator** wrapper (cleanest when an SDK is present
40
+ — sends both start and outcome), an **HTTP check-in** (any language, ideal for shell
41
+ crontabs), or **`sentry-cli`** wrapping a shell command.
42
+ Wrap the **whole job** so both success and failure report; a bare heartbeat (single
43
+ `ok`/`error`) detects _missed_ but not _`max_runtime`_ timeouts.
44
+ - **Use a stable, descriptive slug** (`nightly-invoice-sync`, not `job-1`) — it’s the
45
+ check-in key, so slug churn on every deploy orphans monitors.
46
+
47
+ ## Related
48
+
49
+ - [`monitors.md`](monitors.md) — a cron monitor is one kind of Monitor that creates
50
+ issues.
@@ -0,0 +1,43 @@
1
+ # Data Scrubbing / PII — Strategy
2
+
3
+ Controlling what personal or sensitive data reaches (and is stored by) Sentry — a common
4
+ GDPR / PCI / SOC2 requirement, or just not wanting tokens in your error tracker.
5
+ Treat as sensitive: emails, names, IPs, user IDs that map to people, full
6
+ request/response **bodies**, **headers** (auth tokens, cookies, session IDs), query
7
+ strings with tokens, passwords, and anything regulated.
8
+ When in doubt, assume a field is sensitive.
9
+
10
+ ## Defense in depth — two layers, both
11
+
12
+ 1. **SDK-side (before data leaves the app)** — the strongest guarantee; data you never
13
+ send can’t leak.
14
+ - `sendDefaultPii` controls whether the SDK attaches request/user PII automatically
15
+ (default off).
16
+ - `beforeSend` / `beforeSendTransaction` hooks strip, redact, or drop fields on every
17
+ event.
18
+ 2. **Server-side (Sentry, the backstop)** — data-scrubbing rules scrub on ingest
19
+ (Safe/Sensitive field lists + an advanced selector rules engine).
20
+ On by default.
21
+
22
+ Scrub at the earliest layer you can; keep the server-side rules as a backstop, because
23
+ you’ll eventually capture something you didn’t anticipate.
24
+
25
+ ## AI/LLM attributes (`gen_ai.*`)
26
+
27
+ **Prompt and completion attributes (`gen_ai.input.messages`, `gen_ai.output.messages`,
28
+ `gen_ai.tool.call.*`, …) are not scrubbed by the default server-side rules.** Their
29
+ capture is itself opt-in (only when PII capture is enabled), but _once captured they
30
+ aren’t redacted_ — so if you instrument an LLM app, explicitly scrub them with an
31
+ advanced rule (`$span.data.'<attribute>'`) or disable their capture.
32
+
33
+ ## Verify, don’t assume
34
+
35
+ Trigger an event and confirm the sensitive fields are absent/redacted in the event
36
+ detail. Logs and replay/screenshots are the easiest leaks — pair with
37
+ [`logging.md`](logging.md) and [`session-replay.md`](session-replay.md).
38
+
39
+ ## Related
40
+
41
+ - [`logging.md`](logging.md)
42
+ - [`session-replay.md`](session-replay.md)
43
+ - [`reduce-volume.md`](reduce-volume.md)
@@ -0,0 +1,40 @@
1
+ # Error monitoring
2
+
3
+ Unhandled exceptions and crashes — plus anything you send explicitly with
4
+ `captureException` — grouped into **issues** with the context needed to fix them: a
5
+ stack trace, breadcrumbs (the events leading up to the error), and request/user/release
6
+ metadata. An issue is the unit you triage, assign, resolve, and link a fix to.
7
+
8
+ ## What an issue actually is
9
+
10
+ - An **issue is a group of events** sharing a fingerprint (stack trace + exception
11
+ type/message), not a single occurrence.
12
+ Sentry surfaces one **representative event** — the one richest in context, which is
13
+ not necessarily the latest — so you reason about the group and drill into an event for
14
+ specifics.
15
+ - **The cause isn’t always in the stack trace.** Suspect commits tie the issue to the
16
+ commit that likely introduced it, and a **trace-related issue** points to a
17
+ _different_ issue in the same request that may be the real origin — the crash you’re
18
+ looking at can be a downstream symptom.
19
+ - **When one bug shows up as several issues (or several bugs as one), that’s a grouping
20
+ problem** — the fingerprint is tunable, not something to live with.
21
+
22
+ ## What makes an error actionable
23
+
24
+ - **A readable stack trace** — minified JS or unsymbolicated native frames make an issue
25
+ nearly useless; readable frames depend on source maps (JS) or debug symbols
26
+ (native/mobile) being uploaded.
27
+ - **`release` and `environment` tags** — unlock regression detection,
28
+ resolve-in-next-release, and separating prod from staging noise.
29
+ Set them from the start.
30
+ - **Context, not PII** — tags, user IDs, and breadcrumbs make an error diagnosable;
31
+ scrub sensitive data before it leaves the app
32
+ ([`data-scrubbing.md`](data-scrubbing.md)).
33
+ - **Not routine control flow** — expected 404s and validation rejections aren’t errors;
34
+ capturing them buries the real problems.
35
+
36
+ ## Related
37
+
38
+ - [`tracing.md`](tracing.md)
39
+ - [`releases.md`](releases.md)
40
+ - [`data-scrubbing.md`](data-scrubbing.md)
@@ -0,0 +1,85 @@
1
+ # Structured Logging — What & Why
2
+
3
+ Structured, trace-connected logs: each log carries a level, a message, and key/value
4
+ **attributes**, and Sentry automatically attaches the trace ID so it correlates with the
5
+ spans, errors, and other logs in the same request.
6
+ Logs record the context and decisions that explain _what happened_ during execution —
7
+ the context a stack trace alone can’t give.
8
+
9
+ ## When to reach for a log
10
+
11
+ - **Not for timing or flow** — that’s a span / trace.
12
+ - **Not for unexpected critical failures** — that’s an error (it groups into an issue
13
+ with a stack trace).
14
+ A log is for noteworthy-but-handled events: a runtime decision (a feature flag served
15
+ a different path), an audit or business event (created / updated / deleted /
16
+ permission changed), a summary of a multi-step operation, or context around a
17
+ _recoverable_ failure (a retry before the final attempt, a non-critical upstream that
18
+ failed).
19
+ - **Not for every function call** — high-frequency line-spam is noise and billed volume.
20
+ A log should answer a concrete production question and still be useful if emitted
21
+ thousands of times.
22
+
23
+ ## Structure
24
+
25
+ - **Consistent key/value attributes, not interpolation.** Namespace them
26
+ (`myapp.<domain>.<field>`) and reuse field names across the app so events can be
27
+ searched and aggregated.
28
+ A good log answers who did it, what happened, and when.
29
+ Attributes are what you query — `severity:error`, `trace_id:...`, `user.id:...` with
30
+ `AND`/`OR` (the level field is `severity` in search); raw text search matches only the
31
+ message, so anything you want to filter on must be an attribute.
32
+ - **Agree conventions once, across services.** Decide the attribute namespacing,
33
+ event-name phrasing, and levels up front so logs from every language and service can
34
+ be searched and correlated together.
35
+ On both sides of a call that propagates trace headers (`baggage` / `sentry-trace`),
36
+ use the same attribute names so a single trace reads coherently across services.
37
+ - **Accumulate context as a request evolves** — early logs may carry only request info;
38
+ later ones add the authenticated user, feature flags, and outcomes.
39
+ Prefer the SDK’s `set_user` over repeating a user ID on every log.
40
+ - **Levels carry meaning:** `debug` (temporary diagnostics), `info` (normal events),
41
+ `warn` (recoverable but notable), `error` (handled failures).
42
+ For anything critical — or that should group into an issue with a stack trace —
43
+ capture a real Sentry **error** event, not a log.
44
+ On the `error`-level logs you do keep, include what explains the failure: retry count,
45
+ the response status and key non-sensitive request/response fields for external calls,
46
+ and the runtime decisions that led there.
47
+ - **Log fields, not whole objects** — pick the fields you’ll query and omit absent
48
+ optional attributes rather than logging `null`.
49
+ - Sentry can integrate with an existing logging abstraction (Monolog, slog, Rails
50
+ logger, Pino/console) or you can call the SDK’s logger directly.
51
+
52
+ ## Don’t log sensitive data
53
+
54
+ Assume anything logged will be read by another human.
55
+ Never log passwords, tokens, or API keys; prefer opaque user IDs over emails or names,
56
+ and mind PCI / GDPR / CCPA / HIPAA-regulated fields.
57
+ Large raw payloads — a full LLM prompt/response, a webhook or HTTP body — have
58
+ legitimate debugging uses, but users put personal data in prompts and bodies carry
59
+ secrets, so weigh the cost and risk and prefer logging the specific fields you’ll query
60
+ over the whole payload.
61
+ Server-side scrubbing is a backstop, not a license to log carelessly
62
+ ([`data-scrubbing.md`](data-scrubbing.md)).
63
+
64
+ ## Is a log worth keeping?
65
+
66
+ Review each log you add or change, and drop any that can’t answer yes to all of these:
67
+
68
+ - **Production question** — what concrete production question does it answer?
69
+ - **Useful at volume** — would it still help if emitted thousands of times?
70
+ - **Right signal** — is it better as a span, a metric, or a real Sentry error?
71
+ - **Not already covered** — does an exception, an existing log, or a shared API/client
72
+ wrapper already capture it?
73
+ - **Consistent** — do its event name and attributes follow the app’s conventions?
74
+ - **Safe** — no PII, secrets, raw payloads, or unstable exception-message text?
75
+ - **Actionable** — would seeing it change how someone investigates or responds?
76
+
77
+ For each log you keep, be able to say: _“This log is valuable because it helps answer
78
+ <specific question>.”_ Drop logs that merely confirm a routine UI interaction, duplicate
79
+ a generic API failure, or record an expected validation failure without adding context.
80
+
81
+ ## Related
82
+
83
+ - [`data-scrubbing.md`](data-scrubbing.md)
84
+ - [`reduce-volume.md`](reduce-volume.md)
85
+ - [`search-query-language.md`](../search-query-language.md) — querying logs.
@@ -0,0 +1,49 @@
1
+ # Application Metrics — What & Why
2
+
3
+ **Application Metrics** are numeric values you emit and watch over time, trace-connected
4
+ so a spike on a chart links back to the producing traces.
5
+ Unlike traditional (StatsD-style) metrics they support high cardinality and
6
+ dimensionality — a key difference that changes how you instrument them (see below).
7
+ Three types, picked by the question:
8
+
9
+ | Type | Answers | Example |
10
+ | ---------------- | ---------------------------------- | ------------------------------------- |
11
+ | **count** | _How many?_ | `checkout.failed`, `signup.completed` |
12
+ | **gauge** | _What’s the value now?_ | `queue.depth`, `connections.active` |
13
+ | **distribution** | _What’s the spread (p50/p95/max)?_ | `api.latency`, `payload.size` |
14
+
15
+ ## What Application Metrics excel at
16
+
17
+ They answer _how many / how much / what’s the trend_ — the aggregate view you alert and
18
+ build dashboards on, where the other signals don’t fit: tracing is for request
19
+ performance and flow, logging for runtime decisions and audit trails, errors for
20
+ critical failures. A metric tells you _that_ something moved, not _why_ — and because
21
+ Application Metrics are trace-connected, you pivot from a point on the chart to its
22
+ samples and the traces behind them to find the cause.
23
+
24
+ ## Setup essentials
25
+
26
+ - **Don’t re-invent what Sentry derives** — issue counts, throughput, latency
27
+ percentiles, and crash-free rate come from errors/spans for free.
28
+ Reserve Application Metrics for KPIs Sentry can’t see: conversion, business failures,
29
+ saturation, cache-hit ratio.
30
+ - **A KPI already sitting in your logs is a candidate to promote to a metric** — a log
31
+ is an ephemeral signal optimized for search; a metric is a durable, review-worthy code
32
+ artifact optimized for alerting and dashboards.
33
+ - **High cardinality and dimensionality are fine — and a key benefit.** Unlike
34
+ traditional metrics, Application Metrics can carry high-cardinality attributes (user
35
+ IDs, request IDs, URLs); don’t force low-cardinality attributes the way you would with
36
+ a StatsD-style metric or you’ll throw away useful signal.
37
+ Set **units** on distributions (ms, bytes) and name consistently
38
+ (`domain.thing.action`).
39
+ - Values are emitted **per occurrence and aggregated at query time** (not a client-side
40
+ pre-aggregate).
41
+ - The old beta `Sentry.metrics.increment` / StatsD-style API was **removed in SDK v9** —
42
+ use the current `count` / `gauge` / `distribution` API (the exact surface varies by
43
+ platform).
44
+
45
+ ## Related
46
+
47
+ - [`monitors.md`](monitors.md) — a Metric Monitor can alert on an Application Metric (it
48
+ can also watch logs, spans, or errors — it isn’t metrics-specific).
49
+ - [`tracing.md`](tracing.md) — Application Metrics complement, don’t replace, spans.
@@ -0,0 +1,78 @@
1
+ # Monitors → Issues → Alerts — The Model
2
+
3
+ Sentry separates **what you detect** from **what you do about it**, in three stages —
4
+ **Monitors** detect, **Issues** are the unit you triage, and **Alerts** respond:
5
+
6
+ - A **Monitor** decides _when_ a signal becomes an **issue**.
7
+ - An **Issue** is the unit you triage — a grouped, stateful object (status, priority,
8
+ assignee, history).
9
+ - An **Alert** decides _what to do_ once an issue matches its conditions — notify Slack,
10
+ page someone, open a ticket, hit a webhook.
11
+
12
+ Monitors detect; Alerts respond.
13
+ They’re configured independently: one alert can watch many monitors/projects, and one
14
+ monitor can feed several alerts.
15
+
16
+ > Terminology: this model uses **Metric Monitor** for the detection stage and reserves
17
+ > **Alert** for the response stage.
18
+ > Older docs and integrations still say “metric **alert**” for the same detection
19
+ > concept — treat them as the same thing; the rename isn’t fully settled across the
20
+ > product.
21
+
22
+ ## Monitors — when a signal becomes an issue
23
+
24
+ - **Default monitors** — auto-created per project: the **Issue Stream Monitor** and
25
+ **Error Monitor** (the error-detection / grouping pipeline).
26
+ Nothing to set up; worth knowing they’re “monitors” in this model.
27
+ - **Custom monitors:**
28
+ - **Metric Monitor** — a threshold on errors / spans / logs / releases / Application
29
+ Metrics; the threshold can be **fixed**, a **percentage change** vs.
30
+ a prior window, or **dynamic anomaly detection**. Often created straight from a
31
+ saved Discover or Metrics-Explorer query.
32
+ - **Cron Monitor** — a scheduled-job watch via check-ins ([`crons.md`](crons.md)).
33
+ - **Uptime Monitor** — periodic HTTP checks against a URL.
34
+ - **Mobile Builds Monitor** — app-size thresholds across iOS/Android builds.
35
+
36
+ **Monitor config also sets issue attributes at creation** — priority, auto-resolve, and
37
+ assignee (ownership rules can override the assignee).
38
+ The monitor decides not just _that_ something becomes an issue but _how important_ it is
39
+ and _who owns it_.
40
+
41
+ ## Alerts — acting on issues
42
+
43
+ An alert is **sources → triggers → filters → actions**:
44
+
45
+ - **Sources** — which projects/monitors it watches.
46
+ - **Triggers** — which issue-state changes fire it (new, regression, reappearance,
47
+ resolved); triggers are OR’d.
48
+ - **Filters** — conditions the issue/event must match before actions run (priority,
49
+ frequency, tags, assignment, age); filter groups can be ANY or ALL. **If an issue
50
+ exists but no alert fired, a filter is usually why.**
51
+ - **Actions** — Slack, email, PagerDuty, Discord, Jira, webhook, …
52
+
53
+ ## When to reach for what
54
+
55
+ - _“Tell me in Slack when a new issue shows up”_ → an **Alert** (the default error
56
+ monitor already makes the issues).
57
+ - _“Alert when error rate / latency / a metric crosses a line”_ → a **Metric Monitor**,
58
+ then an alert.
59
+ - _“My nightly job didn’t run”_ → a **Cron Monitor**. _“Is my endpoint up?”_ → an
60
+ **Uptime Monitor**.
61
+
62
+ ## Coverage honesty
63
+
64
+ Alert creation is automatable via Sentry’s workflow-engine API; several monitor types
65
+ (uptime, dashboards) are heavier UI/API hand-offs today — be upfront about what the
66
+ agent can do end-to-end vs.
67
+ where it walks the user through the UI. The MCP is **read-only** here: it can inspect
68
+ alert rules (`find_alert_rules`, `get_alert_rule`), cron monitors and their check-ins
69
+ (`find_monitors`, `get_monitor_details`), and dashboards — useful for verifying after
70
+ creation — but there is no create or update path for any of them, and uptime monitors
71
+ have no MCP surface at all.
72
+
73
+ ## Related
74
+
75
+ - [`crons.md`](crons.md)
76
+ - [`metrics.md`](metrics.md)
77
+ - [`releases.md`](releases.md)
78
+ - [`search-query-language.md`](../search-query-language.md)
@@ -0,0 +1,38 @@
1
+ # Profiling — What & Why
2
+
3
+ Code-level sampling of production execution.
4
+ Tracing tells you _which operation_ is slow; profiling tells you _which function and
5
+ line_ inside it is burning the time.
6
+ The output is a **flame graph**, also available as **differential** ("what got slower
7
+ between releases") views.
8
+
9
+ ## What a flame graph represents
10
+
11
+ A flame graph aggregates many stack samples, and its two shapes have **different
12
+ x-axes**. In a single-profile graph X is time and **width = time spent**, so the
13
+ bottleneck is the deepest wide frame with high **self-time** (time in the function
14
+ itself, excluding children) — a wide frame with little self-time just means the cost is
15
+ in a child. In an **aggregated** graph X is not time; **width = how often a frame
16
+ appears** across samples.
17
+ Frames are colored **application vs.
18
+ system**: you can only act on your own code, so a wide _application_ frame is the
19
+ target, not a wide system frame.
20
+ A profile covers one thread at a time.
21
+
22
+ ## Setup essentials
23
+
24
+ - **Modes:** **Continuous profiling** (backend; Python/Node today) and **UI profiling**
25
+ (frontend/mobile) are the current products; legacy transaction-based profiling is
26
+ being replaced.
27
+ - **The dependency to get right:** in the default **`manual` lifecycle** mode, profiling
28
+ runs _independently_ of tracing — you start/stop it explicitly
29
+ (`start_profiler`/`stop_profiler`), and nothing is collected until you do.
30
+ Only the optional **`trace` lifecycle** mode (and legacy transaction-based profiling)
31
+ require tracing on and sample relative to sampled transactions.
32
+ - **Sample, don’t profile everything** — ~1–5% CPU overhead; sampling is session-scoped.
33
+ Mind minimum SDK versions (support varies by platform).
34
+
35
+ ## Related
36
+
37
+ - [`tracing.md`](tracing.md) — profiling localizes a bottleneck tracing pointed at.
38
+ - [`reduce-volume.md`](reduce-volume.md) — sampling/overhead tradeoffs.
@@ -0,0 +1,49 @@
1
+ # Volume & Cost — Strategy
2
+
3
+ Sentry bills by the volume of each signal (errors, spans, replays, profiles), and logs
4
+ and metrics are billed by _size_ — so attribute count and message length matter, not
5
+ just event count. Reducing volume is keeping the data that earns its place and dropping
6
+ the rest — for quota _and_ for signal-to-noise.
7
+
8
+ ## The core tradeoff, per signal
9
+
10
+ - **Errors:** sample _lightly_ or not at all — usually what you can’t afford to miss.
11
+ The cheapest win is **filtering known noise** (browser-extension errors, bots, a
12
+ specific bogus exception), not blanket down-sampling.
13
+ - **Spans / traces:** sample _aggressively_ — the highest-volume signal and biggest
14
+ lever. A `tracesSampler` that keeps important paths and drops health-check noise beats
15
+ a flat low rate. (Note `tracesSampleRate: 0` doesn’t disable tracing — see
16
+ [`tracing.md`](tracing.md).)
17
+ - **Replays / profiles:** keep the asymmetric/sampled defaults (high on error, low on
18
+ normal).
19
+ - **Logs / metrics:** billed by size — trim attribute count and message length, not just
20
+ event count, on top of emitting fewer, higher-signal events.
21
+
22
+ ## Where to sample — head vs. server-side
23
+
24
+ - **Client / head sampling (SDK)** — decide before sending; cheapest, and the decision
25
+ propagates across a trace so you keep whole traces.
26
+ The first lever.
27
+ - **Server-side (Sentry)** — a backstop, and for what the SDK can’t cleanly decide:
28
+ - **Inbound data filters** — browser-extension errors, known crawlers, legacy
29
+ browsers, `localhost`, specific error messages or releases, by IP. (Some are
30
+ Business-plan.)
31
+ - **Per-DSN rate limits** — cap a noisy key.
32
+ **Spike protection** — an automatic guard against a sudden flood.
33
+ **Delete & Discard** — stop ingesting a specific high-volume issue entirely.
34
+
35
+ ## A practical workflow
36
+
37
+ 1. **Find the top offenders first** (MCP / Explore across errors, spans, and logs) —
38
+ don’t cut blind.
39
+ 2. **Filter known noise** — high precision, no fidelity loss on real data.
40
+ 3. **Tune span sampling** with a `tracesSampler` — the biggest lever.
41
+ 4. **Set rate limits / spike protection** as a safety net.
42
+ 5. **Re-measure** to confirm you cut noise, not signal.
43
+
44
+ ## Related
45
+
46
+ - [`tracing.md`](tracing.md) — span sampling, the main lever.
47
+ - [`logging.md`](logging.md)
48
+ - [`session-replay.md`](session-replay.md)
49
+ - [`profiling.md`](profiling.md)