| name | harness-init |
| description | EnjoyHarness 唯一强制入口,初始化全局状态、文件体系、技能注册表 |
| trigger_words | ["harness-init","初始化","initialize"] |
| priority | HIGHEST |
| dependencies | [] |
| version | v3.0.0 |
harness-init 全局初始化技能
核心能力
- 检查 Git 仓库是否存在
- 自举创建核心文件体系与基础入口文件
- 初始化全局状态
- 初始化迭代计数器
- 注册所有技能
- 自动启动会话守护进程(防止上下文超载)
- 初始化 tmux 交接状态文件与启动器脚本
- 自动启动事件编排器(消费 TRIGGER_DOWNSTREAM 事件)
- 遵循目录放置策略,不随意创建根目录
前置条件
执行步骤
Step 1: 检查 Git 仓库
使用 Bash 工具执行:
if [ ! -d .git ]; then
echo "❌ 错误: 当前目录不是 Git 仓库"
echo "💡 请先运行: git init"
exit 1
fi
echo "✅ Git 仓库检查通过"
Step 2: 检查或创建 Manifest 文件
使用 Bash 工具执行:
if [ ! -f EnjoyHarness_MANIFEST.md ]; then
echo "⚠️ 未找到 EnjoyHarness_MANIFEST.md,正在自举创建..."
if [ -x scripts/harness-bootstrap.sh ]; then
scripts/harness-bootstrap.sh --root "$(pwd)"
else
cat > EnjoyHarness_MANIFEST.md <<'EOF'
---
name: EnjoyHarness Engineering
version: v3.0.0
description: 给AI Agent装上工业级「自动驾驶操作系统」,解决落地稳定性、可控性、可复用性核心痛点
---
给AI Agent装上工业级「自动驾驶操作系统」,打造不随模型迭代淘汰的工程化超级能力
18个核心技能(Markdown 定义 + 运行层 Shell 编排)
必须先执行 `harness-init` 初始化技能,才可调用其他所有技能
EOF
fi
fi
echo "✅ Manifest 文件检查通过"
Step 3: 创建核心目录
使用 Bash 工具执行:
mkdir -p .EnjoyHarness
mkdir -p .subharness
mkdir -p .trace/ARCHIVE
mkdir -p .learnings
mkdir -p skills
echo "✅ 核心目录创建完成"
目录放置约束:
- 临时内容优先放
temp/
- 备份内容优先放
backup/
- 正式测试内容使用
tests/
- 临时测试素材如确有需要可放
test/
- 文档统一放
docs/
- 不要在仓库根目录新增无明确归属的目录
Step 4: 初始化全局状态文件
使用 Write 工具创建文件:.EnjoyHarness/GLOBAL_STATE.md
注意:使用 Bash 获取当前时间并替换 INIT_TIME_PLACEHOLDER
INIT_TIME=$(date -Iseconds)
echo "初始化时间: $INIT_TIME"
内容:
---
initialized_at: INIT_TIME_PLACEHOLDER
status: active
version: v3.0.0
current_task: none
active_subagents: []
---
# EnjoyHarness 全局状态
## 系统状态
- 初始化时间: INIT_TIME_PLACEHOLDER
- 状态: 活跃
- 版本: v3.0.0
- 当前任务: 无
- 活跃子代理: 0
## 技能错误计数
所有技能错误计数归零
## 迭代计数
当前迭代: 0 / 100
## 最近事件
初始化完成,等待第一个事件...
Step 5: 初始化事件总线
使用 Write 工具创建文件:.EnjoyHarness/EVENT_LOG.md
内容:
---
created_at: INIT_TIME_PLACEHOLDER
total_events: 0
---
# EnjoyHarness 事件总线
## 事件记录格式
时间 | 事件类型 | 触发技能 | 详情 | 结果
## 最新事件
初始化完成,等待第一个事件...
Step 6: 初始化迭代计数器
使用 Write 工具创建文件:.EnjoyHarness/ITERATION_COUNTER.md
内容:
---
max_iterations: 100
current_iteration: 0
task_id: none
start_time: null
---
# EnjoyHarness 全局迭代计数器
## 迭代限制
- 最大迭代次数: 100(可配置)
- 当前迭代次数: 0
- 关联任务: 无
- 开始时间: 未开始
## 迭代计数规则
- 计数: 每次技能执行(Write/Edit/Bash执行命令)
- 不计数: Read文件、查询命令(git status)
## 熔断触发条件
当前迭代次数 ≥ 最大迭代次数 → 强制停止,先触发自动失败处理;真实阻塞再升级
## 使用说明
1. 每次技能执行前,检查迭代计数
2. 每次技能执行后,增加计数 +1
3. 达到阈值默认触发 harness-handle-failure;真实阻塞时再升级人工介入
Step 7: 创建技能注册表
使用 Write 工具创建文件:.EnjoyHarness/SKILL_REGISTRY.md
内容:
---
total_skills: 18
enabled_skills: 18
disabled_skills: 0
created_at: INIT_TIME_PLACEHOLDER
---
# EnjoyHarness 技能注册表
## 核心基础层 (4个)
- [ ] harness-init - 全局初始化技能
- [ ] harness-build-core-manifest - 构建核心规则技能
- [ ] harness-build-context-index - 构建上下文索引技能
- [ ] harness-enforce-architecture-guardrails - 架构护栏技能
## 调度执行层 (5个)
- [ ] harness-build-deterministic-workflow - 构建工作流技能
- [ ] harness-spawn-subharness-agent - 生成子代理技能
- [ ] harness-monitor-subharness-agent - 监控子代理技能
- [ ] harness-merge-subharness-result - 合并结果技能
- [ ] harness-enable-circuit-breaker - 熔断机制技能
## 验证优化层 (4个)
- [ ] harness-validate-output - 输出校验技能
- [ ] harness-diagnose-and-improve - 错误诊断技能
- [ ] harness-evaluate-performance - 效果评估技能
- [ ] harness-evolve - 自我进化技能
## 目标追踪层 (1个)
- [ ] harness-goal - 目标追踪技能
## 兜底层 (2个)
- [ ] harness-handle-failure - 失败处理技能
- [ ] harness-escalate-to-human - 人工转交技能
## 开发流程层 (2个)
- [ ] harness-brainstorm - 头脑风暴技能
- [ ] harness-plan - 计划编写技能
## 超级组合层 (不计入总数,组合技能)
- [ ] harness-auto-full-execution - 全流程自动执行技能
- [ ] harness-10x-productivity-boost - 10倍产能提效技能
Step 8: 标记 harness-init 为已完成
使用 Edit 工具更新:.EnjoyHarness/SKILL_REGISTRY.md
old_string: - [ ] harness-init - 全局初始化技能
new_string: - [x] harness-init - 全局初始化技能 ✅
Step 9: 记录初始化事件
使用 Edit 工具追加内容到:.EnjoyHarness/EVENT_LOG.md
追加内容:
INIT_TIME_PLACEHOLDER | SKILL_START | harness-init | 系统初始化开始 | SUCCESS
INIT_TIME_PLACEHOLDER | SKILL_COMPLETE | harness-init | 系统初始化完成 | SUCCESS
Step 10: 更新事件计数
使用 Edit 工具更新:.EnjoyHarness/EVENT_LOG.md
old_string: total_events: 0
new_string: total_events: 2
Step 11: 更新全局状态
使用 Edit 工具更新:.EnjoyHarness/GLOBAL_STATE.md
将 INIT_TIME_PLACEHOLDER 替换为实际时间戳(使用 Bash 获取)
Step 11.5: 注入用户身份信息到 Claude 入口文件
使用 Bash 读取配置或 git identity:
CONFIG_FILE="$(pwd)/.EnjoyHarness/CONFIG.md"
USER_NAME="$(grep -m1 '^user_name:' "$CONFIG_FILE" 2>/dev/null | sed 's/user_name: *//' | tr -d '"' | tr -d "'" )"
USER_PHONE="$(grep -m1 '^user_phone:' "$CONFIG_FILE" 2>/dev/null | sed 's/user_phone: *//' | tr -d '"' | tr -d "'" )"
USER_EMAIL="$(grep -m1 '^user_email:' "$CONFIG_FILE" 2>/dev/null | sed 's/user_email: *//' | tr -d '"' | tr -d "'" )"
if [ -z "$USER_NAME" ]; then
USER_NAME="$(git config user.name 2>/dev/null || true)"
fi
if [ -z "$USER_EMAIL" ]; then
USER_EMAIL="$(git config user.email 2>/dev/null || true)"
fi
注入规则:
- 优先使用当前项目
.EnjoyHarness/CONFIG.md 中的 user_name / user_phone / user_email
- 如果
user_name 或 user_email 为空,回退到 git config user.name / git config user.email
user_phone 可选,未配置时写入“未配置”或省略该行
- 更新
AGENT.md、CLAUDE.md(以及仓库内等价的代理说明文件)顶部身份块,但不要删除原有内容
写入内容示例:
## first
call me {USER_NAME}
git提交身份信息:
username:{USER_NAME}
phone:{USER_PHONE_OR_未配置}
email:{USER_EMAIL}
如果 AGENT.md 或 CLAUDE.md 不存在,则创建并写入上述身份块;如果存在,则仅更新身份块,不改动后续正文。
如果当前项目刚从零开始接入,优先先执行 scripts/start-auto.sh --root "$(pwd)";它会自动判断是否需要先 bootstrap、启动守护进程、触发 tmux 交接,再继续初始化。
Step 12: 自动启动会话守护进程与 tmux 入口
使用 Bash 工具执行:
if [ -x "scripts/start-auto.sh" ]; then
echo ""
echo "🔄 自动启动 EnjoyHarness 统一入口..."
scripts/start-auto.sh --root "$(pwd)"
else
echo ""
echo "⚠️ 未找到 scripts/start-auto.sh,回退到守护进程直启模式"
if [ -f "scripts/harness-daemon.sh" ]; then
chmod +x scripts/harness-daemon.sh
chmod +x scripts/start-daemon.sh
chmod +x scripts/stop-daemon.sh
chmod +x scripts/daemon-status.sh
chmod +x scripts/harness-orchestrator.sh
chmod +x scripts/tmux-handoff-manager.sh
chmod +x scripts/tmux-session-bootstrap.sh
chmod +x scripts/tmux-attach.sh
chmod +x scripts/tmux-resume.sh
scripts/start-daemon.sh
else
echo "⚠️ 未找到守护进程脚本,跳过自动启动"
echo " 如需启用会话自动切换功能,请确保 scripts/harness-daemon.sh 存在"
fi
fi
Step 13: 输出完成信息
使用 Bash 工具输出:
echo ""
echo "✅ EnjoyHarness 初始化完成!"
echo ""
echo "📋 核心文件:"
echo " - 技能注册表: .EnjoyHarness/SKILL_REGISTRY.md"
echo " - 全局状态: .EnjoyHarness/GLOBAL_STATE.md"
echo " - 事件总线: .EnjoyHarness/EVENT_LOG.md"
echo " - 迭代计数器: .EnjoyHarness/ITERATION_COUNTER.md"
echo ""
echo "🎯 下一步:"
echo " 运行 harness-build-core-manifest 完成核心规则构建"
echo ""
成功标准
失败兜底
- Git 仓库不存在 → 终止执行,提示用户先初始化 Git
- Manifest 文件不存在 → 自动自举创建,若创建失败再终止执行
联动关系
- 自动触发: harness-build-core-manifest
迭代计数
本技能执行预计迭代次数: 约 12 次(Write 4次 + Edit 6次 + Bash 2次)
测试用例
测试 1: Git 仓库检查
输入: 在非 Git 目录运行
期望输出: 错误提示"当前目录不是 Git 仓库"
验证方式: 手动在临时目录测试
测试 2: 核心文件创建
输入: 执行 harness-init
期望输出:
- EnjoyHarness_MANIFEST.md 存在
- .EnjoyHarness/ 目录存在
- GLOBAL_STATE.md 文件存在
- EVENT_LOG.md 文件存在
- ITERATION_COUNTER.md 文件存在
- SKILL_REGISTRY.md 文件存在
验证方式:
ls -la .EnjoyHarness/
测试 3: 技能注册表完整性
输入: 读取 .EnjoyHarness/SKILL_REGISTRY.md
期望输出: 包含 18 个技能
验证方式: grep -c "harness-" .EnjoyHarness/SKILL_REGISTRY.md
测试 4: 迭代计数器初始化
输入: 读取 .EnjoyHarness/ITERATION_COUNTER.md
期望输出: current_iteration: 0, max_iterations: 100
验证方式: cat .EnjoyHarness/ITERATION_COUNTER.md
测试 5: 事件日志记录
输入: 读取 .EnjoyHarness/EVENT_LOG.md
期望输出: 包含 harness-init 启动和完成事件
验证方式: grep "harness-init" .EnjoyHarness/EVENT_LOG.md
测试 6: 入口文件身份注入
输入: 执行 harness-init 后读取 AGENT.md / CLAUDE.md
期望输出: 顶部包含用户身份块
验证方式: grep -n "call me" AGENT.md CLAUDE.md
自动守护进程启动说明
核心机制
当harness-init执行时,会自动启动会话守护进程:
- ✅ 检测scripts/harness-daemon.sh是否存在
- ✅ 自动赋予执行权限
- ✅ 后台启动守护进程
- ✅ 记录PID到.EnjoyHarness/DAEMON_PID
- ✅ 记录启动事件到EVENT_LOG.md
- ✅ 初始化 tmux 会话状态文件与交接锁
守护进程功能
- 每5秒检测一次交接文件(.EnjoyHarness/NEXT_SESSION_PROMPT.md)
- 每2个任务自动切换会话(默认阈值)
- 通过 tmux 创建新会话并等待 ACK
- 防止上下文超载
- 自动启动新会话继续执行
用户无需手动操作
启动流程:
用户触发harness技能
↓
harness-init自动执行
↓
自动启动守护进程
↓
开始执行任务(全自动)
↓
每完成2个任务
↓
自动创建交接文件
↓
守护进程自动启动新会话
↓
新会话自动继续执行
整个过程完全自动,用户无需执行任何手动命令!