UNPKG

claude-flow-novice

Version:

Claude Flow Novice - Advanced orchestration platform for multi-agent AI workflows with CFN Loop architecture Includes CodeSearch (hybrid SQLite + pgvector), mem0/memgraph specialists, and all CFN skills.

296 lines (234 loc) 8.65 kB
--- description: "Execute CFN Loop with fully containerized coordinator using Docker-in-Docker (native container mode)" argument-hint: "[task-description] --mode=mvp|standard|enterprise" allowed-tools: ["Bash", "Read"] --- # CFN Docker Loop - Native Container Mode Execute CFN Loop with coordinator running as a Docker container (Docker-in-Docker). **Task Description:** $ARGUMENTS ## Overview This command runs the CFN Docker v3 coordinator in a container instead of via Task() tool. **Benefits:** - ✅ Consistent execution model (coordinator + workers all containerized) - ✅ Resource isolation for coordinator - ✅ Can use cheaper models via custom routing - ✅ Portable across environments (CI/CD friendly) - ✅ Planning phase fully integrated **Architecture:** ``` Main Chat (docker run) ↓ cfn-coordinator:v3 (Docker container) ↓ orchestrate.sh ↓ spawn-agent.sh Worker Agents (Docker containers) ``` ## Execution Steps ### Step 1: Parse Arguments and Set Defaults ```bash # Extract task description TASK_DESCRIPTION="$ARGUMENTS" # Generate unique task ID TASK_ID="task-$(date +%s)-$$" # Parse mode from arguments (default: standard) if [[ "$ARGUMENTS" =~ --mode=([a-z]+) ]]; then MODE="${BASH_REMATCH[1]}" else MODE="standard" fi echo "🚀 CFN Docker Loop - Native Container Mode" echo " Task ID: ${TASK_ID}" echo " Mode: ${MODE}" echo " Description: ${TASK_DESCRIPTION}" ``` ### Step 2: Ensure Redis is Running ```bash # Check if Redis container exists if ! docker ps | grep -q cfn-redis; then echo "📦 Starting Redis service..." docker-compose up -d redis sleep 3 # Verify Redis is responding if ! docker exec cfn-redis redis-cli ping > /dev/null 2>&1; then echo "❌ Redis failed to start" exit 1 fi echo "✅ Redis started successfully" else echo "✅ Redis already running" fi ``` ### Step 3: Build Coordinator Image (if needed) ```bash # Check if coordinator image exists if ! docker images | grep -q "cfn-coordinator.*v3"; then echo "🔨 Building CFN coordinator image..." docker build -f docker/Dockerfile.coordinator -t cfn-coordinator:v3 . if [[ $? -ne 0 ]]; then echo "❌ Failed to build coordinator image" exit 1 fi echo "✅ Coordinator image built" else echo "✅ Coordinator image exists" fi ``` ### Step 4: Spawn Coordinator Container ```bash echo "🐳 Spawning coordinator container..." docker run --rm \ --name "cfn-coordinator-${TASK_ID}" \ --network mcp-network \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "$(pwd):/app/codebase:ro" \ --volume /tmp:/tmp \ --env ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY}" \ --env CFN_REDIS_HOST=cfn-redis \ --env CFN_REDIS_PORT=6379 \ --env TASK_ID="${TASK_ID}" \ --env MODE="${MODE}" \ --env TASK_DESCRIPTION="${TASK_DESCRIPTION}" \ --env MEMORY_LIMIT="${MEMORY_LIMIT:-1g}" \ --env MAX_ITERATIONS="${MAX_ITERATIONS:-10}" \ --env GATE_THRESHOLD="${GATE_THRESHOLD:-0.75}" \ --env CONSENSUS_THRESHOLD="${CONSENSUS_THRESHOLD:-0.90}" \ --env NETWORK="mcp-network" \ --env CFN_CUSTOM_ROUTING="${CFN_CUSTOM_ROUTING:-false}" \ --env ZAI_API_KEY="${ZAI_API_KEY:-}" \ cfn-coordinator:v3 COORDINATOR_EXIT_CODE=$? ``` ### Step 5: Report Results ```bash echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" if [[ $COORDINATOR_EXIT_CODE -eq 0 ]]; then echo "✅ CFN Loop execution completed successfully" echo " Task ID: ${TASK_ID}" echo " Mode: ${MODE}" # Check for planning artifacts if [[ -f "/tmp/cfn-docker-plan-${TASK_ID}.json" ]]; then ATOMIC_TASKS=$(jq -r '.atomic_tasks | length' "/tmp/cfn-docker-plan-${TASK_ID}.json" 2>/dev/null || echo "unknown") echo " Atomic Tasks: ${ATOMIC_TASKS}" fi # Check Redis for task state echo "" echo "📊 Task state stored in Redis:" echo " redis-cli HGETALL cfn_docker:task:${TASK_ID}" else echo "❌ CFN Loop execution failed" echo " Exit code: ${COORDINATOR_EXIT_CODE}" echo " Task ID: ${TASK_ID}" echo "" echo "🔍 Debug steps:" echo " 1. Check Redis: redis-cli HGETALL cfn_docker:task:${TASK_ID}" echo " 2. Check planning file: cat /tmp/cfn-docker-plan-${TASK_ID}.json" echo " 3. Check logs: docker logs cfn-coordinator-${TASK_ID} (if still running)" fi echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" ``` ## Environment Variables ### Required ```bash ANTHROPIC_API_KEY # API key for LLM calls (coordinator planning) ``` ### Optional Configuration ```bash MODE=standard # mvp|standard|enterprise MEMORY_LIMIT=1g # Worker agent memory limit MAX_ITERATIONS=10 # Maximum CFN Loop iterations GATE_THRESHOLD=0.75 # Loop 3 self-validation threshold CONSENSUS_THRESHOLD=0.90 # Loop 2 validator consensus threshold ``` ### Optional Custom Routing ```bash CFN_CUSTOM_ROUTING=true # Enable Z.ai routing ZAI_API_KEY=xxx # Z.ai API key ZAI_MODEL=glm-4.6 # Model for workers ``` ## Examples ### Basic Usage ```bash /cfn-docker-native "Implement user authentication system" ``` ### With Mode Selection ```bash /cfn-docker-native "Build responsive dashboard UI" --mode=enterprise ``` ### With Custom Routing (Cost Optimization) ```bash export CFN_CUSTOM_ROUTING=true export ZAI_API_KEY="your-zai-key" /cfn-docker-native "Optimize database queries" ``` ### For CI/CD ```bash # In CI pipeline export ANTHROPIC_API_KEY="${SECRETS_ANTHROPIC_KEY}" /cfn-docker-native "Deploy to staging environment" --mode=standard ``` ## Comparison: Native vs Task Mode | Aspect | Task Mode | Native Mode | |--------|-----------|-------------| | **Coordinator** | Task() tool (Main Chat context) | Docker container | | **Visibility** | Full (logs in Main Chat) | Reduced (docker logs) | | **Resource Isolation** | None | Full (memory limits) | | **Cost Optimization** | Standard | Can use cheaper models | | **CI/CD Friendly** | No | Yes | | **Debugging** | Easy | Moderate | | **Portability** | Requires Claude Code | Any Docker environment | | **Planning Phase** | ✅ Works | ✅ Works (via /tmp mount) | ## Troubleshooting ### Coordinator Container Won't Start ```bash # Check if image exists docker images | grep cfn-coordinator # Rebuild if needed docker build -f Dockerfile.cfn-coordinator -t cfn-coordinator:v3 . # Check Docker socket permissions ls -la /var/run/docker.sock ``` ### Planning File Not Generated ```bash # Check planning file ls -la /tmp/cfn-docker-plan-*.json # Check coordinator logs docker logs cfn-coordinator-${TASK_ID} # Verify coordinator can write to /tmp docker run --rm -v /tmp:/tmp cfn-coordinator:v3 /bin/sh -c "touch /tmp/test && rm /tmp/test" ``` ### Workers Not Spawning ```bash # Check if coordinator can access Docker docker run --rm -v /var/run/docker.sock:/var/run/docker.sock cfn-coordinator:v3 /bin/sh -c "docker ps" # Check network exists docker network ls | grep mcp-network # Create network if needed docker network create mcp-network ``` ### Redis Connection Issues ```bash # Check Redis status docker ps | grep cfn-redis # Test connection from coordinator network docker run --rm --network mcp-network redis:7-alpine redis-cli -h cfn-redis ping ``` ## Notes - **Docker-in-Docker:** Coordinator mounts `/var/run/docker.sock` to spawn workers - **Codebase Access:** Mounted read-only at `/app/codebase` for orchestrate.sh - **Planning Files:** Shared via `/tmp` volume mount - **Network:** All containers (coordinator + workers + Redis) use `mcp-network` - **Auto-cleanup:** Coordinator container removes itself on exit (--rm flag) ## When to Use This Command **Use Native Mode When:** - Running in CI/CD pipelines - Want full resource isolation - Testing Docker-in-Docker setup - Cost optimization with custom routing - Need portable execution environment **Use Task Mode When:** - Developing/debugging coordinator logic - Want full visibility into execution - Need immediate log access - Rapid iteration on planning phase Both modes use the same planning phase implementation and produce identical results.