{"id":"46954143-53af-4dbf-8201-760eef688e87","shortId":"pe877n","kind":"skill","title":"alloydb","tagline":"Auto-activate for AlloyDB in GCP configs or docs. Google AlloyDB expertise: PostgreSQL-compatible managed database on GCP. Produces AlloyDB cluster configurations, connection patterns, and columnar engine setups on GCP. Use when: provisioning AlloyDB clusters, configuring read po","description":"# AlloyDB\n\n## Overview\n\nAlloyDB is a fully managed, PostgreSQL-compatible database service on Google Cloud. It combines the familiarity of PostgreSQL with Google's storage and compute innovations for high performance and availability.\n\n## Operating Layers\n\nUse this skill in three distinct layers:\n\n1. **Provision** the managed database on GCP.\n2. **Connect** an agent or client to the database.\n3. **Operate** the database with tuning, observability, backups, and failover guidance.\n\nKeep those layers separate when giving guidance. Provisioning is not the same thing as agent connectivity.\n\n## Quick Reference\n\n### AlloyDB vs Standard PostgreSQL\n\n| Feature | AlloyDB | Cloud SQL for PostgreSQL |\n|---|---|---|\n| Storage | Disaggregated, log-based | Attached disk |\n| Columnar engine | Built-in adaptive columnar cache | Not available |\n| ML embeddings | Native Vertex AI integration | Manual setup |\n| Read scaling | Read pool (auto-managed replicas) | Manual read replicas |\n| Availability | 99.99% SLA (regional) | 99.95% SLA |\n| Networking | Private IP only (PSA required) | Public or private IP |\n\n### Key Commands\n\n| Action | Command |\n|---|---|\n| Create cluster | `gcloud alloydb clusters create NAME --region=REGION --network=NETWORK --password=PASS` |\n| Create primary | `gcloud alloydb instances create NAME --cluster=CLUSTER --region=REGION --instance-type=PRIMARY --cpu-count=N` |\n| Create read pool | `gcloud alloydb instances create NAME --cluster=CLUSTER --region=REGION --instance-type=READ_POOL --read-pool-node-count=N` |\n| Connect via proxy | `./alloydb-auth-proxy \"projects/P/locations/R/clusters/C/instances/I\" --port=5432` |\n| Enable columnar engine | `SELECT google_columnar_engine_add('table_name');` |\n\n### Connection Pattern\n\n```bash\n# From GCE VM in same VPC (private IP)\npsql \"host=ALLOYDB_IP dbname=postgres user=postgres sslmode=require\"\n\n# Via AlloyDB Auth Proxy (recommended for external access)\n./alloydb-auth-proxy \\\n    \"projects/PROJECT/locations/REGION/clusters/CLUSTER/instances/INSTANCE\" \\\n    --port=5432\n\npsql \"host=127.0.0.1 port=5432 dbname=postgres user=postgres\"\n```\n\n<workflow>\n\n## Workflow\n\n### Step 1: Set Up Private Service Access\n\nAlloyDB requires Private Service Access (PSA) before any cluster can be created. Allocate an IP range and create the VPC peering connection.\n\n### Step 2: Create Cluster and Primary Instance\n\nCreate the cluster with `gcloud alloydb clusters create`, then add a primary instance. Choose CPU count based on workload (start with 4 vCPUs for small workloads).\n\n### Step 3: Configure Read Pool (if needed)\n\nFor read-heavy workloads, add a read pool with `--instance-type=READ_POOL`. AlloyDB automatically manages the read replicas within the pool.\n\n### Step 4: Enable Columnar Engine (for analytics)\n\nFor analytical query patterns, enable the columnar engine on tables with `SELECT google_columnar_engine_add('table')`. Check `g_columnar_recommended_columns` for automatic recommendations.\n\n### Step 5: Connect Applications\n\nUse the AlloyDB Auth Proxy for connections from outside the VPC. For applications within GCE/GKE on the same VPC, connect directly via private IP.\n\n</workflow>\n\n## Host Integration Order\n\nUse the lowest-admin supported path for the current host, and degrade cleanly:\n\n1. **Gemini CLI**: use the dedicated `alloydb` and `alloydb-observability` extensions.\n2. **Other agents with MCP support**: use MCP Toolbox with the official AlloyDB prebuilt config.\n3. **No extension / no MCP**: fall back to `gcloud`, Auth Proxy, `psql`, and SQL guidance from this skill's references.\n\nDo not make the skill Gemini-only. The Gemini extension path is preferred when available, but the operational guidance in this skill must still work for Claude, Codex, OpenCode, Antigravity, and plain terminal workflows.\n\n<guardrails>\n\n## Guardrails\n\n- **Always use Private Service Access** — AlloyDB does not support public IP; PSA must be configured before cluster creation\n- **Use the AlloyDB Auth Proxy** for connections outside the VPC — never expose the private IP directly\n- **Columnar engine is for analytics only** — do not enable on tables with heavy OLTP write patterns; it adds overhead to writes\n- **Size read pools based on read traffic** — do not use read pools as a substitute for query optimization\n- **Set `--password` at cluster creation** — there is no way to recover the initial password; store it in Secret Manager\n- **Always specify `sslmode=require`** in connection strings for security\n- **Enable Cloud Monitoring** — configure `roles/monitoring.viewer` and set alerts on CPU, connections, and replication lag before going to production\n- **Run EXPLAIN ANALYZE before promoting queries** — always validate query plans with `EXPLAIN (ANALYZE, BUFFERS)` on a representative dataset before production deployment\n- **Rotate credentials periodically** — store passwords in Secret Manager and rotate on a schedule; use exponential backoff during rolling restarts\n\n</guardrails>\n\n<validation>\n\n### Validation Checkpoint\n\nBefore delivering configurations, verify:\n\n- [ ] Private Service Access is configured (IP allocation + VPC peering)\n- [ ] Cluster uses a VPC network, not the `default` network in production\n- [ ] Primary instance has appropriate CPU count for the workload\n- [ ] Connection pattern uses Auth Proxy or private IP (no public exposure)\n- [ ] Passwords are sourced from Secret Manager, not hardcoded\n\n</validation>\n\n<example>\n\n## Example\n\nColumnar engine setup for an analytics workload:\n\n```sql\n-- Enable columnar engine on the orders table\nSELECT google_columnar_engine_add('orders');\n\n-- Check which columns AlloyDB recommends for columnar caching\nSELECT table_name, column_name, estimated_benefit\nFROM g_columnar_recommended_columns\nORDER BY estimated_benefit DESC;\n\n-- Verify a query uses the columnar engine\nEXPLAIN (ANALYZE) SELECT region, SUM(amount)\nFROM orders\nWHERE order_date >= '2025-01-01'\nGROUP BY region;\n-- Look for \"Columnar Scan\" in the plan output\n```\n\nConnection string for a Python application using the Auth Proxy:\n\n```python\nDATABASE_URL = \"postgresql+asyncpg://postgres:password@127.0.0.1:5432/mydb\"\n# Auth Proxy runs locally, forwarding to AlloyDB private IP\n```\n\n</example>\n\n---\n\n## Observability\n\nAlloyDB metrics are available under `alloydb.googleapis.com/database/postgresql/*` in Cloud Monitoring. Enable Cloud Monitoring before production launch.\n\n**Key metrics to watch:**\n\n- CPU utilization — alert above 80% sustained\n- Active connections — alert above 80% of `max_connections` (200 on pg18)\n- Replication lag on read pool nodes — alert above 30 seconds\n- Dead tuple count — high values indicate autovacuum falling behind\n\n**PromQL patterns** (Cloud Monitoring / Google Managed Prometheus):\n\n```promql\n# CPU utilization\navg_over_time(alloydb_googleapis_com:database_postgresql_cpu_utilization[5m])\n\n# Active connections vs capacity\nalloydb_googleapis_com:database_postgresql_network_connections\n\n# Replication lag\nmax by (instance_id)(alloydb_googleapis_com:database_postgresql_replication_replica_lag_seconds)\n```\n\nRequired role: `roles/monitoring.viewer`. See [Observability Reference](references/observability.md) for full PromQL patterns, alert policy examples, and dashboard recommendations.\n\n---\n\n## Data Plane Operations\n\nBefore promoting any query to production, validate with `EXPLAIN (ANALYZE, BUFFERS)`. Monitor live workload via `pg_stat_activity`.\n\n**Quick patterns:**\n\n```sql\n-- Active queries with duration\nSELECT pid, now() - query_start AS duration, state, query\nFROM pg_stat_activity\nWHERE state != 'idle'\nORDER BY duration DESC;\n\n-- Tables with bloat\nSELECT relname, n_dead_tup, n_live_tup, last_autovacuum\nFROM pg_stat_user_tables\nWHERE n_dead_tup > 10000\nORDER BY n_dead_tup DESC;\n```\n\nSee [Operations Reference](references/operations.md) for EXPLAIN ANALYZE interpretation, bloat detection, autovacuum tuning, invalid index detection, and security hardening.\n\n---\n\n## Production Patterns\n\n### Auth Proxy Sidecar (Kubernetes)\n\nRun `alloydb-auth-proxy` as a sidecar container alongside the application pod. The sidecar uses the pod's workload identity (requires `roles/alloydb.client`) and refreshes IAM tokens automatically. The application connects to `127.0.0.1:5432` with no credential management in the app layer.\n\n### Credential Rotation\n\nStore the database password in Secret Manager. On rotation: add a new secret version, update the AlloyDB user password via `gcloud alloydb users set-password`, perform a rolling restart with exponential backoff, then disable the old secret version.\n\n### pg18 max_connections\n\nSet `max_connections=200` for PostgreSQL 18 instances as the production baseline. For workloads exceeding 200 concurrent connections, add PgBouncer in transaction mode rather than raising the limit further.\n\nSee [Operations Reference](references/operations.md) for the full Kubernetes sidecar spec, rotation runbook, and connection pooling guidance.\n\n---\n\n## Disaster Recovery\n\n### Point-in-Time Recovery (PITR)\n\nAlloyDB continuous backup enables PITR to any second within the retention window (default 14 days). Restoration creates a new cluster — the original cluster is unaffected.\n\n```bash\ngcloud alloydb clusters restore RESTORED_CLUSTER_ID \\\n    --region=REGION \\\n    --network=NETWORK \\\n    --source-cluster=projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID \\\n    --point-in-time=\"2025-06-15T14:30:00Z\"\n```\n\n### Cross-Region Replica Promotion\n\nWhen the primary region is unavailable, promote the secondary cluster with:\n\n```bash\ngcloud alloydb clusters promote SECONDARY_CLUSTER_ID --region=SECONDARY_REGION\n```\n\nAfter promotion, update connection strings (via Secret Manager or environment config) to the promoted cluster endpoint. See [Operations Reference](references/operations.md) for the full failover runbook and checklist.\n\n---\n\n## Gemini CLI and MCP Toolbox\n\nThis section is for the **connection layer**, not for provisioning the AlloyDB cluster itself.\n\nPrefer the dedicated Gemini CLI extensions for managed AlloyDB. They embed the underlying MCP Toolbox flow directly, so Gemini users do not need to configure a separate MCP server first.\n\nInstall the core AlloyDB extension:\n\n```bash\ngemini extensions install https://github.com/gemini-cli-extensions/alloydb --auto-update\n```\n\nInstall the observability extension when the user wants metrics, dashboards, alerts, or query-performance monitoring:\n\n```bash\ngemini extensions install https://github.com/gemini-cli-extensions/alloydb-observability --auto-update\n```\n\nPrefer workspace-scoped configuration:\n\n```bash\ngemini extensions config alloydb --scope workspace\n```\n\nGuide the user through configuration before starting Gemini:\n\n```bash\nexport ALLOYDB_POSTGRES_PROJECT=\"<your-gcp-project-id>\"\nexport ALLOYDB_POSTGRES_REGION=\"<your-alloydb-region>\"\nexport ALLOYDB_POSTGRES_CLUSTER=\"<your-alloydb-cluster-id>\"\nexport ALLOYDB_POSTGRES_INSTANCE=\"<your-alloydb-instance-id>\"\nexport ALLOYDB_POSTGRES_DATABASE=\"<your-database-name>\"\nexport ALLOYDB_POSTGRES_USER=\"<your-database-user>\"        # optional\nexport ALLOYDB_POSTGRES_PASSWORD=\"<your-database-password>\" # optional\nexport ALLOYDB_POSTGRES_IP_TYPE=\"PRIVATE\"                   # PRIVATE / PUBLIC / PSC\n```\n\nImportant configuration guidance:\n\n- Gemini CLI should be `v0.6.0` or newer.\n- Application Default Credentials must be available before starting Gemini.\n- For read-only discovery, require `roles/alloydb.viewer`.\n- For SQL access, require `roles/alloydb.client`.\n- For admin actions, require `roles/alloydb.admin` plus `roles/serviceusage.serviceUsageConsumer`.\n- For observability, also require `roles/monitoring.viewer`.\n- Prefer IAM-first auth. Password prompts are fallback-only.\n- If the instance uses private IP, Gemini CLI must run in the same VPC network.\n- The extension binds connection settings at session start; if the user needs a different instance or database, save/resume chat and restart Gemini with the new environment.\n- Recent upstream changes removed broken keychain password behavior, so do not promise keychain-backed credential storage.\n\nFor non-Gemini agents, or when the user explicitly wants a shared MCP server, guide them through MCP Toolbox with the AlloyDB prebuilt config instead of inventing a custom server:\n\n```json\n{\n  \"mcpServers\": {\n    \"alloydb\": {\n      \"command\": \"./toolbox\",\n      \"args\": [\"--prebuilt\", \"alloydb-postgres\", \"--stdio\"],\n      \"env\": {\n        \"ALLOYDB_POSTGRES_PROJECT\": \"PROJECT_ID\",\n        \"ALLOYDB_POSTGRES_REGION\": \"REGION\",\n        \"ALLOYDB_POSTGRES_CLUSTER\": \"CLUSTER_NAME\",\n        \"ALLOYDB_POSTGRES_INSTANCE\": \"INSTANCE_NAME\",\n        \"ALLOYDB_POSTGRES_DATABASE\": \"DATABASE_NAME\",\n        \"ALLOYDB_POSTGRES_USER\": \"USERNAME\",\n        \"ALLOYDB_POSTGRES_PASSWORD\": \"PASSWORD\",\n        \"ALLOYDB_POSTGRES_IP_TYPE\": \"PRIVATE\"\n      }\n    }\n  }\n}\n```\n\nFor reusable project workflows, prefer generated workspace skills over one-off prompts:\n\n```bash\ntoolbox --prebuilt alloydb-postgres skills-generate \\\n  --name alloydb-monitor \\\n  --toolset monitor \\\n  --description \"AlloyDB monitoring skill\" \\\n  --output-dir .agents/skills\n```\n\nIf neither Gemini extensions nor MCP Toolbox are available, fall back to the manual `gcloud`, Auth Proxy, and SQL workflows already documented in this skill's reference files.\n\n---\n\n## References Index\n\nFor detailed guides and code examples, refer to the following documents in `references/`:\n\n- **[Cluster Setup](references/setup.md)**\n  - Cluster creation, instance types (primary, read pool), Private Service Access, gcloud commands.\n- **[Features](references/features.md)**\n  - Columnar engine, adaptive caching, ML embeddings, vector search, pgvector integration.\n- **[Migration](references/migration.md)**\n  - Migration from Cloud SQL or on-prem PostgreSQL, Database Migration Service patterns.\n- **[Observability](references/observability.md)**\n  - PromQL patterns, Cloud Monitoring setup, key metrics, alert policies, dashboard recommendations, Query Insights.\n- **[Operations](references/operations.md)**\n  - EXPLAIN ANALYZE, pg_stat_activity, bloat detection, autovacuum tuning, invalid indexes, security hardening, PITR, cross-region failover, credential rotation, Auth Proxy sidecar.\n- **[Gemini + MCP Guidance](references/gemini-mcp.md)**\n  - Extension install, IAM prerequisites, env vars, private-IP constraints, and MCP Toolbox fallback config.\n\n---\n\n## Official References\n\n- <https://cloud.google.com/alloydb/docs>\n- <https://docs.cloud.google.com/alloydb/docs/connect-ide-using-mcp-toolbox>\n- <https://github.com/gemini-cli-extensions/alloydb>\n- <https://github.com/gemini-cli-extensions/alloydb-observability>\n\n## Shared Styleguide Baseline\n\n- Use shared styleguides for generic language/framework rules to reduce duplication in this skill.\n- [General Principles](https://github.com/cofin/flow/blob/main/templates/styleguides/general.md)\n- [PostgreSQL / psql](https://github.com/cofin/flow/blob/main/templates/styleguides/databases/postgres_psql.md)\n- [GCP Scripting](https://github.com/cofin/flow/blob/main/templates/styleguides/cloud/gcp_scripting.md)\n- Keep this skill focused on tool-specific workflows, edge cases, and integration details.","tags":["alloydb","flow","cofin","agent-skills","ai-agents","beads","claude-code","codex","cursor","developer-tools","gemini-cli","opencode"],"capabilities":["skill","source-cofin","skill-alloydb","topic-agent-skills","topic-ai-agents","topic-beads","topic-claude-code","topic-codex","topic-cursor","topic-developer-tools","topic-gemini-cli","topic-opencode","topic-plugin","topic-slash-commands","topic-spec-driven-development"],"categories":["flow"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/cofin/flow/alloydb","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add cofin/flow","source_repo":"https://github.com/cofin/flow","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 11 github stars · SKILL.md body (15,175 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-04-24T01:03:24.744Z","embedding":null,"createdAt":"2026-04-23T13:03:57.365Z","updatedAt":"2026-04-24T01:03:24.744Z","lastSeenAt":"2026-04-24T01:03:24.744Z","tsv":"'-01':842,843 '-06':1290 '-15':1291 '/alloydb-auth-proxy':253,296 '/alloydb/docs':1875 '/alloydb/docs/connect-ide-using-mcp-toolbox':1878 '/cofin/flow/blob/main/templates/styleguides/cloud/gcp_scripting.md)':1915 '/cofin/flow/blob/main/templates/styleguides/databases/postgres_psql.md)':1910 '/cofin/flow/blob/main/templates/styleguides/general.md)':1905 '/database/postgresql/*':890 '/gemini-cli-extensions/alloydb':1409,1881 '/gemini-cli-extensions/alloydb-observability':1435,1884 '/toolbox':1646 '00z':1294 '1':84,311,480 '10000':1074 '127.0.0.1':302,871,1137 '14':1257 '18':1197 '2':91,340,492 '200':918,1194,1206 '2025':841,1289 '3':100,373,507 '30':929,1293 '4':367,404 '5':436 '5432':256,299,304,1138 '5432/mydb':872 '5m':960 '80':908,914 '99.95':179 '99.99':176 'access':295,316,321,567,730,1527,1782 'action':193,1532 'activ':4,910,961,1024,1028,1044,1833 'adapt':151,1789 'add':264,355,384,425,614,796,1158,1209 'admin':470,1531 'agent':94,125,494,1615 'agents/skills':1726 'ai':160 'alert':671,906,912,927,998,1423,1821 'alloc':329,734 'alloydb':1,6,13,23,37,42,44,129,134,198,211,231,280,289,317,351,394,441,486,489,504,568,583,801,879,883,953,965,978,1107,1165,1170,1244,1271,1313,1365,1376,1401,1448,1461,1465,1469,1473,1477,1481,1486,1491,1633,1644,1650,1654,1659,1663,1668,1673,1678,1682,1686,1708,1715,1720 'alloydb-auth-proxi':1106 'alloydb-monitor':1714 'alloydb-observ':488 'alloydb-postgr':1649,1707 'alloydb.googleapis.com':889 'alloydb.googleapis.com/database/postgresql/*':888 'alongsid':1114 'alreadi':1747 'also':1539 'alway':563,655,688 'amount':835 'analyt':409,411,601,782 'analyz':684,694,831,1016,1087,1830 'antigrav':557 'app':1145 'applic':438,451,860,1116,1134,1509 'appropri':751 'arg':1647 'attach':144 'auth':290,442,516,584,760,863,873,1101,1108,1546,1742,1849 'auto':3,169,1411,1437 'auto-activ':2 'auto-manag':168 'auto-upd':1410,1436 'automat':395,433,1132 'autovacuum':937,1064,1091,1836 'avail':74,155,175,542,886,1514,1735 'avg':950 'back':513,1608,1737 'backoff':718,1181 'backup':107,1246 'base':143,362,621 'baselin':1202,1887 'bash':269,1269,1311,1403,1429,1444,1459,1704 'behavior':1601 'behind':939 'benefit':812,821 'bind':1570 'bloat':1054,1089,1834 'broken':1598 'buffer':695,1017 'built':149 'built-in':148 'cach':153,805,1790 'capac':964 'case':1926 'chang':1596 'chat':1586 'check':427,798 'checklist':1348 'checkpoint':723 'choos':359 'claud':554 'clean':479 'cli':482,1350,1372,1503,1560 'client':96 'cloud':56,135,665,892,895,942,1801,1816 'cloud.google.com':1874 'cloud.google.com/alloydb/docs':1873 'cluster':24,38,196,199,215,216,235,236,325,342,348,352,579,639,737,1263,1266,1272,1275,1283,1309,1314,1317,1336,1366,1471,1665,1666,1770,1773 'code':1761 'codex':555 'column':431,800,809,817 'columnar':29,146,152,258,262,406,416,423,429,597,777,786,794,804,815,828,849,1787 'com':955,967,980 'combin':58 'command':192,194,1645,1784 'compat':17,51 'comput':68 'concurr':1207 'config':9,506,1332,1447,1635,1870 'configur':25,39,374,577,667,726,732,1392,1443,1455,1500 'connect':26,92,126,250,267,338,437,445,458,587,660,674,757,855,911,917,962,971,1135,1190,1193,1208,1233,1325,1359,1571 'constraint':1865 'contain':1113 'continu':1245 'core':1400 'count':225,248,361,753,933 'cpu':224,360,673,752,904,948,958 'cpu-count':223 'creat':195,200,208,213,227,233,328,334,341,346,353,1260 'creation':580,640,1774 'credenti':704,1141,1147,1511,1609,1847 'cross':1296,1844 'cross-region':1295,1843 'current':475 'custom':1640 'dashboard':1002,1422,1823 'data':1004 'databas':19,52,88,99,103,866,956,968,981,1151,1479,1584,1675,1676,1808 'dataset':699 'date':840 'day':1258 'dbname':282,305 'dead':931,1058,1072,1078 'dedic':485,1370 'default':744,1256,1510 'degrad':478 'deliv':725 'deploy':702 'desc':822,1051,1080 'descript':1719 'detail':1758,1929 'detect':1090,1095,1835 'differ':1581 'dir':1725 'direct':459,596,1384 'disabl':1183 'disaggreg':140 'disast':1236 'discoveri':1522 'disk':145 'distinct':82 'doc':11 'docs.cloud.google.com':1877 'docs.cloud.google.com/alloydb/docs/connect-ide-using-mcp-toolbox':1876 'document':1748,1767 'duplic':1897 'durat':1031,1038,1050 'edg':1925 'emb':1378 'embed':157,1792 'enabl':257,405,414,605,664,785,894,1247 'endpoint':1337 'engin':30,147,259,263,407,417,424,598,778,787,795,829,1788 'env':1653,1860 'environ':1331,1593 'estim':811,820 'exampl':776,1000,1762 'exceed':1205 'expertis':14 'explain':683,693,830,1015,1086,1829 'explicit':1620 'exponenti':717,1180 'export':1460,1464,1468,1472,1476,1480,1485,1490 'expos':592 'exposur':767 'extens':491,509,537,1373,1402,1405,1416,1431,1446,1569,1730,1856 'extern':294 'failov':109,1345,1846 'fall':512,938,1736 'fallback':1551,1869 'fallback-on':1550 'familiar':60 'featur':133,1785 'file':1754 'first':1397,1545 'flow':1383 'focus':1919 'follow':1766 'forward':877 'full':995,1226,1344 'fulli':47 'g':428,814 'gce':271 'gce/gke':453 'gcloud':197,210,230,350,515,1169,1270,1312,1741,1783 'gcp':8,21,33,90,1911 'gemini':481,533,536,1349,1371,1386,1404,1430,1445,1458,1502,1517,1559,1589,1614,1729,1852 'gemini-on':532 'general':1901 'generat':1696,1712 'generic':1892 'github.com':1408,1434,1880,1883,1904,1909,1914 'github.com/cofin/flow/blob/main/templates/styleguides/cloud/gcp_scripting.md)':1913 'github.com/cofin/flow/blob/main/templates/styleguides/databases/postgres_psql.md)':1908 'github.com/cofin/flow/blob/main/templates/styleguides/general.md)':1903 'github.com/gemini-cli-extensions/alloydb':1407,1879 'github.com/gemini-cli-extensions/alloydb-observability':1433,1882 'give':116 'go':679 'googl':12,55,64,261,422,793,944 'googleapi':954,966,979 'group':844 'guardrail':562 'guid':1451,1626,1759 'guidanc':110,117,521,546,1235,1501,1854 'hardcod':775 'harden':1098,1841 'heavi':382,609 'high':71,934 'host':279,301,463,476 'iam':1130,1544,1858 'iam-first':1543 'id':977,1276,1318,1658 'ident':1125 'idl':1047 'import':1499 'index':1094,1756,1839 'indic':936 'initi':648 'innov':69 'insight':1826 'instal':1398,1406,1413,1432,1857 'instanc':212,220,232,240,345,358,390,749,976,1198,1475,1555,1582,1670,1671,1775 'instance-typ':219,239,389 'instead':1636 'integr':161,464,1796,1928 'interpret':1088 'invalid':1093,1838 'invent':1638 'ip':183,190,277,281,331,462,573,595,733,764,881,1493,1558,1688,1864 'json':1642 'keep':111,1916 'key':191,900,1819 'keychain':1599,1607 'keychain-back':1606 'kubernet':1104,1227 'lag':677,922,973,985 'language/framework':1893 'last':1063 'launch':899 'layer':76,83,113,1146,1360 'limit':1218 'live':1019,1061 'local':876 'log':142 'log-bas':141 'look':847 'lowest':469 'lowest-admin':468 'make':529 'manag':18,48,87,170,396,654,710,773,945,1142,1155,1329,1375 'manual':162,172,1740 'max':916,974,1189,1192 'mcp':496,499,511,1352,1381,1395,1624,1629,1732,1853,1867 'mcpserver':1643 'metric':884,901,1421,1820 'migrat':1797,1799,1809 'ml':156,1791 'mode':1213 'monitor':666,893,896,943,1018,1428,1716,1718,1721,1817 'must':550,575,1512,1561 'n':226,249,1057,1060,1071,1077 'name':201,214,234,266,808,810,1667,1672,1677,1713 'nativ':158 'need':378,1390,1579 'neither':1728 'network':181,204,205,741,745,970,1279,1280,1567 'never':591 'new':1160,1262,1592 'newer':1508 'node':247,926 'non':1613 'non-gemini':1612 'observ':106,490,882,991,1415,1538,1812 'offici':503,1871 'old':1185 'oltp':610 'on-prem':1804 'one':1701 'one-off':1700 'opencod':556 'oper':75,101,545,1006,1082,1221,1339,1827 'optim':635 'option':1484,1489 'order':465,790,797,818,837,839,1048,1075 'origin':1265 'output':854,1724 'output-dir':1723 'outsid':447,588 'overhead':615 'overview':43 'pass':207 'password':206,637,649,707,768,870,1152,1167,1174,1488,1547,1600,1684,1685 'path':472,538 'pattern':27,268,413,612,758,941,997,1026,1100,1811,1815 'peer':337,736 'perform':72,1175,1427 'period':705 'pg':1022,1042,1066,1831 'pg18':920,1188 'pgbouncer':1210 'pgvector':1795 'pid':1033 'pitr':1243,1248,1842 'plain':559 'plan':691,853 'plane':1005 'plus':1535 'po':41 'pod':1117,1122 'point':1239,1286 'point-in-tim':1238,1285 'polici':999,1822 'pool':167,229,243,246,376,387,393,402,620,629,925,1234,1779 'port':255,298,303 'postgr':283,285,306,308,869,1462,1466,1470,1474,1478,1482,1487,1492,1651,1655,1660,1664,1669,1674,1679,1683,1687,1709 'postgresql':16,50,62,132,138,868,957,969,982,1196,1807,1906 'postgresql-compat':15,49 'prebuilt':505,1634,1648,1706 'prefer':540,1368,1439,1542,1695 'prem':1806 'prerequisit':1859 'primari':209,222,344,357,748,1302,1777 'principl':1902 'privat':182,189,276,314,319,461,565,594,728,763,880,1495,1496,1557,1690,1780,1863 'private-ip':1862 'produc':22 'product':681,701,747,898,1012,1099,1201 'project':1463,1656,1657,1693 'projects/p/locations/r/clusters/c/instances/i':254 'projects/project/locations/region/clusters/cluster/instances/instance':297 'projects/project_id/locations/region/clusters/cluster_id':1284 'prometheus':946 'promis':1605 'promot':686,1008,1299,1306,1315,1323,1335 'prompt':1548,1703 'promql':940,947,996,1814 'provis':36,85,118,1363 'proxi':252,291,443,517,585,761,864,874,1102,1109,1743,1850 'psa':185,322,574 'psc':1498 'psql':278,300,518,1907 'public':187,572,766,1497 'python':859,865 'queri':412,634,687,690,825,1010,1029,1035,1040,1426,1825 'query-perform':1425 'quick':127,1025 'rais':1216 'rang':332 'rather':1214 'read':40,164,166,173,228,242,245,375,381,386,392,398,619,623,628,924,1520,1778 'read-heavi':380 'read-on':1519 'read-pool-node-count':244 'recent':1594 'recommend':292,430,434,802,816,1003,1824 'recov':646 'recoveri':1237,1242 'reduc':1896 'refer':128,526,992,1083,1222,1340,1753,1755,1763,1769,1872 'references/features.md':1786 'references/gemini-mcp.md':1855 'references/migration.md':1798 'references/observability.md':993,1813 'references/operations.md':1084,1223,1341,1828 'references/setup.md':1772 'refresh':1129 'region':178,202,203,217,218,237,238,833,846,1277,1278,1297,1303,1319,1321,1467,1661,1662,1845 'relnam':1056 'remov':1597 'replic':676,921,972,983 'replica':171,174,399,984,1298 'repres':698 'requir':186,287,318,658,987,1126,1523,1528,1533,1540 'restart':721,1178,1588 'restor':1259,1273,1274 'retent':1254 'reusabl':1692 'role':988 'roles/alloydb.admin':1534 'roles/alloydb.client':1127,1529 'roles/alloydb.viewer':1524 'roles/monitoring.viewer':668,989,1541 'roles/serviceusage.serviceusageconsumer':1536 'roll':720,1177 'rotat':703,712,1148,1157,1230,1848 'rule':1894 'run':682,875,1105,1562 'runbook':1231,1346 'save/resume':1585 'scale':165 'scan':850 'schedul':715 'scope':1442,1449 'script':1912 'search':1794 'second':930,986,1251 'secondari':1308,1316,1320 'secret':653,709,772,1154,1161,1186,1328 'section':1355 'secur':663,1097,1840 'see':990,1081,1220,1338 'select':260,421,792,806,832,1032,1055 'separ':114,1394 'server':1396,1625,1641 'servic':53,315,320,566,729,1781,1810 'session':1574 'set':312,636,670,1173,1191,1572 'set-password':1172 'setup':31,163,779,1771,1818 'share':1623,1885,1889 'sidecar':1103,1112,1119,1228,1851 'size':618 'skill':79,524,531,549,1698,1711,1722,1751,1900,1918 'skill-alloydb' 'skills-gener':1710 'sla':177,180 'small':370 'sourc':770,1282 'source-clust':1281 'source-cofin' 'spec':1229 'specif':1923 'specifi':656 'sql':136,520,784,1027,1526,1745,1802 'sslmode':286,657 'standard':131 'start':365,1036,1457,1516,1575 'stat':1023,1043,1067,1832 'state':1039,1046 'stdio':1652 'step':310,339,372,403,435 'still':551 'storag':66,139,1610 'store':650,706,1149 'string':661,856,1326 'styleguid':1886,1890 'substitut':632 'sum':834 'support':471,497,571 'sustain':909 't14':1292 'tabl':265,419,426,607,791,807,1052,1069 'termin':560 'thing':123 'three':81 'time':952,1241,1288 'token':1131 'tool':1922 'tool-specif':1921 'toolbox':500,1353,1382,1630,1705,1733,1868 'toolset':1717 'topic-agent-skills' 'topic-ai-agents' 'topic-beads' 'topic-claude-code' 'topic-codex' 'topic-cursor' 'topic-developer-tools' 'topic-gemini-cli' 'topic-opencode' 'topic-plugin' 'topic-slash-commands' 'topic-spec-driven-development' 'traffic':624 'transact':1212 'tune':105,1092,1837 'tup':1059,1062,1073,1079 'tupl':932 'type':221,241,391,1494,1689,1776 'unaffect':1268 'unavail':1305 'under':1380 'updat':1163,1324,1412,1438 'upstream':1595 'url':867 'use':34,77,439,466,483,498,564,581,627,716,738,759,826,861,1120,1556,1888 'user':284,307,1068,1166,1171,1387,1419,1453,1483,1578,1619,1680 'usernam':1681 'util':905,949,959 'v0.6.0':1506 'valid':689,722,1013 'valu':935 'var':1861 'vcpus':368 'vector':1793 'verifi':727,823 'version':1162,1187 'vertex':159 'via':251,288,460,1021,1168,1327 'vm':272 'vpc':275,336,449,457,590,735,740,1566 'vs':130,963 'want':1420,1621 'watch':903 'way':644 'window':1255 'within':400,452,1252 'work':552 'workflow':309,561,1694,1746,1924 'workload':364,371,383,756,783,1020,1124,1204 'workspac':1441,1450,1697 'workspace-scop':1440 'write':611,617","prices":[{"id":"011072d9-8768-434e-be16-06e04008b905","listingId":"46954143-53af-4dbf-8201-760eef688e87","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"cofin","category":"flow","install_from":"skills.sh"},"createdAt":"2026-04-23T13:03:57.365Z"}],"sources":[{"listingId":"46954143-53af-4dbf-8201-760eef688e87","source":"github","sourceId":"cofin/flow/alloydb","sourceUrl":"https://github.com/cofin/flow/tree/main/skills/alloydb","isPrimary":false,"firstSeenAt":"2026-04-23T13:03:57.365Z","lastSeenAt":"2026-04-24T01:03:24.744Z"}],"details":{"listingId":"46954143-53af-4dbf-8201-760eef688e87","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cofin","slug":"alloydb","github":{"repo":"cofin/flow","stars":11,"topics":["agent-skills","ai-agents","beads","claude-code","codex","context-driven-development","cursor","developer-tools","gemini-cli","opencode","plugin","slash-commands","spec-driven-development","subagents","tdd","workflow"],"license":"apache-2.0","html_url":"https://github.com/cofin/flow","pushed_at":"2026-04-19T23:22:27Z","description":"Context-Driven Development toolkit for AI agents — spec-first planning, TDD workflow, and Beads integration.","skill_md_sha":"eb49abe877f1d5ea9934108e9ca29a2ca86b0d69","skill_md_path":"skills/alloydb/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cofin/flow/tree/main/skills/alloydb"},"layout":"multi","source":"github","category":"flow","frontmatter":{"name":"alloydb","description":"Auto-activate for AlloyDB in GCP configs or docs. Google AlloyDB expertise: PostgreSQL-compatible managed database on GCP. Produces AlloyDB cluster configurations, connection patterns, and columnar engine setups on GCP. Use when: provisioning AlloyDB clusters, configuring read pools, using columnar engine, Private Service Access networking, or migrating from Cloud SQL. Not for AlloyDB Omni (see alloydb-omni) or vanilla PostgreSQL without AlloyDB features."},"skills_sh_url":"https://skills.sh/cofin/flow/alloydb"},"updatedAt":"2026-04-24T01:03:24.744Z"}}