Headless Agent
Execute agents programmatically without a UI — perfect for automation, cron jobs, and backend workflows.
Simple Execution
run-agent.ts
import { CadraClient } from '@cadraos/sdk';
const client = new CadraClient({
apiKey: process.env.CADRA_API_KEY!,
orgId: Number(process.env.CADRA_ORG_ID),
});
const result = await client.agents.executeSync('agent-uuid', {
task: 'Summarize the latest sales data and identify trends',
context: {
department: 'Sales',
period: 'Q4 2025',
},
});
console.log('Output:', result.output);
console.log('Tool calls:', result.toolResults?.length ?? 0);Batch Processing
batch.ts
const items = ['report-1.pdf', 'report-2.pdf', 'report-3.pdf'];
const results = await Promise.all(
items.map(item =>
client.agents.executeSync('analysis-agent', {
task: `Analyze document: ${item}`,
attachmentIds: [item],
})
)
);
results.forEach((r, i) => {
console.log(`${items[i]}: ${r.output?.slice(0, 100)}...`);
});Streaming with Progress
stream.ts
const stream = await client.agents.stream('agent-uuid', {
task: 'Generate a comprehensive market analysis',
});
stream.on('progress', ({ percent, message }) => {
console.log(`[${percent}%] ${message}`);
});
stream.on('toolCall', ({ name, input }) => {
console.log(` Tool: ${name}(${JSON.stringify(input).slice(0, 80)})`);
});
stream.on('textDelta', ({ delta }) => process.stdout.write(delta));
stream.on('complete', ({ execution }) => {
console.log('\nCompleted in', execution.completedAt);
});
await stream.connect();Error Handling
typescript
import { RateLimitError, CadraError } from '@cadraos/sdk';
try {
const result = await client.agents.executeSync('agent-uuid', {
task: 'Process data',
});
} catch (error) {
if (error instanceof RateLimitError) {
console.log(`Rate limited. Retry after ${error.retryAfter}s`);
await new Promise(r => setTimeout(r, (error.retryAfter ?? 5) * 1000));
// retry...
} else if (error instanceof CadraError) {
console.error(`API Error ${error.status}: ${error.message}`);
}
}