AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides guidance for working with Lakebase Postgres on Neon. It covers connection management, schema migrations, branching workflows, autoscaling, and performance diagnostics. It is designed to assist with database operations including inspecting schemas, optimizing egress, and implementing search features like vector, full-text, and hybrid search. The skill distinguishes between pooled and direct connection usage, provides diagnostic tools for performance analysis, and outlines procedures for managing compute resources and database branches.
What it does
- Provides best practices for pooled versus direct connection usage
- Guides schema migration and branching workflows including schema-only and branch-per-PR
- Offers diagnostic tools for identifying egress anti-patterns and query performance issues
- Supports configuration of autoscaling, scale-to-zero, and read replicas
- Facilitates implementation of semantic, full-text, and hybrid search features
- Assists with compute management tasks like resizing, suspending, and restarting
When to use it
- When working with an existing DATABASE_URL, SQL, or database schema
- When diagnosing high database bills or network egress issues
- When planning isolated environments for migration testing or preview deployments
- When implementing vector, full-text, or hybrid search capabilities
- When needing to inspect database performance or compute behavior
Advantages
- Provides clear distinctions between pooled and direct connection use cases
- Offers structured workflows for database branching and migration testing
- Includes specific diagnostic queries for identifying egress and performance bottlenecks
- Integrates with Neon CLI and MCP for operational tasks
- Supports modern development patterns like branch-per-PR
Usage examples
- “How do I optimize my database egress costs?”
- The agent will guide you through diagnosing top egress contributors using pg_stat_statements, analyzing your codebase for anti-patterns, and applying fixes like column selection and pagination.
- “Create a new branch for testing my schema migration.”
- The agent will verify your CLI or MCP authentication and execute the branch creation, providing you with the connection string for the new isolated environment.
- “Which connection string should I use for my migration script?”
- The agent will explain that migrations require a direct (unpooled) connection and help you identify the correct string without the -pooler suffix.
- “How can I implement vector search in my Neon database?”
- The agent will provide guidance on using Lakebase Search, including setting up the necessary extensions and managing the search implementation via your ORM.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/neondatabase/neon-postgres/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip neon-postgres.zip -d .agents/skills
Documentation by Neon
FIRST: Use the parent neon skill for a Neon overview, getting started with Neon, Neon development best practices, and more.
If the neon skill is not installed, fetch it from https://neon.com/docs/ai/skills/neon/SKILL.md or install it with:
neon skills -s neon -yLakebase Postgres
Lakebase Postgres is the database at the core of Neon. It runs on the lakebase architecture — OLTP built directly on cloud object storage — which decouples storage from compute to offer autoscaling, branching, instant restore, and scale-to-zero. It's fully compatible with Postgres and works with any language, framework, or ORM that supports Postgres.
It is the same database whether you reach it through Neon or through Databricks; this skill covers the Neon access path.
Login, users, sessions, and @neon/auth belong in neon-auth.
Live queries, reactive UIs, and realtime data belong in neon-realtime.
Setup Flow
1. Select the organization and project
If a DATABASE_URL is already supplied (prompt, environment, or repo) or a .neon file points at a project, use it. Do not list organizations or create a second project for schema work.
Otherwise use the CLI (default) or MCP server to list organizations and projects. Let the user select an existing project or create a new one.
2. Get the connection string
If a DATABASE_URL is already supplied, use it. Do not fetch another through the CLI or MCP.
Otherwise use the CLI (default), neon env pull, or the MCP server to get the connection string. Store it in .env as DATABASE_URL. Read the file first before modifying it, to avoid overwriting existing values.
When to use pooled vs direct connections
| Use case | Connection type |
|---|---|
| Web applications, serverless functions | Pooled (-pooler) |
| Schema migrations | Direct |
| pg_dump / pg_restore | Direct |
| Logical replication | Direct |
| Long-running analytics with temp tables | Direct |
| Admin tasks needing SET or session state | Direct |
| LISTEN / NOTIFY | Direct |
3. Pick the connection method and driver
Preserve the existing ORM and driver. For new TypeScript schema work with no established choice, Drizzle is a suggestion: https://neon.com/docs/guides/drizzle.md. Refer to the connection methods guide to pick the correct driver based on how the runtime treats your code: https://neon.com/docs/connect/choose-connection.md.
Driver notes:
On Vercel, use
node-postgres(npm install pg) with Vercel Fluid compute andimport { attachDatabasePool } from "@vercel/functions";On Cloudflare, use
node-postgreswith Cloudflare HyperdriveOn Neon Functions, use
node-postgres, as the functions are long-running and reuse the pool across requests.Use the
@neondatabase/serverlessdriver for serverless and edge environments (for example, when using Netlify) — HTTP transport for one-shot queries, WebSocket for transaction support. Link: https://neon.com/docs/serverless/serverless-driver.md
4. Set up the schema
Manage schemas and migrations as code. Avoid running ad hoc schema migrations against your database, since they're hard to manage.
If you're using an ORM, follow your ORM's best practices to manage schemas and migrations. For example, if using Drizzle, only use Drizzle for schema and migration management unless instructed otherwise.
Branching
Use this when the user is planning isolated environments, schema migration testing, preview deployments, or branch lifecycle automation.
Key points:
Branches are instant, copy-on-write clones (no full data copy).
Each branch has its own compute endpoint.
Use the neon CLI or MCP server to create, inspect, and compare branches.
Link: https://neon.com/docs/introduction/branching.md
For detailed branch creation workflows (normal vs schema-only branches, reset-from-parent, CLI/MCP selection, and CI/CD patterns), read Branching workflows.
Migrations
Test a migration on a branch of production, against production-like data, before applying it to production.
Use a direct (non-pooled) connection string when you run the migration, not a pooled one. neon connection-string returns the direct string by default; make sure the hostname does not include the -pooler suffix.
Egress Optimization
Use this when a user reports high database bills, unexpected network transfer, egress spikes, query overfetching, or wants a cost-efficiency review of database query patterns.
Before editing code, read Egress optimization. Audit all five patterns: unused columns, missing pagination, repeated static reads, application-side aggregation, and JOIN duplication. Do not stop after fixing SELECT *.
Work in four steps: diagnose which queries transfer the most data, analyze the code behind them, fix the anti-patterns, then verify that behavior is preserved and transfer drops.
Troubleshooting and Neon-Specific Performance
Use Neon's predefined, read-only diagnostics before writing catalog queries by hand. The Neon CLI neon inspect db subcommands and the Neon MCP server's inspect_database tool run the same checks.
This section covers Neon-specific diagnostic tools, compute cache behavior, and platform signals. When the evidence points to generic Postgres work such as rewriting a query, choosing an index, changing a schema, or interpreting plan nodes, load the postgres-best-practices skill and carry the diagnostic evidence into that workflow.
Docs:
Query performance: https://neon.com/docs/postgresql/query-performance.md
pg_stat_statements: https://neon.com/docs/extensions/pg_stat_statements.mdNeon Local File Cache: https://neon.com/docs/extensions/neon.md
Choose CLI or MCP
Prefer the Neon CLI when terminal access and authentication are available:
neon inspect db <check>The CLI resolves the project and branch from the current Neon context. Use --project-id, --branch, and --database-name to override it. Omit --database-name to inspect every database on the branch. Use --db-url only when inspecting a Postgres database directly instead of resolving it through the Neon API.
When using Neon MCP, call inspect_database with projectId and one check. Pass branchId, databaseName, or computeId only when needed. Omit databaseName to inspect all databases on the branch. Increase limit only when the result says it was truncated.
Pick the Diagnostic
| Symptom or question | Checks |
|---|---|
| Which relations consume storage? | table-sizes, index-sizes |
| Is an index unused or a table scanned heavily? | unused-indexes, seq-scans |
| What has run for 5+ minutes or holds locks? | long-running-queries, locks |
| Which queries consume the most total time? | outliers |
| Which queries run most often? | calls |
| Does the active data fit in compute cache? | lfc-hit-rate, working-set |
| Is autovacuum behind or is space wasted? | vacuum-stats, bloat |
| Is logical replication healthy? | replication-slots, subscriptions |
Do not confuse these checks:
long-running-queriesreports statements running right now for more than five minutes.outliersranks the top queries by cumulative execution time since statistics were reset. It does not rank by mean latency.callsranks by execution count over the same statistics history.
outliers and calls require pg_stat_statements. lfc-hit-rate and working-set require the neon extension. If a check reports a missing extension, ask before running the suggested CREATE EXTENSION statement because installing an extension modifies the database.
Interpret Results Safely
Treat
unused-indexesas a candidate list, not permission to drop indexes. Confirm the observation window, constraints, and workload before removal.A sequential scan can be correct for a small table or a query reading much of a table. Check table size, selectivity, and the query plan before adding an index.
bloatis a statistical estimate. Confirm the impact and plan locks or maintenance beforeVACUUM FULL,REINDEX, or similar remediation.Cache and Postgres statistics reset when compute restarts, including scale-to-zero suspension. Run a representative workload before interpreting fresh
lfc-hit-rate,working-set,vacuum-stats, orpg_stat_statementsresults.Compute-wide checks (
lfc-hit-rate,working-set, andreplication-slots) run once even when inspecting every database.One failing database can fail an all-databases inspection; retry the relevant check with an explicit
databaseNameto isolate it.
Inspect Neon Cache Behavior Per Query
Standard EXPLAIN (ANALYZE, BUFFERS) reports Postgres shared-buffer activity, but it does not show Neon's Local File Cache (LFC) or page prefetching. For a safe read-only query, add Neon's FILECACHE and PREFETCH options:
EXPLAIN (ANALYZE, BUFFERS, PREFETCH, FILECACHE)
SELECT ...;File cache: hitscounts pages found in the compute's LFC.File cache: missescounts pages not found in the LFC and fetched from database storage.Prefetch: hits,misses,expired, andduplicatesshow how effectively Neon fetched pages before the executor requested them.
FILECACHE and PREFETCH provide metrics for this query and do not require the neon extension. By contrast, neon inspect db lfc-hit-rate and working-set provide compute-wide statistics and do require the extension.
The MCP explain_sql_statement tool can produce a standard plan but does not expose FILECACHE or PREFETCH options. To collect those Neon-specific metrics through MCP, use run_sql with the explicit, read-only EXPLAIN statement above.
Because ANALYZE executes the statement, use it only when execution is safe; do not run it autonomously for mutating SQL. Compare cold- and warm-cache runs carefully because the first execution can populate the cache and materially change later results.
Performance Workflow
Reproduce the symptom and note its time window.
Run the smallest relevant
inspectchecks from the table above.Identify a specific query before changing schema or compute. Use MCP
explain_sql_statementfor a standard plan, or the Neon-specificEXPLAINabove when LFC or prefetch behavior matters.If the bottleneck is query shape, indexing, schema, locking, or vacuum behavior, load
postgres-best-practicesand carry forward the inspection results and query plan. Keep Neon compute, cache, connection, and platform decisions in this skill.Re-run the same check and workload to verify the change.
Use MCP list_slow_queries instead of inspect_database when the user specifically needs queries ranked by average execution time with a custom threshold and limit. Outside the explicit EXPLAIN case above, use run_sql only for read-only diagnostic SQL when the predefined checks do not answer the question.
Computes
Use this when the user wants to resize a compute, change its scale-to-zero timeout, or start, suspend, restart, or delete it.
Manage computes with neon postgres computes. neon pg and neon lakebase are aliases of neon postgres.
neon postgres computes list # --branch <branch> or the branch .neon pins; --all-branches for the project
neon postgres computes get <compute-id>
neon postgres computes update <compute-id> --cu 0.25-2 --suspend-timeout 300
neon postgres computes restart <compute-id> # also start, suspend, deleteupdate sends only the flags you pass (--cu, --suspend-timeout, --name, --disabled) and fails when you pass none. Each change waits until Neon applies it; update, start, suspend, and restart then print the compute. With --no-wait the command returns once the API accepts the change; find the operation with neon operations list and check it with neon operations get <operation-id>. Add a compute, such as a read replica, with neon branches add-compute <branch>.
Autoscaling
Use this when the user needs compute to scale automatically with workload and wants guidance on CU sizing and runtime behavior.
Set a compute's autoscaling range with neon postgres computes update <compute-id> --cu <min>-<max> (for example --cu 0.25-2), or a fixed size with --cu 2.
Link: https://neon.com/docs/introduction/autoscaling.md
Scale to Zero
Use this when optimizing idle costs and discussing suspend/resume behavior, including cold-start trade-offs.
Key points:
Idle computes suspend automatically after a default of 5 minutes. Change the timeout with
neon postgres computes update <compute-id> --suspend-timeout <seconds>:0uses the plan default and-1disables suspension. Free cannot change it, Launch can only enable or disable suspension, and Scale can set any value from 60 to 604800 (one week).First query after suspend typically has a cold-start penalty (around hundreds of ms)
Storage remains active while compute is suspended.
Link: https://neon.com/docs/introduction/scale-to-zero.md
Keep hot reads off Postgres
Scale to zero only suspends an idle compute. When the same rarely changing rows (config, categories, feature flags) are read on every request, cache them outside Postgres, for example in Upstash Redis with a TTL. Cached reads cut egress and cold-start latency, and let an otherwise idle compute stay suspended.
Instant Restore
Use this when the user needs point-in-time recovery or wants to restore data state without traditional backup restore workflows.
Key points:
History windows for instant restore depend on plan limits.
Users can create branches from historical points-in-time.
Time Travel queries can be used for historical inspection workflows.
Link: https://neon.com/docs/introduction/branch-restore.md
Read Replicas
Use this for read-heavy workloads where the user needs dedicated read-only compute without duplicating storage.
Key points:
Replicas are read-only compute endpoints sharing the same storage.
Creation is fast and scaling is independent from primary compute.
Typical use cases: analytics, reporting, and read-heavy APIs.
Link: https://neon.com/docs/introduction/read-replicas.md
Connection Pooling
Use this when the user is in serverless or high-concurrency environments and needs safe, scalable Postgres connection management.
Key points:
Neon pooling uses PgBouncer.
Add
-poolerto endpoint hostnames to use pooled connections.Pooling is especially important in serverless runtimes with bursty concurrency.
Link: https://neon.com/docs/connect/connection-pooling.md
IP Allow Lists
Use this when the user needs to restrict database access by trusted networks, IPs, or CIDR ranges.
Link: https://neon.com/docs/introduction/ip-allow.md
Logical Replication
Use this when integrating CDC pipelines, external Postgres sync, or replication-based data movement.
Key points:
Neon supports native logical replication workflows.
Useful for replicating to/from external Postgres systems.
Link: https://neon.com/docs/guides/logical-replication-guide.md
Lakebase Search
Use Lakebase Search for semantic, full-text, and hybrid search:
For semantic search, including generating embeddings with the Neon AI Gateway, read Vector search.
For full-text search with BM25 ranking, read Full-text search.
For combining semantic and lexical results with fusion or reranking, read Hybrid search.
For managing any of the above through Drizzle ORM, read Managing Lakebase Search with Drizzle.
Links:
Gotchas
Pooled vs direct connections: use the direct URL for migrations, dumps, and replication
Neon gives you two connection strings for the same database: a pooled one (hostname with the -pooler suffix) and a direct/unpooled one (no -pooler suffix). neon env pull writes them as DATABASE_URL and DATABASE_URL_UNPOOLED. The pooled connection routes through PgBouncer in transaction mode, which doesn't support session-level operations. Choose the right one:
Pooled (
DATABASE_URL) — your application's normal query traffic, especially serverless and connection-per-request workloads.Direct (
DATABASE_URL_UNPOOLED) — schema migrations (Prisma Migrate, Drizzle Kit, Alembic, and others),pg_dump/pg_restore, logical replication,LISTEN/NOTIFY, and anything relying onSETor other session state.
Running migrations, dumps, or replication over the pooled connection can fail, and never in a way that names pooling: prepared statement "s0" already exists from Prisma Migrate, a SET search_path that doesn't persist past its own transaction so the next query reports relation "mytable" does not exist, or a write intermittently hitting a read-only transaction (SQLSTATE 25006) that a pooled backend inherited from an earlier client. Migration tools generally take both strings at once — Prisma's directUrl alongside url — so point that at the direct one rather than swapping DATABASE_URL and losing pooling for the application. See https://neon.com/docs/connect/connection-pooling.md.
Files
- ATTRIBUTION.mdAdded by AutoGineer870 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md18.9 KiB
- references/branching.md12.4 KiB
- references/egress-optimization.md9.3 KiB
- references/full-text-search.md4.2 KiB
- references/hybrid-search.md10.4 KiB
- references/lakebase-search-drizzle.md9.9 KiB
- references/vector-search.md12.2 KiB
references/branching.md
Lakebase Postgres Branching
Outcome: a created Neon branch — or a clear, actionable next step if creation cannot proceed. Choose the correct branch type, then execute branch creation with the CLI (or MCP where the CLI isn't usable).
Normal branch for realistic migration and query testing with real data.
Schema-only branch (Beta) for sensitive data workflows where structure is needed without copying rows.
Branch Type Decision
Use this decision rule first:
If the user wants to test complex migrations, performance, or behavior against production-like data, choose a normal branch.
If the user needs to avoid copying sensitive data, choose a schema-only branch.
If the request is ambiguous, ask one clarifying question: "Do you need realistic data for testing, or only schema structure because the data is sensitive?"
Tool Selection: CLI or MCP
Support both the Neon CLI and the Neon MCP server, but default to the CLI. Use MCP only when the CLI is unavailable or blocked in your environment, cannot be authenticated, or the user explicitly asks for MCP.
CLI link: https://neon.com/docs/cli/quickstart.md
Selection order
Check the CLI first:
Run
neon --versionto confirm the CLI is installed.Run
neon projects listto confirm auth/context.
If the CLI is missing, direct installation via quickstart.
If the CLI is installed but not authenticated, guide the user through
neon auth(or API key auth), then continue.Switch to MCP when the CLI cannot be used — no CLI access in the environment, execution blocked, or authentication not possible — or when the user explicitly asks for MCP. Confirm Neon MCP tools are available and authenticated (for example, listing projects works), then follow the MCP branch flow below.
If neither path is successful, use the Neon REST API:
MCP branch flow
Choose normal vs schema-only based on data sensitivity and migration-testing goals.
Use branch tools (for example,
create_branch) to create the branch.Validate with read tools (for example,
describe_branch).For migration workflows, prefer branch-based migration flows before applying to main.
Create a Normal Branch (Preferred for Real-Data Migration Testing)
Use this when the user needs realistic testing conditions. Real production-like data can expose edge cases your seed or data migration scripts miss, which helps catch migration issues before going live.
Link: https://neon.com/docs/introduction/branching.md
Steps
Settle the tool path first (see Selection order): verify the CLI with
neon --version, and fall back to MCP only if the CLI isn't usable.Ensure project context is set (
neon set-context --project-id <your-project-id>) or include--project-idon commands.Create the branch:
neon branches create \ --name <branch-name> \ --parent <parent-branch-id-or-name> \ --expires-at 2026-12-15T18:02:16ZOptionally fetch a connection string for the new branch:
neon connection-string <branch-name>
Create a Schema-Only Branch (Beta, Sensitive Data)
Use this when users must not copy production rows into the test branch.
Link: https://neon.com/docs/guides/branching-schema-only.md
Steps
Settle the tool path first (see Selection order): verify the CLI with
neon --version, and fall back to MCP only if the CLI isn't usable.Create the schema-only branch:
neon branches create \ --name <schema-only-branch-name> \ --parent <parent-branch-id-or-name> \ --schema-only \ --expires-at 2026-12-15T18:02:16ZIf multiple projects exist, include
--project-id:neon branches create \ --name <schema-only-branch-name> \ --parent <parent-branch-id-or-name> \ --schema-only \ --project-id <your-project-id> \ --expires-at 2026-12-15T18:02:16Z
Beta Support Guidance (Mandatory)
Schema-only branching is in Beta. If users report unexpected behavior, errors, or missing capabilities:
Ask them to share feedback in the Neon Console:
Recommend opening a support conversation in the Neon Discord:
Reset from Parent
Use this when a child branch has drifted and the user wants a clean refresh from the parent branch's latest schema and data.
Link: https://neon.com/docs/guides/reset-from-parent.md
What it does
Fully replaces the child branch schema and data with the parent's latest state.
Does not merge; local changes on the child branch are lost.
Keeps the same connection details, but active connections are briefly interrupted during reset.
When to recommend it
Development or staging branch is too far behind production.
User wants to start a new feature from a clean parent-aligned state.
Team wants to refresh staging from production for consistent testing baselines.
Hard constraints and blockers
Only child branches can be reset (root branches and schema-only root branches cannot be reset from parent).
If the target branch has children, reset is blocked until those child branches are removed.
After a parent branch is restored from snapshot, reset-from-parent may be unavailable for up to 24 hours.
Reset-from-parent always uses the current parent state; use Instant restore for point-in-time recovery needs.
CLI usage
neon branches reset <id|name> --parent --preserve-under-name <backup-branch-name>If project context is not already set, include the project ID:
neon branches reset <id|name> --parent --preserve-under-name <backup-branch-name> --project-id <project-id>--preserve-under-name keeps the pre-reset state as a backup branch for rollback, but adds one extra branch to clean up later.
Optional context setup to avoid repeating --project-id:
neon set-context --project-id <project-id>Console and API usage
Console: Open the target child branch, then select Reset from parent from Actions.
API: Use the restore endpoint for the branch and set
source_branch_idto the parent branch ID.
Notes and Caveats
Schema-only branches are for structure-only cloning and sensitive/compliant data controls.
Schema-only branches are independent root branches (no parent branch and no shared history), so reset-from-parent does not apply.
For migration testing that depends on real-world row shapes, volumes, and edge cases, prefer normal branches.
Root branch allowances and per-branch storage limits can cap how many schema-only branches users can create.
If a user is unsure, default recommendation is:
Normal branch for migration validation.
Schema-only branch for compliance and privacy constraints.
Useful Workflow Patterns
If the user asks for process recommendations (not just a single command), suggest these:
One branch per PR: Create branch when PR opens, delete when merged/closed, keep migration tests isolated.
One branch per test run: Create branch at pipeline start, run migrations/tests, delete at end for deterministic CI.
One branch per developer: Isolated dev environments with production-like shape; avoid team collisions on shared test data.
PII-aware branching: If production has sensitive data, derive dev/PR branches from an anonymized branch or use schema-only branches.
Ephemeral lifecycle hygiene: Set branch expiration and automate cleanup so old branches do not accumulate avoidable storage/history cost.
Post-creation environment update prompt
After branch creation, ask whether the user wants to update local environment credentials to point at the new branch.
Ask: "Do you want me to update your
.envDATABASE_URLto this new branch connection string?"If yes, write the new branch connection string to the requested env file/key.
If no, leave credentials unchanged and share the connection string for manual use.
Never overwrite an existing env key without explicit confirmation.
Neon Infrastructure as Code (neon.ts)
Beyond creating branches imperatively (CLI / MCP / API above), you can program what configuration new branches receive declaratively in neon.ts — Neon's infrastructure-as-code file (see the neon skill for the full reference). The branch property is a function of the branch being evaluated that returns its settings, so every branch born from your project gets a consistent lifecycle and compute profile without per-branch flags.
npm i @neon/config// neon.ts
import { defineConfig } from "@neon/config/v1";
export default defineConfig({
branch: (branch) => {
if (branch.exists) return {}; // never reconcile existing branches
if (branch.isDefault) return { protected: true };
if (branch.name.startsWith("preview/") || branch.name.startsWith("dev")) {
return {
parent: "main",
ttl: "7d", // ephemeral: auto-expire 7 days after creation (max 30d)
postgres: {
computeSettings: {
autoscalingLimitMinCu: 0.25, // scale to zero
autoscalingLimitMaxCu: 1, // keep throwaway branches cheap
suspendTimeout: "5m",
},
},
};
}
return {};
},
});The closure receives a read-only descriptor of the target branch — name, exists, isDefault, parentId, and more — and returns the tuning to apply: parent, ttl (auto-expiry), protected, and postgres.computeSettings. This is the declarative complement to the Ephemeral lifecycle hygiene and per-PR / per-test patterns above: instead of remembering --expires-at on every neon branches create, the TTL and compute profile live in version control and apply to every matching branch.
Because neon checkout applies this policy when it creates a branch, a fresh preview/* or dev-* branch comes up already expiring and scaled-to-zero. Checking out an existing branch doesn't reconcile it — run neon deploy (alias for neon config apply) to apply changes to a branch that already exists.
Branching in CI/CD
Common CI/CD use cases for Neon branches:
Per-PR preview deployments: Branch on PR open, deploy the preview against it, delete on close. Each PR gets an isolated database branch. Injecting the branch's
DATABASE_URLinto the deployed app is hosting-provider-specific — see preview-branches-with-cloudflare, preview-branches-with-vercel, or preview-branches-with-fly for tested patterns.Migration testing in CI: Run risky schema changes against a branch with production-like data before merge.
Schema diff visibility: Use the schema-diff GitHub Action to auto-comment a DB-layer diff on the PR.
Examples
Example 1: Migration testing with realistic data
User input: "I need to test a risky migration against production-like data."
Agent output shape:
Recommend a normal branch and explain why.
Share docs link: https://neon.com/docs/introduction/branching
Check the tool path first (CLI with
neon --version; MCP only if the CLI isn't usable).Provide commands:
neon branches create --name migration-test --parent main --expires-at 2026-12-15T18:02:16Zneon connection-string migration-test
Example 2: Sensitive data development workflow
User input: "We cannot copy production data because of compliance."
Agent output shape:
Recommend schema-only branch and explain why.
Share docs link: https://neon.com/docs/guides/branching-schema-only
Check the tool path first (CLI with
neon --version; MCP only if the CLI isn't usable).Provide command:
neon branches create --name compliance-dev --parent main --schema-only --project-id <your-project-id> --expires-at 2026-12-15T18:02:16Z
Mention Beta support path:
Further Reading
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an MCP server, Needs network access, Needs Node.js
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Neon
- Publisher
- Neon (Official)
- Source
- neondatabase/agent-skills · skills/neon-postgres · commit 2b0e2b6
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Also distributed in
- neondatabase/agent-skills
AutoGineer is not affiliated with or endorsed by Neon.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download neon-postgres.zip