Focus: Enable agents to discover, communicate, and collaborate via ACP standard
Process: Cycle 1-100 cycle sequence
Timeline: 8-12 cycles per specialist per day
Target: Foundation for multi-agent orchestration (Wave 2 - CRITICAL PATH EXTENSION)
Spec: https://agentcommunicationprotocol.dev/
ACP is the lingua franca for inter-agent communication. Integration enables:
This is how agents become an economy.
Purpose: Understand ACP, map to ONE ontology, plan integration
communicates_via_acphas_capabilityoffers_serviceassigned_torouted_toPurpose: Extend Convex schema for ACP agents + messages
agent
{
type: 'agent',
properties: {
// Identification
agentId: string, // Unique: "chat-advisor", "payment-processor"
name: string, // "Chat Advisor"
description: string, // What this agent does
provider: string, // "ONE", "ElizaOS", "LangChain"
version: string, // "1.0.0"
// ACP Endpoint
endpoint: string, // https://agents.one.ie/chat-advisor
acpVersion: string, // "1.0.0"
supportedMimeTypes: string[], // ["text/plain", "image/*"]
// Capabilities
capabilities: string[], // ["product_search", "recommendation", "payment"]
capabilityDescriptions: Record<string, string>, // Detailed descriptions
// Status
status: 'online' | 'offline' | 'busy' | 'maintenance',
lastSeen: number, // Timestamp
uptime: number, // Percentage 0-100
isHealthy: boolean, // Passes health check?
// Performance
averageResponseTime: number, // Milliseconds
successRate: number, // 0-100%
failureCount: number,
totalRequests: number,
// Configuration
maxConcurrentTasks: number, // How many tasks at once?
timeout: number, // Default timeout (milliseconds)
retryPolicy: {
maxRetries: number,
backoffMultiplier: number,
},
// Pricing (if agent charges)
pricing: {
enabled: boolean,
model: 'per_request' | 'per_minute' | 'subscription',
rate: number, // Cost per unit
currency: string, // "USD"
},
// Ratings
rating: number, // 1-5 stars
reviewCount: number,
trustScore: number, // 0-100, based on reliability
// Metadata
owner: Id<'things'>, // Creator who built this agent
tags: string[], // ["domain:padel", "type:advisor"]
createdAt: number,
updatedAt: number,
}
}
acp_message
{
type: 'acp_message',
properties: {
// Message ID
messageId: string, // UUID
correlationId: string, // For related messages
// Routing
from: Id<'things'>, // Sender agent
to: Id<'things'>, // Recipient agent
conversationId: string, // Group related messages
// Content
messageType: string, // "query", "response", "notification"
content: any, // Actual message payload
mimeType: string, // "text/plain", "image/png"
// Mode
mode: 'sync' | 'async', // Sync: wait for response. Async: callback
callbackUrl: string, // If async, where to send response
// Status
status: 'sent' | 'delivered' | 'processing' | 'completed' | 'failed',
error: {
code: string,
message: string,
},
// Metadata
priority: 'low' | 'medium' | 'high' | 'critical',
timeout: number, // Milliseconds
retries: number, // How many retries so far?
createdAt: number,
sentAt: number,
deliveredAt: number,
completedAt: number,
// Tracking
duration: number, // Total time (ms)
responseTime: number, // Agent processing time (ms)
cost: number, // If agent charges
}
}
acp_task
{
type: 'acp_task',
properties: {
// Task ID
taskId: string, // UUID
correlationId: string, // Related messages/tasks
// Assignment
from: Id<'things'>, // Agent requesting task
to: Id<'things'>, // Agent assigned to task
creatorId: Id<'things'>, // Original creator (if delegated multiple times)
// Task Definition
taskType: string, // "analyze_data", "generate_content"
parameters: any, // Input data
description: string, // Human-readable description
// Execution
status: 'pending' | 'accepted' | 'processing' | 'completed' | 'failed' | 'cancelled',
priority: 'low' | 'medium' | 'high' | 'critical',
timeout: number, // Max execution time (ms)
estimatedCompletion: number, // Expected time to finish
actualCompletion: number, // When it actually finished
// Result
result: any, // Output data
resultMimeType: string,
error: {
code: string,
message: string,
retryable: boolean,
},
// Streaming
streaming: boolean, // Send chunks in real-time?
streamEndpoint: string, // Where to send chunks
chunks: [{
position: number,
content: any,
timestamp: number,
}],
// Callback
callbackUrl: string, // Where to notify when done
callbackStatus: 'pending' | 'sent' | 'delivered' | 'failed',
// Tracking
createdAt: number,
startedAt: number,
completedAt: number,
duration: number, // Total time (ms)
cost: number, // If agent charges
metrics: {
progress: number, // 0-100%
itemsProcessed: number,
itemsFailed: number,
}
}
}
has_capability
communicates_via_acp
backend/convex/services/acp.tsregisterAgent(agentId, endpoint, capabilities) → registeredsendMessage(from, to, message, mode) → messageIdcreateTask(from, to, task, callback) → taskIdgetTaskStatus(taskId) → status + resultdiscoverAgents(capability) → agents[]getAgentCapabilities(agentId) → capabilitiesrouteMessage(messageId) → forwarded to agenthandleTaskCallback(taskId, result) → storedhealthCheckAgents() → mark online/offlinelogACPEvent(type, data) → event recordedGET /api/acp/agents - List all agentsGET /api/acp/agents?capability=image_generation - Filter by capabilityGET /api/acp/agents?status=online - Filter by statusGET /api/acp/agents/search?q=recommendation - Full-text searchqueries/acp.ts:
getAgent(agentId) → agent detailsgetAgentsByCapability(capability) → agents[]searchAgents(query) → semantic searchgetAgentMessages(agentId) → inboxgetTaskStatus(taskId) → status + resultgetConversation(correlationId) → all related messagesgetAgentMetrics(agentId) → performance statsgetSystemMetrics() → overall health[Abbreviated for full plan - structure follows standard 10-phase model]
Phase 3 (Cycle 21-30): Frontend dashboard + admin UI
Phase 4 (Cycle 31-40): API routes + middleware
/api/acp/agents - REST endpoints/api/acp/messages - Message routing/api/acp/tasks - Task delegationPhase 5 (Cycle 41-50): Integration points
Phase 6 (Cycle 51-60): Testing
Phase 7 (Cycle 61-70): Design + UX
Phase 8 (Cycle 71-80): Performance
Phase 9 (Cycle 81-90): Deployment
Phase 10 (Cycle 91-100): Knowledge capture
User: "What padel racket should I buy?"
↓
Chat Agent (Claude)
↓
[Async message via ACP]
↓
Padel Expert Agent (Creator-built)
↓
Returns: "Based on your needs, try X racket"
↓
Chat Agent
↓
User sees recommendation
Creator Agent needs to charge customer
↓
[ACP task to Payment Processor Agent]
↓
Payment Agent calls X402 checkout
↓
Returns: Payment receipt + settlement info
↓
Creator Agent completes transaction
Creator A's Agent (Product Catalog)
↓
[Request to Creator B's Agent (Bundling)]
↓
Creator B's Agent bundles products
↓
Returns: Bundle pricing + shipping
↓
Creator A's Agent shows customer
↓
Shared revenue split
Creator needs product descriptions
↓
[Task to Content Generation Agent]
↓
Agent generates via LLM
↓
Returns: 10 product descriptions
↓
Creator reviews + publishes
↓
Creator pays per task
ACP integration complete when:
ACP integration is the unlocking mechanism for:
This is not just a feature. This is the foundation of a multi-agent economy.
Status: Wave 2 Extension - CRITICAL (enable todo-agents, todo-skills, todo-sell) Timeline: Can start in parallel with Wave 1 (low dependency on onboarding) Priority: MAXIMUM (enables all subsequent features) Revenue Impact: HIGH (agent marketplaces, creator monetization, API fees)