个人 Claude Code 基础设施的发布面:其他项目和设备从这里安装 skill、
rule、模板。资产内容由开发仓(~/code/infra-agent/iforge)构建验证后经
iforge publish 落位,人审 diff 后提交——本仓不直接编辑资产,改动一律回
开发仓。使用端 CLI ifit 是本仓自有代码,住 tools/(pnpm monorepo)。
-
skills.json— 全部 skill 的清单,source字段区分来源:custom— 自建,放在skills/<name>/mirror— 用 giget 从上游仓库拉取,放在skills/<name>/,记录 commitofficial— 符合 skills.sh 标准的上游 skill,只记 repo,不放进本仓
清单记录的是目标态,允许比实际超前。溯源分两层:
refUrl参考来源 + 实际来源(repo 或install)。专题见SKILLS.md。 -
catalog.json— 资产查询视图(描述/preference/profile 隶属),供ifit list/show消费 -
profiles.json— rule 组合账:{ layers, profiles },profile 由层叠加 + 直引 rules 展开(ifit profiles列出的即展开结果) -
rules/— 可分发 rule 产物,产物即安装形态:file-scoped 规则自带pathsfrontmatter,ifit原样拷贝,不做安装时渲染(ifit cat <name>即产物原文) -
templates/— 新项目模板:claude-md.md与architecture.md含占位符,分发时按目标项目实例化;settings.json是最终形态,整份拷贝 -
schema/— 数据契约:catalog/profiles 两份 JSON Schema(发布副本,SSoT 在开发仓packages/meta-cli/schema/)。ifit据此生成契约类型(包内pnpm codegen)并在加载数据时做 ajv 运行时校验 -
tools/ifit/— 使用端 CLI/TUI(bin:ifit):查询、 拼装、对账更新。本仓自有代码,不经 publish,与开发仓无包依赖——两个 CLI 只通过上面的 schema 契约耦合 -
docs/mcp/— MCP server 说明
维护端(map/topic、构建契约、iforge 源码)在开发仓 ~/code/infra-agent/iforge,
不要在此修改经 publish 落位的内容。tools/、docs/mcp/、.claude/ 与
.mcp.json(自用配置)是本仓自有,不分发;设计文档统一在工作区根 ../docs/。
# skill:仓内持有的(custom + mirror)
pnpx skills add oNo500/ifit -s <name>
pnpx skills add oNo500/ifit --all
# skill:official 类直接装上游
pnpx skills add <owner>/<repo> -s <name>
# 规则与模板:使用端 CLI(本仓 tools/ifit;全局命令用直接符号链接,
# 因 pnpm 多包 link --global 会互清 binstub,见 .claude/CLAUDE.md)
ifit # TTY 裸跑进 TUI:主菜单 → 浏览/初始化/对账/更新(交互式唯一入口)
ifit list [--grep <kw>] # 查询资产:描述、安装状态(已初始化目标附状态列)
ifit show <name> # 单条资产元数据 + 产物全文
ifit cat <name> # 输出产物原文(安装形态,可重定向落盘)
ifit profiles # 列出可选 profile 及其 rules
ifit init --profile <name> <project> # 按预设组合初始化(--dry-run 预演;--exclude 排除个别)
ifit init --rules a,b,c <project> # 不经 profile 直选拼装(查询完自选)
ifit status <project> # 下游对账:synced / modified / outdated / missing / available / excluded
ifit diff [--rule <name>] <project> # 本地副本 vs 中心源差异
ifit update <project> # 拉中心源新版(本地被改的默认跳过,--force 覆盖)
ifit update --add x --remove y <project> # 显式增装(含回补排除)/ 移除(删副本并记入排除)
# 子命令面 100% 命令式(AI/脚本稳定契约),全命令支持 --json(载荷形状按命令有差异)Important
ifit init 的落位分两类,其中一类要起 claude 进程:
- 直接复制(纯文件操作):
rules/下的 rule 原样拷进.claude/rules/、templates/settings.json拷成.claude/settings.json、.claude/ifit.lock.json由 CLI 生成 - AI 实例化(headless claude):只有
.claude/rules/architecture.md与.claude/CLAUDE.md两份——模板含[ALL_CAPS]占位符,要读目标项目 真实结构才能填
所以 init 需要环境里有可用的 claude,缺了会失败而非降级。claude 只写
.ifit-staging/,落位由 CLI 完成(.claude/** 是权限敏感路径,headless
放行不了直写);任一模板失败即回滚本轮落位,暂存目录连事件日志保留供排错。
本仓收到 publish 提交并 push 后,其他设备 git pull 再 ifit update
各项目,skill 用 pnpx skills update 更新。