@geminix/gxpm 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +148 -0
- package/CANON.md +53 -0
- package/CLAUDE.md +60 -0
- package/CONTEXT.md +49 -0
- package/DEBUG.md +59 -0
- package/ISSUE_CONTEXT.md +25 -0
- package/README.md +143 -0
- package/VERSION +1 -0
- package/agents/cleanup-auditor/cleanup-auditor.md +56 -0
- package/agents/grill-master.md +26 -0
- package/agents/implementer.md +32 -0
- package/agents/review-army/accessibility-reviewer.md +54 -0
- package/agents/review-army/code-quality-reviewer.md +54 -0
- package/agents/review-army/security-reviewer.md +56 -0
- package/agents/review-army/spec-compliance-reviewer.md +51 -0
- package/agents/review-army/test-reviewer.md +55 -0
- package/agents/reviewer.md +59 -0
- package/agents/ship-audit-army/docs-auditor.md +53 -0
- package/agents/ship-audit-army/performance-auditor.md +52 -0
- package/agents/ship-audit-army/security-auditor.md +52 -0
- package/agents/specifier.md +55 -0
- package/agents/triage-officer.md +27 -0
- package/bin/gxpm +17 -0
- package/bin/gxpm-browser +17 -0
- package/bin/gxpm-config +15 -0
- package/bin/gxpm-eval +13 -0
- package/bin/gxpm-global-discover +15 -0
- package/bin/gxpm-init +38 -0
- package/bin/gxpm-investigate +194 -0
- package/bin/gxpm-uninstall +15 -0
- package/bin/gxpm-update-check +165 -0
- package/commands/build.md +40 -0
- package/commands/help.md +53 -0
- package/commands/plan.md +34 -0
- package/commands/refine.md +46 -0
- package/commands/review.md +34 -0
- package/commands/ship.md +37 -0
- package/core/ac-check.ts +20 -0
- package/core/agent-runtime.ts +363 -0
- package/core/artifact-validator.ts +151 -0
- package/core/artifacts.ts +313 -0
- package/core/autopilot.ts +250 -0
- package/core/capabilities.ts +779 -0
- package/core/checkpoint.ts +370 -0
- package/core/cleanup.ts +32 -0
- package/core/command-probe.ts +82 -0
- package/core/config.ts +533 -0
- package/core/contracts/behavior-spec.schema.ts +38 -0
- package/core/contracts/converter.ts +61 -0
- package/core/contracts/host.ts +43 -0
- package/core/converters/converter.ts +93 -0
- package/core/converters/index.ts +8 -0
- package/core/converters/managed-artifact.ts +119 -0
- package/core/converters/parser.ts +159 -0
- package/core/converters/template-renderer.ts +35 -0
- package/core/converters/writer.ts +61 -0
- package/core/dag-executor.ts +426 -0
- package/core/dag-loader.ts +292 -0
- package/core/dag-schemas.ts +150 -0
- package/core/dispatch.ts +125 -0
- package/core/evidence.ts +148 -0
- package/core/gate.ts +269 -0
- package/core/hook-engine.ts +566 -0
- package/core/host-probe.ts +64 -0
- package/core/implement.ts +16 -0
- package/core/isolation-errors.ts +174 -0
- package/core/isolation-resolver.ts +921 -0
- package/core/issue-context.ts +381 -0
- package/core/issue-readiness.ts +457 -0
- package/core/issue-sync.ts +427 -0
- package/core/issues.ts +132 -0
- package/core/land.ts +108 -0
- package/core/orchestrator.ts +54 -0
- package/core/phase-artifact.ts +32 -0
- package/core/phase-gates.ts +130 -0
- package/core/phase-rewind.ts +94 -0
- package/core/plan-lint.ts +61 -0
- package/core/plan.ts +77 -0
- package/core/port-allocation.ts +50 -0
- package/core/pr-check.ts +15 -0
- package/core/preset-system/preset-resolver.ts +221 -0
- package/core/project-init-status.ts +127 -0
- package/core/qa.ts +15 -0
- package/core/resilience.ts +165 -0
- package/core/runs.ts +288 -0
- package/core/safe-path.test.ts +80 -0
- package/core/safe-path.ts +60 -0
- package/core/sdd-gate.test.ts +98 -0
- package/core/sdd-gate.ts +134 -0
- package/core/self-review.ts +62 -0
- package/core/session.ts +70 -0
- package/core/ship.ts +86 -0
- package/core/specify.ts +173 -0
- package/core/state.ts +1002 -0
- package/core/template-engine.ts +152 -0
- package/core/template-resolver.test.ts +70 -0
- package/core/template-resolver.ts +156 -0
- package/core/triage.ts +26 -0
- package/core/verify.ts +15 -0
- package/core/wiki-native.ts +2423 -0
- package/core/wiki.ts +27 -0
- package/core/workflow-event-emitter.ts +163 -0
- package/core/workflows/engine.ts +273 -0
- package/core/workflows/expressions.ts +76 -0
- package/core/workflows/index.ts +38 -0
- package/core/workflows/steps/command.ts +43 -0
- package/core/workflows/steps/gate.ts +47 -0
- package/core/workflows/steps/gxpm.ts +44 -0
- package/core/workflows/steps/linear.ts +31 -0
- package/core/workflows/steps/shell.ts +65 -0
- package/core/workflows/types.ts +62 -0
- package/core/workspace-runtime.ts +227 -0
- package/core/worktree-init-steps.ts +647 -0
- package/core/worktree-init.ts +330 -0
- package/core/worktree-owner.ts +143 -0
- package/docs/GXPM_VERIFY.md +98 -0
- package/docs/INSTALL_FOR_AGENTS.md +113 -0
- package/docs/README.md +57 -0
- package/docs/adr/adr-005-multi-platform-skill-converter.md +72 -0
- package/docs/agents/domain.md +30 -0
- package/docs/agents/issue-tracker.md +30 -0
- package/docs/agents/triage-labels.md +32 -0
- package/docs/architecture/gxpm-architecture-diagram.md +265 -0
- package/docs/architecture/gxpm-current-architecture.md +175 -0
- package/docs/architecture/gxpm-current-flow.md +278 -0
- package/docs/architecture/gxpm-replacement-architecture.md +211 -0
- package/docs/architecture/gxpm-target-architecture.md +449 -0
- package/docs/architecture/gxpm-v0-contract.md +311 -0
- package/docs/architecture/layered-workflow-boundaries.md +193 -0
- package/docs/architecture/preset-system.md +126 -0
- package/docs/architecture/scaffold-northstar.md +23 -0
- package/docs/brainstorms/2026-05-14-bdd-then-tdd-design.md +320 -0
- package/docs/brainstorms/README.md +22 -0
- package/docs/brainstorms/docs-knowledge-system-requirements.md +29 -0
- package/docs/governance/beta-skill-promotion.md +39 -0
- package/docs/governance/development-contract.md +144 -0
- package/docs/governance/gherkin-style.md +90 -0
- package/docs/governance/host-adapter.md +56 -0
- package/docs/governance/skill-authoring.md +87 -0
- package/docs/governance/skill-testing.md +356 -0
- package/docs/governance/template-authoring.md +53 -0
- package/docs/migrations/v0.2.md +51 -0
- package/docs/plans/README.md +23 -0
- package/docs/plans/bdd-then-tdd-plan.md +1767 -0
- package/docs/plans/docs-knowledge-system-plan.md +31 -0
- package/docs/plans/spec-kit-sdd-adoption-plan.md +305 -0
- package/docs/research/agents-md-best-practices.md +207 -0
- package/docs/research/archon-study.md +351 -0
- package/docs/research/claude-hooks-study.md +440 -0
- package/docs/research/codex-hooks-study.md +624 -0
- package/docs/research/everything-claude-code-study.md +252 -0
- package/docs/research/from-skills-to-layered-workflow.md +322 -0
- package/docs/research/gsd-study.md +69 -0
- package/docs/research/kimi-hooks-study.md +274 -0
- package/docs/research/mattpocock-skills-comparison.md +429 -0
- package/docs/research/mattpocock-skills-study.md +275 -0
- package/docs/research/oh-my-codex-study.md +279 -0
- package/docs/research/perplexity-agent-skills-design.md +168 -0
- package/docs/research/pmc-gstack-skill-study.md +122 -0
- package/docs/research/spec-kit-study.md +224 -0
- package/docs/research/superpowers-study.md +209 -0
- package/docs/roadmap/initial-roadmap.md +53 -0
- package/docs/solutions/README.md +45 -0
- package/docs/solutions/artifact-nesting-recovery.md +58 -0
- package/docs/solutions/session-context-restore-practice.md +67 -0
- package/docs/solutions/workflow/version-drift-recovery.md +49 -0
- package/docs/solutions/worktree-gate-recovery.md +62 -0
- package/docs/specs/README.md +28 -0
- package/docs/specs/claude.md +45 -0
- package/docs/specs/codex.md +44 -0
- package/docs/specs/cursor.md +44 -0
- package/hosts/adapters/claude.ts +29 -0
- package/hosts/adapters/codex.ts +27 -0
- package/hosts/adapters/cursor.ts +27 -0
- package/hosts/adapters/kimi.ts +27 -0
- package/hosts/claude.ts +23 -0
- package/hosts/codex.ts +26 -0
- package/hosts/cursor.ts +19 -0
- package/hosts/index.ts +33 -0
- package/hosts/registry.test.ts +52 -0
- package/hosts/registry.ts +57 -0
- package/hosts/schema.ts +58 -0
- package/package.json +52 -0
- package/scripts/browser.ts +185 -0
- package/scripts/cleanup.ts +142 -0
- package/scripts/commands/artifact.ts +115 -0
- package/scripts/commands/autopilot.ts +143 -0
- package/scripts/commands/capability.ts +57 -0
- package/scripts/commands/config.ts +69 -0
- package/scripts/commands/dag.ts +126 -0
- package/scripts/commands/feedback.ts +123 -0
- package/scripts/commands/gate.ts +291 -0
- package/scripts/commands/helpers.ts +126 -0
- package/scripts/commands/hook.ts +66 -0
- package/scripts/commands/init.ts +515 -0
- package/scripts/commands/issue.ts +825 -0
- package/scripts/commands/phase.ts +61 -0
- package/scripts/commands/preset.ts +159 -0
- package/scripts/commands/runtime.ts +199 -0
- package/scripts/commands/specify.ts +71 -0
- package/scripts/commands/upgrade.ts +243 -0
- package/scripts/commands/verify.ts +183 -0
- package/scripts/commands/wiki.ts +242 -0
- package/scripts/commands/workflow.ts +131 -0
- package/scripts/dev-skill.ts +55 -0
- package/scripts/discover-skills.ts +116 -0
- package/scripts/doctor.ts +410 -0
- package/scripts/dogfood-check.ts +125 -0
- package/scripts/eval-functional.ts +218 -0
- package/scripts/eval.ts +246 -0
- package/scripts/gen-skill-docs.ts +201 -0
- package/scripts/global-discover.ts +217 -0
- package/scripts/governance-check.ts +75 -0
- package/scripts/gxpm-check.ts +12 -0
- package/scripts/gxpm.ts +216 -0
- package/scripts/host-config.ts +62 -0
- package/scripts/install-claude-hooks.ts +138 -0
- package/scripts/install-codex-hooks.ts +271 -0
- package/scripts/install-hooks.ts +128 -0
- package/scripts/install-kimi-hooks.ts +92 -0
- package/scripts/install-skill.ts +184 -0
- package/scripts/phase-artifact-commands.ts +100 -0
- package/scripts/post-land-sync.ts +46 -0
- package/scripts/scaffold-check.ts +85 -0
- package/scripts/skill-naming-check.ts +78 -0
- package/scripts/skill-structure-check.ts +157 -0
- package/scripts/skills-lock-check.ts +60 -0
- package/scripts/sync-markdown-artifacts.ts +172 -0
- package/scripts/uninstall.ts +162 -0
- package/scripts/version.ts +47 -0
- package/scripts/wait-pr-ready.ts +407 -0
- package/skills/gxpm/SKILL.md +485 -0
- package/skills/gxpm/SKILL.md.tmpl +422 -0
- package/skills/gxpm/references/CANON.md +53 -0
- package/skills/gxpm/references/key-rules.md +130 -0
- package/skills/gxpm-architecture/SKILL.md +106 -0
- package/skills/gxpm-architecture/references/DEEPENING.md +37 -0
- package/skills/gxpm-architecture/references/INTERFACE-DESIGN.md +44 -0
- package/skills/gxpm-autopilot/SKILL.md +116 -0
- package/skills/gxpm-autopilot/SKILL.md.tmpl +107 -0
- package/skills/gxpm-browser/SKILL.md +105 -0
- package/skills/gxpm-browser/SKILL.md.tmpl +41 -0
- package/skills/gxpm-browser/references/commands.md +43 -0
- package/skills/gxpm-browser/references/evidence-path.md +20 -0
- package/skills/gxpm-build/SKILL.md +78 -0
- package/skills/gxpm-cleanup/SKILL.md +76 -0
- package/skills/gxpm-debug-issue/SKILL.md +39 -0
- package/skills/gxpm-diagnose/SKILL.md +220 -0
- package/skills/gxpm-diagnose/SKILL.md.tmpl +31 -0
- package/skills/gxpm-diagnose/references/feedback-loop.md +34 -0
- package/skills/gxpm-diagnose/references/feedback-loops.md +43 -0
- package/skills/gxpm-diagnose/references/phases.md +60 -0
- package/skills/gxpm-eval/SKILL.md +78 -0
- package/skills/gxpm-explore-codebase/SKILL.md +36 -0
- package/skills/gxpm-explore-codebase/scripts/summarize-communities.ts +51 -0
- package/skills/gxpm-feedback/SKILL.md +122 -0
- package/skills/gxpm-grill/SKILL.md +159 -0
- package/skills/gxpm-grill/SKILL.md.tmpl +77 -0
- package/skills/gxpm-grill/references/documentation-templates.md +56 -0
- package/skills/gxpm-grill/references/process.md +25 -0
- package/skills/gxpm-handoff/SKILL.md +112 -0
- package/skills/gxpm-hygiene/SKILL.md +69 -0
- package/skills/gxpm-implementer/SKILL.md +142 -0
- package/skills/gxpm-implementer/SKILL.md.tmpl +141 -0
- package/skills/gxpm-linear/SKILL.md +282 -0
- package/skills/gxpm-linear/SKILL.md.tmpl +86 -0
- package/skills/gxpm-linear/references/commands.md +75 -0
- package/skills/gxpm-linear/references/workflows.md +120 -0
- package/skills/gxpm-planning/SKILL.md +134 -0
- package/skills/gxpm-prototype/SKILL.md +64 -0
- package/skills/gxpm-refactor-safely/SKILL.md +62 -0
- package/skills/gxpm-review-army/SKILL.md +117 -0
- package/skills/gxpm-review-changes/SKILL.md +36 -0
- package/skills/gxpm-setup/SKILL.md +101 -0
- package/skills/gxpm-specifier/SKILL.md +135 -0
- package/skills/gxpm-tdd/SKILL.md +187 -0
- package/skills/gxpm-tdd/references/interface-design.md +23 -0
- package/skills/gxpm-tdd/references/mocking.md +27 -0
- package/skills/gxpm-tdd/references/red-green-refactor.md +61 -0
- package/skills/gxpm-tdd/references/troubleshooting.md +28 -0
- package/skills/gxpm-tdd/references/workflow.md +50 -0
- package/skills/gxpm-tdd/testing-anti-patterns.tmpl +304 -0
- package/skills/gxpm-triage/SKILL.md +160 -0
- package/skills/gxpm-verify/SKILL.md +107 -0
- package/skills/gxpm-write-skill/SKILL.md +131 -0
- package/skills/gxpm-zoom-out/SKILL.md +69 -0
- package/skills/maintain-hygiene-skills-lock/SKILL.md +54 -0
- package/skills/maintain-hygiene-skills-lock/SKILL.md.tmpl +53 -0
- package/templates/constitution-template.md +63 -0
- package/templates/hooks/gxpm-commit-msg +16 -0
- package/templates/hooks/gxpm-post-checkout +19 -0
- package/templates/hooks/gxpm-post-commit +7 -0
- package/templates/hooks/gxpm-post-merge +29 -0
- package/templates/hooks/gxpm-pre-commit +39 -0
- package/templates/hooks/gxpm-pre-push +33 -0
- package/templates/plan-template.md.tmpl +46 -0
- package/templates/spec-template.md.tmpl +63 -0
- package/templates/specify-stub.tmpl +22 -0
- package/templates/tasks-template.md.tmpl +32 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# docs/ 结构化知识沉淀体系实现计划
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
在 docs/ 下建立四个结构化子目录(brainstorms、plans、solutions、specs),定义分类约定、命名规范和 frontmatter 标准,并填充初始示例文档。
|
|
6
|
+
|
|
7
|
+
## 实施步骤
|
|
8
|
+
|
|
9
|
+
1. 创建 `docs/brainstorms/` 目录,添加 README.md 说明需求文档分类约定
|
|
10
|
+
2. 创建 `docs/plans/` 目录,添加 README.md 说明实现计划分类约定
|
|
11
|
+
3. 创建 `docs/solutions/` 目录,添加 README.md 说明最佳实践与恢复手册分类约定,定义 frontmatter 模板
|
|
12
|
+
4. 创建 `docs/specs/` 目录,添加 README.md 说明 host 平台规范镜像分类约定
|
|
13
|
+
5. 迁移现有 docs/ 子目录内容到对应分类,或在根目录保留并建立索引
|
|
14
|
+
6. 在 `docs/brainstorms/` 创建至少 1 份 `*-requirements.md` 示例
|
|
15
|
+
7. 在 `docs/plans/` 创建至少 1 份 `*-plan.md` 示例
|
|
16
|
+
8. 在 `docs/solutions/` 创建至少 3 份最佳实践/故障恢复手册(含完整 frontmatter)
|
|
17
|
+
9. 在 `docs/specs/` 创建 claude.md、codex.md、cursor.md 三份 host 规范镜像
|
|
18
|
+
10. 更新 docs/ 根目录 README.md 说明整体结构和导航
|
|
19
|
+
11. 运行 `bun run check` 验证无破坏
|
|
20
|
+
|
|
21
|
+
## 风险评估
|
|
22
|
+
|
|
23
|
+
- 现有 docs/ 子目录可能与新的分类体系冲突,需要明确是迁移还是并行保留
|
|
24
|
+
- frontmatter 标准过于严格可能导致后续维护负担
|
|
25
|
+
- docs/specs/ 的 host 规范镜像需要与 hosts/ 代码目录保持同步,存在漂移风险
|
|
26
|
+
|
|
27
|
+
## 验证方法
|
|
28
|
+
|
|
29
|
+
- 目录结构符合 acceptance-contract 7 条标准
|
|
30
|
+
- 所有 solutions/ 文档通过 frontmatter 完整性检查
|
|
31
|
+
- `bun run check` 通过
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
# gxpm 引入 Spec-Driven Development 能力实现计划
|
|
2
|
+
|
|
3
|
+
> 计划日期:2026-05-05
|
|
4
|
+
> 依据:`docs/research/spec-kit-study.md`
|
|
5
|
+
> 视角:技术架构师,聚焦架构约束与最小安全路径
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 一、概述
|
|
10
|
+
|
|
11
|
+
### 1.1 目标
|
|
12
|
+
|
|
13
|
+
将 Spec Kit 的 Spec-Driven Development (SDD) 核心能力内化为 gxpm 的第一方能力:
|
|
14
|
+
- **宿主适配注册表**:统一抽象 Claude、Codex、Cursor、Kimi 等宿主,消除硬编码适配
|
|
15
|
+
- **四层可扩展性栈**:建立 Override > Preset > Extension > Core 的模板/命令优先级解析机制
|
|
16
|
+
- **声明式工作流引擎**:将 gxpm 的 phase gate(triage→plan→dispatch→…→land)从硬编码升级为 YAML 声明式状态机
|
|
17
|
+
- **SDD 宪法嵌入**:将 Nine Articles 融入 gxpm 开发契约,建立规格优先的执行纪律
|
|
18
|
+
|
|
19
|
+
### 1.2 范围
|
|
20
|
+
|
|
21
|
+
| 在范围内 | 不在范围内(非目标) |
|
|
22
|
+
|---------|-------------------|
|
|
23
|
+
| 宿主抽象层重构(`hosts/` 目录) | 重写完整的 Python CLI(spec-kit 的 specify 命令) |
|
|
24
|
+
| 模板系统优先级栈(`skills/`、`templates/`) | 社区扩展市场与目录系统(catalog.community.json) |
|
|
25
|
+
| 工作流引擎最小 viable 实现(支持 gxpm phase) | 30+ 宿主的手写适配文件(用代码生成替代) |
|
|
26
|
+
| SDD 宪法与 artifact 合同融合 | 文件系统状态机的服务端化/协作化 |
|
|
27
|
+
| `*.tmpl` 多宿主渲染管道 | 扩展 ZIP 下载与版本兼容检查(复用现有包管理器) |
|
|
28
|
+
|
|
29
|
+
### 1.3 成功标准
|
|
30
|
+
|
|
31
|
+
1. 新增宿主时仅需修改/新增一个声明文件(类似 spec-kit 的集成子包),无需改动核心代码
|
|
32
|
+
2. skill 模板支持四层覆盖:项目本地 `.gxpm/local/` > 预设 > 扩展 > 核心 `skills/`
|
|
33
|
+
3. gxpm phase 推进可由 YAML 工作流定义驱动,支持暂停/恢复/人工 gate
|
|
34
|
+
4. 所有变更不破坏现有 `.gxpm/issues/` 状态机和 `bun test` 测试集
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 二、架构约束总览
|
|
39
|
+
|
|
40
|
+
### 2.1 从 spec-kit 继承的约束(必须遵守)
|
|
41
|
+
|
|
42
|
+
| 约束 | 说明 | gxpm 应对策略 |
|
|
43
|
+
|------|------|--------------|
|
|
44
|
+
| **模板运行时解析栈** | Override > Preset > Extension > Core 优先级不可绕过 | `TemplateResolver` 类严格按栈解析,单元测试覆盖优先级冲突 |
|
|
45
|
+
| **命令命名空间隔离** | 扩展命令必须遵循 `gxpm.{ext-id}.{cmd}`,不可 shadow core | `CapabilityRegistry` 注册时校验命名空间前缀 |
|
|
46
|
+
| **宿主 CLI Key 匹配** | `requires_cli=True` 时 `key` 必须等于可执行文件名 | `HostAdapter` 抽象中保留 `detect()` 方法,使用 `which` 语义 |
|
|
47
|
+
| **上下文文件标记** | 使用显式 START/END 标记管理代理目录注入段 | 沿用现有 `<!-- BEGIN GXPM -->` / `<!-- END GXPM -->` 标记规范 |
|
|
48
|
+
| **路径逃逸防护** | 所有文件写入必须校验目标路径在允许范围内 | 复用已有路径校验,提取为共享 `safe-path.ts` 工具 |
|
|
49
|
+
| **SDD 宪法 Article I-IX** | Library-First、CLI Mandate、Test-First、Simplicity Gate 等 | 写入 `docs/governance/development-contract.md`,作为 skill 生成的前置检查 |
|
|
50
|
+
|
|
51
|
+
### 2.2 从 spec-kit 规避的约束(主动打破)
|
|
52
|
+
|
|
53
|
+
| 约束 | spec-kit 现状 | gxpm 规避策略 |
|
|
54
|
+
|------|--------------|--------------|
|
|
55
|
+
| **同步 I/O 架构** | 全同步阻塞,fan-out 无法并行 | 工作流引擎基于 async/await 构建,步骤可标记 `parallel: true` |
|
|
56
|
+
| **单体 CLI 文件** | `__init__.py` 近 6,000 行 | 已是模块化 TypeScript,保持子命令按文件拆分 |
|
|
57
|
+
| **无数据库/纯文件状态** | 状态以 JSON 文件落盘 | 保留文件状态机作为默认,但接口抽象允许未来接入 SQLite/KV |
|
|
58
|
+
| **单项目隔离** | 产物严格落在 `.specify/` 下 | 支持用户级 `~/.gxpm/` 与项目级 `.gxpm/` 叠加 |
|
|
59
|
+
| **手写 30+ 宿主适配** | 每宿主一个子包,重复性声明 | 采用"协议 schema + 代码生成",宿主差异用 YAML 描述 |
|
|
60
|
+
|
|
61
|
+
### 2.3 gxpm 自身新增约束
|
|
62
|
+
|
|
63
|
+
| 约束 | 来源 | 说明 |
|
|
64
|
+
|------|------|------|
|
|
65
|
+
| **TypeScript 运行时** | 产品定位 | 所有核心引擎代码必须为 TypeScript,禁止引入 Python 运行时依赖 |
|
|
66
|
+
| **gxpm issue 状态机兼容** | 现有契约 | 工作流引擎的 step ID 必须能映射到现有 phase(triage/plan/dispatch/…) |
|
|
67
|
+
| **Commit 引用规范** | AGENTS.md | 任何代码改动必须关联 `GXPM-N` issue |
|
|
68
|
+
| **Worktree 隔离** | `.gxpm/config.json` | 实现阶段默认使用 git worktree,工程变更需在独立 worktree 验证 |
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 三、阶段化实施路线
|
|
73
|
+
|
|
74
|
+
### Phase 1:基础设施与约束层(预计 1 周)
|
|
75
|
+
|
|
76
|
+
**目标**:建立模板解析栈、路径安全、SDD 契约检查的基础设施。
|
|
77
|
+
|
|
78
|
+
**交付物**:
|
|
79
|
+
1. `core/template-resolver.ts` — 四层优先级模板解析器
|
|
80
|
+
- 接口:`resolve(templateName: string, context: RenderContext): string`
|
|
81
|
+
- 优先级栈:`local/ > presets/<id>/ > extensions/<id>/ > skills/`
|
|
82
|
+
- 支持策略:`replace`(默认)、`prepend`、`append`、`wrap`
|
|
83
|
+
2. `core/safe-path.ts` — 路径逃逸防护工具
|
|
84
|
+
- 提取现有路径校验逻辑,统一为 `ensureInside(target: string, allowedRoot: string): void`
|
|
85
|
+
- 替换 `agents.ts`、`extensions.ts`(如有)中的内联校验
|
|
86
|
+
3. `core/sdd-gate.ts` — SDD 宪法前置检查
|
|
87
|
+
- 实现 Nine Articles 的自动化检查(如:检测模块数是否超过 Simplicity Gate 阈值)
|
|
88
|
+
- 在 `bun run check` 中新增 `sdd-check` 子任务
|
|
89
|
+
4. `docs/governance/development-contract.md` 更新
|
|
90
|
+
- 新增"规格驱动开发"章节,融入 Nine Articles
|
|
91
|
+
|
|
92
|
+
**验收标准**:
|
|
93
|
+
- `bun test` 新增 `template-resolver.test.ts`、`safe-path.test.ts`、`sdd-gate.test.ts`,全部通过
|
|
94
|
+
- `bun run check` 包含 sdd-check 且无报错
|
|
95
|
+
- 现有技能生成不受破坏(`bun run gen:skill-docs` 输出一致)
|
|
96
|
+
|
|
97
|
+
**架构约束检查点**:
|
|
98
|
+
- [ ] 模板解析栈优先级不可被配置绕过(硬编码为常量)
|
|
99
|
+
- [ ] 路径校验覆盖所有文件写入路径(grep `_ensure_inside\|writeFile\|mkdir` 全命中)
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
### Phase 2:宿主抽象注册表(预计 1 周)
|
|
104
|
+
|
|
105
|
+
**目标**:将 `hosts/claude.ts`、`hosts/codex.ts` 等硬编码适配重构为注册表驱动的声明式系统。
|
|
106
|
+
|
|
107
|
+
**交付物**:
|
|
108
|
+
1. `hosts/registry.ts` — 宿主适配注册表
|
|
109
|
+
- `HostAdapter` 接口:`key`、`name`、`detect(): boolean`、`install(command: CommandDef, path: string): void`、`uninstall(commandName: string): void`
|
|
110
|
+
- `HOST_REGISTRY: Map<string, HostAdapter>`
|
|
111
|
+
- 注册函数:`registerHost(adapter: HostAdapter)`
|
|
112
|
+
2. `hosts/adapters/` 目录
|
|
113
|
+
- `claude.ts`:Claude Code 适配(Markdown 命令格式)
|
|
114
|
+
- `codex.ts`:Codex CLI 适配(Skills 格式)
|
|
115
|
+
- `cursor.ts`:Cursor 适配(.cursorrules / 命令格式)
|
|
116
|
+
- `kimi.ts`:Kimi Code CLI 适配(Skills 格式)
|
|
117
|
+
- 每文件 <100 行,仅含适配元数据与格式转换函数
|
|
118
|
+
3. `hosts/schema.ts` — 宿主协议 schema
|
|
119
|
+
- 定义 `CommandDef`、`HostConfig`、`OutputFormat` 类型
|
|
120
|
+
- 支持四种格式:markdown、toml、yaml、skills
|
|
121
|
+
4. `scripts/gen-host-adapters.ts` — 宿主适配代码生成器(可选,MVP 阶段可手写)
|
|
122
|
+
- 输入:`hosts/adapters/<name>.yaml` 描述文件
|
|
123
|
+
- 输出:`hosts/adapters/<name>.ts` 适配代码
|
|
124
|
+
|
|
125
|
+
**验收标准**:
|
|
126
|
+
- `bun test` 新增 `hosts/registry.test.ts`,验证注册/卸载/检测逻辑
|
|
127
|
+
- 现有 `gxpm init` 对 Claude/Codex/Cursor 的初始化行为保持不变(黑盒兼容)
|
|
128
|
+
- 新增宿主适配时,仅需新增一个 `<50 行` 的适配文件并在 `hosts/index.ts` 导入
|
|
129
|
+
|
|
130
|
+
**架构约束检查点**:
|
|
131
|
+
- [ ] `requires_cli=true` 的宿主 `key` 与可执行文件名匹配(`detect()` 使用 `which` 语义)
|
|
132
|
+
- [ ] 宿主命令安装使用显式 START/END 标记
|
|
133
|
+
- [ ] 命令命名空间隔离:宿主级命令前缀为 `/gxpm`,扩展级为 `/gxpm.{ext-id}.{cmd}`
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### Phase 3:声明式工作流引擎(预计 2 周)
|
|
138
|
+
|
|
139
|
+
**目标**:将 gxpm phase gate 从硬编码 TypeScript 逻辑升级为 YAML 声明式工作流,支持暂停/恢复/人工 gate。
|
|
140
|
+
|
|
141
|
+
**交付物**:
|
|
142
|
+
1. `core/workflows/` 目录(自治子系统,不依赖扩展/预设逻辑)
|
|
143
|
+
- `engine.ts`:`WorkflowEngine` — 加载、校验、执行、持久化、恢复
|
|
144
|
+
- `definition.ts`:`WorkflowDefinition` — YAML 解析与 schema 校验
|
|
145
|
+
- `state.ts`:`RunState` — 每步后保存到 `.gxpm/workflows/runs/{run_id}/state.json`
|
|
146
|
+
- `context.ts`:`StepContext` — 传递 inputs、steps 结果、变量
|
|
147
|
+
2. `core/workflows/steps/` — 内置步骤类型(最小 viable 集)
|
|
148
|
+
- `command.ts` — 调用 gxpm CLI 子命令
|
|
149
|
+
- `shell.ts` — 执行 shell 命令
|
|
150
|
+
- `gate.ts` — 交互式人工审核(阻塞,等待用户输入 y/n)
|
|
151
|
+
- `if_then.ts` — 条件分支
|
|
152
|
+
- `fan_out.ts` / `fan_in.ts` — 集合分发与结果聚合
|
|
153
|
+
- 每步骤继承 `StepBase`,含 `execute()`、`validate()`、`canResume()`
|
|
154
|
+
3. `workflows/gxpm-standard.yml` — gxpm 标准工作流定义
|
|
155
|
+
- 将现有 phase gate 映射为步骤序列:`triage → plan → dispatch → implement → verify → qa → land`
|
|
156
|
+
- 每个 phase 对应一个 `command` 步骤:`gxpm issue transition {id} {phase}`
|
|
157
|
+
- `gate` 步骤用于 phase 间的人工确认点
|
|
158
|
+
4. `core/workflows/expressions.ts` — Jinja2-like 表达式引擎
|
|
159
|
+
- 最小实现:变量插值 `${var}`、条件表达式 `{% if %}`
|
|
160
|
+
- 上下文:inputs、steps 输出、环境变量
|
|
161
|
+
|
|
162
|
+
**状态机定义**:
|
|
163
|
+
|
|
164
|
+
```yaml
|
|
165
|
+
schema_version: "1.0"
|
|
166
|
+
id: gxpm-standard
|
|
167
|
+
name: "GXPM Standard Delivery Workflow"
|
|
168
|
+
inputs:
|
|
169
|
+
issue_id: string
|
|
170
|
+
auto_land: boolean
|
|
171
|
+
steps:
|
|
172
|
+
- id: triage
|
|
173
|
+
type: command
|
|
174
|
+
config: { command: "gxpm issue transition ${issue_id} triage" }
|
|
175
|
+
- id: plan_gate
|
|
176
|
+
type: gate
|
|
177
|
+
config: { prompt: "计划已就绪,确认进入 dispatch?" }
|
|
178
|
+
- id: dispatch
|
|
179
|
+
type: command
|
|
180
|
+
config: { command: "gxpm issue transition ${issue_id} dispatch" }
|
|
181
|
+
- id: implement
|
|
182
|
+
type: command
|
|
183
|
+
config: { command: "gxpm issue transition ${issue_id} implement" }
|
|
184
|
+
- id: verify
|
|
185
|
+
type: command
|
|
186
|
+
config: { command: "gxpm issue transition ${issue_id} verify" }
|
|
187
|
+
- id: qa_gate
|
|
188
|
+
type: gate
|
|
189
|
+
config: { prompt: "QA 通过,确认进入 land?" }
|
|
190
|
+
- id: land
|
|
191
|
+
type: command
|
|
192
|
+
config: { command: "gxpm issue transition ${issue_id} land" }
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**验收标准**:
|
|
196
|
+
- `bun test` 新增 `workflows/engine.test.ts`,覆盖:
|
|
197
|
+
- 工作流加载与校验
|
|
198
|
+
- 顺序执行与状态持久化
|
|
199
|
+
- gate 步骤暂停与 resume
|
|
200
|
+
- if 条件分支
|
|
201
|
+
- fan-out/fan-in 集合处理
|
|
202
|
+
- 现有 `gxpm issue transition` CLI 行为不变
|
|
203
|
+
- 工作流运行状态文件 `.gxpm/workflows/runs/{id}/state.json` 可被独立读取恢复
|
|
204
|
+
|
|
205
|
+
**架构约束检查点**:
|
|
206
|
+
- [ ] 步骤 ID 唯一性校验(禁止 `:` 字符)
|
|
207
|
+
- [ ] schema_version 严格校验(仅支持 `1.0`,未来升级需显式迁移)
|
|
208
|
+
- [ ] Resume 粒度:顶层步骤索引级(与 spec-kit 保持一致,嵌套 resume 标记为 Phase 4 增强)
|
|
209
|
+
- [ ] 工作流引擎不依赖扩展/预设子系统(模块边界清晰)
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
### Phase 4:SDD 宪法与 Artifact 合同融合(预计 1 周)
|
|
214
|
+
|
|
215
|
+
**目标**:将 Spec Kit 的 SDD 方法论嵌入 gxpm artifact 体系,使规格说明成为可执行的主要产物。
|
|
216
|
+
|
|
217
|
+
**交付物**:
|
|
218
|
+
1. `docs/governance/spec-driven-contract.md` — SDD 执行合同
|
|
219
|
+
- 定义规格(spec)、计划(plan)、任务(tasks)三种 artifact 的标准结构
|
|
220
|
+
- 映射到 gxpm 现有 artifact 类型:`triage-report` → spec,`implementation-plan` → plan,`task-list` → tasks
|
|
221
|
+
- 定义 Phase -1 Gates(开发前必须通过的检查清单)
|
|
222
|
+
2. `templates/spec-template.md.tmpl` — 规格模板
|
|
223
|
+
- 需求澄清、范围界定、非目标、成功标准、验收条件
|
|
224
|
+
3. `templates/plan-template.md.tmpl` — 计划模板
|
|
225
|
+
- 架构决策、风险评估、阶段划分、验证方法
|
|
226
|
+
4. `templates/tasks-template.md.tmpl` — 任务模板
|
|
227
|
+
- 垂直切片、独立可抓取、验收标准
|
|
228
|
+
5. `core/artifact-validator.ts` — Artifact 结构校验器
|
|
229
|
+
- 校验 spec/plan/tasks 的必要 frontmatter 和章节
|
|
230
|
+
- 在 `gxpm artifact write` 时自动触发
|
|
231
|
+
|
|
232
|
+
**验收标准**:
|
|
233
|
+
- `bun test` 新增 `artifact-validator.test.ts`
|
|
234
|
+
- `gxpm issue create --auto-id` 时,若 type 为 feature,自动提示生成 spec artifact
|
|
235
|
+
- 现有 artifact 类型不破坏,新增 spec/plan/tasks 为可选增强
|
|
236
|
+
|
|
237
|
+
**架构约束检查点**:
|
|
238
|
+
- [ ] Simplicity Gate:单个 feature 的 spec + plan + tasks 不超过 3 个 artifact 文件
|
|
239
|
+
- [ ] Test-First:plan artifact 必须包含测试策略章节
|
|
240
|
+
- [ ] Explicit over Implicit:所有假设和依赖必须显式声明
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
### Phase 5:整合与验收(预计 1 周)
|
|
245
|
+
|
|
246
|
+
**目标**:将前四阶段成果整合为完整用户流程,端到端验证。
|
|
247
|
+
|
|
248
|
+
**交付物**:
|
|
249
|
+
1. `gxpm workflow` 子命令
|
|
250
|
+
- `gxpm workflow list` — 列出可用工作流
|
|
251
|
+
- `gxpm workflow run <workflow-id> --issue <id>` — 运行工作流
|
|
252
|
+
- `gxpm workflow status <run-id>` — 查看运行状态
|
|
253
|
+
- `gxpm workflow resume <run-id>` — 恢复暂停的工作流
|
|
254
|
+
2. `gxpm init` 升级
|
|
255
|
+
- 初始化时检测宿主并注册对应适配器
|
|
256
|
+
- 安装标准工作流定义到 `.gxpm/workflows/`
|
|
257
|
+
3. 端到端测试(E2E)
|
|
258
|
+
- 模拟完整 issue 生命周期:create → triage → plan → dispatch → implement → land
|
|
259
|
+
- 验证工作流状态机与 `.gxpm/issues/` 状态机的一致性
|
|
260
|
+
|
|
261
|
+
**验收标准**:
|
|
262
|
+
- `bun test` 全量通过(现有 + 新增)
|
|
263
|
+
- `bun run check` 通过
|
|
264
|
+
- E2E 测试脚本在独立 worktree 中运行成功
|
|
265
|
+
- 新增代码行数不超过 3,000 行(Simplicity Gate)
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## 四、风险与缓解
|
|
270
|
+
|
|
271
|
+
| 风险 | 可能性 | 影响 | 缓解措施 |
|
|
272
|
+
|------|--------|------|---------|
|
|
273
|
+
| **工作流引擎过度设计** | 中 | 高 | Phase 3 严格限制为最小 viable 步骤集(5 种),禁止引入循环/并发等复杂特性 |
|
|
274
|
+
| **宿主适配破坏现有初始化** | 中 | 高 | Phase 2 保持黑盒兼容,新增适配文件后运行现有 `hosts/*.test.ts` 全量回归 |
|
|
275
|
+
| **模板解析栈引入性能退化** | 低 | 中 | 解析结果缓存到 `.gxpm/cache/templates.json`,缓存键为 `templateName + priorityStackHash` |
|
|
276
|
+
| **SDD 宪法与现有流程冲突** | 中 | 中 | Phase 4 的 spec/plan/tasks 为可选增强,不强制替换现有 triage-report/implementation-plan |
|
|
277
|
+
| **Commit 规模失控** | 低 | 高 | 每 Phase 独立分支(`gxpm-N-sdd-phase-{1-5}`),单 PR 不超过 400 行变更 |
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## 五、验证方法
|
|
282
|
+
|
|
283
|
+
1. **单元测试**:每阶段新增测试文件,覆盖率目标 >80%
|
|
284
|
+
2. **回归测试**:`bun test` 全量通过,现有测试零破坏
|
|
285
|
+
3. **集成测试**:在独立 worktree 中运行 `gxpm init` + `gxpm workflow run` 完整流程
|
|
286
|
+
4. **静态检查**:`bun run check` 通过(类型检查 + lint)
|
|
287
|
+
5. **架构约束检查**:每阶段结束时运行自定义脚本验证约束检查点
|
|
288
|
+
6. **代码规模检查**:`find src/core/workflows -name '*.ts' | xargs wc -l` 确认引擎代码 <1,500 行
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## 六、附录:与 gxpm 现有能力的整合矩阵
|
|
293
|
+
|
|
294
|
+
| gxpm 现有能力 | 本计划增强点 | 文件映射 |
|
|
295
|
+
|--------------|-------------|---------|
|
|
296
|
+
| `skills/gxpm/SKILL.md` | 引入 SDD 宪法章节 | `templates/spec-template.md.tmpl` |
|
|
297
|
+
| `hosts/claude.ts` | 重构为 `hosts/adapters/claude.ts` | `hosts/registry.ts` |
|
|
298
|
+
| `core/config.ts` | 增加模板解析配置 | `core/template-resolver.ts` |
|
|
299
|
+
| `core/dag-executor.ts` | 工作流引擎可复用 DAG 执行经验 | `core/workflows/engine.ts` |
|
|
300
|
+
| `.gxpm/issues/<id>/` | 工作流 run state 并存于 `.gxpm/workflows/runs/` | `core/workflows/state.ts` |
|
|
301
|
+
| `bun run gen:skill-docs` | 支持 `--host all` 批量生成 | `hosts/registry.ts` 遍历注册表 |
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
*本计划遵循 gxpm 开发契约:任何代码改动开始前,确认有对应 GXPM-N issue 处于 dispatch/implement 阶段。*
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# 好的 AGENTS.md 等于免费换模型,写错了比没文档更糟
|
|
2
|
+
|
|
3
|
+
> **作者:** 老金 (@freeman1266)
|
|
4
|
+
> **来源:** https://x.com/freeman1266/status/2053055657335832828
|
|
5
|
+
> **发布时间:** 2026-05-09 03:13
|
|
6
|
+
> **互动数据:** 4 回复, 9 转发, 52 点赞, 82 收藏, 4,108 浏览
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
一份文件,让 AI 编码质量从 Haiku 跳到 Opus——或者让它比裸跑还烂。
|
|
11
|
+
|
|
12
|
+
下面这套东西,是 Augment Code 团队从一个大型 monorepo 里抽出几十份真实的 AGENTS.md 跑出来的实测结论,外加老金我自己的怀疑视角,把里面的几个坑也补上去。
|
|
13
|
+
|
|
14
|
+
希望读完这一篇,你不再"凭感觉"写 AGENTS.md。
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 让工程师惊掉下巴的实验
|
|
19
|
+
|
|
20
|
+
Augment Code 做了件事:从一个大型 monorepo 里提取了数十个 AGENTS.md,逐一测量它们对 AI 代码生成质量的影响。
|
|
21
|
+
|
|
22
|
+
结果他们自己都没想到——
|
|
23
|
+
|
|
24
|
+
- **最好的 AGENTS.md**,带来的质量提升相当于把模型从 Claude Haiku 直接换成 Claude Opus。
|
|
25
|
+
- **最差的 AGENTS.md**,让输出比完全不写任何文档还糟。
|
|
26
|
+
- 更夸张的是:同一份 AGENTS.md,在常规 bug 修复任务上把代码质量提升了 25%,在同一模块的复杂功能任务上却让完整性下降了 30%。
|
|
27
|
+
|
|
28
|
+
**一份文件,正负 30% 的波动。**
|
|
29
|
+
|
|
30
|
+
> **泼冷水:** "Haiku 跳到 Opus"是个非常抓人的比喻,但严格说不是模型变聪明了。好 AGENTS.md 提升的是"消除歧义"的能力,不是模型自身的推理能力。遇到真正需要多步逻辑推演的架构难题,再好的文档也救不了 Haiku。把它当成"减少 Agent 在你代码库里走错路的概率"更准确。
|
|
31
|
+
|
|
32
|
+
把这件事讲清楚,是因为后面的所有模式,本质都在做一件事:**给 Agent 一份没有歧义的执行手册。**
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 7 个有效模式
|
|
37
|
+
|
|
38
|
+
### 1. 渐进式披露,而不是把所有东西塞进一个文件
|
|
39
|
+
|
|
40
|
+
把 AGENTS.md 想成一个**入口**,不是百科全书。
|
|
41
|
+
|
|
42
|
+
- 主文件控制在 **100~150 行**,覆盖常见场景与工作流
|
|
43
|
+
- 细节推到几份"按需加载"的参考文件里
|
|
44
|
+
|
|
45
|
+
**实验数据:** 在一个约 100 个核心文件的中等规模模块里,这个体量的主文件让所有指标提升 10~15%。一旦超过 150 行,收益开始反向。
|
|
46
|
+
|
|
47
|
+
> **为什么是 150 行?** 因为当前 AI 编码助手普遍存在"中间迷失"(Lost in the Middle)现象——即便模型宣称 200K 甚至 1M 上下文,当规则被埋在长文本中段时,遵循率会直线下降。150 行是把注意力机制压在"高度聚焦区"的甜区。
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### 2. 程序性工作流:让 Agent 从"无法完成"到"一次成功"
|
|
52
|
+
|
|
53
|
+
把任务写成**编号的多步骤工作流**,是测量到的最强模式之一。
|
|
54
|
+
|
|
55
|
+
一个真实例子:部署新集成的六步工作流。Agent 照步骤执行后——
|
|
56
|
+
|
|
57
|
+
- 缺少连接文件的 PR 比例:**40% → 10%**
|
|
58
|
+
- 正确性 **+25%**
|
|
59
|
+
- 完整性 **+20%**
|
|
60
|
+
|
|
61
|
+
**工作流的本质是消除歧义,让 Agent 不用猜。**
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### 3. 决策表:在写第一行代码前就解决"二选一"
|
|
66
|
+
|
|
67
|
+
代码库里经常有两三种都说得通的做法——React Query 还是 Zustand?REST 还是 GraphQL?
|
|
68
|
+
|
|
69
|
+
决策表**强制提前选好**。Agent 读完就知道走哪条路,不用在代码里反复试探。
|
|
70
|
+
|
|
71
|
+
**效果:** 相关区域的 PR 在"最佳实践遵从度"上 **+25%**。
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### 4. 真实代码片段,不是伪代码
|
|
76
|
+
|
|
77
|
+
来自实际生产代码的 **3~10 行短片段**,改善了代码复用和模式遵从。
|
|
78
|
+
|
|
79
|
+
关键词是"**真实**"——伪代码和示意性代码效果远不如直接从生产代码里截取的。但保持在最相关的几个示例以内,超过这个数量,Agent 会开始在错误的地方做模式匹配。
|
|
80
|
+
|
|
81
|
+
> **担心代码过时?** 动态引用优于硬编码。如果工具支持,尽量用相对路径或 @ 引用核心文件,让 Agent 跳去看活的代码;只有在那段逻辑足够稳定时,才直接复制片段。复制进来的片段,必须进 Code Review 的 checklist——API 一变就同步更新,否则它就从资产变成毒药。
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### 5. 每个"不要做"都配上"要做"
|
|
86
|
+
|
|
87
|
+
只有警告的文档,表现一贯不如"**禁令 + 替代方案**"配对的文档。
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
❌ 不要直接实例化 HTTP 客户端
|
|
91
|
+
|
|
92
|
+
✅ 不要直接实例化 HTTP 客户端。
|
|
93
|
+
使用 lib/http 中带有重试中间件的共享 apiClient。
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
第一条让 Agent 变得谨慎和探索性——它知道不能做什么,但不知道该做什么,于是开始翻代码库。第二条告诉它该怎么做,直接继续。
|
|
97
|
+
|
|
98
|
+
有 15 条以上连续"不要做"且没有"要做"的文件,会导致 Agent **过度探索、保守行事、完成更少工作**。
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### 6. 代码模块化,文档也要模块化
|
|
103
|
+
|
|
104
|
+
表现最好的 AGENTS.md,描述的是**相对隔离的子模块**。仓库根目录的大型跨领域文件,效果不如模块级别的。
|
|
105
|
+
|
|
106
|
+
更关键的是:**AGENTS.md 只是入口,周围环境才是问题所在。**
|
|
107
|
+
|
|
108
|
+
实验里,一个模块有 37 个相关文档总计 50 万字符;另一个有 226 个文档超过 2MB。这两种情况下,仅仅移除 AGENTS.md 几乎不改变 Agent 的行为——因为 Agent 会继续找到并阅读周围的文档蔓延。
|
|
109
|
+
|
|
110
|
+
**一个聚焦的 150 行 AGENTS.md,放在 50 万字符的周围规格之上,救不了你。**
|
|
111
|
+
|
|
112
|
+
> **修复文档环境,不是只修入口。**
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### 7. 特定领域规则要具体、可执行
|
|
117
|
+
|
|
118
|
+
语言特性、框架约定、安全限制——这些规则有效,前提是**具体且可执行**。堆几十条模糊规则,效果跟没写一样。
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 两个最常见的失败模式
|
|
123
|
+
|
|
124
|
+
### 1. 过度探索陷阱(上下文腐烂)
|
|
125
|
+
|
|
126
|
+
最常见的失败,本质是**上下文中毒**。
|
|
127
|
+
|
|
128
|
+
两种写法触发它:
|
|
129
|
+
|
|
130
|
+
**太多架构概述**
|
|
131
|
+
Agent 被拉去阅读数十个文档,试图"更好地理解架构",加载几万甚至几十万 token 后,输出反而变差。
|
|
132
|
+
|
|
133
|
+
**过多警告堆叠**
|
|
134
|
+
大量"不要做"且没匹配"要做",Agent 会对每一条警告都去验证当前方案是否违规。30~50 条警告,意味着它要去翻迁移脚本、检查 API 版本兼容性、探索认证中间件——即使这些跟当前任务完全无关。
|
|
135
|
+
|
|
136
|
+
### 2. 文档描述了代码库里还不存在的模式
|
|
137
|
+
|
|
138
|
+
如果在 AGENTS.md 里写了一个"打算引入但还没落地"的新模式,Agent 会被积极地引向错误方向——它按文档去找根本不存在的代码,然后产生错误的解决方案。
|
|
139
|
+
|
|
140
|
+
> **AGENTS.md 描述现状,不是愿景。**
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 文档发现率
|
|
145
|
+
|
|
146
|
+
Augment Code 在数百个 session 里追踪了 Agent 实际读取了什么:
|
|
147
|
+
|
|
148
|
+
| 文档类型 | 发现率 |
|
|
149
|
+
|---------|--------|
|
|
150
|
+
| AGENTS.md | **100%**,自动发现 |
|
|
151
|
+
| AGENTS.md 中引用的参考文件 | **>90%**,按需加载 |
|
|
152
|
+
| 当前工作目录的 README.md | **>80%** |
|
|
153
|
+
| 嵌套子目录的 README | **~40%** |
|
|
154
|
+
| _docs/ 文件夹中无引用的孤立文档 | **<10%** |
|
|
155
|
+
|
|
156
|
+
一个服务在 _docs/ 里放了 3 万字符的协议设计、限流规则和安全文档,Agent 在数十个 session 里几乎从未打开过其中大多数。
|
|
157
|
+
|
|
158
|
+
> **AGENTS.md 是唯一具有可靠发现性的文档位置。** 如果某些内容需要被 Agent 看到,要么在那里,要么从那里直接引用。把内容移到被引用的位置,往往比写更多文档更有杠杆效果。
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 几个值得讨论的边界
|
|
163
|
+
|
|
164
|
+
### 1. AGENTS.md 不是 README 的替代品
|
|
165
|
+
|
|
166
|
+
读到"主文件控制在 150 行 / 不要写架构概述",很多人会担心:那新人入职怎么办?架构图、历史决策、设计哲学谁来讲?
|
|
167
|
+
|
|
168
|
+
**答案是分受众。**
|
|
169
|
+
|
|
170
|
+
- **README 是写给人类的** — 人类需要架构、愿景、来龙去脉,才能在脑子里建立心智模型。
|
|
171
|
+
- **AGENTS.md 是写给机器的执行手册** — 它只关心规则、工作流、防坑指南。
|
|
172
|
+
|
|
173
|
+
接受这种分离,是 AI 时代工程实践的第一步。两份文件不是 DRY 的破坏,而是因为受众不同,关心的层级也不同。当然,两份都要维护——这是真实成本,要计入。
|
|
174
|
+
|
|
175
|
+
### 2. 维护成本不能假装不存在
|
|
176
|
+
|
|
177
|
+
"使用真实代码片段"+"描述现状不描述愿景"这两条加起来,意味着 AGENTS.md 是一份**高频更新文档**。
|
|
178
|
+
|
|
179
|
+
不接受这一点的团队,AGENTS.md 几个月后就会变成第二种失败模式——描述了代码库里已经不存在的模式,把 Agent 主动引向错误方向。
|
|
180
|
+
|
|
181
|
+
**应对办法:**
|
|
182
|
+
|
|
183
|
+
- **优先用引用,不用复制** — 真实代码片段尽量是文件路径 + 函数名而不是粘贴。
|
|
184
|
+
- **复制片段进 Code Review checklist** — API 改动时强制 reviewer 检查 AGENTS.md。
|
|
185
|
+
- **定期 prune** — 每个迭代/季度删一遍过时的警告与工作流,比加新条目更重要。
|
|
186
|
+
|
|
187
|
+
### 3. 150 行不是真理,是当前模型的甜区
|
|
188
|
+
|
|
189
|
+
这条数据来自 Augment Code 自家的 RAG 与上下文管理策略。换一套底层 Agent(Cursor / Claude Code / Devin / Copilot Workspace),检索算法和注意力分布都会不同。
|
|
190
|
+
|
|
191
|
+
100~150 行真正的含义不是"上限",而是:**把规则压进模型注意力机制最聚焦的那一段。**
|
|
192
|
+
|
|
193
|
+
模型一升级,这个数字会往上挪;但"主文件聚焦、细节外推"这个结构原则不会变。
|
|
194
|
+
|
|
195
|
+
> **把它当原则用,不要当数字背。**
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## 最后
|
|
200
|
+
|
|
201
|
+
这件事最有价值的地方,不是抛出了什么新奇的结论,而是用数据把一件模糊的事说清楚了:
|
|
202
|
+
|
|
203
|
+
**AGENTS.md 不是越多越好,不是越全越好,不是越详细越好。**
|
|
204
|
+
|
|
205
|
+
它是一个**精心设计的上下文入口**。写好了,相当于免费升级了一个更强的模型;写烂了,你付出维护成本,换来一个比裸跑更差的 AI。
|
|
206
|
+
|
|
207
|
+
在 AI 工程里,"少即是多"这句话,从未像现在这样字面成立过。
|