Cogitator
Core

Agents

Configure and run AI agents with tools, instructions, and model parameters.

Overview

An Agent is a configured LLM instance with a name, system prompt, tools, and model parameters. Agents are stateless blueprints -- the Cogitator runtime handles execution, memory, and lifecycle.

import { Agent } from '@cogitator-ai/core';

const agent = new Agent({
  name: 'researcher',
  model: 'anthropic/claude-sonnet-4-20250514',
  instructions: 'You are a research assistant. Find accurate information and cite sources.',
});

AgentConfig

interface AgentConfig {
  id?: string;
  name: string;
  description?: string;
  model: string;
  provider?: string;
  instructions: string;
  tools?: Tool[];
  temperature?: number; // default: 0.7
  topP?: number;
  maxTokens?: number;
  stopSequences?: string[];
  responseFormat?: ResponseFormat;
  maxIterations?: number; // default: 10
  timeout?: number; // default: 120000 (2 min)
}

Model String Format

The model field uses a provider/model-name convention to route to the correct backend:

model: 'openai/gpt-4o';
model: 'anthropic/claude-sonnet-4-20250514';
model: 'ollama/llama3.3:latest';
model: 'google/gemini-2.5-flash';

If you omit the provider prefix, Cogitator uses the defaultProvider from your runtime config.

Provider Override

For OpenAI-compatible APIs (OpenRouter, local vLLM, etc.), use the provider field to explicitly route:

const agent = new Agent({
  name: 'openrouter-agent',
  model: 'meta-llama/llama-3.3-70b-instruct',
  provider: 'openai',
  instructions: '...',
});

Agent with Tools

import { Agent, tool } from '@cogitator-ai/core';
import { z } from 'zod';

const searchWeb = tool({
  name: 'search_web',
  description: 'Search the internet for current information',
  parameters: z.object({
    query: z.string().describe('The search query'),
    limit: z.number().default(5),
  }),
  execute: async ({ query, limit }) => {
    const results = await searchAPI.search(query, limit);
    return results.map((r) => ({ title: r.title, url: r.url }));
  },
});

const researcher = new Agent({
  name: 'researcher',
  model: 'openai/gpt-4o',
  instructions: 'You are a research assistant. Use tools to find accurate information.',
  tools: [searchWeb],
  maxIterations: 15,
});

The agent loops up to maxIterations times. Each iteration the LLM may call tools or produce a final response. The loop ends when the LLM responds without tool calls.

Agent with Structured Output

Force the LLM to respond with a specific JSON shape using Zod schemas:

const analyzer = new Agent({
  name: 'analyzer',
  model: 'openai/gpt-4o',
  instructions: 'Analyze the given text and extract structured information.',
  responseFormat: {
    type: 'json_schema',
    schema: z.object({
      summary: z.string(),
      sentiment: z.enum(['positive', 'negative', 'neutral']),
      keyPoints: z.array(z.string()),
    }),
  },
});

See Structured Outputs for details on json and json_schema modes.

Cloning Agents

Create variations of an agent with clone():

const baseAgent = new Agent({
  name: 'coder',
  model: 'anthropic/claude-sonnet-4-20250514',
  instructions: 'You are a senior software engineer.',
  temperature: 0.3,
});

const creativeAgent = baseAgent.clone({
  name: 'creative-coder',
  temperature: 0.9,
});

const fastAgent = baseAgent.clone({
  model: 'anthropic/claude-haiku',
});

Serialization

Agents can be serialized to JSON for storage and restored later:

const snapshot = agent.serialize();
await fs.writeFile('agent.json', JSON.stringify(snapshot, null, 2));

Restore with a tool registry to re-attach tool implementations:

const snapshot = JSON.parse(await fs.readFile('agent.json', 'utf-8'));
const restored = Agent.deserialize(snapshot, {
  tools: [searchWeb, readUrl],
});

Tools are stored by name in the snapshot. During deserialization, each tool name is resolved from the provided tools array or toolRegistry.

Agents as Tools

Wrap an agent as a tool so other agents can delegate to it:

import { agentAsTool } from '@cogitator-ai/core';

const researchTool = agentAsTool(cogitator, researcher, {
  name: 'research',
  description: 'Delegate a research task to the research agent',
});

const orchestrator = new Agent({
  name: 'orchestrator',
  model: 'openai/gpt-4o',
  instructions: 'You coordinate tasks. Use the research tool for information gathering.',
  tools: [researchTool],
});

Temperature Guidelines

Use CaseTemperatureNotes
Code generation0.0 -- 0.2Deterministic, correct code
Planning / classification0.2 -- 0.4Consistent but flexible
General assistant0.5 -- 0.7Balanced (default: 0.7)
Creative writing0.8 -- 1.2More varied output
Brainstorming1.0 -- 1.5Maximum creativity

On this page