ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何发布你自己的AI Agent沙箱Pack到nono注册中心:完整教程

如何发布你自己的AI Agent沙箱Pack到nono注册中心:完整教程 如何发布你自己的AI Agent沙箱Pack到nono注册中心完整教程【免费下载链接】nonoagent runtime security - zero trust, zero setup, zero latency.项目地址: https://gitcode.com/gh_mirrors/non/nononono是让 AI Agent如 Claude Code、Codex、OpenCode在零延迟沙箱中安全运行的工具。当你调好一套沙箱策略后可以把它打包成一个签名过的nono Pack发布到nono 注册中心registry让团队或社区一条命令即可安装。本教程带你从零走通全流程编写沙箱 Profile → 编写 Pack 清单 → 注册可信发布者 → 用 GitHub Actions 自动签名发布 → 验证nono pull。一、nono Pack 是什么发布前需要准备什么一个 Pack 是一组带 Sigstore 签名的产物集合可包含以下类型profile— 沙箱配置配合--profile使用plugin— 插件文件如.claude-plugin/plugin.json、hooks、skillsinstruction— 上下文文件如CLAUDE.md可用--init拷贝进项目trust_policy/groups/script— 信任策略、能力分组、辅助脚本发布前你需要备齐4 样东西已在注册中心 UI 创建 Pack需要名称、描述、类型、来源仓库、可选子路径Pack 命名空间与发布它的 GitHub 组织一致如 Pack 是acme-corp/claude-code仓库必须在acme-corp/*下注册中心强制校验一条针对具体仓库 工作流路径的**可信发布者trusted publisher**记录一个带permissions: id-token: write的 GitHub Actions 工作流 完整的生产侧文档在 docs/cli/features/package-publishing.mdx消费侧安装/升级/固定版本见 docs/cli/features/managing-packs.mdx。二、编写你的 AI Agent 沙箱 ProfileProfile 是 Pack 的核心。支持 JSONC带注释的 JSON推荐用extends继承官方基线只写增量规则{ extends: default, meta: { name: my-agent, description: 我的 Agent 沙箱策略 }, filesystem: { allow: [/opt/my-tools] }, network: { block: false } }几个实用技巧用nono profile show 名称查看合并后的最终配置用nono profile diff default 名称看与默认策略的差异需要区分操作系统时条目可以带when谓词如{ path: /etc/pki, when: linux:rhel-like }用了when就要把min_nono_version设到支持该特性的 CLI 版本继承链上限 10 层超过会报ProfileInheritance错误Profile 编写工具与规则详见 docs/cli/features/profile-authoring.mdx。三、编写 Pack 清单 package.jsonpackage.json是必填文件——缺失时nono pull会直接失败。仓库里有一个可直接参考的最小样例 tests/fixtures/synthetic-pack/package.json{ schema_version: 1, name: synthetic, description: 一个只含单个 profile 产物的最小 Pack, license: Apache-2.0, platforms: [macos, linux], min_nono_version: 0.44.0, artifacts: [ { type: profile, path: profiles/synthetic.json, install_as: synthetic } ] }关键字段约束字段说明version必填且必须是合法 semver0.1.0可以v0.1.0、main不行版本号以此为准不是 tag 名name必须与注册中心登记的 Pack 名一致artifacts[].path必须与上传的文件名逐字匹配install_asprofile产物必填即用户--profile后输入的名字prefixgroups产物必填避免与预置分组撞名min_nono_version设为你的 Pack 能工作的最低 CLI 版本更老的客户端会拒绝安装清单的 Rust 结构定义可参考 crates/nono-cli/src/package.rs。四、在注册中心创建 Pack 并注册可信发布者在注册中心 UI 创建 Pack名称、描述、类型、来源仓库、子路径配置可信发布者绑定仓库 工作流路径 ref 模式如refs/tags/v* 可选 GitHub Environment注册中心会拒绝命名空间外的仓库、.github/workflows/之外的工作流、与登记不符的 OIDC 身份。这保证了「谁能发布你的 Pack」被严格锁定到某一条工作流。五、用 GitHub Actions 一键签名发布发布走trusted publishing可信发布握手全程无长期密钥GitHub 为工作流签发 OIDC token官方签名 Action 用nono trust sign --keyless给产物签名OIDC token 换取短期上传 token上传产物与.bundle签名文件到注册中心最小工作流骨架完整示例见 package-publishing.mdxname: Publish nono package on: push: tags: [v*] permissions: contents: read id-token: write # 缺少这行会导致 OIDC 换 token 失败 jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Publish package uses: registry-repo/actionmain with: package-name: my-agent package-namespace: my-org version: ${{ steps.version.outputs.version }} path: packages/my-agent files: | package.json my-agent.profile.json⚠️ 两个易踩的坑嵌套文件必须显式写进files:——省略时只自动发现顶层非隐藏文件hooks/等子目录会被漏掉多 Pack 单仓monorepo每个 Pack 用独立的 tag 前缀如claude-v*和独立内联工作流不要用 reusable workflow——否则 OIDC 身份指向被调用方信任面被放大发布动作先改package.json里的version并提交 → 推送 tag → 等工作流跑完 → 在注册中心确认新版本。六、消费端验证nono pull 的信任链发布成功后让同事或你自己验证nono pull my-org/my-agentCLI 会执行完整校验链拉取 manifest → 下载产物与.bundle签名文件 →本地验证 Sigstore 签名→ 确认签名方仓库组织与 Pack 命名空间一致 → 把签名者身份钉进本地 lockfile → 安装到~/.config/nono/packages/。签名验证的流程如下图所示最终效果就是 Agent 只看到白名单内的路径与网络权限其余一律不可见常见问题速查症状排查发布者注册失败仓库格式owner/repo、owner 与命名空间一致、工作流在.github/workflows/下、注册中心会话已开 2FAOIDC 换 token 失败id-token: write权限、工作流路径/仓库/ref 模式与可信发布者完全一致发布成功但nono pull失败package.json是否上传、文件名与artifacts[].path是否逐字匹配、min_nono_version是否高于用户 CLI 版本总结整个发布链路可以概括为Profile 写策略 → package.json 描述产物 → 注册中心绑定命名空间 → 可信发布者锁定工作流 → Actions 签名上传 → 消费端 Sigstore 本地验签。版本以package.json为准、每次发版前提交消费端即可从已安装文件一路溯源到具体仓库、工作流与 Git ref。现在动手发布你的第一个 Pack 吧【免费下载链接】nonoagent runtime security - zero trust, zero setup, zero latency.项目地址: https://gitcode.com/gh_mirrors/non/nono创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表