Build agents.
Ship in hours.
A TypeScript SDK, REST API, and CLI scaffold tool for embedding enterprise AI agents into any stack. Run an agent in 3 lines of code.
From zero to a running agent in 4 steps.
npm install @eclips/sdkScaffold a full project in seconds.
One command generates a production-ready project with three template options: an Express API with webhook handling, a Next.js dashboard with live polling, or a minimal Node.js script to test the API.
express-api— Express server + HMAC webhook verificationnextjs-dashboard— App Router dashboard with realtime pollingagent-only— Single TypeScript file, fastest to testnpx create-eclips-appNo install needed. Requires Node.js ≥ 18.
Real-time events. HMAC-verified.
Subscribe to run.completed, triage.created, batch.completed, and 5 more events. Every POST includes an HMAC-SHA256 signature so you know it's genuine.
import crypto from 'crypto';
// Verify the request came from eClips
function verifySignature(rawBody: string, secret: string, sig: string) {
const expected = crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
return `sha256=${expected}` === sig;
}
// Express handler
app.post('/webhooks/eclips', express.raw({ type: '*/*' }), (req, res) => {
const sig = req.headers['x-eclips-signature'] as string;
if (!verifySignature(req.body.toString(), process.env.WEBHOOK_SECRET!, sig)) {
return res.status(401).send('Unauthorized');
}
const event = JSON.parse(req.body.toString());
switch (event.type) {
case 'run.completed':
console.log('Run finished:', event.data.run_id, event.data.result);
break;
case 'triage.created':
// Notify Slack, email team, etc.
break;
}
res.json({ ok: true });
});Available events
run.completedAgent finished successfully
run.failedAgent run encountered an error
triage.createdAgent needs human review
triage.resolvedItem approved or rejected
batch.completedAll batch rows finished
workflow.completedMulti-step workflow done
workflow.failedWorkflow step encountered error
delegation.createdAgent task delegated to partner
Process thousands of tasks in parallel.
Submit a batch of tasks in one call. eClips fans them out across agent workers, tracks per-row results, and calls your webhook when everything's done. No queue management, no rate-limiting headaches.
Parallel execution
Rows run concurrently — 100 invoices takes the same time as 1
Per-row results
Inspect individual outcomes, errors, and outputs at any point
Webhook on completion
Provide a URL and get called the moment the last row finishes
Cancel mid-flight
client.cancelBatch() stops any rows not yet started
const batch = await client.createBatch('finance', [
{ task: 'Process invoice INV-001', data: { vendor: 'Acme', amount: 5000 } },
{ task: 'Process invoice INV-002', data: { vendor: 'Globex', amount: 12000 } },
{ task: 'Process invoice INV-003', data: { vendor: 'Initech', amount: 3500 } },
]);
// Poll until done
let job = await client.getBatch(batch.id);
while (job.status !== 'completed' && job.status !== 'failed') {
await new Promise(r => setTimeout(r, 3000));
job = await client.getBatch(batch.id);
}
// job.rows[n].result for each invoice
console.log(`Processed ${job.rows_completed}/${job.rows_total} invoices`);Every method, at a glance.
Full TypeScript types included. See the complete API reference for parameter schemas, error codes, and rate limits.
client.run()AgentsTrigger an agent run, returns run_id immediately
client.runAndWait()AgentsTrigger + poll until terminal state
client.getRun()AgentsFetch status and result for any run
client.listRuns()AgentsPaginated run history for your org
client.listTriage()TriagePending human-in-the-loop items
client.approveTriage()TriageApprove and continue the blocked run
client.rejectTriage()TriageReject and cancel the blocked run
client.createWebhook()WebhooksRegister a webhook endpoint
client.listWebhooks()WebhooksList all registered webhooks
client.deleteWebhook()WebhooksRemove a webhook
client.createBatch()BatchSubmit many tasks in a single job
client.getBatch()BatchPoll a batch job status
client.listBatches()BatchHistory of batch jobs
client.triggerWorkflow()WorkflowsRun a multi-step workflow
client.listWorkflows()WorkflowsFetch all saved workflows
Error handling
Every error is a typed class. Catch exactly what you need.
import {
EClipsClient,
AuthenticationError,
RateLimitError,
ValidationError,
NotFoundError,
TimeoutError,
} from '@eclips/sdk';
try {
const result = await client.runAndWait('ap_specialist', task);
} catch (err) {
if (err instanceof AuthenticationError) {
// Invalid or missing API key
} else if (err instanceof RateLimitError) {
// err.retryAfter — seconds to wait
await sleep(err.retryAfter ?? 60);
} else if (err instanceof TimeoutError) {
// Agent exceeded timeout — err.runId is still valid
// Poll client.getRun(err.runId) to check progress
} else if (err instanceof NotFoundError) {
// Run, triage item, or webhook not found
}
}Your Business,
On Autopilot.
From project management to quality systems to security — we build intelligent platforms that simulate, automate, and transform how your operations run.
30 minutes · No pitch deck · Live product walkthrough