用途:把智能体生成的 HTML 文件、附件或整个目录发布到私有 IPFS Cluster,返回可分享的链接。每次发布生成新的内容寻址(CID)不可变快照,编辑即产生新链接,旧版本保持可访问,类似 Claude Artifacts。纯 bash + curl 实现,不依赖 python 或 jq,包含 publish.sh、test.sh、SKILL.md 三个文件。
配置:首次需 3 个环境变量——IPFS_PUBLISH_ENDPOINT(写入入口,如 https://pages-publish.example.com,内部同机可用 http://127.0.0.1:9097)、IPFS_PUBLISH_TOKEN(写入入口的 Bearer token,向集群运营者索取)、IPFS_BASE_URL(读取/分享基地址,如 https://pages.example.com)。若 publish.sh 以退出码 2(未配置)结束,应向用户询问这三个值,用 export 设置到当前会话,并持久化到该智能体自身的环境配置(如 Claude Code 的 ~/.claude/settings.json 的 env 块),否则写入本环境读取的 shell 启动文件(~/.zshrc、~/.zshenv、~/.bashrc 或 PowerShell $PROFILE),然后重试发布。
主要用法:./publish.sh page.html 发布单文件,链接形如 https://pages.example.com/artifact/<cid>;./publish.sh ./site 发布目录(index.html 与相对资源),链接形如 …/artifact/<dirCID>/;--json 输出 {"cid","link","kind","expires_in"};--expire-in 24h 设置过期;--permanent 永久不过期(慎用);--verify 发布后 GET 链接并把状态写到 stderr;--dry-run 仅校验并预览请求,不上传;--version、--help。默认 stdout 只输出单行链接,便于捕获;诊断信息走 stderr。
行为与限制:发布为不可变快照,无原地更新;默认 1 周过期(168h),到期自动取消 pin;--permanent 永久保留。目录按相对根路径添加并 wrap-with-directory,根目录应包含 index.html,否则链接显示目录列表。没有删除功能(无所有权模型),清理依靠过期或运营者用 ipfs-cluster-ctl。强制使用 CIDv1。
边界情况:需要 bash(非 sh)和 curl,缺失时退出码 5;目录内的符号链接文件会被跳过(使用 find -type f);超大型目录(数千文件)可能触及操作系统参数长度上限;对外发布应使用 HTTPS 写入入口,避免在公网使用明文 http://<ip>:9097。
自测与安装:./test.sh 需要 3 个环境变量已设置且部署可达。把 publish-artifact/ 目录复制到用户的 ~/.claude/skills/ 或项目的 skills/(Claude Code 会自动发现),或将 publish.sh 作为普通 CLI 使用(chmod +x,仅需 bash 与 curl)。