dependency-reuse-first
依赖复用优先开发规范
在实现新功能前,先做一次可复用依赖调研。只有在现成方案不合适时才自研。目标是减少重复造轮子、降低维护成本,并让实现建立在当前生态已经验证过的能力之上。
核心原则
- 先查现成方案,再写自定义实现。
- 优先级默认是:标准库或平台内置能力 -> 官方 SDK -> 仓库里已存在的依赖或内部包 -> 主流社区库 -> 自研。
- 不要凭记忆断言某个包“很流行”或“没人维护”;需要用当前注册表、官方文档、源码仓库和发布记录验证。
- 自定义代码只保留在业务差异化部分、适配层或确实没有合适现成方案的场景里。
标准流程
-
拆清需求边界。
- 写清目标能力、输入输出、运行环境、性能约束、安全和合规要求、是否允许新增依赖。
- 区分哪些是通用基础能力,哪些才是业务独特逻辑。
-
枚举候选复用路径。
- 先看标准库、框架内置能力和云平台原生能力。
- 再看项目当前已经安装的依赖、monorepo 内部包、团队已有基础设施。
- 再查当前生态里的官方 SDK 与主流社区包。
- 尽量形成 2 到 5 个候选;如果一个都找不到,再说明为什么需要自研。
-
用统一标准筛选候选。
- 评估采用度:下载量、依赖方数量、GitHub 活跃度、文档和社区讨论热度。
- 评估维护度:最近发布时间、变更日志、issue/PR 活跃度、维护者是否稳定。
- 评估兼容性:语言和运行时版本、框架版本、模块系统、浏览器或服务端环境、类型支持、打包体积、原生依赖。
- 评估风险:许可证、已知安全问题、传递依赖复杂度、API 稳定性、锁定风险。
- 评估集成成本:学习成本、迁移成本、适配工作量、是否需要大面积侵入现有代码。
-
做出依赖还是自研的决策。
- 优先选择满足需求的最小可行依赖,不要因为功能“大而全”就默认引入重型方案。
- 如果多个候选都可用,优先选择文档清晰、社区稳定、与当前栈兼容性更好的方案。
- 如果决定自研,明确写出放弃现成依赖的原因,不要只写“更灵活”或“更可控”这种空话。
-
以可替换方式落地。
- 把第三方依赖隔离在薄适配层后面,不要把外部 API 直接散落到整个代码库。
- 遵循仓库现有的包管理、版本声明和锁文件规范。
- 为适配层和关键集成路径补测试,验证最小成功路径和主要失败路径。
-
在编码前给出简短结论。
- 说明推荐采用的依赖或平台能力。
- 说明至少一个备选方案以及不选它的原因。
- 说明哪些部分复用依赖,哪些部分仍然需要自己实现。
允许自研的常见条件
- 没有活跃维护且兼容当前栈的现成方案。
- 现成方案的许可证、安全要求或合规要求不满足约束。
- 引入依赖的体积、复杂度或运行时开销明显高于收益。
- 需求本身是业务核心差异化能力,通用库只能覆盖很小一部分。
- 平台原生能力加一层很薄的封装就足够,没有必要再加第三方依赖。
避免的反模式
- 不要因为“实现起来很快”就忽略依赖调研。
- 不要在没有对比现有依赖的情况下再引入同类库,导致能力重叠。
- 不要只看 star 数;长期不发版、issue 堆积或兼容性差的包同样不应引入。
- 不要把短期 PoC 用的实验性依赖直接扩散到正式实现里。
- 不要把“以后也许用得到”当作引入大型依赖的理由。
默认输出格式
在开始编码前,先给出一个简短结论,至少覆盖以下内容:
- 需求拆解:哪些是通用能力,哪些是业务逻辑。
- 候选依赖:列出 2 到 5 个方案。
- 推荐方案:说明为什么选它。
- 放弃理由:说明为什么不选其他方案或为什么最终自研。
- 落地边界:哪些代码交给依赖,哪些代码自己写。
生态补充检查
按当前语言或平台读取 references/ecosystem-sources.md,再补充对应生态的检查点与资料来源。
More from why8023/agent-skills
python-use
定义 Python 环境管理和依赖管理的强制规范。当 Agent 需要使用 Python、创建虚拟环境、安装依赖、管理 Python 版本时必须应用此技能。强制使用 uv 工具,禁止 pip/conda,确保项目级环境隔离。
11nodejs-use
定义 Node.js 环境管理和版本管理的强制规范。当 Agent 需要使用 Node.js、管理 Node 版本、安装 JavaScript 依赖、处理 packageManager 或 Corepack、编写或读取 mise.toml / .mise.toml / .tool-versions,或将旧项目从 volta、fnm、.node-version、.nvmrc 迁移到 mise 时必须应用此技能。强制使用 mise 管理 Node.js 运行时,禁止手动安装 Node.js,确保项目级环境隔离。
10git-repo-normalize
Standardize Git repository line-ending handling before any Git-related work. Use whenever Codex is about to operate on a Git repo, including version bumps, releases, commits, tags, diffs, CI workflow edits, or investigation of LF/CRLF warnings. On the first handling of a repo, add or reconcile the root .gitattributes rule `* text=auto eol=lf`, renormalize tracked files, review the diff, and complete this normalization before continuing with other repo work.
8skill-authoring-sync
在 `why8023/agent-skills` 中央 skills 仓库中新增、更新或重命名一个 skill,并在完成后把该 skill 安装到某个业务项目根目录时使用。适用于“新建一个 skill”“把 skill 沉淀到中央仓库”“把中央 skill 安装到当前项目”“更新项目里已安装的某个中央 skill”等请求。覆盖 `skills/skill-name/` 目录创建、`SKILL.md` 与 `agents/openai.yaml` 编写、最小验证、按目标 skill 单独提交并 push,以及在目标项目中通过 `npx skills add why8023/agent-skills --skill skill-name` 做项目级安装或刷新。
4docling-word
使用 Docling CLI 解析 `.docx` Word 文件并导出 Markdown,同时把提取出的图片等附件统一整理到 Markdown 同级的 `attachments/` 目录。用于用户要求用 Docling 转 Word、要求通过 `uv tool install` 安装 Docling、或要求修正 Docling 附件路径与目录结构时。
2skill-sync
在 skills 仓库中创建、更新或重命名一个 skill,并在编辑完成后只提交本次相关 skill 变更、推送到远端仓库,再用 `npx skills` 从远端仓库将目标 skill 安装或更新到本机多 Agent 环境。默认同步 Universal、Codex、Claude Code、OpenClaw、Cursor、OpenCode、Qoder、Trae、Trae CN、Windsurf,并约定用 `--all` 表示“全部 skill + 全部受支持 agent”。
2