[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-planetscale-planetscale-vitess-safety-review":3,"mdc--jzsnvg-key":37,"related-org-planetscale-planetscale-vitess-safety-review":840,"related-repo-planetscale-planetscale-vitess-safety-review":1012},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"planetscale-vitess-safety-review","review PlanetScale Vitess database safety","Review a PlanetScale Vitess database for safe migrations, deploy requests, schema recommendations, Insights, webhooks, and operational safety.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"planetscale","PlanetScale","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fplanetscale.png",[12,16,19,22,25],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":17,"slug":18,"type":15},"Vitess","vitess",{"name":20,"slug":21,"type":15},"Audit","audit",{"name":23,"slug":24,"type":15},"Database","database",{"name":9,"slug":8,"type":15},50,"https:\u002F\u002Fgithub.com\u002Fplanetscale\u002Fskills","2026-07-27T06:07:49.140395",null,1,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Skills that help you configure and get the most out of PlanetScale","https:\u002F\u002Fgithub.com\u002Fplanetscale\u002Fskills\u002Ftree\u002FHEAD\u002F02-vitess-safety-review","---\nname: planetscale-vitess-safety-review\ndescription: Review a PlanetScale Vitess database for safe migrations, deploy requests, schema recommendations, Insights, webhooks, and operational safety.\n---\n\n# Vitess safety review\n\n## Purpose\n\nRecommend best practices for a PlanetScale Vitess database. Focus on production safety, deployability, observability, and agent-safe automation. Do not apply any changes.\n\n## Primary safety features to evaluate\n\n### Safe migrations\n\nCheck whether safe migrations are enabled on production and staging branches.\n\nRecommend enabling safe migrations when:\n\n- The branch receives production traffic.\n- The team runs DDL outside deploy requests.\n- There is no protected branch workflow.\n- The application is expected to evolve schema frequently.\n\nExplain the tradeoff: safe migrations reject direct DDL on protected branches and force schema changes through deploy requests. That is a feature, but it can break teams relying on direct production DDL. Treat enablement as a behavior-changing change requiring approval.\n\n### Deploy requests\n\nCheck:\n\n- Whether deploy requests are used for schema changes.\n- Whether administrator approval is required.\n- Whether deploy requests are reviewed for data loss, conflicts, lint errors, foreign key problems, charset issues, and shard impact.\n- Whether teams use gated deployments for cutover control.\n- Whether “deploy instantly” is used and whether the team understands it removes the gated-deployment\u002Frevert shape.\n- Whether cutover is regularly delayed by long-running transactions.\n- Whether deploy request events are subscribed to via webhooks.\n\nRecommend:\n\n- Require deploy requests for production schema changes.\n- Enable administrator approval for production deploy requests when there is more than one administrator.\n- In a single-admin organization, administrator approval does not stop an agent that acts as that admin:\n  the admin who opens a deploy request can also approve it. If the goal is to keep agents from\n  self-approving, give the agent a separate user, or a service token without deploy request\n  approval permission.\n- Prefer normal safe deployments over instant deployments unless the migration is known to be instant-safe and the rollback story is acceptable.\n- Use gated deployment when cutover timing matters.\n- Treat “force cutover now” as an operator-controlled action for delayed\n  cutovers: it aggressively stops running transactions to complete schema\n  cutover. Recommend reviewing the blocking workload and incident context\n  before use, and only recommend the database-level aggressive cutover default\n  when frequent cutover blocking is understood and accepted.\n\n### Schema revert\n\nCheck whether the team knows the revert window and whether their incident runbook includes it.\n\nRecommend documenting:\n\n- How to identify a bad schema migration.\n- How to revert within the supported window.\n- Who is authorized to revert.\n- Which application deploy should be rolled back together with the schema revert.\n\n### Branch strategy\n\nRecommend a branch topology:\n\n- `main` or equivalent production branch with safe migrations enabled.\n- `staging` branch based from production with safe migrations enabled.\n- Short-lived development branches based from staging.\n- Deploy requests from development to staging, then staging to production when appropriate.\n\nDo not create branches without approval.\n\n### Query Insights\n\nReview Insights for:\n\n- Slow queries.\n- Queries reading too many rows.\n- Erroring queries.\n- Queries with poor index usage.\n- For sharded databases, whether query patterns use relevant vindexes and how\n  vindex usage changes after index or routing changes.\n- Unusual query volume.\n- Missing SQL comment tags.\n- Tag breakdowns when built-in metadata or SQLCommenter tags are present:\n  `tag:key:value` filtering in the dashboard, and the `insights\u002Ftags` and\n  `insights\u002Ftags\u002Fsummaries` API endpoints for programmatic breakdowns.\n- Deploy correlation data.\n\nRecommend enabling or improving application query tagging so Insights can attribute queries to app, route, controller, action, job, deployment SHA, and feature.\n\n### Anomalies\n\nReview active and recent anomalies.\n\nRecommend:\n\n- Subscribe `branch.anomaly` webhooks to the team’s alerting or automation system.\n- Route anomaly payloads to a triage workflow that opens an issue or agent task.\n- Correlate anomalies with deploy requests, application deploys, and query tags.\n- Do not automatically apply schema or code changes from anomaly events; generate a proposal or PR only.\n\n### Schema recommendations\n\nReview open schema recommendations.\n\nFor each recommendation, capture:\n\n- Type: add index, remove redundant index, primary key exhaustion, unused table, legacy charset\u002Fcollation, or other.\n- Affected table and keyspace.\n- Supporting query telemetry.\n- DDL.\n- Expected benefit.\n- Risk.\n- Test plan.\n\nRecommend implementation path:\n\n- Convert the recommendation into an application migration or PlanetScale branch schema change.\n- Open a deploy request.\n- Review generated DDL and shard impact.\n- Benchmark or validate on a branch.\n- Deploy with safe migrations.\n- Monitor Insights and anomaly state after deployment.\n\nDo not apply recommendations directly.\n\n### Backups and restore\n\nCheck backup posture and restore runbooks.\n\nRecommend:\n\n- Verify automated backups exist.\n- Run a non-production restore drill periodically.\n- Document restore target, RPO\u002FRTO expectation, and application cutover plan.\n- For sharded databases, document shard-aware restore expectations.\n\n### Sharding and keyspace safety\n\nIf the database is sharded, review:\n\n- Keyspaces and shards.\n- Vschema.\n- Cross-shard query patterns.\n- Whether schema deploy requests show per-shard impact.\n- Whether queries use shard-friendly access paths.\n\nRecommend an agent-safe sharding review only as a proposal. Never reshard, change vschema, or alter routing automatically.\n\n## Webhook recommendations for Vitess\n\nEvaluate and recommend webhooks for:\n\n- `branch.anomaly`\n- `branch.primary_promoted`\n- `branch.ready`\n- `branch.sleeping`\n- `cluster.storage`\n- `keyspace.storage`\n- `deploy_request.opened`\n- `deploy_request.queued`\n- `deploy_request.in_progress`\n- `deploy_request.pending_cutover`\n- `deploy_request.schema_applied`\n- `deploy_request.errored`\n- `deploy_request.reverted`\n- `deploy_request.closed`\n- `branch.schema_recommendation` if available in the webhook API for the customer’s database\n\nRecommended destinations:\n\n- Alerting for anomaly, primary promotion, storage, and deploy errors.\n- Slack or internal notifications for deploy request lifecycle.\n- Agent intake queue for schema recommendations and anomalies, with PR-only output by default.\n\n## Output\n\nReturn:\n\n- Current Vitess safety posture.\n- Missing safety features.\n- Recommended workflow.\n- Recommended webhook subscriptions.\n- Schema recommendation triage table.\n- Deploy safety gaps.\n- Proposed changes requiring approval.\n\nEnd with:\n\n“No Vitess changes have been applied.”\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,51,58,64,70,77,82,87,112,117,123,128,166,171,204,210,215,220,243,249,254,290,295,301,306,378,383,389,394,398,429,435,440,445,483,488,521,526,532,537,541,564,570,575,603,608,614,619,758,763,781,787,792,830,835],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"vitess-safety-review",[48],{"type":49,"value":50},"text","Vitess safety review",{"type":43,"tag":52,"props":53,"children":55},"h2",{"id":54},"purpose",[56],{"type":49,"value":57},"Purpose",{"type":43,"tag":59,"props":60,"children":61},"p",{},[62],{"type":49,"value":63},"Recommend best practices for a PlanetScale Vitess database. Focus on production safety, deployability, observability, and agent-safe automation. Do not apply any changes.",{"type":43,"tag":52,"props":65,"children":67},{"id":66},"primary-safety-features-to-evaluate",[68],{"type":49,"value":69},"Primary safety features to evaluate",{"type":43,"tag":71,"props":72,"children":74},"h3",{"id":73},"safe-migrations",[75],{"type":49,"value":76},"Safe migrations",{"type":43,"tag":59,"props":78,"children":79},{},[80],{"type":49,"value":81},"Check whether safe migrations are enabled on production and staging branches.",{"type":43,"tag":59,"props":83,"children":84},{},[85],{"type":49,"value":86},"Recommend enabling safe migrations when:",{"type":43,"tag":88,"props":89,"children":90},"ul",{},[91,97,102,107],{"type":43,"tag":92,"props":93,"children":94},"li",{},[95],{"type":49,"value":96},"The branch receives production traffic.",{"type":43,"tag":92,"props":98,"children":99},{},[100],{"type":49,"value":101},"The team runs DDL outside deploy requests.",{"type":43,"tag":92,"props":103,"children":104},{},[105],{"type":49,"value":106},"There is no protected branch workflow.",{"type":43,"tag":92,"props":108,"children":109},{},[110],{"type":49,"value":111},"The application is expected to evolve schema frequently.",{"type":43,"tag":59,"props":113,"children":114},{},[115],{"type":49,"value":116},"Explain the tradeoff: safe migrations reject direct DDL on protected branches and force schema changes through deploy requests. That is a feature, but it can break teams relying on direct production DDL. Treat enablement as a behavior-changing change requiring approval.",{"type":43,"tag":71,"props":118,"children":120},{"id":119},"deploy-requests",[121],{"type":49,"value":122},"Deploy requests",{"type":43,"tag":59,"props":124,"children":125},{},[126],{"type":49,"value":127},"Check:",{"type":43,"tag":88,"props":129,"children":130},{},[131,136,141,146,151,156,161],{"type":43,"tag":92,"props":132,"children":133},{},[134],{"type":49,"value":135},"Whether deploy requests are used for schema changes.",{"type":43,"tag":92,"props":137,"children":138},{},[139],{"type":49,"value":140},"Whether administrator approval is required.",{"type":43,"tag":92,"props":142,"children":143},{},[144],{"type":49,"value":145},"Whether deploy requests are reviewed for data loss, conflicts, lint errors, foreign key problems, charset issues, and shard impact.",{"type":43,"tag":92,"props":147,"children":148},{},[149],{"type":49,"value":150},"Whether teams use gated deployments for cutover control.",{"type":43,"tag":92,"props":152,"children":153},{},[154],{"type":49,"value":155},"Whether “deploy instantly” is used and whether the team understands it removes the gated-deployment\u002Frevert shape.",{"type":43,"tag":92,"props":157,"children":158},{},[159],{"type":49,"value":160},"Whether cutover is regularly delayed by long-running transactions.",{"type":43,"tag":92,"props":162,"children":163},{},[164],{"type":49,"value":165},"Whether deploy request events are subscribed to via webhooks.",{"type":43,"tag":59,"props":167,"children":168},{},[169],{"type":49,"value":170},"Recommend:",{"type":43,"tag":88,"props":172,"children":173},{},[174,179,184,189,194,199],{"type":43,"tag":92,"props":175,"children":176},{},[177],{"type":49,"value":178},"Require deploy requests for production schema changes.",{"type":43,"tag":92,"props":180,"children":181},{},[182],{"type":49,"value":183},"Enable administrator approval for production deploy requests when there is more than one administrator.",{"type":43,"tag":92,"props":185,"children":186},{},[187],{"type":49,"value":188},"In a single-admin organization, administrator approval does not stop an agent that acts as that admin:\nthe admin who opens a deploy request can also approve it. If the goal is to keep agents from\nself-approving, give the agent a separate user, or a service token without deploy request\napproval permission.",{"type":43,"tag":92,"props":190,"children":191},{},[192],{"type":49,"value":193},"Prefer normal safe deployments over instant deployments unless the migration is known to be instant-safe and the rollback story is acceptable.",{"type":43,"tag":92,"props":195,"children":196},{},[197],{"type":49,"value":198},"Use gated deployment when cutover timing matters.",{"type":43,"tag":92,"props":200,"children":201},{},[202],{"type":49,"value":203},"Treat “force cutover now” as an operator-controlled action for delayed\ncutovers: it aggressively stops running transactions to complete schema\ncutover. Recommend reviewing the blocking workload and incident context\nbefore use, and only recommend the database-level aggressive cutover default\nwhen frequent cutover blocking is understood and accepted.",{"type":43,"tag":71,"props":205,"children":207},{"id":206},"schema-revert",[208],{"type":49,"value":209},"Schema revert",{"type":43,"tag":59,"props":211,"children":212},{},[213],{"type":49,"value":214},"Check whether the team knows the revert window and whether their incident runbook includes it.",{"type":43,"tag":59,"props":216,"children":217},{},[218],{"type":49,"value":219},"Recommend documenting:",{"type":43,"tag":88,"props":221,"children":222},{},[223,228,233,238],{"type":43,"tag":92,"props":224,"children":225},{},[226],{"type":49,"value":227},"How to identify a bad schema migration.",{"type":43,"tag":92,"props":229,"children":230},{},[231],{"type":49,"value":232},"How to revert within the supported window.",{"type":43,"tag":92,"props":234,"children":235},{},[236],{"type":49,"value":237},"Who is authorized to revert.",{"type":43,"tag":92,"props":239,"children":240},{},[241],{"type":49,"value":242},"Which application deploy should be rolled back together with the schema revert.",{"type":43,"tag":71,"props":244,"children":246},{"id":245},"branch-strategy",[247],{"type":49,"value":248},"Branch strategy",{"type":43,"tag":59,"props":250,"children":251},{},[252],{"type":49,"value":253},"Recommend a branch topology:",{"type":43,"tag":88,"props":255,"children":256},{},[257,269,280,285],{"type":43,"tag":92,"props":258,"children":259},{},[260,267],{"type":43,"tag":261,"props":262,"children":264},"code",{"className":263},[],[265],{"type":49,"value":266},"main",{"type":49,"value":268}," or equivalent production branch with safe migrations enabled.",{"type":43,"tag":92,"props":270,"children":271},{},[272,278],{"type":43,"tag":261,"props":273,"children":275},{"className":274},[],[276],{"type":49,"value":277},"staging",{"type":49,"value":279}," branch based from production with safe migrations enabled.",{"type":43,"tag":92,"props":281,"children":282},{},[283],{"type":49,"value":284},"Short-lived development branches based from staging.",{"type":43,"tag":92,"props":286,"children":287},{},[288],{"type":49,"value":289},"Deploy requests from development to staging, then staging to production when appropriate.",{"type":43,"tag":59,"props":291,"children":292},{},[293],{"type":49,"value":294},"Do not create branches without approval.",{"type":43,"tag":71,"props":296,"children":298},{"id":297},"query-insights",[299],{"type":49,"value":300},"Query Insights",{"type":43,"tag":59,"props":302,"children":303},{},[304],{"type":49,"value":305},"Review Insights for:",{"type":43,"tag":88,"props":307,"children":308},{},[309,314,319,324,329,334,339,344,373],{"type":43,"tag":92,"props":310,"children":311},{},[312],{"type":49,"value":313},"Slow queries.",{"type":43,"tag":92,"props":315,"children":316},{},[317],{"type":49,"value":318},"Queries reading too many rows.",{"type":43,"tag":92,"props":320,"children":321},{},[322],{"type":49,"value":323},"Erroring queries.",{"type":43,"tag":92,"props":325,"children":326},{},[327],{"type":49,"value":328},"Queries with poor index usage.",{"type":43,"tag":92,"props":330,"children":331},{},[332],{"type":49,"value":333},"For sharded databases, whether query patterns use relevant vindexes and how\nvindex usage changes after index or routing changes.",{"type":43,"tag":92,"props":335,"children":336},{},[337],{"type":49,"value":338},"Unusual query volume.",{"type":43,"tag":92,"props":340,"children":341},{},[342],{"type":49,"value":343},"Missing SQL comment tags.",{"type":43,"tag":92,"props":345,"children":346},{},[347,349,355,357,363,365,371],{"type":49,"value":348},"Tag breakdowns when built-in metadata or SQLCommenter tags are present:\n",{"type":43,"tag":261,"props":350,"children":352},{"className":351},[],[353],{"type":49,"value":354},"tag:key:value",{"type":49,"value":356}," filtering in the dashboard, and the ",{"type":43,"tag":261,"props":358,"children":360},{"className":359},[],[361],{"type":49,"value":362},"insights\u002Ftags",{"type":49,"value":364}," and\n",{"type":43,"tag":261,"props":366,"children":368},{"className":367},[],[369],{"type":49,"value":370},"insights\u002Ftags\u002Fsummaries",{"type":49,"value":372}," API endpoints for programmatic breakdowns.",{"type":43,"tag":92,"props":374,"children":375},{},[376],{"type":49,"value":377},"Deploy correlation data.",{"type":43,"tag":59,"props":379,"children":380},{},[381],{"type":49,"value":382},"Recommend enabling or improving application query tagging so Insights can attribute queries to app, route, controller, action, job, deployment SHA, and feature.",{"type":43,"tag":71,"props":384,"children":386},{"id":385},"anomalies",[387],{"type":49,"value":388},"Anomalies",{"type":43,"tag":59,"props":390,"children":391},{},[392],{"type":49,"value":393},"Review active and recent anomalies.",{"type":43,"tag":59,"props":395,"children":396},{},[397],{"type":49,"value":170},{"type":43,"tag":88,"props":399,"children":400},{},[401,414,419,424],{"type":43,"tag":92,"props":402,"children":403},{},[404,406,412],{"type":49,"value":405},"Subscribe ",{"type":43,"tag":261,"props":407,"children":409},{"className":408},[],[410],{"type":49,"value":411},"branch.anomaly",{"type":49,"value":413}," webhooks to the team’s alerting or automation system.",{"type":43,"tag":92,"props":415,"children":416},{},[417],{"type":49,"value":418},"Route anomaly payloads to a triage workflow that opens an issue or agent task.",{"type":43,"tag":92,"props":420,"children":421},{},[422],{"type":49,"value":423},"Correlate anomalies with deploy requests, application deploys, and query tags.",{"type":43,"tag":92,"props":425,"children":426},{},[427],{"type":49,"value":428},"Do not automatically apply schema or code changes from anomaly events; generate a proposal or PR only.",{"type":43,"tag":71,"props":430,"children":432},{"id":431},"schema-recommendations",[433],{"type":49,"value":434},"Schema recommendations",{"type":43,"tag":59,"props":436,"children":437},{},[438],{"type":49,"value":439},"Review open schema recommendations.",{"type":43,"tag":59,"props":441,"children":442},{},[443],{"type":49,"value":444},"For each recommendation, capture:",{"type":43,"tag":88,"props":446,"children":447},{},[448,453,458,463,468,473,478],{"type":43,"tag":92,"props":449,"children":450},{},[451],{"type":49,"value":452},"Type: add index, remove redundant index, primary key exhaustion, unused table, legacy charset\u002Fcollation, or other.",{"type":43,"tag":92,"props":454,"children":455},{},[456],{"type":49,"value":457},"Affected table and keyspace.",{"type":43,"tag":92,"props":459,"children":460},{},[461],{"type":49,"value":462},"Supporting query telemetry.",{"type":43,"tag":92,"props":464,"children":465},{},[466],{"type":49,"value":467},"DDL.",{"type":43,"tag":92,"props":469,"children":470},{},[471],{"type":49,"value":472},"Expected benefit.",{"type":43,"tag":92,"props":474,"children":475},{},[476],{"type":49,"value":477},"Risk.",{"type":43,"tag":92,"props":479,"children":480},{},[481],{"type":49,"value":482},"Test plan.",{"type":43,"tag":59,"props":484,"children":485},{},[486],{"type":49,"value":487},"Recommend implementation path:",{"type":43,"tag":88,"props":489,"children":490},{},[491,496,501,506,511,516],{"type":43,"tag":92,"props":492,"children":493},{},[494],{"type":49,"value":495},"Convert the recommendation into an application migration or PlanetScale branch schema change.",{"type":43,"tag":92,"props":497,"children":498},{},[499],{"type":49,"value":500},"Open a deploy request.",{"type":43,"tag":92,"props":502,"children":503},{},[504],{"type":49,"value":505},"Review generated DDL and shard impact.",{"type":43,"tag":92,"props":507,"children":508},{},[509],{"type":49,"value":510},"Benchmark or validate on a branch.",{"type":43,"tag":92,"props":512,"children":513},{},[514],{"type":49,"value":515},"Deploy with safe migrations.",{"type":43,"tag":92,"props":517,"children":518},{},[519],{"type":49,"value":520},"Monitor Insights and anomaly state after deployment.",{"type":43,"tag":59,"props":522,"children":523},{},[524],{"type":49,"value":525},"Do not apply recommendations directly.",{"type":43,"tag":71,"props":527,"children":529},{"id":528},"backups-and-restore",[530],{"type":49,"value":531},"Backups and restore",{"type":43,"tag":59,"props":533,"children":534},{},[535],{"type":49,"value":536},"Check backup posture and restore runbooks.",{"type":43,"tag":59,"props":538,"children":539},{},[540],{"type":49,"value":170},{"type":43,"tag":88,"props":542,"children":543},{},[544,549,554,559],{"type":43,"tag":92,"props":545,"children":546},{},[547],{"type":49,"value":548},"Verify automated backups exist.",{"type":43,"tag":92,"props":550,"children":551},{},[552],{"type":49,"value":553},"Run a non-production restore drill periodically.",{"type":43,"tag":92,"props":555,"children":556},{},[557],{"type":49,"value":558},"Document restore target, RPO\u002FRTO expectation, and application cutover plan.",{"type":43,"tag":92,"props":560,"children":561},{},[562],{"type":49,"value":563},"For sharded databases, document shard-aware restore expectations.",{"type":43,"tag":71,"props":565,"children":567},{"id":566},"sharding-and-keyspace-safety",[568],{"type":49,"value":569},"Sharding and keyspace safety",{"type":43,"tag":59,"props":571,"children":572},{},[573],{"type":49,"value":574},"If the database is sharded, review:",{"type":43,"tag":88,"props":576,"children":577},{},[578,583,588,593,598],{"type":43,"tag":92,"props":579,"children":580},{},[581],{"type":49,"value":582},"Keyspaces and shards.",{"type":43,"tag":92,"props":584,"children":585},{},[586],{"type":49,"value":587},"Vschema.",{"type":43,"tag":92,"props":589,"children":590},{},[591],{"type":49,"value":592},"Cross-shard query patterns.",{"type":43,"tag":92,"props":594,"children":595},{},[596],{"type":49,"value":597},"Whether schema deploy requests show per-shard impact.",{"type":43,"tag":92,"props":599,"children":600},{},[601],{"type":49,"value":602},"Whether queries use shard-friendly access paths.",{"type":43,"tag":59,"props":604,"children":605},{},[606],{"type":49,"value":607},"Recommend an agent-safe sharding review only as a proposal. Never reshard, change vschema, or alter routing automatically.",{"type":43,"tag":52,"props":609,"children":611},{"id":610},"webhook-recommendations-for-vitess",[612],{"type":49,"value":613},"Webhook recommendations for Vitess",{"type":43,"tag":59,"props":615,"children":616},{},[617],{"type":49,"value":618},"Evaluate and recommend webhooks for:",{"type":43,"tag":88,"props":620,"children":621},{},[622,630,639,648,657,666,675,684,693,702,711,720,729,738,747],{"type":43,"tag":92,"props":623,"children":624},{},[625],{"type":43,"tag":261,"props":626,"children":628},{"className":627},[],[629],{"type":49,"value":411},{"type":43,"tag":92,"props":631,"children":632},{},[633],{"type":43,"tag":261,"props":634,"children":636},{"className":635},[],[637],{"type":49,"value":638},"branch.primary_promoted",{"type":43,"tag":92,"props":640,"children":641},{},[642],{"type":43,"tag":261,"props":643,"children":645},{"className":644},[],[646],{"type":49,"value":647},"branch.ready",{"type":43,"tag":92,"props":649,"children":650},{},[651],{"type":43,"tag":261,"props":652,"children":654},{"className":653},[],[655],{"type":49,"value":656},"branch.sleeping",{"type":43,"tag":92,"props":658,"children":659},{},[660],{"type":43,"tag":261,"props":661,"children":663},{"className":662},[],[664],{"type":49,"value":665},"cluster.storage",{"type":43,"tag":92,"props":667,"children":668},{},[669],{"type":43,"tag":261,"props":670,"children":672},{"className":671},[],[673],{"type":49,"value":674},"keyspace.storage",{"type":43,"tag":92,"props":676,"children":677},{},[678],{"type":43,"tag":261,"props":679,"children":681},{"className":680},[],[682],{"type":49,"value":683},"deploy_request.opened",{"type":43,"tag":92,"props":685,"children":686},{},[687],{"type":43,"tag":261,"props":688,"children":690},{"className":689},[],[691],{"type":49,"value":692},"deploy_request.queued",{"type":43,"tag":92,"props":694,"children":695},{},[696],{"type":43,"tag":261,"props":697,"children":699},{"className":698},[],[700],{"type":49,"value":701},"deploy_request.in_progress",{"type":43,"tag":92,"props":703,"children":704},{},[705],{"type":43,"tag":261,"props":706,"children":708},{"className":707},[],[709],{"type":49,"value":710},"deploy_request.pending_cutover",{"type":43,"tag":92,"props":712,"children":713},{},[714],{"type":43,"tag":261,"props":715,"children":717},{"className":716},[],[718],{"type":49,"value":719},"deploy_request.schema_applied",{"type":43,"tag":92,"props":721,"children":722},{},[723],{"type":43,"tag":261,"props":724,"children":726},{"className":725},[],[727],{"type":49,"value":728},"deploy_request.errored",{"type":43,"tag":92,"props":730,"children":731},{},[732],{"type":43,"tag":261,"props":733,"children":735},{"className":734},[],[736],{"type":49,"value":737},"deploy_request.reverted",{"type":43,"tag":92,"props":739,"children":740},{},[741],{"type":43,"tag":261,"props":742,"children":744},{"className":743},[],[745],{"type":49,"value":746},"deploy_request.closed",{"type":43,"tag":92,"props":748,"children":749},{},[750,756],{"type":43,"tag":261,"props":751,"children":753},{"className":752},[],[754],{"type":49,"value":755},"branch.schema_recommendation",{"type":49,"value":757}," if available in the webhook API for the customer’s database",{"type":43,"tag":59,"props":759,"children":760},{},[761],{"type":49,"value":762},"Recommended destinations:",{"type":43,"tag":88,"props":764,"children":765},{},[766,771,776],{"type":43,"tag":92,"props":767,"children":768},{},[769],{"type":49,"value":770},"Alerting for anomaly, primary promotion, storage, and deploy errors.",{"type":43,"tag":92,"props":772,"children":773},{},[774],{"type":49,"value":775},"Slack or internal notifications for deploy request lifecycle.",{"type":43,"tag":92,"props":777,"children":778},{},[779],{"type":49,"value":780},"Agent intake queue for schema recommendations and anomalies, with PR-only output by default.",{"type":43,"tag":52,"props":782,"children":784},{"id":783},"output",[785],{"type":49,"value":786},"Output",{"type":43,"tag":59,"props":788,"children":789},{},[790],{"type":49,"value":791},"Return:",{"type":43,"tag":88,"props":793,"children":794},{},[795,800,805,810,815,820,825],{"type":43,"tag":92,"props":796,"children":797},{},[798],{"type":49,"value":799},"Current Vitess safety posture.",{"type":43,"tag":92,"props":801,"children":802},{},[803],{"type":49,"value":804},"Missing safety features.",{"type":43,"tag":92,"props":806,"children":807},{},[808],{"type":49,"value":809},"Recommended workflow.",{"type":43,"tag":92,"props":811,"children":812},{},[813],{"type":49,"value":814},"Recommended webhook subscriptions.",{"type":43,"tag":92,"props":816,"children":817},{},[818],{"type":49,"value":819},"Schema recommendation triage table.",{"type":43,"tag":92,"props":821,"children":822},{},[823],{"type":49,"value":824},"Deploy safety gaps.",{"type":43,"tag":92,"props":826,"children":827},{},[828],{"type":49,"value":829},"Proposed changes requiring approval.",{"type":43,"tag":59,"props":831,"children":832},{},[833],{"type":49,"value":834},"End with:",{"type":43,"tag":59,"props":836,"children":837},{},[838],{"type":49,"value":839},"“No Vitess changes have been applied.”",{"items":841,"total":1011},[842,863,876,887,898,914,925,940,956,973,985,998],{"slug":843,"name":843,"fn":844,"description":845,"org":846,"tags":847,"stars":860,"repoUrl":861,"updatedAt":862},"mysql","plan and optimize MySQL database schemas","Plan and review MySQL\u002FInnoDB schema, indexing, query tuning, transactions, and operations. Use when creating or modifying MySQL tables, indexes, or queries; diagnosing slow\u002Flocking behavior; planning migrations; or troubleshooting replication and connection issues. Load when using a MySQL database.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[848,851,852,854,857],{"name":849,"slug":850,"type":15},"Data Modeling","data-modeling",{"name":23,"slug":24,"type":15},{"name":853,"slug":843,"type":15},"MySQL",{"name":855,"slug":856,"type":15},"Performance","performance",{"name":858,"slug":859,"type":15},"SQL","sql",557,"https:\u002F\u002Fgithub.com\u002Fplanetscale\u002Fdatabase-skills","2026-04-06T18:43:45.381961",{"slug":864,"name":864,"fn":865,"description":866,"org":867,"tags":868,"stars":860,"repoUrl":861,"updatedAt":875},"neki","manage sharded PostgreSQL with Neki","Overview and information about Neki, the sharded Postgres product by PlanetScale. Load when working with Neki-related tasks and the need to scale or shard postgres. Load when facing Postgres scaling or sharding issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[869,870,871,872],{"name":23,"slug":24,"type":15},{"name":855,"slug":856,"type":15},{"name":9,"slug":8,"type":15},{"name":873,"slug":874,"type":15},"PostgreSQL","postgresql","2026-07-24T05:38:09.09841",{"slug":877,"name":877,"fn":878,"description":879,"org":880,"tags":881,"stars":860,"repoUrl":861,"updatedAt":886},"postgres","optimize PostgreSQL database performance","PostgreSQL best practices, query optimization, connection troubleshooting, and performance improvement. Load when working with Postgres databases.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[882,883,884,885],{"name":23,"slug":24,"type":15},{"name":855,"slug":856,"type":15},{"name":873,"slug":874,"type":15},{"name":858,"slug":859,"type":15},"2026-04-06T18:43:44.126777",{"slug":18,"name":18,"fn":888,"description":889,"org":890,"tags":891,"stars":860,"repoUrl":861,"updatedAt":897},"optimize Vitess database performance and sharding","Vitess best practices, query optimization, and connection troubleshooting for PlanetScale Vitess databases. Load when working with Vitess databases, sharding, VSchema configuration, keyspace management, or MySQL scaling issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[892,893,894,895,896],{"name":23,"slug":24,"type":15},{"name":855,"slug":856,"type":15},{"name":9,"slug":8,"type":15},{"name":858,"slug":859,"type":15},{"name":17,"slug":18,"type":15},"2026-04-06T18:43:42.890969",{"slug":899,"name":899,"fn":900,"description":901,"org":902,"tags":903,"stars":26,"repoUrl":27,"updatedAt":913},"planetscale-autonomous-execution-mode","execute autonomous PlanetScale database changes","Execute approved PlanetScale changes end-to-end without per-step approval when the operator has explicitly acknowledged the risk. Defines the risk-acknowledgment contract, scoped autonomy levels, sensible execution ordering, continuous status reporting, halt conditions, and rollback discipline. Extremely safe, very enabling.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[904,907,908,909,910],{"name":905,"slug":906,"type":15},"Automation","automation",{"name":23,"slug":24,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":911,"slug":912,"type":15},"Risk Assessment","risk-assessment","2026-07-05T06:32:41.490537",{"slug":915,"name":915,"fn":916,"description":917,"org":918,"tags":919,"stars":26,"repoUrl":27,"updatedAt":924},"planetscale-best-practices-matrix","evaluate PlanetScale best practices feature matrix","A concise feature matrix for deciding which PlanetScale safety, observability, and automation recommendations apply by engine.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[920,921,922,923],{"name":905,"slug":906,"type":15},{"name":23,"slug":24,"type":15},{"name":855,"slug":856,"type":15},{"name":9,"slug":8,"type":15},"2026-07-27T06:07:48.188419",{"slug":926,"name":926,"fn":927,"description":928,"org":929,"tags":930,"stars":26,"repoUrl":27,"updatedAt":939},"planetscale-change-gates-and-approval-contract","enforce approval gates for database mutations","Enforce explicit approval gates for any PlanetScale, database, repository, credential, network, or automation mutation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[931,934,935,938],{"name":932,"slug":933,"type":15},"Approvals","approvals",{"name":23,"slug":24,"type":15},{"name":936,"slug":937,"type":15},"Governance","governance",{"name":9,"slug":8,"type":15},"2026-07-07T06:38:42.512288",{"slug":941,"name":941,"fn":942,"description":943,"org":944,"tags":945,"stars":26,"repoUrl":27,"updatedAt":955},"planetscale-codebase-sqlcommenter-instrumentation","instrument PlanetScale applications with SQLCommenter","Inspect an application repository connected to PlanetScale and recommend SQLCommenter-compatible query tagging packages and conventions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[946,949,950,953,954],{"name":947,"slug":948,"type":15},"Code Analysis","code-analysis",{"name":23,"slug":24,"type":15},{"name":951,"slug":952,"type":15},"Observability","observability",{"name":9,"slug":8,"type":15},{"name":858,"slug":859,"type":15},"2026-07-07T06:38:43.813568",{"slug":957,"name":957,"fn":958,"description":959,"org":960,"tags":961,"stars":26,"repoUrl":27,"updatedAt":972},"planetscale-customer-report-template","generate PlanetScale best practices reports","Produce the final PlanetScale best-practices report after running the inventory and relevant review skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[962,965,966,969],{"name":963,"slug":964,"type":15},"Documentation","documentation",{"name":9,"slug":8,"type":15},{"name":967,"slug":968,"type":15},"Reporting","reporting",{"name":970,"slug":971,"type":15},"Templates","templates","2026-07-07T06:38:37.362061",{"slug":974,"name":974,"fn":975,"description":976,"org":977,"tags":978,"stars":26,"repoUrl":27,"updatedAt":984},"planetscale-mcp-agent-operating-model","configure safe PlanetScale MCP agent behavior","Configure safe agent behavior around PlanetScale MCP, Insights, schema recommendations, and repository work without autonomous production mutation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[979,982,983],{"name":980,"slug":981,"type":15},"MCP","mcp",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-07-07T06:38:38.675213",{"slug":986,"name":986,"fn":987,"description":988,"org":989,"tags":990,"stars":26,"repoUrl":27,"updatedAt":997},"planetscale-postgres-safety-review","review PlanetScale Postgres safety and configuration","Review PlanetScale Postgres for Traffic Control, query tags, roles, pg_strict, backups\u002FPITR, private connectivity, webhooks, branches, and safe agent operation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[991,992,993,994],{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":873,"slug":874,"type":15},{"name":995,"slug":996,"type":15},"Security","security","2026-07-07T06:38:34.75135",{"slug":999,"name":999,"fn":1000,"description":1001,"org":1002,"tags":1003,"stars":26,"repoUrl":27,"updatedAt":1010},"planetscale-pscale-cli-automation","automate PlanetScale CLI operations","Use the PlanetScale CLI (pscale) from automated agents with --format json, auth check, pscale sql, and per-command --force. Run before other PlanetScale skills when driving pscale directly. Use when the user asks to automate pscale, run CLI commands headless, or verify pscale auth from an agent.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1004,1005,1008,1009],{"name":905,"slug":906,"type":15},{"name":1006,"slug":1007,"type":15},"CLI","cli",{"name":23,"slug":24,"type":15},{"name":9,"slug":8,"type":15},"2026-07-07T06:38:33.465495",19,{"items":1013,"total":1064},[1014,1022,1029,1036,1044,1051,1057],{"slug":899,"name":899,"fn":900,"description":901,"org":1015,"tags":1016,"stars":26,"repoUrl":27,"updatedAt":913},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1017,1018,1019,1020,1021],{"name":905,"slug":906,"type":15},{"name":23,"slug":24,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":911,"slug":912,"type":15},{"slug":915,"name":915,"fn":916,"description":917,"org":1023,"tags":1024,"stars":26,"repoUrl":27,"updatedAt":924},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1025,1026,1027,1028],{"name":905,"slug":906,"type":15},{"name":23,"slug":24,"type":15},{"name":855,"slug":856,"type":15},{"name":9,"slug":8,"type":15},{"slug":926,"name":926,"fn":927,"description":928,"org":1030,"tags":1031,"stars":26,"repoUrl":27,"updatedAt":939},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1032,1033,1034,1035],{"name":932,"slug":933,"type":15},{"name":23,"slug":24,"type":15},{"name":936,"slug":937,"type":15},{"name":9,"slug":8,"type":15},{"slug":941,"name":941,"fn":942,"description":943,"org":1037,"tags":1038,"stars":26,"repoUrl":27,"updatedAt":955},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1039,1040,1041,1042,1043],{"name":947,"slug":948,"type":15},{"name":23,"slug":24,"type":15},{"name":951,"slug":952,"type":15},{"name":9,"slug":8,"type":15},{"name":858,"slug":859,"type":15},{"slug":957,"name":957,"fn":958,"description":959,"org":1045,"tags":1046,"stars":26,"repoUrl":27,"updatedAt":972},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1047,1048,1049,1050],{"name":963,"slug":964,"type":15},{"name":9,"slug":8,"type":15},{"name":967,"slug":968,"type":15},{"name":970,"slug":971,"type":15},{"slug":974,"name":974,"fn":975,"description":976,"org":1052,"tags":1053,"stars":26,"repoUrl":27,"updatedAt":984},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1054,1055,1056],{"name":980,"slug":981,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":986,"name":986,"fn":987,"description":988,"org":1058,"tags":1059,"stars":26,"repoUrl":27,"updatedAt":997},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1060,1061,1062,1063],{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":873,"slug":874,"type":15},{"name":995,"slug":996,"type":15},15]