READMESource: main@4fc542f2
pack-Agent · Agent 打包工具
简体中文 | English
把任意 AI Agent 打包成可移植的 dsh 模式(preset)仓库。
打包结果是一个 GitHub 仓库,仓库本身就是 dsh preset:克隆到 ~/.dsh/.agent-presets/<id> 即可在 dsh 模式选择器中使用。
这是什么
pack_agent.py 把一个 AI Agent —— 来自 Claude Code、Codex、opencode、aider、Cursor、已安装的 dsh preset,或任意用 JSON/YAML manifest 描述的自定义 Agent —— 打包成可移植的 dsh preset 仓库:
| 路径 | 内容 |
|---|---|
agent.cordis.yml |
dsh 组装文件(基础 preset + MCP + 工具 + skills 接线) |
preset.yml |
模式名称 / 描述(模式选择器显示) |
AGENTS.md |
合并后的 Agent 指令 + memory |
skills/ |
收集到的 skills(每个 skill 一个目录) |
tools/ |
打包的自定义工具插件 |
assets/ |
需要附带的其他文件 |
.env.example |
MCP token 占位符(绝不包含真实密钥) |
install.sh |
一键安装脚本 |
pack_agent.py |
打包器本身,方便以后重新打包 |
特性
- 多来源:dsh preset(
--from-dsh)、Claude Code(~/.claude.json、skills、CLAUDE.md、项目.mcp.json)、Codex(~/.codex/config.toml、memory、skills)、opencode / aider / Cursor(--source opencode|aider|cursor),或通用 manifest - MCP 脱敏:token/密钥自动替换为
process.env.AGENT_MCP_*占位符并写入.env.example,任何敏感信息都不会进仓库 - memory 脱敏:
--memory safe既剔除赋值式密钥,也剔除行内形似凭据的 token(URL 和正常文本不受影响) - MCP 过滤:
--mcp-include、--mcp-exclude、--exclude-local-mcp(剔除本机专用服务) --dry-run只预览不打任何文件;--verbose打印详细发现过程--push自动 git init 并推送到 GitHub(有gh时直接建仓库)
环境要求
- Python 3.9+
pip install pyyaml(Python < 3.11 解析 TOML 还需pip install tomli)
快速开始
# 自动检测本机的 dsh / Claude Code / Codex / opencode / aider / Cursor,合并打包
python3 pack_agent.py --id my-agent --name "我的 Agent" --description "..." --out dist/my-agent
# 只打包某个已安装的 dsh preset
python3 pack_agent.py --from-dsh standard --id my-agent --out dist/my-agent
# 用 manifest 打包任意 Agent
python3 pack_agent.py --manifest agent.manifest.json --out dist/my-agent
# 先预览,不写任何文件
python3 pack_agent.py --manifest agent.manifest.json --out dist/my-agent --dry-run
# 只保留 github MCP、剔除本机服务
python3 pack_agent.py --id my-agent --mcp-include github --exclude-local-mcp --out dist/my-agent
# 打包并推送到 GitHub
python3 pack_agent.py --id my-agent --push --repo my-agent --public
命令行参考
| 参数 | 说明 |
|---|---|
--id |
模式 id(kebab-case 目录名)。默认取 --out 或 my-agent |
--name、--description |
模式选择器里显示的名称 / 描述 |
--out |
输出目录。默认 ./dist/<id> |
--source |
auto(默认,合并所有检测到的来源)、dsh、claude、codex、opencode、aider、cursor、generic |
--from-dsh <id> |
以已安装的 dsh preset 为基底(隐含 --source dsh) |
--manifest <path> |
描述通用 Agent 的 JSON/YAML manifest |
--skills [名称...] |
要包含的 skill 名称/路径;不带值 = 一个都不包含。默认:全部发现的 |
--mcp-config <path> |
额外的 MCP 配置文件(JSON/YAML/TOML,可重复) |
--mcp-include <name> |
只包含这些 MCP(可重复 / 逗号分隔) |
--mcp-exclude <name> |
排除这些 MCP(可重复 / 逗号分隔) |
--exclude-local-mcp |
剔除本机专用 MCP(home/本地路径、localhost URL) |
--agent-md <path> |
要包含的指令文件(可重复) |
--memory |
auto(默认)/ full / safe / none |
--memory-files <path> |
额外的 memory 文件(可重复) |
--extra-file <src:dst> |
把额外文件/目录复制到 assets/<dst>(可重复) |
--tool <path> |
把自定义工具插件打包进 tools/(可重复) |
--base-preset <id> |
非 dsh 来源时的基底 preset。默认 standard |
--dry-run |
只打印计划,不写任何文件 |
--verbose |
详细发现 / 脱敏输出 |
--push、--repo、--public、--private |
git init 并推送到 GitHub |
--yes |
跳过所有确认提示 |
Manifest 格式
{
"id": "my-agent",
"name": "My Agent",
"description": "A packaged agent",
"skills": ["/path/to/skill-dir", "skill-name-from-common-roots"],
"mcp": {
"github": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "ghp_xxx" }
}
},
"agent_md": ["/path/to/AGENTS.md"],
"memory": {
"mode": "safe",
"files": ["/path/to/memory.md"]
},
"tools": [
"/path/to/tool.mjs",
{"path": "/path/to/tool-dir", "id": "my-tool", "name": "./tools/tool-dir/index.mjs", "config": {}}
],
"extra_files": [
{"src": "/path/to/file", "dst": "notes/guide.md"}
]
}
安装打包结果
在目标机器上:
git clone --depth 1 https://github.com/you/my-agent ~/.dsh/.agent-presets/my-agent
或进入仓库运行:
./install.sh https://github.com/you/my-agent my-agent
然后重启 dsh,在模式选择器中选择新模式。MCP 需要的环境变量见 .env.example。
安全说明
- MCP 的 token/密钥不会写入仓库,只生成
process.env.AGENT_MCP_*占位符和.env.example。 - memory 默认
safe模式,行内形似凭据的 token 也会被剔除;确实需要全量保留时用--memory full。 - 发布前建议检查
AGENTS.md、skills/、assets/里没有意外包含的敏感信息。
License
MIT © aoye516
No comments yet. Be the first to write one.