[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70G747TPZADF201WN7038DF":3,"skill-same:01M70G747TPZADF201WN7038DF":67},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M70G747TPZADF201WN7038DF","homelab-pihole-dns",null,"Pi-hole installation, blocklist management, DNS-over-HTTPS setup, DHCP integration, local DNS records, and troubleshooting broken DNS resolution on a home network. Use when the task explicitly involves Pi-hole — installing it, managing blocklists, configuring DoH or DHCP, adding local DNS records, or diagnosing DNS resolution with Pi-hole in the path.","mdnaimul22\u002Fhuman-skills","mdnaimul22","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F64520358?v=4","01M70FH95MH2H796Q01TYSFZ03","Naimul","01M70FH96798CQR4YHA13F17GA",3,"MIT","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Faffaan-m_ECC\u002Fhomelab-pihole-dns\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"homelab pihole dns","pihole","dns","homelab","resolution","home","when","path","dhcp","dns records","with","records","local","task","community","use","pi","broken","dns-over-https","network","2026-11-10 10:12:30",false,"---\nname: homelab-pihole-dns\ndescription: Pi-hole installation, blocklist management, DNS-over-HTTPS setup, DHCP integration, local DNS records, and troubleshooting broken DNS resolution on a home network. Use when the task explicitly involves Pi-hole — installing it, managing blocklists, configuring DoH or DHCP, adding local DNS records, or diagnosing DNS resolution with Pi-hole in the path.\nmetadata:\n  origin: community\n---\n\n# Homelab Pi-hole DNS\n\nPi-hole is a network-wide DNS ad blocker that runs on a Raspberry Pi or any Linux host.\nEvery device on your network gets ad and malware domain blocking automatically — no browser\nextension needed.\n\n## When to Use\n\n- Installing Pi-hole on a Raspberry Pi or Linux host\n- Configuring Pi-hole as the DNS server for a home network\n- Adding or managing blocklists\n- Setting up DNS-over-HTTPS (DoH) upstream resolvers\n- Creating local DNS records (e.g. `nas.home.lan`, `pi.home.lan`)\n- Troubleshooting devices that lose internet access after Pi-hole is installed\n- Running Pi-hole alongside or instead of DHCP\n\n## How Pi-hole Works\n\n```\nNormal flow (without Pi-hole):\n  Device → requests ads.tracker.com → ISP DNS → real IP → ads load\n\nWith Pi-hole:\n  Device → requests ads.tracker.com → Pi-hole DNS → blocked (returns 0.0.0.0) → no ad\n\nAll DNS queries go through Pi-hole first.\nPi-hole checks against blocklists.\nBlocked domains return a null response — the ad\u002Ftracker never loads.\nAllowed domains get forwarded to your upstream resolver (Cloudflare, Google, etc.).\n```\n\n## Installation\n\n### Docker (Recommended)\n\nDocker is the easiest way to install Pi-hole and makes updates and backups\nstraightforward.\n\n```yaml\n# docker-compose.yml\nservices:\n  pihole:\n    image: pihole\u002Fpihole:\u003Cpinned-release-tag>\n    container_name: pihole\n    ports:\n      - \"53:53\u002Ftcp\"\n      - \"53:53\u002Fudp\"\n      - \"80:80\u002Ftcp\"          # Web admin\n    environment:\n      TZ: \"America\u002FNew_York\"\n      WEBPASSWORD: \"${PIHOLE_WEBPASSWORD}\"   # set via .env file or secret\n      PIHOLE_DNS_: \"1.1.1.1;1.0.0.1\"\n      DNSMASQ_LISTENING: \"all\"\n    volumes:\n      - \".\u002Fetc-pihole:\u002Fetc\u002Fpihole\"\n      - \".\u002Fetc-dnsmasq.d:\u002Fetc\u002Fdnsmasq.d\"\n    restart: unless-stopped\n    cap_add:\n      - NET_ADMIN              # only needed if Pi-hole will serve DHCP\n```\n\nReplace `\u003Cpinned-release-tag>` with a current Pi-hole release tag before deploying.\nAvoid `latest` for long-lived DNS infrastructure so upgrades are deliberate and\nreviewable.\n\nSet `PIHOLE_WEBPASSWORD` in a `.env` file next to `docker-compose.yml`, chmod it to\n`600`, and keep it out of git — do not put the password directly in the compose file.\n\nAccess web admin at: `http:\u002F\u002F\u003Cpi-ip>\u002Fadmin`\n\n### Bare-Metal Install (Raspberry Pi OS \u002F Debian \u002F Ubuntu)\n\nPi-hole requires a static IP before installing.\n\n```bash\n# Step 1: Assign a static IP (edit \u002Fetc\u002Fdhcpcd.conf on Pi OS)\nsudo nano \u002Fetc\u002Fdhcpcd.conf\n# Add at the bottom:\ninterface eth0\nstatic ip_address=192.168.3.2\u002F24\nstatic routers=192.168.3.1\nstatic domain_name_servers=192.168.3.1\n\n# Step 2: Download and inspect the installer before running it.\n# Prefer the package or installer path documented by Pi-hole for your OS\u002Fversion.\ncurl -sSL https:\u002F\u002Finstall.pi-hole.net -o pi-hole-install.sh\nless pi-hole-install.sh   # review before proceeding\n\n# Step 3: Run\nbash pi-hole-install.sh\n\n# Follow the interactive installer:\n# 1. Select network interface (eth0 for wired — recommended)\n# 2. Select upstream DNS (Cloudflare or leave default — can change later)\n# 3. Confirm static IP\n# 4. Install the web admin interface (recommended)\n# 5. Note the admin password shown at the end\n```\n\n## Pointing Your Network at Pi-hole\n\n```\n# Method 1: Change DNS in your router DHCP settings (recommended)\n  Router admin UI → DHCP Settings → DNS Server\n  Primary DNS: 192.168.3.2  (Pi-hole IP)\n  Secondary DNS: leave blank for strict blocking, or use a second Pi-hole.\n                 A public fallback such as 1.1.1.1 improves availability during\n                 rollout but can bypass blocking because clients may query it.\n\n  All devices get Pi-hole as DNS automatically on next DHCP renewal.\n  Force renewal: reconnect Wi-Fi or run 'sudo dhclient -r && sudo dhclient' on Linux\n\n# Method 2: Per-device DNS (useful for testing before network-wide rollout)\n  Windows: Control Panel → Network Adapter → IPv4 Properties → set DNS manually\n  macOS: System Settings → Network → Details → DNS → set manually\n  Linux: \u002Fetc\u002Fresolv.conf or NetworkManager\n\n# Method 3: Pi-hole as DHCP server (replaces router DHCP)\n  Pi-hole admin → Settings → DHCP → Enable\n  Disable DHCP on your router first — two DHCP servers on the same network cause conflicts\n  Advantage: hostname resolution works automatically (devices register their names)\n```\n\n## Blocklist Management\n\n```\n# Pi-hole admin → Adlists → Add new adlist\n\n# Recommended blocklists:\n  https:\u002F\u002Fraw.githubusercontent.com\u002FStevenBlack\u002Fhosts\u002Fmaster\u002Fhosts\n  # default — 200k+ domains\n\n  https:\u002F\u002Fblocklistproject.github.io\u002FLists\u002Fmalware.txt\n  # malware domains\n\n  https:\u002F\u002Fblocklistproject.github.io\u002FLists\u002Ftracking.txt\n  # tracking\u002Ftelemetry\n\n# After adding a list:\n  Tools → Update Gravity  (downloads and compiles all blocklists)\n\n# If a site is blocked that should not be (false positive):\n  Pi-hole admin → Whitelist → Add domain\n  Example: api.my-legitimate-service.com\n\n# Check what is being blocked in real time:\n  Dashboard → Query Log  (live DNS query stream with block\u002Fallow status)\n```\n\n## DNS-over-HTTPS Upstream\n\nDNS-over-HTTPS encrypts your DNS queries so your ISP cannot see what sites you resolve.\n\n```bash\n# Install cloudflared (Cloudflare's DoH proxy).\n# Prefer Cloudflare's package repository for automatic signed package verification.\n# If you download a binary directly, pin a release version and verify its checksum.\nCLOUDFLARED_VERSION=\"\u003Cpinned-version>\"\ncurl -LO \"https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fcloudflared\u002Freleases\u002Fdownload\u002F${CLOUDFLARED_VERSION}\u002Fcloudflared-linux-arm64\"\n# Verify the checksum\u002Fsignature from Cloudflare's release notes before installing.\nsudo mv cloudflared-linux-arm64 \u002Fusr\u002Flocal\u002Fbin\u002Fcloudflared\nsudo chmod +x \u002Fusr\u002Flocal\u002Fbin\u002Fcloudflared\n\n# Create cloudflared config\nsudo mkdir -p \u002Fetc\u002Fcloudflared\nsudo tee \u002Fetc\u002Fcloudflared\u002Fconfig.yml \u003C\u003C EOF\nproxy-dns: true\nproxy-dns-port: 5053\nproxy-dns-upstream:\n  - https:\u002F\u002F1.1.1.1\u002Fdns-query\n  - https:\u002F\u002F1.0.0.1\u002Fdns-query\nEOF\n\n# Create systemd service\nsudo cloudflared service install\nsudo systemctl start cloudflared\nsudo systemctl enable cloudflared\n\n# Now point Pi-hole at the local DoH proxy:\n# Pi-hole admin → Settings → DNS → Custom upstream DNS\n# Set to: 127.0.0.1#5053\n# Uncheck all other upstream resolvers\n```\n\n## Local DNS Records\n\nMake your services reachable by name (e.g. `nas.home.lan`, `grafana.home.lan`).\n\n> **Domain name note:** `.home.lan` is widely used in homelabs and works in practice.\n> The IETF-reserved suffix for local use is `.home.arpa` (RFC 8375) — use that to\n> follow the standard. Avoid `.local` for Pi-hole DNS records as it conflicts with\n> mDNS\u002FBonjour.\n\n```\n# Pi-hole admin → Local DNS → DNS Records\n\n  Domain              IP\n  nas.home.lan        192.168.30.10\n  pi.home.lan         192.168.30.2\n  grafana.home.lan    192.168.30.3\n  proxmox.home.lan    192.168.30.4\n\n# From any device on your network:\n  ping nas.home.lan        → 192.168.30.10\n  http:\u002F\u002Fgrafana.home.lan  → your Grafana dashboard\n\n# For subdomains, add a CNAME:\n  Pi-hole admin → Local DNS → CNAME Records\n  Domain: portainer.home.lan → Target: pi.home.lan\n```\n\n## Troubleshooting\n\n```bash\n# Pi-hole blocking something it should not\npihole -q example.com          # Check if domain is blocked and which list\npihole -w example.com          # Whitelist immediately\n\n# DNS not resolving at all\npihole status                  # Check if pihole-FTL is running\ndig @192.168.3.2 google.com   # Test DNS directly against Pi-hole\n\n# Restart Pi-hole DNS\npihole restartdns\n\n# Check query logs for a specific device\npihole -t                      # Live tail of all queries\n# Or filter by client in the web admin Query Log\n\n# Pi-hole gravity update (refresh blocklists)\npihole -g\n```\n\n## Anti-Patterns\n\n```\n# BAD: Depending on one Pi-hole without a recovery path\n# If Pi-hole crashes or the Pi loses power, DNS can stop working\n# GOOD: Keep a documented router fallback for rollback during setup\n# BETTER: Run two Pi-hole instances for redundancy; avoid public fallback DNS for strict blocking\n\n# BAD: Installing Pi-hole without a static IP\n# If the Pi gets a new DHCP IP, all devices lose DNS\n# GOOD: Set static IP first, then install Pi-hole\n\n# BAD: Enabling Pi-hole DHCP without disabling the router's DHCP first\n# Two DHCP servers on the same network hand out conflicting IPs\n# GOOD: Disable router DHCP, then enable Pi-hole DHCP\n\n# BAD: Never updating gravity (blocklists)\n# New ad and malware domains accumulate — stale lists miss them\n# GOOD: Schedule weekly gravity update: pihole -g (or enable in Settings → API)\n```\n\n## Best Practices\n\n- Give the Pi a static IP or DHCP reservation before installing Pi-hole\n- Use Pi-hole as primary DNS; for redundancy, add a second Pi-hole instead of a\n  public resolver if you need strict blocking\n- Enable DoH (DNS-over-HTTPS) with cloudflared for encrypted upstream queries\n- Set `home.lan` as your local domain and create DNS records for all your services\n- Review the Query Log occasionally — blocked queries show you what devices are doing\n\n## Related Skills\n\n- homelab-network-setup\n- homelab-vlan-segmentation\n- homelab-wireguard-vpn\n","# Homelab Pi-hole DNS\n\nPi-hole is a network-wide DNS ad blocker that runs on a Raspberry Pi or any Linux host.\nEvery device on your network gets ad and malware domain blocking automatically — no browser\nextension needed.\n\n## When to Use\n\n- Installing Pi-hole on a Raspberry Pi or Linux host\n- Configuring Pi-hole as the DNS server for a home network\n- Adding or managing blocklists\n- Setting up DNS-over-HTTPS (DoH) upstream resolvers\n- Creating local DNS records (e.g. `nas.home.lan`, `pi.home.lan`)\n- Troubleshooting devices that lose internet access after Pi-hole is installed\n- Running Pi-hole alongside or instead of DHCP\n\n## How Pi-hole Works\n\n```\nNormal flow (without Pi-hole):\n  Device → requests ads.tracker.com → ISP DNS → real IP → ads load\n\nWith Pi-hole:\n  Device → requests ads.tracker.com → Pi-hole DNS → blocked (returns 0.0.0.0) → no ad\n\nAll DNS queries go through Pi-hole first.\nPi-hole checks against blocklists.\nBlocked domains return a null response — the ad\u002Ftracker never loads.\nAllowed domains get forwarded to your upstream resolver (Cloudflare, Google, etc.).\n```\n\n## Installation\n\n### Docker (Recommended)\n\nDocker is the easiest way to install Pi-hole and makes updates and backups\nstraightforward.\n\n```yaml\n# docker-compose.yml\nservices:\n  pihole:\n    image: pihole\u002Fpihole:\u003Cpinned-release-tag>\n    container_name: pihole\n    ports:\n      - \"53:53\u002Ftcp\"\n      - \"53:53\u002Fudp\"\n      - \"80:80\u002Ftcp\"          # Web admin\n    environment:\n      TZ: \"America\u002FNew_York\"\n      WEBPASSWORD: \"${PIHOLE_WEBPASSWORD}\"   # set via .env file or secret\n      PIHOLE_DNS_: \"1.1.1.1;1.0.0.1\"\n      DNSMASQ_LISTENING: \"all\"\n    volumes:\n      - \".\u002Fetc-pihole:\u002Fetc\u002Fpihole\"\n      - \".\u002Fetc-dnsmasq.d:\u002Fetc\u002Fdnsmasq.d\"\n    restart: unless-stopped\n    cap_add:\n      - NET_ADMIN              # only needed if Pi-hole will serve DHCP\n```\n\nReplace `\u003Cpinned-release-tag>` with a current Pi-hole release tag before deploying.\nAvoid `latest` for long-lived DNS infrastructure so upgrades are deliberate and\nreviewable.\n\nSet `PIHOLE_WEBPASSWORD` in a `.env` file next to `docker-compose.yml`, chmod it to\n`600`, and keep it out of git — do not put the password directly in the compose file.\n\nAccess web admin at: `http:\u002F\u002F\u003Cpi-ip>\u002Fadmin`\n\n### Bare-Metal Install (Raspberry Pi OS \u002F Debian \u002F Ubuntu)\n\nPi-hole requires a static IP before installing.\n\n```bash\n# Step 1: Assign a static IP (edit \u002Fetc\u002Fdhcpcd.conf on Pi OS)\nsudo nano \u002Fetc\u002Fdhcpcd.conf\n# Add at the bottom:\ninterface eth0\nstatic ip_address=192.168.3.2\u002F24\nstatic routers=192.168.3.1\nstatic domain_name_servers=192.168.3.1\n\n# Step 2: Download and inspect the installer before running it.\n# Prefer the package or installer path documented by Pi-hole for your OS\u002Fversion.\ncurl -sSL https:\u002F\u002Finstall.pi-hole.net -o pi-hole-install.sh\nless pi-hole-install.sh   # review before proceeding\n\n# Step 3: Run\nbash pi-hole-install.sh\n\n# Follow the interactive installer:\n# 1. Select network interface (eth0 for wired — recommended)\n# 2. Select upstream DNS (Cloudflare or leave default — can change later)\n# 3. Confirm static IP\n# 4. Install the web admin interface (recommended)\n# 5. Note the admin password shown at the end\n```\n\n## Pointing Your Network at Pi-hole\n\n```\n# Method 1: Change DNS in your router DHCP settings (recommended)\n  Router admin UI → DHCP Settings → DNS Server\n  Primary DNS: 192.168.3.2  (Pi-hole IP)\n  Secondary DNS: leave blank for strict blocking, or use a second Pi-hole.\n                 A public fallback such as 1.1.1.1 improves availability during\n                 rollout but can bypass blocking because clients may query it.\n\n  All devices get Pi-hole as DNS automatically on next DHCP renewal.\n  Force renewal: reconnect Wi-Fi or run 'sudo dhclient -r && sudo dhclient' on Linux\n\n# Method 2: Per-device DNS (useful for testing before network-wide rollout)\n  Windows: Control Panel → Network Adapter → IPv4 Properties → set DNS manually\n  macOS: System Settings → Network → Details → DNS → set manually\n  Linux: \u002Fetc\u002Fresolv.conf or NetworkManager\n\n# Method 3: Pi-hole as DHCP server (replaces router DHCP)\n  Pi-hole admin → Settings → DHCP → Enable\n  Disable DHCP on your router first — two DHCP servers on the same network cause conflicts\n  Advantage: hostname resolution works automatically (devices register their names)\n```\n\n## Blocklist Management\n\n```\n# Pi-hole admin → Adlists → Add new adlist\n\n# Recommended blocklists:\n  https:\u002F\u002Fraw.githubusercontent.com\u002FStevenBlack\u002Fhosts\u002Fmaster\u002Fhosts\n  # default — 200k+ domains\n\n  https:\u002F\u002Fblocklistproject.github.io\u002FLists\u002Fmalware.txt\n  # malware domains\n\n  https:\u002F\u002Fblocklistproject.github.io\u002FLists\u002Ftracking.txt\n  # tracking\u002Ftelemetry\n\n# After adding a list:\n  Tools → Update Gravity  (downloads and compiles all blocklists)\n\n# If a site is blocked that should not be (false positive):\n  Pi-hole admin → Whitelist → Add domain\n  Example: api.my-legitimate-service.com\n\n# Check what is being blocked in real time:\n  Dashboard → Query Log  (live DNS query stream with block\u002Fallow status)\n```\n\n## DNS-over-HTTPS Upstream\n\nDNS-over-HTTPS encrypts your DNS queries so your ISP cannot see what sites you resolve.\n\n```bash\n# Install cloudflared (Cloudflare's DoH proxy).\n# Prefer Cloudflare's package repository for automatic signed package verification.\n# If you download a binary directly, pin a release version and verify its checksum.\nCLOUDFLARED_VERSION=\"\u003Cpinned-version>\"\ncurl -LO \"https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fcloudflared\u002Freleases\u002Fdownload\u002F${CLOUDFLARED_VERSION}\u002Fcloudflared-linux-arm64\"\n# Verify the checksum\u002Fsignature from Cloudflare's release notes before installing.\nsudo mv cloudflared-linux-arm64 \u002Fusr\u002Flocal\u002Fbin\u002Fcloudflared\nsudo chmod +x \u002Fusr\u002Flocal\u002Fbin\u002Fcloudflared\n\n# Create cloudflared config\nsudo mkdir -p \u002Fetc\u002Fcloudflared\nsudo tee \u002Fetc\u002Fcloudflared\u002Fconfig.yml \u003C\u003C EOF\nproxy-dns: true\nproxy-dns-port: 5053\nproxy-dns-upstream:\n  - https:\u002F\u002F1.1.1.1\u002Fdns-query\n  - https:\u002F\u002F1.0.0.1\u002Fdns-query\nEOF\n\n# Create systemd service\nsudo cloudflared service install\nsudo systemctl start cloudflared\nsudo systemctl enable cloudflared\n\n# Now point Pi-hole at the local DoH proxy:\n# Pi-hole admin → Settings → DNS → Custom upstream DNS\n# Set to: 127.0.0.1#5053\n# Uncheck all other upstream resolvers\n```\n\n## Local DNS Records\n\nMake your services reachable by name (e.g. `nas.home.lan`, `grafana.home.lan`).\n\n> **Domain name note:** `.home.lan` is widely used in homelabs and works in practice.\n> The IETF-reserved suffix for local use is `.home.arpa` (RFC 8375) — use that to\n> follow the standard. Avoid `.local` for Pi-hole DNS records as it conflicts with\n> mDNS\u002FBonjour.\n\n```\n# Pi-hole admin → Local DNS → DNS Records\n\n  Domain              IP\n  nas.home.lan        192.168.30.10\n  pi.home.lan         192.168.30.2\n  grafana.home.lan    192.168.30.3\n  proxmox.home.lan    192.168.30.4\n\n# From any device on your network:\n  ping nas.home.lan        → 192.168.30.10\n  http:\u002F\u002Fgrafana.home.lan  → your Grafana dashboard\n\n# For subdomains, add a CNAME:\n  Pi-hole admin → Local DNS → CNAME Records\n  Domain: portainer.home.lan → Target: pi.home.lan\n```\n\n## Troubleshooting\n\n```bash\n# Pi-hole blocking something it should not\npihole -q example.com          # Check if domain is blocked and which list\npihole -w example.com          # Whitelist immediately\n\n# DNS not resolving at all\npihole status                  # Check if pihole-FTL is running\ndig @192.168.3.2 google.com   # Test DNS directly against Pi-hole\n\n# Restart Pi-hole DNS\npihole restartdns\n\n# Check query logs for a specific device\npihole -t                      # Live tail of all queries\n# Or filter by client in the web admin Query Log\n\n# Pi-hole gravity update (refresh blocklists)\npihole -g\n```\n\n## Anti-Patterns\n\n```\n# BAD: Depending on one Pi-hole without a recovery path\n# If Pi-hole crashes or the Pi loses power, DNS can stop working\n# GOOD: Keep a documented router fallback for rollback during setup\n# BETTER: Run two Pi-hole instances for redundancy; avoid public fallback DNS for strict blocking\n\n# BAD: Installing Pi-hole without a static IP\n# If the Pi gets a new DHCP IP, all devices lose DNS\n# GOOD: Set static IP first, then install Pi-hole\n\n# BAD: Enabling Pi-hole DHCP without disabling the router's DHCP first\n# Two DHCP servers on the same network hand out conflicting IPs\n# GOOD: Disable router DHCP, then enable Pi-hole DHCP\n\n# BAD: Never updating gravity (blocklists)\n# New ad and malware domains accumulate — stale lists miss them\n# GOOD: Schedule weekly gravity update: pihole -g (or enable in Settings → API)\n```\n\n## Best Practices\n\n- Give the Pi a static IP or DHCP reservation before installing Pi-hole\n- Use Pi-hole as primary DNS; for redundancy, add a second Pi-hole instead of a\n  public resolver if you need strict blocking\n- Enable DoH (DNS-over-HTTPS) with cloudflared for encrypted upstream queries\n- Set `home.lan` as your local domain and create DNS records for all your services\n- Review the Query Log occasionally — blocked queries show you what devices are doing\n\n## Related Skills\n\n- homelab-network-setup\n- homelab-vlan-segmentation\n- homelab-wireguard-vpn\n",{"name":5,"metadata":44,"description":7},{"origin":33},"main","74715deacdc69119d739f38916f8ee4f0f979ebf","skills\u002Fstorage\u002Faffaan-m_ECC\u002Fhomelab-pihole-dns",0,"https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills","https:\u002F\u002Fgithub.com\u002Fmdnaimul22","AI Agents Workflows Automation | Specializing in Python, FastAPI, MCP Agents & Custom ERP.","2026-11-11 06:54:12",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add mdnaimul22\u002Fhuman-skills --skill homelab-pihole-dns",{"tool":59,"command":60},"bunx","bunx skills add mdnaimul22\u002Fhuman-skills --skill homelab-pihole-dns",{"tool":62,"command":63},"pnpm","pnpm dlx skills add mdnaimul22\u002Fhuman-skills --skill homelab-pihole-dns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Faffaan-m_ECC\u002Fhomelab-pihole-dns\u002FSKILL.md",true,[],[68,76,106,127,146,161],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":75},"01M72JT3YP1SQHD0MANGDXQ4RT","higgsfield-websites","Build, edit, and deploy full-stack websites, apps and games via the Higgsfield CLI (`higgsfield website …`). Each is a React 19 + TanStack Start SSR app in one Cloudflare Worker (D1\u002FR2\u002FKV\u002FDO\u002FContainers). THREE product types, picked via `--type` on create: `website` (standalone, no Higgsfield integration — references\u002Fwebsite-flow.md), `app` (Sign in with Higgsfield + fnf SDK, Quanta — references\u002Fapp-flow.md), `game` (realtime multiplayer rooms — references\u002Fgame-flow.md). Routes to the right flow; each carries its own rules and deploy\u002Fpublish gates.\nUse when: \"build me a website\", \"make a landing page\", \"create a web app\", \"build a SaaS dashboard \u002F portfolio\", \"make me a game\", \"deploy this site\", \"publish\". Also owns GAME ART: \"make a spritesheet\", \"tileable texture\", \"animate a 3D character\", game music\u002FSFX — see the game-* references.\nNOT for: single image\u002Fvideo\u002Faudio generation (higgsfield-generate), product photos (higgsfield-product-photoshoot), marketplace cards (higgsfield-marketplace-cards).","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fhiggsfield-ai_skills\u002Fhiggsfield-websites\u002FSKILL.md",[],[],"2026-11-10 22:39:42",{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":98,"publishedAt":39},"01M70JPK8HAXXA85P7Q8NKZZYG","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fwriting-skills\u002FSKILL.md",[82,87,92,95],{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":88,"categoryName":89,"taxonomyType":90,"taxonomyTypeDesc":91},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",{"categoryNo":93,"categoryName":94,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":96,"categoryName":97,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000008","测试与质量",[99,100,101,102,34,103,104,25,105],"writing","writing skills","editing","deployment","Existing","new","work",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":117,"publishedAt":39},"01M70JP4PHBH1CQVVDWZ94W159","writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fwriting-plans\u002FSKILL.md",[112,113,114],{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},{"categoryNo":88,"categoryName":89,"taxonomyType":90,"taxonomyTypeDesc":91},{"categoryNo":115,"categoryName":116,"taxonomyType":90,"taxonomyTypeDesc":91},"01JBSEEDCAT000000000000030","开发工程师",[99,118,119,120,25,121,122,34,123,32,124,125,126],"writing plans","plans","you","code","for","requirements","multi","spec","multi-step task",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":39},"01M70JNTYVGXFZT8PASZ844TH8","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fverification-before-completion\u002FSKILL.md",[],[134,135,136,137,138,139,34,140,141,142,25,143,105,144,145],"verification","verification before completion","complete","about","output","assertions","prs","evidence","claim","claims","commands","running",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":153,"publishedAt":39},"01M70JNGVSQDESWN0Q5BPJ875V","using-superpowers","Use when starting any conversation - establishes how to find and use skills, requiring skill invocation before ANY response including clarifying questions","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fusing-superpowers\u002FSKILL.md",[152],{"categoryNo":93,"categoryName":94,"taxonomyType":85,"taxonomyTypeDesc":86},[154,155,156,157,34,25,158,159,160],"using superpowers","superpowers","conversation","how to","how","find","questions",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":167,"publishedAt":39},"01M70JN57CE588NPYPYTWH1DWG","using-git-worktrees","Use when starting feature work that needs isolation from current workspace or before executing implementation plans - ensures an isolated workspace exists via native tools or git worktree fallback","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fusing-git-worktrees\u002FSKILL.md",[],[168,169,170,171,172,173,25,105,174,175,176,177,178,179,180,119,34,181,182],"using git worktrees","Using git","git","worktrees","git worktrees","implementation","git worktree","worktree","native","Tools","isolation","fallback","feature","via","workspace"]