[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94362":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":11,"openIssues":12,"contributorsCount":12,"subscribersCount":12,"size":12,"stars1d":12,"stars7d":12,"stars30d":12,"stars90d":12,"forks30d":12,"starsTrendScore":12,"compositeScore":13,"rankGlobal":9,"rankLanguage":9,"license":14,"archived":15,"fork":15,"defaultBranch":16,"hasWiki":17,"hasPages":15,"topics":18,"createdAt":9,"pushedAt":9,"updatedAt":19,"readmeContent":20,"aiSummary":21,"trendingCount":12,"starSnapshotCount":12,"syncStatus":22,"lastSyncTime":23,"discoverSource":24},94362,"CodePlus","feng-shan-jian\u002FCodePlus","feng-shan-jian"," 探索任务之间如何直接通信、交接并长期协作，同时提供一个真正可用的终端 AI 编程工具。  CodePlus 并不是为了直接复刻 Codex。我希望通过这个项目持续探索新的 Agent 协作方式，同时吸收现有工具中已经得到验证的优秀实践，并逐步把自己的理解变成可以公开、可以使用的技术实现。",null,"Python",111,0,40,"MIT License",false,"main",true,[],"2026-08-24 04:01:22","# CodePlus\n\n[中文](README.md) | [English](README_EN.md)\n\n> 探索任务之间如何直接通信、交接并长期协作，同时提供一个真正可用的终端 AI 编程工具。\n\nCodePlus 并不是为了直接复刻 Codex。我希望通过这个项目持续探索新的 Agent 协作方式，同时吸收现有工具中已经得到验证的优秀实践，并逐步把自己的理解变成可以公开、可以使用的技术实现。\n\n## 为什么会有 CodePlus\n\n我看到很多人分享自己的 Agent 工作流，其中不少都会使用多个子 Agent。但真正利用“任务与任务之间直接通信”这一能力的工作流，似乎并不多见或者说还未见到。\n\nCodex 并没有特别明显地宣传这个能力，至少我最初没有看到相关介绍。我是在一次偶然的交互中发现它的：我让一个任务为另一个任务准备提示词，原本以为它会把提示词发给我复制，结果它直接把消息发送给了目标任务。当时我甚至不知道任务之间可以这样通信。\n\n后来我开始尝试把它用于不同场景：\n\n- **任务交接**：任务 A 完成后，创建一个拥有全新上下文的任务，并把整理后的交接信息直接发送给它。\n- **模型分工**：创建使用不同模型或推理能力的任务，只把适合其能力和成本的工作交给它们。\n- **进度监控**：让一个任务定期用自然语言总结另一个任务的进展，并判断是否需要人工调整；需要调整时，可以直接把纠偏指令发送给实现任务。\n- **多层编排**：由总控任务创建多个独立任务，独立任务在完成或遇到阻塞时主动汇报；每个任务内部还可以继续使用子 Agent 拆分局部工作。\n- **高可见度的并行协作**：把原本隐藏在单个 Agent 内部的执行过程，变成用户可以观察、打开、介入、停止和重新连接的独立任务。\n\n这还不是全部。任务可以归档不再需要的会话、提前创建并等待触发条件、在空闲后被再次唤醒，也可以同时接收统一的新指令。一个任务甚至可以先确认自己理解了工作，然后保持等待，直到另一个任务在条件满足时只发送一句“开始”。\n\nCodePlus 也是围绕这种工作方式构建的：让多个任务不再是互相隔离的一次性对话，而是能够持续通信、交接、等待、恢复和协同的工作单元。\n\n## 两种并行协作\n\n用户可见任务和内部子 Agent 解决的是不同问题，不应该混为一谈。\n\n```text\n用户可见任务                         当前任务内部\n\n任务 A      任务 B      任务 C       当前任务\n  │           │           │             └── 子 Agent\n  └──── 消息、等待、交接 ──┘                  └── 子 Agent\n\n独立窗口、独立上下文、可重新附着       局部研究、审查和有界并行\n```\n\n用户可见任务适合长期存在、跨任务通信和人工介入。内部子 Agent 更适合在当前任务内部完成代码审查、局部研究或并行修改。CodePlus 同时保留这两种模型，并让用户明确知道自己正在使用哪一种。\n\n## 我在 Codex 中观察到的工具系统\n\n下面这些名称来自我当前使用 Codex Desktop 时观察到的工具环境。它们用于说明 CodePlus 的灵感来源和能力映射，不代表 OpenAI 对这些内部工具名称或行为作出的长期兼容承诺；不同版本、账户和运行环境中可见的能力也可能不同。\n\n### 用户可见任务与线程协调\n\n| 工具 | 作用 |\n| --- | --- |\n| `codex_app__create_thread` | 创建新的用户可见 Codex 任务，可指定项目和工作目录 |\n| `codex_app__send_message_to_thread` | 向已有任务发送后续指令、调整信息或汇报要求 |\n| `codex_app__wait_threads` | 等待一个或多个任务完成、请求输入或进入需要关注状态；一次最多等待 8 个 |\n| `codex_app__read_thread` | 读取任务状态、Turn 摘要、最终回复和工具输出 |\n| `codex_app__list_threads` | 查询用户可见任务列表 |\n| `codex_app__fork_thread` | 从已有任务的已完成上下文创建分支任务 |\n| `codex_app__handoff_thread` | 把任务交接给另一个任务或执行环境 |\n| `codex_app__get_handoff_status` | 查询异步任务交接状态 |\n| `codex_app__set_thread_archived` | 归档或恢复任务 |\n| `codex_app__set_thread_pinned` | 固定或取消固定任务 |\n| `codex_app__set_thread_title` | 修改任务标题 |\n| `codex_app__navigate_to_codex_page` | 在 Codex 应用中打开指定任务 |\n| `codex_app__read_thread_terminal` | 读取当前桌面任务关联的终端输出 |\n| `codex_app__list_projects` | 查询可用于创建任务的本地项目、路径和 Git 状态 |\n\n一个典型流程是：\n\n```text\ncreate_thread\n    -> send_message_to_thread\n    -> wait_threads\n    -> read_thread\n```\n\n这里有三个关键区别：\n\n1. `create_thread` 创建的是用户能够在侧边栏看到和打开的独立任务。\n2. `send_message_to_thread` 是跨任务发送后续信息，不是把提示词复制回当前对话。\n3. `wait_threads` 等待的是状态事件，不需要反复读取其他任务的完整历史。\n\n任务完成后，目标任务还可以主动通过 `send_message_to_thread` 向来源任务汇报结果或阻塞原因。\n\n### 内部子 Agent 协调\n\n| 工具 | 作用 |\n| --- | --- |\n| `collaboration.spawn_agent` | 创建当前任务内部的子 Agent |\n| `collaboration.followup_task` | 向已有子 Agent 分配后续任务并唤醒它 |\n| `collaboration.send_message` | 向正在运行的子 Agent 追加信息，不一定触发新一轮 |\n| `collaboration.wait_agent` | 等待子 Agent 完成或产生消息 |\n| `collaboration.interrupt_agent` | 中断子 Agent 当前工作 |\n| `collaboration.list_agents` | 查看当前 Agent 树和运行状态 |\n\n内部子 Agent 通常不作为平级任务出现在用户任务列表中，适合有边界、可并行的局部工作。用户可见任务则更接近独立工作线程：它们拥有自己的生命周期，可以被单独打开、等待和继续发送消息。\n\n### 本地文件和命令\n\n| 工具 | 作用 |\n| --- | --- |\n| `shell_command` | 执行 PowerShell 命令，读取文件、构建项目和运行测试 |\n| `apply_patch` | 对文件进行精确补丁修改 |\n| `view_image` | 查看本地图片和视觉结果 |\n| `codex_app__load_workspace_dependencies` | 查询桌面环境提供的 Node、Python、文档和媒体处理依赖 |\n\n它们组成最常见的工程闭环：\n\n```text\n读取代码 -> 修改代码 -> 构建或测试 -> 检查真实输出\n```\n\n### 规划、目标和 MCP 资源\n\n| 工具 | 作用 |\n| --- | --- |\n| `update_plan` | 更新当前任务的计划和步骤状态 |\n| `create_goal` | 创建一个明确的长期目标 |\n| `get_goal` | 查询当前目标和执行状态 |\n| `update_goal` | 把目标标记为完成或阻塞 |\n| `list_mcp_resources` | 查询 MCP 服务提供的资源 |\n| `read_mcp_resource` | 读取指定 MCP 资源 |\n| `list_mcp_resource_templates` | 查询带参数的 MCP 资源模板 |\n\n这些工具管理目标、计划和上下文，本身不替代真实的代码执行工具。\n\n### 自动化和任务管理\n\n| 工具 | 作用 |\n| --- | --- |\n| `codex_app__automation_update` | 创建、查看、更新或删除定时任务、提醒、监控和后续唤醒 |\n| `codex_app__set_thread_archived` | 在任务完成后归档，保留历史但减少列表干扰 |\n| `codex_app__set_thread_pinned` | 固定需要持续关注的重要任务 |\n| `codex_app__set_thread_title` | 为长期任务提供稳定、可识别的名称 |\n| `codex_app__navigate_to_codex_page` | 在桌面应用中跳转到需要处理的任务 |\n\n## CodePlus 已经实现了什么\n\nCodePlus 没有停留在概念或界面演示。下面这些能力已经接入真实的 Service、持久化状态和执行入口。\n\n### 用户可见 Runtime Tasks\n\n| CodePlus 工具 | 当前能力 |\n| --- | --- |\n| `TaskSpawn` | 创建独立、用户可见、可持久化的 Runtime Task；支持 `inline`、`headless`、`new-window` 和 `auto` 窗口模式 |\n| `TaskSend` | 向已有任务可靠发送消息；支持幂等键、异常任务恢复和 FIFO 排队 |\n| `TaskWait` | 按事件游标等待 1 至 8 个任务，不需要持续读取完整历史 |\n| `TaskRead` | 读取任务、消息、Turn、事件和待处理交互 |\n| `TaskList` | 查询当前项目身份可见的任务和需要用户关注的状态 |\n| `TaskFork` | 从来源任务已经完成的持久化历史创建新任务，不复制进行中的半轮内容 |\n| `TaskInterrupt` | 请求中断任务并让持久化状态与真实 worker 收敛 |\n\nRuntime Task 还提供完整 CLI 入口：\n\n```text\ncodeplus task spawn\ncodeplus task new\ncodeplus task open\ncodeplus task respond\ncodeplus task send\ncodeplus task wait\ncodeplus task read\ncodeplus task list\ncodeplus task fork\ncodeplus task interrupt\ncodeplus task resume\ncodeplus task delete\n```\n\n### 独立交互窗口\n\n- 每个用户可见任务都可以拥有完整 Textual TUI，而不是只显示 worker 日志的预览窗口。\n- 多个窗口可以附着到同一个持久化任务；关闭客户端不会自动停止后台 runner。\n- 窗口支持继续输入、流式输出、工具调用展示、权限选择、AskUser、任务切换和重新附着。\n- 新消息在任务等待用户授权时仍会可靠排队，权限卡片保持可操作；用户回复后任务自动继续处理后续消息。\n\n### 持久化协调与恢复\n\n- 任务、消息、事件、Turn 和交互请求持久化到 SQLite WAL。\n- 每个任务只有一个 runner 写入 Session，客户端与 runner 生命周期分离。\n- 消息使用 FIFO、租约、心跳、CAS 和幂等键，避免并发窗口重复执行同一轮。\n- 完成 Turn 与输入消息建立持久化关联，进程恢复时不会因为确认阶段崩溃而简单重放已完成 Turn。\n- 权限和 AskUser 响应采用首次响应胜出的 CAS 语义，多个窗口不会重复提交决定。\n- 同一任务树的全局活跃 Turn 上限为 8，超过限制的 Turn 保持持久化排队。\n\n### 工作区、权限和安全边界\n\n- Git 项目可以为任务创建隔离 worktree；非 Git 项目使用共享目录。\n- 首次写入前可以让用户选择共享目录或隔离工作区，选择结果持久化到任务状态。\n- 支持 `default`、`acceptEdits`和 `bypassPermissions` 权限模式。\n- 权限规则可按用户、项目和本地覆盖层加载，并结合路径沙箱和危险命令检测。\n- 后台任务不会因为没有窗口就自动批准待处理权限。\n\n### 内部 Agent 与 Team 协作\n\n- `Agent` 用于当前任务内部的有界子 Agent 工作。\n- `TeamCreate`、`TeamDelete`、`SendMessage`、`TaskCreate`、`TaskGet`、`TaskList`、`TaskUpdate` 和 `TaskStop` 提供内部团队与共享工作项协调。\n- 用户可见 Runtime Task 与内部 Agent\u002FTeam 使用不同入口，避免把内部执行单元错误展示成平级任务。\n\n### 编码、扩展和上下文能力\n\n- 本地工具：`ReadFile`、`WriteFile`、`EditFile`、`Bash`、`Glob`、`Grep`。\n- 交互工具：`AskUserQuestion`、`EnterWorktree`、`ExitWorktree`；Plan 由独立 collaboration mode 控制。\n- Skill：安装、加载、嵌套选择和运行时执行。\n- MCP：支持 stdio、Streamable HTTP 和 SSE 服务，动态注册远程工具。\n- 模型：支持 Anthropic、OpenAI 和 OpenAI 兼容协议的 Provider 配置；每个 Runtime Task 都可以选择并持久化自己的 Provider，也可以在轮次边界切换。\n- 上下文：Session 历史、自动 Memory、项目指令、上下文压缩、文件历史和 rewind。\n- 扩展：生命周期 Hooks、工具搜索、权限规则和非交互 `stream-json` 输出。\n\n## 仍在探索的能力\n\nCodePlus 借鉴了我在 Codex 中观察到的任务协作方式，但不会逐项复制某个现有产品。以下能力仍属于后续探索方向：\n\n- 用户可见任务的固定、软归档和独立标题管理。\n- 跨项目、跨 worktree 或跨执行环境的异步 handoff 及状态查询。\n- Codex Desktop 项目目录发现和桌面终端缓冲区读取。\n- 定时任务、提醒、周期监控和条件触发唤醒。\n- 让主任务根据工作类型，自动为不同任务选择已经配置好的 Provider、模型与 API Key。目前每个任务已经可以手动选择独立 Provider，而每个 Provider 可以配置自己的模型和密钥；尚未完成的是由主任务自主决策和动态路由。\n- 由主任务自主分配总预算，根据任务难度规划推理强度和成本份额，并持续识别执行偏差、及时纠偏。\n- 识别任务上下文与原始目标之间的偏离，在不打断正常执行的前提下请求澄清、重新规划或交接。\n\n## 架构\n\n```mermaid\nflowchart LR\n    User[用户]\n    TuiA[Task TUI A]\n    TuiB[Task TUI B]\n    Service[RuntimeTaskService]\n    Database[(SQLite WAL Coordinator)]\n    RunnerA[Task Runner A]\n    RunnerB[Task Runner B]\n    Provider[Model Providers and Tools]\n\n    User --> TuiA\n    User --> TuiB\n    TuiA --> Service\n    TuiB --> Service\n    Service --> Database\n    Database --> RunnerA\n    Database --> RunnerB\n    RunnerA --> Provider\n    RunnerB --> Provider\n    RunnerA -->|TaskSend \u002F Events| Database\n    RunnerB -->|TaskSend \u002F Reports| Database\n```\n\n`RuntimeTaskService` 是 CLI、TUI 和模型工具共享的行为层。SQLite 保存权威状态，事件游标负责跨进程唤醒和恢复；TUI 只负责投影视图和提交用户操作，不持有第二份 Agent 或 Session 写入状态。\n\n## 快速开始\n\n### 环境要求\n\n- Python 3.11 或更高版本\n- [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F)\n- 至少一个可用的模型 Provider 和 API Key\n\n### 安装依赖\n\n```powershell\nuv sync --dev\n```\n\n### 配置 Provider\n\nWindows PowerShell：\n\n```powershell\nCopy-Item .codeplus\\config.yaml.example .codeplus\\config.yaml\n```\n\nLinux 或 macOS：\n\n```bash\ncp .codeplus\u002Fconfig.yaml.example .codeplus\u002Fconfig.yaml\n```\n\n编辑 `.codeplus\u002Fconfig.yaml`，填写自己的 Provider、模型和 API Key。该文件默认作为本地配置使用。\n\n### 启动 CodePlus\n\n启动交互式 TUI：\n\n```powershell\nuv run codeplus\n```\n\n## 开发与验证\n\n主要目录：\n\n```text\ncodeplus\u002F\n  runtime_tasks\u002F   用户可见任务、协调器、worker 和独立 TUI\n  teams\u002F           内部 Team 与共享工作项协调\n  agents\u002F          子 Agent 加载、执行和跟踪\n  tools\u002F           本地、任务、Skill 和协作工具\n  permissions\u002F     权限模式、规则、沙箱和危险命令检测\n  mcp\u002F             MCP 客户端、管理器和工具包装\n  memory\u002F          Session、自动记忆和上下文召回\n  worktree\u002F        Git worktree 生命周期\ntests\u002F             单元、持久化、TUI 和运行时集成测试\n```\n\n运行完整测试：\n\n```powershell\nuv run pytest\n```\n\n## 项目定位\n\nCodePlus 是一个独立项目，不是 OpenAI 或 Codex 的官方组件。\n\n它希望回答一个仍在快速变化的问题：当 Agent 不再只是一次性回答，而是能够拥有独立任务、持久上下文、直接通信和长期协作能力时，软件开发工具应该怎样更合理、更高效地组织这些 Agent，同时仍让用户看得见、管得住，并能在关键节点作出决定？\n\n这个问题值得持续探索，也值得做成一个能够长期使用的完整工具。\n","CodePlus 是一个面向终端场景的 AI 编程协作框架，专注于实现多个用户可见任务之间的直接通信、状态交接与长期协同。其核心能力包括跨任务消息传递、异步等待与状态监听、任务归档\u002F唤醒、模型级分工编排，以及用户可观察、可介入的并行任务管理。项目基于 Python 构建，抽象出两类协作层级：用户可见的独立任务（支持标题管理、侧边栏交互、终端输出读取）与内部子 Agent（用于局部并行处理）。适合需要高可见性、人工干预能力及多阶段协作的终端编程场景，如复杂代码生成、渐进式调试、跨模块开发与自动化工作流治理。",2,"2026-08-07 02:30:08","CREATED_QUERY"]