This commit completes Beat 1 of the SequentialThinkingForCHORUS implementation, providing a functional plaintext skeleton for the age-encrypted wrapper. ## Deliverables ### 1. Main Wrapper Entry Point - `cmd/seqthink-wrapper/main.go`: HTTP server on :8443 - Configuration loading from environment variables - Graceful shutdown handling - MCP server readiness checking with timeout ### 2. MCP Client Package - `pkg/seqthink/mcpclient/client.go`: HTTP client for MCP server - Communicates with MCP server on localhost:8000 - Health check endpoint - Tool call endpoint with 120s timeout ### 3. Proxy Server Package - `pkg/seqthink/proxy/server.go`: HTTP handlers for wrapper - Health and readiness endpoints - Tool call proxy (plaintext for Beat 1) - SSE endpoint placeholder - Metrics endpoint integration ### 4. Observability Package - `pkg/seqthink/observability/logger.go`: Structured logging with zerolog - `pkg/seqthink/observability/metrics.go`: Prometheus metrics - Counters for requests, errors, decrypt/encrypt failures, policy denials - Request duration histogram ### 5. Docker Infrastructure - `deploy/seqthink/Dockerfile`: Multi-stage build - `deploy/seqthink/entrypoint.sh`: Startup orchestration - `deploy/seqthink/mcp_stub.py`: Minimal MCP server for testing ### 6. Build System Integration - Updated `Makefile` with `build-seqthink` target - Uses GOWORK=off and -mod=mod for clean builds - `docker-seqthink` target for container builds ## Testing Successfully builds with: ``` make build-seqthink ``` Binary successfully starts and waits for MCP server connection. ## Next Steps Beat 2 will add: - Age encryption/decryption (pkg/seqthink/ageio) - Content-Type: application/age enforcement - SSE streaming with encrypted frames - Golden tests for crypto round-trips 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
17 KiB
Sequential Thinking Integration Plan for CHORUS Agents
Date: 2025-10-13 Status: Design Phase Priority: High - Blocking further intelligence improvements
Executive Summary
This document outlines the integration of the Sequential Thinking MCP server into CHORUS agents to enable structured, multi-step reasoning before task execution. This addresses the limitation in the SequentialThinkingForCHORUS repository issue and unlocks advanced agent decision-making capabilities.
Problem Statement: CHORUS agents currently use simple prompt-response cycles without structured reasoning, limiting their ability to handle complex tasks requiring multi-step analysis, hypothesis generation, and iterative refinement.
Solution: Integrate the mcp__sequential-thinking__sequentialthinking MCP tool into the AI provider layer to enable chain-of-thought reasoning for complex tasks.
Current Architecture Analysis
1. Existing AI Provider Flow
TaskRequest → ModelProvider.ExecuteTask() → TaskResponse
↓
[Single LLM Call]
↓
Response String
Current Providers:
- OllamaProvider: Local model execution
- ResetDataProvider: ResetData LaaS API
- OpenAIProvider: OpenAI API
Current Limitations:
- ✗ No structured reasoning process
- ✗ No ability to revise initial thoughts
- ✗ No hypothesis generation and verification
- ✗ No branching for alternative approaches
- ✗ Simple string reasoning field (not structured)
2. TaskResponse Structure
Location: /home/tony/chorus/project-queues/active/CHORUS/pkg/ai/provider.go:53-78
type TaskResponse struct {
Success bool `json:"success"`
TaskID string `json:"task_id"`
Response string `json:"response"`
Reasoning string `json:"reasoning,omitempty"` // ← Simple string
Actions []TaskAction `json:"actions,omitempty"`
Artifacts []Artifact `json:"artifacts,omitempty"`
TokensUsed TokenUsage `json:"tokens_used,omitempty"`
// ... other fields
}
Opportunity: The Reasoning field is perfect for storing structured thinking output!
Sequential Thinking MCP Tool
Tool Signature
mcp__sequential-thinking__sequentialthinking(
thought: string,
nextThoughtNeeded: bool,
thoughtNumber: int,
totalThoughts: int,
isRevision: bool = false,
revisesThought: int = null,
branchFromThought: int = null,
branchId: string = null,
needsMoreThoughts: bool = false
)
Capabilities
- Adaptive Thinking: Adjust
totalThoughtsup or down as understanding deepens - Revision Support: Question and revise previous thoughts (
isRevision,revisesThought) - Branching: Explore alternative approaches (
branchFromThought,branchId) - Hypothesis Testing: Generate and verify hypotheses in chain-of-thought
- Uncertainty Expression: Express and work through unclear aspects
- Context Maintenance: Keep track of all previous thoughts
When to Use
- Complex problem decomposition
- Multi-step solution planning
- Problems requiring course correction
- Unclear scope requiring exploration
- Tasks needing context over multiple steps
- Filtering irrelevant information
Proposed Integration Architecture
Phase 1: Enhanced TaskResponse Structure
File: pkg/ai/provider.go
// StructuredReasoning represents chain-of-thought reasoning process
type StructuredReasoning struct {
Thoughts []ThoughtStep `json:"thoughts"`
FinalHypothesis string `json:"final_hypothesis,omitempty"`
VerificationSteps []string `json:"verification_steps,omitempty"`
Confidence float32 `json:"confidence"` // 0.0-1.0
TotalRevisions int `json:"total_revisions"`
BranchesExplored int `json:"branches_explored"`
}
// ThoughtStep represents a single step in the reasoning process
type ThoughtStep struct {
Number int `json:"number"`
Content string `json:"content"`
IsRevision bool `json:"is_revision"`
RevisesThought int `json:"revises_thought,omitempty"`
BranchID string `json:"branch_id,omitempty"`
BranchFrom int `json:"branch_from,omitempty"`
Timestamp time.Time `json:"timestamp"`
}
// TaskResponse update
type TaskResponse struct {
// ... existing fields ...
Reasoning string `json:"reasoning,omitempty"` // Legacy simple string
StructuredReasoning *StructuredReasoning `json:"structured_reasoning,omitempty"` // NEW
// ... rest of fields ...
}
Phase 2: Sequential Thinking Wrapper
New File: pkg/ai/sequential_thinking.go
package ai
import (
"context"
"encoding/json"
"fmt"
)
// SequentialThinkingEngine wraps MCP sequential thinking tool
type SequentialThinkingEngine struct {
mcpClient MCPClient // Interface to MCP tool
}
// ThinkingRequest represents input for sequential thinking
type ThinkingRequest struct {
Problem string
Context map[string]interface{}
MaxThoughts int
AllowRevisions bool
AllowBranching bool
}
// ThinkingResult represents output from sequential thinking
type ThinkingResult struct {
Thoughts []ThoughtStep
FinalConclusion string
Confidence float32
ReasoningPath string // Markdown summary of thinking process
}
// Think executes sequential thinking process
func (e *SequentialThinkingEngine) Think(ctx context.Context, req *ThinkingRequest) (*ThinkingResult, error) {
// Implementation:
// 1. Initialize thinking with problem statement
// 2. Iteratively call MCP tool until nextThoughtNeeded = false
// 3. Track all thoughts, revisions, branches
// 4. Generate final conclusion and reasoning summary
// 5. Return structured result
}
Phase 3: Provider Integration
Modified File: pkg/ai/resetdata.go
// ExecuteTask with sequential thinking
func (p *ResetDataProvider) ExecuteTask(ctx context.Context, request *TaskRequest) (*TaskResponse, error) {
startTime := time.Now()
// Determine if task requires sequential thinking
useSequentialThinking := p.shouldUseSequentialThinking(request)
var structuredReasoning *StructuredReasoning
var enhancedPrompt string
if useSequentialThinking {
// Use sequential thinking engine to analyze task first
thinkingEngine := NewSequentialThinkingEngine(p.mcpClient)
thinkingResult, err := thinkingEngine.Think(ctx, &ThinkingRequest{
Problem: p.formatTaskAsProblem(request),
Context: request.Context,
MaxThoughts: 10,
AllowRevisions: true,
AllowBranching: true,
})
if err != nil {
// Fall back to direct execution if thinking fails
log.Warn().Err(err).Msg("Sequential thinking failed, falling back to direct execution")
} else {
// Use thinking result to enhance prompt
enhancedPrompt = p.buildPromptWithThinking(request, thinkingResult)
structuredReasoning = convertToStructuredReasoning(thinkingResult)
}
}
// Execute with enhanced prompt (if available) or standard prompt
messages, _ := p.buildChatMessages(request, enhancedPrompt)
// ... rest of execution ...
return &TaskResponse{
Success: true,
Response: responseText,
Reasoning: legacyReasoningString,
StructuredReasoning: structuredReasoning, // NEW
// ... rest of response ...
}
}
// shouldUseSequentialThinking determines if task warrants sequential thinking
func (p *ResetDataProvider) shouldUseSequentialThinking(request *TaskRequest) bool {
// Use sequential thinking for:
// - High complexity tasks (complexity >= 7)
// - Architect role (requires system design)
// - Tasks with "design" or "architecture" in title/labels
// - Tasks requiring multi-step planning
if request.Complexity >= 7 {
return true
}
role := strings.ToLower(request.AgentRole)
if role == "architect" || role == "senior-developer" {
return true
}
keywords := []string{"design", "architecture", "refactor", "plan", "strategy"}
taskText := strings.ToLower(request.TaskTitle + " " + request.TaskDescription)
for _, keyword := range keywords {
if strings.Contains(taskText, keyword) {
return true
}
}
return false
}
Implementation Phases
Phase 1: Foundation (Days 1-2)
Tasks:
- ✅ Define
StructuredReasoningandThoughtSteptypes - ✅ Add
StructuredReasoningfield toTaskResponse - ✅ Create
SequentialThinkingEngineskeleton - ✅ Add MCP client interface for sequential-thinking tool
Files to Create/Modify:
pkg/ai/provider.go- Add new typespkg/ai/sequential_thinking.go- New filepkg/ai/mcp_client.go- New file for MCP integration
Success Criteria:
- Code compiles without errors
- Types are properly defined
- MCP client interface is clear
Phase 2: Sequential Thinking Engine (Days 3-5)
Tasks:
- Implement
SequentialThinkingEngine.Think()method - Implement MCP tool call wrapper
- Add thought tracking and revision detection
- Implement branch management
- Generate reasoning summaries
- Write unit tests
Files:
pkg/ai/sequential_thinking.go- Full implementationpkg/ai/sequential_thinking_test.go- Unit tests
Success Criteria:
- Can execute complete thinking cycles
- Properly tracks revisions and branches
- Generates clear reasoning summaries
- All unit tests pass
Phase 3: Provider Integration (Days 6-8)
Tasks:
- Modify
ResetDataProvider.ExecuteTask()for sequential thinking - Implement
shouldUseSequentialThinking()heuristics - Add prompt enhancement with thinking results
- Implement fallback for thinking failures
- Add configuration options
- Write integration tests
Files:
pkg/ai/resetdata.go- Modify ExecuteTaskpkg/ai/ollama.go- Same modificationsconfig/agent.yaml- Add sequential thinking config
Success Criteria:
- Complex tasks trigger sequential thinking
- Thinking results enhance task execution
- Graceful fallback on failures
- Integration tests pass
Phase 4: Testing & Validation (Days 9-10)
Tasks:
- End-to-end testing with real councils
- Test with various complexity levels
- Validate reasoning quality improvements
- Performance benchmarking
- Documentation updates
Test Cases:
- Simple task (complexity=3) → No sequential thinking
- Complex task (complexity=8) → Sequential thinking enabled
- Architect role → Always uses sequential thinking
- Design task → Sequential thinking with branching
- Fallback scenario → Graceful degradation
Success Criteria:
- Demonstrable improvement in task quality
- Acceptable performance overhead (<30% increase in latency)
- Clear reasoning traces in artifacts
- Documentation complete
Configuration
Agent Configuration
File: config/agent.yaml
ai_providers:
resetdata:
type: "resetdata"
endpoint: "${RESETDATA_API_ENDPOINT}"
api_key: "${RESETDATA_API_KEY}"
default_model: "llama3.1:70b"
# Sequential thinking configuration
enable_sequential_thinking: true
sequential_thinking:
min_complexity: 7 # Minimum complexity to trigger
force_for_roles: # Always use for these roles
- architect
- senior-developer
max_thoughts: 15 # Maximum thinking iterations
enable_revisions: true # Allow thought revisions
enable_branching: true # Allow exploring alternatives
confidence_threshold: 0.7 # Minimum confidence for final answer
Runtime Toggle
Allow runtime control via council brief:
{
"task_id": "task-123",
"complexity": 8,
"use_sequential_thinking": true, // Explicit override
"thinking_config": {
"max_thoughts": 20,
"allow_branching": true
}
}
Benefits & Expected Improvements
1. Better Problem Decomposition
Before:
Agent: Here's my solution [immediately provides implementation]
After:
Thought 1: Breaking down the task into 3 main components...
Thought 2: Component A requires database schema changes...
Thought 3: Wait, revising thought 2 - migration strategy needs consideration...
Thought 4: Exploring alternative: event sourcing vs direct updates...
Thought 5: Event sourcing better for audit trail requirements...
Final: Implementation plan with 5 concrete steps...
2. Improved Architecture Decisions
Architect agents can:
- Explore multiple design alternatives
- Revise decisions based on discovered constraints
- Build and verify hypotheses about scalability
- Document reasoning trail for future reference
3. Higher Quality Code
Developer agents can:
- Think through edge cases before coding
- Consider multiple implementation approaches
- Revise initial assumptions
- Plan testing strategy upfront
4. Debugging Enhancement
When tasks fail:
- Reasoning traces show where agent went wrong
- Can identify flawed assumptions
- Easier to improve prompts and heuristics
Performance Considerations
1. Latency Impact
Estimated Overhead:
- Sequential thinking: 5-15 LLM calls (vs 1 direct call)
- Expected latency increase: 10-30 seconds for complex tasks
- Mitigation: Only use for high-complexity tasks (complexity >= 7)
2. Token Usage
Estimated Increase:
- Each thought: ~200-500 tokens
- 10 thoughts: ~3000-5000 additional tokens
- Mitigation: Set reasonable
max_thoughtslimits
3. Resource Requirements
MCP Server:
- Sequential thinking MCP server must be available
- Requires proper error handling and fallback
Risks & Mitigations
| Risk | Impact | Mitigation |
|---|---|---|
| MCP server unavailable | High | Graceful fallback to direct execution |
| Increased latency unacceptable | Medium | Make sequential thinking opt-in per task |
| Token cost explosion | Medium | Set hard limits on max_thoughts |
| Reasoning doesn't improve quality | High | A/B testing with metrics |
| Complex implementation | Medium | Phased rollout with testing |
Success Metrics
Quantitative
- Task Success Rate: Compare before/after for complexity >= 7 tasks
- Target: +15% improvement
- Code Quality: Static analysis scores for generated code
- Target: +20% improvement in complexity score
- PR Acceptance Rate: How many agent PRs get merged
- Target: +25% improvement
- Latency: Task execution time
- Acceptable: <30% increase for complex tasks
Qualitative
- Reasoning Quality: Human review of reasoning traces
- Decision Clarity: Can humans understand agent's thought process?
- Developer Feedback: Easier to debug failed tasks?
Rollout Plan
Stage 1: Internal Testing (Week 1)
- Deploy to development environment
- Test with synthetic tasks
- Gather performance metrics
- Refine heuristics
Stage 2: Limited Production (Week 2)
- Enable for architect role only
- Enable for complexity >= 9 only
- Monitor closely
- Collect feedback
Stage 3: Expanded Rollout (Week 3-4)
- Enable for all roles with complexity >= 7
- Add complexity-based opt-in
- Full production deployment
- Continuous monitoring
Stage 4: Optimization (Week 5+)
- Fine-tune heuristics based on data
- Optimize thought limits
- Improve reasoning summaries
- Add advanced features (e.g., multi-agent reasoning)
Future Enhancements
1. Multi-Agent Reasoning
Multiple agents can contribute thoughts to same reasoning chain:
- Architect proposes design
- Security agent reviews security implications
- Performance agent analyzes scalability
2. Reasoning Templates
Pre-defined thinking patterns for common scenarios:
- API design checklist
- Security review framework
- Performance optimization workflow
3. Learning from Reasoning
Store successful reasoning patterns:
- Build knowledge base of good reasoning traces
- Use as examples in future tasks
- Identify common pitfalls
4. Visualization
Dashboard showing reasoning graphs:
- Thought flow diagrams
- Revision history
- Branch exploration trees
- Confidence evolution
References
- SequentialThinkingForCHORUS Issue: (Repository in GITEA)
- MCP Sequential Thinking Tool: Available in Claude Code MCP servers
- CHORUS Task Execution:
/home/tony/chorus/project-queues/active/CHORUS/pkg/execution/engine.go - AI Provider Interface:
/home/tony/chorus/project-queues/active/CHORUS/pkg/ai/provider.go - ResetData Provider:
/home/tony/chorus/project-queues/active/CHORUS/pkg/ai/resetdata.go
Document Info
- Created: 2025-10-13
- Author: Claude Code
- Status: Design Complete - Ready for Implementation
- Next Steps: Begin Phase 1 implementation