Home › Gallery ›
AgenticX
AgenticX system prompt
Category: Multi-agent systems .
Audited against the AISPA standard .
4
Prompts on record
0
Flagged instructions
AI audit
Audit source
D1 · Identity Transparency
D2 · Truthfulness & Information Integrity
D3 · Privacy & Data Protection
D4 · Tool/Action Safety
D5 · User Agency & Manipulation Prevention
D6 · Unsafe Request Handling
D7 · Harm Prevention & User Safety
D8 · Fairness, Inclusion & Neutrality
AgenticX - .cursor plans agent runtime unification 235a295...
7740 characters
---
name: Agent Runtime Unification
overview: 将 Agent Loop 从 CLI studio.py 中抽象为独立的 AgentRuntime 内核,输出标准化事件流,同时服务 CLI 终端和桌面端(FastAPI + Electron)。
todos: []
isProject: true
phases:
- name: "Phase 0: Agent Loop 收口(p2-streaming + commit)"
todos:
- id: p0-streaming
content: agent_loop.py 纯文本分支改为流式输出:无 tool_calls 时使用 llm.stream() 逐 token 打印,保持 tool_call 分支不变(仍用 invoke);更新 test_agent_loop.py 验证流式路径
status: pending
- id: p0-commit
content: "按功能点分组提交 Agent Loop 改造的全部变更,每个 commit 带 Plan-Id: studio_agent_loop_改造_428be5da / Plan-File / Made-with: Damon Li"
status: pending
- name: "Phase 1: AgentRuntime 内核抽象"
todos:
- id: p1-events
content: "新建 agenticx/runtime/events.py:定义 RuntimeEvent dataclass(type: str, data: dict)和 EventType 枚举(ROUND_START / TOOL_CALL / TOOL_RESULT / CONFIRM_REQUIRED / CONFIRM_RESPONSE / TOKEN / FINAL / ERROR)"
status: pending
- id: p1-confirm-gate
content: 新建 agenticx/runtime/confirm.py:定义 ConfirmGate 抽象基类(async def request_confirm(question, context) -> bool)+ SyncConfirmGate(CLI 用 input())+ AsyncConfirmGate(桌面端用 asyncio.Event 等待 HTTP 回复)
status: pending
- id: p1-runtime-core
content: 新建 agenticx/runtime/agent_runtime.py:AgentRuntime 类,核心方法 async def run_turn(user_input, session) -> AsyncGenerator[RuntimeEvent];内部复用 STUDIO_TOOLS + dispatch_tool + _build_agent_system_prompt;确认操作走 ConfirmGate;token 输出走 RuntimeEvent(TOKEN);最大轮次走 RuntimeEvent(ERROR)
status: pending
- id: p1-tools-refactor
content: 重构 agent_tools.py:将 _confirm() 和 console.print 替换为通过 ConfirmGate 回调 + 返回结构化结果;dispatch_tool 新增 confirm_gate 参数;保持现有测试兼容(SyncConfirmGate 作为默认)
status: pending
- id: p1-tests
content: tests/test_agent_runtime.py:mock LLM + mock ConfirmGate,验证事件流完整性(ROUND_START → TOOL_CALL → CONFIRM_REQUIRED → TOOL_RESULT → FINAL)、最大轮次终止、纯文本路径产出 TOKEN 事件
status: pending
- name: "Phase 2: CLI Adapter 切换"
todos:
- id: p2-cli-adapter
content: 重构 agent_loop.py 的 run_agent_loop:改为 AgentRuntime 的同步包装,内部 asyncio.run(runtime.run_turn(...)),消费事件流:TOKEN→print、TOOL_CALL→显示工具名、CONFIRM_REQUIRED→input()、FINAL→返回文本
status: pending
- id: p2-studio-adapt
content: studio.py 主循环适配:保持 / 命令不变,非 / 输入走新的 run_agent_loop(内部已切换到 Runtime);验证 /undo、/history、/ctx、@ref 等全部兼容
status: pending
- id: p2-trace-cmd
content: studio.py 新增 /trace 命令:打印最近一次 agent loop 的完整事件流(tool decisions + confirm + results),方便开发者调试
status: pending
- id: p2-regression
content: 运行全量测试(test_agent_tools + test_agent_loop + test_cli_studio),确保 29+ tests 全部通过;补充 /trace 命令的基础测试
status: pending
- name: "Phase 3: Service Adapter(FastAPI 服务化)"
todos:
- id: p3-protocols
content: 新建 agenticx/studio/protocols.py:定义 API 请求/响应模型(ChatRequest、ConfirmResponse、SessionState)和 SSE 事件格式,参考桌面版 plan 的 WebSocket API 设计
status: pending
- id: p3-session-mgr
content: 新建 agenticx/studio/session_manager.py:多会话管理(create/get/delete session),每个 session 持有独立 StudioSession + AgentRuntime 实例,支持超时清理
status: pending
- id: p3-server
content: 新建 agenticx/studio/server.py:FastAPI 应用,核心端点:POST /api/chat(SSE 流式返回 RuntimeEvent)、POST /api/confirm(回复确认)、GET /api/session(会话状态)、GET /api/artifacts(产物列表)、DELETE /api/session(重置)
status: pending
- id: p3-server-tests
content: tests/test_studio_server.py:使用 httpx + FastAPI TestClient,验证 SSE 事件流、确认闸门流程、会话生命周期;mock LLM 避免真实调用
status: pending
- id: p3-cli-entry
content: agx serve 命令:在 agenticx/cli/main.py 新增 serve 子命令,启动 FastAPI 服务(uvicorn),支持 --port --host 参数
status: pending
- name: "Phase 4: Desktop MVP(Electron + React 脚手架)"
todos:
- id: p4-scaffold
content: desktop/ 目录:Electron + React + TypeScript 项目脚手架(electron-builder + Vite),含 main.ts(主进程)+ App.tsx(渲染进程)+ 基础打包配置
status: pending
- id: p4-floating-ball
content: FloatingBall 组件:全局置顶、可拖拽、状态指示(idle/listening/processing)、右键菜单(设置/侧边栏/退出),参考桌面版 plan 4.1.1 设计
status: pending
- id: p4-sidebar
content: Sidebar 组件:对话气泡(用户/助手/工具调用)、确认弹窗(ConfirmDialog)、代码预览面板、输入框(文本),通过 SSE 连接 agx serve 获取事件流
status: pending
- id: p4-tray
content: 系统托盘集成:菜单项(打开侧边栏/设置/退出)、状态图标切换
status: pending
- id: p4-e2e
content: Desktop 端到端验证:启动 agx serve → 打开 Electron → 输入自然语言 → 看到事件流 → 确认工具调用 → 查看产物
status: pending
- name: "Phase 5: 语音层与体验增强(后续)"
todos:
- id: p5-stt
content: 集成 STT(Web Speech API / Whisper):悬浮球点击→录音→转文字→发送到 /api/chat
status: pending
- id: p5-tts
content: 集成 TTS(Edge TTS / Web Speech API):FINAL 事件 → 语音播报,支持情感化语气(参考桌面版 plan 4.2.3)
status: pending
- id: p5-wakeword
content: 唤醒词监听(Picovoice / 自定义):Hey Jarvis → 唤醒 → 开始录音
status: pending
- id: p5-interrupt
content: 语音打断:TTS 播放中检测用户说话 → 停止播放 → 切入新一轮对话
status: pending
---
# Agent Runtime 统一化
## 战略定位
```
AgentRuntime(核心内核)
┌────────────┴────────────┐
▼ ▼
CLI Adapter Service Adapter
(agx studio) (FastAPI + SSE)
typed REPL │
▼
Desktop UI (Electron)
voice + floating ball
```
**核心原则**:Runtime 是唯一的"大脑",CLI 和 Desktop 只是不同的"嘴和手"。
## 已有基础(Agent Loop 改造已完成)
- `agenticx/cli/agent_tools.py`:11 个工具 + dispatch_tool + 安全机制
- `agenticx/cli/agent_loop.py`:run_agent_loop + system prompt + 历史管理
- `agenticx/cli/studio.py`:REPL 主循环 + / 命令 + 会话状态
- 安全:shell=False、workspace 边界、diff 确认、高风险子命令检测
- 测试:29 passed(agent_tools + agent_loop + cli_studio)
## 当前问题(要解决的)
- Agent Loop 与 CLI REPL **耦合**:`run_agent_loop` 直接 `console.print`、直接 `input()`
- 无法被 HTTP 服务层调用(阻塞 I/O、无事件流)
- `_confirm()` 和 `ask_user` 是同步 `input()`,桌面端无法接管
- 工具执行结果直接打印到 stdout,不是结构化事件
## 关键设计
### AgentRuntime 事件协议
```python
@dataclass
class RuntimeEvent:
type: str # "token" | "tool_call" | "tool_result" | "confirm_required" | "final" | "error" | "round_start"
data: Dict[str, Any]
# 示例事件流:
# {"type": "round_start", "data": {"round": 1, "max_rounds": 10}}
# {"type": "tool_call", "data": {"name": "bash_exec", "arguments": {...}}}
# {"type": "confirm_required", "data": {"id": "xxx", "question": "Write to file?"}}
# ... 用户回复 confirm ...
# {"type": "tool_result", "data": {"name": "bash_exec", "result": "exit_code=0..."}}
# {"type": "token", "data": {"text": "已"}}
# {"type": "token", "data": {"text": "完成"}}
# {"type": "final", "data": {"text": "已完成文件写入。"}}
```
### 确认闸门(Confirm Gate)
现有的 `_confirm()`/`ask_user` 改为异步回调:
- CLI adapter:同步 `input()` 阻塞
- Service adapter:发 SSE confirm_required 事件,等 HTTP POST 回复
### 文件清单
- `agenticx/runtime/agent_runtime.py`(新建):AgentRuntime 核心,输出事件流
- `agenticx/runtime/events.py`(新建):RuntimeEvent + EventType 定义
- `agenticx/runtime/confirm.py`(新建):ConfirmGate 抽象 + CLI/Async 实现
- `agenticx/runtime/__init__.py`(新建):导出
- `agenticx/cli/agent_loop.py`(重构):改为调用 AgentRuntime
- `agenticx/cli/agent_tools.py`(重构):confirm 回调化
- `agenticx/cli/studio.py`(适配):消费 RuntimeEvent 事件流
- `agenticx/studio/server.py`(新建):FastAPI 服务层
- `agenticx/studio/session_manager.py`(新建):多会话管理
- `agenticx/studio/protocols.py`(新建):API 协议定义
- `desktop/`(新建):Electron + React 前端脚手架
## 与桌面版 plan 的关系
桌面版 plan(`.cursor/plans/2026-03-08-agenticx-studio-desktop.plan.md`)保留作为 **PRD 参考**:
- UI/UX 设计(悬浮球/侧边栏/托盘)→ Phase 4 直接复用
- 语音交互设计 → Phase 5 直接复用
- API 协议草案 → Phase 3 参考并升级
- 技术栈选型 → 沿用(Electron + React + FastAPI + Zustand)
- 里程碑节奏 → 吸收但按新架构重排
AgenticX - .cursor plans agent loop context persistence 44...
12550 characters
---
name: Agent Loop Context Persistence
overview: 补齐 AgenticX agent loop 的上下文持久化能力:TodoWrite 结构化规划、Scratchpad 中间结果暂存、Memory 写入工具、SQLite 跨会话持久化、向量 embedding + FTS 语义记忆检索,完整对标 Claude Agent Loop v2/v3 并融合 OpenClaw 的三层记忆架构。
todos:
- id: p0-todo-manager
content: "Phase 0: 新建 todo_manager.py + todo_write 工具 + system prompt 注入 + nag reminder"
status: completed
- id: p0-todo-tests
content: "Phase 0: 新建 test_todo_manager.py, 验证约束(max 20, 单个 in_progress, 渲染格式)"
status: completed
- id: p1-scratchpad
content: "Phase 1a: 新建 scratchpad.py + scratchpad_write/read 工具 + system prompt 注入 + subagent 继承"
status: completed
- id: p1-memory-write
content: "Phase 1b: memory_append 工具 + loader.py 公开写入 API + daily/long_term 两种模式"
status: completed
- id: p1-tests
content: "Phase 1: 新建 test_scratchpad.py, 补充 memory_append 集成测试"
status: completed
- id: p2-session-store
content: "Phase 2: 新建 session_store.py(SQLite 3 表)+ session_manager 集成 + 会话结束自动持久化"
status: completed
- id: p2-tests
content: "Phase 2: 新建 test_session_store.py, 验证跨会话恢复"
status: completed
- id: p3-workspace-memory
content: "Phase 3: 新建 workspace_memory.py(chunks + FTS5 + embedding)+ memory_search 工具"
status: completed
- id: p3-indexing
content: "Phase 3: loader.py 增量索引 + memory_append 写后自动索引"
status: completed
- id: p3-tests
content: "Phase 3: 新建 test_workspace_memory.py, 验证 FTS + 语义搜索 + 增量索引"
status: completed
isProject: false
---
# Agent Loop 上下文持久化完整方案
## 现状诊断
当前 AgenticX agent loop 在三个核心点的支持情况:
- **上下文持久化**:仅有 `session.artifacts` / `session.context_files` 隐式传递,缺少 TodoWrite 和 Scratchpad
- **程序化工具调用**:已对标 Claude v1(`tool_choice="auto"` + JSON function calling),合格
- **递归调度**:已超越 Claude v3(并行 subagent + 资源监控 + 生命周期管理),合格
**核心差距**:缺少 Claude v2 的 TodoWrite + 缺少 Memory 写入工具 + 缺少 SQLite 持久化层 + 缺少语义记忆检索
## 架构全景
```mermaid
graph TB
subgraph RuntimeTools [Runtime Layer - In-Session]
TodoWrite[todo_write Tool]
ScratchpadW[scratchpad_write Tool]
ScratchpadR[scratchpad_read Tool]
MemoryAppend[memory_append Tool]
MemorySearch[memory_search Tool]
end
subgraph SessionState [StudioSession State]
TodoMgr[TodoManager]
Scratchpad[Scratchpad Dict]
Artifacts[artifacts Dict]
ContextFiles[context_files Dict]
end
subgraph Persistence [SQLite Persistence Layer]
SessionDB["session_memory.sqlite"]
TodoTable[todos Table]
ScratchTable[scratchpad Table]
SummaryTable[session_summaries Table]
end
subgraph VectorMemory [Vector Memory Layer]
ChunksTable[chunks Table + embedding]
FTSIndex[chunks_fts FTS5 Index]
EmbeddingService[Embedding Service]
end
subgraph WorkspaceFiles [Workspace Markdown Files]
MemoryMD[MEMORY.md]
DailyMD["memory/YYYY-MM-DD.md"]
IdentityMD[IDENTITY.md / USER.md / SOUL.md]
end
TodoWrite --> TodoMgr
ScratchpadW --> Scratchpad
ScratchpadR --> Scratchpad
MemoryAppend --> DailyMD
MemoryAppend --> MemoryMD
MemorySearch --> FTSIndex
MemorySearch --> ChunksTable
TodoMgr -->|"session end"| TodoTable
Scratchpad -->|"session end"| ScratchTable
DailyMD -->|"indexing"| EmbeddingService
MemoryMD -->|"indexing"| EmbeddingService
EmbeddingService --> ChunksTable
EmbeddingService --> FTSIndex
```
## Phase 0: TodoWrite 工具(对标 Claude v2)
**目标**:让模型的"计划"外化为可见、可追踪的状态机
### 新建 `agenticx/runtime/todo_manager.py`
```python
class TodoManager:
items: List[TodoItem] # max 20 items
# TodoItem: {content: str, status: str, active_form: str}
# status: "pending" | "in_progress" | "completed"
# active_form: 现在进行时描述,如 "正在分析认证模块..."
def update(self, items: list) -> str: # 验证 + 渲染
def render(self) -> str: # 文本渲染给模型看
```
**设计决策**:新建轻量 TodoManager 而非复用 `plan_storage.py` 的 SubTask/Plan,原因:
- `SubTask` 要求 `expected_outcome` 等字段,对 agent loop 内的快速规划过重
- Claude v2 的 TodoManager 刻意极简(content + status + activeForm),约束即能力
- `plan_storage` 面向长期项目规划,TodoManager 面向单次对话内的任务追踪
- 后续 Phase 2 会增加 SQLite 持久化桥接
### 修改 `agenticx/cli/agent_tools.py`
- 在 `STUDIO_TOOLS` 中新增 `todo_write` 工具定义
- 在 `dispatch_tool_async` 中新增 `todo_write` 分发逻辑
### 修改 `agenticx/cli/studio.py`
- `StudioSession` 新增 `todo_manager: TodoManager` 字段
### 修改 `agenticx/runtime/agent_runtime.py`
- `_build_agent_system_prompt()` 注入当前 todo 列表状态
- 增加 nag reminder 机制:连续 N 轮未更新 todo 时注入 `<reminder>` 到 user message
### 修改 `agenticx/runtime/prompts/meta_agent.py`
- `build_meta_agent_system_prompt()` 注入 todo 状态
- 调度策略中增加 "拆解子任务前先用 `todo_write` 记录计划" 的指导
## Phase 1: Scratchpad + Memory 写入工具
### 1a. Scratchpad(会话内中间结果暂存)
**新建 `agenticx/runtime/scratchpad.py`**
```python
class Scratchpad:
_store: Dict[str, str] # key -> value, max 50 keys, max 10KB per value
def write(self, key: str, value: str) -> str
def read(self, key: str) -> str
def list_keys(self) -> List[str]
def render_summary(self) -> str # 给 system prompt 用的摘要
```
**修改 `agenticx/cli/agent_tools.py`**
- 新增 `scratchpad_write` 工具:写入 key-value
- 新增 `scratchpad_read` 工具:读取指定 key 或 list keys
**修改 `agenticx/cli/studio.py`**
- `StudioSession` 新增 `scratchpad: Scratchpad` 字段
**修改 `agenticx/runtime/agent_runtime.py`**
- System prompt 注入 scratchpad 摘要(key 列表 + 每个 value 的前 200 字符预览)
**修改 `agenticx/runtime/team_manager.py`**
- `_build_isolated_session()` 时将 parent session 的 scratchpad 复制一份给 subagent(只读快照)
### 1b. Memory 写入工具
**修改 `agenticx/workspace/loader.py`**
- 将 `_append_daily_memory_note()` 改为 public `append_daily_memory(workspace_dir, note)`
- 新增 `append_long_term_memory(workspace_dir, note)` — 追加到 MEMORY.md
**修改 `agenticx/cli/agent_tools.py`**
- 新增 `memory_append` 工具:
- 参数:`target` ("daily" | "long_term"),`content` (str)
- daily: 追加到 `memory/YYYY-MM-DD.md`
- long_term: 追加到 `MEMORY.md`(需要 confirm)
## Phase 2: SQLite 持久化层
**目标**:跨会话恢复 todo/scratchpad/session summary,类似 OpenClaw 的 `main.sqlite`
### 新建 `agenticx/memory/session_store.py`
```python
class SessionStore:
"""SQLite persistence for session state across conversations."""
def __init__(self, db_path: Path): # 默认 ~/.agenticx/memory/sessions.sqlite
# Todo 持久化
async def save_todos(self, session_id: str, items: list) -> None
async def load_todos(self, session_id: str) -> list
# Scratchpad 持久化
async def save_scratchpad(self, session_id: str, data: dict) -> None
async def load_scratchpad(self, session_id: str) -> dict
# Session summary 持久化(会话结束时自动摘要)
async def save_session_summary(self, session_id: str, summary: str, metadata: dict) -> None
async def search_session_summaries(self, query: str, limit: int = 5) -> list
```
**Schema 设计(3 张表)**
```sql
CREATE TABLE todos (
session_id TEXT NOT NULL,
data TEXT NOT NULL, -- JSON array of todo items
updated_at TEXT NOT NULL,
PRIMARY KEY (session_id)
);
CREATE TABLE scratchpad (
session_id TEXT NOT NULL,
key TEXT NOT NULL,
value TEXT NOT NULL,
updated_at TEXT NOT NULL,
PRIMARY KEY (session_id, key)
);
CREATE TABLE session_summaries (
id TEXT PRIMARY KEY,
session_id TEXT NOT NULL,
summary TEXT NOT NULL,
metadata TEXT, -- JSON: provider, model, duration, tool_count
created_at TEXT NOT NULL
);
```
### 修改 `agenticx/studio/session_manager.py`
- `ManagedSession` 创建时加载 SQLite 中的 todo/scratchpad
- Session 销毁时自动保存 todo/scratchpad + 生成 session summary
### 修改 `agenticx/workspace/loader.py`
- `ensure_workspace()` 中初始化 `~/.agenticx/memory/` 目录和 SQLite 文件
## Phase 3: 向量 Embedding + FTS 语义记忆检索
**目标**:对标 OpenClaw 的 `main.sqlite`(chunks + FTS5 + embedding_cache),让 agent 能语义检索历史记忆
### 新建 `agenticx/memory/workspace_memory.py`
```python
class WorkspaceMemoryStore:
"""SQLite + FTS5 + Embedding for workspace markdown memory files."""
def __init__(self, db_path: Path, embedding_provider: str = "default"):
# 默认 ~/.agenticx/memory/main.sqlite
async def index_file(self, file_path: Path) -> int:
# 读取 markdown -> 分块 -> embedding -> 存入 chunks + FTS
async def index_workspace(self, workspace_dir: Path) -> dict:
# 索引 MEMORY.md + memory/*.md + IDENTITY.md + USER.md
async def search(self, query: str, limit: int = 5, mode: str = "hybrid") -> list:
# mode: "fts" (纯全文) | "semantic" (纯向量) | "hybrid" (混合)
async def get_recent_memories(self, days: int = 7, limit: int = 10) -> list:
# 按时间获取最近记忆
```
**Schema 设计(对标 OpenClaw)**
```sql
CREATE TABLE files (
path TEXT PRIMARY KEY,
hash TEXT NOT NULL,
mtime REAL NOT NULL,
size INTEGER NOT NULL
);
CREATE TABLE chunks (
id TEXT PRIMARY KEY,
path TEXT NOT NULL,
source TEXT,
start_line INTEGER,
end_line INTEGER,
model TEXT,
text TEXT NOT NULL,
embedding BLOB,
created_at TEXT NOT NULL
);
CREATE VIRTUAL TABLE chunks_fts USING fts5(text, content=chunks, content_rowid=rowid);
CREATE TABLE embedding_cache (
provider TEXT NOT NULL,
model TEXT NOT NULL,
hash TEXT NOT NULL,
embedding BLOB NOT NULL,
PRIMARY KEY (provider, model, hash)
);
```
### Embedding 服务
复用 `agenticx/integrations/mem0/embeddings/` 已有的 embedding provider(OpenAI/Ollama/HuggingFace 等),通过 `ProviderResolver` 或配置文件选择。
### 修改 `agenticx/cli/agent_tools.py`
- 新增 `memory_search` 工具:
- 参数:`query` (str),`mode` ("fts" | "semantic" | "hybrid"),`limit` (int)
- 返回匹配的记忆片段 + 来源文件 + 相关度
### 修改 `agenticx/runtime/meta_tools.py`
- Meta-Agent 工具列表新增 `memory_search`
### 索引触发时机
- `ensure_workspace()` 时检查文件 hash,增量索引变更的 markdown 文件
- `memory_append` 写入后自动增量索引新内容
- 可选:配置定时全量重索引
### 修改 `agenticx/workspace/loader.py`
- `ensure_workspace()` 新增可选的 `index_memory=True` 参数
- 调用 `WorkspaceMemoryStore.index_workspace()` 进行增量索引
## 关键文件清单
| 操作 | 文件 | Phase |
| --- | -------------------------------------------------------------------------------- | ----- |
| 新建 | `agenticx/runtime/todo_manager.py` | P0 |
| 新建 | `agenticx/runtime/scratchpad.py` | P1 |
| 新建 | `agenticx/memory/session_store.py` | P2 |
| 新建 | `agenticx/memory/workspace_memory.py` | P3 |
| 新建 | `tests/test_todo_manager.py` | P0 |
| 新建 | `tests/test_scratchpad.py` | P1 |
| 新建 | `tests/test_session_store.py` | P2 |
| 新建 | `tests/test_workspace_memory.py` | P3 |
| 修改 | [agenticx/cli/agent_tools.py](agenticx/cli/agent_tools.py) | P0-P3 |
| 修改 | [agenticx/cli/studio.py](agenticx/cli/studio.py) | P0-P1 |
| 修改 | [agenticx/runtime/agent_runtime.py](agenticx/runtime/agent_runtime.py) | P0-P1 |
| 修改 | [agenticx/runtime/prompts/meta_agent.py](agenticx/runtime/prompts/meta_agent.py) | P0 |
| 修改 | [agenticx/runtime/team_manager.py](agenticx/runtime/team_manager.py) | P1 |
| 修改 | [agenticx/runtime/meta_tools.py](agenticx/runtime/meta_tools.py) | P3 |
| 修改 | [agenticx/workspace/loader.py](agenticx/workspace/loader.py) | P1-P3 |
| 修改 | [agenticx/studio/session_manager.py](agenticx/studio/session_manager.py) | P2 |
## 与 OpenClaw 三层记忆架构的对齐
| OpenClaw 层 | AgenticX 对应 | Phase |
| ----------------------------- | ----------------------------------- | ----- |
| `MEMORY.md` 长期精选 | `memory_append(target="long_term")` | P1 |
| `memory/YYYY-MM-DD.md` 每日日志 | `memory_append(target="daily")` | P1 |
| `sessions/` 会话历史 | `session_summaries` in SQLite | P2 |
| `main.sqlite` chunks + FTS5 | `WorkspaceMemoryStore` | P3 |
| `main.sqlite` embedding_cache | 复用 mem0 embeddings | P3 |
## 约束与风险
- **Phase 0-1 无新依赖**:纯 Python 标准库 + 已有 agenticx 基础
- **Phase 2 依赖 `aiosqlite`**:已在 `plan_storage.py` 中使用,非新增
- **Phase 3 依赖 embedding provider**:需要用户配置 API key 或本地模型;FTS5 不依赖 embedding,可独立使用
- **向后兼容**:所有新工具为 opt-in,不影响现有 STUDIO_TOOLS 和 META_AGENT_TOOLS 的行为
AgenticX - .cursor plans meta agent team architecture f06c...
9302 characters
---
name: Meta-Agent Team Architecture
overview: 将 AgenticX Desktop 从单 Agent 串行模式升级为 Meta-Agent(CEO)+ Agent Team 多智能体协作架构,让主智能体始终可对话、子智能体并行执行、右侧面板实时展示进度。
todos: []
isProject: true
phases:
- name: "Phase 1: 核心后端 — AgentTeamManager + SubAgent 隔离"
todos:
- id: p1-events-agent-id
content: "修改 `agenticx/runtime/events.py`:`RuntimeEvent` 增加 `agent_id: str = \"meta\"` 字段,确保序列化时始终携带。同步更新 `EventType` 新增 `SUBAGENT_STARTED`, `SUBAGENT_PROGRESS`, `SUBAGENT_COMPLETED`, `SUBAGENT_ERROR` 四个枚举值。"
status: pending
- id: p1-subagent-context
content: 新建 `agenticx/runtime/team_manager.py`:定义 `SubAgentContext` dataclass(agent_id, name, role, task, status, agent_messages, artifacts, context_files, confirm_gate, result_summary, created_at, updated_at);定义 `SubAgentStatus` 枚举(PENDING, RUNNING, COMPLETED, FAILED, CANCELLED)。
status: pending
- id: p1-team-manager
content: 在 `team_manager.py` 中实现 `AgentTeamManager` 类:spawn_subagent()(创建 SubAgentContext + 启动独立 AgentRuntime asyncio.Task,并发限制 max_concurrent=4)、cancel_subagent()(通过 should_stop 中断)、get_status()(返回所有 sub-agent 状态摘要)、_run_subagent()(内部方法,运行单个 sub-agent 的 run_turn 循环,收集事件并通过回调转发,完成后生成 result_summary)。
status: pending
- id: p1-resource-monitor
content: 新建 `agenticx/runtime/resource_monitor.py`:`ResourceMonitor` 类,提供 `get_system_stats()` 返回 CPU%、内存%、活跃 sub-agent 数。`can_spawn()` 方法根据阈值判断是否允许新建 sub-agent。
status: pending
- id: p1-meta-tools
content: 新建 `agenticx/runtime/meta_tools.py`:定义 Meta-Agent 专用工具:`spawn_subagent(name, role, task, tools?)` — 调用 TeamManager 创建子 agent 并返回 agent_id;`cancel_subagent(agent_id)` — 中断指定 sub-agent;`query_subagent_status(agent_id?)` — 查询进度;`check_resources()` — 返回当前资源状况和建议。工具定义遵循 STUDIO_TOOLS 相同的 dict schema。
status: pending
- id: p1-runtime-agent-id
content: "修改 `agenticx/runtime/agent_runtime.py`:`run_turn` 新增 `agent_id: str = \"meta\"` 参数,所有 yield 的 `RuntimeEvent` 填充此 `agent_id`。不改变现有逻辑,仅传递标识。"
status: pending
- id: p1-confirm-isolation
content: "修改 `agenticx/runtime/confirm.py` 和 `session_manager.py`:支持 per-agent confirm gate。`ManagedSession` 新增 `sub_confirm_gates: Dict[str, AsyncConfirmGate]`,`/api/confirm` 根据 `agent_id` 路由到对应 gate。"
status: pending
- id: p1-tests-backend
content: 新增 `tests/test_team_manager.py`:测试 spawn/cancel/并发限制/资源检查/结果回收。新增 `tests/test_meta_tools.py`:测试三个 meta 工具的调用和返回格式。修改 `tests/test_agent_runtime.py`:验证事件携带 agent_id。
status: pending
- name: "Phase 2: Server 层 — SSE 多路合并 + Meta-Agent 会话管理"
todos:
- id: p2-session-team
content: "修改 `agenticx/studio/session_manager.py`:`ManagedSession` 新增 `team_manager: Optional[AgentTeamManager]`(懒初始化)。新增方法 `get_or_create_team()` 返回 `AgentTeamManager` 实例。"
status: pending
- id: p2-server-multiplex
content: 修改 `agenticx/studio/server.py`:`/api/chat` 的 `_event_stream` 支持多路事件合并。Meta-Agent 的 run_turn 事件 + sub-agent 通过 asyncio.Queue 转发的事件统一 yield,每个 SSE data 都含 `agent_id` 字段。
status: pending
- id: p2-confirm-route
content: 修改 `/api/confirm` 端点:接受新增字段 `agent_id`(默认 `"meta"`),根据 agent_id 找到对应的 confirm_gate 提交确认。
status: pending
- id: p2-subagent-events
content: 在 server SSE 流中新增 sub-agent 生命周期事件的转发:当 TeamManager 发出 SUBAGENT_STARTED/PROGRESS/COMPLETED/ERROR 时,通过合并 queue 推送给前端。
status: pending
- id: p2-meta-system-prompt
content: 创建 Meta-Agent 专用 system prompt 模板(可放在 `agenticx/runtime/prompts/meta_agent.py`),包含:角色定义(CEO/调度者)、可用工具说明、任务拆解策略、进度汇报格式、资源感知指令。
status: pending
- id: p2-tests-server
content: 修改 `tests/test_studio_server.py`:测试 SSE 事件含 agent_id、confirm 路由、多 agent 事件合并。
status: pending
- name: "Phase 3: 前端 — 侧边面板 + 多 Agent 消息路由"
todos:
- id: p3-store-model
content: "修改 `desktop/src/store.ts`:Message 新增 `agentId?: string` 字段。新增 `SubAgent` 类型(id, name, role, status, task, progress?, currentAction?)。Store 新增 `subAgents: SubAgent[]`、`selectedSubAgent: string | null`、`addSubAgent`、`updateSubAgent`、`removeSubAgent` 方法。"
status: pending
- id: p3-chatview-meta-only
content: 修改 `desktop/src/components/ChatView.tsx`:只渲染 `agentId === "meta" || agentId === undefined` 的消息。SSE 事件处理按 agent_id 路由:meta 事件更新聊天,sub-agent 事件更新 store 中对应 SubAgent 状态。
status: pending
- id: p3-subagent-panel
content: 新建 `desktop/src/components/SubAgentPanel.tsx`:右侧可折叠面板(宽 280px~320px,动画展开/折叠),列出所有活跃 sub-agent 卡片。面板顶部有汇总状态(N running / N done / N pending)。
status: pending
- id: p3-subagent-card
content: 新建 `desktop/src/components/SubAgentCard.tsx`:单个 sub-agent 的进度卡片。显示:名称、角色标签、状态图标(⏳/🔄/✅/❌)、当前动作(如 `正在写 main.py`)、进度条(可选)、[展开详情] 按钮显示最近 tool calls、[中断] 按钮(发 cancel 请求)。展开后显示该 sub-agent 的 tool_call/tool_result 事件列表。
status: pending
- id: p3-confirm-multi
content: 修改 `desktop/src/components/ConfirmDialog.tsx`:confirm 弹窗增加来源标识(显示是哪个 sub-agent 请求确认)。提交时携带 `agent_id` 到 `/api/confirm`。
status: pending
- id: p3-layout-responsive
content: 修改 `desktop/src/App.tsx` 或 `ChatView.tsx` 布局:当有活跃 sub-agent 时自动展开右侧面板(flex 布局:左侧聊天区 flex-1,右侧面板固定宽度)。无 sub-agent 时全宽聊天。窗口最小宽度调整为 680px(以容纳面板)。
status: pending
- id: p3-tests-frontend
content: 验证前端 TypeScript 编译通过(`npm run build`)、无 lint 错误。手动验证侧面板展开/折叠、卡片状态更新、confirm 路由。
status: pending
- name: "Phase 4: Meta-Agent 智能调度 + 端到端验证"
todos:
- id: p4-meta-intelligence
content: 完善 Meta-Agent system prompt:引导 LLM 在收到复杂任务时自动拆解、给出 sub-agent 分配建议、在用户问进度时调用 query_subagent_status。加入资源感知指令:spawn 前先 check_resources,根据返回决定并发数。
status: pending
- id: p4-result-summary
content: 实现 sub-agent 完成后的摘要回传机制:TeamManager._run_subagent() 完成后提取最终回复 + 产出文件列表,压缩为 ≤500 token 摘要,注入 Meta-Agent 的 agent_messages 作为 tool_result。
status: pending
- id: p4-error-recovery
content: 实现 sub-agent 失败后的恢复策略:TeamManager 捕获 sub-agent 异常,标记 FAILED,将错误摘要回传 Meta-Agent,由 Meta-Agent 决定重试或跳过。
status: pending
- id: p4-e2e-test
content: 端到端验证:在 Desktop 中发送 `帮我创建一个深度调研助手`,验证:(1) Meta-Agent 拆解任务并 spawn sub-agents (2) 右侧面板显示 sub-agent 进度 (3) 用户在主聊天区问进度得到即时回复 (4) 可中断单个 sub-agent (5) 所有 sub-agent 完成后 Meta-Agent 汇总结果。
status: pending
- id: p4-docs
content: 更新 `docs/cli.md` 增加 Agent Team 章节。更新 `desktop/README.md` 增加多智能体协作说明。
status: pending
---
# Meta-Agent + Agent Team 多智能体协作架构
## 背景
当前 AgenticX Desktop 是单 Agent 串行执行:一旦进入工具调用循环,Agent 被"绑死"在子任务中,用户无法交互;长程任务 10 轮 tool call 后上下文溢出,任务必然失败。
## 目标架构
```
用户 ↔ Meta-Agent (CEO, 永不阻塞)
↕
AgentTeamManager
┌─────┬─────┬─────┐
│ SA1 │ SA2 │ SA3 │ (独立上下文, 独立 runtime)
└─────┴─────┴─────┘
```
- **Meta-Agent**:只做意图理解、任务拆解、进度汇报、资源调度。自身上下文极轻(只保留决策日志 + 最新 sub-agent 摘要)
- **Sub-Agent**:独立 `AgentRuntime` 实例 + 独立上下文窗口 + 独立 confirm gate
- **事件流**:所有 `RuntimeEvent` 携带 `agent_id`,前端按 agent 分流渲染
## 关键设计决策
### D1: Meta-Agent 不执行工具
Meta-Agent 只有三类工具:
- `spawn_subagent(name, role, task, tools?, dependencies?)`
- `cancel_subagent(agent_id)`
- `query_subagent_status(agent_id?)`
其余 11 个 STUDIO_TOOLS(bash_exec, file_write 等)只分配给 sub-agent。
这保证 Meta-Agent **永不阻塞**,始终可响应用户。
### D2: Sub-Agent 上下文完全隔离
每个 sub-agent 拥有独立的 `SubAgentContext`:
- `agent_messages: list` — 独立对话历史
- `artifacts: dict` — 独立产物记录
- `context_files: dict` — 独立上下文文件
- `confirm_gate: AsyncConfirmGate` — 独立确认门
Sub-agent 完成后,仅将**摘要**(结果 + 产出文件列表)回传 Meta-Agent 上下文。
### D3: SSE 事件统一加 agent_id
`RuntimeEvent` 新增 `agent_id: str` 字段(`"meta"` 代表主 agent)。
前端按 `agent_id` 将事件路由到:
- `agent_id == "meta"` → 主聊天区
- 其他 → 右侧面板对应 sub-agent 卡片
### D4: 资源管控
`AgentTeamManager` 维护并发限制:
- `max_concurrent_subagents: int = 4`(可配置)
- 启动前检查系统资源(CPU、内存),拒绝或排队
- Meta-Agent 工具返回资源状态,LLM 自行决策
### D5: SSE vs WebSocket
本阶段继续使用 SSE(多路合并到单 SSE 流,按 agent_id 区分),避免协议切换带来的复杂度。未来可升级 WebSocket。
## 核心文件变更地图
**新增文件**:
- `agenticx/runtime/team_manager.py` — AgentTeamManager, SubAgentContext
- `agenticx/runtime/meta_tools.py` — spawn/cancel/query 三个 Meta-Agent 专用工具
- `agenticx/runtime/resource_monitor.py` — 系统资源检测
- `desktop/src/components/SubAgentPanel.tsx` — 右侧子智能体面板
- `desktop/src/components/SubAgentCard.tsx` — 单个子智能体卡片
**大改文件**:
- `agenticx/runtime/agent_runtime.py` — run_turn 支持 agent_id 传递
- `agenticx/studio/session_manager.py` — ManagedSession 支持多 runtime
- `agenticx/studio/server.py` — SSE 事件带 agent_id, 多路合并
- `desktop/src/store.ts` — Message 增加 agentId, 新增 subAgents state
- `desktop/src/components/ChatView.tsx` — 只渲染 meta agent 消息, 侧边面板联动
**中改文件**:
- `agenticx/runtime/events.py` — RuntimeEvent 增加 agent_id
- `agenticx/runtime/confirm.py` — per-agent confirm gate
- `agenticx/cli/agent_tools.py` — 工具注册区分 meta vs sub
## 风险与对策
- **并发安全**:sub-agent 完全隔离 context,通过 `TeamManager.report_result()` 串行回写 meta context
- **Confirm 冲突**:每个 sub-agent 独立 `AsyncConfirmGate`,前端根据 `agent_id` 路由确认弹窗
- **资源过载**:`max_concurrent_subagents` 硬限制 + 资源检测软限制
- **上下文膨胀**:sub-agent 结果只回传摘要(≤500 tokens),不回传完整 messages
- **MCP 并发**:MCP hub 维持共享但加异步锁
## 验证策略
- 单元测试:`TeamManager` 的 spawn/cancel/并发/资源限制
- 集成测试:Meta-Agent 通过 tool call 启动 sub-agent 并收集结果
- 前端测试:multi-agent 事件流渲染 + 侧面板更新
- 端到端:在 Desktop 中对话触发多 sub-agent 任务,验证进度可见 + 可中断 + 可交互
AgenticX - .cursor plans studio agent loop 改造 428be5da.plan
5472 characters
---
name: Studio Agent Loop 改造
overview: 将 agx studio 从"固定路由 REPL"升级为"LLM Agent Loop + Tool Calling"架构,让 LLM 自主选择工具(bash、file_edit、codegen、mcp_call、skill_use、ask_user 等),同时兼容现有 / 命令快捷方式。这是 CLI 和桌面版的共同底座。
todos: []
isProject: true
phases:
- name: "Phase 1: Tool 定义与注册"
todos:
- id: p1-tool-schema
content: 新建 `agenticx/cli/agent_tools.py`:定义 STUDIO_TOOLS 列表(OpenAI function calling JSON Schema 格式),包含 bash_exec、file_read、file_write、file_edit、codegen、mcp_connect、mcp_call、skill_use、skill_list、ask_user、list_files 共 11 个工具
status: pending
- id: p1-tool-impl
content: agent_tools.py 中实现每个工具的执行函数:bash_exec 用 subprocess.run(白名单检查)、file_read 用 Path.read_text(行号范围)、file_write 用 Path.write_text(显示 diff 确认)、file_edit 用字符串替换(显示 diff)、codegen 调用 CodeGenEngine、mcp_connect/mcp_call 调用 studio_mcp、skill_use/skill_list 调用 studio_skill、ask_user 用 input() 阻塞等待、list_files 用 os.listdir + glob
status: pending
- id: p1-dispatcher
content: agent_tools.py 中实现 `dispatch_tool(name, arguments, session) -> str` 统一分发器,根据 tool name 路由到对应函数,返回字符串结果
status: pending
- id: p1-safety
content: bash_exec 安全机制:定义 SAFE_COMMANDS 白名单(ls/cat/head/tail/grep/find/wc/python/pip/git/echo/pwd/which/tree),非白名单命令自动调用 ask_user 确认;file_write/file_edit 写入前显示 diff 并确认
status: pending
- name: "Phase 2: Agent Loop 引擎"
todos:
- id: p2-loop-core
content: 新建 `agenticx/cli/agent_loop.py`:实现 `run_agent_loop(session, llm, user_input) -> str` 核心函数。构建 system prompt(元 Skills + artifacts + context_files + MCP tools),调用 llm.invoke(messages, tools=STUDIO_TOOLS, tool_choice='auto'),解析 response 中的 tool_calls,执行工具,将结果回注 messages,循环直到 LLM 返回纯文本或达到最大轮次
status: pending
- id: p2-system-prompt
content: agent_loop.py 中实现 `_build_agent_system_prompt(session)` :注入角色定义、元 Skills 摘要、当前 artifacts、context_files、MCP 工具信息、行为准则(中文回复、关键操作确认、安全约束)
status: pending
- id: p2-streaming
content: Agent Loop 纯文本输出时使用流式输出(复用现有的 print(chunk) 逻辑);tool_call 执行时显示 spinner 或状态提示
status: pending
- id: p2-history
content: Agent Loop 每轮的 messages(含 tool_calls + tool results)存入 session.chat_history,保持多轮对话连贯性
status: pending
- id: p2-max-turns
content: 最大循环轮次限制(默认 MAX_TOOL_ROUNDS=10),超过时提示用户并停止
status: pending
- name: "Phase 3: Studio 主循环改造"
todos:
- id: p3-integrate
content: studio.py 主循环改造:保留所有 / 命令快捷路由(/mcp、/skill、/ctx、/show、/run、/save、/undo、/image、/history、/config、/discover、/exit);删除 IntentClassifier 路由逻辑,非 / 输入全部走 run_agent_loop(session, llm, user_input);删除 _chat_reply 函数(Agent Loop 替代)
status: pending
- id: p3-session-update
content: "StudioSession 新增 `agent_messages: List[Dict]` 字段,存储 Agent Loop 的完整 messages 历史(含 tool_calls),替代现有的 chat_history(仅存 role/content 对)"
status: pending
- id: p3-welcome
content: 更新欢迎语:「直接用自然语言描述你想做什么,或输入 shell 命令。」
status: pending
- name: "Phase 4: 文档与测试"
todos:
- id: p4-docs
content: docs/cli.md 更新 Studio 章节:说明 Agent Loop 架构、工具列表、安全机制、典型用法示例(自然语言 + shell 命令 + 混合场景)
status: pending
- id: p4-tests
content: tests/test_agent_tools.py 和 tests/test_agent_loop.py:mock LLM 和工具,验证 tool dispatch、安全白名单、循环终止、流式输出
status: pending
- id: p4-commit
content: 按功能点分组提交,所有 commit 带 Plan-Id trailer
status: pending
---
# Studio Agent Loop 改造
## 架构对比
**现有架构(固定路由)**:
```
用户输入 → IntentClassifier(规则+LLM) → CHAT/GENERATE/MODIFY → 固定处理器
```
**目标架构(Agent Loop)**:
```
用户输入 → / 命令快捷路由(保留)
→ 非 / 开头 → Agent Loop:
system prompt(元Skills+上下文+工具定义)
+ user message
→ LLM(tool_choice="auto")
→ tool_call? → 执行工具 → 结果回注 → 继续循环
→ 纯文本? → 流式输出 → 结束
```
## 关键设计决策
### 1. / 命令保留为"快捷方式"
`/mcp`、`/skill`、`/ctx`、`/show`、`/run` 等保持不变,作为 power user 的快捷入口。
非 / 开头的输入全部进入 Agent Loop。
### 2. Tool 定义(JSON Schema for function calling)
每个工具对应一个 Python 函数 + JSON Schema 定义。LLM 通过 `tools` 参数看到所有工具。
**核心工具集**:
- `bash_exec(command)` — 在当前目录执行 shell 命令,返回 stdout/stderr
- `file_read(path, start_line?, end_line?)` — 读取文件内容
- `file_write(path, content)` — 写入/覆盖文件
- `file_edit(path, old_text, new_text)` — 精确替换文件片段(类似 CC 的 apply diff)
- `codegen(target, description)` — 调用 CodeGenEngine 生成 agent/workflow/tool/skill
- `mcp_connect(server_name)` — 连接 MCP server
- `mcp_call(tool_name, arguments)` — 调用 MCP 工具
- `skill_use(name)` — 激活 skill 到上下文
- `skill_list()` — 列出可用 skills
- `ask_user(question)` — 暂停执行,向用户提问,等待回答
- `list_files(directory?, pattern?)` — 列出目录内容(安全版 ls)
### 3. 安全边界
- `bash_exec`:默认白名单(ls, cat, head, tail, grep, find, wc, python, pip, git status/log/diff)
- 非白名单命令需用户确认(通过 ask_user)
- `file_write`/`file_edit` 写入前显示 diff,需确认
- 最大循环轮次限制(防止死循环),默认 10 轮
### 4. 与现有代码的关系
- `IntentClassifier`:**保留但弱化**,仅作为 Agent Loop 内部的一个 fallback
- `CodeGenEngine`:**保留**,作为 `codegen` 工具的底层实现
- `studio_mcp.py`:**保留**,`mcp_connect/mcp_call` 工具的底层实现
- `studio_skill.py`:**保留**,`skill_use/skill_list` 工具的底层实现
- `_chat_reply()`:**替换**为 Agent Loop 的文本输出路径
## 改动文件清单
- `agenticx/cli/agent_tools.py`(新建):定义所有 Studio Tool 函数 + JSON Schema
- `agenticx/cli/agent_loop.py`(新建):Agent Loop 核心引擎(system prompt 构建、tool dispatch、循环控制)
- `agenticx/cli/studio.py`(修改):主循环中非 / 输入走 agent_loop,替代 IntentClassifier + 固定路由
- `agenticx/cli/codegen_engine.py`(微调):作为 codegen tool 的底层,无重大改动
- `docs/cli.md`(更新):Agent Loop 使用说明
Other multi-agent systems
connectonion harmonist flock phantom eGEOagents OpenAI_Agent_Swarm relaticle cherry-studio grepai mnemory openhanako project-nova
All multi-agent systems →
All prompts here were collected from publicly available sources and are
reproduced for transparency research. Browse the
multi-agent systems category, the
full gallery of 400+ products, or read the
paper behind the AISPA standard.