Files
qiuruiandClaude Opus 4.6 bbea70dc9c docs: 刷新全量文档;修复 executor 成功/失败状态判断;添加三专项独立项目
文档刷新:
- CLAUDE.md/README.md/DEVELOP.md/RELEASE.md 同步 org v2 架构
  (Boss/GroupLeader/SeniorDev/Ops 组织层、EventBus/DailyReport/OpsHub/
   AgentScorer/VersionPipeline 工具层、nrf-dev/esp32-dev/market-* 新角色)
- 清除所有 /data/rockchip 路径引用 → /data/company(源码+测试+前端)
- 保留 "Rockchip" 芯片厂商名作为技术描述(hw_engineer/algo_vision 等)
- docs/plans/ 历史文档保持原样(反映当时路径状态)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 08:58:39 +08:00

9.2 KiB
Raw Permalink Blame History

NMFS Agents 开发指南

环境搭建

python3.10 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"

认证

Agent 以子进程调用 claude --print,支持两种认证:

方式 配置 优先级
Claude CLI 登录 claude logintoken 存储于 ~/.claude/ 推荐,无需配置
API Key 设置 ANTHROPIC_API_KEY 环境变量 备选

架构概览

Agent → CLI 映射

DeveloperAgent.run(task)
  └─> subprocess.Popen([
        "claude", "--print",
        "--output-format", "json",
        "--no-session-persistence",
        "--model", "claude-sonnet-4-6",
        "--append-system-prompt", "<项目+模式上下文>",
        # auto/confirm 模式(confirm 依赖 claude-wx hook 级审批):
        "--dangerously-skip-permissions",
        # report 模式:
        "--allowedTools", "Read,Glob,Grep",
        "<任务描述>"
      ],
      cwd="<项目路径>",
      env={CLAUDECODE 已清除},
  )

任务队列状态机

pending → running → done
                 → failed
                 → waiting_approval → done / failed / vetoed → pending

多队列架构

