Skip to content

About

把一个项目目录锻造成规范项目:版本管理、远端仓库、文档套装、发布通道一次配到位。通用 skill,覆盖任意技术栈。

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

project-forge

English | 中文

stars license Node dependencies

project-forge:给一个项目目录,先只读勘察,再按事实决定做哪几件事。右侧是勘察脚本的一次真实输出

把一个项目目录弄成规范项目。给它一个目录,它先只读勘察,看清这个项目现在是什么样, 再自己判断这次该做哪几件事、跳过哪几件事。

不预设技术栈。Node、Python、Rust、Go、Java、纯文档目录,插件类项目,以及 skill 项目, 判断依据都是勘察出来的事实。

目录

它做什么

一个项目从「能跑」到「像个正经项目」,中间隔着一堆琐碎但容易出错的事:忽略规则写对了没、 产物该不该入库、提交署名配了没、README 里承诺的东西能不能兑现、发布流程会不会把密钥发出去。 每件都不难,加起来很多,而且做错往往很久以后才发现。

它把这几件事收敛成一条流程:

  • 版本管理:忽略规则、文本属性、提交署名、提交纪律、密钥扫描;
  • 文档套装:AGENTS.md、README、CONTRIBUTING、LICENSE,各写各的读者,互不复述;
  • 远端仓库:建仓库(默认私有)、推送、元数据、协作模板、持续集成;
  • 发布通道:能不能发、发到哪、版本号怎么算、怎么发才安全。

它只做治理,不生成项目本身:不替你选技术栈,也不创建源码和框架配置。治理跑在骨架就绪之后。

它怎么工作

project-forge 的工作链路:只读勘察、按事实判定、过硬门控、落盘推送发布

四步的顺序不能反。判定依据是勘察出来的事实,不是预设的清单,所以它不会给纯文档目录配发布流程, 也不会重建一个已经有远端的仓库。「不发布」和「跳过某件事」都是正常结果,不是失败。

开始之前

Node.js 16 或更高,不需要先装任何东西。日常用到的脚本都在这个下限上(持续集成跑 Node 22,开发机跑 Node 24;16 到 21 没有逐版实测,遇到问题欢迎提 Issue)。

唯一的例外是发布相关的两个脚本(release-notes.mjs 与 check-badges.mjs): 它们用的是 Node 18 才有的全局 fetch,跑它们需要 Node 18 或更高。它们只在维护这个 skill 本身时才用得上,平时用它治理项目碰不到。

git 可选:没有它,勘察与文档相关的功能照常,它会如实报告「git 不可用」;需要它的是 版本管理的建立与维护、远端仓库、推送与发布这几件事。

安装

下载压缩包,不需要 git:

点这里下载最新版

解压到你的 skill 根,目录名保持 project-forge。就这一步。

两种装法对照:下载压缩包会自己保持最新;克隆仓库不会自动更新

想改它,或者想跟着每一次改动走,就用克隆:

git clone https://github.com/FiretrUCK666/project-forge.git "<你的 skill 根>/project-forge"

两种装法的区别只有一条:克隆下来的那份不会自己更新。目录里有 .git 说明它是拿来改的, 工具对它只读。改法见 CONTRIBUTING.md。

发布页上的 Source code 也能用。 那是 GitHub 自动生成的源码包,里面的文件与安装包 逐字相同,两个都能装,装上都会自己保持最新。安装包是专门为安装打的,推荐用它。

放在哪里

放进你所用宿主的用户级 skill 根。已经装过别的 skill 就放到它们所在的目录,一个都没有就查 该宿主的文档。目录名保持 project-forge,它必须与 SKILL.md 里 frontmatter 的 name 一致; 区分大小写的系统上,大小写不同就是另一个目录。

放好不需要注册或重启:宿主按目录发现,SKILL.md 就是入口。

更新

它怎么保持最新:每次用比一次版本,有新版就整份换掉,同一份副本 24 小时内最多换一次

下载装的那份会自己保持最新,你不用做任何事。每次用它时它安静地比一次版本号:是同一版就结束、 什么都不做,有新版本就整份换成新版,并告诉你从哪一版换到了哪一版。

同一份副本 24 小时内最多换一次文件,不会一天变好几回。想自己看一眼状态(只报告,不更新):

node "<本领目录>/scripts/update.mjs" --check

它去哪儿问新版,取决于那份副本自己记的地址(装的时候就在包里)。读不到时用内置的兜底地址, 自建镜像或内网发布可以把兜底改掉:设一个环境变量 PF_UPDATE_SOURCE(只在副本没记地址时生效)。

使用

直接用自然语言说需求就行:

  • 版本管理:弄版本管理、配 git、上仓库、推到 GitHub
  • 文档:写 AGENTS.md、写 README、配 LICENSE、写贡献指南
  • 发布:发到 npm、发布、配 CI
  • 笼统:初始化项目、项目起步、新项目配置、标准化项目、整理项目
帮我规范这个项目
给 D:\work\my-tool 配上版本管理和文档
这个项目要不要发到 npm

它不会一上来就动手。第一步永远是勘察,然后告诉你:这个项目现在是什么状态、准备做哪几件事、 以及为什么跳过另外几件。

