AI Agent统一Skill库:用软链接+Git实现跨框架能力复用
1. 项目概述:为什么“统一Skill库”不是锦上添花,而是AI Agent落地的生死线
你是不是也这样:刚在 Claude Code 里配好一个能自动读取 Excel 并生成周报的 skill,转头打开 Codex 就得重写一遍逻辑;Hermes Agent 刚调通 GitHub API 的权限,Skynet 终端一启动又提示 token 过期;Tabby 里写好的 Python 脚本,复制到 VS Code 终端里跑就报ModuleNotFoundError: No module named 'pandas'——不是没装,是环境路径根本对不上。这不是操作失误,是底层架构的撕裂。“为电脑上的所有AI工作 Agent,统一一套 Skill 库”,这句话表面看是文件管理优化,实则是把散落在各 Agent 软件夹、不同 Python 环境、多个 Git 仓库里的“能力碎片”,用一套物理路径+逻辑规则重新焊接成可复用的“能力脊柱”。它解决的不是“能不能用”,而是“能不能持续迭代、安全共享、快速验证”。我试过给 7 个主流 Agent 框架(Claude Code、Codex、Hermes、Comet、OpenClaw、Superpowers、Skynet)各自维护独立 skill 目录,三个月后光是同步一个基础日志解析函数的 bug 修复,就得手动改 7 处,漏掉一处就导致某 Agent 在处理服务器日志时静默失败。而统一 Skill 库之后,所有 Agent 共享同一套skills/core/log_parser.py,修改一次,全部生效,且 Git 提交记录清晰可溯。这背后依赖三个硬核支点:软链接(symbolic link)实现路径解耦、Git 作为技能版本控制中枢、终端作为唯一可信执行入口。它不依赖任何特定 Agent 框架的 SDK,也不要求你改写一行业务代码,只靠操作系统级的文件系统能力+开发者工具链,就把“能力复用”从理想拉进现实。适合谁?不是只给资深 DevOps,而是给所有每天和至少两个 Agent 打交道的 AI 原生工作者——产品经理用 Agent 自动生成 PRD,工程师用 Agent 自动部署测试环境,数据分析师用 Agent 实时清洗 BI 数据源。只要你厌倦了“写一次,复制七次,改七次,错七次”的循环,这个方案就是你的刚需。
2. 核心设计思路拆解:为什么必须用软链接,而不是复制、挂载或环境变量
2.1 软链接是唯一能同时满足“零拷贝”“实时同步”“路径透明”的方案
很多人第一反应是“直接把 skill 文件夹复制到每个 Agent 目录下”,这看似简单,但埋下三颗定时炸弹:
- 炸弹一:磁盘空间黑洞。一个中等规模的 Skill 库(含依赖包、测试数据、文档)轻松突破 500MB。7 个 Agent 各存一份,就是 3.5GB 无意义冗余。更致命的是,当你要更新一个核心的
http_client.py(比如修复 SSL 证书校验漏洞),你得手动覆盖 7 个位置,漏掉一个,那个 Agent 就可能因证书错误中断所有 API 调用。 - 炸弹二:Git 版本失控。复制意味着每个 Agent 目录下都有一个独立的
.git仓库。当你在 Codex 的 skill 目录里提交了新功能,在 Hermes 里却还用着旧版,Git 无法帮你追踪“哪个 Agent 正在用哪个 commit”。我们团队曾因此上线了一个有严重内存泄漏的pdf_extractor.py,因为只有 Skynet 的副本被误提交,其他 6 个 Agent 都没触发 CI 测试。 - 炸弹三:路径引用断裂。很多 skill 会硬编码相对路径,比如
from skills.core import config_loader。一旦你把 skill 复制到/Applications/ClaudeCode.app/Contents/Resources/skills/,而它的config_loader.py里写的是../configs/app.yaml,路径就全乱了——因为原始结构是/central_skills/core/config_loader.py引用/central_skills/configs/app.yaml,复制后目录层级变了,引用必然失效。
而软链接(ln -s)完美避开这三颗雷:
- 零拷贝:
ln -s /Users/you/skills /Applications/ClaudeCode.app/Contents/Resources/skills只创建一个 4KB 的指针文件,磁盘占用忽略不计; - 实时同步:修改
/Users/you/skills/core/log_parser.py,所有通过软链接访问它的 Agent 立刻获得最新版,无需任何同步操作; - 路径透明:软链接让
/Applications/ClaudeCode.app/Contents/Resources/skills在文件系统层面完全等同于/Users/you/skills,所有import、open()、os.path.join()调用都按原始路径解析,毫无感知。
提示:有人会问“为什么不用
mount --bind(Linux)或mount -o bind?”——它确实也能映射目录,但需要 root 权限,且在 macOS 上不原生支持(需借助bindfs等第三方工具,增加运维复杂度)。而软链接是 POSIX 标准,Windows 10+ 的mklink、macOS/Linux 的ln -s全平台原生支持,连最老的 Ubuntu 16.04 或 macOS High Sierra 都能跑,这才是生产环境该有的稳健性。
2.2 Git 不是可选项,而是 Skill 库的“宪法”与“审计日志”
把 Skill 库放在 Git 里,绝不是为了“显得专业”。它是解决三个核心治理问题的基础设施:
- 问题一:回滚到“上周五还能用”的版本。Agent 开发中,一个 skill 的微小改动(比如把
time.sleep(1)改成time.sleep(0.5))可能引发连锁反应——下游 Agent 因请求频率超限被 API 限流。没有 Git,你只能靠记忆或翻聊天记录找“出问题前的代码”,耗时且不可靠。而git checkout HEAD~3一键回到三天前的稳定状态,所有 Agent 立即恢复。 - 问题二:明确“谁在什么时候改了什么”。当
superpowers_skill突然在 Hermes 中报错AttributeError: 'NoneType' object has no attribute 'text',git blame skills/superpowers/parser.py能立刻定位到是张三昨天下午 3:22 提交的第 47 行修改引入了空值处理缺陷,责任清晰,修复路径明确。 - 问题三:隔离实验性技能与生产技能。我们用 Git 分支策略:
main分支只接受经过 CI 测试的稳定 skill;dev分支供个人开发新功能;hotfix/ssl-fix分支专用于紧急安全补丁。Agent 配置可指定加载main或dev分支,避免把未测试代码推给客户环境。
注意:Git 仓库必须初始化在中央 Skill 目录(
/Users/you/skills)根目录,而非某个 Agent 子目录。否则软链接指向的只是普通文件夹,Git 无法跟踪其变更。初始化命令就一句:cd /Users/you/skills && git init && git add . && git commit -m "init central skill repo"。
2.3 终端是唯一可信入口:为什么 GUI 点击永远无法替代命令行
标题里强调“这是唯一一个必须使用终端的操作”,不是故弄玄虚。原因在于:
- GUI 文件管理器(Finder/Explorer)创建的“快捷方式”不是真正的软链接。macOS Finder 的“制作替身”或 Windows 的“创建快捷方式”,本质是
.alias或.lnk文件,它们只是 GUI 层的便利功能,底层文件系统不识别。当 Agent 在终端里执行python -c "import skills.core; print(skills.core.__file__)"时,它看到的是/Applications/ClaudeCode.app/Contents/Resources/skills/core/__init__.py,而这个路径指向的.alias文件根本不能被 Python 解析为模块。只有终端ln -s创建的符号链接,才是内核级的文件系统对象,所有程序(包括 Python 解释器、Node.js、Shell 脚本)都能无感访问。 - 终端提供原子化、可复现的操作过程。GUI 操作无法记录步骤、无法批量执行、无法写入脚本。而一条
for agent in claude codex hermes; do ln -sf /Users/you/skills /Applications/${agent}Code.app/Contents/Resources/skills; done就能一次性为所有 Agent 建立链接,且每次执行结果绝对一致。我们团队的部署手册里,这一节只有 3 行 Bash 命令,新同事照着敲完,5 秒完成,零出错。 - 终端是 Agent 运行的真实上下文。所有 AI Agent 的 skill 最终都是由终端进程(如
python skill_runner.py)加载执行的。你在 GUI 里“双击运行”某个脚本,背后仍是终端在调用。统一在终端操作,确保了开发、测试、部署环境的高度一致,避免“在我机器上能跑”的经典陷阱。
3. 实操全流程详解:从零开始搭建你的中央 Skill 库(含 macOS/Linux/Windows 全平台命令)
3.1 第一步:规划中央 Skill 目录结构——别让混乱从第一天就开始
一个反直觉但至关重要的经验:不要把 Skill 库放在你的项目目录或桌面,而要放在用户主目录下的标准位置。我们固定用/Users/you/skills(macOS/Linux)或C:\Users\you\skills(Windows),原因有三:
- 权限稳定:主目录下,当前用户拥有完全读写权限,避免后续 Agent 运行时因权限不足(Permission Denied)卡死;
- 路径简短:
/Users/you/skills比/Users/you/Documents/MyProjects/AI-Agents/Skill-Library-v2-final-2024/central-skills/更易输入、更少出错; - 跨工具兼容:VS Code 的
settings.json、Tabby 的配置文件、Git 的全局设置,都默认信任主目录路径,不会因空格、中文、特殊字符报错。
目录结构按功能分层,拒绝“所有文件堆一起”:
skills/ ├── core/ # 所有 Agent 共用的基础能力(必须) │ ├── __init__.py │ ├── http_client.py # 统一封装 requests,带重试、超时、token 注入 │ ├── file_io.py # 安全读写文件,自动处理编码、路径遍历防护 │ └── logger.py # 标准化日志,输出到统一日志文件 + 控制台 ├── agents/ # 按 Agent 名称分组的专属技能(可选) │ ├── claude/ # Claude Code 专用 skill(如 Claude 特有的 Markdown 渲染器) │ ├── codex/ # Codex 专用 skill(如 Azure DevOps API 封装) │ └── hermes/ # Hermes 专用 skill(如本地 Docker 管理) ├── utils/ # 工具类(非业务逻辑) │ ├── test_data/ # 所有 skill 的单元测试用例数据 │ └── docs/ # 技能文档(Markdown),自动生成在线帮助 └── README.md # 总体说明:如何贡献、如何调试、已知限制实操心得:
core/目录是心脏,必须存在且严禁放业务逻辑。所有具体业务 skill(如“生成周报”“分析服务器日志”)应放在agents/claude/下,并通过from skills.core import http_client调用基础能力。这样,当http_client.py升级时,所有业务 skill 自动受益,无需修改。
3.2 第二步:初始化 Git 仓库并配置关键安全规则
进入中央 Skill 目录,执行初始化(以 macOS/Linux 为例,Windows 请将code替换为notepad或 VS Code):
cd /Users/you/skills git init # 创建 .gitignore,排除所有非代码文件,保持仓库纯净 echo "__pycache__/" > .gitignore echo "*.pyc" >> .gitignore echo "*.log" >> .gitignore echo "/utils/test_data/*" >> .gitignore # 测试数据不进 Git,太大 echo "/utils/docs/*" >> .gitignore # 文档生成物不进 Git # 添加所有代码文件 git add . git commit -m "init: create central skill repo with core structure"关键安全配置(必须做):
- 禁止提交敏感信息:在
.git/config中添加secrets检查,防止误传 API Key:
然后在[filter "secrets"] clean = "grep -v 'API_KEY\\|TOKEN\\|SECRET' || true" smudge = cat.gitattributes中声明:**/*.py filter=secrets。这样,任何包含API_KEY=的 Python 文件,git add时会被自动过滤掉敏感行。 - 强制分支保护:在 GitHub/GitLab 上,将
main分支设为受保护分支,要求 PR 必须通过 CI 测试(如pytest skills/core/)且有至少一人批准才能合并。我们用 GitHub Actions,CI 脚本检查:
这样,没人能绕过测试直接合入name: Skill Lint & Test on: [pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: { python-version: '3.11' } - name: Install dependencies run: pip install pytest black - name: Run tests run: pytest skills/core/ --tb=shortcore/http_client.py的修改。
3.3 第三步:为每个 Agent 创建软链接——全平台命令清单与避坑指南
这是核心操作,必须在终端执行。以下是主流 Agent 的标准路径和对应命令(请严格按你的实际安装路径调整):
| Agent 名称 | macOS 标准安装路径 | Linux 标准路径 | Windows 标准路径 | 创建软链接命令(macOS/Linux) | 创建软链接命令(Windows) |
|---|---|---|---|---|---|
| Claude Code | /Applications/ClaudeCode.app/Contents/Resources/ | /opt/claude-code/resources/ | C:\Program Files\ClaudeCode\resources\ | ln -sf /Users/you/skills /Applications/ClaudeCode.app/Contents/Resources/skills | mklink /D "C:\Program Files\ClaudeCode\resources\skills" "C:\Users\you\skills" |
| Codex | /Applications/Codex.app/Contents/Resources/ | /opt/codex/resources/ | C:\Program Files\Codex\resources\ | ln -sf /Users/you/skills /Applications/Codex.app/Contents/Resources/skills | mklink /D "C:\Program Files\Codex\resources\skills" "C:\Users\you\skills" |
| Hermes Agent | /Applications/Hermes.app/Contents/Resources/ | /opt/hermes/resources/ | C:\Program Files\Hermes\resources\ | ln -sf /Users/you/skills /Applications/Hermes.app/Contents/Resources/skills | mklink /D "C:\Program Files\Hermes\resources\skills" "C:\Users\you\skills" |
避坑指南(血泪教训总结):
- 坑一:“No such file or directory” 错误。常见于路径拼写错误,比如把
ClaudeCode.app写成ClaudeCode.App(大小写敏感)。解决方案:先用ls /Applications/确认真实文件名,再复制粘贴,绝不手打。 - 坑二:软链接创建成功,但 Agent 报 “ModuleNotFoundError”。90% 是因为 Agent 的 Python 解释器没把
skills目录加到sys.path。此时需在 Agent 的启动脚本或配置中显式添加:
我们已在# 在 Agent 的主 Python 文件开头加入 import sys import os sys.path.insert(0, os.path.expanduser("~/skills")) # macOS/Linux # sys.path.insert(0, r"C:\Users\you\skills") # Windowsskills/core/__init__.py里内置了此逻辑,只要 Agent 加载skills.core,路径就自动注入。 - 坑三:Windows 上
mklink报 “You do not have sufficient privilege”。必须以“管理员身份运行”命令提示符或 PowerShell。右键点击“Windows PowerShell (管理员)”,再执行mklink命令。
3.4 第四步:验证与调试——三步确认你的 Skill 库真正生效
创建完软链接,别急着写新 skill,先做三步原子验证:
- 文件系统级验证:在终端执行
ls -la /Applications/ClaudeCode.app/Contents/Resources/skills,输出应类似:
关键看开头的lrwxr-xr-x 1 you staff 18 10 Oct 15:30 skills -> /Users/you/skillsl(表示 link)和箭头->后的路径是否正确。 - Python 解释器级验证:启动 Python,模拟 Agent 加载:
输出应为cd /Applications/ClaudeCode.app/Contents/Resources/ python -c "import skills.core.http_client as c; print(c.__file__)"/Users/you/skills/core/http_client.py,证明 Python 确实通过软链接加载了中央库。 - Agent 运行时验证:在 Claude Code 中新建一个 skill,内容为:
运行后,检查 Claude Code 的日志输出(通常在 Console 或from skills.core.logger import get_logger logger = get_logger("test") logger.info("Central skill library is working!")~/.claude/logs/),若看到"Central skill library is working!",则 100% 成功。
实操心得:我们把这三步写成一个
verify.sh脚本,每次新增 Agent 或重装系统后,5 秒内完成全量验证。脚本内容就三行:ls -la ...、python -c ...、echo "Done!"。自动化是减少人为失误的终极武器。
4. 核心环节深度解析:如何让 Skill 库真正“活”起来,而非静态文件夹
4.1 Skill 开发规范:让每个 skill 都成为可插拔、可测试、可审计的“乐高积木”
一个合格的 skill 不是随便写的 Python 脚本,它必须遵循四条铁律:
- 铁律一:单一职责。一个 skill 文件只做一件事。
excel_report_generator.py只负责读 Excel、生成报告字符串;send_email.py只负责发邮件。绝不混合——比如excel_report_generator.py里直接调用smtplib发邮件。这样,当你要把报告改成 Slack 推送时,只需替换send_email.py为send_slack.py,excel_report_generator.py一行不动。 - 铁律二:依赖显式声明。在 skill 文件同目录下,必须有
requirements.txt,列出所有外部依赖:
Agent 启动时,自动执行pandas>=1.5.0 openpyxl>=3.1.0 # 注意:不要写具体版本如 pandas==1.5.3,留出升级空间pip install -r skills/agents/claude/requirements.txt。我们用pip-tools管理依赖,pip-compile requirements.in生成精确的requirements.txt,杜绝“在我机器上能跑”的依赖地狱。 - 铁律三:输入输出契约化。每个 skill 必须定义清晰的输入参数和返回值类型。我们用 Python 类型注解强制约束:
这样,Agent 框架可以自动生成参数表单、做输入校验,甚至用from typing import List, Dict, Optional from pydantic import BaseModel class ReportConfig(BaseModel): excel_path: str output_format: str = "markdown" # markdown or pdf def generate_report(config: ReportConfig) -> str: """Generate report string from Excel file. Args: config: Report configuration Returns: Report content as string """ # implementation...mypy做静态类型检查。 - 铁律四:自带单元测试。每个 skill 文件旁,必须有
test_<skill_name>.py:
运行# test_excel_report_generator.py import pytest from skills.agents.claude.excel_report_generator import generate_report def test_generate_report_with_sample_data(): config = ReportConfig(excel_path="utils/test_data/sample.xlsx") result = generate_report(config) assert "Weekly Summary" in result assert result.count("|") > 10 # 表格行数足够pytest skills/agents/claude/test_excel_report_generator.py,必须 100% 通过才能合入main分支。
4.2 Git 工作流实战:如何用分支策略管理技能演进,避免“改坏一个,崩掉一片”
我们采用精简版 Git Flow,只保留main和feature/*两个分支,兼顾效率与安全:
main分支:黄金标准。只接受经过完整测试的代码。任何 PR 合入main,必须:- 通过所有单元测试(
pytest skills/); - 通过集成测试(启动 Claude Code + Codex,用真实 API 调用
generate_report); - 有至少一名 Reviewer 批准。
- 通过所有单元测试(
feature/xxx分支:个人沙盒。开发者克隆main,创建feature/http-timeout-tuning,在此分支上修改core/http_client.py,编写新测试,本地验证通过后,推送分支并发起 PR。- Hotfix 机制:紧急止血。当线上发现严重 bug(如
http_client.py导致所有 API 调用超时),直接从main创建hotfix/fix-http-timeout分支,修复、测试、PR、合入main,然后立即git tag v1.2.1。所有 Agent 配置可指定git checkout v1.2.1,精准回滚。
实操心得:我们禁用了
git push --force权限。曾经有同事--force覆盖了main分支,导致整个团队的git pull失败。现在,所有强制推送必须经团队负责人审批,且需在 Slack 频道公告。纪律比技术更能保障稳定。
4.3 终端复用技巧:用 Tabby/Terminator 让多 Agent 开发效率翻倍
既然终端是核心入口,就必须让它高效。我们弃用系统自带终端,全面转向Tabby(macOS/Linux/Windows 通用)和Terminator(Linux 专用),原因:
- Tabby 的标签页(Tab)是 Agent 开发的生命线:
- Tab 1:
cd /Users/you/skills && git status(监控中央库变更); - Tab 2:
cd /Applications/ClaudeCode.app/Contents/Resources && python -m http.server 8000(本地调试 Claude skill); - Tab 3:
cd /opt/codex/resources && tail -f logs/debug.log(实时查看 Codex 日志); - Tab 4:
htop(监控所有 Agent 进程 CPU/内存)。
一个快捷键Ctrl+Shift+T新建 Tab,Ctrl+Shift+←/→切换,效率远超 Alt+Tab 切换窗口。
- Tab 1:
- Terminator 的分屏(Split)是调试神器:
在一个 Terminator 窗口中,垂直分割:左半屏运行pytest skills/core/ -v,右半屏运行watch -n 1 'git log --oneline -5',边看测试结果边盯 Git 提交,bug 定位速度提升 3 倍。 - 关键配置:在 Tabby 设置中,启用
Shell Integration,这样cd命令会自动更新 Tab 标题为当前路径(如skills/core),一眼看清每个 Tab 在做什么。
4.4 故障排查全景图:从“Agent 报错”到“定位根源”的标准化路径
当 Agent 突然报错,别慌,按此流程 5 分钟内定位:
| 现象 | 排查步骤 | 根本原因 | 解决方案 |
|---|---|---|---|
ModuleNotFoundError: No module named 'skills' | 1.ls -la /Applications/ClaudeCode.app/Contents/Resources/skills看软链接是否存在2. python -c "import sys; print(sys.path)"看skills路径是否在sys.path中 | 软链接损坏,或 Agent 未注入sys.path | 重建软链接;检查 Agent 启动脚本是否执行了sys.path.insert(0, ...) |
ImportError: cannot import name 'xxx' from 'skills.core' | 1.cat /Users/you/skills/core/__init__.py看是否导出了xxx2. git log --oneline -5 skills/core/看最近提交是否删除了xxx | __init__.py未正确from .xxx import yyy,或 Git 回滚到了旧版 | 编辑core/__init__.py补充导出;git checkout main拉取最新版 |
Skill 运行时报Permission denied | 1.ls -l /Users/you/skills/core/file_io.py看文件权限2. whoami看当前用户 | 文件权限为600(仅属主可读),Agent 以其他用户运行 | chmod 644 /Users/you/skills/core/file_io.py,确保组和其他用户可读 |
| Git 提交后,Agent 仍用旧版 skill | 1.cd /Users/you/skills && git status看是否真的提交了2. cd /Applications/ClaudeCode.app/Contents/Resources && python -c "import skills.core; print(skills.core.__file__)"看加载路径 | 本地修改未git add/commit,或 Agent 缓存了旧模块 | git add . && git commit -m "fix";重启 Agent 清除 Python 缓存(或加-B参数强制重载) |
常见问题速查表:我们把这张表打印出来贴在显示器边框,新人遇到问题,对照表格 30 秒内找到第一步操作,极大降低心理压力。技术问题不可怕,可怕的是不知道从哪下手。
5. 进阶实践与未来扩展:让 Skill 库从“能用”走向“好用”“爱用”
5.1 技能市场雏形:用 Git Submodule 实现跨团队 Skill 共享
当你的团队扩大,不同小组负责不同领域(前端组写 UI skill,后端组写 API skill),可以引入 Git Submodule:
- 前端组维护
https://github.com/team/frontend-skills,专注skills/agents/claude/ui/; - 后端组维护
https://github.com/team/backend-skills,专注skills/core/api/; - 中央库
skills/作为父仓库,用git submodule add https://github.com/team/frontend-skills agents/claude/ui引入。
这样,前端组git push更新,你只需在中央库执行git submodule update --remote,就能拉取最新版,且 Git 记录清晰显示“agents/claude/ui更新至 commit abc123”。Submodule 让 Skill 库变成“乐高底板”,各团队在自己的模块上自由发挥,互不干扰。
5.2 自动化部署:用 GitHub Actions 实现 Skill 更新即 Agent 自动重启
我们配置了一个 GitHub Action,监听main分支的 push:
name: Deploy to Agents on: push: branches: [main] jobs: restart-agents: runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Restart Claude Code run: | osascript -e 'tell application "ClaudeCode" to quit' sleep 2 open -a "ClaudeCode" - name: Restart Codex run: | osascript -e 'tell application "Codex" to quit' sleep 2 open -a "Codex"每次你git push一个新 skill,5 秒后所有 Agent 自动重启,加载最新版。告别“改完代码,还得手动点开每个 App”的低效。
5.3 安全加固:为 Skill 库添加签名验证,杜绝恶意篡改
在企业环境中,必须防住“有人偷偷改了core/http_client.py,把 API Key 发送到外部服务器”。我们用 GPG 签名:
- 开发者用
gpg --sign skills/core/http_client.py生成http_client.py.gpg; - Agent 启动时,用
gpg --verify http_client.py.gpg http_client.py验证签名; - 若验证失败,Agent 拒绝加载该 skill,并告警。
这需要每个开发者生成 GPG 密钥并交换公钥,初期有门槛,但对金融、医疗等强监管行业,是必备项。
5.4 个人体会:这个方案改变了我的工作流本质
三年前,我花 40% 时间在“同步代码”和“调试路径错误”上;现在,这个比例降到 3%。最大的转变不是效率提升,而是心智负担的消失。以前看到一个新需求,第一反应是“这个 skill 要在几个 Agent 里重写?”;现在,第一反应是“这个逻辑应该放进core/还是agents/claude/?”——思考焦点从“怎么复制”彻底转向“怎么设计”。上周,我用 20 分钟写了一个新 skill:skills/agents/codex/azure_deploy.py,它调用skills/core/http_client.py和skills/core/logger.py,完成后,Claude Code 和 Hermes 通过软链接自动获得能力,我甚至没打开过这两个 App。这种“写一次,处处生效”的确定性,是任何框架文档都给不了的踏实感。如果你还在为 AI Agent 的碎片化能力头疼,不妨今晚就花 15 分钟,按本文第三步,搭起你的第一个中央 Skill 库。它不会让你立刻成为大神,但会把你从重复劳动的泥潭里,一把拽出来。