From 7c35afe8190b0587d6c356f0d7e945859d2ab734 Mon Sep 17 00:00:00 2001 From: xixingde <137176592+xixingde@users.noreply.github.com> Date: Fri, 10 Apr 2026 01:44:11 +0000 Subject: [PATCH 1/7] docs: update contributors --- contributors.svg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contributors.svg b/contributors.svg index 5066782b5..258c9c952 100644 --- a/contributors.svg +++ b/contributors.svg @@ -14,10 +14,10 @@ - - - + + + From 2f115cfd0b170c510ac6685b957a01a06793b5b4 Mon Sep 17 00:00:00 2001 From: xixingde <137176592+xixingde@users.noreply.github.com> Date: Fri, 10 Apr 2026 10:00:09 +0800 Subject: [PATCH 2/7] refactor(agents): reorganize strictPlan agent workflow and remove constraints --- src/costrict/agents/strictPlan.ts | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/src/costrict/agents/strictPlan.ts b/src/costrict/agents/strictPlan.ts index a7c5f98af..0ece7e288 100644 --- a/src/costrict/agents/strictPlan.ts +++ b/src/costrict/agents/strictPlan.ts @@ -9,13 +9,17 @@ function getStrictPlanSystemPrompt(): string { **项目深度探索**:你**必须**先使用'Agent工具'启动\`QuickExplore\` Agent进行深度的项目探索,从而快速了解项目结构、实现细节、技术架构等信息,为需求澄清和提案制定提供准确的项目现状基础。 **需求澄清**:结合项目深度探索的结果,使用\`AskUserQuestion\`工具对用户进行提问式需求澄清,在需求未充分澄清前,禁止草率生成提案或任务清单。 **关于输入形式**:用户的需求可能是简短的一句话描述,也可能是通过 \`@文件\` 引用的详细需求文档。无论哪种形式,你都需要仔细阅读并理解需求内容。 +**理解全局**:深入理解 task.md 中的任务规划 +**任务分发**:将开发任务分发给 SubCodingAgent,确保有序高效执行 +**任务审查**:审查 SubCodingAgent 的代码提交,确保分发的任务都得到正确实现 +**决策响应**:处理 SubCodingAgent 反馈的问题,做出技术决策或调整任务 +**进度追踪**:维护 task.md,准确记录任务完成状态 ## PlanAgent 工作流 **护栏原则** - 优先采用最直接、最小化的实现方式(MVP开发模式),仅在明确需要或被要求时添加复杂性。 - 保持变更范围是紧密围绕用户预期结果展开的。 -- Plan模式约束或最佳实践,请一定要参考**Plan约束和最佳实践**。 ### 流程执行具体步骤 @@ -59,16 +63,7 @@ function getStrictPlanSystemPrompt(): string { #### 实施提案原则 - 使用\`AskUserQuestion\`向用户确认是否进入实施阶段,提供两个选项(立即实施/稍后实施),用户选择"立即实施"后再开始下面的实施操作。 -- 用户选择"立即实施"后,进入实施阶段,**你作为 CodingAgent 直接负责任务分发、审查和进度追踪**。 - -##### 实施阶段核心职责 - -作为 CodingAgent,你需要: -1. **理解全局**:深入理解 task.md 中的任务规划 -2. **任务分发**:将开发任务分发给 SubCodingAgent,确保有序高效执行 -3. **任务审查**:审查 SubCodingAgent 的代码提交,确保分发的任务都得到正确实现 -4. **决策响应**:处理 SubCodingAgent 反馈的问题,做出技术决策或调整任务 -5. **进度追踪**:维护 task.md,准确记录任务完成状态 +- 用户选择"立即实施"后,进入实施阶段,**你负责任务分发、审查和进度追踪**。 ##### 状态更新强制要求 @@ -116,10 +111,7 @@ SubCodingAgent 只需理解与其任务直接相关的内容。分发任务时 1. **分发任务**:调用 \`task\` 工具启动 SubCodingAgent 分发任务 2. **检查任务完成情况**: - - SubCodingAgent 完成后,审查其代码提交: - - 使用 \`checkpoint (action: list)\` 工具了解当前已经完成的代码编写工作,如果存在重复记录,以最新的一条为准 - - 根据 list 的结果,找到对应的与问题最相关的提交,使用 \`checkpoint (action: show_diff)\` 工具查看具体变更内容 - - 根据查看到的修改内容,判断是否完成所有分配的任务 + - 根据SubCodingAgent的任务完成情况,判断是否完成所有分配的任务 - 如果未完成任务,分析原因后指派新的 SubCodingAgent 进行改进 - 如果已完成任务: - **立即更新 task.md**:使用 \`edit\` 更新 task.md 文件,将刚完成的任务标记为已完成(\`- [x]\`) @@ -133,12 +125,6 @@ SubCodingAgent 只需理解与其任务直接相关的内容。分发任务时 - 必须再读取一次 task.md,确保所有子任务均已标记为完成,且无遗漏 - 如有未标记完成的子任务,必须重新提交,直到全部完成 -##### git使用原则 - -- 禁止使用 \`git commit\` 或 \`git push\` 等提交操作 -- 禁止使用 restore、reset、revert 等撤销修改的操作 -- 只允许使用 git 查看操作,如 \`git status\`, \`git diff\`, \`git log\` 等 - ### 提案约束和最佳实践 # Plan 提案创建指南 @@ -237,9 +223,6 @@ export const STRICT_PLAN_AGENT: BuiltInAgentDefinition = { agentType: 'StrictPlan', whenToUse: '根据用户的需求创建具体可实施的计划。Use this when you need to create structured, actionable implementation plans based on user requirements. This agent follows a strict workflow: understand requirements → QuickExplore project → clarify requirements → create proposal → implement proposal.', - disallowedTools: [ - EXIT_PLAN_MODE_TOOL_NAME, - ], tools:[ "AskUserQuestion", "Agent", From 46ba58e46e146cec1a578c7759beac089209df6b Mon Sep 17 00:00:00 2001 From: xixingde <137176592+xixingde@users.noreply.github.com> Date: Fri, 10 Apr 2026 10:29:56 +0800 Subject: [PATCH 3/7] refactor(strictPlan): update system prompt to clarify role and correct tool references --- src/costrict/agents/strictPlan.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/costrict/agents/strictPlan.ts b/src/costrict/agents/strictPlan.ts index 0ece7e288..08c716dc4 100644 --- a/src/costrict/agents/strictPlan.ts +++ b/src/costrict/agents/strictPlan.ts @@ -3,9 +3,9 @@ import type { BuiltInAgentDefinition } from 'src/tools/AgentTool/loadAgentsDir.j function getStrictPlanSystemPrompt(): string { - return `你是一个专门为软件项目创建结构化需求提案的 PlanAgent。 + return `你是一个专门为软件项目创建结构化需求提案并协调实施的 StrictPlan Agent。 你的核心职责是:遵循"**理解用户需求→探索项目→需求澄清→创建提案→实施提案**"的严格工作流。 -**最重要的前提**:你在任何阶段都不允许直接写代码,**你作为 CodingAgent 直接负责任务分发、审查和进度追踪**,通过 SubCodingAgent 实施提案。 +**最重要的前提**:你在任何阶段都不允许直接写代码,**你负责任务规划、分发、审查和进度追踪**,通过 SubCodingAgent 实施提案。 **项目深度探索**:你**必须**先使用'Agent工具'启动\`QuickExplore\` Agent进行深度的项目探索,从而快速了解项目结构、实现细节、技术架构等信息,为需求澄清和提案制定提供准确的项目现状基础。 **需求澄清**:结合项目深度探索的结果,使用\`AskUserQuestion\`工具对用户进行提问式需求澄清,在需求未充分澄清前,禁止草率生成提案或任务清单。 **关于输入形式**:用户的需求可能是简短的一句话描述,也可能是通过 \`@文件\` 引用的详细需求文档。无论哪种形式,你都需要仔细阅读并理解需求内容。 @@ -74,9 +74,9 @@ function getStrictPlanSystemPrompt(): string { ##### 禁止直接修改代码 -- 禁止使用 \`edit\` 修改项目代码文件 -- 所有代码修改必须通过 \`task\` 分发给 SubCodingAgent 执行 -- **唯一例外**:可使用 \`edit\` 修改 task.md +- 禁止使用 \`Edit\` 修改项目代码文件 +- 所有代码修改必须通过 \`Agent\` 分发给 SubCodingAgent 执行 +- **唯一例外**:可使用 \`Edit\` 修改 proposal.md、task.md ##### 合理的任务粒度 From 082345b8aae4f53ac8a1524199fae7d96099e3ad Mon Sep 17 00:00:00 2001 From: xixingde <137176592+xixingde@users.noreply.github.com> Date: Fri, 10 Apr 2026 12:17:56 +0800 Subject: [PATCH 4/7] refactor(costrict): replace SpecPlan agent with StrictPlan skill --- src/costrict/{agents => backup}/specPlan.ts | 1 - src/costrict/skill/strictPlan.ts | 33 +++++++++++++++++++++ src/skills/bundled/index.ts | 2 ++ 3 files changed, 35 insertions(+), 1 deletion(-) rename src/costrict/{agents => backup}/specPlan.ts (98%) create mode 100644 src/costrict/skill/strictPlan.ts diff --git a/src/costrict/agents/specPlan.ts b/src/costrict/backup/specPlan.ts similarity index 98% rename from src/costrict/agents/specPlan.ts rename to src/costrict/backup/specPlan.ts index 885351e49..8bb918453 100644 --- a/src/costrict/agents/specPlan.ts +++ b/src/costrict/backup/specPlan.ts @@ -1,4 +1,3 @@ -import { EXIT_PLAN_MODE_TOOL_NAME } from 'src/tools/ExitPlanModeTool/constants.js' import type { BuiltInAgentDefinition } from 'src/tools/AgentTool/loadAgentsDir.js' function getSpecPlanSystemPrompt(): string { diff --git a/src/costrict/skill/strictPlan.ts b/src/costrict/skill/strictPlan.ts new file mode 100644 index 000000000..385d56d15 --- /dev/null +++ b/src/costrict/skill/strictPlan.ts @@ -0,0 +1,33 @@ +import { registerBundledSkill } from '../../skills/bundledSkills.js' + +export function registerStrictPlanSkill(): void { + registerBundledSkill({ + name: 'strict-plan', + description: + '创建结构化需求提案并协调实施 - 遵循"理解需求→探索项目→需求澄清→创建提案→实施提案"工作流', + whenToUse: + '根据用户的需求创建具体可实施的计划。Use this when you need to create structured, actionable implementation plans based on user requirements. This agent follows a strict workflow: understand requirements → QuickExplore project → clarify requirements → create proposal → implement proposal.', + userInvocable: true, + // 关键:在子 Agent 中运行 + context: 'fork', + // 关键:使用 StrictPlan Agent + agent: 'StrictPlan', + async getPromptForCommand(args) { + const userRequest = args.trim() + if (!userRequest) { + return [ + { + type: 'text', + text: '请提供需要规划的需求描述。用法: /strict-plan <需求描述>', + }, + ] + } + return [ + { + type: 'text', + text: `用户需求:${userRequest}`, + }, + ] + }, + }) +} diff --git a/src/skills/bundled/index.ts b/src/skills/bundled/index.ts index 943a410b4..c37d681a1 100644 --- a/src/skills/bundled/index.ts +++ b/src/skills/bundled/index.ts @@ -17,6 +17,7 @@ import { registerUpdateConfigSkill } from './updateConfig.js' import { registerVerifySkill } from './verify.js' import { registerProjectWikiSkill } from './projectWiki.js' import { registerTddSkill } from './tdd.js' +import { registerStrictPlanSkill } from '../../costrict/skill/strictPlan.js' /** * Initialize all bundled skills. @@ -32,6 +33,7 @@ export function initBundledSkills(): void { registerUpdateConfigSkill() registerProjectWikiSkill() registerTddSkill() + registerStrictPlanSkill() registerKeybindingsSkill() registerVerifySkill() registerDebugSkill() From 47b2db23df5ed891465b1185fcee7892692c7fc8 Mon Sep 17 00:00:00 2001 From: xixingde <137176592+xixingde@users.noreply.github.com> Date: Fri, 10 Apr 2026 12:24:43 +0800 Subject: [PATCH 5/7] feat(strictPlan): add allowedTools configuration to restrict available tools --- src/costrict/skill/strictPlan.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/costrict/skill/strictPlan.ts b/src/costrict/skill/strictPlan.ts index 385d56d15..41208c855 100644 --- a/src/costrict/skill/strictPlan.ts +++ b/src/costrict/skill/strictPlan.ts @@ -8,6 +8,14 @@ export function registerStrictPlanSkill(): void { whenToUse: '根据用户的需求创建具体可实施的计划。Use this when you need to create structured, actionable implementation plans based on user requirements. This agent follows a strict workflow: understand requirements → QuickExplore project → clarify requirements → create proposal → implement proposal.', userInvocable: true, + allowedTools:[ + "AskUserQuestion", + "Agent", + "Read", + "Write", + "Edit", + "TodoWrite", + ], // 关键:在子 Agent 中运行 context: 'fork', // 关键:使用 StrictPlan Agent From 557b873a79ecffe3bf350fe7eff7a10ed906e1f9 Mon Sep 17 00:00:00 2001 From: xixingde <137176592+xixingde@users.noreply.github.com> Date: Fri, 10 Apr 2026 15:54:42 +0800 Subject: [PATCH 6/7] feat(agents): add `isMainThread` flag to agent definition for full tool access --- src/costrict/agents/strictPlan.ts | 3 +++ src/tools/AgentTool/agentToolUtils.ts | 14 +++++++++----- src/tools/AgentTool/loadAgentsDir.ts | 4 ++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/costrict/agents/strictPlan.ts b/src/costrict/agents/strictPlan.ts index 08c716dc4..6ddfd6b5f 100644 --- a/src/costrict/agents/strictPlan.ts +++ b/src/costrict/agents/strictPlan.ts @@ -235,5 +235,8 @@ export const STRICT_PLAN_AGENT: BuiltInAgentDefinition = { baseDir: 'built-in', model: 'inherit', omitClaudeMd: false, + // 通过斜杠命令从主线程启动时,使 resolveAgentTools 跳过 filterToolsForAgent, + // 从而保留主线程完整工具集(包括 Agent 工具)。 + isMainThread: true, getSystemPrompt: () => getStrictPlanSystemPrompt(), } diff --git a/src/tools/AgentTool/agentToolUtils.ts b/src/tools/AgentTool/agentToolUtils.ts index 084ac6a85..c14c48214 100644 --- a/src/tools/AgentTool/agentToolUtils.ts +++ b/src/tools/AgentTool/agentToolUtils.ts @@ -122,7 +122,7 @@ export function filterToolsForAgent({ export function resolveAgentTools( agentDefinition: Pick< AgentDefinition, - 'tools' | 'disallowedTools' | 'source' | 'permissionMode' + 'tools' | 'disallowedTools' | 'source' | 'permissionMode' | 'isMainThread' >, availableTools: Tools, isAsync = false, @@ -133,11 +133,15 @@ export function resolveAgentTools( disallowedTools, source, permissionMode, + isMainThread: agentIsMainThread, } = agentDefinition - // When isMainThread is true, skip filterToolsForAgent entirely — the main - // thread's tool pool is already properly assembled by useMergedTools(), so + // Allow the agent definition itself to declare isMainThread=true, + // which takes precedence over the isMainThread parameter. + const effectiveIsMainThread = agentIsMainThread ?? isMainThread + // When effectiveIsMainThread is true, skip filterToolsForAgent entirely — the + // main thread's tool pool is already properly assembled by useMergedTools(), so // the sub-agent disallow lists shouldn't apply. - const filteredAvailableTools = isMainThread + const filteredAvailableTools = effectiveIsMainThread ? availableTools : filterToolsForAgent({ tools: availableTools, @@ -195,7 +199,7 @@ export function resolveAgentTools( } // For sub-agents, Agent is excluded by filterToolsForAgent — mark the spec // valid for allowedAgentTypes tracking but skip tool resolution. - if (!isMainThread) { + if (!effectiveIsMainThread) { validTools.push(toolSpec) continue } diff --git a/src/tools/AgentTool/loadAgentsDir.ts b/src/tools/AgentTool/loadAgentsDir.ts index cb4dc35e2..5336f45ea 100644 --- a/src/tools/AgentTool/loadAgentsDir.ts +++ b/src/tools/AgentTool/loadAgentsDir.ts @@ -130,6 +130,10 @@ export type BaseAgentDefinition = { * full CLAUDE.md and interprets their output. Saves ~5-15 Gtok/week across * 34M+ Explore spawns. Kill-switch: tengu_slim_subagent_claudemd. */ omitClaudeMd?: boolean + /** When true, resolveAgentTools skips filterToolsForAgent so the agent + * receives the full main-thread tool pool (including Agent tool). + * Use for agents launched directly via slash command from the main thread. */ + isMainThread?: boolean } // Built-in agents - dynamic prompts only, no static systemPrompt field From 5b852bf6bcb6a0046375fccf73f63815757a5a32 Mon Sep 17 00:00:00 2001 From: xixingde <137176592+xixingde@users.noreply.github.com> Date: Fri, 10 Apr 2026 08:00:58 +0000 Subject: [PATCH 7/7] docs: update contributors --- contributors.svg | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/contributors.svg b/contributors.svg index 0ca92eee5..6ea21a0f0 100644 --- a/contributors.svg +++ b/contributors.svg @@ -12,19 +12,12 @@ -<<<<<<< HEAD - - -======= ->>>>>>> c4238f5125d561e447450b99b52ede92fddc03b4 - - - +