gencode-ai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +11 -0
- package/CLAUDE.md +70 -0
- package/LICENSE +21 -0
- package/README.md +117 -0
- package/dist/agent/agent.d.ts +84 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +233 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/index.d.ts +6 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +6 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/types.d.ts +47 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +5 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli/components/App.d.ts +14 -0
- package/dist/cli/components/App.d.ts.map +1 -0
- package/dist/cli/components/App.js +395 -0
- package/dist/cli/components/App.js.map +1 -0
- package/dist/cli/components/CommandSuggestions.d.ts +13 -0
- package/dist/cli/components/CommandSuggestions.d.ts.map +1 -0
- package/dist/cli/components/CommandSuggestions.js +32 -0
- package/dist/cli/components/CommandSuggestions.js.map +1 -0
- package/dist/cli/components/Header.d.ts +9 -0
- package/dist/cli/components/Header.d.ts.map +1 -0
- package/dist/cli/components/Header.js +13 -0
- package/dist/cli/components/Header.js.map +1 -0
- package/dist/cli/components/Input.d.ts +13 -0
- package/dist/cli/components/Input.d.ts.map +1 -0
- package/dist/cli/components/Input.js +27 -0
- package/dist/cli/components/Input.js.map +1 -0
- package/dist/cli/components/Logo.d.ts +2 -0
- package/dist/cli/components/Logo.d.ts.map +1 -0
- package/dist/cli/components/Logo.js +8 -0
- package/dist/cli/components/Logo.js.map +1 -0
- package/dist/cli/components/Messages.d.ts +37 -0
- package/dist/cli/components/Messages.d.ts.map +1 -0
- package/dist/cli/components/Messages.js +106 -0
- package/dist/cli/components/Messages.js.map +1 -0
- package/dist/cli/components/ModelSelector.d.ts +13 -0
- package/dist/cli/components/ModelSelector.d.ts.map +1 -0
- package/dist/cli/components/ModelSelector.js +72 -0
- package/dist/cli/components/ModelSelector.js.map +1 -0
- package/dist/cli/components/Spinner.d.ts +12 -0
- package/dist/cli/components/Spinner.d.ts.map +1 -0
- package/dist/cli/components/Spinner.js +45 -0
- package/dist/cli/components/Spinner.js.map +1 -0
- package/dist/cli/components/index.d.ts +12 -0
- package/dist/cli/components/index.d.ts.map +1 -0
- package/dist/cli/components/index.js +12 -0
- package/dist/cli/components/index.js.map +1 -0
- package/dist/cli/components/theme.d.ts +31 -0
- package/dist/cli/components/theme.d.ts.map +1 -0
- package/dist/cli/components/theme.js +36 -0
- package/dist/cli/components/theme.js.map +1 -0
- package/dist/cli/index-legacy.d.ts +7 -0
- package/dist/cli/index-legacy.d.ts.map +1 -0
- package/dist/cli/index-legacy.js +431 -0
- package/dist/cli/index-legacy.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +116 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ink-cli.d.ts +7 -0
- package/dist/cli/ink-cli.d.ts.map +1 -0
- package/dist/cli/ink-cli.js +105 -0
- package/dist/cli/ink-cli.js.map +1 -0
- package/dist/cli/session-picker.d.ts +16 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +280 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli/ui.d.ts +61 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +364 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +31 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +65 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/types.d.ts +22 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +6 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +10 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +9 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/init.d.ts +20 -0
- package/dist/memory/init.d.ts.map +1 -0
- package/dist/memory/init.js +332 -0
- package/dist/memory/init.js.map +1 -0
- package/dist/memory/manager.d.ts +85 -0
- package/dist/memory/manager.d.ts.map +1 -0
- package/dist/memory/manager.js +234 -0
- package/dist/memory/manager.js.map +1 -0
- package/dist/memory/types.d.ts +74 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +6 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/permissions/index.d.ts +7 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +6 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/permissions/manager.d.ts +32 -0
- package/dist/permissions/manager.d.ts.map +1 -0
- package/dist/permissions/manager.js +79 -0
- package/dist/permissions/manager.js.map +1 -0
- package/dist/permissions/types.d.ts +14 -0
- package/dist/permissions/types.d.ts.map +1 -0
- package/dist/permissions/types.js +17 -0
- package/dist/permissions/types.js.map +1 -0
- package/dist/providers/anthropic.d.ts +20 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +185 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/gemini.d.ts +21 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +241 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +34 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +72 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +19 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +221 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/types.d.ts +125 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +6 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +6 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +101 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +295 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/types.d.ts +39 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +10 -0
- package/dist/session/types.js.map +1 -0
- package/dist/tools/builtin/bash.d.ts +7 -0
- package/dist/tools/builtin/bash.d.ts.map +1 -0
- package/dist/tools/builtin/bash.js +80 -0
- package/dist/tools/builtin/bash.js.map +1 -0
- package/dist/tools/builtin/edit.d.ts +7 -0
- package/dist/tools/builtin/edit.d.ts.map +1 -0
- package/dist/tools/builtin/edit.js +32 -0
- package/dist/tools/builtin/edit.js.map +1 -0
- package/dist/tools/builtin/glob.d.ts +7 -0
- package/dist/tools/builtin/glob.d.ts.map +1 -0
- package/dist/tools/builtin/glob.js +36 -0
- package/dist/tools/builtin/glob.js.map +1 -0
- package/dist/tools/builtin/grep.d.ts +7 -0
- package/dist/tools/builtin/grep.d.ts.map +1 -0
- package/dist/tools/builtin/grep.js +59 -0
- package/dist/tools/builtin/grep.js.map +1 -0
- package/dist/tools/builtin/read.d.ts +7 -0
- package/dist/tools/builtin/read.d.ts.map +1 -0
- package/dist/tools/builtin/read.js +29 -0
- package/dist/tools/builtin/read.js.map +1 -0
- package/dist/tools/builtin/write.d.ts +7 -0
- package/dist/tools/builtin/write.d.ts.map +1 -0
- package/dist/tools/builtin/write.js +24 -0
- package/dist/tools/builtin/write.js.map +1 -0
- package/dist/tools/index.d.ts +38 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +32 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +22 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +71 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +62 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +126 -0
- package/dist/tools/types.js.map +1 -0
- package/docs/README.md +16 -0
- package/docs/proposals/0001-web-fetch-tool.md +293 -0
- package/docs/proposals/0002-web-search-tool.md +306 -0
- package/docs/proposals/0003-task-subagents.md +333 -0
- package/docs/proposals/0004-plan-mode.md +338 -0
- package/docs/proposals/0005-todo-system.md +299 -0
- package/docs/proposals/0006-memory-system.md +539 -0
- package/docs/proposals/0007-context-management.md +429 -0
- package/docs/proposals/0008-checkpointing.md +327 -0
- package/docs/proposals/0009-hooks-system.md +343 -0
- package/docs/proposals/0010-mcp-integration.md +382 -0
- package/docs/proposals/0011-custom-commands.md +374 -0
- package/docs/proposals/0012-ask-user-question.md +317 -0
- package/docs/proposals/0013-multi-edit-tool.md +345 -0
- package/docs/proposals/0014-lsp-tool.md +478 -0
- package/docs/proposals/0015-ls-tool.md +407 -0
- package/docs/proposals/0016-kill-shell-tool.md +455 -0
- package/docs/proposals/0017-background-tasks.md +489 -0
- package/docs/proposals/0018-parallel-tool-execution.md +415 -0
- package/docs/proposals/0019-session-enhancements.md +462 -0
- package/docs/proposals/0020-session-summarization.md +447 -0
- package/docs/proposals/0021-skills-system.md +409 -0
- package/docs/proposals/0022-plugin-system.md +467 -0
- package/docs/proposals/0023-permission-enhancements.md +470 -0
- package/docs/proposals/0024-keyboard-shortcuts.md +443 -0
- package/docs/proposals/0025-cost-tracking.md +447 -0
- package/docs/proposals/0026-git-integration.md +475 -0
- package/docs/proposals/0027-enhanced-read-tool.md +514 -0
- package/docs/proposals/0028-enhanced-bash-tool.md +511 -0
- package/docs/proposals/0029-notebook-edit-tool.md +413 -0
- package/docs/proposals/0030-plugin-marketplace.md +360 -0
- package/docs/proposals/0031-command-suggestions.md +295 -0
- package/docs/proposals/0032-ide-integrations.md +328 -0
- package/docs/proposals/0033-enterprise-deployment.md +221 -0
- package/docs/proposals/0034-sandboxing.md +273 -0
- package/docs/proposals/0035-auto-updater.md +311 -0
- package/docs/proposals/0036-enhanced-glob-tool.md +267 -0
- package/docs/proposals/0037-enhanced-grep-tool.md +360 -0
- package/docs/proposals/0038-interactive-cli-ui.md +373 -0
- package/docs/proposals/0039-streaming-enhancements.md +359 -0
- package/docs/proposals/0040-multi-provider-enhancements.md +369 -0
- package/docs/proposals/README.md +84 -0
- package/docs/proposals/TEMPLATE.md +57 -0
- package/docs/proposals/research/claude-code-research.md +307 -0
- package/examples/agent-demo.ts +115 -0
- package/examples/basic.ts +166 -0
- package/package.json +50 -0
- package/src/agent/agent.ts +276 -0
- package/src/agent/index.ts +6 -0
- package/src/agent/types.ts +62 -0
- package/src/cli/components/App.tsx +565 -0
- package/src/cli/components/CommandSuggestions.tsx +58 -0
- package/src/cli/components/Header.tsx +36 -0
- package/src/cli/components/Input.tsx +60 -0
- package/src/cli/components/Logo.tsx +16 -0
- package/src/cli/components/Messages.tsx +210 -0
- package/src/cli/components/ModelSelector.tsx +135 -0
- package/src/cli/components/Spinner.tsx +72 -0
- package/src/cli/components/index.ts +21 -0
- package/src/cli/components/theme.ts +36 -0
- package/src/cli/index.tsx +136 -0
- package/src/config/index.ts +7 -0
- package/src/config/manager.ts +77 -0
- package/src/config/types.ts +25 -0
- package/src/index.ts +86 -0
- package/src/permissions/index.ts +7 -0
- package/src/permissions/manager.ts +97 -0
- package/src/permissions/types.ts +29 -0
- package/src/providers/anthropic.ts +224 -0
- package/src/providers/gemini.ts +295 -0
- package/src/providers/index.ts +97 -0
- package/src/providers/openai.ts +261 -0
- package/src/providers/types.ts +181 -0
- package/src/session/index.ts +6 -0
- package/src/session/manager.ts +354 -0
- package/src/session/types.ts +49 -0
- package/src/tools/builtin/bash.ts +92 -0
- package/src/tools/builtin/edit.ts +37 -0
- package/src/tools/builtin/glob.ts +42 -0
- package/src/tools/builtin/grep.ts +67 -0
- package/src/tools/builtin/read.ts +34 -0
- package/src/tools/builtin/write.ts +27 -0
- package/src/tools/index.ts +36 -0
- package/src/tools/registry.ts +83 -0
- package/src/tools/types.ts +172 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# Proposal: Task Tool & Subagent System
|
|
2
|
+
|
|
3
|
+
- **Proposal ID**: 0003
|
|
4
|
+
- **Author**: mycode team
|
|
5
|
+
- **Status**: Draft
|
|
6
|
+
- **Created**: 2025-01-15
|
|
7
|
+
- **Updated**: 2025-01-15
|
|
8
|
+
|
|
9
|
+
## Summary
|
|
10
|
+
|
|
11
|
+
Implement a Task tool that launches specialized subagents to handle complex, multi-step tasks autonomously. Subagents run with separate context windows, specific tool access, and defined expertise areas, enabling efficient handling of specialized tasks without polluting the main conversation context.
|
|
12
|
+
|
|
13
|
+
## Motivation
|
|
14
|
+
|
|
15
|
+
Currently, mycode uses a single agent for all tasks. This leads to:
|
|
16
|
+
|
|
17
|
+
1. **Context pollution**: Complex research fills up main context
|
|
18
|
+
2. **No specialization**: One agent can't optimize for different task types
|
|
19
|
+
3. **No parallelism**: Tasks must run sequentially
|
|
20
|
+
4. **Context overflow**: Long operations exhaust context limits
|
|
21
|
+
5. **No delegation**: Can't spawn workers for independent subtasks
|
|
22
|
+
|
|
23
|
+
A subagent system enables parallel, specialized, context-isolated task execution.
|
|
24
|
+
|
|
25
|
+
## Claude Code Reference
|
|
26
|
+
|
|
27
|
+
Claude Code's Task tool launches specialized agents with defined capabilities:
|
|
28
|
+
|
|
29
|
+
### Tool Definition
|
|
30
|
+
```typescript
|
|
31
|
+
Task({
|
|
32
|
+
description: "Explore authentication code", // Short description (3-5 words)
|
|
33
|
+
prompt: "Find all authentication-related files...", // Detailed task
|
|
34
|
+
subagent_type: "Explore", // Agent specialization
|
|
35
|
+
model: "haiku", // Optional: model selection
|
|
36
|
+
run_in_background: false // Optional: async execution
|
|
37
|
+
})
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Available Agent Types
|
|
41
|
+
| Type | Description | Tools Available |
|
|
42
|
+
|------|-------------|-----------------|
|
|
43
|
+
| `Explore` | Fast codebase exploration | Read, Glob, Grep (read-only) |
|
|
44
|
+
| `Plan` | Architecture and design | All read tools, no edit |
|
|
45
|
+
| `Bash` | Command execution | Bash only |
|
|
46
|
+
| `general-purpose` | Full capabilities | All tools |
|
|
47
|
+
|
|
48
|
+
### Key Features
|
|
49
|
+
- Separate context window per subagent
|
|
50
|
+
- Constrained tool access per type
|
|
51
|
+
- Background execution option
|
|
52
|
+
- Model selection (haiku for simple, sonnet for complex)
|
|
53
|
+
- Resume capability with agent ID
|
|
54
|
+
- Parallel launch (multiple Task calls in one message)
|
|
55
|
+
|
|
56
|
+
### Example Usage
|
|
57
|
+
```
|
|
58
|
+
User: Find where authentication errors are handled
|
|
59
|
+
|
|
60
|
+
Agent: I'll launch an Explore agent to search the codebase.
|
|
61
|
+
[Task:
|
|
62
|
+
description: "Find auth error handling"
|
|
63
|
+
prompt: "Search for authentication error handling..."
|
|
64
|
+
subagent_type: "Explore"
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
Explore Agent Result:
|
|
68
|
+
Found authentication error handling in:
|
|
69
|
+
- src/auth/errors.ts:45 - AuthError class
|
|
70
|
+
- src/middleware/auth.ts:78 - error handler
|
|
71
|
+
...
|
|
72
|
+
|
|
73
|
+
Agent: Based on the exploration, authentication errors are handled in...
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Detailed Design
|
|
77
|
+
|
|
78
|
+
### API Design
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// src/subagents/types.ts
|
|
82
|
+
type SubagentType = 'Explore' | 'Plan' | 'Bash' | 'general-purpose';
|
|
83
|
+
|
|
84
|
+
interface TaskInput {
|
|
85
|
+
description: string; // Short description (3-5 words)
|
|
86
|
+
prompt: string; // Detailed task instructions
|
|
87
|
+
subagent_type: SubagentType;
|
|
88
|
+
model?: 'haiku' | 'sonnet' | 'opus';
|
|
89
|
+
run_in_background?: boolean;
|
|
90
|
+
resume?: string; // Agent ID to resume
|
|
91
|
+
max_turns?: number; // Max conversation turns
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
interface TaskOutput {
|
|
95
|
+
success: boolean;
|
|
96
|
+
result?: string;
|
|
97
|
+
agentId: string; // For resume capability
|
|
98
|
+
outputFile?: string; // For background tasks
|
|
99
|
+
error?: string;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
interface SubagentConfig {
|
|
103
|
+
type: SubagentType;
|
|
104
|
+
allowedTools: string[];
|
|
105
|
+
defaultModel: string;
|
|
106
|
+
systemPrompt: string;
|
|
107
|
+
maxTurns: number;
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// src/subagents/task-tool.ts
|
|
113
|
+
const taskTool: Tool<TaskInput> = {
|
|
114
|
+
name: 'Task',
|
|
115
|
+
description: `Launch a specialized subagent for complex tasks.
|
|
116
|
+
|
|
117
|
+
Available agent types:
|
|
118
|
+
- Explore: Fast codebase exploration (read-only)
|
|
119
|
+
- Plan: Architecture design and planning
|
|
120
|
+
- Bash: Command execution specialist
|
|
121
|
+
- general-purpose: Full capabilities
|
|
122
|
+
|
|
123
|
+
Guidelines:
|
|
124
|
+
- Use Explore for searching/understanding code
|
|
125
|
+
- Use Plan for designing implementation approaches
|
|
126
|
+
- Use Bash for running commands
|
|
127
|
+
- Include 3-5 word description
|
|
128
|
+
- Provide detailed prompt with context
|
|
129
|
+
- Use haiku for simple, sonnet for complex tasks
|
|
130
|
+
- Launch multiple agents in parallel when possible
|
|
131
|
+
`,
|
|
132
|
+
parameters: z.object({
|
|
133
|
+
description: z.string().min(1),
|
|
134
|
+
prompt: z.string().min(1),
|
|
135
|
+
subagent_type: z.enum(['Explore', 'Plan', 'Bash', 'general-purpose']),
|
|
136
|
+
model: z.enum(['haiku', 'sonnet', 'opus']).optional(),
|
|
137
|
+
run_in_background: z.boolean().optional(),
|
|
138
|
+
resume: z.string().optional(),
|
|
139
|
+
max_turns: z.number().positive().optional()
|
|
140
|
+
}),
|
|
141
|
+
execute: async (input, context) => { ... }
|
|
142
|
+
};
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
// src/subagents/subagent.ts
|
|
147
|
+
class Subagent {
|
|
148
|
+
private id: string;
|
|
149
|
+
private type: SubagentType;
|
|
150
|
+
private config: SubagentConfig;
|
|
151
|
+
private agent: Agent;
|
|
152
|
+
|
|
153
|
+
constructor(type: SubagentType, config?: Partial<SubagentConfig>);
|
|
154
|
+
|
|
155
|
+
// Execute task and return result
|
|
156
|
+
async run(prompt: string): Promise<TaskOutput>;
|
|
157
|
+
|
|
158
|
+
// Run in background, return immediately
|
|
159
|
+
async runInBackground(prompt: string): Promise<{ agentId: string; outputFile: string }>;
|
|
160
|
+
|
|
161
|
+
// Resume from previous execution
|
|
162
|
+
async resume(agentId: string): Promise<TaskOutput>;
|
|
163
|
+
|
|
164
|
+
// Get current status
|
|
165
|
+
getStatus(): 'running' | 'completed' | 'error';
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Implementation Approach
|
|
170
|
+
|
|
171
|
+
1. **Subagent Registry**: Define configs for each agent type
|
|
172
|
+
2. **Tool Filtering**: Restrict tools based on agent type
|
|
173
|
+
3. **Context Isolation**: Each subagent gets fresh context
|
|
174
|
+
4. **Result Aggregation**: Collect and format subagent results
|
|
175
|
+
5. **Background Execution**: Spawn async workers with output files
|
|
176
|
+
6. **Resume System**: Store agent state for continuation
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
// Subagent configurations
|
|
180
|
+
const SUBAGENT_CONFIGS: Record<SubagentType, SubagentConfig> = {
|
|
181
|
+
'Explore': {
|
|
182
|
+
type: 'Explore',
|
|
183
|
+
allowedTools: ['Read', 'Glob', 'Grep', 'LS'],
|
|
184
|
+
defaultModel: 'haiku',
|
|
185
|
+
systemPrompt: 'You are a codebase exploration specialist...',
|
|
186
|
+
maxTurns: 10
|
|
187
|
+
},
|
|
188
|
+
'Plan': {
|
|
189
|
+
type: 'Plan',
|
|
190
|
+
allowedTools: ['Read', 'Glob', 'Grep', 'LS', 'WebFetch'],
|
|
191
|
+
defaultModel: 'sonnet',
|
|
192
|
+
systemPrompt: 'You are a software architect designing solutions...',
|
|
193
|
+
maxTurns: 5
|
|
194
|
+
},
|
|
195
|
+
'Bash': {
|
|
196
|
+
type: 'Bash',
|
|
197
|
+
allowedTools: ['Bash', 'KillShell'],
|
|
198
|
+
defaultModel: 'haiku',
|
|
199
|
+
systemPrompt: 'You are a shell command specialist...',
|
|
200
|
+
maxTurns: 20
|
|
201
|
+
},
|
|
202
|
+
'general-purpose': {
|
|
203
|
+
type: 'general-purpose',
|
|
204
|
+
allowedTools: ['*'], // All tools
|
|
205
|
+
defaultModel: 'sonnet',
|
|
206
|
+
systemPrompt: 'You are a general-purpose coding assistant...',
|
|
207
|
+
maxTurns: 20
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### File Changes
|
|
213
|
+
|
|
214
|
+
| File | Action | Description |
|
|
215
|
+
|------|--------|-------------|
|
|
216
|
+
| `src/subagents/types.ts` | Create | Subagent type definitions |
|
|
217
|
+
| `src/subagents/task-tool.ts` | Create | Task tool implementation |
|
|
218
|
+
| `src/subagents/subagent.ts` | Create | Subagent class |
|
|
219
|
+
| `src/subagents/configs.ts` | Create | Subagent configurations |
|
|
220
|
+
| `src/subagents/background-runner.ts` | Create | Background execution |
|
|
221
|
+
| `src/subagents/index.ts` | Create | Module exports |
|
|
222
|
+
| `src/tools/index.ts` | Modify | Register Task tool |
|
|
223
|
+
| `src/agent/agent.ts` | Modify | Support tool filtering |
|
|
224
|
+
|
|
225
|
+
## User Experience
|
|
226
|
+
|
|
227
|
+
### Subagent Launch Display
|
|
228
|
+
```
|
|
229
|
+
Agent: I'll explore the codebase to understand the authentication system.
|
|
230
|
+
|
|
231
|
+
┌─ Launching Subagent ──────────────────────────┐
|
|
232
|
+
│ Type: Explore │
|
|
233
|
+
│ Task: Find auth error handling │
|
|
234
|
+
│ Model: haiku │
|
|
235
|
+
└───────────────────────────────────────────────┘
|
|
236
|
+
|
|
237
|
+
[Explore agent working...]
|
|
238
|
+
|
|
239
|
+
┌─ Subagent Result ─────────────────────────────┐
|
|
240
|
+
│ Found 3 relevant files: │
|
|
241
|
+
│ • src/auth/errors.ts (AuthError class) │
|
|
242
|
+
│ • src/middleware/auth.ts (error handler) │
|
|
243
|
+
│ • src/utils/auth-helpers.ts (validation) │
|
|
244
|
+
└───────────────────────────────────────────────┘
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Parallel Execution
|
|
248
|
+
```
|
|
249
|
+
Agent: I'll search for both authentication and authorization code.
|
|
250
|
+
[Launching 2 Explore agents in parallel...]
|
|
251
|
+
|
|
252
|
+
┌─ Agent 1: Auth ───────────────────────────────┐
|
|
253
|
+
│ Status: Completed │
|
|
254
|
+
│ Found: 5 files │
|
|
255
|
+
└───────────────────────────────────────────────┘
|
|
256
|
+
|
|
257
|
+
┌─ Agent 2: Authorization ──────────────────────┐
|
|
258
|
+
│ Status: Completed │
|
|
259
|
+
│ Found: 3 files │
|
|
260
|
+
└───────────────────────────────────────────────┘
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### Background Task
|
|
264
|
+
```
|
|
265
|
+
Agent: I'll start a long-running analysis in the background.
|
|
266
|
+
[Task running in background: agent-abc123]
|
|
267
|
+
|
|
268
|
+
You can continue working. Use /task-status abc123 to check progress.
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Alternatives Considered
|
|
272
|
+
|
|
273
|
+
### Alternative 1: Single Agent with Mode Switching
|
|
274
|
+
Switch modes instead of spawning agents.
|
|
275
|
+
|
|
276
|
+
**Pros**: Simpler, shared context
|
|
277
|
+
**Cons**: Context pollution, no parallelism
|
|
278
|
+
**Decision**: Rejected - Context isolation is key benefit
|
|
279
|
+
|
|
280
|
+
### Alternative 2: Process-Based Workers
|
|
281
|
+
Spawn actual OS processes.
|
|
282
|
+
|
|
283
|
+
**Pros**: True isolation, crash protection
|
|
284
|
+
**Cons**: Overhead, complexity, IPC
|
|
285
|
+
**Decision**: Rejected for initial implementation
|
|
286
|
+
|
|
287
|
+
### Alternative 3: Fixed Agent Types Only
|
|
288
|
+
No custom agent configurations.
|
|
289
|
+
|
|
290
|
+
**Pros**: Simpler
|
|
291
|
+
**Cons**: Less flexibility
|
|
292
|
+
**Decision**: Rejected - Custom agents enable future extensibility
|
|
293
|
+
|
|
294
|
+
## Security Considerations
|
|
295
|
+
|
|
296
|
+
1. **Tool Restrictions**: Strictly enforce tool allowlists
|
|
297
|
+
2. **Resource Limits**: Limit max turns and execution time
|
|
298
|
+
3. **Output Isolation**: Subagent can't access main context
|
|
299
|
+
4. **Permission Inheritance**: Subagents respect main permission settings
|
|
300
|
+
5. **Background Cleanup**: Clean up stale background tasks
|
|
301
|
+
|
|
302
|
+
## Testing Strategy
|
|
303
|
+
|
|
304
|
+
1. **Unit Tests**:
|
|
305
|
+
- Tool filtering logic
|
|
306
|
+
- Config validation
|
|
307
|
+
- Result formatting
|
|
308
|
+
|
|
309
|
+
2. **Integration Tests**:
|
|
310
|
+
- Subagent lifecycle
|
|
311
|
+
- Background execution
|
|
312
|
+
- Resume functionality
|
|
313
|
+
|
|
314
|
+
3. **Manual Testing**:
|
|
315
|
+
- Various agent types
|
|
316
|
+
- Parallel execution
|
|
317
|
+
- Complex multi-step tasks
|
|
318
|
+
|
|
319
|
+
## Migration Path
|
|
320
|
+
|
|
321
|
+
1. **Phase 1**: Core Explore and Plan agents
|
|
322
|
+
2. **Phase 2**: Bash agent and background execution
|
|
323
|
+
3. **Phase 3**: Resume capability
|
|
324
|
+
4. **Phase 4**: Custom agent definitions
|
|
325
|
+
5. **Phase 5**: Parallel execution optimization
|
|
326
|
+
|
|
327
|
+
No breaking changes to existing functionality.
|
|
328
|
+
|
|
329
|
+
## References
|
|
330
|
+
|
|
331
|
+
- [Claude Code Task Tool Documentation](https://code.claude.com/docs/en/tools)
|
|
332
|
+
- [Claude Code Subagent System](https://github.com/Piebald-AI/claude-code-system-prompts)
|
|
333
|
+
- [Understanding Claude Code Full Stack](https://alexop.dev/posts/understanding-claude-code-full-stack/)
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
# Proposal: Plan Mode
|
|
2
|
+
|
|
3
|
+
- **Proposal ID**: 0004
|
|
4
|
+
- **Author**: mycode team
|
|
5
|
+
- **Status**: Draft
|
|
6
|
+
- **Created**: 2025-01-15
|
|
7
|
+
- **Updated**: 2025-01-15
|
|
8
|
+
|
|
9
|
+
## Summary
|
|
10
|
+
|
|
11
|
+
Implement a Plan Mode that enables the agent to thoroughly explore and design implementation approaches before writing code. In plan mode, the agent can only read and explore (no edits), creates a structured plan file, and requires user approval before proceeding with implementation.
|
|
12
|
+
|
|
13
|
+
## Motivation
|
|
14
|
+
|
|
15
|
+
Currently, mycode jumps directly into implementation. This leads to:
|
|
16
|
+
|
|
17
|
+
1. **Wasted effort**: Implementing wrong approach requires redoing work
|
|
18
|
+
2. **Misalignment**: Agent's assumptions may not match user intent
|
|
19
|
+
3. **Poor architecture**: No time for design consideration
|
|
20
|
+
4. **Unexpected changes**: Users surprised by what gets modified
|
|
21
|
+
5. **No preview**: Can't review approach before execution
|
|
22
|
+
|
|
23
|
+
Plan mode enables careful design and user approval before changes.
|
|
24
|
+
|
|
25
|
+
## Claude Code Reference
|
|
26
|
+
|
|
27
|
+
Claude Code's Plan Mode provides structured planning workflow:
|
|
28
|
+
|
|
29
|
+
### Activation
|
|
30
|
+
```
|
|
31
|
+
User: /plan (or use EnterPlanMode tool)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Key Features
|
|
35
|
+
- Agent restricted to read-only tools (no Edit, Write, Bash writes)
|
|
36
|
+
- Structured plan written to plan file
|
|
37
|
+
- 5-phase workflow: Understanding → Design → Review → Final Plan → Exit
|
|
38
|
+
- User questions via AskUserQuestion tool
|
|
39
|
+
- Plan approval via ExitPlanMode tool
|
|
40
|
+
- Permission pre-requests for implementation
|
|
41
|
+
|
|
42
|
+
### Plan Mode Phases
|
|
43
|
+
1. **Initial Understanding**: Explore codebase, understand request
|
|
44
|
+
2. **Design**: Create implementation approach
|
|
45
|
+
3. **Review**: Verify alignment with user intent
|
|
46
|
+
4. **Final Plan**: Write concise plan to file
|
|
47
|
+
5. **Exit**: Call ExitPlanMode for approval
|
|
48
|
+
|
|
49
|
+
### Example Usage
|
|
50
|
+
```
|
|
51
|
+
User: /plan Add user authentication to the app
|
|
52
|
+
|
|
53
|
+
Agent: [Enters plan mode]
|
|
54
|
+
I'll explore the codebase to understand the current structure.
|
|
55
|
+
[Read, Glob, Grep - exploration]
|
|
56
|
+
|
|
57
|
+
Based on my exploration, I have a question:
|
|
58
|
+
[AskUserQuestion: Which auth method? OAuth/JWT/Session]
|
|
59
|
+
|
|
60
|
+
User: JWT
|
|
61
|
+
|
|
62
|
+
Agent: [Writes plan to .claude/plans/xxx.md]
|
|
63
|
+
|
|
64
|
+
## Authentication Implementation Plan
|
|
65
|
+
|
|
66
|
+
### Approach
|
|
67
|
+
- Add JWT-based authentication
|
|
68
|
+
- Create auth middleware
|
|
69
|
+
- Add login/logout endpoints
|
|
70
|
+
|
|
71
|
+
### Files to Modify
|
|
72
|
+
- src/middleware/auth.ts (create)
|
|
73
|
+
- src/routes/auth.ts (create)
|
|
74
|
+
- src/models/user.ts (modify)
|
|
75
|
+
|
|
76
|
+
### Verification
|
|
77
|
+
- Run test suite
|
|
78
|
+
- Manual login/logout test
|
|
79
|
+
|
|
80
|
+
[ExitPlanMode]
|
|
81
|
+
|
|
82
|
+
User: [Reviews and approves plan]
|
|
83
|
+
|
|
84
|
+
Agent: [Exits plan mode, begins implementation]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Detailed Design
|
|
88
|
+
|
|
89
|
+
### API Design
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
// src/planning/types.ts
|
|
93
|
+
interface PlanModeState {
|
|
94
|
+
active: boolean;
|
|
95
|
+
planFile: string;
|
|
96
|
+
phase: 'understanding' | 'design' | 'review' | 'final' | 'approval';
|
|
97
|
+
explorationResults: ExplorationResult[];
|
|
98
|
+
userAnswers: Record<string, string>;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
interface PlanFile {
|
|
102
|
+
id: string;
|
|
103
|
+
title: string;
|
|
104
|
+
createdAt: Date;
|
|
105
|
+
approach: string;
|
|
106
|
+
files: FileChange[];
|
|
107
|
+
verification: string[];
|
|
108
|
+
permissions: PermissionRequest[];
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
interface FileChange {
|
|
112
|
+
path: string;
|
|
113
|
+
action: 'create' | 'modify' | 'delete';
|
|
114
|
+
description: string;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface PermissionRequest {
|
|
118
|
+
tool: 'Bash';
|
|
119
|
+
prompt: string; // e.g., "run tests", "install dependencies"
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// src/planning/enter-plan-mode-tool.ts
|
|
125
|
+
const enterPlanModeTool: Tool<{}> = {
|
|
126
|
+
name: 'EnterPlanMode',
|
|
127
|
+
description: `Enter plan mode for non-trivial implementation tasks.
|
|
128
|
+
|
|
129
|
+
Use plan mode when:
|
|
130
|
+
- New feature implementation
|
|
131
|
+
- Multiple valid approaches exist
|
|
132
|
+
- Code modifications affect existing behavior
|
|
133
|
+
- Architectural decisions required
|
|
134
|
+
- Multi-file changes expected
|
|
135
|
+
- Requirements are unclear
|
|
136
|
+
|
|
137
|
+
Skip plan mode for:
|
|
138
|
+
- Single-line fixes
|
|
139
|
+
- Trivial changes
|
|
140
|
+
- Specific, detailed instructions given
|
|
141
|
+
`,
|
|
142
|
+
parameters: z.object({}),
|
|
143
|
+
execute: async (input, context) => { ... }
|
|
144
|
+
};
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
// src/planning/exit-plan-mode-tool.ts
|
|
149
|
+
const exitPlanModeTool: Tool<ExitPlanModeInput> = {
|
|
150
|
+
name: 'ExitPlanMode',
|
|
151
|
+
description: `Exit plan mode and request user approval.
|
|
152
|
+
|
|
153
|
+
Call this when:
|
|
154
|
+
- Plan is complete and written to plan file
|
|
155
|
+
- Ready for user to review and approve
|
|
156
|
+
|
|
157
|
+
Include allowedPrompts to request permissions needed for implementation.
|
|
158
|
+
`,
|
|
159
|
+
parameters: z.object({
|
|
160
|
+
allowedPrompts: z.array(z.object({
|
|
161
|
+
tool: z.literal('Bash'),
|
|
162
|
+
prompt: z.string()
|
|
163
|
+
})).optional()
|
|
164
|
+
}),
|
|
165
|
+
execute: async (input, context) => { ... }
|
|
166
|
+
};
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Implementation Approach
|
|
170
|
+
|
|
171
|
+
1. **Mode Management**: Track plan mode state in session
|
|
172
|
+
2. **Tool Filtering**: In plan mode, only allow read tools + plan file write
|
|
173
|
+
3. **Plan File**: Create structured plan at `.mycode/plans/<id>.md`
|
|
174
|
+
4. **Phase Tracking**: Guide agent through planning phases
|
|
175
|
+
5. **Approval Flow**: Present plan for user approval
|
|
176
|
+
6. **Permission Pre-auth**: Allow requesting bash permissions upfront
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
// Plan mode tool filtering
|
|
180
|
+
const PLAN_MODE_ALLOWED_TOOLS = [
|
|
181
|
+
'Read',
|
|
182
|
+
'Glob',
|
|
183
|
+
'Grep',
|
|
184
|
+
'LS',
|
|
185
|
+
'WebFetch',
|
|
186
|
+
'WebSearch',
|
|
187
|
+
'Task', // For Explore/Plan subagents
|
|
188
|
+
'AskUserQuestion',
|
|
189
|
+
'TodoWrite',
|
|
190
|
+
'EnterPlanMode',
|
|
191
|
+
'ExitPlanMode',
|
|
192
|
+
'Write' // Only for plan file
|
|
193
|
+
];
|
|
194
|
+
|
|
195
|
+
function filterToolsForPlanMode(tools: Tool[], planFile: string): Tool[] {
|
|
196
|
+
return tools.filter(tool => {
|
|
197
|
+
if (PLAN_MODE_ALLOWED_TOOLS.includes(tool.name)) {
|
|
198
|
+
if (tool.name === 'Write') {
|
|
199
|
+
// Only allow writing to plan file
|
|
200
|
+
return (input) => input.file_path === planFile;
|
|
201
|
+
}
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
return false;
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### File Changes
|
|
210
|
+
|
|
211
|
+
| File | Action | Description |
|
|
212
|
+
|------|--------|-------------|
|
|
213
|
+
| `src/planning/types.ts` | Create | Plan mode type definitions |
|
|
214
|
+
| `src/planning/plan-manager.ts` | Create | Plan mode state management |
|
|
215
|
+
| `src/planning/enter-plan-mode-tool.ts` | Create | EnterPlanMode tool |
|
|
216
|
+
| `src/planning/exit-plan-mode-tool.ts` | Create | ExitPlanMode tool |
|
|
217
|
+
| `src/planning/plan-file.ts` | Create | Plan file read/write |
|
|
218
|
+
| `src/planning/index.ts` | Create | Module exports |
|
|
219
|
+
| `src/agent/agent.ts` | Modify | Plan mode integration |
|
|
220
|
+
| `src/tools/index.ts` | Modify | Register plan tools |
|
|
221
|
+
|
|
222
|
+
## User Experience
|
|
223
|
+
|
|
224
|
+
### Entering Plan Mode
|
|
225
|
+
```
|
|
226
|
+
User: Help me implement user authentication
|
|
227
|
+
|
|
228
|
+
Agent: This is a non-trivial task. I'll enter plan mode to design the approach.
|
|
229
|
+
|
|
230
|
+
┌─ Plan Mode Active ────────────────────────────┐
|
|
231
|
+
│ Read-only exploration enabled │
|
|
232
|
+
│ Plan file: .mycode/plans/auth-impl.md │
|
|
233
|
+
│ │
|
|
234
|
+
│ Phase 1/5: Understanding │
|
|
235
|
+
└───────────────────────────────────────────────┘
|
|
236
|
+
|
|
237
|
+
Let me explore the current codebase structure...
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Plan Display
|
|
241
|
+
```
|
|
242
|
+
┌─ Implementation Plan ─────────────────────────┐
|
|
243
|
+
│ │
|
|
244
|
+
│ ## JWT Authentication │
|
|
245
|
+
│ │
|
|
246
|
+
│ ### Approach │
|
|
247
|
+
│ - Add JWT token generation and validation │
|
|
248
|
+
│ - Create auth middleware for protected routes│
|
|
249
|
+
│ - Add user registration and login endpoints │
|
|
250
|
+
│ │
|
|
251
|
+
│ ### Files to Change │
|
|
252
|
+
│ + src/middleware/auth.ts (create) │
|
|
253
|
+
│ + src/routes/auth.ts (create) │
|
|
254
|
+
│ ~ src/models/user.ts (modify) │
|
|
255
|
+
│ ~ src/app.ts (modify) │
|
|
256
|
+
│ │
|
|
257
|
+
│ ### Verification │
|
|
258
|
+
│ - npm test │
|
|
259
|
+
│ - Manual login flow test │
|
|
260
|
+
│ │
|
|
261
|
+
└───────────────────────────────────────────────┘
|
|
262
|
+
|
|
263
|
+
Ready to proceed? [Approve] [Modify] [Cancel]
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Plan Approval
|
|
267
|
+
```
|
|
268
|
+
User: [Approves plan]
|
|
269
|
+
|
|
270
|
+
Agent: Plan approved. Exiting plan mode and beginning implementation.
|
|
271
|
+
|
|
272
|
+
┌─ Implementation Started ──────────────────────┐
|
|
273
|
+
│ Following plan: .mycode/plans/auth-impl.md │
|
|
274
|
+
│ Pre-approved: npm test, npm install │
|
|
275
|
+
└───────────────────────────────────────────────┘
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Alternatives Considered
|
|
279
|
+
|
|
280
|
+
### Alternative 1: Inline Planning
|
|
281
|
+
Plan in regular output without special mode.
|
|
282
|
+
|
|
283
|
+
**Pros**: Simpler
|
|
284
|
+
**Cons**: No enforcement, easy to skip, no approval gate
|
|
285
|
+
**Decision**: Rejected - Mode provides structure and safety
|
|
286
|
+
|
|
287
|
+
### Alternative 2: Mandatory Planning
|
|
288
|
+
Always require plan mode for changes.
|
|
289
|
+
|
|
290
|
+
**Pros**: Maximum safety
|
|
291
|
+
**Cons**: Overhead for simple tasks
|
|
292
|
+
**Decision**: Rejected - Optional with agent judgment is better
|
|
293
|
+
|
|
294
|
+
### Alternative 3: External Plan Files
|
|
295
|
+
Store plans outside project.
|
|
296
|
+
|
|
297
|
+
**Pros**: No project pollution
|
|
298
|
+
**Cons**: Harder to track, no version control
|
|
299
|
+
**Decision**: Rejected - Project plans are versioned with project
|
|
300
|
+
|
|
301
|
+
## Security Considerations
|
|
302
|
+
|
|
303
|
+
1. **Tool Restrictions**: Strictly enforce read-only in plan mode
|
|
304
|
+
2. **Plan File Location**: Only allow writing to designated plan directory
|
|
305
|
+
3. **Permission Scope**: Pre-approved permissions are scoped and temporary
|
|
306
|
+
4. **Plan Review**: User must explicitly approve before implementation
|
|
307
|
+
|
|
308
|
+
## Testing Strategy
|
|
309
|
+
|
|
310
|
+
1. **Unit Tests**:
|
|
311
|
+
- Mode state management
|
|
312
|
+
- Tool filtering
|
|
313
|
+
- Plan file formatting
|
|
314
|
+
|
|
315
|
+
2. **Integration Tests**:
|
|
316
|
+
- Enter/exit flow
|
|
317
|
+
- Tool restriction enforcement
|
|
318
|
+
- Approval workflow
|
|
319
|
+
|
|
320
|
+
3. **Manual Testing**:
|
|
321
|
+
- Various planning scenarios
|
|
322
|
+
- Phase transitions
|
|
323
|
+
- Plan file quality
|
|
324
|
+
|
|
325
|
+
## Migration Path
|
|
326
|
+
|
|
327
|
+
1. **Phase 1**: Basic plan mode with tool restrictions
|
|
328
|
+
2. **Phase 2**: Plan file structure and writing
|
|
329
|
+
3. **Phase 3**: User approval flow
|
|
330
|
+
4. **Phase 4**: Permission pre-authorization
|
|
331
|
+
5. **Phase 5**: Phase guidance and agent prompting
|
|
332
|
+
|
|
333
|
+
No breaking changes to existing functionality.
|
|
334
|
+
|
|
335
|
+
## References
|
|
336
|
+
|
|
337
|
+
- [Claude Code Plan Mode Documentation](https://code.claude.com/docs/en/planning)
|
|
338
|
+
- [Claude Code Best Practices - Explore, Plan, Code](https://www.anthropic.com/engineering/claude-code-best-practices)
|