{"id":"1d84dd30-9673-4083-9d7e-9bdfb3686b30","shortId":"Q6cbzk","kind":"skill","title":"monte-carlo-prevent","tagline":"Shift-left safety net for dbt/SQL model edits. Runs change impact assessment before edits, generates SQL validation queries after, and executes them via `/mc-validate run`. Delegates health and monitor creation to peer skills.","description":"# Monte Carlo Prevent Skill\n\nThis skill brings Monte Carlo's data observability context directly into your editor. When you're modifying a dbt model or SQL pipeline, use it to surface table health, lineage, active alerts, and to generate monitors-as-code without leaving Claude Code.\n\nReference files live next to this skill file. **Use the Read tool** (not MCP resources) to access them:\n\n- Full workflow step-by-step instructions: `references/workflows.md` (relative to this file)\n- MCP parameter details: `references/parameters.md` (relative to this file)\n- Troubleshooting: `references/TROUBLESHOOTING.md` (relative to this file)\n\n## When to activate this skill\n\n**Prevent is the edit-lifecycle skill.** Activate only when the user expresses\nintent to change a dbt model. Bare file mentions, table-name mentions in\npassing, or general health questions are **not** prevent's territory — those\nbelong to `monte-carlo-asset-health` and will activate that skill on their own.\n\n**Do not wait to be asked.** Run the appropriate workflow automatically whenever the user:\n\n- Describes a planned change to a model (new column, join update, filter change, refactor) → **STOP — run Workflow 1 first if it has not run for this table this session, then Workflow 2, before writing any code**\n- Adds a new column, metric, or output expression to an existing model → same rule: Workflow 1 first (if not yet run for this table), then Workflow 2; the post-edit hook will offer Workflow 5 (monitor generation) afterward\n- References a model file with an edit verb in the same prompt (e.g. `@models/clients/client_hub.sql add an is_active column`) → same rule: Workflow 1 first, then Workflow 2\n\nPresent the W2 impact assessment as context the engineer needs before proceeding — not as a response to a question.\n\n### Workflow 1 runs silently when chained to Workflow 2\n\nWhen the user expresses change intent, Workflow 1 invokes `monte-carlo-asset-health`\npurely as a data-gathering step. Read asset-health's report from your context, but\n**do not relay the full report to the engineer** — the user-facing artifact is\nWorkflow 2's impact assessment, which already cites the relevant alerts / lineage /\nmonitors. Showing both creates duplicate reading.\n\nTwo exceptions where you **must** surface output from W1 to the engineer:\n\n1. **Disambiguation prompt.** If asset-health returns multiple matches and asks\n   the engineer to pick one, surface that question — the user must choose.\n2. **Stop-the-world signals.** If the table is already on fire (active critical\n   alerts firing, freshness severely stale), say so in one short line before W2.\n\nIf Workflow 1 already ran for this table earlier in the session, skip directly\nto Workflow 2 — re-running asset-health is redundant.\n\n## When NOT to activate this skill\n\nDo not invoke Monte Carlo tools for:\n\n- Seed files (files in seeds/ directory)\n- Analysis files (files in analyses/ directory)\n- One-off or ad-hoc SQL scripts not part of a dbt project\n- Configuration files (dbt_project.yml, profiles.yml, packages.yml)\n- Test files unless the user is specifically asking about data quality\n\nIf uncertain whether a file is a dbt model, check for {{ ref() }} or {{ source() }}\nJinja references — if absent, do not activate.\n\n### Macros and snapshots — gate edits, skip auto-context\n\nMacro files (`macros/`) and snapshot files (`snapshots/`) are **not** models, so\ndo not auto-fetch Monte Carlo context (Workflow 1) when they are opened. However,\nmacros are inlined into every model that calls them at compile time — a one-line\nmacro change can silently alter dozens of models. Snapshots control historical\ntracking and are similarly sensitive.\n\n**The pre-edit hook gates these files.** If the hook fires for a macro or snapshot,\nidentify which models are affected and run the change impact assessment (Workflow 2)\nfor those models before proceeding with the edit.\n\n### Peer-skill redirects\n\nThese requests have their own skills — do not run prevent for them:\n\n- \"How is table X doing?\" / \"is X healthy?\" / \"check status of X\" → `monte-carlo-asset-health`\n- \"Create a monitor for X\" / \"what should I monitor?\" / \"set up freshness on X\" (without an active edit context) → `monte-carlo-monitoring-advisor`\n\nPrevent invokes asset-health and monitoring-advisor itself when its workflows\nneed them (W1, W5); it does not duplicate their entry points.\n\n---\n\n## REQUIRED: Change impact assessment before any SQL edit\n\n**Before editing or writing any SQL for a dbt model or pipeline, you MUST run Workflow 2.**\n\nThis applies whenever the user expresses intent to modify a model — including phrases like:\n\n- \"I want to add a column…\"\n- \"Let me add / I'm adding…\"\n- \"I'd like to change / update / rename…\"\n- \"Can you add / modify / refactor…\"\n- \"Let's add…\" / \"Add a `<column>` column\"\n- Any other description of a planned schema or logic change\n- \"Exclude / filter out / remove [records/customers/rows]…\"\n- \"Adjust / increase / decrease [threshold/parameter/value]…\"\n- \"Fix / bugfix / patch [issue/bug]…\"\n- \"Revert / restore / undo [change/previous behavior]…\"\n- \"Disable / enable [feature/logic/flag]…\"\n- \"Clean up / remove [references/columns/code]…\"\n- \"Implement [backend/feature] for…\"\n- \"Create [models/dbt models] for…\" (when modifying existing referenced tables)\n- \"Increase / decrease / change [max_tokens/threshold/date constant/numeric parameter]…\"\n- Any change to a hardcoded value, constant, or configuration parameter within SQL\n- \"Drop / remove / delete [column/field/table]\"\n- \"Rename [column/field] to [new name]\"\n- \"Add [column]\" (short imperative form, e.g. \"add a created_at column\")\n- Any single-verb imperative command targeting a column, table, or model\n  (e.g. \"drop X\", \"rename Y\", \"add Z\", \"remove W\")\n\nParameter changes (threshold values, date constants, numeric limits) appear\nsafe but silently change model output. Treat them the same as logic changes\nfor impact assessment purposes.\n\n**Do not write or edit any SQL until the change impact assessment (Workflow 2) has been presented to the user.** The assessment must come first — not after the edit, not in parallel.\n\n---\n\n## Pre-edit gate — check before modifying any file\n\n**Before calling Edit, Write, or MultiEdit on any `.sql` or dbt model\nfile, you MUST check:**\n\n1. Has the synthesis step been run for THIS SPECIFIC CHANGE in the\n   current prompt?\n2. **If YES** → proceed with the edit\n3. **If NO** → stop immediately, run Workflow 2, present the full\n   report with synthesis connected to this specific change.\n   **If risk is High or Medium:** ask \"Do you want me to proceed\n   with the edit?\" and wait for explicit confirmation.\n   **If risk is Low:** use judgment — proceed if straightforward\n   and no concerns found, otherwise ask before editing.\n\n**Important: \"Workflow 2 already ran this session\" is NOT sufficient\nto proceed.** Each distinct change prompt requires its own synthesis\nstep connecting the MC findings to that specific change.\n\nThe synthesis must reference the specific columns, filters, or logic\nbeing changed in the current prompt — not just general table health.\n\nExample:\n\n- ✅ \"Given 34 downstream models depend on is_paying_workspace,\n  adding 'MC Internal' to the exclusion list will exclude these\n  workspaces from all downstream health scores and exports.\n  Confirm?\"\n- ❌ \"Workflow 2 already ran. Making the edit now.\"\n\nThe only exception: if the user explicitly acknowledges the risk\nand confirms they want to skip (e.g. \"I know the risks, just make\nthe change\") — proceed but note the skipped assessment.\n\n## Available MCP tools\n\nAll tools are available via the `monte-carlo` MCP server.\n\n| Tool                         | Purpose                                                              |\n| ---------------------------- | -------------------------------------------------------------------- |\n| `testConnection`             | Verify auth and connectivity                                         |\n| `search`                     | Find tables/assets by name                                           |\n| `getTable`                   | Schema, stats, metadata for a table                                  |\n| `getAssetLineage`            | Upstream/downstream dependencies (call with mcons array + direction) |\n| `getAlerts`                  | Active incidents and alerts                                          |\n| `getMonitors`                | Monitor configs — filter by table using mcons array                  |\n| `getQueriesForTable`         | Recent query history                                                 |\n| `getQueryData`               | Full SQL for a specific query                                        |\n| `createValidationMonitorMac` | Generate validation monitors-as-code YAML                            |\n| `createMetricMonitorMac`     | Generate metric monitors-as-code YAML                                |\n| `createComparisonMonitorMac` | Generate comparison monitors-as-code YAML                            |\n| `createCustomSqlMonitorMac`  | Generate custom SQL monitors-as-code YAML                            |\n| `getValidationPredicates`    | List available validation rule types                                 |\n| `getAudiences`               | List notification audiences                                          |\n| `getDomains`                 | List MC domains                                                      |\n| `getUser`                    | Current user info                                                    |\n| `getCurrentTime`             | ISO timestamp for API calls                                          |\n\n## Core workflows\n\nEach workflow has detailed step-by-step instructions in `references/workflows.md` (Read tool).\n\n### 1. Asset health pre-fetch (silent delegation to asset-health)\n\n**When:** User expresses change intent for a table that hasn't been seen in this session.\n**What:** Invokes `monte-carlo-asset-health` via the Skill tool to gather table state (health, upstream lineage, alerts, monitors). Then makes one direct `get_asset_lineage(direction=\"DOWNSTREAM\")` call to complete the picture (asset-health only fetches upstream). The combined data is **used as input to Workflow 2**, not shown to the engineer. Two exceptions surface to the user: any disambiguation prompt, and stop-the-world signals (active critical alerts, severe staleness).\n\n### 2. Change impact assessment — REQUIRED before modifying a model\n\n**When:** Any intent to modify a dbt model's logic, columns, joins, or filters.\n**What:** Surfaces blast radius, downstream dependencies, active incidents, monitor coverage, and query exposure. Reuses asset-health's data when Workflow 1 ran earlier this session; otherwise calls `get_table` / `get_alerts` / `get_asset_lineage` / `get_monitors` directly. Produces a risk-tiered report with synthesis connecting findings to specific code recommendations.\n\n### 3. Change validation queries\n\n**When:** Explicit engineer request only (e.g. \"validate this change\", \"ready to commit\"), or via `/mc-validate run`.\n**What:** Generates 3–5 targeted SQL queries to verify the change behaved as intended. Uses Workflow 2 context — requires both impact assessment and file edit in session.\n\n### 4. Validate change in sandbox — invoked by `/mc-validate run`\n\n**When:** Only when the engineer invokes `/mc-validate run` (in any of its forms).\n\n**Pre-flight:** `run` does **not** auto-generate. If no `validation/<table>_<ts>.sql` exists for the changed model(s), abort and tell the engineer to run `/mc-validate` (or `/mc-validate generate`) first.\n\n**What:** Two-phase workflow.\n- **W4.1 — Build.** Parses `profiles.yml`, classifies the active database, detects hard-coded `database:` in the model's `{{ config() }}`, then runs `dbt build --select <model>` into the engineer's dev database. Refuses to build against shared prod. Skipped automatically for YAML/docs-only diffs and for `/mc-validate run --skip-build`.\n- **W4.2 — Execute validation queries.** Substitutes `<YOUR_DEV_DATABASE>` in Workflow-3 output with a user-confirmed value (or `--dev-db <NAME>` if supplied), runs a read-only pre-check on every query, executes via the Snowflake MCP, and reports per-query verdicts plus a consolidated summary.\n\n**Invocation matrix:**\n\n| Invocation | W3 (generate) | W4.1 (Build) | W4.2 (Execute) |\n|---|---|---|---|\n| `/mc-validate` | yes | — | — |\n| `/mc-validate generate` | yes | — | — |\n| `/mc-validate run` | no — must already exist | yes | yes |\n| `/mc-validate run --skip-build` | no — must already exist | no | yes |\n\n`run` accepts both flags together: `/mc-validate run --skip-build --dev-db <NAME>`.\n\n### 5. Add monitor (delegated to monitoring-advisor, post-edit)\n\n**When:** Post-edit hook injects the coverage prompt (driven by `MC_MONITOR_GAP` from Workflow 2), or the engineer explicitly asks to add a monitor.\n**What:** Asks \"Generate monitor definitions? (yes/no)\". On yes, invokes `monte-carlo-monitoring-advisor` via the Skill tool with the model name and changed columns/logic. Prevent's responsibility ends at delegation — it does not wait for monitoring-advisor or emit a completion marker.\n\n> **Workflow numbering note:** numbers are assigned by execution order (W1 → W2 → optional W3 → optional W4 [W4.1 + W4.2] → optional W5), not by insertion order in this file. `references/workflows.md` is the source of truth.\n\n---\n\n## Post-synthesis confirmation rules\n\nAlways end the synthesis with one clear, specific recommendation in plain English:\n\"Given the above, I recommend: [specific action]\"\n\n**If the risk is High or Medium:** STOP and wait for confirmation before editing\nany file. You must ask the engineer and receive an explicit \"yes\", \"go ahead\",\n\"proceed\", or similar confirmation before making code changes.\nSay: \"Do you want me to proceed with the edit?\"\nDo NOT say: \"Proceeding with the edit.\" — that skips the engineer's decision.\n\n**If the risk is Low:** Use your judgment based on the synthesis findings. If\nthe change is straightforward and the synthesis found no concerns, you may\nproceed. If anything is surprising or worth flagging, ask before editing.\n\n---\n\n## Session markers\n\nThese markers coordinate between the skill and the plugin's hooks. Output each\non its own line when the condition is met.\n\n### Impact check complete\n\nAfter the engineer confirms (High/Medium) or after presenting the synthesis (Low),\noutput one marker per assessed table. **IMPORTANT: use only the table/model name, not the full MCON:**\n\n<!-- MC_IMPACT_CHECK_COMPLETE: <table_name> -->\n\n(Use the model filename without .sql extension — NOT \"acme.analytics.orders\" or \"prod.public.client_hub\")\n\nHow many markers to emit depends on how the assessment was triggered:\n\n**Hook-triggered** (the pre-edit hook blocked an edit and instructed you to run\nthe assessment): Be strict — only emit markers for tables whose lineage **and**\nmonitor coverage were fetched directly via Monte Carlo tools in this session. If\nthe engineer describes changes to multiple tables but only one was formally\nassessed, emit only one marker. The pre-edit hook will gate the other tables and\nprompt for their own Workflow 2 runs.\n\n**Voluntarily invoked** (the engineer proactively asked for an impact assessment):\nBe looser — emit markers for all tables the assessment meaningfully covered, even\nif some were assessed via lineage context rather than direct MC tool calls. The\nengineer is already safety-conscious; don't force redundant assessments for tables\nthey clearly considered.\n\n### Monitor coverage gap\n\nWhen Workflow 2 finds zero custom monitors on a table's affected columns, output:\n\n<!-- MC_MONITOR_GAP: <table_name> -->\n\nUse only the table/model name (NOT the full MCON). This allows the plugin's hooks\nto remind the engineer about monitor coverage at commit time. Only output this\nmarker when the gap is specifically about the columns or logic being changed —\nnot for general table-level monitor absence.\n\nAfter the prompt is delivered, the post-edit / pre-commit hook clears the gap\nstate internally so it won't re-prompt for the same gap; if the engineer edits\nthe model again, Workflow 2 will re-evaluate from scratch and re-emit the\nmarker only if a gap still exists.\n\n### Sandbox build ran (W4.1)\n\nEmit after a successful `dbt build` in Workflow 4.1 (or after a deliberate skip\n— e.g. YAML-only diff or `--skip-build` — including the skip reason). One marker\nper model.\n\n<!-- MC_BUILD_RAN: <table_name> -->\n\n### Validation executed (W4.2)\n\nEmit after Workflow 4.2 finishes executing validation queries for a model,\nregardless of individual per-query verdicts. One marker per model.\n\n<!-- MC_VALIDATE_RAN: <table_name> -->","tags":["prevent","agent","toolkit","monte-carlo-data","agent-observability","agent-skills","ai-agents","claude-code","codex-skills","cursor","data-observability","data-quality"],"capabilities":["skill","source-monte-carlo-data","skill-prevent","topic-agent-observability","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-codex-skills","topic-cursor","topic-data-observability","topic-data-quality","topic-mcp","topic-monte-carlo","topic-opencode","topic-skill-md"],"categories":["mc-agent-toolkit"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/monte-carlo-data/mc-agent-toolkit/prevent","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add monte-carlo-data/mc-agent-toolkit","source_repo":"https://github.com/monte-carlo-data/mc-agent-toolkit","install_from":"skills.sh"}},"qualityScore":"0.489","qualityRationale":"deterministic score 0.49 from registry signals: · indexed on github topic:agent-skills · 78 github stars · SKILL.md body (16,643 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T12:55:21.976Z","embedding":null,"createdAt":"2026-04-18T22:12:53.549Z","updatedAt":"2026-05-02T12:55:21.976Z","lastSeenAt":"2026-05-02T12:55:21.976Z","tsv":"'-3':1679 '/mc-validate':29,1538,1574,1582,1615,1617,1667,1728,1730,1733,1741,1757 '1':219,253,299,324,339,408,462,591,1007,1342,1489 '2':233,264,303,331,379,432,476,658,772,963,1022,1036,1088,1166,1419,1445,1556,1792,2150,2209,2307 '3':1029,1520,1542 '34':1138 '4':1567 '4.1':2338 '4.2':2367 '5':273,1543,1765 'abort':1608 'absenc':2269 'absent':558 'accept':1753 'access':102 'acknowledg':1180 'acme.analytics.orders':2060 'action':1901 'activ':73,132,142,182,294,445,488,561,716,1246,1440,1474,1631 'ad':515,798,1146 'ad-hoc':514 'add':238,291,790,795,808,813,814,892,898,920,1766,1799 'adjust':832 'advisor':723,732,1772,1815,1840 'affect':650,2218 'afterward':276 'ahead':1929 'alert':74,388,447,1249,1388,1442,1499 'allow':2231 'alreadi':384,442,463,1089,1167,1737,1748,2190 'alter':617 'alway':1883 'analys':508 'analysi':504 'anyth':1989 'api':1325 'appear':932 'appli':774 'appropri':196 'array':1243,1258 'artifact':376 'ask':193,419,537,1054,1083,1797,1803,1920,1995,2157 'assess':17,308,382,656,751,948,961,971,1203,1448,1561,2040,2073,2093,2129,2161,2170,2177,2198 'asset':178,344,355,413,481,698,727,1343,1352,1375,1395,1405,1483,1501 'asset-health':354,412,480,726,1351,1404,1482 'assign':1851 'audienc':1312 'auth':1222 'auto':569,585,1596 'auto-context':568 'auto-fetch':584 'auto-gener':1595 'automat':198,1661 'avail':1204,1210,1305 'backend/feature':853 'bare':154 'base':1969 'behav':1551 'behavior':844 'belong':173 'blast':1470 'block':2084 'bring':45 'bugfix':837 'build':1626,1646,1656,1671,1725,1745,1761,2327,2335,2352 'call':604,992,1240,1326,1399,1495,2186 'carlo':3,40,47,177,343,495,588,697,721,1215,1374,1813,2111 'chain':328 'chang':15,150,205,214,336,614,654,749,803,826,866,872,925,936,945,959,1017,1047,1100,1114,1126,1197,1357,1446,1521,1532,1550,1569,1605,1825,1937,1976,2120,2261 'change/previous':843 'check':550,691,986,1006,1700,2023 'choos':431 'cite':385 'classifi':1629 'claud':84 'clean':848 'clear':1889,2202,2283 'code':81,85,237,1276,1284,1292,1301,1518,1636,1936 'column':210,241,295,792,816,893,902,911,1121,1464,2219,2257 'column/field':888 'column/field/table':886 'columns/logic':1826 'combin':1411 'come':973 'command':908 'commit':1535,2244,2281 'comparison':1288 'compil':607 'complet':1401,1844,2024 'concern':1080,1984 'condit':2019 'config':1252,1642 'configur':525,879 'confirm':1068,1164,1184,1685,1881,1913,1933,2028 'connect':1043,1107,1224,1514 'conscious':2193 'consid':2203 'consolid':1717 'constant':877,929 'constant/numeric':869 'context':51,310,361,570,589,718,1557,2180 'control':622 'coordin':2002 'core':1327 'cover':2172 'coverag':1477,1783,2105,2205,2242 'creat':393,700,855,900 'createcomparisonmonitormac':1286 'createcustomsqlmonitormac':1294 'createmetricmonitormac':1278 'createvalidationmonitormac':1270 'creation':35 'critic':446,1441 'current':1020,1129,1318 'custom':1296,2212 'd':800 'data':49,350,539,1412,1486 'data-gath':349 'databas':1632,1637,1653 'date':928 'db':1690,1764 'dbt':61,152,523,548,764,1001,1460,1645,2334 'dbt/sql':11 'dbt_project.yml':527 'decis':1960 'decreas':834,865 'definit':1806 'deleg':31,1349,1768,1832 'delet':885 'deliber':2342 'deliv':2274 'depend':1141,1239,1473,2069 'describ':202,2119 'descript':819 'detail':118,1332 'detect':1633 'dev':1652,1689,1763 'dev-db':1688,1762 'diff':1664,2348 'direct':52,473,1244,1393,1397,1505,2108,2183 'directori':503,509 'disabl':845 'disambigu':409,1432 'distinct':1099 'domain':1316 'downstream':1139,1159,1398,1472 'dozen':618 'driven':1785 'drop':883,916 'duplic':394,744 'e.g':289,897,915,1189,1529,2344 'earlier':468,1491 'edit':13,19,139,268,283,566,632,666,717,755,757,954,978,984,993,1028,1063,1085,1171,1564,1775,1779,1915,1947,1954,1997,2082,2086,2137,2278,2302 'edit-lifecycl':138 'editor':55 'emit':1842,2068,2097,2130,2164,2317,2330,2364 'enabl':846 'end':1830,1884 'engin':312,371,407,421,1424,1526,1580,1612,1650,1795,1922,1958,2027,2118,2155,2188,2239,2301 'english':1894 'entri':746 'evalu':2311 'even':2173 'everi':601,1702 'exampl':1136 'except':397,1175,1426 'exclud':827,1154 'exclus':1151 'execut':26,1673,1704,1727,1853,2362,2369 'exist':248,861,1602,1738,1749,2325 'explicit':1067,1179,1525,1796,1926 'export':1163 'exposur':1480 'express':147,245,335,778,1356 'extens':2058 'face':375 'feature/logic/flag':847 'fetch':586,1347,1408,2107 'file':87,93,115,123,129,155,280,499,500,505,506,526,531,545,572,576,636,990,1003,1563,1871,1917 'filenam':2055 'filter':213,828,1122,1253,1467 'find':1110,1226,1515,1973,2210 'finish':2368 'fire':444,448,640 'first':220,254,300,974,1619 'fix':836 'flag':1755,1994 'flight':1591 'forc':2196 'form':896,1588 'formal':2128 'found':1081,1982 'fresh':449,711 'full':104,367,1039,1264,2050,2228 'gap':1789,2206,2252,2285,2298,2323 'gate':565,634,985,2140 'gather':351,1382 'general':164,1133,2264 'generat':20,77,275,1271,1279,1287,1295,1541,1597,1618,1723,1731,1804 'get':1394,1496,1498,1500,1503 'getalert':1245 'getassetlineag':1237 'getaudi':1309 'getcurrenttim':1321 'getdomain':1313 'getmonitor':1250 'getqueriesfort':1259 'getquerydata':1263 'gettabl':1230 'getus':1317 'getvalidationpred':1303 'given':1137,1895 'go':1928 'hard':1635 'hard-cod':1634 'hardcod':875 'hasn':1363 'health':32,71,165,179,345,356,414,482,699,728,1135,1160,1344,1353,1376,1385,1406,1484 'healthi':690 'high':1051,1906 'high/medium':2029 'histor':623 'histori':1262 'hoc':516 'hook':269,633,639,1780,2010,2077,2083,2138,2235,2282 'hook-trigg':2076 'howev':596 'hub':2063 'identifi':646 'immedi':1033 'impact':16,307,381,655,750,947,960,1447,1560,2022,2160 'imper':895,907 'implement':852 'import':1086,2042 'incid':1247,1475 'includ':784,2353 'increas':833,864 'individu':2377 'info':1320 'inject':1781 'inlin':599 'input':1416 'insert':1867 'instruct':110,1337,2088 'intend':1553 'intent':148,337,779,1358,1456 'intern':1148,2287 'invoc':1719,1721 'invok':340,493,725,1371,1572,1581,1810,2153 'iso':1322 'issue/bug':839 'jinja':555 'join':211,1465 'judgment':1074,1968 'know':1191 'leav':83 'left':7 'let':793,811 'level':2267 'lifecycl':140 'like':786,801 'limit':931 'line':457,612,2016 'lineag':72,389,1387,1396,1502,2102,2179 'list':1152,1304,1310,1314 'live':88 'logic':825,944,1124,1463,2259 'looser':2163 'low':1072,1965,2035 'm':797 'macro':562,571,573,597,613,643 'make':1169,1195,1391,1935 'mani':2065 'marker':1845,1999,2001,2038,2066,2098,2133,2165,2249,2319,2358,2383 'match':417 'matrix':1720 'max':867 'may':1986 'mc':1109,1147,1315,1787,2184 'mcon':1242,1257,2051,2229 'mcp':99,116,1205,1216,1708 'meaning':2171 'medium':1053,1908 'mention':156,160 'met':2021 'metadata':1233 'metric':242,1280 'model':12,62,153,208,249,279,549,580,602,620,648,661,765,783,857,914,937,1002,1140,1453,1461,1606,1640,1822,2054,2304,2360,2374,2385 'models/clients/client_hub.sql':290 'models/dbt':856 'modifi':59,781,809,860,988,1451,1458 'monitor':34,79,274,390,702,708,722,731,1251,1274,1282,1290,1299,1389,1476,1504,1767,1771,1788,1801,1805,1814,1839,2104,2204,2213,2241,2268 'monitoring-advisor':730,1770,1838 'monitors-as-cod':78,1273,1281,1289,1298 'mont':2,39,46,176,342,494,587,696,720,1214,1373,1812,2110 'monte-carlo':1213 'monte-carlo-asset-health':175,341,695,1372 'monte-carlo-monitoring-advisor':719,1811 'monte-carlo-prev':1 'multiedit':996 'multipl':416,2122 'must':400,430,769,972,1005,1117,1736,1747,1919 'name':159,891,1229,1823,2047,2225 'need':313,737 'net':9 'new':209,240,890 'next':89 'note':1200,1848 'notif':1311 'number':1847,1849 'numer':930 'observ':50 'offer':271 'one':424,455,511,611,1392,1888,2037,2126,2132,2357,2382 'one-lin':610 'one-off':510 'open':595 'option':1857,1859,1863 'order':1854,1868 'otherwis':1082,1494 'output':244,402,938,1680,2011,2036,2220,2247 'packages.yml':529 'parallel':981 'paramet':117,870,880,924 'pars':1627 'part':520 'pass':162 'patch':838 'pay':1144 'peer':37,668 'peer-skil':667 'per':1712,2039,2359,2379,2384 'per-queri':1711,2378 'phase':1623 'phrase':785 'pick':423 'pictur':1403 'pipelin':65,767 'plain':1893 'plan':204,822 'plugin':2008,2233 'plus':1715 'point':747 'post':267,1774,1778,1879,2277 'post-edit':266,1773,1777,2276 'post-synthesi':1878 'pre':631,983,1346,1590,1699,2081,2136,2280 'pre-check':1698 'pre-commit':2279 'pre-edit':630,982,2080,2135 'pre-fetch':1345 'pre-flight':1589 'present':304,966,1037,2032 'prevent':4,41,135,169,680,724,1827 'proactiv':2156 'proceed':315,663,1025,1060,1075,1097,1198,1930,1944,1951,1987 'prod':1659 'prod.public.client':2062 'produc':1506 'profiles.yml':528,1628 'project':524 'prompt':288,410,1021,1101,1130,1433,1784,2145,2272,2294 'pure':346 'purpos':949,1219 'qualiti':540 'queri':23,1261,1269,1479,1523,1546,1675,1703,1713,2371,2380 'question':166,322,427 'radius':1471 'ran':464,1090,1168,1490,2328 'rather':2181 're':58,478,2293,2310,2316 're-emit':2315 're-evalu':2309 're-prompt':2292 're-run':477 'read':96,353,395,1340,1696 'read-on':1695 'readi':1533 'reason':2356 'receiv':1924 'recent':1260 'recommend':1519,1891,1899 'records/customers/rows':831 'redirect':670 'redund':484,2197 'ref':552 'refactor':215,810 'refer':86,277,556,1118 'referenc':862 'references/columns/code':851 'references/parameters.md':119 'references/troubleshooting.md':125 'references/workflows.md':111,1339,1872 'refus':1654 'regardless':2375 'relat':112,120,126 'relay':365 'relev':387 'remind':2237 'remov':830,850,884,922 'renam':805,887,918 'report':358,368,1040,1511,1710 'request':672,1527 'requir':748,1102,1449,1558 'resourc':100 'respons':319,1829 'restor':841 'return':415 'reus':1481 'revert':840 'risk':1049,1070,1182,1193,1509,1904,1963 'risk-tier':1508 'rule':251,297,1307,1882 'run':14,30,194,217,225,258,325,479,652,679,770,1013,1034,1539,1575,1583,1592,1614,1644,1668,1693,1734,1742,1752,1758,2091,2151 'safe':933 'safeti':8,2192 'safety-consci':2191 'sandbox':1571,2326 'say':452,1938,1950 'schema':823,1231 'score':1161 'scratch':2313 'script':518 'search':1225 'seed':498,502 'seen':1366 'select':1647 'sensit':628 'server':1217 'session':230,471,1092,1369,1493,1566,1998,2115 'set':709 'sever':450,1443 'share':1658 'shift':6 'shift-left':5 'short':456,894 'show':391 'shown':1421 'signal':437,1439 'silent':326,616,935,1348 'similar':627,1932 'singl':905 'single-verb':904 'skill':38,42,44,92,134,141,184,490,669,676,1379,1818,2005 'skill-prevent' 'skip':472,567,1188,1202,1660,1670,1744,1760,1956,2343,2351,2355 'skip-build':1669,1743,1759,2350 'snapshot':564,575,577,621,645 'snowflak':1707 'sourc':554,1875 'source-monte-carlo-data' 'specif':536,1016,1046,1113,1120,1268,1517,1890,1900,2254 'sql':21,64,517,754,761,882,956,999,1265,1297,1545,1601,2057 'stale':451,1444 'stat':1232 'state':1384,2286 'status':692 'step':107,109,352,1011,1106,1334,1336 'step-by-step':106,1333 'still':2324 'stop':216,434,1032,1436,1909 'stop-the-world':433,1435 'straightforward':1077,1978 'strict':2095 'substitut':1676 'success':2333 'suffici':1095 'summari':1718 'suppli':1692 'surfac':69,401,425,1427,1469 'surpris':1991 'synthesi':1010,1042,1105,1116,1513,1880,1886,1972,1981,2034 'tabl':70,158,228,261,440,467,685,863,912,1134,1236,1255,1361,1383,1497,2041,2100,2123,2143,2168,2200,2216,2266 'table-level':2265 'table-nam':157 'table/model':2046,2224 'tables/assets':1227 'target':909,1544 'tell':1610 'territori':171 'test':530 'testconnect':1220 'threshold':926 'threshold/parameter/value':835 'tier':1510 'time':608,2245 'timestamp':1323 'togeth':1756 'tokens/threshold/date':868 'tool':97,496,1206,1208,1218,1341,1380,1819,2112,2185 'topic-agent-observability' 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-codex-skills' 'topic-cursor' 'topic-data-observability' 'topic-data-quality' 'topic-mcp' 'topic-monte-carlo' 'topic-opencode' 'topic-skill-md' 'track':624 'treat':939 'trigger':2075,2078 'troubleshoot':124 'truth':1877 'two':396,1425,1622 'two-phas':1621 'type':1308 'uncertain':542 'undo':842 'unless':532 'updat':212,804 'upstream':1386,1409 'upstream/downstream':1238 'use':66,94,1073,1256,1414,1554,1966,2043,2052,2221 'user':146,201,334,374,429,534,777,969,1178,1319,1355,1430,1684 'user-confirm':1683 'user-fac':373 'valid':22,1272,1306,1522,1530,1568,1600,1674,2361,2370 'valu':876,927,1686 'verb':284,906 'verdict':1714,2381 'verifi':1221,1548 'via':28,1211,1377,1537,1705,1816,2109,2178 'voluntarili':2152 'w':923 'w1':404,739,1855 'w2':306,459,1856 'w3':1722,1858 'w4':1860 'w4.1':1625,1724,1861,2329 'w4.2':1672,1726,1862,2363 'w5':740,1864 'wait':190,1065,1836,1911 'want':788,1057,1186,1941 'whenev':199,775 'whether':543 'whose':2101 'within':881 'without':82,714,2056 'won':2290 'workflow':105,197,218,232,252,263,272,298,302,323,330,338,378,461,475,590,657,736,771,962,1035,1087,1165,1328,1330,1418,1488,1555,1624,1678,1791,1846,2149,2208,2306,2337,2366 'workspac':1145,1156 'world':436,1438 'worth':1993 'write':235,759,952,994 'x':686,689,694,704,713,917 'y':919 'yaml':1277,1285,1293,1302,2346 'yaml-on':2345 'yaml/docs-only':1663 'yes':1024,1729,1732,1739,1740,1751,1809,1927 'yes/no':1807 'yet':257 'z':921 'zero':2211","prices":[{"id":"41022e11-ec15-40c1-b0b9-0933018607f1","listingId":"1d84dd30-9673-4083-9d7e-9bdfb3686b30","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"monte-carlo-data","category":"mc-agent-toolkit","install_from":"skills.sh"},"createdAt":"2026-04-18T22:12:53.549Z"}],"sources":[{"listingId":"1d84dd30-9673-4083-9d7e-9bdfb3686b30","source":"github","sourceId":"monte-carlo-data/mc-agent-toolkit/prevent","sourceUrl":"https://github.com/monte-carlo-data/mc-agent-toolkit/tree/main/skills/prevent","isPrimary":false,"firstSeenAt":"2026-04-18T22:12:53.549Z","lastSeenAt":"2026-05-02T12:55:21.976Z"}],"details":{"listingId":"1d84dd30-9673-4083-9d7e-9bdfb3686b30","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"monte-carlo-data","slug":"prevent","github":{"repo":"monte-carlo-data/mc-agent-toolkit","stars":78,"topics":["agent-observability","agent-skills","ai-agents","claude-code","codex-skills","cursor","data-observability","data-quality","mcp","monte-carlo","opencode","skill-md","skillsmp","vscode"],"license":"apache-2.0","html_url":"https://github.com/monte-carlo-data/mc-agent-toolkit","pushed_at":"2026-04-30T23:25:43Z","description":"Official Monte Carlo toolkit for AI coding agents. Skills and plugins that bring data and agent observability — monitoring, triaging, troubleshooting, health checks  — into Claude Code, Cursor, and more.","skill_md_sha":"231506a96d50e60e2d766a01c988f9e2cbe95132","skill_md_path":"skills/prevent/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/monte-carlo-data/mc-agent-toolkit/tree/main/skills/prevent"},"layout":"multi","source":"github","category":"mc-agent-toolkit","frontmatter":{"name":"monte-carlo-prevent","description":"Shift-left safety net for dbt/SQL model edits. Runs change impact assessment before edits, generates SQL validation queries after, and executes them via `/mc-validate run`. Delegates health and monitor creation to peer skills."},"skills_sh_url":"https://skills.sh/monte-carlo-data/mc-agent-toolkit/prevent"},"updatedAt":"2026-05-02T12:55:21.976Z"}}