One interface. Infinite compositions.
Every agent exposes .process(input) — the same interface as a pipeline, a parallel group, or a tool. Build them small. Compose them large.
An agent
const researcher = Baleybot.create({
name: 'researcher',
goal: 'Research a topic',
});
const result = await researcher.process(
'AI agents'
);
A pipeline
import { pipeline } from '@baleybots/core';
const workflow = pipeline()
.step(researcher)
.step(writer)
.step(editor)
.build();
const article = await workflow.process(
'AI agents'
);
A parallel
import { parallel } from '@baleybots/core';
const analysis = parallel({
sentiment: sentimentBot,
topics: topicsBot,
summary: summaryBot,
});
const results = await analysis.process(
text
);
Why Baleybots?
The composition layer your agent stack is missing.
| Feature | Raw API Calls | Vercel AI SDK | Baleybots |
|---|---|---|---|
| Composition | Custom glue code | Not built-in | pipeline(), parallel(), agents-as-tools |
| Typed outputs | Parse JSON yourself | Zod schemas | Zod schemas, validated across pipelines |
| Automatic tool loop | Manual while-loop | maxSteps | Built-in with stop conditions |
| Streaming | SSE parsing | streamText() | Typed events for text, tools, and nested agents |
| Tool approval | Build it yourself | Not built-in | Per-tool needsApproval with callbacks |
| Provider support | One at a time | Multi-provider | Multi-provider, zero-config from env vars |