它不会做的事

  • 不创建项目本身:不选技术栈、不生成骨架,那是脚手架的事;
  • 不改代码逻辑,只做版本管理、远端、文档、发布这几件事;
  • 不替你决定许可证,只给判据和选项;
  • 不擅自把仓库设为公开(默认私有);
  • 不强制推送、不改写已推送的历史、不删除已发布的版本;
  • 不做部署和服务器配置。

里面有什么

用户包里有

路径 内容
SKILL.md 入口:硬不变量、能力矩阵、执行流程、硬门控
references/survey.md 勘察协议:读什么、字段什么含义、事实怎么翻译成动作
references/version-control.md 版本管理全线:产物该不该入库、忽略规则、署名、提交纪律、回滚分档、密钥门控
references/remote-github.md 远端仓库:通道发现、建仓、推送、元数据、版本节点与发布说明、协作模板、CI
references/docs-set.md 文档套装:各文档的读者是谁、职责、写法与同步纪律
references/publish.md、references/publish-npm.md、references/publish-python.md、references/publish-go.md、references/publish-rust.md 发布总纲与各生态专章:能不能发、发到哪、版本号语义、安全发布、各种既有状态怎么接
references/plugin-project.md、references/skill-project.md、references/plugins/ 插件类与 skill 类项目的判定协议,以及各生态的专章
templates/agents-project.md、templates/readme.md、templates/contributing.md 三份可直接落盘的文档骨架(项目契约、说明、贡献指南)
templates/agents-kernel.md 行事总纲内核(逐字注入 AGENTS.md,单一真相源)
templates/ci-check.yml、templates/ci-release.yml 两份持续集成骨架:检查与发布
templates/license-mit.txt、templates/license-isc.txt、templates/license-unlicense.txt 三份宽松许可证的标准全文(MIT、ISC、Unlicense)
templates/license-bsd-2-clause.txt、templates/license-bsd-3-clause.txt 两份 BSD 许可证的标准全文(二条款、三条款)
scripts/update.mjs 让这个副本保持最新(见「更新」)
scripts/survey.mjs 只读勘察,输出结构化事实;也放全项目共用的文本判据
scripts/zip.mjs 解开 zip 包:自更新要读得动下载回来的那份
scripts/compose-agents.mjs 生成、刷新或升级 AGENTS.md
scripts/review.mjs P4/P5 交付门禁:没有缺项、待定事项用选项消掉才算写完
scripts/release-notes.mjs、scripts/draft-release-notes.mjs 用 UTF-8 文件写发布说明,中文不经 shell;并从提交记录起草中文稿
scripts/check-badges.mjs 检查 README 里的徽章是不是真的显示得出来
scripts/sync-toc.mjs 让 Markdown 的目录与标题保持同步
README.md、README.en.md、LICENSE、assets/readme/ 你正在看的这份说明(中英成对,中文是权威版)、许可证全文、README 里的卡片

仓库里另有

这些不进压缩包。想改这个 skill 的话,从 CONTRIBUTING.md 开始。

路径 内容
AGENTS.md 这个仓库自己的项目契约:机制、不变量、构建与验证、硬性规范
CONTRIBUTING.md 给外部贡献者的流程:怎么提问、怎么提改动、提交前门禁
.github/ 持续集成与协作模板(工作流、Issue 与拉取请求模板)
.gitattributes、.gitignore 哪些不进用户包、哪些不进版本库
scripts/dev/preflight.mjs 结构自检:引用完整、内核一致、硬性规范、用户包边界
scripts/dev/selftest.mjs 行为自检:造 fixture 实跑,断言每条判定
scripts/dev/render-svg.mjs 把 README 的卡片渲染成图并量出留白,改卡片时用它验收

脚本

全部脚本只用运行环境内置的模块,零依赖,跨平台。

# 让这个副本保持最新(--check 只报告不更新)
node <本领目录>/scripts/update.mjs --quiet

# 勘察一个项目(只读,不写任何文件)
node <本领目录>/scripts/survey.mjs <项目目录> --markdown

# 生成、刷新或升级项目的 AGENTS.md
node <本领目录>/scripts/compose-agents.mjs <项目目录>
node <本领目录>/scripts/compose-agents.mjs <项目目录> --status    # 只看现状,不写入
node <本领目录>/scripts/compose-agents.mjs <项目目录> --upgrade   # 把手写的升级成标准结构

# 自检这个 skill 自身(只在改它的时候跑)
node <本领目录>/scripts/dev/preflight.mjs
node <本领目录>/scripts/dev/selftest.mjs

<本领目录> 是这个 skill 所在的位置,<项目目录> 是你要处理的那个项目,两者通常不是同一个目录。

这个仓库自己是怎么配的

这个 skill 是自己的第一个用户:它的版本管理、文档与持续集成,都是按它自己的标准配的。 如果它教的东西是错的,它自己的仓库会先出问题。具体见 AGENTS.md。

本文件是中文权威版,README.en.md 是英文译本,两者不一致时以本文件为准。

遇到问题

到 Issues 提出。为方便定位,请附上:

  • 你的操作系统与 Node 版本;
  • 你运行的完整命令;
  • 完整的报错原文(不是描述现象);
  • 如果与某个具体项目有关,那个项目的技术栈与大致目录结构。

贡献

见 CONTRIBUTING.md。

许可

MIT

About

把一个项目目录锻造成规范项目:版本管理、远端仓库、文档套装、发布通道一次配到位。通用 skill,覆盖任意技术栈。

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages