Agent SDKs
npm install @e-volv/agents for Node.js, pip install evolv-agents for Python. Agents already on OpenTelemetry need neither: the quickstart shows the collector route, and runs look the same either way.
Two thin packages for agents that are not on OpenTelemetry. Both are built on the e-volv logs SDKs, so a service that already logs through e-volv gets agent runs on the same trace with nothing new to configure. Every span they emit carries the attributes the rollup reads.
| Package | Gives you |
|---|---|
@e-volv/agents (Node.js) | init, traceAgent, traceChat, traceTool, withSession, withPrompt, instrumentOpenAI, instrumentAnthropic, traceMcp, aiMiddleware (Vercel AI SDK) |
evolv-agents (Python) | init, agent, chat, tool, session, prompt, instrument_openai, instrument_anthropic, trace_mcp |
Content capture
Prompts, completions, tool arguments and results are recorded only when init is given content: true (Node.js) or content=True (Python). Without it a run carries tokens, cost and structure, and cannot be replayed.
Node.js
import {
init,
instrumentOpenAI,
traceAgent,
traceTool,
withSession,
} from '@e-volv/agents';
init({
key: process.env.EVOLVE_AGENTS_KEY,
url: 'https://api.e-volv.io/api/public/v1/logs',
service: 'support-bot',
});
const openai = instrumentOpenAI(new OpenAI());
await withSession({ sessionId, userId }, () =>
traceAgent('triage', async () => {
const res = await openai.chat.completions.create({
model: 'gpt-5-mini',
messages,
});
await traceTool('read_ticket', () => tickets.read(id));
return res.choices[0].message.content;
})
);withPrompt and prompt stamp the prompt name and version on every span inside them, so each version on the prompts page shows the cost and score of the runs that used it.