# 01. 系统提示词与 Agent 编排需求文档

## 1. 系统提示词为什么不是一段固定文案

从源码结构可以反推，这个产品要求系统提示词具备“动态拼装”能力，而不是固定模板。

### 需求原因
用户环境、工具集、语言、输出风格、会话状态、MCP 连接状态都可能变化。如果系统提示词不能动态组装，就会出现：
- 规则不匹配当前会话
- 工具说明失效
- 记忆无法注入
- token 成本失控

## 2. 系统提示词层的核心需求

### 2.1 基础身份定义
系统需要明确告诉模型：
- 你是执行型协作者
- 你的主要任务是软件工程支持
- 你的输出直接给用户看

### 2.2 做任务规范
系统需要内建一套工程行为规范，例如：
- 不要乱加功能
- 不要过度抽象
- 不要假装验证过
- 先读代码再改代码
- 不要随意创建文件

这不是“风格偏好”，而是稳定性需求。

### 2.3 风险动作规范
系统需要明确哪些操作有 blast radius，需要额外确认。例如：
- 删除
- 推送
- 外部可见动作
- 修改共享状态

### 2.4 工具使用语法
系统不仅要告诉模型“有什么工具”，还要告诉它：
- 什么时候读文件
- 什么时候搜索
- 什么时候编辑
- 什么时候用 shell
- 什么时候并行调用

## 3. 动态区块需求

系统提示词至少需要支持以下动态区块：

1. 环境信息
2. 当前语言偏好
3. 输出风格
4. 会话局部规则
5. 记忆内容
6. MCP 指令
7. scratchpad / 临时工作区规则
8. token budget 提示

## 4. 为什么要有 Prompt cache boundary

如果每次请求都完全重造提示词，会带来两个问题：
- 成本上升
- 缓存命中下降

因此产品需要把系统提示词分成：
- 稳定前缀
- 动态后缀

这样才能兼顾灵活性与成本控制。

## 5. Agent 编排的需求本质

系统需要支持把复杂任务拆给不同角色，而不是只依赖一个万能主 agent。

### 必须支持的角色至少包括
- 通用执行角色
- 探索角色
- 规划角色
- 验证角色

### 需求原因
不同任务阶段对行为模式要求不同：
- 探索需要只读
- 规划需要结构化输出
- 实施需要可执行
- 验证需要对抗性检查

如果用一个 agent 混合承担所有角色，稳定性会下降。

## 6. 子 Agent 设计需求

### 6.1 fork 子任务
系统需要支持：
- 子任务继承上下文
- 子任务尽量共享缓存前缀
- 子任务减少主线程污染

### 6.2 background 子任务
系统需要支持：
- 后台执行
- 进度跟踪
- 结果通知
- 可恢复输出

### 6.3 isolation 子任务
系统需要支持：
- worktree 隔离
- remote 隔离（如果启用）

## 7. Prompt 写给子 Agent 的需求

主 agent 必须能够给子 agent 交接充分背景，不能只丢一个模糊命令。产品层面要明确要求：
- 写清任务目标
- 写清已知背景
- 写清约束
- 写清期望输出

## 8. 伪代码表达

```python
class SystemPromptBuilder:
    def build(self, env, tools, memory, output_style, language, mcp_info):
        static_sections = [
            intro(),
            system_rules(),
            task_rules(),
            action_safety(),
            tool_usage_rules(),
        ]
        dynamic_sections = [
            env_section(env),
            language_section(language),
            output_style_section(output_style),
            memory_section(memory),
            mcp_section(mcp_info),
        ]
        return static_sections + dynamic_sections
```

## 9. 产品经理视角下的总需求句

> 系统提示词层的核心需求，是把产品规则、工具语法、会话状态和环境约束组装成一套可动态生成、可缓存优化、可支持多角色协作的运行时控制平面。
