Context-First Rule
【免费下载链接】beadsBeads - A memory upgrade for your coding agent项目地址: https://gitcode.com/GitHub_Trending/beads1/beads
Do:Check breadcrumb/aliases/recent git BEFORE Grep/Glob when user references past work.Don't:Search immediately without checking context files first.
解析过程由 `ParseRuleFile` 完成([cmd/bd/rules.go](https://link.gitcode.com/i/667770ee560e318ac5d44689c95bc98e)): - **Name**:取自文件名(去掉 `.md` 后缀); - **Title**:取正文第一个 `#` 一级标题,无标题时回退为文件名; - **DoLines / DontLines**:由 `extractAllDirectives` 提取; - **Tokens**:按“1 token ≈ 4 字符”粗略估算正文长度; - **Keywords**:从 Do/Don't 行提取关键词;若文件没有任何 Do/Don't 块,则退化从全文正文提取。 `extractAllDirectives`([cmd/bd/rules.go](https://link.gitcode.com/i/727f69735d6cf7370ec6b1735d9015cb))按行扫描,**先匹配 `**Don't:**` 再匹配 `**Do:**`**,因为 "Don't" 包含 "Do" 前缀,顺序颠倒会造成误判;块内以 `-` / `*` 开头的列表项会去掉项目符号后逐条并入对应指令列表,空行、新标题或新的 `**` 加粗行则结束当前块。 ## 三、`bd rules audit`:扫描矛盾与合并机会 运行 `bd rules audit` 后,CLI 会输出(格式化逻辑见 [cmd/bd/rules.go](https://link.gitcode.com/i/c321b7701cf26050152360ee1f15f0c9)):Rules Audit — .claude/rules/
Summary: Total rules: 5 Token estimate: ~1200 Contradictions: 1
Contradictions: Rule A Rule B Tension
blocker-first.md parallel-workflow.md "Block PR merges until all issues resolved" vs "Proceed with merges in parallel even if minor issues exist"
Merge Candidates (similarity > 0.60): Group 1 — "agent" (score: 0.67) → agent-spawn.md → agent-efficiency.md Suggested: merge into agent.md
Runbd rules compact --autoto apply suggested merges.
审计结果的数据结构 `AuditResult`([cmd/bd/rules.go](https://link.gitcode.com/i/b6a7e8d5fd0a2ad43cf952f339d2e65f))包含四个字段:`total_rules`、`token_estimate`、`contradictions`、`merge_candidates`(以及可选 `rules`),均带 JSON tag,配合 `bd rules audit --json` 可直接机器解析。整个审计由顶层编排函数 `RunAudit` 驱动([cmd/bd/rules.go](https://link.gitcode.com/i/93cbb25ebd84aef6d4137c9162dcda5b)),其中有两个细节值得注意: - **矛盾检测的内置阈值固定为 0.3**(`DetectContradictions(rules, 0.3)`),与 `--threshold` 无关; - 当规则数少于 2 条、或目录不存在时,不报错,直接返回空结果——这让 `audit` 可以安全地跑在尚未建立规则的仓库上。 ### 3.1 关键词提取:去除停用词,抽取语义指纹 `ExtractKeywords`([cmd/bd/rules.go](https://link.gitcode.com/i/71ec8be7197246ae1c93aee6ba231ee4))将指令行分词、转小写、去重并排序。分词器 `tokenizeWords`([cmd/bd/rules.go](https://link.gitcode.com/i/16448ecc5b8ebfb4c8073d06852b134c))只保留字母、数字与撇号;随后过滤掉长度不足 2 的词,以及内置停用词表 `stopWords`([cmd/bd/rules.go](https://link.gitcode.com/i/b05edea67dc49d63fb4e5cbdb517a6f2))——其中包含 `the/a/is/to/for/and/do/use/should/must/always/never` 等高频词,因为这些词不携带语义判别力。例如测试 `TestRulesExtractKeywords`([cmd/bd/rules_test.go](https://link.gitcode.com/i/89e2e155e343ea0b32988ef9200347b1))验证输入 "Check the context files before searching" 会得到 `["check","context","files","searching"]` 而不含停用词。 ### 3.2 相似度度量:Jaccard 系数 `JaccardSimilarity(a, b)`([cmd/bd/rules.go](https://link.gitcode.com/i/1f9373dd0fe1790840dc7fd9f6fe6453))计算两套关键词集合的交并比:完全相同为 1.0,完全不相交为 0.0。测试用例覆盖了这三种情形([cmd/bd/rules_test.go](https://link.gitcode.com/i/be7a9c1fae1f0bff114192d025fd46ce)),例如部分重叠时 intersection=2、union=6,得分为 2/6≈0.333。这个分数决定了: - 两条规则是否“同域”(audit 中 >= 0.3 才参与矛盾检测); - 规则是否进入合并候选(`--threshold` 默认 0.6,即关键词交集占并集六成以上才视为可合并)。 ### 3.3 矛盾检测:直接矛盾 + 反义词矛盾 `DetectContradictions`([cmd/bd/rules.go](https://link.gitcode.com/i/d0f9406ade6f7b0d1d4a3211db863924))对规则两两配对,先计算相似度做粗筛,再做两类细查: **直接矛盾(Do vs Don't 共享动作词)**:`findDirectContradiction`([cmd/bd/rules.go](https://link.gitcode.com/i/2a90b6e9c36ca72ecebfdeefa8781650))取规则 A 的 Do 行动作词与规则 B 的 Don't 行动作词求交集——若 A 说 “Block PR merges until all issues resolved” 而 B 说 “Don't block PR merges for minor issues”,`block` 出现在双方的指令中即命中。`extractActionWords`([cmd/bd/rules.go](https://link.gitcode.com/i/7f77919d923a57abdd789617c6976b77))会为每个词保留其来源行,供报告输出。 **反义词矛盾(Do vs Do 使用反义词)**:`findAntonymContradiction`([cmd/bd/rules.go](https://link.gitcode.com/i/79293dc15f31ef5b5d0e595617b3c6bb))利用内置反义词表 `antonymPairs`([cmd/bd/rules.go](https://link.gitcode.com/i/591c7d1e405ccea5ed401871a74823bd)),例如 `block ↔ proceed/parallel`、`verbose ↔ minimize/concise`、`spawn ↔ reuse`、`wait ↔ skip`、`log ↔ suppress`。若 A 的 Do 行出现 `block` 而 B 的 Do 行出现 `proceed`,同样判定为矛盾——测试 `TestRulesDetectContradictions_Antonym`([cmd/bd/rules_test.go](https://link.gitcode.com/i/8abd3936bfd05b8bd2755b72793279d0))验证了 “Block deployment pipeline until tests pass” 与 “Proceed with deployment pipeline even if tests fail” 会被检出。 同时系统会规避误报:`TestRulesDetectContradictions_NoFalsePositive`([cmd/bd/rules_test.go](https://link.gitcode.com/i/bb732fef29e1b4d4d51c10155907ff2a))证明主题无关的两条规则(如 context-first 与 tool-first)即使都含 “Check/Use” 类词,因相似度低于阈值也不会被误判。 ### 3.4 合并候选:单链接聚类 `FindMergeCandidates`([cmd/bd/rules.go](https://link.gitcode.com/i/4b055afbdd635b15a08a859cdbc24762))以相似度 >= 阈值构建规则图,再用**并查集(Union-Find)做单链接聚类**,把两两相似的规则聚成组;组内计算平均两两相似度作为分数,按分数降序输出。每组还会通过 `findGroupLabel`([cmd/bd/rules.go](https://link.gitcode.com/i/18eeb4d888ce9db42cd604e1fe862215))选出组内出现频次最高的关键词作为组标签(默认回退为 "rules"),作为合并后文件的命名建议。测试 `TestRulesFindMergeCandidates_Grouping`([cmd/bd/rules_test.go](https://link.gitcode.com/i/66548e92f1f95016d2c53745de5f862b))验证了三个 agent 主题规则能正确聚簇,而 deploy-guide 不会被误并入。 ## 四、`bd rules compact`:合并规则,收敛 Token `compact` 子命令是审计的落盘动作,支持两种触发方式(入口见 [cmd/bd/rules.go](https://link.gitcode.com/i/98491fac3fde8938ebc0c0fca4336d72)): ### 4.1 自动合并:`--auto` `bd rules compact --auto` 会先以 0.6 阈值重新运行审计,对每个合并候选组执行 `CompactRules`,将结果写入 `{组标签}.md`(空格替换为连字符),并**删除原始源规则文件**。若没有任何合并候选,输出 "No merge candidates found."。配合 `--dry-run` 则只打印预览不写文件、不删源文件,是安全演练的标准姿势。 ### 4.2 手工合并:`--group` `bd rules compact --group context-first,tool-first` 可绕过审计直接指定合并对象(规则名可带或不带 `.md` 后缀,[cmd/bd/rules.go](https://link.gitcode.com/i/d59bfb3fac400d690c3eb58fc0e88512) 会自动补齐)。要求至少指定 2 条规则,否则报错 "need at least 2 rules to merge"。 ### 4.3 复合规则的结构 `CompactRules`([cmd/bd/rules.go](https://link.gitcode.com/i/b2251e9a227ed0dd62e8a5d83da3a256))生成的复合文件具有固定模板: ```markdown # Agent **Do:** Check for existing agent before spawning new ones. Reuse existing agent context and tools. **Don't:** Spawn redundant agents for the same task. Spawn new agents when existing ones can handle the task. Source rules: agent-spawn.md, agent-efficiency.md【免费下载链接】beadsBeads - A memory upgrade for your coding agent项目地址: https://gitcode.com/GitHub_Trending/beads1/beads
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考