# Harness Init

> EnjoyHarness 唯一强制入口，初始化全局状态、文件体系、技能注册表

- Skill: `konglong87/harness-init` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add konglong87/harness-init`
- Raw SKILL.md: https://api.skillmd.com/api/skills/konglong87/harness-init/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: konglong87 (https://skillmd.com/u/konglong87)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/konglong87/harness-init

---


# harness-init 全局初始化技能

## 核心能力
1. 检查 Git 仓库是否存在
2. 自举创建核心文件体系与基础入口文件
3. 初始化全局状态
4. 初始化迭代计数器
5. 注册所有技能
6. **自动启动会话守护进程（防止上下文超载）**
7. **初始化 tmux 交接状态文件与启动器脚本**
8. **自动启动事件编排器（消费 TRIGGER_DOWNSTREAM 事件）**
9. **遵循目录放置策略，不随意创建根目录**

## 前置条件
- Git 仓库已初始化

## 执行步骤

### Step 1: 检查 Git 仓库

使用 Bash 工具执行：

```bash
if [ ! -d .git ]; then
  echo "❌ 错误: 当前目录不是 Git 仓库"
  echo "💡 请先运行: git init"
  exit 1
fi

echo "✅ Git 仓库检查通过"
```

### Step 2: 检查或创建 Manifest 文件

使用 Bash 工具执行：

```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装上工业级「自动驾驶操作系统」，解决落地稳定性、可控性、可复用性核心痛点
---

# EnjoyHarness 全局 Manifest

## 核心定位
给AI Agent装上工业级「自动驾驶操作系统」，打造不随模型迭代淘汰的工程化超级能力

## 技能总数
18个核心技能（Markdown 定义 + 运行层 Shell 编排）

## 唯一启动入口
必须先执行 `harness-init` 初始化技能，才可调用其他所有技能
EOF
  fi
fi

echo "✅ Manifest 文件检查通过"
```

### Step 3: 创建核心目录

使用 Bash 工具执行：

```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`

```bash
INIT_TIME=$(date -Iseconds)
echo "初始化时间: $INIT_TIME"
```

内容：

```markdown
---
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`

内容：

```markdown
---
created_at: INIT_TIME_PLACEHOLDER
total_events: 0
---

# EnjoyHarness 事件总线

## 事件记录格式
时间 | 事件类型 | 触发技能 | 详情 | 结果

## 最新事件
初始化完成，等待第一个事件...
```

### Step 6: 初始化迭代计数器

使用 Write 工具创建文件：`.EnjoyHarness/ITERATION_COUNTER.md`

内容：

```markdown
---
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`

内容：

```markdown
---
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`

追加内容：

```markdown
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：

```bash
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`（以及仓库内等价的代理说明文件）顶部身份块，但不要删除原有内容

写入内容示例：
```markdown
## 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 工具执行：

```bash
# 优先使用统一自动入口，它会自动判断是否需要 bootstrap、daemon、tmux launch
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 工具输出：

```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 ""
```

## 成功标准
- [ ] 核心目录创建完成
- [ ] EnjoyHarness_MANIFEST.md 已创建或验证存在
- [ ] 全局状态文件存在
- [ ] 迭代计数器文件存在
- [ ] 技能注册表包含18个技能
- [ ] AGENT.md 和 CLAUDE.md 顶部身份块已写入
- [ ] harness-init 已标记为完成

## 失败兜底
- 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个任务
    ↓
自动创建交接文件
    ↓
守护进程自动启动新会话
    ↓
新会话自动继续执行
```

整个过程完全自动，用户无需执行任何手动命令！

