CodeSmith
一个实现 Agent 约束工程的系统,通过代码化的规则引擎(如三值判决 Decision 枚举、命令 Arity 表)将业务规则编码为不可绕过的守门员,而非仅写在提示词中
核心事实
时间轴 (近 90 天)
CodeSmith 宪法第 3 条规定用户在本轮输入的明确请求是宪法之下最高权威,任何项目指令、记忆、交接或先前轮次都不得覆盖。
提交 3c0b4521 将 CodeSmith 审批系统的「记住」从会话内 HashSet 升级为跨会话持久授权,持久化到 ~/.codesmith/approvals.toml,按规范工作区路径为键,以 0o600 安全写入,损坏文件降级为空存储。
CodeSmith 审批等级以 auto=0 < suggest=1 < never=2 实现「只能收紧」,项目配置只能提议更大的数字。
CodeSmith 将仓库本地配置($WORKSPACE/.codesmith/config.toml)定义为不可信输入,有意忽略凭据、端点、提供商选择、认证值等,审批与沙箱值只能收紧现有姿态。
CodeSmith 不消毒用户直接输入的消息;上述两个调用点是整个仓库仅有的生产消毒位置,这是权衡而非疏忽。
CodeSmith 字符级消毒部署在两个咽喉点:入口处 MCP 工具调用参数在转发前整体清洗(mcp.rs:3150-3158),出口处所有工具输出在进入模型上下文和对话记录前通过一次(engine/context.rs:301-312)。
CodeSmith 字符级消毒算法迭代到不动点,每轮先 NFKC 规范化再剥离危险字符;危险字符判定为 Unicode 类别 Cf、Co、Cn 整类清除,加显式范围兜底,迭代上限为 10,超过则警告而非 panic。
CodeSmith 的 sanitization.rs 模块头注明其镜像了 Claude Code 的同名实现。
CodeSmith 的包裹机制只作用于新推入的结果,不破坏追加写入,不重写历史消息;本地工具(文件读取、shell、子代理报告)原样通过。
CodeSmith 外部内容来源标签策略:fetch_url 用 URL 主机名,web_search 用固定标签,MCP 工具取服务器名片段,github_* 统一记为 github.com;标签按字节稳定,不是时间戳或请求 ID。
还有 40 条时间轴事件
全部知识事实 (20)
Skill Creator是Claude Code的核心子系统,本质上是一套「提示词+代码生成+文件管理」的自动化框架,允许用户将高频操作封装为可复用的结构化技能单元
75%待验证CodeSmith 网络来源的工具结果在推入对话记录时被包裹,实现位于 sanitization.rs:140 的 wrap_external_tool_content,接在 engine/turn/batches.rs:642。
50%待验证CodeSmith 字符级消毒算法迭代到不动点,每轮先 NFKC 规范化再剥离危险字符;危险字符判定为 Unicode 类别 Cf、Co、Cn 整类清除,加显式范围兜底,迭代上限为 10,超过则警告而非 panic。
50%待验证CodeSmith 的 sanitization.rs 模块头注明其镜像了 Claude Code 的同名实现。
50%待验证CodeSmith 字符级消毒部署在两个咽喉点:入口处 MCP 工具调用参数在转发前整体清洗(mcp.rs:3150-3158),出口处所有工具输出在进入模型上下文和对话记录前通过一次(engine/context.rs:301-312)。
50%待验证CodeSmith 外部内容来源标签策略:fetch_url 用 URL 主机名,web_search 用固定标签,MCP 工具取服务器名片段,github_* 统一记为 github.com;标签按字节稳定,不是时间戳或请求 ID。
50%待验证CodeSmith 审批等级以 auto=0 < suggest=1 < never=2 实现「只能收紧」,项目配置只能提议更大的数字。
50%待验证CodeSmith 将仓库本地配置($WORKSPACE/.codesmith/config.toml)定义为不可信输入,有意忽略凭据、端点、提供商选择、认证值等,审批与沙箱值只能收紧现有姿态。
50%待验证CodeSmith 宪法明文规定记忆层级中「记忆永远不是命令」,用户偏好事实可记忆,但命令性指令没有资格进入记忆。
50%待验证CodeSmith 宪法第 7 条的九级指令来源优先级为:宪法 > 当前用户消息 > 成文法(模式与审批规则)> 法规 > 地方法(AGENTS.md 等项目规则)> 证据(工具输出、文件内容)> 记忆 > 人格 > 先例。
50%待验证CodeSmith 的包裹机制只作用于新推入的结果,不破坏追加写入,不重写历史消息;本地工具(文件读取、shell、子代理报告)原样通过。
50%待验证CodeSmith 不消毒用户直接输入的消息;上述两个调用点是整个仓库仅有的生产消毒位置,这是权衡而非疏忽。
50%待验证CodeSmith 宪法第 3 条规定用户在本轮输入的明确请求是宪法之下最高权威,任何项目指令、记忆、交接或先前轮次都不得覆盖。
50%待验证语法门允许“坏变更坏”的写入,因为若拒绝所有解析失败的写入,已损坏的工作区将永远无法修复。
50%待验证目前只有三种格式受语法门管辖:Rust 使用 syn::parse_file,TOML 和 JSON 使用各自的标准解析器。
50%待验证语法门核心模块仅 455 行,统一了 write_file、edit_file、apply_patch、fim_edit 四个写盘工具的准入逻辑。
50%待验证语法门的规则是:仅当文件在编辑前解析成功、而新内容解析失败时才拒绝写入;原本损坏的文件或尚不存在的新文件不会被拦截。
50%待验证Cargo.lock 被明确豁免于语法门检查,因为它是机器生成、体积庞大且无人手动编辑的文件。
50%待验证语法门对 rustfmt 二进制的探测限时 5 秒,格式化限时 10 秒;任何失败(二进制缺失、非零退出、超时、非 UTF-8 输出)都静默跳过规范化,将原始文本写入磁盘。
50%待验证语法门通过后,若为 Rust 文件且编辑前是 rustfmt 干净的,待写入内容会先经过 rustfmt --edition 2024 重新格式化,以保持后续 edit_file 补丁锚点稳定。
50%