subagent-coordination

Subagent Coordination

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "subagent-coordination" with this command: npx skills add pwarnock/liaison-toolkit/pwarnock-liaison-toolkit-subagent-coordination

Subagent Coordination

Patterns for coordinating work across multiple specialized AI agents, managing agent roles and responsibilities, and orchestrating delegated workflows.

When to use this skill

Use this skill when:

  • Determining which agent should handle a specific task

  • Delegating work between specialized agents

  • Designing multi-agent workflows

  • Managing agent capability discovery

  • Handling agent handoffs and escalation

  • Orchestrating complex tasks across agents

Agent Roles and Boundaries

Core Agent Types

From agents/ directory structure:

// Primary agents (initiative) cody-admin.json → Project coordination, planning, infrastructure cody-builder.json → Build processes, compilation, deployment

// Specialized agents (reactive) cody-general.json → General assistance, undefined tasks cody-planner.json → Task breakdown, dependency analysis cody-release-manager → Release management, versioning, publishing qa-subagent.json → Quality assurance, testing, validation security-subagent.json → Security audits, vulnerability scanning frontend-specialist → Frontend development (React, Vue, etc.)

Role Responsibility Matrix

Agent Primary Role Delegates To Avoids

cody-admin Infrastructure, planning All agents None

cody-planner Task breakdown cody-general Direct implementation

qa-subagent Testing All None

security-subagent Security audits All None

frontend-specialist UI/components cody-general Backend logic

cody-builder Build/deploy cody-admin Development tasks

Capabilities by Agent

// Agent capability mapping const AGENT_CAPABILITIES = { 'cody-admin': [ 'task-management', 'agent-orchestration', 'build-automation' ], 'cody-planner': [ 'task-decomposition', 'dependency-analysis', 'planning' ], 'qa-subagent': [ 'testing-strategy', 'test-execution', 'quality-gate-enforcement' ], 'security-subagent': [ 'vulnerability-scanning', 'security-audit', 'compliance-validation' ], 'frontend-specialist': [ 'component-creation', 'styling', 'ui-testing' ] };

Delegation Patterns

Capability-Based Routing

function findBestAgent(task: Task): string { const taskType = inferTaskType(task);

// Map task types to agents const agentMapping: Record<string, string> = { 'testing': 'qa-subagent', 'security': 'security-subagent', 'frontend': 'frontend-specialist', 'release': 'cody-release-manager', 'planning': 'cody-planner', 'infrastructure': 'cody-admin', 'general': 'cody-general' };

return agentMapping[taskType] || 'cody-general'; }

// Usage const agent = findBestAgent({ type: 'security-audit' }); console.log(Delegating to: ${agent}); await delegateToAgent(agent, task);

Sequential Delegation

async function executeMultiAgentWorkflow(workflow: Workflow): Promise<void> { const steps = workflow.steps;

for (let i = 0; i < steps.length; i++) { const step = steps[i]; const agent = findBestAgent(step);

console.log(`Step ${i + 1}/${steps.length}: ${step.name} → ${agent}`);

const result = await delegateToAgent(agent, step);

if (!result.success) {
  console.error(`Agent ${agent} failed at step ${i + 1}`);
  await escalateFailure(step, result);
  break;
}

// Pass results to next step
workflow.context[step.name] = result;

} }

Parallel Delegation

async function executeParallelTasks(tasks: Task[]): Promise<TaskResult[]> { // Group tasks by agent type const agentTasks: Record<string, Task[]> = {};

for (const task of tasks) { const agent = findBestAgent(task); agentTasks[agent] = agentTasks[agent] || []; agentTasks[agent].push(task); }

// Execute each agent's tasks in parallel const results = await Promise.all( Object.entries(agentTasks).map(([agent, tasks]) => executeAgentBatch(agent, tasks) ) );

return results.flat(); }

Agent Handoff Procedures

Context Passing

interface AgentHandoff { fromAgent: string; toAgent: string; context: { task: string; results: any; decisions: string[]; partialState?: any; }; }

