[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71GSXMDP6CAPA8ZG0GHQQ4R":3,"skill-same:01M71GSXMDP6CAPA8ZG0GHQQ4R":66},{"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":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":14,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":50,"updatedAt":51,"install":52,"resources":65},"01M71GSXMDP6CAPA8ZG0GHQQ4R","publish",null,"Share brain pages as beautiful password-protected HTML with zero LLM calls","weareturnone\u002Fgbrain","weareturnone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F106660686?v=4","01M71GRFW4YZ9DFYK6J17YXQNB","Roelof Stoelwinder ","01M71GRFWVQF5ASVB08TP5VKWG",0,"MIT","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Fskills\u002Fpublish\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"create","share","search","ZeRO","password","page","html","get","brain","pages","as","false","link","with","calls","2026-11-10 10:12:30",false,"---\nname: publish\ndescription: Share brain pages as beautiful password-protected HTML with zero LLM calls\ntriggers:\n  - \"share this page\"\n  - \"publish page\"\n  - \"create shareable link\"\ntools:\n  - get_page\n  - search\nmutating: false\n---\n\n# Publish Skill\n\nShare brain pages as beautiful, self-contained HTML documents. Optionally\npassword-protected with client-side AES-256-GCM encryption. No server needed.\n\nThis is a **code + skill pair**: the deterministic code (`gbrain publish`) does\nthe stripping, encrypting, and HTML generation. This skill tells you when and\nhow to use it. See [Thin Harness, Fat Skills](https:\u002F\u002Fx.com\u002Fgarrytan\u002Fstatus\u002F2042925773300908103)\nfor the architecture philosophy.\n\n## Contract\n\n- Published HTML is fully self-contained: no external dependencies, no server needed.\n- All private metadata (frontmatter, source citations, confirmation numbers, brain cross-links, timeline) is stripped before publishing.\n- Password protection uses AES-256-GCM with PBKDF2 key derivation; plaintext never appears in the encrypted HTML file.\n- Default is always encrypted unless the user explicitly requests \"open\", \"no password\", or \"public\".\n- External URLs (`https:\u002F\u002F...`) are preserved; only internal brain paths are stripped.\n\n## When to Publish\n\n- User asks to share a brain page, create a shareable link, or says \"give me a page\"\n- User wants to send a deal memo, person briefing, or research to someone external\n- User asks to publish a data room analysis or trip plan\n- Any time brain content needs to leave the brain without exposing the whole system\n\n## Default: ALWAYS ENCRYPT\n\nBrain content is private. Default to password-protected unless the user explicitly\nsays \"open\", \"no password\", or \"public\".\n\nIf no password is specified, auto-generate one. Share the password via a different\nchannel than the URL.\n\n## Quick Reference\n\n```bash\n# Basic publish (outputs local HTML file)\ngbrain publish brain\u002Fcompanies\u002Facme.md\n\n# Password protected (auto-generate password)\ngbrain publish brain\u002Fcompanies\u002Facme.md --password\n\n# Password protected (specific password)\ngbrain publish brain\u002Fcompanies\u002Facme.md --password \"secret123\"\n\n# Custom title\ngbrain publish brain\u002Fcompanies\u002Facme.md --password --title \"Acme -- Deal Analysis\"\n\n# Custom output path\ngbrain publish brain\u002Fcompanies\u002Facme.md --out \u002Ftmp\u002Facme-share.html\n```\n\n## What Gets Stripped\n\nThe publish command automatically removes all private\u002Finternal data:\n\n| Stripped | Example | Why |\n|---------|---------|-----|\n| YAML frontmatter | `title:`, `type:`, `tags:` | Internal metadata |\n| `[Source: ...]` citations | All formats | Provenance is internal |\n| Confirmation numbers | `ABC123DEF` -> \"on file\" | PII\u002Fbooking data |\n| Brain cross-links | `[Jane](..\u002Fpeople\u002Fjane.md)` -> `Jane` | Internal paths |\n| Timeline section | Everything below `---` \u002F `## Timeline` | Raw evidence log |\n| \"See also\" lines | Internal references | Brain navigation |\n\n**Preserved:** external URLs (`https:\u002F\u002F...`), all other content.\n\n## Sharing Workflows\n\n### Option A: Local file (simplest)\n\n```bash\ngbrain publish brain\u002Fpeople\u002Fjane-doe.md --password --out ~\u002FDesktop\u002Fjane-briefing.html\n```\n\nShare the HTML file via email, Slack, Airdrop. Share the password separately.\n\n### Option B: Upload to cloud storage\n\n```bash\n# Publish locally first\ngbrain publish brain\u002Fcompanies\u002Facme.md --password \"secret\" --out \u002Ftmp\u002Facme.html\n\n# Upload to Supabase Storage\ngbrain files upload \u002Ftmp\u002Facme.html --page shares\u002Facme\n\n# Get a signed URL (1-hour expiry)\ngbrain files signed-url shares\u002Facme\u002Facme.html\n```\n\nShare the signed URL + password. URL expires in 1 hour. Re-generate as needed.\n\n### Option C: Static hosting (Render, Netlify, S3)\n\nUpload the HTML file to any static hosting service. The file is self-contained,\nno server logic needed. Password-protected files work entirely client-side via\nWeb Crypto API.\n\n### Option D: GitHub Pages \u002F Gist\n\n```bash\ngbrain publish brain\u002Ftrips\u002Fjapan-2026.md --out trip.html\n# Upload to a GitHub Gist or Pages repo\n```\n\n## Password Protection Details\n\n- **Algorithm:** AES-256-GCM\n- **Key derivation:** PBKDF2 with 100K iterations, SHA-256\n- **Salt:** Random 16 bytes per encryption\n- **IV:** Random 12 bytes per encryption\n- **Decryption:** Client-side via Web Crypto API (SubtleCrypto)\n- **No server auth needed** -- the HTML file is self-contained\n- **\"Remember on this device\"** -- saves password in localStorage\n\nWhen encrypted, the published HTML contains ONLY ciphertext. The plaintext is\nnot present anywhere in the file.\n\n## Updating a Published Page\n\nRe-run the publish command with the same output path:\n```bash\ngbrain publish brain\u002Fcompanies\u002Facme.md --password \"same-password\" --out shares\u002Facme.html\n```\n\nSame file, same URL (if hosted), updated content.\n\n## Revoking Access\n\nDelete the file. If using signed URLs, the URL expires automatically (1 hour).\nIf using static hosting, remove the file from the host.\n\n## Anti-Patterns\n\n- **Publishing without encryption.** Brain content is private. Default to password-protected unless the user explicitly says \"open\", \"no password\", or \"public\".\n- **Sharing password and URL in the same channel.** Always share the password via a different channel than the URL for security.\n- **Assuming the user wants raw markdown.** The publish command produces beautiful HTML. Don't copy-paste markdown when `gbrain publish` exists.\n- **Including internal metadata.** Never manually share content that contains frontmatter, source citations, or timeline sections. Let the publish command strip it.\n\n## Output Format\n\n```\nPUBLISHED: [page title]\n========================\n\nFile: [output path]\nEncrypted: [yes (AES-256-GCM) \u002F no]\nPassword: [auto-generated password \u002F user-provided \u002F none]\nSize: [file size]\n\nShare the file via: [email \u002F Slack \u002F Airdrop \u002F cloud upload]\nShare the password via: [a different channel]\n```\n\n## Tools Used\n\n- `gbrain publish` -- deterministic HTML generation (no LLM calls)\n- `gbrain files upload` -- upload to cloud storage (optional)\n- `gbrain files signed-url` -- generate access links (optional)\n","# Publish Skill\n\nShare brain pages as beautiful, self-contained HTML documents. Optionally\npassword-protected with client-side AES-256-GCM encryption. No server needed.\n\nThis is a **code + skill pair**: the deterministic code (`gbrain publish`) does\nthe stripping, encrypting, and HTML generation. This skill tells you when and\nhow to use it. See [Thin Harness, Fat Skills](https:\u002F\u002Fx.com\u002Fgarrytan\u002Fstatus\u002F2042925773300908103)\nfor the architecture philosophy.\n\n## Contract\n\n- Published HTML is fully self-contained: no external dependencies, no server needed.\n- All private metadata (frontmatter, source citations, confirmation numbers, brain cross-links, timeline) is stripped before publishing.\n- Password protection uses AES-256-GCM with PBKDF2 key derivation; plaintext never appears in the encrypted HTML file.\n- Default is always encrypted unless the user explicitly requests \"open\", \"no password\", or \"public\".\n- External URLs (`https:\u002F\u002F...`) are preserved; only internal brain paths are stripped.\n\n## When to Publish\n\n- User asks to share a brain page, create a shareable link, or says \"give me a page\"\n- User wants to send a deal memo, person briefing, or research to someone external\n- User asks to publish a data room analysis or trip plan\n- Any time brain content needs to leave the brain without exposing the whole system\n\n## Default: ALWAYS ENCRYPT\n\nBrain content is private. Default to password-protected unless the user explicitly\nsays \"open\", \"no password\", or \"public\".\n\nIf no password is specified, auto-generate one. Share the password via a different\nchannel than the URL.\n\n## Quick Reference\n\n```bash\n# Basic publish (outputs local HTML file)\ngbrain publish brain\u002Fcompanies\u002Facme.md\n\n# Password protected (auto-generate password)\ngbrain publish brain\u002Fcompanies\u002Facme.md --password\n\n# Password protected (specific password)\ngbrain publish brain\u002Fcompanies\u002Facme.md --password \"secret123\"\n\n# Custom title\ngbrain publish brain\u002Fcompanies\u002Facme.md --password --title \"Acme -- Deal Analysis\"\n\n# Custom output path\ngbrain publish brain\u002Fcompanies\u002Facme.md --out \u002Ftmp\u002Facme-share.html\n```\n\n## What Gets Stripped\n\nThe publish command automatically removes all private\u002Finternal data:\n\n| Stripped | Example | Why |\n|---------|---------|-----|\n| YAML frontmatter | `title:`, `type:`, `tags:` | Internal metadata |\n| `[Source: ...]` citations | All formats | Provenance is internal |\n| Confirmation numbers | `ABC123DEF` -> \"on file\" | PII\u002Fbooking data |\n| Brain cross-links | `[Jane](..\u002Fpeople\u002Fjane.md)` -> `Jane` | Internal paths |\n| Timeline section | Everything below `---` \u002F `## Timeline` | Raw evidence log |\n| \"See also\" lines | Internal references | Brain navigation |\n\n**Preserved:** external URLs (`https:\u002F\u002F...`), all other content.\n\n## Sharing Workflows\n\n### Option A: Local file (simplest)\n\n```bash\ngbrain publish brain\u002Fpeople\u002Fjane-doe.md --password --out ~\u002FDesktop\u002Fjane-briefing.html\n```\n\nShare the HTML file via email, Slack, Airdrop. Share the password separately.\n\n### Option B: Upload to cloud storage\n\n```bash\n# Publish locally first\ngbrain publish brain\u002Fcompanies\u002Facme.md --password \"secret\" --out \u002Ftmp\u002Facme.html\n\n# Upload to Supabase Storage\ngbrain files upload \u002Ftmp\u002Facme.html --page shares\u002Facme\n\n# Get a signed URL (1-hour expiry)\ngbrain files signed-url shares\u002Facme\u002Facme.html\n```\n\nShare the signed URL + password. URL expires in 1 hour. Re-generate as needed.\n\n### Option C: Static hosting (Render, Netlify, S3)\n\nUpload the HTML file to any static hosting service. The file is self-contained,\nno server logic needed. Password-protected files work entirely client-side via\nWeb Crypto API.\n\n### Option D: GitHub Pages \u002F Gist\n\n```bash\ngbrain publish brain\u002Ftrips\u002Fjapan-2026.md --out trip.html\n# Upload to a GitHub Gist or Pages repo\n```\n\n## Password Protection Details\n\n- **Algorithm:** AES-256-GCM\n- **Key derivation:** PBKDF2 with 100K iterations, SHA-256\n- **Salt:** Random 16 bytes per encryption\n- **IV:** Random 12 bytes per encryption\n- **Decryption:** Client-side via Web Crypto API (SubtleCrypto)\n- **No server auth needed** -- the HTML file is self-contained\n- **\"Remember on this device\"** -- saves password in localStorage\n\nWhen encrypted, the published HTML contains ONLY ciphertext. The plaintext is\nnot present anywhere in the file.\n\n## Updating a Published Page\n\nRe-run the publish command with the same output path:\n```bash\ngbrain publish brain\u002Fcompanies\u002Facme.md --password \"same-password\" --out shares\u002Facme.html\n```\n\nSame file, same URL (if hosted), updated content.\n\n## Revoking Access\n\nDelete the file. If using signed URLs, the URL expires automatically (1 hour).\nIf using static hosting, remove the file from the host.\n\n## Anti-Patterns\n\n- **Publishing without encryption.** Brain content is private. Default to password-protected unless the user explicitly says \"open\", \"no password\", or \"public\".\n- **Sharing password and URL in the same channel.** Always share the password via a different channel than the URL for security.\n- **Assuming the user wants raw markdown.** The publish command produces beautiful HTML. Don't copy-paste markdown when `gbrain publish` exists.\n- **Including internal metadata.** Never manually share content that contains frontmatter, source citations, or timeline sections. Let the publish command strip it.\n\n## Output Format\n\n```\nPUBLISHED: [page title]\n========================\n\nFile: [output path]\nEncrypted: [yes (AES-256-GCM) \u002F no]\nPassword: [auto-generated password \u002F user-provided \u002F none]\nSize: [file size]\n\nShare the file via: [email \u002F Slack \u002F Airdrop \u002F cloud upload]\nShare the password via: [a different channel]\n```\n\n## Tools Used\n\n- `gbrain publish` -- deterministic HTML generation (no LLM calls)\n- `gbrain files upload` -- upload to cloud storage (optional)\n- `gbrain files signed-url` -- generate access links (optional)\n",{"name":5,"tools":39,"mutating":35,"triggers":41,"description":7},[40,21],"get_page",[42,43,44],"share this page","publish page","create shareable link","master","1fd9e273fe234ffb8d2a7705955f087f861a5c3d","skills\u002Fpublish","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain","https:\u002F\u002Fgithub.com\u002Fweareturnone","I have a passion for operations, systems and doing good for the world.","2026-07-08 23:38:19",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add weareturnone\u002Fgbrain --skill publish",{"tool":58,"command":59},"bunx","bunx skills add weareturnone\u002Fgbrain --skill publish",{"tool":61,"command":62},"pnpm","pnpm dlx skills add weareturnone\u002Fgbrain --skill publish","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Fskills\u002Fpublish\u002FSKILL.md",true,[],[67,84,96,111,127,148],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":34},"01M71GTZ2PH49PD2R6RR7MHJZP","signal-detector","Always-on ambient signal capture for the OpenClaw reference fixture.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fopenclaw-reference-minimal\u002Fskills\u002Fsignal-detector\u002FSKILL.md",[],[74,75,76,77,78,79,80,81,82,83],"signal","signal detector","detector","for","openclaw","capture","reference","message","fixture","ambient",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":34},"01M71GTY1250DC73PGRWDE82KW","query","Look up brain pages in the OpenClaw reference fixture.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fopenclaw-reference-minimal\u002Fskills\u002Fquery\u002FSKILL.md",[],[86,91,80,92,78,93,28,94,27,21,95,77,82],"do","lookup","look","up","about",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":34},"01M71GTX0T1T9224P29SD7CSG7","context-now","ALWAYS-ON time-sensitivity discipline for the OpenClaw reference fixture.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fopenclaw-reference-minimal\u002Fskills\u002Fcontext-now\u002FSKILL.md",[],[103,104,105,106,107,78,77,108,80,82,109,110],"context","context now","now","time","how","discipline","sensitivity","long",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":34},"01M71GTVZJTSWXBM4ZRF4A7QVA","brain-ops","Core read\u002Fwrite cycle for the OpenClaw reference fixture.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fopenclaw-reference-minimal\u002Fskills\u002Fbrain-ops\u002FSKILL.md",[],[118,27,119,120,92,78,121,80,122,77,123,124,125,82,126],"brain ops","ops","Citation","people","true","read","cycle","core","write",{"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":34},"01M71GTT4F64V9RMNZ0WRTKWNG","webhook-transforms","Generic framework for converting external events (SMS, meetings, social mentions)\ninto brain-ingestible signals. Define a transform function, register a webhook URL,\nand incoming events get processed through the brain pipeline.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Fskills\u002Fwebhook-transforms\u002FSKILL.md",[],[134,135,136,137,138,94,139,140,141,142,122,143,21,144,145,24,77,146,147,26],"webhook","transforms","webhook transforms","SET","register","meetings","signals","URL","define","social","event","pipeline","sms","generic",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":167,"publishedAt":34},"01M71GTRDKSM500PRZEXFNQHF9","testing","Skill validation framework. Validates every skill has SKILL.md with frontmatter,\nevery reference exists, every env var is declared. The testing contract for the\nskill system itself.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Fskills\u002Ftesting\u002FSKILL.md",[154,159,162],{"categoryNo":155,"categoryName":156,"taxonomyType":157,"taxonomyTypeDesc":158},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":160,"categoryName":161,"taxonomyType":157,"taxonomyTypeDesc":158},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":163,"categoryName":164,"taxonomyType":165,"taxonomyTypeDesc":166},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[150,168,169,170,171,172,32,173,174,175,176,30,177,178,28,179,21,180,181,77],"test skills","validation","run","health check","test","health","check","env","skill validation","contract","tests","skill health","system","validate skills"]