UNPKG

claude-flow-novice

Version:

Claude Flow Novice - Advanced orchestration platform for multi-agent AI workflows with CFN Loop architecture Includes Local RuVector Accelerator and all CFN skills for complete functionality.

439 lines (336 loc) 10.5 kB
# BUG #13: CLI-Spawned Agents Don't Receive Tools **Date Discovered:** 2025-10-21 **Severity:** CRITICAL (explains BUG #12 - zero deliverables) **Status:** 🔍 INVESTIGATING **Related:** BUG #12 (consensus on vapor), Sprint 4.1 (checkpoint state failure) --- ## Summary CLI-spawned agents have tools defined in their markdown and referenced in system prompts, but tools are never passed to the Anthropic API, making them unavailable for actual use. **Impact:** Agents cannot use Write, Read, Edit, or Bash tools Cannot create files Zero deliverables --- ## Evidence Trail ### 1. Tools Defined in Agent Markdown ✅ **File:** `.claude/agents/development/backend-dev.md` **Lines:** 1-5 ```yaml --- name: backend-dev tools: [Read, Write, Edit, Bash, TodoWrite] model: haiku type: specialist --- ``` **Status:** Tools successfully defined --- ### 2. Tools Parsed from YAML ✅ **File:** `src/cli/agent-definition-parser.ts` **Line:** 196 ```typescript tools: Array.isArray(frontmatter.tools) ? frontmatter.tools : [] ``` **Test:** ```bash npx claude-flow-novice agent backend-dev --list # Output: ✓ Tools: Read, Write, Edit, Bash, TodoWrite ``` **Status:** Tools successfully parsed --- ### 3. Tools Logged in CLI ✅ **File:** `src/cli/agent-command.ts` **Line:** 146 ```typescript console.log(` Tools: ${definition.tools.join(', ')}`); ``` **Actual Output:** ``` [1/3] Parsing agent definition... ✓ Found: backend-dev ✓ Type: specialist ✓ Model: haiku ✓ Tools: Read, Write, Edit, Bash, TodoWrite ✅ ``` **Status:** Tools successfully logged --- ### 4. Tools Included in System Prompt ✅ **File:** `src/cli/cli-agent-context.ts` **Function:** `buildCLIAgentSystemPrompt()` System prompt includes agent markdown template which contains: ```yaml tools: [Read, Write, Edit, Bash, TodoWrite] ``` **Result:** Agent THINKS it has access to these tools --- ### 5. Tools NOT Passed to executeAgentAPI ❌ **File:** `src/cli/agent-executor.ts` **Lines:** 247-254 ```typescript const result = await executeAgentAPI( definition.name, agentId, definition.model, prompt, systemPrompt, messages.length > 1 ? messages : undefined ); // NO tools parameter! ``` **Bug:** `definition.tools` is NOT passed to `executeAgentAPI()` --- ### 6. executeAgentAPI Signature Missing Tools Parameter ❌ **File:** `src/cli/anthropic-client.ts` **Lines:** 292-299 ```typescript export async function executeAgentAPI( agentType: string, agentId: string, model: string, prompt: string, systemPrompt?: string, messages?: Array<{ role: string; content: string }>, maxTokens?: number ): Promise<{ success: boolean; output: string; usage: any; error?: string }> { // No tools parameter in signature! ``` **Bug:** Function signature doesn't accept tools --- ### 7. Tools NOT Passed to sendMessage ❌ **File:** `src/cli/anthropic-client.ts` **Lines:** 327-341 ```typescript const response = await sendMessage( { model, prompt, systemPrompt, stream: true, messages, maxTokens, // NO tools property! }, (chunk) => { process.stdout.write(chunk); fullOutput += chunk; } ); ``` **Bug:** `sendMessage()` options don't include tools --- ### 8. sendMessage SUPPORTS Tools But Never Receives Them ⚠️ **File:** `src/cli/anthropic-client.ts` **Lines:** 204-206 ```typescript if (options.tools && options.tools.length > 0) { requestParams.tools = options.tools; // This code is never reached! } ``` **Finding:** The infrastructure exists but is never used --- ## Root Cause Analysis **Flow Comparison:** **Working (Task Tool Agents):** ``` Main Chat Task tool Claude Code runtime Agent with tools provided by runtime Tools work ``` **Broken (CLI-Spawned Agents):** ``` Coordinator npx claude-flow-novice agent backend-dev agent-command.ts parses tools: [Read, Write, Edit, Bash] agent-executor.ts DOESN'T pass tools to executeAgentAPI anthropic-client.ts DOESN'T pass tools to sendMessage Anthropic API DOESN'T receive tools Agent tries to use Write tool FAILS Zero files created BUG #12 ``` --- ## Impact Analysis ### Affected Features - **CFN Loop file creation tasks** (Loop 3 agents can't use Write tool) - **Skill implementation** (Sprint 4.1 checkpoint state - zero deliverables) - **Code generation** (agents analyze but don't write files) - **Test creation** (agents plan but don't create test files) ### Successful Workarounds - **Analysis tasks** (text-only responses work) - **Reviews** (reading git diffs works via system prompt context) - **Planning** (architectural designs don't need file writes) ### Why This Went Unnoticed 1. **Agent markdown includes tools** Looks correct in code review 2. **CLI logs tools successfully** Appears to be working 3. **System prompt mentions tools** Agents believe they have access 4. **Agents report high confidence** Believe task is complete 5. **No error messages** Silent failure (agent just doesn't use tools) --- ## Required Fixes ### Fix 1: Add Tools Parameter to executeAgentAPI ✅ (Draft) **File:** `src/cli/anthropic-client.ts` **Line:** 299 (after maxTokens parameter) ```typescript export async function executeAgentAPI( agentType: string, agentId: string, model: string, prompt: string, systemPrompt?: string, messages?: Array<{ role: string; content: string }>, maxTokens?: number, tools?: any[] // ADD THIS ): Promise<{ success: boolean; output: string; usage: any; error?: string }> { ``` --- ### Fix 2: Pass Tools to sendMessage ✅ (Draft) **File:** `src/cli/anthropic-client.ts` **Lines:** 327-341 ```typescript const response = await sendMessage( { model, prompt, systemPrompt, stream: true, messages, maxTokens, tools, // ADD THIS }, (chunk) => { process.stdout.write(chunk); fullOutput += chunk; } ); ``` --- ### Fix 3: Pass definition.tools from agent-executor ✅ (Draft) **File:** `src/cli/agent-executor.ts` **Lines:** 247-254 ```typescript const result = await executeAgentAPI( definition.name, agentId, definition.model, prompt, systemPrompt, messages.length > 1 ? messages : undefined, undefined, // maxTokens (use default) definition.tools // ADD THIS ); ``` --- ## Critical Question: What IS definition.tools? **Current Value:** `['Read', 'Write', 'Edit', 'Bash', 'TodoWrite']` **Anthropic API Expects:** ```typescript tools: Array<{ name: string; description: string; input_schema: { type: 'object'; properties: Record<string, any>; required: string[]; }; }> ``` **Problem:** We have tool NAMES, not tool DEFINITIONS. --- ## Architecture Decision Required ### Option 1: Implement Tool Conversion Layer Convert tool names Anthropic tool definitions: ```typescript // src/cli/tool-definitions.ts export function convertToolNames(toolNames: string[]): any[] { const toolRegistry: Record<string, any> = { 'Read': { name: 'Read', description: 'Read file contents', input_schema: { type: 'object', properties: { file_path: { type: 'string', description: 'Absolute path to file' } }, required: ['file_path'] } }, 'Write': { /* ... */ }, 'Edit': { /* ... */ }, 'Bash': { /* ... */ }, 'TodoWrite': { /* ... */ } }; return toolNames.map(name => toolRegistry[name]).filter(Boolean); } ``` **Pros:** - Tools actually work - Matches Task tool behavior - Fixes BUG #12 **Cons:** - Requires tool definition maintenance - Tool execution layer needed (how to actually run tools?) - May duplicate Claude Code runtime logic --- ### Option 2: Remove Tools from CLI Agents CLI agents are text-only: ```yaml --- name: backend-dev tools: [] # No tools for CLI agents model: haiku type: specialist --- ``` **Pros:** - Simple, no new code needed - Clear separation: Task=tools, CLI=text-only **Cons:** - CLI agents can't create files - CFN Loop can't implement features - Defeats purpose of autonomous execution --- ### Option 3: Hybrid Approach (RECOMMENDED) **Strategy:** 1. Keep coordinator agents spawned via Task tool (have full tools) 2. CLI-spawned agents are text-only (analysis, planning, review) 3. Coordinator creates files based on CLI agent output **Pattern:** ``` Main Chat Task(coordinator) [HAS TOOLS] Coordinator spawns analysts via CLI [NO TOOLS] Analysts return bash command strings Coordinator executes commands using its Bash tool [HAS TOOLS] Files created ``` **Pros:** - Works with current architecture - No tool definition duplication - Coordinators control file creation (safer) **Cons:** - Agents output bash/code as text (not files directly) - Coordinator must parse and execute - Extra coordination layer --- ## Immediate Next Steps 1. ⚠️ **Document pattern**: CLI agents output bash commands as text 2. ⚠️ **Update agent markdown**: Remove tools from CLI agent templates OR clarify text-only 3. ⚠️ **Update orchestrator**: Parse agent output for bash commands, execute via coordinator 4. ⚠️ **Test**: Sprint 4.1 with hybrid pattern --- ## Related Documentation - **BUG #12:** `docs/BUG_12_CONSENSUS_ON_VAPOR.md` - Zero deliverables despite high confidence - **Agent Markdown:** `.claude/agents/development/backend-dev.md` - Tool definitions - **CLI Spawning:** `src/cli/agent-executor.ts` - Execution flow - **Anthropic Client:** `src/cli/anthropic-client.ts` - API integration --- **Date Documented:** 2025-10-21 **Session:** Sprint 4.1 Tool Investigation **Discovery Method:** Code tracing from BUG #12 root cause analysis **Conclusion:** CLI agents are currently TEXT-ONLY. Tools defined but not passed to API.