[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BVYGG7TP4G1HZCFYMHJR63":3,"skill-same:01M6BVYGG7TP4G1HZCFYMHJR63":47},{"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":21,"linkOnly":22,"markdownContent":23,"markdownBody":24,"frontMatter":25,"refName":26,"commitSha":27,"skillDirectory":28,"forksCount":14,"repositoryHtmlUrl":29,"repositoryHomepageUrl":6,"ownerHtmlUrl":30,"ownerBlogUrl":31,"ownerDescription":6,"updatedAt":32,"install":33,"resources":46},"01M6BVYGG7TP4G1HZCFYMHJR63","dns",null,"DNS setup for rbren.io subdomains. Use when creating new subdomains, checking DNS records, or issuing SSL certs.","rbren\u002Fdotfiles","rbren","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F7611973?v=4","01M6BVY4STMZXQPSZ27TYQ01FV","Robert Brennan","01M6BVY4YMQH5QN2CN7C55KNH2",0,"MIT","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Fdns\u002FSKILL.md",[],[5,19,20],"setup","ssl","2026-11-10 10:12:30",false,"---\nname: dns\ndescription: DNS setup for rbren.io subdomains. Use when creating new subdomains, checking DNS records, or issuing SSL certs.\nlicense: MIT\n---\n\n# DNS for rbren.io\n\n## Key Facts\n\n- This machine's public IP is **142.93.189.137**\n- **`*.app.rbren.io`** (singular \"app\") has a wildcard DNS record → points here automatically\n- `oh.rbren.io` → 142.93.189.137 ✅\n- `todo.app.rbren.io` → 142.93.189.137 ✅ (covered by wildcard)\n- `artifacts.app.rbren.io` → 142.93.189.137 ✅ (covered by wildcard)\n- DNS is managed externally (DigitalOcean DNS panel for `rbren.io`), no local DNS server\n\n## ⚠️ app vs apps — watch out!\n\n- **`*.app.rbren.io`** → 142.93.189.137 (this machine) ✅\n- **`*.apps.rbren.io`** → 161.35.255.23 (DIFFERENT machine) ❌\n\nAlways use **`app.rbren.io`** (singular) for new subdomains on this machine.\n\n## Adding a new subdomain\n\nFor subdomains under `app.rbren.io`, no DNS changes needed — the wildcard covers it.\n\nFor other subdomains (e.g. `foo.rbren.io`), a new A-record must be created in the DigitalOcean DNS panel pointing to 142.93.189.137.\n\n## SSL certs\n\nIssue via certbot with webroot authenticator:\n```bash\ncertbot certonly --webroot -w \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fhomepage -d \u003Csubdomain> --non-interactive --agree-tos\n```\n\nCerts land in `\u002Fetc\u002Fletsencrypt\u002Flive\u002F\u003Csubdomain>\u002F`. Auto-renewed by certbot systemd timer every 12 hours.\n\nIf certbot fails with a challenge error even though DNS is correct, nginx must be serving the ACME challenge path on port 80 for that domain. Make sure there's an HTTP server block with:\n```nginx\nlocation \u002F.well-known\u002Facme-challenge\u002F {\n    root \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fhomepage;\n}\n```\n","# DNS for rbren.io\n\n## Key Facts\n\n- This machine's public IP is **142.93.189.137**\n- **`*.app.rbren.io`** (singular \"app\") has a wildcard DNS record → points here automatically\n- `oh.rbren.io` → 142.93.189.137 ✅\n- `todo.app.rbren.io` → 142.93.189.137 ✅ (covered by wildcard)\n- `artifacts.app.rbren.io` → 142.93.189.137 ✅ (covered by wildcard)\n- DNS is managed externally (DigitalOcean DNS panel for `rbren.io`), no local DNS server\n\n## ⚠️ app vs apps — watch out!\n\n- **`*.app.rbren.io`** → 142.93.189.137 (this machine) ✅\n- **`*.apps.rbren.io`** → 161.35.255.23 (DIFFERENT machine) ❌\n\nAlways use **`app.rbren.io`** (singular) for new subdomains on this machine.\n\n## Adding a new subdomain\n\nFor subdomains under `app.rbren.io`, no DNS changes needed — the wildcard covers it.\n\nFor other subdomains (e.g. `foo.rbren.io`), a new A-record must be created in the DigitalOcean DNS panel pointing to 142.93.189.137.\n\n## SSL certs\n\nIssue via certbot with webroot authenticator:\n```bash\ncertbot certonly --webroot -w \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fhomepage -d \u003Csubdomain> --non-interactive --agree-tos\n```\n\nCerts land in `\u002Fetc\u002Fletsencrypt\u002Flive\u002F\u003Csubdomain>\u002F`. Auto-renewed by certbot systemd timer every 12 hours.\n\nIf certbot fails with a challenge error even though DNS is correct, nginx must be serving the ACME challenge path on port 80 for that domain. Make sure there's an HTTP server block with:\n```nginx\nlocation \u002F.well-known\u002Facme-challenge\u002F {\n    root \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fhomepage;\n}\n```\n",{"name":5,"license":15,"description":7},"master","290120dc514b6e7b6c945db7354fea3ea80c8c37","skills\u002Fdns","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles","https:\u002F\u002Fgithub.com\u002Frbren","rbren.io","2026-05-08 00:12:29",{"source":8,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add rbren\u002Fdotfiles --skill dns",{"tool":39,"command":40},"bunx","bunx skills add rbren\u002Fdotfiles --skill dns",{"tool":42,"command":43},"pnpm","pnpm dlx skills add rbren\u002Fdotfiles --skill dns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Fdns\u002FSKILL.md",true,[],[48,59,78,85,97,104],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":54,"publishedAt":21},"01M6BVYXK6WJYT8JWSEXTBZWVZ","this-environment","Complete guide to this DigitalOcean droplet running openhands-remote at oh.rbren.io — hardware, networking, apps, auth, DNS, and how to add new things","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Fthis-environment\u002FSKILL.md",[],[55,56,5,57,58],"this environment","how","networking","auth",{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":63,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":71,"publishedAt":21},"01M6BVYVK3FQV4GCWKGQKJP9CM","skill-creator","Guide for creating effective skills that extend agent capabilities with specialized knowledge, workflows, or tool integrations. Use when the user wants to create or update a skill.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Fskill-creator\u002FSKILL.md",[66],{"categoryNo":67,"categoryName":68,"taxonomyType":69,"taxonomyTypeDesc":70},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[72,73,74,75,76,77],"skill creator","create","knowledge","capabilities","update","workflows",{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":21},"01M6BVYTGN4ZG2G4EJ8B45H97H","rethink","When I tell you to rethink, use this skill","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Frethink\u002FSKILL.md",[],[80],{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":21},"01M6BVYRR991NQ2M73JGKA978R","rbren-snippets","The #rbren-snippets Slack channel (ID: C0APBQYQTFV) is Robert's personal scratchpad for thoughts, observations, bug notes, and dev environment updates.","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Frbren-snippets\u002FSKILL.md",[],[92,93,94,95,96],"rbren snippets","dev","notes","slack","personal",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":21},"01M6BVYQJRAZPTQHJDHHYWFVKM","nginx","How nginx is configured and managed for openhands-remote","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Fnginx\u002FSKILL.md",[],[99,56],{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":21},"01M6BVYMRW49R1W71X986J01GW","local-projects","local projects are stored in ~\u002Fgit\u002F","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Flocal-projects\u002FSKILL.md",[],[111,112,113],"projects","local projects","git"]