ACP — Agent Communication Protocol
Multi-hop agent message routing over the same signed envelope used by A2A (Transports). Each hop preserves the original runId; trace inspectors render the full path.
Server
import { acpRouter, mountAcp } from '@veridex/agents-openclaw/acp';
const router = acpRouter({
identity: ourAgentId,
signer: ourSigner,
});
router.register('billing.refund', billingAgent);
router.register('support.escalate', supportAgent);
router.register('research.deep', researchAgent);
mountAcp(app, router, { auth: jwtAuth });Client
import { acpClient } from '@veridex/agents-openclaw/acp';
const client = acpClient({
hub: 'https://acp.example.com',
signer: ourSigner,
});
const result = await client.invoke({
to: 'billing.refund',
payload: { orderId: '...', amount: '1000' },
});Routing semantics
- Hop limit — envelopes carry a TTL; exceeded → dropped + audit event.
- Replay protection — nonce store with TTL at each hop.
- Identity binding — every hop adds a signed claim; receiver verifies the full chain.
- Cross-tenant — explicit grants required (control plane).
Trace correlation
Every hop emits a handoff event with from, to, runId, parentEventId. The full path is visible in useTrace and the trace inspector.