96SEO 2026-08-03 20:44 1
AI 编码最麻烦的地方。不是它不会写代码,而是没有稳定的工程边界。它可能这次记得用 intl.get下次又硬编码中文;这次遵守组件拆分,下次把页面、状态、事件、样式全塞进一个 index.tsx;你让它修一个 bug,它顺手把旁边的代码风格也改了。

这些问题单独看都不严重,但会持续消耗 Code Review 的注意力。原本 Review 应该关注业务逻辑、交互边界、异常处理,结果变成了帮 AI 检查:有没有 any有没有中文硬编码、列表 key 用了 index、有没有乱改配置。
在我们的项目里遇到的问题:只停留在对话编程,没有强制机制。
Prompt 可以提醒 AI,但 Prompt 不是约束。README 可以写规范,但 AI 不一定每次都会读。我们真正需要的是一套工程化 Harness:在 AI 编辑代码的关键动作前插入检查点,把“建议”变成“机制”。
一句话概括这套程序:
没有 Harness 时AI 的工作流非常短:使用者提出需求,AI 直接编辑文件,接下来进入 Review。
sequenceDiagram
participant User as 开发者
participant AI as AI 编码助手
participant Repo as 代码仓库
participant Review as Code Review
User->AI: 实现一个 TODOLIST 页面
AI->Repo: 直接编辑 index.tsx
AI->Repo: 顺手补样式和状态逻辑
AI->Review: 提交结果
Review-->User: 发现 any、硬编码中文、key=index、组件过重
User->AI: 继续返工
这个流程的问题不是“AI 不聪明”,而是中间没有任何强制检查点。老实说,AI 是否读取规范、是否遵守 i18n、是否限制修改范围。完全依赖模型当时的上下文和运气。其实,
AgentFlow Web 的 Harness 基于 Claude Code Hooks 实现。主要是两个 Hook:
PreToolUse: 在 AI 调用 Edit / Write 前执行PostToolUse: 在 AI 调用 Skill 后执行
sequenceDiagram
participant User as 开发者
participant AI as AI 编码助手
participant Hook as PreToolUse Hook
participant Skill as Skill 规范
participant State as Session State
participant Repo as 代码仓库
participant Snapshot as Snapshot / Audit
User->AI: 实现一个 TODOLIST 页面
AI->Hook: 请求编辑 .tsx 文件
Hook->Hook: 匹配文件规则
Hook->State: 检查 coding-standards 是否已加载
State-->Hook: 未加载
Hook-->AI: 阻断。提示先加载 coding-standards
AI->Skill: 加载 coding-standards
AI->Hook:
请求编辑
Hook->Snapshot: 保存原文件快照 + 写审计日志
Hook-->AI: 放行
AI->Repo: 编辑文件
This mechanism ensures that code changes are guided by project conventions before y even happen.
The harness is not a single script but a set of cooperating mechanisms.
The goal is not to intercept every file. Test files,type declarations,third‑party dependencies,and harness files mselves should bypass checks. The first layer is an action space registry that applies strict constraints only to core business files.
// .claude/hooks/lib/match-rules.jsconst RULES = srcstore.*.ts$/i,skill:'coding-standards' },{ name:'API 层',pattern:/srcapi.*.ts$/i,skill:'coding-standards' },{ name:'自定义 Hook',pattern:/.*.ts$/i,skill:'coding-standards' },];
The second layer is a Skill Gate that checks wher current session has already loaded required skill . If not。editing is blocked.
// .claude/hooks/pre-edit-check.jsif ) {
audit({
session : sessionId,tool : toolName,file : filePath,rule : rule.name,skill : rule.skill,action : 'blocked',});// exit signal for Claude Code Hook – stderr will inform user what to load next.
process.stderr.write`);process.exit;}
A typical runaway mode is continuously editing a file until it diverges furr from its intended state. To mitigate this we impose execution boundaries based on edit counts per session and per file.
| 指标 |
|---|
| 当前值/阈值 |
// .claude/hooks/lib/session-state.jsconst DEFAULT_EDIT_LIMIT = /* e.g.,*/10;function incrementEditCount {
const state = loadState;state.editCount = + 1;saveState,不过,return state.editCount;}
Audit logs record every allow/deny decision and skill load event without capturing file contents. They help answer questions like “When did file start being edited?” and “Was an edit attempted before loading its required standards?”
{"ts":"2026-08-03T10::00Z","tool":"Edit","file":"src/pages/todo/index.tsx"。"action":"pass-skill-loaded"}
The final layer saves a snapshot of a target file just before an allowed edit so that accidental destructive changes can be quickly rolled back locally.
// .claude/hooks/lib/snapshot.jsfunction saveSnapshot{
if ) return false;const content=fs.readFileSync;const snapshot={ts:new Date.toISOString。file:filePath,content};fs.writeFileSync);return true,}
No-harness code often crams all logic into one component —business logic mixes with UI rendering and state handling in a single .tsx,leaving reviewers to catch issues like hard‑coded strings and unsafe keys.
| 指标 | 无 Harness | 有 Harness | 变化 |
|---|---|---|---|
| 文件数25+0? | 无 Harness?19,?,?,? | 有Harness?21,? | +?0,? |
javascript// docs/harness-todolist-experiment/no-harness/index.tsxexport default function TodoPage{const =useState;const =useState
`
结束演示
typescript// docs/harness-todolist-experiment/with-harness/types.tsexport interface TodoItem{id:string。title:string,completed:boolean}
typescript// docs/harness-todolist-experiment/with-harness/TodoList.tsxexport interface TodoListProps{items:Array
typescript// docs/harness-todolist-experiment/with-harness/index.tsximport styles from './index.less';说起来,export default function TodoPage{const =useState
虽然带来了更多行数。但主要目标不是压缩代码,而是让后续维护成本降到最低。审核者可以把注意力放在业务体验和产品细节上,而非重复纠正基本编码违规。
1️⃣ 第一阶段 – 写清楚规范 - 创建 CLAUDE.md 与相应 Skill 文档 - 切勿立即启用阻断,只做语言统一
2️⃣ 第二阶段 – 针对关键文件启用阻断
- 从 .tsx,src/api,src/store。
src/hooks 开始
- 不要一开始就全仓库管控,以免干扰日常开发
3️⃣ 第三阶段 – 引入审计与回滚 - 当任务量增大后开启 audit log 与 snapshot 功能 - 为开发者提供快速恢复方法,让他们安心尝试
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback