Agent skill

porkbun-dns

Manages DNS records for abaci.one via the Porkbun API. Use when asked to add subdomains, update DNS records, check DNS configuration, or manage domain settings.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/porkbun-dns

SKILL.md

Porkbun DNS Management

This skill manages DNS records for abaci.one using the Porkbun API.

API Credentials Location

The Porkbun API credentials are stored on the NAS:

/volume1/homes/antialias/projects/abaci.one/ddns-data/ddns-config.json

To retrieve them:

bash
ssh nas.home.network 'cat /volume1/homes/antialias/projects/abaci.one/ddns-data/ddns-config.json'

The file contains:

  • api_key: Public API key (starts with pk1_)
  • secret_api_key: Secret API key (starts with sk1_)

Common Operations

List All DNS Records

bash
curl -s -X POST "https://api.porkbun.com/api/json/v3/dns/retrieve/abaci.one" \
  -H "Content-Type: application/json" \
  -d '{
    "secretapikey": "SECRET_KEY",
    "apikey": "API_KEY"
  }' | python3 -m json.tool

Create a CNAME Record (Subdomain)

Best for subdomains that should follow the main domain's IP (useful with DDNS):

bash
curl -s -X POST "https://api.porkbun.com/api/json/v3/dns/create/abaci.one" \
  -H "Content-Type: application/json" \
  -d '{
    "secretapikey": "SECRET_KEY",
    "apikey": "API_KEY",
    "name": "subdomain-name",
    "type": "CNAME",
    "content": "abaci.one",
    "ttl": "300"
  }'

Create an A Record

For direct IP pointing:

bash
curl -s -X POST "https://api.porkbun.com/api/json/v3/dns/create/abaci.one" \
  -H "Content-Type: application/json" \
  -d '{
    "secretapikey": "SECRET_KEY",
    "apikey": "API_KEY",
    "name": "subdomain-name",
    "type": "A",
    "content": "IP_ADDRESS",
    "ttl": "300"
  }'

Delete a DNS Record

First list records to get the record ID, then:

bash
curl -s -X POST "https://api.porkbun.com/api/json/v3/dns/delete/abaci.one/RECORD_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "secretapikey": "SECRET_KEY",
    "apikey": "API_KEY"
  }'

Update a DNS Record

bash
curl -s -X POST "https://api.porkbun.com/api/json/v3/dns/edit/abaci.one/RECORD_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "secretapikey": "SECRET_KEY",
    "apikey": "API_KEY",
    "name": "subdomain-name",
    "type": "A",
    "content": "NEW_IP_ADDRESS",
    "ttl": "300"
  }'

Verify DNS Propagation

After making changes, verify propagation:

bash
# Check against your local resolver
dig +short subdomain.abaci.one

# Check against Google's DNS (bypasses local cache)
dig +short subdomain.abaci.one @8.8.8.8

# Check against Porkbun's nameservers directly
dig +short subdomain.abaci.one @maceio.porkbun.com

Current DNS Setup

The domain has these key records:

Type Host Purpose
A abaci.one Main domain → home IP (DDNS managed)
CNAME blue Blue container instance
CNAME green Green container instance
CNAME * Wildcard parking page (can be deleted)

Notes

  • CNAME vs A record: Use CNAME for subdomains so they automatically follow DDNS updates to the main domain's IP
  • TTL: 300 seconds (5 minutes) is good for records that might change; use 3600+ for stable records
  • Wildcard record: The *.abaci.onepixie.porkbun.com is Porkbun's default parking page. Explicit records take precedence over wildcards.
  • Propagation: DNS changes typically propagate within 5-15 minutes, though local caches may retain old values longer

API Documentation

Full Porkbun API docs: https://porkbun.com/api/json/v3/documentation

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results