[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-planetscale-planetscale-postgres-safety-review":3,"mdc-v7l3du-key":34,"related-org-planetscale-planetscale-postgres-safety-review":1138,"related-repo-planetscale-planetscale-postgres-safety-review":1308},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"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},"planetscale","PlanetScale","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fplanetscale.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Security","security","tag",{"name":17,"slug":18,"type":15},"Audit","audit",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"PostgreSQL","postgresql",50,"https:\u002F\u002Fgithub.com\u002Fplanetscale\u002Fskills","2026-07-07T06:38:34.75135",null,1,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Skills that help you configure and get the most out of PlanetScale","https:\u002F\u002Fgithub.com\u002Fplanetscale\u002Fskills\u002Ftree\u002FHEAD\u002F03-postgres-safety-review","---\nname: planetscale-postgres-safety-review\ndescription: Review PlanetScale Postgres for Traffic Control, query tags, roles, pg_strict, backups\u002FPITR, private connectivity, webhooks, branches, and safe agent operation.\n---\n\n# Postgres safety review\n\n## Purpose\n\nRecommend best practices for a PlanetScale Postgres database. Focus on availability protection, application isolation, recovery, safe automation, and observability. Do not apply changes.\n\n## Branch and schema workflow\n\nPlanetScale Postgres branches do not use Vitess-style deploy requests. Schema changes are made directly to each branch, and production schema changes should be managed through the application’s normal migration workflow with a branch validation step.\n\nCheck:\n\n- Whether a development or test branch exists.\n- Whether branches are empty or restored from backup.\n- Whether migrations are tested against a branch before production.\n- Whether application migrations are reversible or have a documented rollback strategy.\n- Whether production DDL is manually reviewed.\n\nRecommend:\n\n- Create or use a non-production branch for migration testing.\n- Run migration validation and application tests against that branch.\n- Treat production migration application as an explicit human-approved deployment step.\n- Use PITR\u002Fbackup restore branches for incident recovery, not as an automatic rollback mechanism.\n\nDo not create branches, run migrations, or restore backups without approval.\n\n## Roles and least privilege\n\nCheck whether the application connects with the default role. Flag this as a safety gap.\n\nRecommend:\n\n- Use user-defined application roles, not the default role, for application servers.\n- Separate roles by service, environment, and access pattern.\n- Use read-only roles for analytics, dashboards, reporting, and agents that do not need writes.\n- Use short-lived or purpose-limited roles for automation.\n- When Terraform manages PlanetScale Postgres roles, prefer\n  `planetscale_postgres_redacted_branch_role` for roles whose password should\n  stay out of Terraform state; reset the password through the API or dashboard\n  and store it in the team's secret manager.\n- Document credential rotation without application downtime.\n\nDo not create, reset, delete, or rotate roles without approval.\n\n## pg_strict\n\nCheck whether pg_strict is enabled for application roles.\n\nRecommend enabling pg_strict for production application roles when the workload can tolerate blocking dangerous `UPDATE` or `DELETE` without `WHERE`.\n\nRecommended rollout:\n\n1. Enable warning mode or evaluate in non-production where possible.\n2. Fix queries that would be blocked.\n3. Enable strict blocking for application roles.\n4. Document approved one-off override procedure.\n\nDo not enable pg_strict without approval because it can block application queries after new connections are established.\n\n## Query Insights and pginsights\n\nReview:\n\n- Slow queries.\n- High rows-read queries.\n- High CPU query patterns (`sort=cpuTime` or `sort=percentCpuTime` on the\n  Insights API).\n- High-frequency queries.\n- Erroring queries.\n- Active anomalies.\n- Query tags.\n- Whether literal\u002Fraw query collection is enabled.\n\nRaw query collection is governed by the `pginsights.raw_queries` cluster\nparameter, configured per branch in the dashboard Extensions tab. The\ndatabase API object also carries an `insights_raw_queries` field; when the\ntwo differ, the cluster parameter is the effective collection state. Report\nthe effective state only — never describe the two surfaces as a\ncontradiction or inconsistency.\n\nRecommend:\n\n- Treat raw query collection as a capability, per\n  `..\u002F04-query-insights-and-tags\u002FSKILL.md`: when pattern-level data cannot\n  isolate a pathological invocation, raw collection is the mechanism that\n  can. Where the customer's data-handling requirements constrain it,\n  scoped enablement (incident windows, defined retention) and leaving\n  collection disabled are both valid outcomes; record the rationale.\n- Use tags for attribution and raw collection for invocation-level\n  drill-down; they are complementary instruments.\n- Use deploy SHA and route\u002Fjob tags to correlate regressions with application deploys.\n\n## Query tags\n\nEvaluate whether SQL comments contain structured SQLCommenter tags.\n\nRecommend tags that support both Insights and Traffic Control:\n\n- `application`\n- `service`\n- `route` using normalized route templates, not concrete URLs\n- `controller` and `action` where relevant\n- `job` or `queue` for background workers\n- `feature` for expensive features like exports or reports\n- `environment`\n- `release_sha`\n- `tenant_tier` only if cardinality is bounded\n- `source` for agents, scripts, BI tools, integrations, and MCP\n\nAvoid high-cardinality or sensitive tags:\n\n- User ID\n- Request ID\n- Email\n- Session ID\n- Tenant ID unless explicitly bounded and accepted\n- Raw URL paths with identifiers\n- Access tokens, secrets, or API keys\n\n## Database Traffic Control\n\nFor Postgres, recommend Traffic Control when the database has any of these patterns:\n\n- Public or customer-triggered expensive features.\n- Exports, reports, analytics, or ad hoc search sharing the OLTP database.\n- Background jobs that can starve interactive traffic.\n- Third-party integrations with unpredictable query volume.\n- Agent-generated queries.\n- Known query fingerprints that occasionally run away.\n- Tenant or route classes that need bounded database resource use.\n\nDefault recommendation:\n\n- Start budgets in `warn` mode.\n- Use query tags where possible.\n- Use fingerprint-specific rules for known offenders.\n- Use enforce mode only after observing warnings and confirming no critical traffic is blocked.\n- Maintain an emergency disable procedure.\n\nDo not create budgets or enforce rules without approval.\n\n## Backups and PITR\n\nCheck:\n\n- Automated backup schedule.\n- Retention window.\n- WAL\u002FPITR availability.\n- Manual backups that prevent deletion.\n- Restore drill history.\n- Recovery runbook.\n\nRecommend:\n\n- Confirm default backups meet the customer’s RPO\u002FRTO.\n- Increase retention or add backup schedules if the customer’s recovery window exceeds defaults.\n- If Terraform is the customer's source of truth, manage backup policies in\n  Terraform so retention and schedule changes are reviewed with the rest of\n  the infrastructure code.\n- Run a restore drill to a new branch.\n- Document the exact application cutover procedure after restore.\n\nDo not restore or create emergency backups without approval. Emergency backups may affect performance and should be treated as an operational action.\n\n## Connections, pooling, and network safety\n\nCheck:\n\n- Whether app uses direct port 5432 or PgBouncer port 6432.\n- Whether connection pool size matches runtime and deployment model.\n- Whether serverless or edge environments can create connection storms.\n- Live connection\u002Fsession pressure through `pscale branch connections top`,\n  including blockers and idle-in-transaction sessions when diagnosing active\n  incidents.\n- Whether private connectivity is configured.\n- Whether IP restrictions are configured.\n- Whether public access remains available unexpectedly.\n\nRecommend:\n\n- Use PgBouncer for high-churn application connections where transaction-pooling limitations are acceptable.\n- Use direct connections for session-dependent features that PgBouncer transaction mode cannot support.\n- Use AWS PrivateLink or GCP Private Service Connect for private network requirements.\n- Use IP restrictions to reduce public exposure.\n- Be explicit that private connectivity does not automatically block public access; IP restrictions or equivalent controls are required for private-only posture.\n\nDo not change network restrictions without approval. Network changes can break application connectivity.\n\n## Extensions\n\nReview enabled and available extensions relevant to safety and observability:\n\n- `pginsights`\n- `pg_strict`\n- `pg_stat_statements`\n- `auto_explain`\n- `pg_squeeze`\n- `pg_cron`\n- `pg_partman_bgw`\n- `pg_hint_plan`\n- TimescaleDB, if time-series features are relevant\n\nRecommend extensions only when use case is clear. `auto_explain` is available\nfor PlanetScale Postgres and can log execution plans for slow queries when\nconfigured with parameters such as `auto_explain.log_min_duration`; recommend\nit when slow-query plan capture would materially improve diagnosis and the\nlogging volume is acceptable. When Terraform is the customer's source of truth,\nPostgres branch parameters and supported extensions can be managed there, but\nparameter or extension changes still require the same approval and restart\nimpact review as dashboard changes. Some extension activation paths require\ndashboard changes and database restarts; do not enable them without approval.\n\n## Webhook recommendations for Postgres\n\nEvaluate and recommend webhooks for:\n\n- `branch.anomaly`\n- `branch.out_of_memory`\n- `branch.primary_promoted`\n- `branch.ready`\n- `branch.start_maintenance`\n- `cluster.storage`\n- `database.access_request`\n- `branch.schema_recommendation` if available\n- `webhook.test` for setup validation\n\nRecommended automation behavior:\n\n- Alerts: anomaly, out-of-memory, primary promotion, storage, maintenance.\n- Agent intake: anomaly, schema recommendation.\n- Human approval: any generated Traffic Control, schema, role, or network change.\n\n## Output\n\nReturn:\n\n- Current Postgres safety posture.\n- Highest-risk availability gaps.\n- Recommended Traffic Control plan.\n- Recommended role and pg_strict plan.\n- Recommended backup\u002FPITR plan.\n- Recommended network posture plan.\n- Recommended query tagging plan.\n- Proposed changes requiring approval.\n\nEnd with:\n\n“No Postgres changes have been applied.”\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,48,55,61,67,72,77,107,112,135,140,146,151,155,197,202,207,212,241,246,270,275,281,286,344,365,369,395,401,406,411,531,536,574,580,585,623,628,664,669,675,679,712,716,744,749,755,759,805,809,837,842,848,853,932,952,958,963,1051,1056,1074,1080,1085,1128,1133],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"postgres-safety-review",[45],{"type":46,"value":47},"text","Postgres safety review",{"type":40,"tag":49,"props":50,"children":52},"h2",{"id":51},"purpose",[53],{"type":46,"value":54},"Purpose",{"type":40,"tag":56,"props":57,"children":58},"p",{},[59],{"type":46,"value":60},"Recommend best practices for a PlanetScale Postgres database. Focus on availability protection, application isolation, recovery, safe automation, and observability. Do not apply changes.",{"type":40,"tag":49,"props":62,"children":64},{"id":63},"branch-and-schema-workflow",[65],{"type":46,"value":66},"Branch and schema workflow",{"type":40,"tag":56,"props":68,"children":69},{},[70],{"type":46,"value":71},"PlanetScale Postgres branches do not use Vitess-style deploy requests. Schema changes are made directly to each branch, and production schema changes should be managed through the application’s normal migration workflow with a branch validation step.",{"type":40,"tag":56,"props":73,"children":74},{},[75],{"type":46,"value":76},"Check:",{"type":40,"tag":78,"props":79,"children":80},"ul",{},[81,87,92,97,102],{"type":40,"tag":82,"props":83,"children":84},"li",{},[85],{"type":46,"value":86},"Whether a development or test branch exists.",{"type":40,"tag":82,"props":88,"children":89},{},[90],{"type":46,"value":91},"Whether branches are empty or restored from backup.",{"type":40,"tag":82,"props":93,"children":94},{},[95],{"type":46,"value":96},"Whether migrations are tested against a branch before production.",{"type":40,"tag":82,"props":98,"children":99},{},[100],{"type":46,"value":101},"Whether application migrations are reversible or have a documented rollback strategy.",{"type":40,"tag":82,"props":103,"children":104},{},[105],{"type":46,"value":106},"Whether production DDL is manually reviewed.",{"type":40,"tag":56,"props":108,"children":109},{},[110],{"type":46,"value":111},"Recommend:",{"type":40,"tag":78,"props":113,"children":114},{},[115,120,125,130],{"type":40,"tag":82,"props":116,"children":117},{},[118],{"type":46,"value":119},"Create or use a non-production branch for migration testing.",{"type":40,"tag":82,"props":121,"children":122},{},[123],{"type":46,"value":124},"Run migration validation and application tests against that branch.",{"type":40,"tag":82,"props":126,"children":127},{},[128],{"type":46,"value":129},"Treat production migration application as an explicit human-approved deployment step.",{"type":40,"tag":82,"props":131,"children":132},{},[133],{"type":46,"value":134},"Use PITR\u002Fbackup restore branches for incident recovery, not as an automatic rollback mechanism.",{"type":40,"tag":56,"props":136,"children":137},{},[138],{"type":46,"value":139},"Do not create branches, run migrations, or restore backups without approval.",{"type":40,"tag":49,"props":141,"children":143},{"id":142},"roles-and-least-privilege",[144],{"type":46,"value":145},"Roles and least privilege",{"type":40,"tag":56,"props":147,"children":148},{},[149],{"type":46,"value":150},"Check whether the application connects with the default role. Flag this as a safety gap.",{"type":40,"tag":56,"props":152,"children":153},{},[154],{"type":46,"value":111},{"type":40,"tag":78,"props":156,"children":157},{},[158,163,168,173,178,192],{"type":40,"tag":82,"props":159,"children":160},{},[161],{"type":46,"value":162},"Use user-defined application roles, not the default role, for application servers.",{"type":40,"tag":82,"props":164,"children":165},{},[166],{"type":46,"value":167},"Separate roles by service, environment, and access pattern.",{"type":40,"tag":82,"props":169,"children":170},{},[171],{"type":46,"value":172},"Use read-only roles for analytics, dashboards, reporting, and agents that do not need writes.",{"type":40,"tag":82,"props":174,"children":175},{},[176],{"type":46,"value":177},"Use short-lived or purpose-limited roles for automation.",{"type":40,"tag":82,"props":179,"children":180},{},[181,183,190],{"type":46,"value":182},"When Terraform manages PlanetScale Postgres roles, prefer\n",{"type":40,"tag":184,"props":185,"children":187},"code",{"className":186},[],[188],{"type":46,"value":189},"planetscale_postgres_redacted_branch_role",{"type":46,"value":191}," for roles whose password should\nstay out of Terraform state; reset the password through the API or dashboard\nand store it in the team's secret manager.",{"type":40,"tag":82,"props":193,"children":194},{},[195],{"type":46,"value":196},"Document credential rotation without application downtime.",{"type":40,"tag":56,"props":198,"children":199},{},[200],{"type":46,"value":201},"Do not create, reset, delete, or rotate roles without approval.",{"type":40,"tag":49,"props":203,"children":205},{"id":204},"pg_strict",[206],{"type":46,"value":204},{"type":40,"tag":56,"props":208,"children":209},{},[210],{"type":46,"value":211},"Check whether pg_strict is enabled for application roles.",{"type":40,"tag":56,"props":213,"children":214},{},[215,217,223,225,231,233,239],{"type":46,"value":216},"Recommend enabling pg_strict for production application roles when the workload can tolerate blocking dangerous ",{"type":40,"tag":184,"props":218,"children":220},{"className":219},[],[221],{"type":46,"value":222},"UPDATE",{"type":46,"value":224}," or ",{"type":40,"tag":184,"props":226,"children":228},{"className":227},[],[229],{"type":46,"value":230},"DELETE",{"type":46,"value":232}," without ",{"type":40,"tag":184,"props":234,"children":236},{"className":235},[],[237],{"type":46,"value":238},"WHERE",{"type":46,"value":240},".",{"type":40,"tag":56,"props":242,"children":243},{},[244],{"type":46,"value":245},"Recommended rollout:",{"type":40,"tag":247,"props":248,"children":249},"ol",{},[250,255,260,265],{"type":40,"tag":82,"props":251,"children":252},{},[253],{"type":46,"value":254},"Enable warning mode or evaluate in non-production where possible.",{"type":40,"tag":82,"props":256,"children":257},{},[258],{"type":46,"value":259},"Fix queries that would be blocked.",{"type":40,"tag":82,"props":261,"children":262},{},[263],{"type":46,"value":264},"Enable strict blocking for application roles.",{"type":40,"tag":82,"props":266,"children":267},{},[268],{"type":46,"value":269},"Document approved one-off override procedure.",{"type":40,"tag":56,"props":271,"children":272},{},[273],{"type":46,"value":274},"Do not enable pg_strict without approval because it can block application queries after new connections are established.",{"type":40,"tag":49,"props":276,"children":278},{"id":277},"query-insights-and-pginsights",[279],{"type":46,"value":280},"Query Insights and pginsights",{"type":40,"tag":56,"props":282,"children":283},{},[284],{"type":46,"value":285},"Review:",{"type":40,"tag":78,"props":287,"children":288},{},[289,294,299,319,324,329,334,339],{"type":40,"tag":82,"props":290,"children":291},{},[292],{"type":46,"value":293},"Slow queries.",{"type":40,"tag":82,"props":295,"children":296},{},[297],{"type":46,"value":298},"High rows-read queries.",{"type":40,"tag":82,"props":300,"children":301},{},[302,304,310,311,317],{"type":46,"value":303},"High CPU query patterns (",{"type":40,"tag":184,"props":305,"children":307},{"className":306},[],[308],{"type":46,"value":309},"sort=cpuTime",{"type":46,"value":224},{"type":40,"tag":184,"props":312,"children":314},{"className":313},[],[315],{"type":46,"value":316},"sort=percentCpuTime",{"type":46,"value":318}," on the\nInsights API).",{"type":40,"tag":82,"props":320,"children":321},{},[322],{"type":46,"value":323},"High-frequency queries.",{"type":40,"tag":82,"props":325,"children":326},{},[327],{"type":46,"value":328},"Erroring queries.",{"type":40,"tag":82,"props":330,"children":331},{},[332],{"type":46,"value":333},"Active anomalies.",{"type":40,"tag":82,"props":335,"children":336},{},[337],{"type":46,"value":338},"Query tags.",{"type":40,"tag":82,"props":340,"children":341},{},[342],{"type":46,"value":343},"Whether literal\u002Fraw query collection is enabled.",{"type":40,"tag":56,"props":345,"children":346},{},[347,349,355,357,363],{"type":46,"value":348},"Raw query collection is governed by the ",{"type":40,"tag":184,"props":350,"children":352},{"className":351},[],[353],{"type":46,"value":354},"pginsights.raw_queries",{"type":46,"value":356}," cluster\nparameter, configured per branch in the dashboard Extensions tab. The\ndatabase API object also carries an ",{"type":40,"tag":184,"props":358,"children":360},{"className":359},[],[361],{"type":46,"value":362},"insights_raw_queries",{"type":46,"value":364}," field; when the\ntwo differ, the cluster parameter is the effective collection state. Report\nthe effective state only — never describe the two surfaces as a\ncontradiction or inconsistency.",{"type":40,"tag":56,"props":366,"children":367},{},[368],{"type":46,"value":111},{"type":40,"tag":78,"props":370,"children":371},{},[372,385,390],{"type":40,"tag":82,"props":373,"children":374},{},[375,377,383],{"type":46,"value":376},"Treat raw query collection as a capability, per\n",{"type":40,"tag":184,"props":378,"children":380},{"className":379},[],[381],{"type":46,"value":382},"..\u002F04-query-insights-and-tags\u002FSKILL.md",{"type":46,"value":384},": when pattern-level data cannot\nisolate a pathological invocation, raw collection is the mechanism that\ncan. Where the customer's data-handling requirements constrain it,\nscoped enablement (incident windows, defined retention) and leaving\ncollection disabled are both valid outcomes; record the rationale.",{"type":40,"tag":82,"props":386,"children":387},{},[388],{"type":46,"value":389},"Use tags for attribution and raw collection for invocation-level\ndrill-down; they are complementary instruments.",{"type":40,"tag":82,"props":391,"children":392},{},[393],{"type":46,"value":394},"Use deploy SHA and route\u002Fjob tags to correlate regressions with application deploys.",{"type":40,"tag":49,"props":396,"children":398},{"id":397},"query-tags",[399],{"type":46,"value":400},"Query tags",{"type":40,"tag":56,"props":402,"children":403},{},[404],{"type":46,"value":405},"Evaluate whether SQL comments contain structured SQLCommenter tags.",{"type":40,"tag":56,"props":407,"children":408},{},[409],{"type":46,"value":410},"Recommend tags that support both Insights and Traffic Control:",{"type":40,"tag":78,"props":412,"children":413},{},[414,423,432,443,462,480,491,500,509,520],{"type":40,"tag":82,"props":415,"children":416},{},[417],{"type":40,"tag":184,"props":418,"children":420},{"className":419},[],[421],{"type":46,"value":422},"application",{"type":40,"tag":82,"props":424,"children":425},{},[426],{"type":40,"tag":184,"props":427,"children":429},{"className":428},[],[430],{"type":46,"value":431},"service",{"type":40,"tag":82,"props":433,"children":434},{},[435,441],{"type":40,"tag":184,"props":436,"children":438},{"className":437},[],[439],{"type":46,"value":440},"route",{"type":46,"value":442}," using normalized route templates, not concrete URLs",{"type":40,"tag":82,"props":444,"children":445},{},[446,452,454,460],{"type":40,"tag":184,"props":447,"children":449},{"className":448},[],[450],{"type":46,"value":451},"controller",{"type":46,"value":453}," and ",{"type":40,"tag":184,"props":455,"children":457},{"className":456},[],[458],{"type":46,"value":459},"action",{"type":46,"value":461}," where relevant",{"type":40,"tag":82,"props":463,"children":464},{},[465,471,472,478],{"type":40,"tag":184,"props":466,"children":468},{"className":467},[],[469],{"type":46,"value":470},"job",{"type":46,"value":224},{"type":40,"tag":184,"props":473,"children":475},{"className":474},[],[476],{"type":46,"value":477},"queue",{"type":46,"value":479}," for background workers",{"type":40,"tag":82,"props":481,"children":482},{},[483,489],{"type":40,"tag":184,"props":484,"children":486},{"className":485},[],[487],{"type":46,"value":488},"feature",{"type":46,"value":490}," for expensive features like exports or reports",{"type":40,"tag":82,"props":492,"children":493},{},[494],{"type":40,"tag":184,"props":495,"children":497},{"className":496},[],[498],{"type":46,"value":499},"environment",{"type":40,"tag":82,"props":501,"children":502},{},[503],{"type":40,"tag":184,"props":504,"children":506},{"className":505},[],[507],{"type":46,"value":508},"release_sha",{"type":40,"tag":82,"props":510,"children":511},{},[512,518],{"type":40,"tag":184,"props":513,"children":515},{"className":514},[],[516],{"type":46,"value":517},"tenant_tier",{"type":46,"value":519}," only if cardinality is bounded",{"type":40,"tag":82,"props":521,"children":522},{},[523,529],{"type":40,"tag":184,"props":524,"children":526},{"className":525},[],[527],{"type":46,"value":528},"source",{"type":46,"value":530}," for agents, scripts, BI tools, integrations, and MCP",{"type":40,"tag":56,"props":532,"children":533},{},[534],{"type":46,"value":535},"Avoid high-cardinality or sensitive tags:",{"type":40,"tag":78,"props":537,"children":538},{},[539,544,549,554,559,564,569],{"type":40,"tag":82,"props":540,"children":541},{},[542],{"type":46,"value":543},"User ID",{"type":40,"tag":82,"props":545,"children":546},{},[547],{"type":46,"value":548},"Request ID",{"type":40,"tag":82,"props":550,"children":551},{},[552],{"type":46,"value":553},"Email",{"type":40,"tag":82,"props":555,"children":556},{},[557],{"type":46,"value":558},"Session ID",{"type":40,"tag":82,"props":560,"children":561},{},[562],{"type":46,"value":563},"Tenant ID unless explicitly bounded and accepted",{"type":40,"tag":82,"props":565,"children":566},{},[567],{"type":46,"value":568},"Raw URL paths with identifiers",{"type":40,"tag":82,"props":570,"children":571},{},[572],{"type":46,"value":573},"Access tokens, secrets, or API keys",{"type":40,"tag":49,"props":575,"children":577},{"id":576},"database-traffic-control",[578],{"type":46,"value":579},"Database Traffic Control",{"type":40,"tag":56,"props":581,"children":582},{},[583],{"type":46,"value":584},"For Postgres, recommend Traffic Control when the database has any of these patterns:",{"type":40,"tag":78,"props":586,"children":587},{},[588,593,598,603,608,613,618],{"type":40,"tag":82,"props":589,"children":590},{},[591],{"type":46,"value":592},"Public or customer-triggered expensive features.",{"type":40,"tag":82,"props":594,"children":595},{},[596],{"type":46,"value":597},"Exports, reports, analytics, or ad hoc search sharing the OLTP database.",{"type":40,"tag":82,"props":599,"children":600},{},[601],{"type":46,"value":602},"Background jobs that can starve interactive traffic.",{"type":40,"tag":82,"props":604,"children":605},{},[606],{"type":46,"value":607},"Third-party integrations with unpredictable query volume.",{"type":40,"tag":82,"props":609,"children":610},{},[611],{"type":46,"value":612},"Agent-generated queries.",{"type":40,"tag":82,"props":614,"children":615},{},[616],{"type":46,"value":617},"Known query fingerprints that occasionally run away.",{"type":40,"tag":82,"props":619,"children":620},{},[621],{"type":46,"value":622},"Tenant or route classes that need bounded database resource use.",{"type":40,"tag":56,"props":624,"children":625},{},[626],{"type":46,"value":627},"Default recommendation:",{"type":40,"tag":78,"props":629,"children":630},{},[631,644,649,654,659],{"type":40,"tag":82,"props":632,"children":633},{},[634,636,642],{"type":46,"value":635},"Start budgets in ",{"type":40,"tag":184,"props":637,"children":639},{"className":638},[],[640],{"type":46,"value":641},"warn",{"type":46,"value":643}," mode.",{"type":40,"tag":82,"props":645,"children":646},{},[647],{"type":46,"value":648},"Use query tags where possible.",{"type":40,"tag":82,"props":650,"children":651},{},[652],{"type":46,"value":653},"Use fingerprint-specific rules for known offenders.",{"type":40,"tag":82,"props":655,"children":656},{},[657],{"type":46,"value":658},"Use enforce mode only after observing warnings and confirming no critical traffic is blocked.",{"type":40,"tag":82,"props":660,"children":661},{},[662],{"type":46,"value":663},"Maintain an emergency disable procedure.",{"type":40,"tag":56,"props":665,"children":666},{},[667],{"type":46,"value":668},"Do not create budgets or enforce rules without approval.",{"type":40,"tag":49,"props":670,"children":672},{"id":671},"backups-and-pitr",[673],{"type":46,"value":674},"Backups and PITR",{"type":40,"tag":56,"props":676,"children":677},{},[678],{"type":46,"value":76},{"type":40,"tag":78,"props":680,"children":681},{},[682,687,692,697,702,707],{"type":40,"tag":82,"props":683,"children":684},{},[685],{"type":46,"value":686},"Automated backup schedule.",{"type":40,"tag":82,"props":688,"children":689},{},[690],{"type":46,"value":691},"Retention window.",{"type":40,"tag":82,"props":693,"children":694},{},[695],{"type":46,"value":696},"WAL\u002FPITR availability.",{"type":40,"tag":82,"props":698,"children":699},{},[700],{"type":46,"value":701},"Manual backups that prevent deletion.",{"type":40,"tag":82,"props":703,"children":704},{},[705],{"type":46,"value":706},"Restore drill history.",{"type":40,"tag":82,"props":708,"children":709},{},[710],{"type":46,"value":711},"Recovery runbook.",{"type":40,"tag":56,"props":713,"children":714},{},[715],{"type":46,"value":111},{"type":40,"tag":78,"props":717,"children":718},{},[719,724,729,734,739],{"type":40,"tag":82,"props":720,"children":721},{},[722],{"type":46,"value":723},"Confirm default backups meet the customer’s RPO\u002FRTO.",{"type":40,"tag":82,"props":725,"children":726},{},[727],{"type":46,"value":728},"Increase retention or add backup schedules if the customer’s recovery window exceeds defaults.",{"type":40,"tag":82,"props":730,"children":731},{},[732],{"type":46,"value":733},"If Terraform is the customer's source of truth, manage backup policies in\nTerraform so retention and schedule changes are reviewed with the rest of\nthe infrastructure code.",{"type":40,"tag":82,"props":735,"children":736},{},[737],{"type":46,"value":738},"Run a restore drill to a new branch.",{"type":40,"tag":82,"props":740,"children":741},{},[742],{"type":46,"value":743},"Document the exact application cutover procedure after restore.",{"type":40,"tag":56,"props":745,"children":746},{},[747],{"type":46,"value":748},"Do not restore or create emergency backups without approval. Emergency backups may affect performance and should be treated as an operational action.",{"type":40,"tag":49,"props":750,"children":752},{"id":751},"connections-pooling-and-network-safety",[753],{"type":46,"value":754},"Connections, pooling, and network safety",{"type":40,"tag":56,"props":756,"children":757},{},[758],{"type":46,"value":76},{"type":40,"tag":78,"props":760,"children":761},{},[762,767,772,777,790,795,800],{"type":40,"tag":82,"props":763,"children":764},{},[765],{"type":46,"value":766},"Whether app uses direct port 5432 or PgBouncer port 6432.",{"type":40,"tag":82,"props":768,"children":769},{},[770],{"type":46,"value":771},"Whether connection pool size matches runtime and deployment model.",{"type":40,"tag":82,"props":773,"children":774},{},[775],{"type":46,"value":776},"Whether serverless or edge environments can create connection storms.",{"type":40,"tag":82,"props":778,"children":779},{},[780,782,788],{"type":46,"value":781},"Live connection\u002Fsession pressure through ",{"type":40,"tag":184,"props":783,"children":785},{"className":784},[],[786],{"type":46,"value":787},"pscale branch connections top",{"type":46,"value":789},",\nincluding blockers and idle-in-transaction sessions when diagnosing active\nincidents.",{"type":40,"tag":82,"props":791,"children":792},{},[793],{"type":46,"value":794},"Whether private connectivity is configured.",{"type":40,"tag":82,"props":796,"children":797},{},[798],{"type":46,"value":799},"Whether IP restrictions are configured.",{"type":40,"tag":82,"props":801,"children":802},{},[803],{"type":46,"value":804},"Whether public access remains available unexpectedly.",{"type":40,"tag":56,"props":806,"children":807},{},[808],{"type":46,"value":111},{"type":40,"tag":78,"props":810,"children":811},{},[812,817,822,827,832],{"type":40,"tag":82,"props":813,"children":814},{},[815],{"type":46,"value":816},"Use PgBouncer for high-churn application connections where transaction-pooling limitations are acceptable.",{"type":40,"tag":82,"props":818,"children":819},{},[820],{"type":46,"value":821},"Use direct connections for session-dependent features that PgBouncer transaction mode cannot support.",{"type":40,"tag":82,"props":823,"children":824},{},[825],{"type":46,"value":826},"Use AWS PrivateLink or GCP Private Service Connect for private network requirements.",{"type":40,"tag":82,"props":828,"children":829},{},[830],{"type":46,"value":831},"Use IP restrictions to reduce public exposure.",{"type":40,"tag":82,"props":833,"children":834},{},[835],{"type":46,"value":836},"Be explicit that private connectivity does not automatically block public access; IP restrictions or equivalent controls are required for private-only posture.",{"type":40,"tag":56,"props":838,"children":839},{},[840],{"type":46,"value":841},"Do not change network restrictions without approval. Network changes can break application connectivity.",{"type":40,"tag":49,"props":843,"children":845},{"id":844},"extensions",[846],{"type":46,"value":847},"Extensions",{"type":40,"tag":56,"props":849,"children":850},{},[851],{"type":46,"value":852},"Review enabled and available extensions relevant to safety and observability:",{"type":40,"tag":78,"props":854,"children":855},{},[856,865,873,882,891,900,909,918,927],{"type":40,"tag":82,"props":857,"children":858},{},[859],{"type":40,"tag":184,"props":860,"children":862},{"className":861},[],[863],{"type":46,"value":864},"pginsights",{"type":40,"tag":82,"props":866,"children":867},{},[868],{"type":40,"tag":184,"props":869,"children":871},{"className":870},[],[872],{"type":46,"value":204},{"type":40,"tag":82,"props":874,"children":875},{},[876],{"type":40,"tag":184,"props":877,"children":879},{"className":878},[],[880],{"type":46,"value":881},"pg_stat_statements",{"type":40,"tag":82,"props":883,"children":884},{},[885],{"type":40,"tag":184,"props":886,"children":888},{"className":887},[],[889],{"type":46,"value":890},"auto_explain",{"type":40,"tag":82,"props":892,"children":893},{},[894],{"type":40,"tag":184,"props":895,"children":897},{"className":896},[],[898],{"type":46,"value":899},"pg_squeeze",{"type":40,"tag":82,"props":901,"children":902},{},[903],{"type":40,"tag":184,"props":904,"children":906},{"className":905},[],[907],{"type":46,"value":908},"pg_cron",{"type":40,"tag":82,"props":910,"children":911},{},[912],{"type":40,"tag":184,"props":913,"children":915},{"className":914},[],[916],{"type":46,"value":917},"pg_partman_bgw",{"type":40,"tag":82,"props":919,"children":920},{},[921],{"type":40,"tag":184,"props":922,"children":924},{"className":923},[],[925],{"type":46,"value":926},"pg_hint_plan",{"type":40,"tag":82,"props":928,"children":929},{},[930],{"type":46,"value":931},"TimescaleDB, if time-series features are relevant",{"type":40,"tag":56,"props":933,"children":934},{},[935,937,942,944,950],{"type":46,"value":936},"Recommend extensions only when use case is clear. ",{"type":40,"tag":184,"props":938,"children":940},{"className":939},[],[941],{"type":46,"value":890},{"type":46,"value":943}," is available\nfor PlanetScale Postgres and can log execution plans for slow queries when\nconfigured with parameters such as ",{"type":40,"tag":184,"props":945,"children":947},{"className":946},[],[948],{"type":46,"value":949},"auto_explain.log_min_duration",{"type":46,"value":951},"; recommend\nit when slow-query plan capture would materially improve diagnosis and the\nlogging volume is acceptable. When Terraform is the customer's source of truth,\nPostgres branch parameters and supported extensions can be managed there, but\nparameter or extension changes still require the same approval and restart\nimpact review as dashboard changes. Some extension activation paths require\ndashboard changes and database restarts; do not enable them without approval.",{"type":40,"tag":49,"props":953,"children":955},{"id":954},"webhook-recommendations-for-postgres",[956],{"type":46,"value":957},"Webhook recommendations for Postgres",{"type":40,"tag":56,"props":959,"children":960},{},[961],{"type":46,"value":962},"Evaluate and recommend webhooks for:",{"type":40,"tag":78,"props":964,"children":965},{},[966,975,984,993,1002,1011,1020,1029,1040],{"type":40,"tag":82,"props":967,"children":968},{},[969],{"type":40,"tag":184,"props":970,"children":972},{"className":971},[],[973],{"type":46,"value":974},"branch.anomaly",{"type":40,"tag":82,"props":976,"children":977},{},[978],{"type":40,"tag":184,"props":979,"children":981},{"className":980},[],[982],{"type":46,"value":983},"branch.out_of_memory",{"type":40,"tag":82,"props":985,"children":986},{},[987],{"type":40,"tag":184,"props":988,"children":990},{"className":989},[],[991],{"type":46,"value":992},"branch.primary_promoted",{"type":40,"tag":82,"props":994,"children":995},{},[996],{"type":40,"tag":184,"props":997,"children":999},{"className":998},[],[1000],{"type":46,"value":1001},"branch.ready",{"type":40,"tag":82,"props":1003,"children":1004},{},[1005],{"type":40,"tag":184,"props":1006,"children":1008},{"className":1007},[],[1009],{"type":46,"value":1010},"branch.start_maintenance",{"type":40,"tag":82,"props":1012,"children":1013},{},[1014],{"type":40,"tag":184,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":46,"value":1019},"cluster.storage",{"type":40,"tag":82,"props":1021,"children":1022},{},[1023],{"type":40,"tag":184,"props":1024,"children":1026},{"className":1025},[],[1027],{"type":46,"value":1028},"database.access_request",{"type":40,"tag":82,"props":1030,"children":1031},{},[1032,1038],{"type":40,"tag":184,"props":1033,"children":1035},{"className":1034},[],[1036],{"type":46,"value":1037},"branch.schema_recommendation",{"type":46,"value":1039}," if available",{"type":40,"tag":82,"props":1041,"children":1042},{},[1043,1049],{"type":40,"tag":184,"props":1044,"children":1046},{"className":1045},[],[1047],{"type":46,"value":1048},"webhook.test",{"type":46,"value":1050}," for setup validation",{"type":40,"tag":56,"props":1052,"children":1053},{},[1054],{"type":46,"value":1055},"Recommended automation behavior:",{"type":40,"tag":78,"props":1057,"children":1058},{},[1059,1064,1069],{"type":40,"tag":82,"props":1060,"children":1061},{},[1062],{"type":46,"value":1063},"Alerts: anomaly, out-of-memory, primary promotion, storage, maintenance.",{"type":40,"tag":82,"props":1065,"children":1066},{},[1067],{"type":46,"value":1068},"Agent intake: anomaly, schema recommendation.",{"type":40,"tag":82,"props":1070,"children":1071},{},[1072],{"type":46,"value":1073},"Human approval: any generated Traffic Control, schema, role, or network change.",{"type":40,"tag":49,"props":1075,"children":1077},{"id":1076},"output",[1078],{"type":46,"value":1079},"Output",{"type":40,"tag":56,"props":1081,"children":1082},{},[1083],{"type":46,"value":1084},"Return:",{"type":40,"tag":78,"props":1086,"children":1087},{},[1088,1093,1098,1103,1108,1113,1118,1123],{"type":40,"tag":82,"props":1089,"children":1090},{},[1091],{"type":46,"value":1092},"Current Postgres safety posture.",{"type":40,"tag":82,"props":1094,"children":1095},{},[1096],{"type":46,"value":1097},"Highest-risk availability gaps.",{"type":40,"tag":82,"props":1099,"children":1100},{},[1101],{"type":46,"value":1102},"Recommended Traffic Control plan.",{"type":40,"tag":82,"props":1104,"children":1105},{},[1106],{"type":46,"value":1107},"Recommended role and pg_strict plan.",{"type":40,"tag":82,"props":1109,"children":1110},{},[1111],{"type":46,"value":1112},"Recommended backup\u002FPITR plan.",{"type":40,"tag":82,"props":1114,"children":1115},{},[1116],{"type":46,"value":1117},"Recommended network posture plan.",{"type":40,"tag":82,"props":1119,"children":1120},{},[1121],{"type":46,"value":1122},"Recommended query tagging plan.",{"type":40,"tag":82,"props":1124,"children":1125},{},[1126],{"type":46,"value":1127},"Proposed changes requiring approval.",{"type":40,"tag":56,"props":1129,"children":1130},{},[1131],{"type":46,"value":1132},"End with:",{"type":40,"tag":56,"props":1134,"children":1135},{},[1136],{"type":46,"value":1137},"“No Postgres changes have been applied.”",{"items":1139,"total":1307},[1140,1163,1174,1185,1198,1216,1227,1242,1258,1275,1287,1294],{"slug":1141,"name":1141,"fn":1142,"description":1143,"org":1144,"tags":1145,"stars":1160,"repoUrl":1161,"updatedAt":1162},"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},[1146,1149,1152,1154,1157],{"name":1147,"slug":1148,"type":15},"Data Modeling","data-modeling",{"name":1150,"slug":1151,"type":15},"Database","database",{"name":1153,"slug":1141,"type":15},"MySQL",{"name":1155,"slug":1156,"type":15},"Performance","performance",{"name":1158,"slug":1159,"type":15},"SQL","sql",557,"https:\u002F\u002Fgithub.com\u002Fplanetscale\u002Fdatabase-skills","2026-04-06T18:43:45.381961",{"slug":1164,"name":1164,"fn":1165,"description":1166,"org":1167,"tags":1168,"stars":1160,"repoUrl":1161,"updatedAt":1173},"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},[1169,1170,1171,1172],{"name":1150,"slug":1151,"type":15},{"name":1155,"slug":1156,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"2026-07-24T05:38:09.09841",{"slug":1175,"name":1175,"fn":1176,"description":1177,"org":1178,"tags":1179,"stars":1160,"repoUrl":1161,"updatedAt":1184},"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},[1180,1181,1182,1183],{"name":1150,"slug":1151,"type":15},{"name":1155,"slug":1156,"type":15},{"name":21,"slug":22,"type":15},{"name":1158,"slug":1159,"type":15},"2026-04-06T18:43:44.126777",{"slug":1186,"name":1186,"fn":1187,"description":1188,"org":1189,"tags":1190,"stars":1160,"repoUrl":1161,"updatedAt":1197},"vitess","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},[1191,1192,1193,1194,1195],{"name":1150,"slug":1151,"type":15},{"name":1155,"slug":1156,"type":15},{"name":9,"slug":8,"type":15},{"name":1158,"slug":1159,"type":15},{"name":1196,"slug":1186,"type":15},"Vitess","2026-04-06T18:43:42.890969",{"slug":1199,"name":1199,"fn":1200,"description":1201,"org":1202,"tags":1203,"stars":23,"repoUrl":24,"updatedAt":1215},"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},[1204,1207,1208,1211,1212],{"name":1205,"slug":1206,"type":15},"Automation","automation",{"name":1150,"slug":1151,"type":15},{"name":1209,"slug":1210,"type":15},"Operations","operations",{"name":9,"slug":8,"type":15},{"name":1213,"slug":1214,"type":15},"Risk Assessment","risk-assessment","2026-07-05T06:32:41.490537",{"slug":1217,"name":1217,"fn":1218,"description":1219,"org":1220,"tags":1221,"stars":23,"repoUrl":24,"updatedAt":1226},"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},[1222,1223,1224,1225],{"name":1205,"slug":1206,"type":15},{"name":1150,"slug":1151,"type":15},{"name":1155,"slug":1156,"type":15},{"name":9,"slug":8,"type":15},"2026-07-27T06:07:48.188419",{"slug":1228,"name":1228,"fn":1229,"description":1230,"org":1231,"tags":1232,"stars":23,"repoUrl":24,"updatedAt":1241},"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},[1233,1236,1237,1240],{"name":1234,"slug":1235,"type":15},"Approvals","approvals",{"name":1150,"slug":1151,"type":15},{"name":1238,"slug":1239,"type":15},"Governance","governance",{"name":9,"slug":8,"type":15},"2026-07-07T06:38:42.512288",{"slug":1243,"name":1243,"fn":1244,"description":1245,"org":1246,"tags":1247,"stars":23,"repoUrl":24,"updatedAt":1257},"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},[1248,1251,1252,1255,1256],{"name":1249,"slug":1250,"type":15},"Code Analysis","code-analysis",{"name":1150,"slug":1151,"type":15},{"name":1253,"slug":1254,"type":15},"Observability","observability",{"name":9,"slug":8,"type":15},{"name":1158,"slug":1159,"type":15},"2026-07-07T06:38:43.813568",{"slug":1259,"name":1259,"fn":1260,"description":1261,"org":1262,"tags":1263,"stars":23,"repoUrl":24,"updatedAt":1274},"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},[1264,1267,1268,1271],{"name":1265,"slug":1266,"type":15},"Documentation","documentation",{"name":9,"slug":8,"type":15},{"name":1269,"slug":1270,"type":15},"Reporting","reporting",{"name":1272,"slug":1273,"type":15},"Templates","templates","2026-07-07T06:38:37.362061",{"slug":1276,"name":1276,"fn":1277,"description":1278,"org":1279,"tags":1280,"stars":23,"repoUrl":24,"updatedAt":1286},"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},[1281,1284,1285],{"name":1282,"slug":1283,"type":15},"MCP","mcp",{"name":1209,"slug":1210,"type":15},{"name":9,"slug":8,"type":15},"2026-07-07T06:38:38.675213",{"slug":4,"name":4,"fn":5,"description":6,"org":1288,"tags":1289,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1290,1291,1292,1293],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":13,"slug":14,"type":15},{"slug":1295,"name":1295,"fn":1296,"description":1297,"org":1298,"tags":1299,"stars":23,"repoUrl":24,"updatedAt":1306},"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},[1300,1301,1304,1305],{"name":1205,"slug":1206,"type":15},{"name":1302,"slug":1303,"type":15},"CLI","cli",{"name":1150,"slug":1151,"type":15},{"name":9,"slug":8,"type":15},"2026-07-07T06:38:33.465495",19,{"items":1309,"total":1360},[1310,1318,1325,1332,1340,1347,1353],{"slug":1199,"name":1199,"fn":1200,"description":1201,"org":1311,"tags":1312,"stars":23,"repoUrl":24,"updatedAt":1215},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1313,1314,1315,1316,1317],{"name":1205,"slug":1206,"type":15},{"name":1150,"slug":1151,"type":15},{"name":1209,"slug":1210,"type":15},{"name":9,"slug":8,"type":15},{"name":1213,"slug":1214,"type":15},{"slug":1217,"name":1217,"fn":1218,"description":1219,"org":1319,"tags":1320,"stars":23,"repoUrl":24,"updatedAt":1226},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1321,1322,1323,1324],{"name":1205,"slug":1206,"type":15},{"name":1150,"slug":1151,"type":15},{"name":1155,"slug":1156,"type":15},{"name":9,"slug":8,"type":15},{"slug":1228,"name":1228,"fn":1229,"description":1230,"org":1326,"tags":1327,"stars":23,"repoUrl":24,"updatedAt":1241},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1328,1329,1330,1331],{"name":1234,"slug":1235,"type":15},{"name":1150,"slug":1151,"type":15},{"name":1238,"slug":1239,"type":15},{"name":9,"slug":8,"type":15},{"slug":1243,"name":1243,"fn":1244,"description":1245,"org":1333,"tags":1334,"stars":23,"repoUrl":24,"updatedAt":1257},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1335,1336,1337,1338,1339],{"name":1249,"slug":1250,"type":15},{"name":1150,"slug":1151,"type":15},{"name":1253,"slug":1254,"type":15},{"name":9,"slug":8,"type":15},{"name":1158,"slug":1159,"type":15},{"slug":1259,"name":1259,"fn":1260,"description":1261,"org":1341,"tags":1342,"stars":23,"repoUrl":24,"updatedAt":1274},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1343,1344,1345,1346],{"name":1265,"slug":1266,"type":15},{"name":9,"slug":8,"type":15},{"name":1269,"slug":1270,"type":15},{"name":1272,"slug":1273,"type":15},{"slug":1276,"name":1276,"fn":1277,"description":1278,"org":1348,"tags":1349,"stars":23,"repoUrl":24,"updatedAt":1286},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1350,1351,1352],{"name":1282,"slug":1283,"type":15},{"name":1209,"slug":1210,"type":15},{"name":9,"slug":8,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":1354,"tags":1355,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1356,1357,1358,1359],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":13,"slug":14,"type":15},15]