scheduler.py
  ├─> project_delivery 队列(tasks.db    ─> 项目开发/研究/管理类任务
  ├─> base_opt 队列(base_opt_tasks.db   ─> 算法/硬件优化类任务
  └─> insight 队列(insight_tasks.db     ─> 洞察/分析/市场类任务

每个队列独立的 role_filter 确保任务只被有资格的 Agent 执行。

核心循环(scheduler → executor

Scanner.scan_all()            # 扫描 README/TODO/CLAUDE.md
  └─> TaskQueue.enqueue()     # SQLiteBEGIN EXCLUSIVE 原子操作,去重
        └─> Executor.run_all_pending()  # asyncio Semaphore 限流并发
              ├─> _make_agent(role)     # 按 agent_role 路由到对应 Agent
              ├─> EventBus.publish_task_done/failed()  # Redis Streams 事件广播
              └─> FeishuNotifier.send_task_result()

EventBus 事件流

Executor 任务完成/失败
  └─> EventBus.publish() → Redis Stream "nmfs:events"
        ├─> ops-hub           → OpsHub → DailyReport 写入
        ├─> leader-os-base    → 基础技术部部门长
        ├─> leader-vision-algo → 视觉算法组组长
        ├─> leader-market     → 市场洞察部
        └─> boss              → Boss 战略决策

反幻觉门控(VersionPipeline

Dev Agent 开发完毕 → vp.start_testing()  ← Dev 只能到这一步
TesterAgent 测试   → vp.mark_done()      ← 只有 Tester 能标记完成
                   → vp.mark_failed()    ← 只有 Tester 能标记失败

Web Dashboard

Dashboard 是首选操作入口,访问地址:http://localhost:9080Docker 环境同端口)。

主要功能

标签页 功能
看板(Kanban 按项目查看任务状态,可拖拽调整优先级
洞察(Insight 市场目标卡片(运动/适老/AI安全)+ 基础技术调研
日报(Daily 时间线视图(全部事件)+ Boss 决策视图(组织健康 + 待决策)
配置(Config 查看/编辑 CLAUDE.md / README.md,触发 CLAUDE.md 刷新

常用命令

python scripts/run.py status          # 查看任务状态(多队列)
bash scripts/start_daemon.sh          # 后台启动调度器
bash scripts/watch_daemon.sh          # 监控日志
python scripts/run.py scan            # 预览扫描结果
python scripts/run.py run-next        # 执行下一个任务(须在普通终端)
python scripts/run.py research        # 入队三专项调研(须在普通终端)
pytest tests/ -q                      # 全量测试

调试

查看任务队列

sqlite3 data/tasks.db "SELECT id,project,agent_role,title,status FROM tasks ORDER BY id DESC LIMIT 20;"
sqlite3 data/base_opt_tasks.db "SELECT id,project,agent_role,title,status FROM tasks ORDER BY id DESC LIMIT 10;"
sqlite3 data/insight_tasks.db "SELECT id,project,agent_role,title,status FROM tasks ORDER BY id DESC LIMIT 10;"

手动入队

source venv/bin/activate
python - <<'EOF'
from nmfs_agents.config import load_config
from nmfs_agents.core.queue import Task, TaskQueue
import asyncio, nmfs_agents.core.executor as ex

cfg = load_config()
q = TaskQueue()
q.enqueue(Task(
    project="embedding", type="code_review", title="分析代码质量",
    context="", priority=3, mode="report", agent_role="developer"
))
asyncio.run(ex.Executor(cfg, queue=q).run_next())
EOF

注意claude --print 子进程需在 Claude Code 会话外 的普通终端执行。

Scanner 扫描来源

来源 提取内容 优先级
README.md## 已知问题 每一行问题 → fix_bug 任务 2
.py 文件中的 TODO/FIXME/HACK 注释 → code_review 任务 4
CLAUDE.md❌/⚠ 的行 约束违反 → fix_bug 任务 2
兜底 每个项目固定生成定期代码巡检 5

架构优化版本管理

arch_optimize 任务入队
  └─> ArchitectAgent._optimize()
        ├─ ArchVersion.snapshot()
        ├─ claude --dangerously-skip-permissions
        ├─ pytest tests/ -q
        ├─ 通过 → ArchVersion.promote()
        └─ 失败 → ArchVersion.rollback()

添加新项目

configs/projects.yaml 添加:

projects:
  my-project:
    path: /data/company/my-project   # 省略则从 scan_dirs 自动发现
    mode: auto                        # auto | confirm | report

添加新 Agent

  1. src/nmfs_agents/agents/ 新建 my_agent.py,继承 DeveloperAgent 或独立实现 run(task) -> AgentResult
  2. executor.py_make_agent() 添加路由条目
  3. configs/agents.yaml 的对应队列 roles: 中添加新角色名
  4. tests/ 添加测试文件

配置说明

configs/projects.yaml

scan_dirs:
- /data/company
- /data/company/algo-base
exclude_projects:
- rknn-toolkit2
- agents
projects:
  my-project:
    path: /data/company/my-project
    mode: confirm

configs/agents.yaml

scheduler:
  interval_hours: 1
  max_concurrent: 3
queues:
  project_delivery:
    db: data/tasks.db
    max_concurrent: 3
    roles: [developer, architect, tester, rtp-researcher, ...]
  base_opt:
    db: data/base_opt_tasks.db
    max_concurrent: 2
    roles: [algo-antishake, algo-position, ...]
  insight:
    db: data/insight_tasks.db
    max_concurrent: 2
    roles: [planner, productizer, market-pm, ...]

configs/devices.yaml

devices:
  rk3566:
    host: 192.168.123.183
    user: orangepi
    password: "orangepi"
    workspace: /home/orangepi/Desktop
  rk3588:
    host: 192.168.123.137
    user: pi
    password: "pi"
    workspace: /home/pi/Desktop

环境变量

变量 说明 必填
ANTHROPIC_API_KEY Claude API 密钥(已 claude login 则不需要)
FEISHU_WEBHOOK_URL 飞书 Webhook,任务结果通知
DB_PATH 任务数据库路径(默认 data/tasks.db
DASHBOARD_PORT Dashboard 端口(默认 8080

API 端点参考

方法 路径 说明
GET /api/tasks 获取任务列表
POST /api/tasks 创建任务(queue 字段路由)
PATCH /api/tasks/{id} 更新优先级
POST /api/tasks/{id}/retry 重试失败任务
GET /api/projects 获取项目列表
POST /api/projects/import 导入新项目
GET /api/market/facts 市场洞察 facts
POST /api/market/trigger/{goal} 触发市场洞察
GET /api/research/facts 三专项调研 facts
GET /api/daily/timeline 日报时间线
GET /api/daily/boss Boss 决策视图
GET /api/daily/dates 可用日期列表
GET /api/daily/scores Agent 评分

队列路由

queue 值 路由到 典型 agent_role
project_delivery(默认) data/tasks.db developer / architect / boss / ops
base_opt data/base_opt_tasks.db algo-* / hw-engineer / os-engineer
insight data/insight_tasks.db market-* / planner / productizer

项目记忆系统

data/project_memory.db 分三层:

读写规则
goals(目标) 仅 productizer/architect 可写
facts(事实) 任意 agent;通过 [记忆] 标签写入
history(历史) executor 每次任务完成/失败后自动写入

特殊 facts 命名约定

key 前缀 写入者 Dashboard 展示
__research__.rtp.* rtp-researcher 洞察页"基础技术调研"
__research__.net.* net-researcher 洞察页"基础技术调研"
__research__.kernel.* kernel-analyzer 洞察页"基础技术调研"
__market__.{goal}.* market-* 洞察页目标卡片
__env__.* env-collector Agent 系统提示

Watchdog

core/watchdog.py 后台 daemon 线程(60s 间隔):

  • reset_stale_running(timeout=120min)running 超时 → failed
  • bump_stale_priorities(threshold=120min)pending 久等 → priority-1(防饥饿)