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
-
-
-
+