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.

390 lines (296 loc) 10.1 kB
# Redis Key Patterns for CFN Loop Coordination ## Execution Mode Separation (v2.14.28) ### Task Mode (No Redis Coordination) - Spawns agents via Task tool directly - No Redis protocols or coordination - Simple completion: structured output to Main Chat - Memory safe: prevents connection storms ### CLI Mode (Redis Coordination) - Spawns agents via CLI with coordinator - Redis-based coordination and messaging - Background execution with swarm recovery - Custom provider routing with model translation ## Standard Key Patterns (v2.14.6) ### Agent Completion **Pattern**: `swarm:${TASK_ID}:${AGENT_ID}:done` **Purpose**: Signal agent work completion **Usage**: ```bash # Signal completion redis-cli LPUSH "swarm:${TASK_ID}:${AGENT_ID}:done" "complete" # Wait for completion (blocking) redis-cli BLPOP "swarm:${TASK_ID}:${AGENT_ID}:done" 0 ``` ### Confidence Reporting **Pattern**: `swarm:${TASK_ID}:${AGENT_ID}:confidence` **Purpose**: Report agent confidence score **Usage**: ```bash # Store confidence (hash-based) redis-cli HSET "swarm:${TASK_ID}:${AGENT_ID}:result" "confidence" "0.85" # Store confidence (list-based) redis-cli LPUSH "swarm:${TASK_ID}:confidence" "0.85" ``` ### Product Owner Decision **Pattern**: `swarm:${TASK_ID}:decision` **Purpose**: Store Product Owner decision (PROCEED/ITERATE/ABORT) **Implementation**: `.claude/skills/cfn-product-owner-decision/execute-decision.sh` **Usage**: ```bash # Store decision with TTL (1 hour) redis-cli SET "swarm:${TASK_ID}:decision" "PROCEED" EX 3600 # Check existence redis-cli EXISTS "swarm:${TASK_ID}:decision" # Get decision redis-cli GET "swarm:${TASK_ID}:decision" ``` **Note**: Task-level key (NOT agent-scoped) ### Gate Check **Patterns**: - `swarm:${TASK_ID}:gate-passed` - `swarm:${TASK_ID}:gate-failed` **Purpose**: Signal Loop 3 self-validation result **Usage**: ```bash # Signal gate passed redis-cli LPUSH "swarm:${TASK_ID}:gate-passed" "1" # Signal gate failed (iterate) redis-cli LPUSH "swarm:${TASK_ID}:gate-failed" "1" # Loop 2 waits for gate pass (blocking) redis-cli BLPOP "swarm:${TASK_ID}:gate-passed" 0 ``` ### Loop 2 Consensus **Pattern**: `swarm:${TASK_ID}:loop2:consensus` **Purpose**: Store validator consensus score **Usage**: ```bash # Store consensus redis-cli SET "swarm:${TASK_ID}:loop2:consensus" "0.93" # Retrieve redis-cli GET "swarm:${TASK_ID}:loop2:consensus" ``` ### Metrics (Global) **Patterns**: - `swarm:metrics:decisions:proceed` - `swarm:metrics:decisions:iterate` - `swarm:metrics:decisions:abort` **Purpose**: Global decision tracking (NOT task-scoped) **Usage**: ```bash # Increment decision counter redis-cli INCR "swarm:metrics:decisions:proceed" # Get total proceeds redis-cli GET "swarm:metrics:decisions:proceed" ``` ## Validation and Consistency ### Automated Validator **Script**: `.claude/skills/cfn-test-runner/validate-redis-keys.sh` **Checks**: - Anti-pattern detection (non-standard keys) - Product Owner key validation - Namespace consistency (swarm: prefix) - TTL enforcement **Usage**: ```bash # Run validator ./.claude/skills/cfn-test-runner/validate-redis-keys.sh # Exit codes: # 0 = PASS # 1 = FAIL (violations found) ``` ### Audit Results **Documentation**: `docs/REDIS_KEY_CONSISTENCY_AUDIT.md` **Findings** (3 independent agents): - Overall confidence: 0.92 (High) - Consistency: 90%+ adherence - Minor inconsistencies: 1 documentation file **Standard compliance**: 95%+ for runtime patterns ## Feedback and Validation Keys ### `swarm:${TASK_ID}:feedback:history` **Purpose**: Accumulate iteration-level feedback across CFN Loop **Schema**: ```json [ { "iteration": 0, "source": "string", "feedback": "string", "timestamp": "ISO8601 timestamp" } ] ``` **Configuration**: - Type: JSON array - TTL: 86400 seconds (24 hours) - Max entries: 50 **Redis CLI Access**: ```bash # Store feedback redis-cli lpush swarm:task-123:feedback:history '{"iteration": 1, "source": "validator", "feedback": "Requires refactoring", "timestamp": "2025-10-21T12:34:56Z"}' # Retrieve feedback history redis-cli lrange swarm:task-123:feedback:history 0 -1 ``` ### `swarm:${TASK_ID}:validator:history` **Purpose**: Record structured validator feedback for iterative refinement **Schema**: ```json [ { "iteration": 0, "severity": "CRITICAL|WARNING|SUGGESTION", "issue": "string", "suggestion": "string", "timestamp": "ISO8601 timestamp" } ] ``` **Configuration**: - Type: JSON array - TTL: 86400 seconds (24 hours) - Max entries: 50 **Redis CLI Access**: ```bash # Store validator feedback redis-cli lpush swarm:task-123:validator:history '{"iteration": 1, "severity": "CRITICAL", "issue": "Security vulnerability detected", "suggestion": "Apply input validation", "timestamp": "2025-10-21T12:34:56Z"}' # Retrieve validator history redis-cli lrange swarm:task-123:validator:history 0 -1 ``` ## CFN v3 Context Storage **Redis Keys**: ``` cfn_loop:task:{TASK_ID}:context # Full task context cfn_loop:task:{TASK_ID}:v3_config # V3 configuration cfn_loop:task:{TASK_ID}:epic_context # Epic-level context cfn_loop:task:{TASK_ID}:phase_context # Phase-level context ``` **Context Structure**: ```json { "task_id": "auth-001", "task_type": "software-development", "iteration": 1, "deliverables": ["auth.ts", "auth.test.ts"], "acceptance_criteria": ["Tests pass", "JWT expiry works"], "loop3_agents": ["backend-dev", "security-specialist"], "loop2_agents": ["reviewer", "tester"] } ``` **Storage**: Coordinator stores context before spawning orchestrator **Retrieval**: CLI agents read via `redis-cli HGETALL "cfn_loop:task:$TASK_ID:context"` **Benefits**: Swarm recovery, no JSON escaping, single source of truth ### Enhanced CLI Context Parsing (v2.9.0) **Purpose**: Automatic JSON-to-natural-language conversion for CLI agents **Supported Fields**: ```typescript { task: string, // Task description files: string | array, // Files to process (comma-separated or array) requirements: array, // Task requirements deliverables: array, // Expected outputs instructions: array, // Step-by-step instructions acceptanceCriteria: array, // Success criteria batch: string, // Batch identifier directory: string // Working directory } ``` **Transformation**: ```bash # Input (JSON) --context '{"task":"Add keywords","files":"file1.md,file2.md","requirements":["Add field","Run hook"]}' # Agent receives (Markdown) **Task:** Add keywords **Files to process:** - file1.md - file2.md **Requirements:** 1. Add field 2. Run hook ``` **Implementation**: `src/cli/agent-prompt-builder.ts:77-194` **Fallback**: Plain text if not valid JSON ## Docker CFN Coordination Patterns ### `cfn_docker:*` Namespace **Purpose**: Container-based agent coordination with Redis persistence **Agent Registration**: ```bash # Register Docker agent with task and type redis-cli HSET "cfn_docker:agent:${AGENT_ID}" \ "task_id" "${TASK_ID}" \ "agent_type" "${AGENT_TYPE}" \ "container_id" "${CONTAINER_ID}" \ "registered_at" "$(date -Iseconds)" ``` **Context Storage**: ```bash # Store task context in Redis redis-cli SET "cfn_docker:task:${TASK_ID}:context" '{"epicGoal":"...","deliverables":[...]}' # Retrieve with coordination script ./.claude/skills/cfn-docker-redis-coordination/coordinate.sh get-context --task-id "${TASK_ID}" ``` **Agent Status Tracking**: ```bash # Track agent completion redis-cli HSET "cfn_docker:agent:${AGENT_ID}:status_history" "$(date -Iseconds)" "WORKING" # Signal completion redis-cli HSET "cfn_docker:agent:${AGENT_ID}" "status" "COMPLETED" redis-cli LPUSH "cfn_docker:task:${TASK_ID}:agent:${AGENT_ID}:done" "complete" ``` ### Container Coordination **Docker Network**: `mcp-network` (bridge driver) **Implementation**: `tests/hello-world/lib/redis-test-utils.cjs` ```javascript // Register agent in Redis with container coordination async registerAgentInRedis(agentId, agentType, taskId, containerId) { const command = `bash "${coordinationScript}" register-agent \ --agent-id "${agentId}" \ --agent-type "${agentType}" \ --task-id "${taskId}" \ --container-id "${containerId}"`; const result = execSync(command, { encoding: 'utf8' }); return result.includes('SUCCESS'); } ``` ### Loop Completion Coordination **Wait for Loop Completion**: ```bash # Block until all agents complete (30 second timeout) ./.claude/skills/cfn-docker-redis-coordination/coordinate.sh wait-loop \ --task-id "${TASK_ID}" \ --loop-number 3 \ --agent-count 3 \ --timeout 30 ``` **Collect Confidence Scores**: ```bash # Collect consensus for decision making ./.claude/skills/cfn-docker-redis-coordination/coordinate.sh collect-consensus \ --task-id "${TASK_ID}" \ --loop-number 3 \ --required-consensus 0.90 \ --timeout 30 ``` ### ACL Enforcement **Namespace Isolation**: Each task gets isolated Redis keys ```javascript // ACL pattern: agents can only access their task data const aclKey = `cfn_docker:task:${taskId}:agent:${agentId}`; const contextKey = `cfn_docker:task:${taskId}:context`; // Unauthorized access attempts return empty const unauthorizedAccess = redis-cli GET "${unauthorizedKey}" # returns (nil) ``` ### Performance Metrics **Redis Commands**: ```bash # Check Redis health and memory usage redis-cli info memory,persistence,stats # Count active agents redis-cli keys "cfn_docker:agent:*" | wc -l # Monitor task completion rate redis-cli keys "cfn_docker:task:*:agent:*:done" | wc -l ``` ## Key Lifecycle Management - Automatic cleanup after 24 hours - Entries limited to 50 most recent items - Designed for iterative context injection in CFN Loop workflows