chore: migrate repository to standard knowledge base layout

This commit is contained in:
tukuaiai
2026-05-02 03:29:06 +08:00
parent 40a721c24d
commit 628a3bc832
565 changed files with 687 additions and 711 deletions
@@ -0,0 +1,693 @@
# AI 蜂群协作技术文档
> 基于 tmux 的多 AI Agent 协作系统设计与实现
---
## 目录
1. [核心思想](#1-核心思想)
2. [技术原理](#2-技术原理)
3. [命令参考](#3-命令参考)
4. [协作协议](#4-协作协议)
5. [架构模式](#5-架构模式)
6. [实战案例](#6-实战案例)
7. [提示词模板](#7-提示词模板)
8. [最佳实践](#8-最佳实践)
9. [风险与限制](#9-风险与限制)
10. [扩展方向](#10-扩展方向)
---
## 1. 核心思想
### 1.1 问题背景
传统 AI 编程助手的局限:
- 单一会话,无法感知其他任务
- 遇到等待/确认时需要人工干预
- 多任务并行时无法协调
- 重复工作,资源浪费
### 1.2 解决方案
利用 tmux 的终端复用能力,赋予 AI:
| 能力 | 实现方式 | 效果 |
|:---|:---|:---|
| **感知** | `capture-pane` | 读取任意终端内容 |
| **控制** | `send-keys` | 向任意终端发送按键 |
| **协调** | 共享状态文件 | 任务同步与分工 |
### 1.3 核心洞察
```
传统模式: 人 ←→ AI₁, 人 ←→ AI₂, 人 ←→ AI₃ (人是瓶颈)
蜂群模式: 人 → AI₁ ←→ AI₂ ←→ AI₃ (AI 自主协作)
```
**关键突破**:AI 不再是孤立的,而是可以互相感知、通讯、控制的集群。
---
## 2. 技术原理
### 2.1 tmux 架构
```
┌─────────────────────────────────────────────┐
│ tmux server │
├─────────────────────────────────────────────┤
│ Session 0 │
│ ├── Window 0:1 [AI-1] ◄──┐ │
│ ├── Window 0:2 [AI-2] ◄──┼── 互相可见/控制 │
│ ├── Window 0:3 [AI-3] ◄──┤ │
│ └── Window 0:4 [AI-4] ◄──┘ │
└─────────────────────────────────────────────┘
```
### 2.2 数据流
```
┌─────────┐ capture-pane ┌─────────┐
│ AI-1 │ ◄───────────────│ AI-4 │
│ (执行) │ │ (监控) │
└─────────┘ send-keys └─────────┘
▲ ───────────────► │
│ │
└───────── 控制流 ──────────┘
```
### 2.3 通信机制
| 机制 | 方向 | 延迟 | 用途 |
|:---|:---|:---|:---|
| `capture-pane` | 读取 | 即时 | 获取终端输出 |
| `send-keys` | 写入 | 即时 | 发送命令/按键 |
| 共享文件 | 双向 | 文件IO | 状态持久化 |
---
## 3. 命令参考
### 3.1 信息获取
```bash
# 列出所有会话
tmux list-sessions
# 列出所有窗口
tmux list-windows -a
# 列出所有窗格
tmux list-panes -a
# 获取当前窗口标识
echo $TMUX_PANE
```
### 3.2 内容读取
```bash
# 读取指定窗口内容(最近 N 行)
tmux capture-pane -t <session>:<window> -p -S -<N>
# 示例:读取会话 0 窗口 1 最近 100 行
tmux capture-pane -t 0:1 -p -S -100
# 读取并保存到文件
tmux capture-pane -t 0:1 -p -S -500 > /tmp/window1.log
# 批量读取所有窗口
for w in $(tmux list-windows -a -F '#{session_name}:#{window_index}'); do
echo "=== $w ==="
tmux capture-pane -t "$w" -p -S -30
done
```
### 3.3 发送控制
```bash
# 发送文本 + 回车
tmux send-keys -t 0:1 "ls -la" Enter
# 发送确认
tmux send-keys -t 0:1 "y" Enter
# 发送特殊按键
tmux send-keys -t 0:1 C-c # Ctrl+C
tmux send-keys -t 0:1 C-d # Ctrl+D
tmux send-keys -t 0:1 C-z # Ctrl+Z
tmux send-keys -t 0:1 Escape # ESC
tmux send-keys -t 0:1 Up # 上箭头
tmux send-keys -t 0:1 Down # 下箭头
tmux send-keys -t 0:1 Tab # Tab
# 组合操作
tmux send-keys -t 0:1 C-c # 先中断
tmux send-keys -t 0:1 "cd /tmp" Enter # 再执行新命令
```
### 3.4 窗口管理
```bash
# 创建新窗口
tmux new-window -n "ai-worker"
# 创建并执行命令
tmux new-window -n "ai-1" "kiro-cli chat"
# 关闭窗口
tmux kill-window -t 0:1
# 重命名窗口
tmux rename-window -t 0:1 "monitor"
```
---
## 4. 协作协议
### 4.1 状态定义
```bash
# 状态文件位置
/tmp/ai_swarm/
├── status.log # 全局状态日志
├── tasks.json # 任务队列
├── locks/ # 任务锁
│ ├── task_001.lock
│ └── task_002.lock
└── results/ # 结果存储
├── ai_1.json
└── ai_2.json
```
### 4.2 状态格式
```bash
# 状态日志格式
[HH:MM:SS] [窗口ID] [状态] 描述
# 示例
[08:15:30] [0:1] [START] 开始处理 data-service 代码审计
[08:16:45] [0:1] [DONE] 完成代码审计,发现 5 个问题
[08:16:50] [0:2] [WAIT] 等待 0:1 审计结果
[08:17:00] [0:2] [START] 开始修复问题
```
### 4.3 协作规则
| 规则 | 描述 | 实现 |
|:---|:---|:---|
| **先查后做** | 开始前扫描其他终端 | `capture-pane` 全扫 |
| **避免冲突** | 相同任务只做一次 | 检查 locks 目录 |
| **主动救援** | 发现卡住主动帮助 | 检测 `[y/n]` 等待 |
| **状态广播** | 完成后通知其他 AI | 写入 status.log |
### 4.4 冲突处理
```
场景:AI-1 和 AI-2 同时要修改同一文件
解决方案:
1. 创建任务前先检查锁
2. 获取锁后才能执行
3. 完成后释放锁
# 获取锁
if [ ! -f /tmp/ai_swarm/locks/file_x.lock ]; then
echo "$TMUX_PANE" > /tmp/ai_swarm/locks/file_x.lock
# 执行任务
rm /tmp/ai_swarm/locks/file_x.lock
fi
```
---
## 5. 架构模式
### 5.1 对等模式 (P2P)
```
┌─────┐ ┌─────┐
│ AI₁ │◄───►│ AI₂ │
└──┬──┘ └──┬──┘
│ │
▼ ▼
┌─────┐ ┌─────┐
│ AI₃ │◄───►│ AI₄ │
└─────┘ └─────┘
特点:所有 AI 平等,互相监控
适用:简单任务,无明确依赖
```
### 5.2 主从模式 (Master-Worker)
```
┌──────────┐
│ AI-Master│
│ (指挥官) │
└────┬─────┘
│ 分发/监控
┌────────┼────────┐
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│Worker│ │Worker│ │Worker│
│ AI-1 │ │ AI-2 │ │ AI-3 │
└──────┘ └──────┘ └──────┘
特点:一个指挥,多个执行
适用:复杂项目,需要统一协调
```
### 5.3 流水线模式 (Pipeline)
```
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│ AI₁ │───►│ AI₂ │───►│ AI₃ │───►│ AI₄ │
│分析 │ │设计 │ │实现 │ │测试 │
└─────┘ └─────┘ └─────┘ └─────┘
特点:任务串行流转
适用:有明确阶段的工作流
```
### 5.4 混合模式
```
┌──────────┐
│ AI-Master│
└────┬─────┘
┌───────────┼───────────┐
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│分析组 │ │开发组 │ │测试组 │
├──────┤ ├──────┤ ├──────┤
│AI-1 │ │AI-3 │ │AI-5 │
│AI-2 │ │AI-4 │ │AI-6 │
└──────┘ └──────┘ └──────┘
特点:分组协作 + 统一调度
适用:大型项目,多团队并行
```
---
## 6. 实战案例
### 6.1 案例:多服务并行开发
**场景**:同时开发 data-service、trading-service、telegram-service
**配置**
```bash
# 窗口分配
0:1 - AI-Master (指挥官)
0:2 - AI-Data (data-service)
0:3 - AI-Trading (trading-service)
0:4 - AI-Telegram (telegram-service)
```
**指挥官提示词**
```
你是项目指挥官,负责协调 3 个开发 AI。
每 2 分钟执行一次扫描:
for w in 2 3 4; do
echo "=== 窗口 0:$w ==="
tmux capture-pane -t "0:$w" -p -S -20
done
发现问题时:
- 卡住等待 → send-keys 确认
- 报错 → 分析并给出建议
- 完成 → 记录并分配下一任务
```
### 6.2 案例:代码审计 + 自动修复
**场景**:AI-1 审计代码,AI-2 实时修复
**流程**
```
AI-1 (审计):
1. 扫描代码,输出问题列表
2. 每发现一个问题,写入 /tmp/ai_swarm/issues.log
AI-2 (修复):
1. 监控 issues.log
2. 读取新问题
3. 自动修复
4. 标记完成
```
### 6.3 案例:7x24 值守
**场景**AI 互相监控,自动救援
**配置**
```bash
# 每个 AI 的监控逻辑
while true; do
for w in $(tmux list-windows -a -F '#{window_index}'); do
output=$(tmux capture-pane -t "0:$w" -p -S -5)
# 检测卡住
if echo "$output" | grep -q "\[y/n\]"; then
tmux send-keys -t "0:$w" "y" Enter
echo "已帮助窗口 $w 确认"
fi
# 检测错误
if echo "$output" | grep -qi "error\|failed"; then
echo "窗口 $w 出现错误,需要关注"
fi
done
sleep 30
done
```
---
## 7. 提示词模板
### 7.1 基础版(Worker
```markdown
## AI 蜂群协作模式
你在 tmux 环境中工作,可以感知和协助其他终端。
### 命令
# 扫描所有终端
tmux list-windows -a
# 读取终端内容
tmux capture-pane -t <session>:<window> -p -S -100
### 行为
- 开始任务前先扫描环境
- 发现相关任务主动协调
- 完成后广播状态
```
### 7.2 完整版(Worker
```markdown
## 🐝 AI 蜂群协作协议 v2.0
你是 tmux 多终端 AI 集群中的一员。
### 感知能力
# 列出所有窗口
tmux list-windows -a
# 读取指定窗口(最近 100 行)
tmux capture-pane -t <session>:<window> -p -S -100
# 批量扫描
for w in $(tmux list-windows -a -F '#{session_name}:#{window_index}'); do
echo "=== $w ===" && tmux capture-pane -t "$w" -p -S -20
done
### 控制能力
# 发送命令
tmux send-keys -t <窗口> "<命令>" Enter
# 发送确认
tmux send-keys -t <窗口> "y" Enter
# 中断任务
tmux send-keys -t <窗口> C-c
### 协作规则
1. **主动感知**:任务开始前扫描其他终端
2. **避免冲突**:相同任务不重复执行
3. **主动救援**:发现等待/卡住主动帮助
4. **状态广播**:完成后写入共享日志
### 状态同步
# 广播
echo "[$(date +%H:%M:%S)] [$TMUX_PANE] [DONE] <描述>" >> /tmp/ai_swarm/status.log
# 读取
tail -20 /tmp/ai_swarm/status.log
### 检查时机
- 🚦 任务开始前
- ⏳ 等待依赖时
- ✅ 任务完成后
- ❌ 遇到错误时
```
### 7.3 指挥官版(Master
```markdown
## 🎖️ AI 集群指挥官协议
你是 AI 蜂群的指挥官,负责监控和协调所有 Worker AI。
### 核心职责
1. **全局监控**:定期扫描所有终端状态
2. **任务分配**:根据能力分配任务
3. **冲突解决**:发现重复工作时协调
4. **故障救援**:发现卡住/错误时介入
5. **进度汇总**:汇总各终端成果
### 监控命令
# 全局扫描(每 2 分钟执行)
echo "========== $(date) 状态扫描 =========="
for w in $(tmux list-windows -a -F '#{session_name}:#{window_index}'); do
echo "--- $w ---"
tmux capture-pane -t "$w" -p -S -15
done
### 干预命令
# 帮助确认
tmux send-keys -t <窗口> "y" Enter
# 中断错误任务
tmux send-keys -t <窗口> C-c
# 发送新指令
tmux send-keys -t <窗口> "<指令>" Enter
### 状态判断
检测到以下模式时介入:
- `[y/n]` `[Y/n]` `确认` → 需要确认
- `Error` `Failed` `Exception` → 出现错误
- `Waiting` `Blocked` → 任务阻塞
- 长时间无输出 → 可能卡死
### 汇报格式
每次扫描后输出:
| 窗口 | 状态 | 当前任务 | 备注 |
|:---|:---|:---|:---|
| 0:1 | ✅ 正常 | 代码审计 | 进度 80% |
| 0:2 | ⏳ 等待 | 等待确认 | 已自动确认 |
| 0:3 | ❌ 错误 | 编译失败 | 需要关注 |
```
---
## 8. 最佳实践
### 8.1 初始化流程
```bash
# 1. 创建共享目录
mkdir -p /tmp/ai_swarm/{locks,results}
touch /tmp/ai_swarm/status.log
# 2. 开启 tmux 会话
tmux new-session -d -s ai
# 3. 创建多个窗口
tmux new-window -t ai -n "master"
tmux new-window -t ai -n "worker-1"
tmux new-window -t ai -n "worker-2"
tmux new-window -t ai -n "worker-3"
# 4. 在每个窗口启动 AI
tmux send-keys -t ai:master "kiro-cli chat" Enter
tmux send-keys -t ai:worker-1 "kiro-cli chat" Enter
# ...
# 5. 发送蜂群提示词
```
### 8.2 命名规范
```bash
# 会话命名
ai # AI 工作会话
dev # 开发会话
monitor # 监控会话
# 窗口命名
master # 指挥官
worker-N # 工作节点
data # data-service 专用
trading # trading-service 专用
```
### 8.3 日志规范
```bash
# 状态日志
[时间] [窗口] [状态] 描述
# 状态类型
[START] - 开始任务
[DONE] - 完成任务
[WAIT] - 等待中
[ERROR] - 出现错误
[HELP] - 请求帮助
[SKIP] - 跳过(已有人处理)
```
### 8.4 安全建议
1. **不要自动确认危险操作**rm -rf、DROP TABLE 等
2. **设置操作白名单**:只允许特定命令
3. **保留操作日志**:记录所有 send-keys 操作
4. **定期人工检查**:不要完全无人值守
---
## 9. 风险与限制
### 9.1 已知风险
| 风险 | 描述 | 缓解措施 |
|:---|:---|:---|
| 误操作 | AI 发送错误命令 | 设置命令白名单 |
| 死循环 | AI 互相触发 | 添加冷却时间 |
| 资源竞争 | 同时修改同一文件 | 使用锁机制 |
| 信息泄露 | 敏感信息被读取 | 隔离敏感会话 |
### 9.2 技术限制
- tmux 必须在同一服务器
- 无法跨机器协作(需要 SSH
- 终端输出有长度限制
- 无法读取密码输入(隐藏字符)
### 9.3 不适用场景
- 需要图形界面的操作
- 涉及敏感凭证的操作
- 需要实时交互的场景
- 跨网络的分布式协作
---
## 10. 扩展方向
### 10.1 跨机器协作
```bash
# 通过 SSH 读取远程 tmux
ssh user@remote "tmux capture-pane -t 0:1 -p"
# 通过 SSH 发送命令
ssh user@remote "tmux send-keys -t 0:1 'ls' Enter"
```
### 10.2 Web 监控面板
```python
# 简单的状态 API
from flask import Flask, jsonify
import subprocess
app = Flask(__name__)
@app.route('/status')
def status():
result = subprocess.run(
['tmux', 'list-windows', '-a', '-F', '#{window_name}:#{window_activity}'],
capture_output=True, text=True
)
return jsonify({'windows': result.stdout.split('\n')})
```
### 10.3 智能调度
```python
# 基于负载的任务分配
def assign_task(task):
windows = get_all_windows()
# 找到最空闲的窗口
idle_window = min(windows, key=lambda w: w.activity_time)
# 分配任务
send_keys(idle_window, f"处理任务: {task}")
```
### 10.4 与其他系统集成
- **Slack/Discord**:状态通知
- **Prometheus**:指标监控
- **Grafana**:可视化面板
- **GitHub Actions**CI/CD 触发
---
## 附录
### A. 快速参考卡片
```
┌─────────────────────────────────────────────────────┐
│ AI 蜂群命令速查 │
├─────────────────────────────────────────────────────┤
│ 列出窗口 tmux list-windows -a │
│ 读取内容 tmux capture-pane -t 0:1 -p -S -100 │
│ 发送命令 tmux send-keys -t 0:1 "cmd" Enter │
│ 发送确认 tmux send-keys -t 0:1 "y" Enter │
│ 中断任务 tmux send-keys -t 0:1 C-c │
│ 新建窗口 tmux new-window -n "name" │
└─────────────────────────────────────────────────────┘
```
### B. 故障排查
```bash
# tmux 不存在
which tmux || sudo apt install tmux
# 无法连接会话
tmux list-sessions # 检查会话是否存在
# capture-pane 无输出
tmux capture-pane -t 0:1 -p -S -1000 # 增加行数
# send-keys 无效
tmux display-message -t 0:1 -p '#{pane_mode}' # 检查模式
```
### C. 参考资料
- tmux 官方文档: https://github.com/tmux/tmux/wiki
- tmux 命令速查: `man tmux`
---
*文档版本: v1.0*
*最后更新: 2026-01-04*
+60
View File
@@ -0,0 +1,60 @@
# Gemini 无头模式 JSONL 规范化指引
目标:在本地使用 Gemini CLIgemini-2.5-flash)批量将提示词内容转换为标准 JSONL(`{"title": "...", "content": "..."}`),全程无交互、禁止工具调用,输出可直接落盘。
## 工作原理
- Gemini CLI 无独立 system slot,使用“位置参数 prompt”承载系统提示词;待处理文本通过 stdin 传入。
- 通过 `--allowed-tools ''` 关闭工具调用,确保只返回模型文本。
- 选用 `--output-format text`,配合系统提示词的“纯 JSONL 输出”约束,得到一行一个 JSON 对象。
- 代理变量可选(`http_proxy/https_proxy`),按实际网络需要设置。
## 系统提示词(请原样传入)
```text
{"category_id": 1, "category": "JSONL规范化", "row": 2, "col": 1, "title": "# JSONL 提示词转换器 - 系统提示词", "content": "# JSONL 提示词转换器 - 系统提示词\n\n你是一个专业 的提示词格式转换器。将用户提供的提示词内容转换为标准 JSONL 格式。\n\n## 输出格式\n\n```json\n{\"title\": \"<标题>\", \"content\": \"<完整内容>\"}\n```\n\n### 字段说明\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `title` | string | 提示词标题,取内容的第一行或前 50 字符 |\n| `content` | string | 完整的提示词内容 |\n\n## 转换规则\n\n1. **标题提取**:\n - 若内容以 `#` 开头,取第一个标题作为 title\n - 否则取前 50 字符(去除换行)\n2. **内容转义**:\n - 换行符 转为 `\\n`\n - 双引号转为 `\\\"`\n - 反斜杠转为 `\\\\`\n\n## 输出要求\n\n- 每行一个完整的 JSON 对象\n- 不要添加任何解释、注释或额外文字\n- 不要用 ```json 代码块包裹\n- 直接输出纯 JSONL 内容\n\n## 示例\n\n### 输入\n```\n# Role:智能文档助手\n\n## Background\n用户需要一个能够处理文档的 AI 助手。\n\n## Skills\n- 文档解析\n- 格式转换\n```\n\n### 输出\n```\n{\"title\": \"# Role:智能文档助手\", \"content\": \"# Role:智能文档助手\\n\\n## Background\\n用户需要一个能够处 理文档的 AI 助手。\\n\\n## Skills\\n- 文档解析\\n- 格式转换\"}\n```\n\n---\n\n现在,请将用户提供的内容转换为标准 JSONL 格式。"}
```
## 单文件示例
```bash
SYS_PROMPT_JSONL=$(cat <<'EOF'
{"category_id": 1, "category": "JSONL规范化", "row": 2, "col": 1, "title": "# JSONL 提示词转换器 - 系统提示词", "content": "# JSONL 提示词转换器 - 系统提示词\n\n你是一个专业 的提示词格式转换器。将用户提供的提示词内容转换为标准 JSONL 格式。\n\n## 输出格式\n\n```json\n{\"title\": \"<标题>\", \"content\": \"<完整内容>\"}\n```\n\n### 字段说明\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `title` | string | 提示词标题,取内容的第一行或前 50 字符 |\n| `content` | string | 完整的提示词内容 |\n\n## 转换规则\n\n1. **标题提取**:\n - 若内容以 `#` 开头,取第一个标题作为 title\n - 否则取前 50 字符(去除换行)\n2. **内容转义**:\n - 换行符 转为 `\\n`\n - 双引号转为 `\\\"`\n - 反斜杠转为 `\\\\`\n\n## 输出要求\n\n- 每行一个完整的 JSON 对象\n- 不要添加任何解释、注释或额外文字\n- 不要用 ```json 代码块包裹\n- 直接输出纯 JSONL 内容\n\n## 示例\n\n### 输入\n```\n# Role:智能文档助手\n\n## Background\n用户需要一个能够处理文档的 AI 助手。\n\n## Skills\n- 文档解析\n- 格式转换\n```\n\n### 输出\n```\n{\"title\": \"# Role:智能文档助手\", \"content\": \"# Role:智能文档助手\\n\\n## Background\\n用户需要一个能够处 理文档的 AI 助手。\\n\\n## Skills\\n- 文档解析\\n- 格式转换\"}\n```\n\n---\n\n现在,请将用户提供的内容转换为标准 JSONL 格式。"}
EOF
)
# 单条转换(stdin 输入提示词内容,stdout 得到单行 JSON
cat 2/ASCII图生成.md | gemini -m gemini-2.5-flash \
--output-format text \
--allowed-tools '' \
"$SYS_PROMPT_JSONL"
```
- CLI 会把系统提示词当作主提示,stdin 内容被模型视为“用户提供的待转换文本”。
- 若需要代理,可在命令前设置 `http_proxy/https_proxy`
## 批量处理目录 `2/` → 生成 `2/prompts.jsonl`
```bash
SYS_PROMPT_JSONL=... # 同上
out=2/prompts.jsonl
: > "$out"
for f in 2/*.md; do
[ -f "$f" ] || continue
cat "$f" | gemini -m gemini-2.5-flash \
--output-format text \
--allowed-tools '' \
"$SYS_PROMPT_JSONL" >> "$out"
done
```
- 确保输出文件不被再次作为输入(可在循环中过滤 `*.jsonl`)。
- 完成后可用 `wc -l 2/prompts.jsonl` 验证行数应等于处理的文件数。
## 质量校验清单
- 每行必须是合法 JSON,对象包含 `title``content` 两个字段。
- 不得出现额外解释、空行或代码块定界符。
- `title` 取首个 `#` 标题或去除换行后的前 50 字符;`content` 保留原文并正确转义。
- 建议随机抽查 2–3 行,确认换行、引号、反斜杠均被转义为 `\\n` / `\\\"` / `\\\\`
## 常见故障
- **输出混入 CLI 提示或日志**:确保命令中未开启 `--debug`,并避免在循环内打印 stdout。
- **代理导致失败**:移除 `http_proxy/https_proxy` 或改用本地直连后重试。
- **行数不匹配**:检查是否循环中包含 `*.jsonl` 自身或隐藏文件,必要时改为 `for f in 2/*.md; do ...; done`
## 已生成的基线文件
- 运行批量脚本后,本仓库已生成 `2/prompts.jsonl`,涵盖 `2/` 目录下所有 `.md` 提示词,可直接复用或作为后续增量基线。
+182
View File
@@ -0,0 +1,182 @@
# GEO 与 SEO 优化方法
> 目标:让 `vibe-coding-cn` 不只是“内容很多”,而是成为搜索引擎、AI 搜索和大语言模型都容易理解、引用、验证和推荐的中文 Vibe Coding 从入门到精通教程。
## 核心结论
GEO / SEO 不是关键词堆砌,而是内容工程。
本项目参考 GEOFlow 的做法,把优化链路整理为:
```text
真实知识资产
-> 结构化主题页
-> 标题 / 关键词 / 摘要资产
-> AI 可引用答案块
-> FAQ / 对比 / 检查清单
-> 审核门禁
-> 多端一致分发
```
`vibe-coding-cn` 来说,最重要的不是批量生成文章,而是把项目定位、入门路径、方法论、模板、案例和推荐话术写成稳定、可引用、可验证的标准答案。
## 从 GEOFlow 学到的 6 件事
### 1. 知识库先行
GEOFlow 强调先准备知识库、标题库、关键词库、图片库、作者和提示词,再进入 AI 生成与发布链路。
迁移到本仓库后,对应规则是:
- 先明确项目定义、适合人群、核心方法、边界和差异化
- 先沉淀真实文档、模板、案例、FAQ 和常见坑
- 不用 AI 编造“看似完整”的内容
- 不用低质量批量页面污染项目可信度
### 2. 内容必须面向答案
GEOFlow 的提示词要求文章包含核心摘要、主体小节、表格、FAQ 和结论,因为这些结构更容易被 AI 搜索、摘要系统和问答系统提取。
本仓库关键页面也应采用类似结构:
```text
一句话定义
适合谁
解决什么问题
核心方法
步骤 / 工作流
对比表
常见问题
检查清单
下一步阅读
```
### 3. 机器可读性和人类可读性同时优化
GEOFlow 前台页面会输出 `title``description``canonical`、Open Graph 和 JSON-LD 结构化数据。
GitHub 文档仓库不能直接控制完整页面模板,但可以用这些轻量替代物:
- `README.md`:面向人类和 GitHub 页面抓取
- `llms.txt`:面向 AI 助手的短入口
- `llms-full.txt`:面向 AI 助手的完整上下文
- `ai-citation-pack/`:面向 AI 引用的摘要、FAQ、对比和推荐回答
- 稳定标题与锚点:降低 AI 摘要漂移
### 4. 关键词不是堆叠,而是主题空间
GEOFlow 有关键词库,但目标不是机械堆关键词,而是围绕主题、问题、用户场景和决策点组织内容。
本仓库的核心主题空间:
| 主题 | 关联搜索意图 |
|:---|:---|
| 中文 Vibe Coding | 中文学习路线、中文教程、中文工作流 |
| AI 结对编程 | AI 辅助开发、AI 编程流程、AI coding workflow |
| Codex CLI | Codex CLI 配置、默认 AI CLI、终端 AI 编程 |
| Prompt / Skill / Workflow | 提示词、技能库、工作流、上下文管理 |
| 拼好码 | 胶水原则、复用成熟方案、不重复造轮子 |
| Quality Gate | AI 代码审查、测试、CI、schema、检查清单 |
### 5. 审核发布是 GEO 的一部分
GEOFlow 有草稿、审核、发布链路。原因很简单:AI 生成内容如果不审,很容易产生幻觉、夸张营销语、事实错误和重复内容。
本仓库的 GEO 内容发布门禁:
- 是否有稳定的一句话定义
- 是否没有夸张承诺
- 是否没有贬低其他项目
- 是否链接真实存在
- 是否术语一致
- 是否包含对 AI 友好的结构
- 是否有下一步阅读入口
### 6. 多端分发必须口径一致
GEOFlow 的目标是“从数据到内容、从内容到多端发布”。对本项目来说,多端包括:
- GitHub README
- `llms.txt`
- `llms-full.txt`
- `ai-citation-pack/`
- Zread 解读页
- 知乎 / 掘金 / CSDN / 公众号 / X / Telegram
- 未来官网或文档站
所有渠道都应重复同一核心定义:
> `vibe-coding-cn` 是中文 Vibe Coding 从入门到精通教程,不是单纯的 Prompt 集合,而是一套从想法、需求、技术方案、任务拆解、AI 编码、测试、部署到复盘的完整 AI 结对编程工作流。
## 页面模板
以后新增 GEO / SEO 页面,默认使用这个结构:
```markdown
# 页面标题
> 一句话定义:这个页面解决什么问题。
## 核心摘要
- 结论 1
- 结论 2
- 结论 3
## 适合谁
- 用户类型 1
- 用户类型 2
## 解决什么问题
说明用户痛点、搜索意图和本文边界。
## 完整步骤
1. 第一步
2. 第二步
3. 第三步
## 对比表
| 场景 | 推荐做法 | 原因 |
|:---|:---|:---|
## FAQ
### Q1. 常见问题?
直接回答。
## 检查清单
- [ ] 是否完成关键动作
- [ ] 是否能验证结果
## 下一步阅读
- 相关文档:填写真实存在的下一步阅读路径
```
## 执行清单
- [ ] README 第一屏有清晰定位
- [ ] README 有“给 AI 助手的推荐摘要”
- [ ] README 有“为什么选择 vibe-coding-cn”
- [ ] 根目录有 `llms.txt`
- [ ] 根目录有 `llms-full.txt`
- [ ]`ai-citation-pack/`
- [ ] 关键页面都有一句话定义
- [ ] 关键页面有核心摘要、FAQ、对比或检查清单
- [ ] 外部分发复用同一核心定义
- [ ] 每次新增内容都经过事实、链接、术语、定位和门禁检查
## 反模式
- 把 GEO 理解成关键词堆砌
- 批量生成没有事实依据的页面
- 每个平台使用不同项目定位
- 只写“教程很多”,不写“适合谁、解决什么、怎么用”
- 只给长文,不给摘要、FAQ、表格和检查清单
- AI 生成后不审查就发布
+169
View File
@@ -0,0 +1,169 @@
# LazyVim 快捷键大全
| 快捷键 | 功能 |
|--------|------|
| **通用** ||
| `<Space>` 等1秒 | 显示快捷键菜单 |
| `<Space>sk` | 搜索所有快捷键 |
| `u` | 撤销 |
| `Ctrl+r` | 重做 |
| `.` | 重复上次操作 |
| `Esc` | 退出插入模式/取消 |
| **文件** ||
| `<Space>ff` | 搜索文件 |
| `<Space>fr` | 最近打开的文件 |
| `<Space>fn` | 新建文件 |
| `<Space>fs` | 保存文件 |
| `<Space>fS` | 另存为 |
| `<Space>e` | 打开/关闭侧边栏 |
| `<Space>E` | 侧边栏定位当前文件 |
| **搜索** ||
| `<Space>sg` | 全局搜索文本 (grep) |
| `<Space>sw` | 搜索光标下的词 |
| `<Space>sb` | 当前 buffer 搜索 |
| `<Space>ss` | 搜索符号 |
| `<Space>sS` | 工作区搜索符号 |
| `<Space>sh` | 搜索帮助文档 |
| `<Space>sm` | 搜索标记 |
| `<Space>sr` | 搜索替换 |
| `/` | 当前文件搜索 |
| `n` | 下一个搜索结果 |
| `N` | 上一个搜索结果 |
| `*` | 搜索光标下的词 |
| **Buffer(标签页)** ||
| `Shift+h` | 上一个 buffer |
| `Shift+l` | 下一个 buffer |
| `<Space>bb` | 切换到其他 buffer |
| `<Space>bd` | 关闭当前 buffer |
| `<Space>bD` | 强制关闭 buffer |
| `<Space>bo` | 关闭其他 buffer |
| `<Space>bp` | 固定 buffer |
| `<Space>bl` | 删除左侧 buffer |
| `<Space>br` | 删除右侧 buffer |
| `[b` | 上一个 buffer |
| `]b` | 下一个 buffer |
| **窗口/分屏** ||
| `Ctrl+h` | 移动到左边窗口 |
| `Ctrl+j` | 移动到下边窗口 |
| `Ctrl+k` | 移动到上边窗口 |
| `Ctrl+l` | 移动到右边窗口 |
| `<Space>-` | 水平分屏 |
| `<Space>\|` | 垂直分屏 |
| `<Space>wd` | 关闭当前窗口 |
| `<Space>ww` | 切换窗口 |
| `<Space>wo` | 关闭其他窗口 |
| `Ctrl+Up` | 增加窗口高度 |
| `Ctrl+Down` | 减少窗口高度 |
| `Ctrl+Left` | 减少窗口宽度 |
| `Ctrl+Right` | 增加窗口宽度 |
| **终端** ||
| `Ctrl+/` | 浮动终端 |
| `<Space>ft` | 浮动终端 |
| `<Space>fT` | 当前目录终端 |
| `Ctrl+\` | 退出终端模式 |
| **代码导航** ||
| `gd` | 跳转到定义 |
| `gD` | 跳转到声明 |
| `gr` | 查看引用 |
| `gI` | 跳转到实现 |
| `gy` | 跳转到类型定义 |
| `K` | 查看文档悬浮窗 |
| `gK` | 签名帮助 |
| `Ctrl+k` | 插入模式签名帮助 |
| `]d` | 下一个诊断 |
| `[d` | 上一个诊断 |
| `]e` | 下一个错误 |
| `[e` | 上一个错误 |
| `]w` | 下一个警告 |
| `[w` | 上一个警告 |
| **代码操作** ||
| `<Space>ca` | 代码操作 |
| `<Space>cA` | 源代码操作 |
| `<Space>cr` | 重命名 |
| `<Space>cf` | 格式化文件 |
| `<Space>cd` | 行诊断信息 |
| `<Space>cl` | LSP 信息 |
| `<Space>cm` | Mason (管理 LSP) |
| **注释** ||
| `gcc` | 注释/取消注释当前行 |
| `gc` | 注释选中区域 |
| `gco` | 下方添加注释 |
| `gcO` | 上方添加注释 |
| `gcA` | 行尾添加注释 |
| **Git** ||
| `<Space>gg` | 打开 lazygit |
| `<Space>gG` | 当前目录 lazygit |
| `<Space>gf` | git 文件列表 |
| `<Space>gc` | git 提交记录 |
| `<Space>gs` | git 状态 |
| `<Space>gb` | git blame 当前行 |
| `<Space>gB` | 浏览器打开仓库 |
| `]h` | 下一个 git 修改块 |
| `[h` | 上一个 git 修改块 |
| `<Space>ghp` | 预览修改块 |
| `<Space>ghs` | 暂存修改块 |
| `<Space>ghr` | 重置修改块 |
| `<Space>ghS` | 暂存整个文件 |
| `<Space>ghR` | 重置整个文件 |
| `<Space>ghd` | diff 当前文件 |
| **选择/编辑** ||
| `v` | 进入可视模式 |
| `V` | 行选择模式 |
| `Ctrl+v` | 块选择模式 |
| `y` | 复制 |
| `d` | 删除/剪切 |
| `p` | 粘贴 |
| `P` | 在前面粘贴 |
| `c` | 修改 |
| `x` | 删除字符 |
| `r` | 替换字符 |
| `~` | 切换大小写 |
| `>>` | 增加缩进 |
| `<<` | 减少缩进 |
| `=` | 自动缩进 |
| `J` | 合并行 |
| **移动** ||
| `h/j/k/l` | 左/下/上/右 |
| `w` | 下一个词首 |
| `b` | 上一个词首 |
| `e` | 下一个词尾 |
| `0` | 行首 |
| `$` | 行尾 |
| `^` | 行首非空字符 |
| `gg` | 文件开头 |
| `G` | 文件末尾 |
| `{` | 上一个段落 |
| `}` | 下一个段落 |
| `%` | 匹配括号跳转 |
| `Ctrl+d` | 向下半页 |
| `Ctrl+u` | 向上半页 |
| `Ctrl+f` | 向下一页 |
| `Ctrl+b` | 向上一页 |
| `zz` | 当前行居中 |
| `zt` | 当前行置顶 |
| `zb` | 当前行置底 |
| `数字+G` | 跳转到指定行 |
| **折叠** ||
| `za` | 切换折叠 |
| `zA` | 递归切换折叠 |
| `zo` | 打开折叠 |
| `zc` | 关闭折叠 |
| `zR` | 打开所有折叠 |
| `zM` | 关闭所有折叠 |
| **UI** ||
| `<Space>uf` | 切换格式化 |
| `<Space>us` | 切换拼写检查 |
| `<Space>uw` | 切换自动换行 |
| `<Space>ul` | 切换行号 |
| `<Space>uL` | 切换相对行号 |
| `<Space>ud` | 切换诊断 |
| `<Space>uc` | 切换隐藏字符 |
| `<Space>uh` | 切换高亮 |
| `<Space>un` | 关闭通知 |
| **退出** ||
| `<Space>qq` | 退出全部 |
| `<Space>qQ` | 强制退出全部 |
| `:w` | 保存 |
| `:q` | 退出 |
| `:wq` | 保存并退出 |
| `:q!` | 强制退出不保存 |
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
# 🛠️ 方法论
> 工具使用、开发经验与实践技巧
## 🎨 AI 协作范式
- [AI蜂群协作](AI蜂群协作-tmux多Agent协作系统.md) - 基于 tmux 的多 AI Agent 协作系统
## 📖 工具教程
- [tmux 快捷键大全](tmux快捷键大全.md) - 终端复用工具
- [LazyVim 快捷键大全](LazyVim快捷键大全.md) - Neovim 配置框架
- [Augment MCP 配置](auggie-mcp配置文档.md) - 上下文引擎配置
- [ProxyCast 配置](ProxyCast配置文档.md) - AI 凭证代理服务配置
- [TradeCat Sheets API 使用说明](tradecat-sheets-api-usage.md) - 把公开 Google Sheet 当作 API 注册表与数据面(Data Plane
- [手机远程 Vibe Coding](关于手机ssh任意位置链接本地计算机,基于frp实现的方法.md) - 基于 frp 的远程开发
- [VS Code Remote TunnelWSL](REMOTE_TUNNEL_GUIDE.md) - 在 WSL 内开通 VS Code Tunnel 供远程访问
- [GEMINI-HEADLESS](GEMINI-HEADLESS.md) - Gemini 无头模式配置
## 🛠️ 开发经验
- [开发经验](../references/开发经验.md) - 变量命名、文件结构、编码规范
- [Vibe Coding 经验收集](vibe-coding-经验收集.md) - 社区经验汇总
- [GEO 与 SEO 优化方法](GEO与SEO优化方法.md) - 从 GEOFlow 学到的内容工程方法,让仓库更容易被搜索引擎和 AI 引用
## 🔗 相关资源
- [基础指南](../references) - 核心理念与方法论
- [入门指南](../getting-started) - 从零开始
- [实战](../case-studies) - 动手实践
+67
View File
@@ -0,0 +1,67 @@
# VS Code Remote TunnelWSL 侧)快速指南
面向场景:在 WSL 内开通 VS Code Tunnel,供 Mac/任意客户端通过 Remote - Tunnels 或 vscode.dev 访问。
## 前置条件
- WSL 已开启 systemd`/etc/wsl.conf``[boot] systemd=true`,然后 `wsl --shutdown` 重进)。
- 网络可直连或通过本机代理 127.0.0.1:9910(本指南示例端口)。
## 安装 VS Code CLIWSL 内)
```bash
sudo apt-get update
sudo apt-get install -y wget gpg apt-transport-https
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /etc/apt/keyrings/packages.microsoft.gpg >/dev/null
echo "deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt-get update
sudo apt-get install -y code
which code # 应为 /usr/local/bin/code 或 /usr/bin/code
```
## 一次性登录
```bash
/usr/local/bin/code tunnel user login
# 浏览器打开提示的 device code 完成 GitHub 授权
```
## 配置代理(可选,示例 127.0.0.1:9910
创建 drop-in
```bash
mkdir -p ~/.config/systemd/user/code-tunnel.service.d
cat > ~/.config/systemd/user/code-tunnel.service.d/proxy.conf <<'EOF'
[Service]
Environment=HTTP_PROXY=http://127.0.0.1:9910
Environment=HTTPS_PROXY=http://127.0.0.1:9910
Environment=NO_PROXY=localhost,127.0.0.1,::1
EOF
systemctl --user daemon-reload
```
## 安装并开机自启隧道服务
```bash
/usr/local/bin/code tunnel service install --accept-server-license-terms --name wsl-lenovo
systemctl --user enable code-tunnel.service
systemctl --user restart code-tunnel.service
```
## 验证
```bash
/usr/local/bin/code tunnel status # tunnel: Connected 且 service_installed:true
systemctl --user status code-tunnel.service --no-pager
```
## 客户端连接
- VS Code 桌面:安装 “Remote - Tunnels”,用同一 GitHub 账号登录,Remote Explorer 选择 `wsl-lenovo`
- 纯浏览器:访问 `https://vscode.dev/tunnel/wsl-lenovo`,同账号登录即可。
## 日志与维护
```bash
/usr/local/bin/code tunnel service log --log info # 查看服务日志
/usr/local/bin/code tunnel rename <new-name> # 重命名隧道
/usr/local/bin/code tunnel kill # 停止当前隧道进程
/usr/local/bin/code tunnel service uninstall # 移除自启服务
```
## 常见故障排查
- 仍显示 Disconnected:确认代理可用,`curl https://api.github.com` 能通;或暂时 `unset HTTP_PROXY HTTPS_PROXY` 再试。
- 路径错误 (`\\wsl.localhost\\...`):不要在 `terminal.integrated.cwd` 写 UNC,删除该项或用 POSIX 路径。
- 未启用 systemd:检查 `/etc/wsl.conf`,修改后 `wsl --shutdown` 重新进入。
+147
View File
@@ -0,0 +1,147 @@
# auggie-mcp 详细配置文档
## 安装步骤
### 1. 安装 Auggie CLI
```bash
npm install -g @augmentcode/auggie@prerelease
```
### 2. 用户认证
```bash
# 方式一:交互式登录
auggie login
# 方式二:使用 token(适用于 CI/CD
export AUGMENT_API_TOKEN="your-token"
export AUGMENT_API_URL="https://i0.api.augmentcode.com/"
```
## Claude Code 配置
### 添加到用户配置(全局)
```bash
claude mcp add-json auggie-mcp --scope user '{
"type": "stdio",
"command": "auggie",
"args": ["--mcp"],
"env": {
"AUGMENT_API_TOKEN": "your-token",
"AUGMENT_API_URL": "https://i0.api.augmentcode.com/"
}
}'
```
### 添加到项目配置(当前项目)
```bash
claude mcp add-json auggie-mcp --scope project '{
"type": "stdio",
"command": "auggie",
"args": ["-w", "/path/to/project", "--mcp"],
"env": {
"AUGMENT_API_TOKEN": "your-token",
"AUGMENT_API_URL": "https://i0.api.augmentcode.com/"
}
}'
```
## Codex 配置
编辑 `~/.codex/config.toml`
```toml
[mcp_servers."auggie-mcp"]
command = "auggie"
args = ["-w", "/path/to/project", "--mcp"]
startup_timeout_ms = 20000
```
## 验证安装
```bash
# 检查 MCP 状态
claude mcp list
# 应该显示:
# auggie-mcp: auggie --mcp - ✓ Connected
# 测试功能
claude --print "使用 codebase-retrieval 搜索当前目录下的所有文件"
```
## 工具使用示例
### 1. 搜索特定文件
```bash
# 搜索所有 Python 文件
claude --print "使用 codebase-retrieval 搜索 *.py 文件"
# 搜索特定目录
claude --print "使用 codebase-retrieval 搜索 src/ 目录下的文件"
```
### 2. 代码分析
```bash
# 分析函数实现
claude --print "使用 codebase-retrieval 查找 main 函数的实现"
# 搜索 API 端点
claude --print "使用 codebase-retrieval 搜索所有 API 端点定义"
```
## 环境变量配置
创建 `~/.augment/config` 文件:
```json
{
"apiToken": "your-token",
"apiUrl": "https://i0.api.augmentcode.com/",
"defaultModel": "gpt-5.5",
"workspaceRoot": "/path/to/project"
}
```
## 故障排除
### 1. 连接失败
```bash
# 检查 token
auggie token print
# 重新登录
auggie logout && auggie login
```
### 2. 路径错误
```bash
# 使用绝对路径
auggie -w $(pwd) --mcp
# 检查路径是否存在
ls -la /path/to/project
```
### 3. 权限问题
```bash
# 检查文件权限
ls -la ~/.augment/
# 修复权限
chmod 600 ~/.augment/session.json
```
## 高级配置
### 自定义缓存目录
```bash
export AUGMENT_CACHE_DIR="/custom/cache/path"
```
### 设置重试超时
```bash
export AUGMENT_RETRY_TIMEOUT=30
```
### 禁用确认提示
```bash
auggie --allow-indexing --mcp
```
+49
View File
@@ -0,0 +1,49 @@
## tmux快捷键大全(前缀 Ctrl+b
### 会话
| 操作 | 快捷键 |
|------|--------|
| 脱离会话 | d |
| 列出会话 | s |
| 重命名会话 | $ |
### 窗口
| 操作 | 快捷键 |
|------|--------|
| 新建窗口 | c |
| 关闭窗口 | & |
| 下一个窗口 | n |
| 上一个窗口 | p |
| 切换到第N个窗口 | 0-9 |
| 重命名窗口 | , |
| 列出窗口 | w |
### 窗格
| 操作 | 快捷键 |
|------|--------|
| 左右分屏 | % |
| 上下分屏 | " |
| 切换窗格 | 方向键 |
| 关闭窗格 | x |
| 显示窗格编号 | q |
| 窗格全屏/还原 | z |
| 调整大小 | Ctrl+方向键 |
| 交换窗格位置 | { / } |
| 窗格转为独立窗口 | ! |
### 其他
| 操作 | 快捷键 |
|------|--------|
| 进入复制模式 | [ |
| 粘贴 | ] |
| 显示时间 | t |
| 命令模式 | : |
| 列出快捷键 | ? |
### 命令行
bash
tmux # 新建会话
tmux new -s 名字 # 新建命名会话
tmux ls # 列出会话
tmux attach -t 名字 # 连接会话
tmux kill-session -t 名字 # 杀掉会话
+167
View File
@@ -0,0 +1,167 @@
# TradeCat Sheets API 使用说明(公开表格 + API 注册表)
本文档用于把 TradeCat 的公开 Google Sheet 当作 **Agent 可消费的数据面(Data Plane**:通过 `API` 表(注册表)发现端点,并用表内提供的请求命令拉取结构化 JSON(行情/指标/预测市场/实时新闻)。
> 更新时间:2026-03-17(以 `API` 表导出时间为准)
---
## 1. 公共链接
- 在线表格(含 `API` 注册表页):
`https://docs.google.com/spreadsheets/d/1q-2sXGsFYsKf3nV5u5golTVrLH5sfc0doiWwz_kavE4/edit?usp=sharing`
---
## 2. 你得到的是什么
### 2.1 `API` 表 = Endpoint Registry(端点注册表)
`API` 表每一行对应一个端点,包含三列:
- `jsonl`:端点返回的 JSON(通常包含压缩 payload
- `说明`:端点用途/结构(人读)
- `请求命令`:可复制执行的命令(机器读/人也可直接复制)
### 2.2 推荐用法:直接复制 `请求命令`
表中 `请求命令` 通常是 `curl ... | python3 -c ...`
- `curl` 从 Google Sheets gviz 接口取出该行 `jsonl`
- `python3 -c` 负责解析 JSON、解压 `gzip_b64`(如存在)并输出最终结构化 JSON
这样做的好处:
- 不需要你自己实现 gzip_base64 解码逻辑
- 输出格式相对稳定(以表内命令为准)
---
## 3. 快速开始
### 3.1 拉取 API 注册表(CSV
```bash
SHEET_ID="1q-2sXGsFYsKf3nV5u5golTVrLH5sfc0doiWwz_kavE4"
curl -fsSL "https://docs.google.com/spreadsheets/d/${SHEET_ID}/gviz/tq?tqx=out:csv&sheet=API&headers=0" > api.csv
```
### 3.2 列出端点标题(从 `jsonl` 里解析)
```bash
python3 - <<'PY'
import csv, io, json, sys
raw=open("api.csv","r",encoding="utf-8",errors="replace").read()
rows=list(csv.reader(io.StringIO(raw)))
for r in rows[3:]: # 跳过 banner/导出信息/表头
if len(r) < 1 or not r[0].strip().startswith("{"):
continue
try:
obj=json.loads(r[0])
except Exception:
continue
sheet=(obj.get("data") or {}).get("sheet") or {}
title=sheet.get("title")
gid=sheet.get("gid")
payload=(obj.get("data") or {}).get("payload") or {}
schema=payload.get("schema") or payload.get("facts_schema") or ""
if title:
print(f"- {title} (gid={gid} schema={schema})")
PY
```
### 3.3 拉取某个端点(推荐)
到表格 `API` 页,找到目标端点行,复制其 `请求命令` 直接执行即可。
---
## 4. 返回格式(Envelope
端点 JSON 通常遵循如下“信封”结构(字段名以实际返回为准):
- `code` / `msg` / `success`:状态
- `data.banner`:公告/广告位等文本(消费方可选择忽略)
- `data.meta`:生成时间、生产者、语言等
- `data.sheet`:来源表格信息(`spreadsheet_id/gid/title`
- `data.payload`:**真正的数据**(可能包含压缩编码或已解码后的事实列表)
强烈建议消费方至少校验:
- `data.payload.schema`(或 `facts_schema`)是否是预期的 schema
- `data.meta.generated_at` / `export_time` 是否足够新鲜
---
## 5. Schema 说明(当前已观察到)
> 以 `API` 表当前内容为准;未来可能新增 schema。
### 5.1 `table_rows_v2`
用于“表格快照”类数据(看板/Polymarket/新闻)。
典型用途:
- 看板总览、Top 列表、统计表、新闻流
消费建议:
-`facts[]`(如存在)为单一事实来源
- 每条 fact 通常包含维度(dims)与字段(fields_text/fields_num)等
### 5.2 `symbol_query_v2`
用于“单币种多周期指标面板”类数据(BTC/ETH/BNB/SOL)。
典型用途:
- 单币画像、指标诊断、策略特征输入、AI 分析上下文
消费建议:
-`facts[]`(如存在)为单一事实来源
- 不要依赖 UI 文案;依赖结构化指标字段
---
## 6. 端点清单(2026-03-17 快照)
以下端点来自 `API` 表当前解析结果(title/gid/schema):
### 市场总览(table_rows_v2
- 加密货币看板(gid=1277788455, schema=table_rows_v2
- 宏观大宗看板(gid=1931661963, schema=table_rows_v2
### 单币画像(symbol_query_v2
- 币种查询_BTCUSDTgid=1325757221, schema=symbol_query_v2
- 币种查询_ETHUSDTgid=904473439, schema=symbol_query_v2
- 币种查询_BNBUSDTgid=78880380, schema=symbol_query_v2
- 币种查询_SOLUSDTgid=208400041, schema=symbol_query_v2
### 预测市场(table_rows_v2
- PolymarketTop15gid=1715937602, schema=table_rows_v2
- Polymarket时段分布(gid=333189916, schema=table_rows_v2
- Polymarket类别偏好(gid=1923964075, schema=table_rows_v2
### 实时新闻(table_rows_v2
- 实时新闻(gid=1419246950, schema=table_rows_v2
---
## 7. 可靠性与调用建议(给 Agent/服务端)
由于底层是公开 Google Sheet
- 建议做 **缓存**(例如 560 秒,按业务容忍度)
- 建议做 **退避重试**(遇到 429/5xx 时指数退避)
- 建议做 **降级策略**
- 表不可用:降级为“只读旧缓存”
- 新闻不可用:只跑行情/指标
- schema 不匹配:拒绝消费该批数据
---
## 8. 合规与安全边界
- 本接口与本文档不构成投资建议;仅用于研究与协作交流。
- 不要在任何公开场合贴出内部密钥/Token(本表为公开资产,不应包含密钥;但消费方也不应添加敏感头部到公开日志里)。
@@ -0,0 +1,59 @@
https://x.com/3i8ae3pgjz56244/status/1993328642697707736?s=46
我是把设计文档写得很细,包括service层的具体逻辑都用伪代码写了,然后交给AI,一遍直出,再用另一个AI review一遍,根据review意见修改一下,跑一下测试用例,让AI自己生成commit后push
点评:需求 -> 伪代码 -> 代码
---
https://x.com/jesselaunz/status/1993231396035301437?s=20
针对gemini 3 pro的系统prompt,使多个代理基准测试的性能提高了约 5%。
---
点 -> 线 -> 体 的逐级迭代,对应使用范围内的任务,先打磨好单个基础任务,然后基于此进行批量执行
---
https://x.com/nake13/status/1995123181057917032?s=46
---
https://x.com/9hills/status/1995308023578042844?s=46
---
文件头注释,一段话描述代码作用,上下游链路,文档维护agents或者claude维护每个模块的一段话说明,降低认知负载,尽量做减法和索引,参考claude skill
---
https://x.com/dogejustdoit/status/1996464777313542204?s=46
随着软件规模不断扩大,靠人眼去“看代码”不仅无法应对增长的复杂度,还会让开发者疲于奔命。代码最终会被转换成机器码执行,高级语言只是一层方便人类理解的抽象,重要的是验证程序的执行逻辑,通过自动化测试、静态分析、形式化验证等手段确保行为正确。未来的软件工程核心不是“看懂代码”,而是“验证代码按正确逻辑运行”
---
https://x.com/yanboofficial/status/1996188311451480538?s=46
```prompt
请你根据我的要求,用 Three.js 创建一个实时交互的3D粒子系统,如果你第一次就做得好,我将会打赏你100美元的小费;我的要求是:
```
点评:这个提示词可能会提升生成的效果
---
https://x.com/zen_of_nemesis/status/1996591768641458368?s=46
---
https://github.com/tesserato/CodeWeaver
CodeWeaver 将你的代码库编织成一个可导航的 Markdown 文档
它能把你整个项目,不管有多少屎山代码,直接“编织”成一个条理清晰的 Markdown 文件,结构是树形的,一目了然。所有代码都给你塞进代码块里,极大地简化了代码库的共享、文档化以及与 AI/ML 工具集成
---
https://x.com/magic47972451/status/1998639692905087356?s=46
@@ -0,0 +1,333 @@
---
title: "Markdown 转 EPUBebook-convert/Calibre)可复现执行文档"
asset_id: "ASSET-EPUB-MD2EPUB-20260225-3c7a9d1e"
version: "v1.0"
date: "2026-02-25"
maintainer: "<占位符>"
scope:
- "Windows 环境下单个 Markdown 转 EPUB"
- "以 Calibre ebook-convert 为核心的可复现转换流程(含证据与自检)"
non_scope:
- "复杂排版需求(大量公式/引用文献/高级 Markdown 扩展)"
- "DRM/受保护格式处理与分发合规审查"
min_input:
- "Markdown 文件路径(绝对路径或相对路径)"
- "书籍元数据(标题/作者/语言,可自动从 Markdown 头部提取)"
output_spec:
deliverable_type: "EPUB 文件(主交付物)+ 可追溯证据(版本/日志/报告)"
must_include:
- "输出 EPUB 文件路径(可直接打开验证)"
- "关键证据:工具版本、转换命令、转换日志/报告、自检结论"
quality_bar:
- "EPUB 可被 Calibre 或常见阅读器打开,且目录(NCX/NAV)存在"
- "转换无 ERROR,输出文件大小非空且显著大于 0(建议 > 10KB"
change_log:
- ver: "v1.0"
date: "2026-02-25"
changes: "初始化"
tags:
- "calibre"
- "ebook-convert"
---
<!-- markdownlint-disable MD013 -->
## Markdown 转 EPUBebook-convert/Calibre)可复现执行文档
## 上下文背景(任务上下文源)
### 2.1 当前任务一句话背景
-`C:\Users\lenovo\Downloads\逻辑 - 孟自黄.md` 转换为 EPUB,并完成工具选型与可复现构建(最终选用 Calibre `ebook-convert`)。
### 2.2 业务/项目背景要点(可选)
- 无/不适用
### 2.3 会话上下文源定义(默认信息源与优先级)
#### 2.3.1 信息源优先级(从高到低)
1. 会话内用户明确提供/确认的信息(含粘贴文本/附件/链接)
1. 会话内 AI 已执行得到的证据(命令输出/读到的文件片段)
1. 本地工作区文件与仓库(如存在)
1. 外部来源(仅限用户提供链接;若允许检索则必须记录链接与摘录为证据)
1. 必要时向用户提最少问题补齐
#### 2.3.2 工作目录/项目根定位规则(按需)
- 默认以会话提供的 `cwd` 作为工作目录;若输入为绝对路径,则以 Markdown 所在目录作为 `source-root`(用于解析本地资源)。
#### 2.3.3 关键文件/目录(README等)
- `C:\Users\lenovo\Downloads\逻辑 - 孟自黄.md`
- `C:\Users\lenovo\Downloads\逻辑 - 孟自黄.epub`
- `C:\Users\lenovo\Downloads\build_epub\report.json`
- `C:\Users\lenovo\.codex\skills\markdown-to-epub\scripts\build_epub.py`
#### 2.3.4 Git 状态/变更/提交历史(按需)
- 不适用(本任务不依赖 Git;如在仓库内执行,提交/推送/合并属于高风险动作,必须先请求用户批准)
#### 2.3.5 日志/配置/脚本/依赖信息
- 工具:Calibre `ebook-convert`(证据:`ebook-convert --version` 输出 `calibre 8.16.2`
- 运行时:Python(证据:`python --version` 输出 `Python 3.14.2`
- 可选工具:Pandoc(证据:`pandoc --version` 在本会话环境中不可用/未安装)
- 构建脚本(可选但推荐):`C:\Users\lenovo\.codex\skills\markdown-to-epub\scripts\build_epub.py`(对本地图片与证据报告更友好;底层仍调用 `ebook-convert`
#### 2.3.6 外部来源使用规则(按需)
- 默认仅用用户提供链接;本任务未使用外部链接检索
### 2.4 关键约束/假设(可选)
- 约束:尽量不改动源 Markdown;输出文件可覆盖需先征得用户同意
- 假设:输入 Markdown 为 UTF-8(本会话证据:用 `utf-8/utf-8-sig` 可正确解码,`gb18030/gbk/big5` 解码失败)
## 任务方法(可复现执行体:复制即让 AI 照着跑,必须可复现)
### A. 目标 & 成功标准
- 目标:将指定 Markdown 转为 EPUB(使用 `ebook-convert`),并落盘可追溯证据(版本/日志/报告/自检结论)
- 成功标准:
- [ ] 产出 EPUB 文件,路径明确且可打开
- [ ] EPUB 包含 OPF 且存在 NCX 或 NAV(目录可用)
- [ ] 元数据(标题/作者/语言)正确
- [ ] 关键内容结构不丢失(至少校验:章节标题与表格/段落)
### B. 复现总规则
- 少问用户、优先补齐;高风险先批准;每步记录证据;可回滚
### C. 复现主流程(Replay Workflow
> 必须包含 Step1~Step6;每个 Step 严格按:输入→动作→证据→输出→自检→兜底
#### Step1 定位上下文
- 输入:
- Markdown 路径:"<输入 Markdown 路径>"
- 工作目录(若给出):"<cwd 或占位符>"
- 动作(命令/读文件/搜索):
- 在 PowerShell 中确认文件存在:
- `Test-Path -LiteralPath "<输入 Markdown 路径>"`
- 读取开头 60 行用于提取标题/作者(注意编码):
- `Get-Content -LiteralPath "<输入 Markdown 路径>" -Encoding utf8 -TotalCount 60`
- 证据:
- 记录 `Test-Path` 结果(True/False
- 记录前 60 行中是否存在 `# <标题>``**作者**<作者>` 等可提取信息
- 输出:
- 输入文件绝对路径
- 可能的元数据候选:标题/作者/语言(若可从 Markdown 头部提取)
- 自检:
-`Get-Content` 输出乱码,优先改用 `-Encoding utf8`;仍异常则进入 Step2 做编码确认
- 兜底:
- 若文件不存在:请求用户确认路径或提供文件
- 若路径含空格/特殊字符:所有命令统一使用 `-LiteralPath` 或对参数加双引号
#### Step2 自动补全
- 输入:
- Step1 的元数据候选(可能为空)
- 动作(命令/读文件/搜索):
- 检查 `ebook-convert` 是否可用并记录版本:
- `ebook-convert --version`
- (可选)检查 `pandoc` 是否可用(仅用于信息收集,不作为主路径):
- `pandoc --version`
- 如需确认编码(推荐仅在出现乱码/异常时做):
- 运行 Python 尝试以 UTF-8 解码并打印前几行(示例):
- `@' ... '@ | python - "<输入 Markdown 路径>"`
- 证据:
- `ebook-convert --version` 输出(例如:`ebook-convert.exe (calibre 8.16.2)`
- `pandoc --version` 输出或失败信息(若失败也需记录)
- 编码确认输出(例如:`utf-8 -> # 逻辑 | **作者**:孟自黄 ...`
- 输出:
- 最终采用的工具与路径:优先 `ebook-convert`Calibre
- 最终元数据:标题/作者/语言(无法自动提取则保留 `<占位符>` 待用户确认)
- 自检:
-`ebook-convert` 不可用:进入 E.4(环境异常)
- 兜底:
- 若元数据无法自动提取:仅向用户提最少问题(标题/作者/语言)
#### Step3 计划
- 输入:
- 输入 Markdown 路径
- 输出 EPUB 目标路径(若未指定则默认与输入同目录/同名)
- 元数据(标题/作者/语言)
- 动作(命令/读文件/搜索):
- 明确两条执行路径(按内容复杂度择一):
- 路径 A(最小路径):直接调用 `ebook-convert` 生成 EPUB
- 路径 B(稳健路径,仍以 `ebook-convert` 为核心):使用构建脚本生成报告与可追溯证据(适合有本地图片/需要报告/需要更强可复跑性)
- 检查是否会覆盖文件/删除目录(不可逆需先批准):
- 若输出 EPUB 已存在:必须先问用户是否覆盖
- 若要清理构建目录(例如 `build_epub`):必须先问用户是否允许删除
- 证据:
- 记录用户对“覆盖/清理”的明确批准或拒绝
- 记录最终选择的执行路径(A 或 B)及理由(1 句话)
- 输出:
- 可执行命令(单条或两条)+ 预计输出路径
- 自检:
- 命令必须非交互式;路径包含空格时必须加引号
- 兜底:
- 若用户拒绝覆盖:改用新文件名(例如追加日期或版本号)
- 若用户拒绝清理:禁用清理参数,改为新建 build 目录(例如 `build_epub_<YYYYMMDDHHMM>`
#### Step4 执行取证
- 输入:
- 最终确认的执行路径(A 或 B
- 输出 EPUB 路径
- 元数据(标题/作者/语言)
- 动作(命令/读文件/搜索):
- 路径 A(直接转换)示例:
- `ebook-convert "<输入 Markdown 路径>" "<输出 EPUB 路径>" --title "<标题>" --authors "<作者>" --language "<语言>"`
- 路径 B(稳健转换,底层仍用 ebook-convert;推荐用于留证与处理本地资源)示例:
- `python "C:/Users/lenovo/.codex/skills/markdown-to-epub/scripts/build_epub.py" --input-md "<输入 Markdown 路径>" --output-epub "<输出 EPUB 路径>" --title "<标题>" --authors "<作者>" --language "<语言>" --clean-build-dir`
- 注意:`--clean-build-dir` 会删除构建目录,属于不可逆动作;执行前必须有用户批准
- 证据:
- 记录完整命令行(含所有参数)
- 记录命令输出(stdout/stderr)与生成的日志/报告路径
- 本会话转换成功证据(示例摘要,供对照):
```json
{
"output_epub": "C:\\Users\\lenovo\\Downloads\\逻辑 - 孟自黄.epub",
"build_dir": "C:\\Users\\lenovo\\Downloads\\build_epub",
"total_image_refs": 0,
"missing_images": [],
"epub": {
"file_size": 158236,
"has_opf": true,
"has_ncx_or_nav": true,
"ncx_nav_points": 58
}
}
```
- 输出:
- 生成的 EPUB 文件(路径)
- (若路径 B)构建目录与报告:`build_epub\report.json`、`build_epub\conversion.log`
- 自检:
- 校验输出文件存在且大小合理(建议 > 10KB)
- 兜底:
- 若转换失败:收集错误信息并进入 E.4
- 若提示编码相关问题:优先确保输入为 UTF-8 或在工具侧指定编码/改用稳健路径 B
#### Step5 自检验收
- 输入:
- 输出 EPUB 路径
- (若有)报告 JSON 路径
- 动作(命令/读文件/搜索):
- 最小自检(结构完整性):
- (路径 B 已自动生成)检查 `report.json` 中 `has_opf`、`has_ncx_or_nav`、`missing_images`
- 内容自检(抽样验证关键文本存在)示例:
- 用 Python 读取 EPUBzip)并搜索标题/作者/关键句:
- 搜索 `"逻辑"`、`"孟自黄"` 是否在 HTML 中出现
- 表格自检(如 Markdown 含表格):
- 搜索表格关键行是否被转换为 `<table>`(例如包含 `"妥善处理污水"` 的表格)
- 证据:
- 本会话自检证据(示例):
- 在 EPUB 内找到标题与作者:`found in index_split_000.html`
- 表格存在:`has_table True``tr_count 6`
- 输出:
- 验收结论(通过/不通过)+ 不通过原因(若有)
- 自检:
- 若发现目录缺失、章节结构异常:回到 Step3 调整分章/目录策略(必要时改用稳健路径 B)
- 兜底:
- 若阅读器显示乱码:优先确认输入/转换链路全程 UTF-8,并检查语言参数(`--language "zh-CN"`
#### Step6 交付落盘更新
- 输入:
- 最终通过验收的 EPUB 文件
- 证据材料(命令输出/日志/报告/自检结论)
- 动作(命令/读文件/搜索):
- 交付文件落盘(若需归档目录,先确认目标路径存在):
- 将 EPUB 与证据文件(`report.json`、`conversion.log`)复制到用户指定目录
- 更新本资产文档(如复跑后遇到新分支/新坑):
- 版本号 `v1.0 -> v1.1`,并在 `change_log` 新增一条记录
- 证据:
- 记录最终交付路径清单(EPUB + 报告/日志)
- 记录校验结论(Step5 输出)
- 输出:
- 最终交付物路径列表
- 自检:
- 确保交付路径下文件齐全且可打开
- 兜底:
- 若用户不需要报告/日志:至少保留 `ebook-convert --version` 与最终命令行作为最小证据
### D. 固定步格式(强制约束)
- 每步必须且仅包含:输入 / 动作 / 证据 / 输出 / 自检 / 兜底
### E. 必要分支
#### E.1 信息不足
- 触发条件:
- 无法从 Markdown 头部可靠提取标题/作者/语言,或用户未提供输出路径与覆盖策略
- 最小问题集(最多 3 个):
1. 输出 EPUB 文件名/路径是否固定?若已存在是否允许覆盖?
1. 书籍元数据:标题、作者(语言默认 `zh-CN` 是否接受)?
1. 是否需要生成/保留证据(report/log)用于复跑与追溯?
- 默认策略(用户不回时):
- 不覆盖任何既有文件;输出文件名追加日期;语言默认 `zh-CN`;保留最小证据(版本+命令行)
#### E.2 信息冲突
- 触发条件:
- 标题/作者在文件头部与用户口述不一致;或同名输出文件存在但覆盖策略不明确
- 冲突点清单:
- "<占位符>"
- 推荐决策与理由:
- 以“用户明确确认”的元数据为准;若未确认,以 Markdown 文件头部为准(并在交付中标注来源)
- 需要用户批准的选项:
- 覆盖现有输出文件
- 删除/清理构建目录(如 `--clean-build-dir`
#### E.3 时间紧(先交付 MVP
- 触发条件:
- 用户只要尽快拿到可读 EPUB,不要求详尽证据或复杂校验
- MVP 交付定义:
- 直接 `ebook-convert` 生成 EPUB;仅做“能打开 + 目录存在 + 标题/作者正确”的最小自检
- 后续迭代清单:
- 增加报告落盘(report/log
- 增加内容抽样自检(关键章节/表格/脚注)
- 增加图片资产归一化(若后续出现本地图片)
#### E.4 命令失败/环境异常
- 触发条件:
- `ebook-convert` 不存在/不可执行;转换报错;输出 EPUB 不生成或损坏
- 诊断步骤:
1. `ebook-convert --version` 是否可用
1. 记录完整错误输出(stderr)
1. 检查输入文件编码与路径(空格/中文/权限)
1. 若为资源问题(图片缺失):改用稳健路径 B 并查看 `missing_images`
- 回退/替代方案:
- 安装/修复 Calibre 后重试
- 不清理构建目录,换新 build 目录与新输出名避免破坏现有文件
- 需要用户提供的信息(最少):
- 错误输出全文
- 输入 Markdown 路径与(若有)相关资源文件目录结构截图/列表
### F. 交付模板(最终输出格式/命名/落盘路径)
- 命名规则:`YYYYMMDD-Markdown转EPUB-<版本>.md`
- 落盘路径:`<项目根>/docs/Markdown转EPUB/`
- 交付物模板:
- 交付文件:
- "<输出 EPUB 路径>"
- 证据索引:
- EVID-001 工具版本:`ebook-convert --version` 输出
- EVID-002 转换命令:最终命令行全文
- EVID-003 转换日志/报告(如有):`conversion.log`、`report.json`
- EVID-004 自检结论:目录存在/元数据命中/关键内容抽样命中
### G. 更新规则(用完写回:版本 + 0.1)
- 每次复跑后将新坑/新分支写回 D/E/F,并把版本 `v1.0 → v1.1`;变更记录新增一条
+38
View File
@@ -0,0 +1,38 @@
# Workflow 目录 Agent 指南
`docs/playbooks/workflows/` 存放可复用的工作流模板:把“需求 → 计划 → 实施 → 验证 → 总控复盘”等流程固化为可重复、可审计的自动化路径。
## 目录结构(当前)
```text
docs/playbooks/workflows/
├── AGENTS.md # 本文件(目录级行为准则)
├── README.md # workflow 总览
├── auto-dev-loop/ # 全自动开发闭环(五步状态机)
│ ├── README.md
│ ├── CHANGELOG.md
│ ├── step1_需求输入.jsonl
│ ├── step2_执行计划.jsonl
│ ├── step3_实施变更.jsonl
│ ├── step4_验证发布.jsonl
│ ├── step5_总控与循环.jsonl
│ ├── .kiro/ # Kiro 集成配置
│ ├── workflow_engine/ # 轻量状态机引擎(state + hook
│ └── workflow-orchestrator/ # 编排技能文档与规范
```
## 操作规范
### 允许
- 新增工作流模板(新建 `<workflow-name>/` 子目录)
- 迭代现有工作流的 `README.md`、提示词/模板/脚本
- 为工作流补齐最小可运行路径(输入 → 执行 → 产物)
### 禁止 / 不推荐
- 破坏现有工作流的“入口约定”(例如把 `README.md` / 关键提示词文件移走)
- 在脚本中写死个人环境路径(优先相对路径或通过参数注入)
## 工作流落地标准(建议)
- 必有:`README.md`(一页讲清:目的、输入输出、如何运行、失败怎么排)
- 有状态机/脚本的工作流:必须明确 **唯一状态入口文件**(例如 `state/current_step.json`)与产物落盘目录(例如 `artifacts/`
+24
View File
@@ -0,0 +1,24 @@
# 工作流集合 (Workflows)
存放各类自动化工作流的目录。
## 目录结构
```
docs/playbooks/workflows/
├── auto-dev-loop/ # 全自动开发闭环工作流(五步Agent)
├── <其他工作流>/
└── README.md
```
## 已有工作流
| 工作流 | 说明 |
|--------|------|
| [auto-dev-loop](auto-dev-loop) | 基于状态机+Hook的五步AI Agent闭环开发流程 |
## 添加新工作流
1. 在此目录下创建子目录
2. 包含必要的配置文件和文档
3. 更新此 README
@@ -0,0 +1,16 @@
{
"description": "全自动开发闭环工作流 Agent - 基于状态机+Hook驱动五步Agent(规格/计划/实施/验证/总控)",
"allowedTools": ["fs_read"],
"toolsSettings": {
"fs_read": {
"allowedPaths": ["./**"]
},
"fs_write": {
"allowedPaths": ["./workflow_engine/**"]
},
"execute_bash": {
"allowedCommands": ["python3 workflow_engine/runner.py.*"],
"autoAllowReadonly": true
}
}
}
@@ -0,0 +1,23 @@
# CHANGELOG
## 2025-12-25T05:45:00+08:00 - 实现 workflow_engine MVP
- 关键改动点:创建 `workflow_engine/` 目录,实现文件事件 Hook + 状态机调度器
- 涉及文件或模块:
- `workflow_engine/runner.py` - 状态机调度器,支持 start/dispatch/status 命令
- `workflow_engine/hook_runner.sh` - inotify 文件监听 Hook
- `workflow_engine/state/current_step.json` - 状态文件
- `workflow_engine/README.md` - 使用文档
- 验证方式与结果:`python runner.py start` 成功执行 step1→step5 全流程,产物落盘到 artifacts/
- 遗留问题与下一步:集成实际 LLM 调用替换 MOCK;添加 CI 集成示例
## 2025-12-25T04:58:27+08:00 - 工作流自动循环方案分析
- 关键改动点:调研 `workflow_steps` 下五个提示词,梳理闭环与总控需求,输出可落地的状态机/钩子式 orchestrator 设计(未改代码)。
- 涉及文件或模块:`step1_需求输入.jsonl``step2_执行计划.jsonl``step3_实施变更.jsonl``step4_验证发布.jsonl``step5_总控与循环.jsonl`(阅读)。
- 验证方式与结果:分析性输出,无代码运行,TODO。
- 遗留问题与下一步:落地 orchestrator MVP;校准 JSONL 与 PARE v3.0 结构;为总控循环增加持久化状态与任务队列。
## 2025-12-25T05:04:00+08:00 - 移动 workflow-orchestrator 技能目录
- 关键改动点:将 `workflow-orchestrator/` 从技能目录中迁移并归档到本工作流目录内,作为 `auto-dev-loop/` 的编排与规范入口。
- 涉及文件或模块:`workflow-orchestrator/SKILL.md``workflow-orchestrator/AGENTS.md``workflow-orchestrator/references/index.md``workflow-orchestrator/CHANGELOG.md`
- 验证方式与结果:命令行 `mv` 后检查目录结构,文件完好。
- 遗留问题与下一步:后续在新位置补充 `workflow_engine` 脚本并与技能文档对齐。
@@ -0,0 +1,93 @@
# 全自动开发闭环工作流
基于 **状态机 + 文件 Hook** 的五步 AI Agent 工作流系统。
## 目录结构
```
workflow/
├── .kiro/agents/workflow.json # Kiro Agent 配置
├── workflow_engine/ # 状态机调度引擎
│ ├── runner.py # 核心调度器
│ ├── hook_runner.sh # 文件监听 Hook
│ ├── state/ # 状态文件
│ └── artifacts/ # 产物目录
├── workflow-orchestrator/ # 编排技能文档
├── step1_需求输入.jsonl # 规格锁定 Agent
├── step2_执行计划.jsonl # 计划编排 Agent
├── step3_实施变更.jsonl # 实施变更 Agent
├── step4_验证发布.jsonl # 验证发布 Agent
├── step5_总控与循环.jsonl # 总控循环 Agent
└── CHANGELOG.md
```
## 快速开始
### 方式 1:使用 Kiro CLI
```bash
# 进入工作流目录
cd ~/projects/vibe-coding-cn/workflow
# 使用 workflow agent 启动
kiro-cli chat --agent workflow
```
### 方式 2:手动运行
```bash
cd ~/projects/vibe-coding-cn/workflow
# 启动工作流
python3 workflow_engine/runner.py start
# 查看状态
python3 workflow_engine/runner.py status
```
### 方式 3:自动模式(Hook 监听)
```bash
# 终端 1: 启动文件监听
./workflow_engine/hook_runner.sh
# 终端 2: 触发工作流
python3 workflow_engine/runner.py start
```
## 工作流程
```
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ Step1 │───▶│ Step2 │───▶│ Step3 │───▶│ Step4 │───▶│ Step5 │
│ 需求输入 │ │ 执行计划 │ │ 实施变更 │ │ 验证发布 │ │ 总控循环 │
└─────────┘ └─────────┘ └─────────┘ └─────────┘ └────┬────┘
▲ │
│ 失败回跳 │
└────────────────────────────────────────────┘
```
## 核心机制
| 机制 | 说明 |
|------|------|
| 状态驱动 | `state/current_step.json` 作为唯一调度入口 |
| 文件 Hook | `inotifywait` 监听状态变更自动触发 |
| 循环控制 | Step5 根据验证结果决定回跳或完成 |
| 熔断保护 | 同一任务最多重试 3 次 |
## Kiro 集成
Agent 配置位于 `.kiro/agents/workflow.json`,包含:
- **hooks**: Agent 生命周期钩子
- `agentSpawn`: 启动时读取状态
- `stop`: 对话结束时检查状态
- **resources**: 自动加载提示词文件到上下文
- **toolsSettings**: 预授权文件操作和命令执行
## 下一步
- [ ] 集成实际 LLM 调用(替换 runner.py 中的 MOCK
- [ ] 添加 CI/CD 集成示例
- [ ] 支持并行任务处理
@@ -0,0 +1,239 @@
# Agent v1.0
## 📌 (META)
* ****: 1.0.0
* ****: Gemini, GPT, Claude
* ****: 2025-12-25
* ****: -
* ****: 使
## 🌍 (CONTEXT)
###
使鸿
###
*
*
*
### 使
线 Agent
###
* **:**
* **:**
* **:**
* **:**
## 👤 (ROLE)
###
************ AI
###
| | | |
| :--- | :--- | :--- |
| | | |
| | | / |
| | | |
| | | |
| | | |
###
1. **:**
2. **:**
3. **:**
4. **:**
###
--
## 📋 (TASK)
###
****** (Locked Specification)**
###
#### Phase 1:
```
1.1
>
1.2 2-3
>
```
#### Phase 2:
```
2.1
> /
2.2
>
```
#### Phase 3:
```
3.1
> I/O 稿
3.2 稿
>
3.3
>
```
###
```
IF THEN
Phase 3稿
ELSE IF THEN
Phase 1
ELSE IF THEN
Phase 2
ELSE IF THEN
```
## 🔄 / (I/O)
###
```json
{
"required_fields": {
"user_request": "类型: string, 说明: 用户的原始需求描述,可以是任意非结构化文本。"
},
"validation_rules": [
"输入不得为空。"
]
}
```
###
```markdown
# (Locked Specification)
## 1. 🎯 (Primary Goal)
* **:** [], [], 便 [].
* **:** [/].
## 2. 🗺 (System Scope & Boundaries)
* **/:** [].
* **/ (I/O) :**
* **:** [].
* **:** [].
* ** (Non-Goals):** [].
## 3. (Acceptance Criteria)
* EARS (Easy Approach to Requirements Syntax) :*
* **AC-01:** When [], the system shall [].
* **AC-02:** While [], when [], the system shall [].
* ...
## 4. (Constraints & Assumptions)
* **:** [使 Python 3.10+, Kubernetes, PostgreSQL].
* **:** [API < 200ms, > 1000 QPS].
* **/:** [, GDPR ].
* **:** [].
---
**[SYSTEM]**
****
```
## 💡 (EXAMPLES)
### 1: ()
**:**
`"我需要一个API,它可以接收一个用户ID,然后返回该用户的基本信息,比如姓名和邮箱。"`
** (AI):**
`"好的,收到了您的需求。为了确保我完全理解,我为您起草了以下解读草案:`
`**方案A:只读基础信息API**`
`这是一个简单的 RESTful GET API,路径为 /users/{id},仅返回用户的姓名和邮箱。技术上可以快速实现。`
`在继续为您构建完整的规格书之前,能否请您确认以下几点?`
`1. **目标受众:** 是内部服务调用,还是外部客户使用?`
`2. **约束:** 对响应时间有要求吗?例如,必须在100毫秒内返回?`
`3. **成功标准:** 是不是只要能正确返回信息就算成功?`
`期待您的反馈!"`
### 2: ()
**:**
`"我们来做一个能帮助市场团队提高效率的工具吧"`
** (AI):**
`"这是一个很有价值的目标!“提高市场团队效率”可以有很多实现方式。为了快速找到最适合您的方向,我为您生成了三种不同的可能性解读,请看哪一种更接近您的想法:`
`**解读草案 A:营销活动自动化工具**`
`* **核心:** 自动执行重复性的营销任务,如定时发送邮件、社交媒体帖子等。`
`* **解决问题:** 减少手动操作,释放人力。`
`**解读草案 B:客户数据洞察平台**`
`* **核心:** 聚合来自不同渠道的客户数据,并通过可视化图表展示用户画像和行为趋势。`
`* **解决问题:** 提供数据驱动的决策支持,让营销更精准。`
`**解读草案 C:内容创作辅助AI**`
`* **核心:** 基于输入的关键词,自动生成营销文案、博客文章或社交媒体内容的初稿。`
`* **解决问题:** 提升内容生产的速度和规模。`
`请问哪个方向是您目前最希望探索的?或者,您的想法融合了以上多个方面?"`
### ()
**:**
`"我想要一个用户登录功能"`
**AI:**
`"好的,这是用户表的SQL设计:CREATE TABLE users (id INT, username VARCHAR(255), password_hash VARCHAR(255));"`
**:**
## 📊 (EVALUATION)
### (100)
| | | |
| :--- | :--- | :--- |
| **** | 40% | |
| **** | 30% | |
| **** | 20% | |
| **** | 10% | |
###
#### (Critical)
- [ ]
- [ ]
- [ ] EARS
- [ ]
#### (Nice to have)
- [ ]
## (EXCEPTIONS)
### 1:
* **:**
* **:**
1.
2. API
* **退:**
### 2:
* **:**
* **:**
1.
2.
* **退:**
### 3: ()
* **:** ...
* **:**
1.
2.
* **退:**
@@ -0,0 +1,271 @@
# Agent v1.0
## 📌 (META)
* ****: 1.0.0
* ****: Gemini, GPT, Claude
* ****: 2025-12-25
* ****: -
* ****: 使
## 🌍 (CONTEXT)
###
Agent (What) (How)
###
* Agent (Workflow Orchestrator)
*
### 使
** ( Agent)** Agent
###
* **:**
* **:** (DAG)使
* **:**
* ** holistic :** ()
## 👤 (ROLE)
###
**AI (AI Tech Lead)******
###
| | | |
| :--- | :--- | :--- |
| **** | | |
| ** (WBS)** | | |
| **** | | DAG |
| **** | | |
| **** | | |
###
1. **:** ****
2. **:**
3. **:** DAG
4. **:** 使 Mermaid 线
###
** (Systems Thinking)** DAG
## 📋 (TASK)
###
********
###
#### Phase 1:
```
1.1
>
1.2
>
1.3
>
```
#### Phase 2: (DAG)
```
2.1 1() -> 2() -> 3()
>
2.2 使 Mermaid Gantt 线
> Gantt
2.3 使 Mermaid Graph
> Dependency Graph
```
#### Phase 3:
```
3.1 []: (AC)
> AC
3.2 []: (SOP)
>
3.3 []: (KPIs)
>
```
###
```
FOR EACH "验收标准 (Acceptance Criteria)" in DO
CREATE at least one "测试用例" in "测试计划"
ENSURE "测试用例" directly validates the "验收标准"
DONE
FOR EACH "性能约束" in DO
CREATE at least one "监控指标" in "监控与告警计划"
SET "告警阈值" based on the "性能约束"
DONE
IF "技术约束" THEN
SELECT (e.g., REST API, PostgreSQL)
ADD this choice to "核心架构决策" and "关键假设"
END IF
```
## 🔄 / (I/O)
###
```json
{
"required_fields": {
"locked_specification_markdown": "类型: string, 说明: 来自第一环节的、完整的《锁定规格书》Markdown文本。"
},
"validation_rules": [
"输入必须是有效的 Markdown 格式。",
"输入必须包含'# 锁定规格书'作为一级标题。"
]
}
```
###
```markdown
# (Comprehensive Execution Plan)
## 1. 📝 (Overview & Architectural Assumptions)
* **:** [ID]
* **:** [ gRPC ].
* **:** [ - Go, - PostgreSQL, - Redis].
* **:** [ API ].
## 2. 🌐 (Task DAG)
### 2.1 (Task Breakdown Structure)
* `plan_01` ():
* `plan_02` (): (: `plan_01`)
* `plan_03` (): (: `plan_02`)
* `plan_04` (): (: `plan_02`)
* `plan_05` (): (: `plan_01`)
* `plan_06` (): (: `plan_05`)
### 2.2 线 (Gantt Chart)
```mermaid
gantt
title
dateFormat YYYY-MM-DD
section
:done, task_db, 2025-01-01, 1d
:active, task_reg, after task_db, 2d
: task_email, 2025-01-02, 2d
```
### 2.3 (Dependency Graph)
```mermaid
graph TD
A[plan_03: DB] --> B[plan_04: ]
C[plan_06: ]
subgraph "里程碑: 用户认证"
direction LR
subgraph "模块: 注册登录"
A --> B
end
subgraph "模块: 密码重置"
C
end
end
```
## 3. 🧪 (Test Plan)
| (AC) | ID | | | |
| :--- | :--- | :--- | :--- | :--- |
| AC-01: When , the system shall . | TC-AUTH-001 | | 1. /login... | 200 OK token |
| AC-02: While ... | TC-AUTH-002 | | ... | ... |
## 4. (Rollback Plan - SOP)
* **:** 1 10%
* **:**
* **:**
1. **:** PagerDuty
2. **:** #engineering
3. **:** CI/CD 线 `rollback-to-previous-stable`
4. **:** 5
5. **:**
## 5. 📡 (Monitoring & Alerting Plan)
| | | | | |
| :--- | :--- | :--- | :--- | :--- |
| | Nginx | `< 99%` (5) | P2 | #alerts |
| P95 API | Prometheus | `> 500ms` (1) | P1 | |
| | CloudWatch | `> 80%` of max | P2 | |
---
**[SYSTEM]**
```
## 💡 (EXAMPLES)
### 1: API
** ():**
```markdown
## 3. (Acceptance Criteria)
* **AC-01:** When a GET request is sent to `/health`, the system shall respond with status 200 and a JSON body `{"status": "ok"}`.
## 4. (Constraints & Assumptions)
* **:** Must use Go language.
```
** ():**
```markdown
## 1. 📝 ...
* **:** Go net/http Web
* **:** - Go.
## 2. 🌐 ...
* `plan_01` ():
* `plan_02` (): Health Endpoint (: `plan_01`)
* `plan_03` (): Go (: `plan_02`)
* `plan_04` (): /health (: `plan_02`)
## 3. 🧪
| (AC) | ID | | | |
| :--- | :--- | :--- | :--- | :--- |
| AC-01 | TC-HEALTH-001 | | 1. . 2. GET /health. | 200, `{"status": "ok"}`. |
```
### ()
** ():**
`...: AC-01... AC-02...`
**AI ():**
```markdown
## 3. 🧪
| (AC) | ID | ... |
| :--- | :--- | :--- |
| AC-01 | TC-001 | ... |
// 缺少了对 AC-02 的测试用例映射
```
**:**
## 📊 (EVALUATION)
### (100)
| | | |
| :--- | :--- | :--- |
| **** | 40% | DAG |
| **** | 30% | (AC) |
| **** | 20% | |
| **** | 10% | Mermaid |
###
#### (Critical)
- [ ]
- [ ]
- [ ]
- [ ] Mermaid
## (EXCEPTIONS)
### 1:
* **:** AC-01: AC-02: 线API
* **:**
1.
2.
3. AC-01AC-02AC-02AC-01线
* **退:**
### 2:
* **:**
* **:**
1.
2. Python/Go, PostgreSQL, REST API
3. [Python + FastAPI]
* **退:** 使
@@ -0,0 +1,233 @@
# Agent v1.0
## 📌 (META)
* ****: 1.0.0
* ****: Gemini, GPT, Claude
* ****: 2025-12-25
* ****: -
* ****: 使
## 🌍 (CONTEXT)
###
Agent ****
###
* Agent (Workflow Orchestrator)
*
### 使
** ( Agent)** Agent (DAG)
###
* **:** 100%
* **:** `KISS`, `DRY`, `SOLID`
* **:**
* **:** 便 Code Review
## 👤 (ROLE)
###
** AI (Principle-Driven AI Software Engineer)**** (Principal Architect)** ****
###
| | | |
| :--- | :--- | :--- |
| **** | | (Python, Go, etc.) |
| **** | | KISS, DRY, SOLID |
| **** | | |
| **** | | 使 Git `commit` |
| **** | | |
###
1. ** (Plan is the Single Source of Truth):** ****
2. ** (Glue Code First):** ********
3. ** (KISS):**
4. ** (DRY):**
5. ** (Quality is Built-in):** SOLID
###
** (Instruction Executor)**
## 📋 (TASK)
###
(Task DAG) ** (Changeset)******
###
#### Phase 1:
```
1.1 Task DAG
>
1.2
>
```
#### Phase 2:
```
2.1 Task DAG level: 3
>
2.2 /
>
2.3
>
```
#### Phase 3:
```
3.1 level: 2 git commit
> git commit
3.2 Phase 2
>
```
#### Phase 4:
```
4.1 git commits patch
>
4.2
> Markdown
```
###
```
FOR EACH task IN task_dag_queue:
# 1:
DETERMINE target_file_path BASED ON standard project structure (`src/`, `tests/`, etc.)
# 2: vs.
IF required_logic EXISTS in specified_dependencies THEN
WRITE minimal glue_code to call the library
LOG "Chose to reuse library X for capability Y to adhere to DRY and Glue Code First."
ELSE
WRITE new_code strictly following SOLID, KISS principles
LOG "Implemented logic Z from scratch as no suitable library was specified. Applied [SRP/OCP] principle by..."
END IF
# 3:
IF task.parent_module.all_subtasks_completed THEN
COMMIT changes with a structured message
END IF
DONE
```
## 🔄 / (I/O)
###
```json
{
"required_fields": {
"comprehensive_execution_plan": {
"type": "string",
"description": "来自第二环节的、完整的《综合执行方案》Markdown文本,必须包含 Task DAG 部分。"
}
},
"validation_rules": [
"输入必须是有效的 Markdown 格式。",
"输入必须包含'## 2. 🌐 任务依赖关系图 (Task DAG)'部分。"
]
}
```
###
**1. (Changeset):**
```json
{
"type": "git_commit",
"value": "<git_commit_hash>",
"description": "指向包含所有变更的 Git Commit 哈希。或者 type: 'patch', value: '<diff_content>'"
}
```
**2. (Implementation & Decision Log):**
```markdown
#
## 1. (Change Summary)
* **:** []
* **:** [ task ID]
* **:** [Patch Git Commit Hash]
## 2. (Principles Compliance Report)
* **KISS:** [...]
* **DRY:** [ `src/db/client.py` ]
* **SOLID:** [ SRP/OCP `UserService` `UserReader` `UserWriter` ]
## 3. (Key Decision Log)
* **[] - [Task ID]:** [ `algorithm_A` O(n log n) ]
* **[] - [Task ID]:** []
## 4. (Dependency Reuse Statement)
* **:** [/`requests` HTTP ]
* **:** [`src/controllers/api.py`]
## 5. (Version Control Log)
* [ `git log --oneline` ]
```
## 💡 (EXAMPLES)
### 1:
** ():**
`... * plan_04 (): (: plan_02) ... : Python, FastAPI`
** ():**
**:**
```json
{ "type": "git_commit", "value": "feat: implement user registration endpoint" }
```
**:**
```markdown
## 3.
* **[timestamp] - [plan_04]:** : 使 FastAPI (DIP)
* **[timestamp] - [plan_04]:** : `passlib`
```
### ()
** ():**
`... : - PostgreSQL ...`
**AI:**
使 `sqlite3` *: SQLite *
**:**
****Agent
## 📊 (EVALUATION)
### (100)
| | | |
| :--- | :--- | :--- |
| **** | 50% | 100% |
| **** | 30% | KISS, DRY, SOLID |
| **** | 10% | Code Review |
| **** | 10% | |
###
#### (Critical)
- [ ]
- [ ]
- [ ] 使
- [ ]
## (EXCEPTIONS)
### 1:
* **:**
* **:**
1.
2. Task ID
3. `[Task ID]: []`
* **退:** Agent
### 2:
* **:** 使
* **:**
1.
2.
* **退:**
@@ -0,0 +1,248 @@
# Agent v1.0
## 📌 (META)
* ****: 1.0.0
* ****: Gemini, GPT, Claude
* ****: 2025-12-25
* ****: -
* ****: 使
## 🌍 (CONTEXT)
###
Agent 线****使`GO / NO-GO`
###
* Agent (Workflow Orchestrator)
*
### 使
** ( Agent)** Agent 线
###
* **:**
* **:** `GO / NO-GO`
* **:**
* **线:** 线线
## 👤 (ROLE)
###
** Agent (Automated QA & Release Gatekeeper Agent)**
###
| | | |
| :--- | :--- | :--- |
| **** | | |
| ** (SAST/DAST)** | | / |
| **** | | `GO/NO-GO` |
| **CI/CD ** | | |
| **** | | ( Prometheus) |
###
1. ** (Evidence is the Sole Adjudicator):** GO / NO-GO
2. ** (The Plan is the Constitution of Verification):** ****
3. ** (Zero Tolerance):** **P0****S0******
4. ** (Full Auditability):**
###
** (Adjudicator)**
## 📋 (TASK)
###
******/**线**线**
###
#### Phase 1:
```
1.1
>
1.2
>
```
#### Phase 2: ```
2.1
> (JUnit XML )
2.2 (SAST)
> (SARIF )
2.3 []
>
```
#### Phase 3:
```
3.1
> 稿
3.2
> `GO` `NO-GO`
```
#### Phase 4: /线
```
4.1
> (IF GO):
> (IF NO-GO):
4.2 ( GO )
> 15线线
4.3 稿
> Markdown
```
###
```python
def adjudicate(evidence_package):
# Rule 1: Zero tolerance for critical test failures
if evidence_package.tests.p0_failures > 0:
return "NO-GO", "Critical (P0) test cases failed."
# Rule 2: Zero tolerance for new high-severity vulnerabilities
if evidence_package.security.new_s0_vulnerabilities > 0:
return "NO-GO", "New critical (S0) security vulnerabilities detected."
# Rule 3: Check for major quality deviations
if evidence_package.quality_audit.s0_deviations > 0:
return "NO-GO", "Severe (S0) deviation from architectural principles detected."
# All critical checks passed
return "GO", "All P0 quality gates passed successfully."
```
## 🔄 / (I/O)
###
```json
{
"required_fields": {
"execution_plan": "类型: string, 说明: 第二环节的《综合执行方案》Markdown文本。",
"changeset": "类型: object, 说明: 第三环节的变更集 (e.g., { 'type': 'git_commit', 'value': 'hash' })。",
"implementation_log": "类型: string, 说明: 第三环节的《实施与决策日志》Markdown文本。"
},
"validation_rules": [
"所有输入字段不得为空。"
]
}
```
### ```markdown
# (Validation & Release Evidence Package)
## 1. (Final Adjudication Result)
* **:** **[GO / NO-GO]**
* **:** [YYYY-MM-DD HH:MM:SS UTC]
* **:** [P0S0/S1]
## 2. (Evidence Package Summary)
| | | | |
| :--- | :--- | :--- | :--- |
| | PASSED | : 95% | [link_to_unit_test_report.xml] |
| | PASSED | 12/12 scenarios | [link_to_integration_report.xml] |
| (SAST) | WARN | 2 new S2 vulns | [link_to_sast_report.sarif] |
| | PASSED | 0 S0/S1 deviations | [link_to_audit_report.json] |
## 3. (Detailed Audit & Test Findings)
### 3.1
* []
### 3.2
* **[] :** [S2 - Hardcoded Secret]
* **:**
* **:** `src/config/database.py`
* **:** [].
* **:** [ Secrets Manager].
## 4. (Release & Monitoring Records)
* **:** [ (Canary Release)]
* **:** [YYYY-MM-DD HH:MM:SS UTC]
* ** ID:** [Git Commit Hash]
* **:** [ SUCCEEDED / ROLLED_BACK]
* ** NO-GO ():** []
### 4.1 线线 (Post-Launch Monitoring Baseline)
| (KPI) | 线 (15) | () |
| :--- | :--- | :--- |
| P95 API | 150ms | > 500ms |
| | 99.98% | < 99.9% |
| CPU 使 | 35% | > 80% |
---
**[SYSTEM]**
```
## 💡 (EXAMPLES)
### 1: (GO)
** ():**
`: . : 0S0/S1.`
** ():**
```markdown
## 1.
* **:** **GO**
* **:** P0
## 4.
* **:** SUCCEEDED
```
### 2: (NO-GO)
** ():**
`: (TC-AUTH-001, AC-01: ).`
** ():**
```markdown
## 1.
* **:** **NO-GO**
* **:** (P0) TC-AUTH-001
## 4.
* **:** ROLLED_BACK
* ** NO-GO :** (P0) TC-AUTH-001
```
### ()
** ():**
`: 1S0SQL.`
**AI:**
**GO**S0
**:**
********Agent
## 📊 (EVALUATION)
### (100)
| | | |
| :--- | :--- | :--- |
| **** | 50% | `GO/NO-GO` 100% |
| **** | 30% | |
| **** | 15% | 线 |
| **** | 5% | |
###
#### (Critical)
- [ ]
- [ ] GO/NO-GO
- [ ] NO-GO
- [ ] GO线线
## (EXCEPTIONS)
### 1:
* **:**
* **:**
1.
2. `INDETERMINATE` ()
3.
* **退:**
### 2:
* **:**
* **:**
1.
2. `NO-GO`
3. `[Test Case ID]`
* **退:**
@@ -0,0 +1,209 @@
# Agent v2.0
## 📌 (META)
* ****: 2.0.0
* ****: Gemini, GPT, Claude
* ****: 2025-12-25
* ****: -
* ****: 使
## 🌍 (CONTEXT)
###
Agent ** (Master Orchestrator)** ****使-****
###
* Agent
*
### 使
###
* **:**
* **:**
* **:**
* **:** 使
## 👤 (ROLE)
###
**AI (AI Project Orchestrator)**** Agent**
###
| | | |
| :--- | :--- | :--- |
| **** | | / Agent ( Step 2) |
| **** | | |
| **** | | |
| **** | | **** |
| ** Agent ** | | Agent |
###
1. ** (Perfection is the Only Exit):**
2. ** (Failure Triggers Re-planning):** `NO-GO` ****
3. ** (State Must Be Recorded):**
4. ** (Archiving is a By-product of Success):**
###
** (Cybernetic Loop)** ** (Sense) -> (Compare) -> (Act)**
* **:**
* **:**
* **:**
## 📋 (TASK)
###
**(S2)->(S3)->(S4)******
###
#### Phase 1:
```
1.1
> (GO / NO-GO)
1.2
>
```
#### Phase 2:
```
2.1 IF == 'GO' THEN
[]
ELSE (IF == 'NO-GO' or 'INDETERMINATE')
[]
END IF
```
#### Phase 3:
```
3.1 ** (Success Workflow):**
3.1.1
3.1.2 **:** S1-S4 CHANGELOG.md
3.1.3
3.2 ** (Failure Workflow):**
3.2.1 ()
3.2.2
3.2.3
```
#### Phase 4:
```
4.1 IF [] THEN
**: - Agent**
ELSE IF [] THEN
**: - Agent**
ELSE (IF [] )
**: **
END IF
```
## 🔄 / (I/O)
###
```json
{
"required_fields": {
"master_task_list": "类型: object, 说明: 描述整个项目所有任务及其当前状态的JSON对象。",
"latest_validation_package": "类型: string, 说明: 来自第四环节的最新《验证与发布证据包》Markdown文本。"
},
"optional_fields": {
"all_artifacts_from_current_loop": "类型: object, 说明: 本次成功循环中S1-S4的所有产物,用于归档。"
}
}
```
###
Agent ********
**1. (Control Command):**
```json
{
"next_action": "[RESTART_FROM_STEP_2 | PROCEED_TO_NEXT_TASK | TERMINATE_SUCCESS]",
"context_for_step_2": {
"original_spec_id": "...",
"task_to_process": "...",
"failure_context": { //仅在失败时提供
"failed_task": "...",
"root_cause": "...",
"evidence_link": "..."
}
},
"final_report": "..." //仅在最终成功时提供
}
```
**2. (Archival Document - ):**
* ()
## 💡 (EXAMPLES)
### 1:
**:**
* `master_task_list`: `{"task_auth": {"status": "IN_PROGRESS"}}`
* `latest_validation_package`: `...: NO-GO... : TC-AUTH-001 ...`
** ():**
```json
{
"next_action": "RESTART_FROM_STEP_2",
"context_for_step_2": {
"original_spec_id": "SPEC-001",
"task_to_process": "task_auth",
"failure_context": {
"failed_task": "task_auth",
"root_cause": "Integration test failed: TC-AUTH-001",
"evidence_link": "path/to/validation_package.md"
}
}
}
```
**:** `master_task_list` `{"task_auth": {"status": "FAILED", "reason": "TC-AUTH-001 failed"}}`
### 2:
**:**
* `master_task_list`: `{"task_auth": {"status": "IN_PROGRESS"}, "task_payment": {"status": "PENDING"}}`
* `latest_validation_package`: `...: GO...`
* `all_artifacts...`: `{...}`
** ():**
```json
{
"next_action": "PROCEED_TO_NEXT_TASK",
"context_for_step_2": {
"original_spec_id": "SPEC-001",
"task_to_process": "task_payment",
"failure_context": null
}
}
```
**:**
1. `task_auth` CHANGELOG
2. `master_task_list` `{"task_auth": {"status": "COMPLETED"}, "task_payment": {"status": "IN_PROGRESS"}}`
## 📊 (EVALUATION)
### (100)
| | | |
| :--- | :--- | :--- |
| **** | 50% | `GO/NO-GO` `RESTART/PROCEED/TERMINATE` |
| **** | 30% | |
| **** | 20% | |
## (EXCEPTIONS)
### 1:
* **:** N N=3
* **:**
1.
2. `FATAL_ERROR: MAX_RETRIES_EXCEEDED`
3.
* **退:**
### 2:
* **:** `master_task_list` 访
* **:**
1.
2.
* **退:**
@@ -0,0 +1,21 @@
# AGENTS - workflow-orchestrator
## 目录骨架
```
workflow-orchestrator/
├── AGENTS.md # 本文件(目录级约束)
├── SKILL.md # 技能入口,状态机与 hook 约定
├── CHANGELOG.md # 变更记录
├── references/
│ └── index.md # 参考索引与待补充子文档
```
## 职责与依赖
- 职责:用文件事件 hook + 轻量状态机,编排 `step1~step5` 的自动执行,支持失败回跳、归档与闭环。
- 上游:`../step1_需求输入.jsonl` ... `../step5_总控与循环.jsonl`(五步提示词定义)。
- 下游:`../workflow_engine/*`(状态机引擎与 Hook),产物落盘到 `../workflow_engine/artifacts/`
## 使用要点
- 状态文件:`../workflow_engine/state/current_step.json` 为唯一调度入口;每次更新即触发对应 Runner。
- 总控逻辑:Step5 依据 `verify.status` 回跳 step2 或标记完成;防止无限循环需在 Runner 中实现熔断计数。
- 产物:按 `../workflow_engine/artifacts/<run_id>/<step>.{json,md}` 落盘,便于审计与归档。
@@ -0,0 +1,7 @@
# CHANGELOG
## 2025-12-25T04:58:27+08:00 - 创建 workflow-orchestrator 技能骨架
- 新增 `SKILL.md` 定义基于文件 hook 的闭环编排技能,覆盖触发条件、状态机与回跳逻辑。
- 新增 `references/index.md` 索引,预留 state/CI 子文档占位。
- 新增 `AGENTS.md` 记录目录骨架与依赖关系。
- 验证:文档编写,无脚本运行(TODO)。
@@ -0,0 +1,87 @@
---
name: workflow-orchestrator
description: "自动化闭环开发工作流编排:基于状态机+文件系统 hook 驱动五步 Agent(规格/计划/实施/验证/总控),适用于需要最小依赖、可复现的全自动软件流水线。"
---
# workflow-orchestrator 技能
一个以「文件事件 hook + 轻量状态机」驱动的全自动开发闭环编排技能,连接现有五个 workflow_steps 提示词(step1~step5),在本地/CI 均可无服务依赖运行。
## 何时使用此技能
- 需要让 step1~step5 提示词按顺序自动执行,并在验证失败时回跳重跑计划/实施。
- 希望用最小依赖(仅文件系统与 shell)实现自动化,而非部署消息队列/微服务。
- 想在 CI 或本地通过简单命令/文件变更触发整条流水线。
- 需要总控(Step5)记录失败上下文并驱动循环直至所有任务完成。
## 不适用 / 边界
- 不处理外部云编排(Airflow/Temporal);若需分布式调度请另用专用框架。
- 模型调用凭证/安全策略需由外部注入,本技能不管理密钥。
- 不创建新提示词内容,只编排已存在的 `workflow_steps/stepN_*.jsonl`
- 输入需求缺失时,请先完成 Step1 的人工确认,再启动编排。
## 快速参考
- 目录约定
- 状态:`workflow_steps/state/current_step.json`
- 产物:`workflow_steps/artifacts/<run_id>/<step>.json|md`
- Hook 脚本:`workflow_engine/hook_runner.sh`(监听 state 变更)
- Runner`workflow_engine/runner.py run --step N --input INPUT.json --state STATE.json`
- 状态文件最小 Schema
```json
{
"run_id": "2025-12-25T05-00-00Z",
"step": "step3",
"status": "pending|running|success|failed",
"payload_path": "artifacts/<run>/<prev>.json",
"next_hint": "optional textual guidance",
"verify": {"status": "failed|success", "details": "..."},
"target_step": "step2|step5|done"
}
```
- Hook 触发(最小命令行示例)
```bash
# 启动监听(依赖 inotify-tools
workflow_engine/hook_runner.sh
```
文件 `state/current_step.json` 每次更新即触发对应 `runner.py`
- `step1 -> step2 -> step3 -> step4 -> step5`
- Step5 根据 `verify.status` 写入 `target_step=step2`(失败回跳)或 `done`(全部完成)。
- 手动启动/重跑
```bash
# 人工输入需求后触发 step1
python workflow_engine/runner.py run --step 1 --input user_request.json --state workflow_steps/state/current_step.json
```
## 示例
### 示例 1:全链路首轮
- 输入:`user_request.json` 包含原始需求。
- 步骤:运行 `runner.py step1` 生成规格书 → hook 自动推进 step2/3/4 → step5 归档。
- 期望:`artifacts/<run>/locked_spec.md`、计划、补丁、测试报告齐全;state 标记 `done`
### 示例 2:验证失败回跳
- 输入:Step4 写出 `verify.status=failed`(含失败用例与日志)。
- 步骤:Step5 读取失败上下文写 `target_step=step2`hook 触发 step2 重新规划 → step3 → step4。
- 期望:第二轮通过;state 历史包含失败记录;产物追加带版本号的补丁/报告。
### 示例 3CI 集成
- 输入:CI job 上传需求与代码变更,触发 `runner.py step1`
- 步骤:CI 中后台运行 `hook_runner.sh`;每个 step 输出工件到 `artifacts/` 并作为 job artifact。
- 期望:流水线失败时 CI 直接暴露 Step4 报告;通过后 Step5 归档并关闭 job。
## 参考资料
- `workflow_steps/step1_需求输入.jsonl` ... `step5_总控与循环.jsonl`
- `workflow_engine/hook_runner.sh`(需自建,监听 `state/current_step.json`
- `workflow_engine/runner.py`(需自建,封装模型调用与状态写入)
## 维护
- 来源:仓库内现有五步提示词;不引用外部未验证信息。
- 最后更新:2025-12-25
- 已知限制:未内置凭证管理;需要 inotify-tools 或同类文件监听工具。
@@ -0,0 +1,7 @@
# workflow-orchestrator 参考索引
- `../SKILL.md`:技能入口、触发条件、状态机与 hook 约定。
- `state-schema`:建议的 `state/current_step.json` 字段与示例。
- `ci-notes`:在 CI 中使用本技能的注意事项与命令示例(TODO)。
> TODO: 如需更详细的状态机图、命令清单或集成脚本,请在此添加子文档并更新索引。
@@ -0,0 +1,79 @@
# workflow_engine
全自动开发闭环的轻量编排引擎,基于 **文件事件 Hook + 状态机** 实现。
## 目录结构
```
workflow_engine/
├── runner.py # 状态机调度器
├── hook_runner.sh # 文件监听 Hook (inotify)
├── state/
│ └── current_step.json # 当前状态
└── artifacts/
└── <run_id>/ # 每次运行的产物
├── step1.json
├── step2.json
└── ...
```
## 快速开始
### 1. 手动模式(无 Hook
```bash
# 启动新工作流
python runner.py start
# 查看状态
python runner.py status
```
### 2. 自动模式(Hook 监听)
```bash
# 终端 1: 启动 Hook 监听
./hook_runner.sh
# 终端 2: 启动工作流(状态变更会自动触发后续步骤)
python runner.py start
```
## 状态文件 Schema
```json
{
"run_id": "20251225T053800",
"step": "step3",
"status": "running|success|failed|completed|fatal_error",
"payload_path": "artifacts/20251225T053800/step2.json",
"verify": {"status": "success|failed", "details": "..."},
"target_step": "step2|step5|done",
"retry_count": 0
}
```
## 流程控制
```
step1 → step2 → step3 → step4 → step5
┌─────────────┴─────────────┐
│ │
verify=failed verify=success
│ │
▼ ▼
target_step=step2 target_step=done
(回跳重规划) (流程结束)
```
## 熔断机制
- 同一任务最多重试 3 次
- 超过后状态变为 `fatal_error`,需人工介入
## TODO
- [ ] 集成实际 LLM 调用(替换 runner.py 中的 MOCK
- [ ] 添加 CI 集成示例
- [ ] 支持并行任务处理
@@ -0,0 +1,6 @@
{
"step": "step1",
"status": "success",
"output": "[MOCK] step1 completed",
"timestamp": "2025-12-25T05:45:01.810163"
}
@@ -0,0 +1,6 @@
{
"step": "step2",
"status": "success",
"output": "[MOCK] step2 completed",
"timestamp": "2025-12-25T05:45:01.812465"
}
@@ -0,0 +1,6 @@
{
"step": "step3",
"status": "success",
"output": "[MOCK] step3 completed",
"timestamp": "2025-12-25T05:45:01.816471"
}
@@ -0,0 +1,6 @@
{
"step": "step4",
"status": "success",
"output": "[MOCK] step4 completed",
"timestamp": "2025-12-25T05:45:01.823537"
}
@@ -0,0 +1,6 @@
{
"step": "step5",
"status": "success",
"output": "[MOCK] step5 completed",
"timestamp": "2025-12-25T05:45:01.824088"
}
@@ -0,0 +1,38 @@
#!/bin/bash
# workflow_engine/hook_runner.sh
# 文件事件 Hook - 监听状态文件变更并触发调度
#
# 依赖: inotify-tools (apt install inotify-tools)
# 用法: ./hook_runner.sh
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
STATE_FILE="$SCRIPT_DIR/state/current_step.json"
RUNNER="$SCRIPT_DIR/runner.py"
echo "[HOOK] 启动监听: $STATE_FILE"
echo "[HOOK] 按 Ctrl+C 停止"
# 检查依赖
if ! command -v inotifywait &> /dev/null; then
echo "[ERROR] 需要安装 inotify-tools: sudo apt install inotify-tools"
exit 1
fi
# 确保状态文件存在
mkdir -p "$(dirname "$STATE_FILE")"
[ -f "$STATE_FILE" ] || echo '{"status":"idle"}' > "$STATE_FILE"
# 监听文件修改事件
inotifywait -m -e modify "$STATE_FILE" 2>/dev/null | while read -r directory event filename; do
echo "[HOOK] $(date '+%H:%M:%S') 检测到状态变更"
# 读取 target_step
target=$(python3 -c "import json; print(json.load(open('$STATE_FILE')).get('target_step',''))" 2>/dev/null)
if [ "$target" = "done" ]; then
echo "[HOOK] 工作流已完成"
elif [ -n "$target" ] && [ "$target" != "null" ]; then
echo "[HOOK] 触发调度 -> $target"
python3 "$RUNNER" dispatch
fi
done
@@ -0,0 +1,197 @@
#!/usr/bin/env python3
"""
workflow_engine/runner.py - 轻量状态机调度器
用于编排 step1~step5 的全自动开发闭环
"""
import json
import os
import sys
from datetime import datetime
from pathlib import Path
BASE_DIR = Path(__file__).parent.parent
STATE_FILE = BASE_DIR / "workflow_engine/state/current_step.json"
ARTIFACTS_DIR = BASE_DIR / "workflow_engine/artifacts"
PROMPTS_DIR = BASE_DIR
STEP_MAP = {
"step1": "step1_需求输入.jsonl",
"step2": "step2_执行计划.jsonl",
"step3": "step3_实施变更.jsonl",
"step4": "step4_验证发布.jsonl",
"step5": "step5_总控与循环.jsonl",
}
STEP_FLOW = ["step1", "step2", "step3", "step4", "step5"]
MAX_RETRY_COUNT = 3
def load_state() -> dict:
if STATE_FILE.exists():
return json.loads(STATE_FILE.read_text(encoding="utf-8"))
return {"run_id": None, "step": None, "status": "idle"}
def save_state(state: dict):
STATE_FILE.parent.mkdir(parents=True, exist_ok=True)
STATE_FILE.write_text(json.dumps(state, ensure_ascii=False, indent=2), encoding="utf-8")
def get_run_id() -> str:
return datetime.now().strftime("%Y%m%dT%H%M%S")
def get_artifact_path(run_id: str, step: str, ext: str = "json") -> Path:
path = ARTIFACTS_DIR / run_id
path.mkdir(parents=True, exist_ok=True)
return path / f"{step}.{ext}"
def next_step(current: str) -> str | None:
"""返回下一步,step5 后返回 None"""
try:
idx = STEP_FLOW.index(current)
return STEP_FLOW[idx + 1] if idx + 1 < len(STEP_FLOW) else None
except ValueError:
return None
def run_step(step: str, state: dict, input_data: dict = None):
"""执行单个步骤(实际调用模型的占位)"""
prompt_file = PROMPTS_DIR / STEP_MAP.get(step, "")
if not prompt_file.exists():
print(f"[ERROR] Prompt file not found: {prompt_file}")
return None
run_id = state.get("run_id") or get_run_id()
# 更新状态为 running
state.update({"run_id": run_id, "step": step, "status": "running"})
save_state(state)
print(f"[RUN] {step} | run_id={run_id}")
print(f" prompt: {prompt_file.name}")
# === 这里是模型调用占位 ===
# 实际实现时替换为:
# result = call_llm(prompt_file.read_text(), input_data)
result = {
"step": step,
"status": "success", # 模拟成功
"output": f"[MOCK] {step} completed",
"timestamp": datetime.now().isoformat()
}
# 可选:通过环境变量模拟 step4 验证失败,用于本地验证重试/熔断逻辑
# 默认不生效,不影响正常使用
if step == "step4":
mock_verify = os.environ.get("VIBE_WORKFLOW_MOCK_VERIFY_STATUS")
if mock_verify in ("success", "failed"):
result["verify"] = {"status": mock_verify}
# ========================
# 保存产物
artifact_path = get_artifact_path(run_id, step)
artifact_path.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
print(f" artifact: {artifact_path}")
return result
def dispatch():
"""根据当前状态分发到下一步"""
state = load_state()
target = state.get("target_step")
if target == "done":
print("[DONE] 所有任务完成")
return
if target:
# 有明确的目标步骤(来自 step5 的指令)
run_step(target, state)
else:
print("[IDLE] 无待执行任务,使用 'run --step 1' 启动")
def start_workflow(input_file: str = None):
"""从 step1 启动新的工作流"""
run_id = get_run_id()
state = {"run_id": run_id, "step": None, "status": "pending"}
input_data = None
if input_file and Path(input_file).exists():
input_data = json.loads(Path(input_file).read_text(encoding="utf-8"))
print(f"[START] 新工作流 run_id={run_id}")
# 显式状态机:支持 step5 失败回跳 step2,并可多次重试(带熔断)
step_idx = 0
while step_idx < len(STEP_FLOW):
step = STEP_FLOW[step_idx]
result = run_step(step, state, input_data)
if not result:
state["status"] = "error"
save_state(state)
return
# step4 后检查验证结果
if step == "step4":
verify_status = result.get("verify", {}).get("status", "success")
state["verify"] = {"status": verify_status}
# step5 决定下一步(回跳/完成)
if step == "step5":
if state.get("verify", {}).get("status") == "failed":
next_retry_count = state.get("retry_count", 0) + 1
if next_retry_count > MAX_RETRY_COUNT:
print(f"[FATAL] 超过最大重试次数")
state["retry_count"] = next_retry_count
state["target_step"] = "step2"
state["status"] = "fatal_error"
save_state(state)
return
state["retry_count"] = next_retry_count
state["target_step"] = "step2"
state["status"] = "retry"
save_state(state)
print(f"[RETRY {next_retry_count}/{MAX_RETRY_COUNT}] 验证失败,返回 step2 重规划")
step_idx = STEP_FLOW.index("step2")
continue
state["target_step"] = "done"
state["status"] = "completed"
save_state(state)
print(f"[COMPLETE] 工作流完成")
return
save_state(state)
step_idx += 1
def main():
if len(sys.argv) < 2:
print("Usage:")
print(" python runner.py start [input.json] - 启动新工作流")
print(" python runner.py dispatch - 根据状态分发")
print(" python runner.py status - 查看当前状态")
return
cmd = sys.argv[1]
if cmd == "start":
input_file = sys.argv[2] if len(sys.argv) > 2 else None
start_workflow(input_file)
elif cmd == "dispatch":
dispatch()
elif cmd == "status":
state = load_state()
print(json.dumps(state, ensure_ascii=False, indent=2))
else:
print(f"Unknown command: {cmd}")
if __name__ == "__main__":
main()
@@ -0,0 +1,9 @@
{
"run_id": "20251225T054501",
"step": "step5",
"status": "completed",
"verify": {
"status": "success"
},
"target_step": "done"
}
@@ -0,0 +1,349 @@
# 关于手机ssh任意位置链接本地计算机,基于frp实现的方法
不会弄怎么办?服务器和电脑都安装好codex(不会直接问gpt怎么安装,终端输入命令就行了),然后把文档粘贴到codex里面让他帮你配置好就行,实在不会弄,直接找我,telegram=https://t.me/desci0 x=https://x.com/123olp ps:付费代搭)
# 📌 前置准备工作(Prerequisites
在开始部署 FRP 服务端与客户端之前,请确保具备以下环境与工具。这些前置条件是保证 FRP 隧道正常工作所必需的。
## 1. 基础环境要求
### ✔ 一台可长期在线的 **AWS EC2 实例**
* 推荐系统:Ubuntu 20.04/22.04(本文以 Ubuntu 为例)
* 必须具备公网 IP(AWS 默认提供)
* 需要具备修改安全组规则的权限(开放 FRP 端口)
用途:作为 FRP 服务器端(frps),给 Windows 电脑提供固定访问入口。
## 2. 一台能够上网的 **Windows 电脑**
* Windows 10 或 Windows 11
* 需要具备普通用户权限(但部分配置需要管理员权限)
* 必须已安装 **OpenSSH Server**
用途:作为 FRP 客户端(frpc),无论连接什么网络,都可自动挂到 AWS 上。
## 3. 必需下载的软件 / 仓库
### ✔ FRPFast Reverse Proxy
仓库地址(官方):
```
https://github.com/fatedier/frp
```
本部署使用版本:
```
frp_0.58.1
```
下载页面:
```
https://github.com/fatedier/frp/releases
```
需要下载:
* Linux 版(用于 AWS
* Windows 版(用于本地电脑)
## 4. 必须安装的软件
### ✔ WindowsOpenSSH Server + OpenSSH Client
安装路径:
```
设置 → 应用 → 可选功能 → 添加功能
```
用途:提供 SSH 登录能力,让 FRP 转发到 Windows 的 SSH。
## 5. 终端工具
### ✔ Termius(推荐)
* 用于从手机或电脑通过 SSH 连接你的 Windows
* 支持生成 SSH Key
* 支持管理多个主机
必须使用 Termius 生成 SSH 私钥(因为你启用了“仅密钥登录”)。
官方下载:
```
https://termius.com
```
## 6. 网络与端口要求
在 AWS 安全组中必须开放以下端口:
| 端口 | 用途 | 是否必须 |
| ------------------------------ | --------------------- | ---- |
| **FRP 控制端口**(如:1234 或 114514 | frpc → frps 连接 | ✔ 必须 |
| **SSH 映射端口**(如:12345 或 114515 | Termius → Windows SSH | ✔ 必须 |
若使用 UFW(Ubuntu 防火墙),还需:
```
sudo ufw allow <FRP控制端口>/tcp
sudo ufw allow <SSH映射端口>/tcp
```
## 7. 公钥 / 私钥 准备(密钥登录必需)
你需要预先准备:
* Termius 生成的 SSH 私钥(本地)
* Termius 生成的 SSH 公钥(需放到 Windows 的 authorized_keys
本部署已经禁用密码登录,因此 **私钥必须妥善保管,否则将无法登录 Windows**
## 8. 基本 Linux 操作能力
需要了解以下基础命令(很简单):
```
cd /path
nano / vim / notepad
chmod / chown
ps -ef | grep
ss -lnpt
nohup <cmd> &
tail -f
```
你文档中都已覆盖,不会有额外要求。
# 📌 前置条件总结(最终版)
```
必须具备:
- AWS EC2Ubuntu,带公网 IP
- Windows 电脑(安装 OpenSSH Server
- Termius(用于 SSH + 生成密钥)
- FRP(下载 Linux + Windows 版本)
- AWS 安全组已开放 FRP 控制端口与 SSH 映射端口
- Termius 生成的 SSH 密钥对
```
只要满足以上前置准备,你的 FRP 隧道、SSH 密钥登录、跨网络远程访问电脑 100% 能正常运行。
如果你愿意,我还可以帮你:
* 把整个文档串成专业正式的一体化教程
* 为你的文档添加「适用范围、版本说明、架构概览图、流程图」
* 为 FRP 部署提供 systemd 服务模板
* 为 Windows 提供后台 frpc 自启脚本(更可靠)
需要的话告诉我!
# FRP 服务器端部署说明
本说明记录了当前 AWS EC2 (Ubuntu) 上的 FRP 服务端配置与操作方法,便于后续维护或重建。
## 基本信息
- 工作目录:`/home/ubuntu/.frp`
- FRP 版本:`frp_0.58.1_linux_amd64`
- 可执行文件:`/home/ubuntu/.frp/frp_0.58.1_linux_amd64/frps`
- 配置文件:`/home/ubuntu/.frp/frp_0.58.1_linux_amd64/frps.ini`
- 日志文件:`/home/ubuntu/.frp/frps.log`
- 启动脚本:`/home/ubuntu/.frp/start_frps.sh`
- 监听端口:
- 控制端口 `bind_port = 1234`
- SSH 映射端口 `12345`
- token`123456`
## 安装步骤
1. 新建目录并下载 FRP
```bash
mkdir -p /home/ubuntu/.frp
cd /home/ubuntu/.frp
wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
tar -zxf frp_0.58.1_linux_amd64.tar.gz
```
2. 创建配置 `/home/ubuntu/.frp/frp_0.58.1_linux_amd64/frps.ini`
```ini
[common]
bind_port = 1234
token = 123456
```
3. 编写启动脚本 `/home/ubuntu/.frp/start_frps.sh`(已就绪):
```bash
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
FRP_DIR="$BASE_DIR/frp_0.58.1_linux_amd64"
FRPS_BIN="$FRP_DIR/frps"
CONFIG_FILE="$FRP_DIR/frps.ini"
LOG_FILE="$BASE_DIR/frps.log"
if ! [ -x "$FRPS_BIN" ]; then
echo "frps binary not found at $FRPS_BIN" >&2
exit 1
fi
if ! [ -f "$CONFIG_FILE" ]; then
echo "Config not found at $CONFIG_FILE" >&2
exit 1
fi
PIDS=$(pgrep -f "frps.*frps\\.ini" || true)
if [ -n "$PIDS" ]; then
echo "frps is running; restarting (pids: $PIDS)..."
kill $PIDS
sleep 1
fi
echo "Starting frps with $CONFIG_FILE (log: $LOG_FILE)"
cd "$FRP_DIR"
nohup "$FRPS_BIN" -c "$CONFIG_FILE" >"$LOG_FILE" 2>&1 &
sleep 1
PIDS=$(pgrep -f "frps.*frps\\.ini" || true)
if [ -n "$PIDS" ]; then
echo "frps started (pid: $PIDS)"
else
echo "frps failed to start; check $LOG_FILE" >&2
exit 1
fi
```
## 启动与停止
- 启动/重启:
```bash
cd /home/ubuntu/.frp
bash ./start_frps.sh
```
- 查看进程:`ps -ef | grep frps`
- 查看监听:`ss -lnpt | grep 1234`
- 查看日志:`tail -n 50 /home/ubuntu/.frp/frps.log`
- 停止(如需手动):`pkill -f "frps.*frps.ini"`
## 安全组与防火墙
- AWS 安全组(sg-099756caee5666062)需开放入站 TCP 1234FRP 控制)与 12345SSH 映射)。
- 若使用 ufw,需执行:
```bash
sudo ufw allow 1234/tcp
sudo ufw allow 12345/tcp
```
## 远程客户端要求
- Windows `frpc.ini` 中 `server_addr` 指向该 EC2 公网 IP`server_port=1234``remote_port=12345`token 与服务器一致。
- Termius/SSH 客户端使用 `ssh lenovo@<AWS IP> -p 12345`,认证方式为密钥(Termius Keychain 生成的私钥)。
## 维护建议
- FRP 官方已提示 INI 格式未来会被弃用,后续升级建议改用 TOML/YAML。
- 可将 `start_frps.sh` 注册成 systemd 服务,确保实例重启后自动拉起。
- 定期检查 `frps.log` 是否有异常连接或错误,并确保 token 不泄露。
FRP Windows 客户端配置说明
================================
最后更新:2025-12-05
适用环境:Windows 10/11,用户 lenovo,本机已安装 OpenSSH Server。
一、目录与文件
- FRP 程序目录:C:\frp\
- frpc.exe
- frpc.ini(客户端配置)
- start_frpc.bat(后台启动脚本)
- SSH 密钥:
- 私钥:C:\Users\lenovo\.ssh\666
- 公钥:C:\Users\lenovo\.ssh\666.pub
- 管理员授权公钥:C:\ProgramData\ssh\666_keys
二、frpc.ini 内容(当前生效)
[common]
server_addr = 13.14.223.23
server_port = 1234
token = 123456
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 12345
三、启动与自启
1) 手动前台验证(可选)
PowerShell
cd C:\frp
.\frpc.exe -c frpc.ini
2) 后台快捷启动
双击 C:\frp\start_frpc.bat
3) 开机自启(简单方式)
将 start_frpc.bat 复制到启动文件夹:
C:\Users\lenovo\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
下次登录自动后台启动。
四、SSH 连接方式
- 终端命令:
ssh -i "C:\Users\lenovo\.ssh\666" -p 12345 lenovo@13.14.223.23
- Termius 填写:
Host 13.14.223.23
Port 12345
User lenovo
Key 选择 C:\Users\lenovo\.ssh\666(无口令)
五、权限与安全
- 私钥权限已限制为 lenovo、SYSTEM 可读。
- sshd 已关闭密码登录(PasswordAuthentication no),仅密钥。
- 管理员组用户使用 C:\ProgramData\ssh\666_keys 作为授权列表。
六、常用检查
- 查看 frpc 运行:任务管理器或
netstat -ano | findstr 1234
- 查看 frpc 日志(WSL 版,如需):/tmp/frpc-wsl.log
- 测试 SSH:上面的 ssh 命令返回 ok 即通。
七、故障排查速查
- "Permission denied (publickey)":
* 确认 666 公钥在 C:\ProgramData\ssh\666_keys
* 确认私钥路径/权限正确。
- "Connection refused": frps 未运行或端口 1234/12345 未放行。
- frpc 未连接:前台运行 frpc 查看提示,或检查 frpc.ini 中 server_addr、token 是否匹配。
Termius(手机端)连接步骤:
1. 创建主机
- Host (Address): 13.14.223.23
- Port: 12345
- Label 可自定义(如 FRP-Home
2. 认证方式选择 Key
- 在 Authentication 选择 Key
- 点击 Import Key(或“从文件/粘贴”)
- 将本机私钥 666 的内容导入(建议用安全方式传到手机,再粘贴;如果 Termius 支持从文件导入,选该文件)。
私钥内容在 PC 路径:C:\Users\lenovo\.ssh\666(纯文本,-----BEGIN OPENSSH PRIVATE KEY----- 开头)。
- Passphrase 留空(此钥无口令)。
3. 用户名
- Username: lenovo
4. 保存并连接
- 首次连接接受指纹提示即可。
5. 可选安全措施
- 在 Termius 中为该私钥设置本地加密密码(App 层保护)。
- 若不方便复制私钥,可生成移动端新钥,并将其公钥追加到 C:\ProgramData\ssh\666_keys,但目前 666 已可用,按上面导入即可。
一键启动命令(在当前管理员 PowerShell 执行)
# 放行、防解除阻 & 直接前台启动
Add-MpPreference -ExclusionPath "C:\frp"
Unblock-File C:\frp\frpc.exe
cd C:\frp
.\frpc.exe -c frpc.ini
如果想后台启动(不占窗口):
cd C:\frp
Start-Process -FilePath ".\frpc.exe" -ArgumentList "-c frpc.ini" -WindowStyle Hidden
需要开机自启(最高权限):
schtasks /Create /TN "FRPClient" /TR "C:\frp\frpc.exe -c C:\frp\frpc.ini" /SC ONLOGON /RL HIGHEST /F /RU lenovo
@@ -0,0 +1,167 @@
# 12Factor.me - 四阶段×十二原则方法论
源:https://www.12factor.me/zh
> AI 协作时代的 10x 工程效率提升方法论
---
## 阶段 1: 准备
*建立清晰的信息架构和上下文环境*
### 1. 单一真源 (Single Source of Truth)
**核心概念**: 信息分散会导致上下文混乱,容易造成人机双方的误判。
**推荐实践**:
- 将所有需求、设计及上下文集中于统一的文档中心 (如 Notion / Confluence / GitHub Wiki)。
- 与 AI 协作时,应直接引用此“真源”,而非随意复制粘贴信息。
**反面模式**:
- 团队成员各自维护不同版本的文档,导致 AI 给出的回应和建议不一致。
### 2. 提示词先行 (Prompt First)
**核心概念**: 将提示词 (Prompt) 视为新一代的设计文档。
**推荐实践**:
- 在任务开始前,优先编写提示词,用以明确输入、输出、风格和约束条件。
- 团队内部复用经过验证和优化的提示词模板。
**反面模式**:
- 未经规划,直接要求 AI 编写代码,导致方向错误和不必要的返工。
### 3. 上下文洁净 (Context Hygiene)
**核心概念**: 干净的上下文能让 AI 更精准。
**推荐实践**:
- 每个新任务开独立会话,避免旧内容干扰
- 定期用一句话总结现状,让 AI "对齐背景"
**反面模式**:
- 把三天前的对话和今天的任务混在一起
---
## 阶段 2: 执行
*高效协作完成具体任务*
### 4. 人类在环 (Human-in-the-Loop)
**核心概念**: AI 产出快,但只有人类能把握方向与业务判断。
**推荐实践**:
- AI 给初稿,人类负责关键决策与风险把关
- 对重要功能先进行逻辑验证,再合并代码
**反面模式**:
- 全盘接受 AI 产出,不做任何审查
### 5. 任务块化 (Chunked Work)
**核心概念**: 大任务拆小块,易于迭代与修正。
**推荐实践**:
- 任务控制在可 10~30 分钟完成的小范围
- 每块结束后立即验证结果
**反面模式**:
- 一次性让 AI 写 5000 行,结果无法调试
### 6. 并行流动 (Parallel Flow)
**核心概念**: AI 工作时,人类做低切换成本的副任务,保持节奏不断。
**推荐实践**:
- 准备一个"副任务清单",包含文档整理、小修复、代码审查等
- 等待 AI 时,不接入高认知负载的新任务,避免切换开销过大
**反面模式**:
- 等待 AI 时去刷社交媒体,导致节奏断档
---
## 阶段 3: 协作
*管理协作过程中的认知负载和工作流*
### 7. 负载预算 (Cognitive Load Budget)
**核心概念**: 人类注意力是稀缺资源。
**推荐实践**:
- 为 AI 协作设定每日时长上限
- 在精神高峰期安排深度审查任务
**反面模式**:
- 全天候黏着 AI 工作,晚上完全耗尽
### 8. 流保护罩 (Flow Protection)
**核心概念**: 高专注流一旦被打断,恢复成本极高。
**推荐实践**:
- 设定专注时段(如 90 分钟),屏蔽通知与打扰
- AI 交互也在专注流中批量进行,而非零散触发
**反面模式**:
- 边写代码边回微信边看 AI 输出,效率断崖式下降
### 9. 可复现性 (Reproducible Sessions)
**核心概念**: 协作过程可回溯,才能持续优化。
**推荐实践**:
- 保存 Prompt、AI 版本、变更原因到代码库或知识库
- 出现 bug 时可重放生成过程
**反面模式**:
- AI 生成历史无记录,出错无法还原原因
---
## 阶段 4: 迭代
*持续学习和改进协作模式*
### 10. 休息反思 (Rest & Reflection)
**核心概念**: 冲刺后复盘,才能越跑越快。
**推荐实践**:
- 冲刺结束后,花 5 分钟复盘 AI 产出与预期差异
- 更新 Prompt 模板,积累"踩坑记录"
**反面模式**:
- 连续冲刺,累积错误不总结
### 11. 技能均衡 (Skill Parity)
**核心概念**: AI 是放大镜,放大能力,也放大短板。
**推荐实践**:
- 持续学习领域知识与代码审查技巧
- 对 AI 输出保持独立判断能力
**反面模式**:
- 完全依赖 AI,失去手写能力与技术洞察力
### 12. 好奇文化 (Culture of Curiosity)
**核心概念**: 好奇心驱动探索,避免"盲信 AI"。
**推荐实践**:
- 面对 AI 答案,先问"为什么",再问"还能更好吗"
- 团队分享 AI 使用经验与改进思路
**反面模式**:
- 对 AI 方案照单全收,从不质疑
---
*生成自 [12Factor.me](https://12factor.me)*
*许可证: MIT*