Building Graph Sub-Agents in Astreus
Learn how to combine Graph workflows with Sub-Agent coordination for hierarchical task distribution in Astreus. Create specialized agents and orchestrate them through graphs.
Combining Graph workflows with Sub-Agent coordination enables hierarchical task distribution in Astreus. This pattern lets you create specialized agents with distinct capabilities and coordinate them through a main agent within graph workflows.
## Installation and Setup
You can clone the complete example repository or install just the package:
```bash
# Clone complete example
git clone https://github.com/astreus-ai/graph-sub-agents
cd graph-sub-agents
npm install
# Or install package only
npm install @astreus-ai/astreus
```
Configure your environment with the required API keys:
```
OPENAI_API_KEY=sk-your-openai-api-key-here
ANTHROPIC_API_KEY=your-anthropic-api-key-here
DB_URL=sqlite://./astreus.db
```
## Creating Specialized Sub-Agents
The framework enables creating specialized agents with different roles. Each agent specifies its `systemPrompt` to define its specialized behavior.
```typescript
// Research specialist with knowledge base and memory
const researchSpecialist = await Agent.create({
name: 'ResearchSpecialist',
model: 'gpt-4o',
systemPrompt: 'You are an expert researcher. Gather comprehensive information and cite sources.',
knowledge: true,
memory: true
});
// Data analyst with tool usage capabilities
const dataAnalyst = await Agent.create({
name: 'DataAnalyst',
model: 'gpt-4o',
systemPrompt: 'You analyze data and extract actionable insights.'
});
// Register analysis tools via plugin system
await dataAnalyst.registerPlugin({
name: 'analytics',
version: '1.0.0',
description: 'Data analysis tools',
tools: [analysisTool]
});
// Content writer with vision capabilities
const contentWriter = await Agent.create({
name: 'ContentWriter',
model: 'claude-3-5-sonnet',
systemPrompt: 'You transform information into compelling narratives.',
vision: true
});
```
Three specialized agents are created: ResearchSpecialist uses GPT-4o with knowledge base and memory for information gathering, DataAnalyst is configured with GPT-4o and tool usage for analytical tasks, and ContentWriter employs Claude 3.5 Sonnet with vision capabilities for content generation.
## Setting Up the Coordinator Agent
The main coordinator delegates tasks to appropriate specialists through the sub-agents configuration parameter:
```typescript
const coordinator = await Agent.create({
name: 'Coordinator',
model: 'gpt-4o',
systemPrompt: `You coordinate complex projects using specialized sub-agents.
Delegate tasks to the appropriate specialist based on task requirements.`,
subAgents: [researchSpecialist, dataAnalyst, contentWriter]
});
```
The coordinator's system prompt defines its role in managing the team. It understands which specialists are available and routes tasks accordingly.
## Creating a Sub-Agent Aware Graph
The graph is created with sub-agent coordination awareness enabled:
```typescript
const graph = new Graph({
name: 'Coordinator Graph'
}, coordinator);
```
The `subAgentAware: true` flag enables sub-agent coordination awareness, while `maxConcurrency: 2` controls parallel execution limits. The default agent is set to the coordinator instance.
## Configuring Task Nodes
Task nodes leverage sub-agents through specific parameters:
```typescript
// Market research task with auto-delegation
const marketResearch = graph.addTaskNode({
name: 'market-research',
prompt: 'Research market trends for {{topic}}',
useSubAgents: true,
subAgentDelegation: 'auto'
});
// Data analysis with parallel coordination
const dataAnalysis = graph.addTaskNode({
name: 'data-analysis',
prompt: 'Analyze research findings',
dependencies: [marketResearch],
useSubAgents: true,
subAgentDelegation: 'auto',
subAgentCoordination: 'parallel'
});
// Report generation
const report = graph.addTaskNode({
name: 'report',
prompt: 'Generate executive report',
dependencies: [dataAnalysis],
useSubAgents: true,
subAgentDelegation: 'auto'
});
```
Key parameters include: `useSubAgents: true` activates sub-agent delegation, `subAgentDelegation: 'auto'` enables automatic specialist selection, `subAgentCoordination: 'parallel'` allows parallel execution mode, and `dependencies: [taskId]` establishes execution order.
## Workflow Execution Flow
The workflow follows a clear execution pattern:
```
Market Research (auto-delegated to ResearchSpecialist)
↓
Data Analysis (parallel processing with DataAnalyst)
↓
Executive Report Generation (ContentWriter)
```
Each task is automatically routed to the most appropriate specialist. The coordinator analyzes the task requirements and delegates accordingly.
## Running the Example
Execute the workflow with simple commands:
```bash
# Pre-cloned repository
npm run dev
# Custom setup
npx tsx index.ts
```
Results are aggregated and returned with success/failure status, completed node count, execution duration, individual task results, and final consolidated output.
## Understanding Result Structure
The graph execution returns comprehensive results:
```typescript
const result = await graph.run({
topic: 'AI market trends'
});
// Access results
console.log('Success:', result.success);
console.log('Completed nodes:', result.completedNodes);
console.log('Duration:', result.duration, 'ms');
console.log('Final output:', result.output);
// Individual task results
console.log('Research:', result.taskResults['market-research']);
console.log('Analysis:', result.taskResults['data-analysis']);
console.log('Report:', result.taskResults['report']);
```
The result object provides detailed information about the entire workflow execution, including individual task outputs and overall metrics.
## Delegation Strategies
Astreus supports different delegation strategies:
```typescript
// Auto delegation - coordinator decides which specialist to use
graph.addTaskNode({
name: 'deep-research',
prompt: 'Conduct deep research on {{topic}}',
useSubAgents: true,
subAgentDelegation: 'auto'
});
// Sequential delegation - tasks are delegated one at a time
graph.addTaskNode({
name: 'step-by-step',
prompt: 'Process this step by step',
useSubAgents: true,
subAgentDelegation: 'sequential'
});
// Manual delegation - you control the flow explicitly
graph.addTaskNode({
name: 'manual-task',
prompt: 'Handle this with manual control',
useSubAgents: true,
subAgentDelegation: 'manual'
});
```
Auto-delegation lets the coordinator choose the specialist. Sequential processes tasks one at a time. Manual gives you explicit control over the delegation flow.
## Parallel Execution Benefits
Leverage parallel coordination for independent tasks:
```typescript
// Research phase
const research = graph.addTaskNode({
name: 'research',
prompt: 'Research {{topic}}',
useSubAgents: true
});
// Parallel analysis tasks
const technicalAnalysis = graph.addTaskNode({
name: 'technical-analysis',
prompt: 'Technical analysis',
dependencies: [research],
useSubAgents: true,
subAgentCoordination: 'parallel'
});
const marketAnalysis = graph.addTaskNode({
name: 'market-analysis',
prompt: 'Market analysis',
dependencies: [research],
useSubAgents: true,
subAgentCoordination: 'parallel'
});
// Synthesis
graph.addTaskNode({
name: 'synthesis',
prompt: 'Synthesize findings',
dependencies: [technicalAnalysis, marketAnalysis],
useSubAgents: true
});
```
Parallel coordination allows multiple specialists to work simultaneously on independent tasks, significantly reducing overall execution time.
## Monitoring and Debugging
Track delegation and execution events:
```typescript
const graph = new Graph({
name: 'Coordinator Graph'
}, coordinator);
```
These hooks provide visibility into which specialist handles each node, execution times, and outputs. Essential for debugging and optimization.
## Best Practices
Keep specialist roles clearly defined without overlap. Each should excel in one focused area. Match specialists to workflow stages naturally.
Use appropriate models for each specialist. Powerful reasoning models for analysis, creative models for writing, fast models for routine tasks. Balance quality and cost.
Implement comprehensive monitoring to track specialist usage, execution times, and resource consumption. This data is invaluable for optimization.
Start with auto-delegation and move to explicit delegation only when you need precise control. The coordinator is often better at routing than manual assignments.
## When to Use This Pattern
This architecture excels for complex multi-stage workflows where different stages need genuinely different skills. Content production, market research, and data analysis pipelines are ideal use cases.
The pattern also shines when you need high-quality outputs and can accept the complexity trade-off. Specialization improves results but adds architectural overhead.
Avoid this pattern for simple tasks or when latency is critical. The delegation overhead isn't worth it for single-step operations or time-sensitive workflows.
## Resources
Complete example repository: [astreus-ai/graph-sub-agents](https://github.com/astreus-ai/graph-sub-agents)
Official documentation: [astreus.org/docs](https://astreus.org/docs)
This pattern combines the orchestration power of graphs with the specialized expertise of multiple agents, creating sophisticated AI systems that can tackle complex, multi-faceted tasks efficiently.
This experiment is written for Astreus v0.5.37. Please ensure you are using a compatible version.