Install
openclaw skills install neondb-skillManage Neon serverless Postgres databases. Create projects, branches, databases, and execute queries. Perfect for agent workflows needing persistent storage with branching (like git for databases), scale-to-zero, and instant provisioning.
openclaw skills install neondb-skillNeon is serverless Postgres — scales to zero, branches like git, instant provisioning. Perfect for AI agents needing databases without ops overhead.
# Homebrew (recommended)
brew install neonctl
# Or npm
npm i -g neonctl
# Interactive (opens browser)
neonctl auth
# Or with API key (get from console.neon.tech)
export NEON_API_KEY=your_api_key_here
neonctl projects create --name "my-agent-db"
# List all projects
neonctl projects list
# Create project
neonctl projects create --name "project-name"
# Delete project
neonctl projects delete <project-id>
# Get project details
neonctl projects get <project-id>
# List branches
neonctl branches list --project-id <project-id>
# Create branch (fork from main)
neonctl branches create --project-id <project-id> --name "dev-branch"
# Create branch from specific point
neonctl branches create --project-id <project-id> --name "restore-test" --parent main --timestamp "2024-01-15T10:00:00Z"
# Reset branch to parent
neonctl branches reset <branch-id> --project-id <project-id> --parent
# Delete branch
neonctl branches delete <branch-id> --project-id <project-id>
# Compare schemas
neonctl branches schema-diff --project-id <project-id> --base-branch main --compare-branch dev
# List databases
neonctl databases list --project-id <project-id> --branch <branch-name>
# Create database
neonctl databases create --project-id <project-id> --branch <branch-name> --name "mydb"
# Delete database
neonctl databases delete <db-name> --project-id <project-id> --branch <branch-name>
# Get connection string (default branch)
neonctl connection-string --project-id <project-id>
# Get connection string for specific branch
neonctl connection-string <branch-name> --project-id <project-id>
# Pooled connection (recommended for serverless)
neonctl connection-string --project-id <project-id> --pooled
# Extended format (with all details)
neonctl connection-string --project-id <project-id> --extended
# List roles
neonctl roles list --project-id <project-id> --branch <branch-name>
# Create role
neonctl roles create --project-id <project-id> --branch <branch-name> --name "app_user"
# Get connection string and connect
neonctl connection-string --project-id <project-id> | xargs psql
# Or direct
psql "$(neonctl connection-string --project-id <project-id>)"
# Get the string
CONNECTION_STRING=$(neonctl connection-string --project-id <project-id> --pooled)
# Use in any Postgres client
psql "$CONNECTION_STRING" -c "SELECT * FROM users LIMIT 5;"
Set context to avoid passing --project-id every time:
# Set project context
neonctl set-context --project-id <project-id>
# Now commands use that project automatically
neonctl branches list
neonctl databases list
neonctl connection-string
# Create project for org
neonctl projects create --name "website-org-db" -o json
# Create production branch (main is created by default)
# Create dev branch for testing
neonctl branches create --name "dev" --project-id <id>
# Get connection strings
neonctl connection-string main --project-id <id> --pooled # for prod
neonctl connection-string dev --project-id <id> --pooled # for dev
# Connect and create schema
psql "$(neonctl cs --project-id <id>)" <<EOF
CREATE TABLE leads (
id SERIAL PRIMARY KEY,
business_name VARCHAR(255) NOT NULL,
category VARCHAR(100),
location VARCHAR(255),
phone VARCHAR(50),
email VARCHAR(255),
website VARCHAR(255),
status VARCHAR(50) DEFAULT 'identified',
priority VARCHAR(20) DEFAULT 'medium',
notes TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_leads_status ON leads(status);
CREATE INDEX idx_leads_category ON leads(category);
EOF
# Create a branch to test schema changes
neonctl branches create --name "schema-experiment" --project-id <id>
# Test your changes on the branch
psql "$(neonctl cs schema-experiment --project-id <id>)" -c "ALTER TABLE leads ADD COLUMN score INT;"
# If it works, apply to main. If not, just delete the branch
neonctl branches delete schema-experiment --project-id <id>
# JSON (for parsing)
neonctl projects list -o json
# YAML
neonctl projects list -o yaml
# Table (default, human-readable)
neonctl projects list -o table
# API key (required if not using `neonctl auth`)
export NEON_API_KEY=your_key
# Default project (alternative to set-context)
export NEON_PROJECT_ID=your_project_id
neonctl me -o json 2>/dev/null && echo "Authenticated" || echo "Need to run: neonctl auth"
# One-liner query
psql "$(neonctl cs)" -c "SELECT COUNT(*) FROM leads WHERE status='contacted';"
psql "$(neonctl cs)" -c "COPY (SELECT * FROM leads) TO STDOUT WITH CSV HEADER" > leads.csv
psql "$(neonctl cs)" -c "\COPY leads(business_name,category,location) FROM 'import.csv' WITH CSV HEADER"
--pooled connection string for serverless workloadsneonctl meneonctl authnpm i -g neonctl