function handoffAgent(handoff: AgentHandoff): Promise<void> { console.log(Handoff: ${handoff.fromAgent} → ${handoff.toAgent});

// Transfer context to next agent const newAgent = loadAgent(handoff.toAgent); await newAgent.initialize(handoff.context);

// Clear previous agent state const previousAgent = loadAgent(handoff.fromAgent); await previousAgent.cleanup(); }

Handoff Templates

// From cody-planner to qa-subagent const handoffToQA = { fromAgent: 'cody-planner', toAgent: 'qa-subagent', context: { task: 'Validate implementation', results: { implementationFiles: ['src/command.ts', 'src/utils.ts'], decisions: ['Used Bun test runner', 'Implemented with 80% coverage'] }, taskBreakdown: { 'unit-tests': 'cody-general', 'integration-tests': 'qa-subagent', 'e2e-tests': 'qa-subagent' } }; }

Error Escalation

Failure Detection

async function delegateWithRetry(agent: string, task: Task, maxRetries = 3): Promise<any> { let lastError: Error | null = null;

for (let attempt = 1; attempt <= maxRetries; attempt++) { try { const result = await executeAgentTask(agent, task); return result; } catch (error) { lastError = error as Error; console.warn(Agent ${agent} attempt ${attempt} failed: ${error.message});

  if (attempt &#x3C; maxRetries) {
    await sleep(2000 * attempt); // Exponential backoff
  }
}

}

// All retries exhausted - escalate return await escalateFailure(agent, task, lastError); }

Escalation Paths

// Agent → More specialized agent const escalationPath = { 'cody-general': 'qa-subagent', 'cody-planner': 'cody-admin', 'frontend-specialist': 'security-subagent', 'qa-subagent': 'cody-admin', 'security-subagent': 'cody-admin' };

function escalateToSupervisor(failedAgent: string, error: Error): Promise<void> { const supervisor = escalationPath[failedAgent];

console.error(Escalating from ${failedAgent} to ${supervisor});

await notifySupervisor(supervisor, { agent: failedAgent, error: error.message, timestamp: new Date() }); }

Workflow Orchestration

Agent Graph Definition

interface AgentNode { id: string; agent: string; dependencies: string[]; outputDependencies: string[]; }

const WORKFLOW_GRAPH: AgentNode[] = [ { id: 'plan', agent: 'cody-planner', dependencies: [], outputDependencies: ['implement'] }, { id: 'implement', agent: 'cody-general', dependencies: ['plan'], outputDependencies: ['test'] }, { id: 'test', agent: 'qa-subagent', dependencies: ['implement'], outputDependencies: ['deploy'] }, { id: 'deploy', agent: 'cody-builder', dependencies: ['test'], outputDependencies: [] } ];

function executeWorkflow(graph: AgentNode[]): Promise<void> { const executionOrder = topologicalSort(graph);

for (const node of executionOrder) { const agent = loadAgent(node.agent); console.log(Executing ${node.id} with ${node.agent});

// Wait for dependencies
await waitForDependencies(node.dependencies);

// Execute
const result = await agent.execute(node);

// Notify dependent agents
notifyDependencies(node.outputDependencies, result);

} }

Orchestration with Liaison

Create workflow in liaison

liaison workflow create "multi-agent-release"
--trigger "agent:delegated:agent=cody-planner"
--actions "delegate-to-general,notify-builder"
--condition "all-dependencies-met"

Trigger workflow

liaison task create "Prepare release" --auto-trigger "multi-agent-release"

Inter-Agent Communication

Message Format

interface AgentMessage { from: string; to: string; type: 'task' | 'result' | 'error' | 'status'; payload: any; timestamp: Date; correlationId: string; }

async function sendAgentMessage(message: AgentMessage): Promise<void> { await messageBus.publish({ topic: agent.${message.to}, message, headers: { 'X-Agent-From': message.from, 'X-Correlation-ID': message.correlationId } }); }

Status Broadcasting

// Agent status updates async function broadcastStatus(agent: string, status: 'working' | 'idle' | 'error'): Promise<void> { await messageBus.publish({ topic: 'agent.status', message: { agent, status, timestamp: new Date() } }); }

// Subscribe to agent status function subscribeToAgentStatus(callback: (status: AgentStatus) => void): void { messageBus.subscribe('agent.status', callback); }

Agent Discovery

Capability Registration

// Agents register their capabilities interface AgentCapabilities { agent: string; capabilities: string[]; maxConcurrency: number; supportedTaskTypes: string[]; }

// cody-admin registers agents await liaison.registerAgent({ agent: 'qa-subagent', capabilities: ['testing', 'validation', 'quality-gates'], maxConcurrency: 1, supportedTaskTypes: ['testing', 'validation'] });

Finding Agents

List available agents

liaison agent list

Find agent by capability

liaison agent find --capability testing

Check agent status

liaison agent status qa-subagent

Verification

After implementing agent coordination:

  • Agent roles and responsibilities clearly defined

  • Delegation logic routes tasks to appropriate agents

  • Handoff procedures transfer context between agents

  • Escalation paths are defined for failures

  • Inter-agent communication is standardized

  • Workflow graphs are validated for cycles

  • Agent capabilities are registered and discoverable

  • Parallel delegation doesn't exceed agent concurrency

  • Error handling includes retry and escalation

Examples from liaison-toolkit

Example 1: Multi-Agent Release

1. cody-planner breaks down release task

liaison task create "Prepare release" --auto-trigger planning

2. cody-general implements changes

liaison task create "Implement version bump" --assign cody-general

3. qa-subagent validates

liaison task create "Run tests" --assign qa-subagent

4. security-subagent scans

liaison task create "Security audit" --assign security-subagent

5. cody-builder deploys

liaison task create "Build and publish" --assign cody-builder

Example 2: Error Escalation

// cody-planner delegates to cody-general const result = await delegateToAgent('cody-general', task);

if (!result.success) { // Escalate to cody-admin console.error('General agent failed, escalating to admin...');

await escalateToAdmin({ originalAgent: 'cody-general', task, error: result.error }); }

Example 3: Capability Discovery

// Find agent for security task const agent = liaison.findAgent({ capabilities: ['security-audit', 'vulnerability-scanning'] });

// Returns: 'security-subagent' console.log(Delegating security task to: ${agent}); await executeAgent(agent, task);

Related Resources

  • Multi-Agent Systems

  • Agent Orchestration Patterns

  • Task Delegation

  • Service Discovery

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

git-automation

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

testing-automation

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

bun-development

No summary provided by upstream source.

Repository SourceNeeds Review