home / skills / different-ai / agent-bank / vercel-dns
This skill helps manage DNS records for Vercel-hosted domains, simplifying listing, adding, removing records, and switching teams.
npx playbooks add skill different-ai/agent-bank --skill vercel-dnsReview the files below or copy the command above to add this skill to your agents.
---
name: vercel-dns
description: Manage DNS records for domains hosted on Vercel using the Vercel CLI
license: MIT
compatibility: opencode
metadata:
service: vercel
category: infrastructure
---
## What I Do
Manage DNS records for domains hosted on Vercel, including:
- List existing DNS records
- Add new DNS records (A, AAAA, CNAME, TXT, MX, etc.)
- Remove DNS records
- Switch between Vercel teams/accounts
## Prerequisites
- Vercel CLI installed: `npm i -g vercel` or `brew install vercel-cli`
- Logged in: `vercel login`
- Domain must be on Vercel nameservers or have Vercel as DNS provider
## 0 Finance Project
For the 0 Finance project, always use `--scope prologe`:
```bash
vercel dns ls 0.finance --scope prologe
vercel logs www.0.finance --scope prologe
```
## Common Commands
### Check Login & Team
```bash
# Check who you're logged in as
vercel whoami
# List available teams
vercel teams ls
# Switch to a specific team (use slug, not display name)
vercel switch <team-slug>
# Or use --scope flag instead of switching
vercel domains ls --scope prologe
```
### List Domains & Records
```bash
# List all domains in current team/account
vercel domains ls --scope prologe
# List DNS records for a specific domain
vercel dns ls <domain> --scope prologe
```
### Add DNS Records
```bash
# Add A record
vercel dns add <domain> <subdomain> A <ip-address>
# Add CNAME record
vercel dns add <domain> <subdomain> CNAME <target>
# Add TXT record (use quotes for values with special chars)
vercel dns add <domain> <subdomain> TXT '<value>'
# Add MX record with priority
# NOTE: MX priority is a separate argument (not embedded in the value)
vercel dns add <domain> <subdomain> MX <mail-server> <priority>
# Add record at apex (root domain) - use empty string or @
vercel dns add <domain> '' TXT '<value>'
vercel dns add <domain> @ MX mail.example.com 10
```
### Remove DNS Records
```bash
# First list to get record ID
vercel dns ls <domain>
# Remove by record ID
vercel dns rm <record-id>
# Remove with confirmation skip
vercel dns rm <record-id> --yes
```
## Examples
### Add Email DNS Records (MX + SPF)
```bash
# Add MX record for receiving email
# WARNING: Setting MX at the apex (root) will route *all* inbound mail for the domain.
# If the domain already uses Google Workspace / Fastmail / etc, prefer a dedicated subdomain.
vercel dns add example.com '' MX inbound-smtp.us-east-1.amazonaws.com 10
# Safer: use a subdomain for inbound routing
vercel dns add example.com inbound MX inbound-smtp.us-east-1.amazonaws.com 10
# Add SPF record
vercel dns add example.com '' TXT 'v=spf1 include:amazonses.com ~all'
```
### Add DKIM Records for Email Authentication
```bash
# DKIM CNAME records (common for SES, Google Workspace, etc.)
vercel dns add example.com selector._domainkey CNAME selector.dkim.provider.com
```
### Add Domain Verification TXT Record
```bash
# Google/AWS/other service verification
vercel dns add example.com _amazonses TXT 'verification-token-here'
vercel dns add example.com '' TXT 'google-site-verification=token'
```
### Subdomain Setup
```bash
# Point subdomain to a service
vercel dns add example.com api CNAME api.service.com
vercel dns add example.com app A 192.0.2.1
```
## Troubleshooting
### "You don't have permission to list the domain record"
The domain is in a different team. List teams and switch:
```bash
vercel teams ls
vercel switch <correct-team-slug>
```
### Domain Not Listed
- Domain might be in a different team/account
- Domain might not have Vercel as nameservers
- Check with `vercel domains ls`
### Record Not Propagating
- DNS propagation can take up to 48 hours (usually 5-30 minutes)
- Check propagation: `dig +short <record-name> <record-type>` or use dnschecker.org
- Verify record was added: `vercel dns ls <domain>`
## Token Saving Tips
### Fast Verification With `dig`
When a third-party UI says "Looking for DNS records", verify what the public internet sees:
```bash
dig +short TXT resend._domainkey.example.com
dig +short TXT send.example.com
dig +short MX send.example.com
dig +short TXT example.com
```
## Tips
1. Always check which team you're in before making changes
2. Use single quotes around TXT values to preserve special characters
3. For apex/root domain records, use empty string `''` as subdomain
4. Record IDs are shown in `vercel dns ls` output - needed for removal
5. Some records (like those added by Vercel automatically) cannot be removed
This skill manages DNS records for domains hosted on Vercel using the Vercel CLI. It lets you list, add, and remove common DNS record types (A, AAAA, CNAME, TXT, MX, etc.) and switch between teams or use scoped commands. It is CLI-first and designed for repeatable, scriptable DNS tasks for projects and email setups.
The skill issues Vercel CLI commands (vercel dns, vercel domains, vercel switch) to inspect and modify DNS records for the selected team or account. It lists records with their IDs, creates records with the correct arguments (including MX priority and TXT quoting), and removes records by ID. Commands can be run with a --scope flag instead of switching teams to target a specific Vercel team.
What prerequisites are required?
Install and log in with the Vercel CLI (npm i -g vercel or brew install vercel-cli then vercel login). The domain must be on Vercel nameservers or using Vercel as DNS provider.
How do I remove a DNS record safely?
First run vercel dns ls <domain> to find the record ID, then vercel dns rm <record-id>. Use --yes to skip confirmation in scripts.
Why can't I see a domain in vercel domains ls?
The domain may belong to another team/account or might not use Vercel nameservers. Check other teams with vercel teams ls and use --scope or switch to the correct team.