API Reference
Complete API reference for the AssistMe Agent SDK
API Reference
Agent
The core primitive. An LLM configured with instructions, tools, and guardrails.
new Agent(config)
import { Agent } from 'assistme-agent-sdk'
const agent = new Agent({
name: string, // Required. Unique identifier.
model: ModelProvider, // Required. The model to use.
instructions: string | InstructionFn, // Required. System prompt or dynamic function.
tools?: Tool[], // Optional. Available tools.
guardrails?: GuardrailConfig, // Optional. Input/output guardrails.
memory?: MemoryConfig, // Optional. Persistent memory.
handoffs?: Agent[] | HandoffConfig[], // Optional. Handoff targets.
hooks?: AgentHooks, // Optional. Lifecycle hooks.
modelParams?: ModelParams, // Optional. Temperature, maxTokens, etc.
maxTurns?: number, // Optional. Max tool-call iterations.
output?: z.ZodType, // Optional. Structured output schema.
limits?: AgentLimits, // Optional. Token/cost budgets.
fallbackModels?: ModelProvider[], // Optional. Fallback models.
context?: ContextConfig, // Optional. Compaction, caching settings.
approvalPolicy?: ApprovalPolicy, // Optional. Tool approval rules.
})agent.clone(overrides)
Create a new agent with overridden properties:
clone(overrides: Partial<AgentConfig>): Agentagent.asTool(config)
Convert the agent into a tool usable by other agents:
asTool(config: { name: string; description: string }): Toolagent.config
Read-only access to the agent's configuration:
readonly config: AgentConfigTool
Functions that agents can call.
Tool.create(config)
import { Tool } from 'assistme-agent-sdk'
const tool = Tool.create({
name: string, // Required. Tool identifier.
description: string, // Required. What the tool does.
parameters: z.ZodType, // Required. Zod schema for params.
execute: (params, context) => Promise, // Required. Implementation.
allowedAgents?: string[], // Optional. Restrict access.
requiresApproval?: boolean | Function, // Optional. Human approval gate.
timeout?: number, // Optional. Timeout in ms.
onError?: (error, params) => any, // Optional. Error handler.
})Tool.compose(config)
Build a multi-step tool from other tools:
Tool.compose({
name: string,
description: string,
parameters: z.ZodType,
steps: ToolStep[],
})Tool.group(config)
Organize related tools:
Tool.group({
name: string,
description: string,
tools: Tool[],
defaults?: Partial<ToolConfig>,
}): ToolGroupRunner
The execution engine.
Runner.run(agent, input)
Run an agent to completion:
import { Runner } from 'assistme-agent-sdk'
const result: RunResult = await Runner.run(agent, {
messages: Message[], // Required. Conversation messages.
hooks?: RunnerHooks, // Optional. Runner-level hooks.
tracer?: TraceExporter, // Optional. Trace exporter.
logger?: Logger, // Optional. Logger.
metadata?: Record<string, unknown>, // Optional. Run metadata.
retry?: RetryConfig, // Optional. Retry settings.
rateLimiter?: RateLimiter, // Optional. Rate limiter.
circuitBreaker?: CircuitBreaker, // Optional. Circuit breaker.
userId?: string, // Optional. User identifier.
})Runner.stream(agent, input)
Stream an agent's output:
const stream: AgentStream = Runner.stream(agent, {
// Same options as Runner.run
})
// Async iterator
for await (const event: StreamEvent of stream) { ... }
// Get final result
const result: RunResult = await stream.finalResult()
// Convert to SSE
const response: ReadableStream = stream.toSSE()
// Approval management
stream.approve(toolCallId: string): void
stream.deny(toolCallId: string, reason?: string): void
const manager = stream.approvalManager(): ApprovalManagerRunResult
interface RunResult {
status: 'completed' | 'max_turns_reached' | 'guardrail_blocked' | 'handoff' | 'error'
output: string // Agent's final text output
messages: Message[] // Full message history
toolCalls: ToolCallRecord[] // All tool calls made
usage: TokenUsage // Token usage breakdown
trace: RunTrace // Full execution trace
guardrailResult?: GuardrailResult // If guardrail blocked
handoffTarget?: Agent // If handoff occurred
error?: Error // If error occurred
}TokenUsage
interface TokenUsage {
inputTokens: number
outputTokens: number
totalTokens: number
cacheReadTokens?: number
cacheWriteTokens?: number
cacheHitRate?: number
contextTokens: number
contextWindow: number
compactions: number
}Guardrail
Input and output validation.
Guardrail.input(config)
import { Guardrail } from 'assistme-agent-sdk'
const guard = Guardrail.input({
name: string, // Required.
validate: (input: string, context) => GuardrailResult // Required.
})Guardrail.output(config)
const guard = Guardrail.output({
name: string, // Required.
validate: (output: string, context) => GuardrailResult // Required.
})Guardrail.parallel(guardrails)
Run multiple guardrails concurrently:
Guardrail.parallel(guardrails: Guardrail[]): GuardrailGuardrailResult
interface GuardrailResult {
allow: boolean
reason?: string
modified?: string
metadata?: Record<string, unknown>
}Memory
Persistent state management.
Memory.persistent(config)
import { Memory } from 'assistme-agent-sdk'
const memory = Memory.persistent({
store: MemoryStore, // Required. Storage backend.
namespace: string, // Required. Isolation key.
auto?: {
extract?: boolean, // Auto-extract memories. Default: false.
recall?: boolean, // Auto-load memories. Default: false.
maxRecall?: number, // Max memories to load. Default: 10.
},
indexing?: {
linkRelated?: boolean, // Link related memories. Default: false.
embedding?: boolean, // Use embeddings for search. Default: false.
decay?: { enabled: boolean; halfLife: string }, // Memory decay.
},
})Memory.stores
Memory.stores.sqlite(path: string): MemoryStore
Memory.stores.redis(options: RedisOptions): MemoryStore
Memory.stores.postgres(options: PostgresOptions): MemoryStore
Memory.stores.inMemory(): MemoryStoreMemory Instance Methods
memory.get(key: string): Promise<MemoryEntry | null>
memory.set(key: string, entry: MemoryEntry): Promise<void>
memory.search(query: string, options?: { limit?: number }): Promise<MemoryEntry[]>
memory.list(): Promise<MemoryEntry[]>
memory.delete(key: string): Promise<void>MemoryEntry
interface MemoryEntry {
type: 'semantic' | 'episodic' | 'procedural'
content: string
metadata?: Record<string, unknown>
createdAt?: Date
updatedAt?: Date
relevanceScore?: number
}Providers
Claude
import { claude } from 'assistme-agent-sdk-provider-claude'
claude(modelId: string, options?: {
apiKey?: string,
baseUrl?: string,
maxRetries?: number,
}): ModelProviderOpenAI
import { openai } from 'assistme-agent-sdk-provider-openai'
openai(modelId: string, options?: {
apiKey?: string,
baseUrl?: string,
organization?: string,
}): ModelProviderGemini
import { gemini } from 'assistme-agent-sdk-provider-gemini'
gemini(modelId: string, options?: {
apiKey?: string,
}): ModelProviderOpenAI-Compatible
import { openaiCompatible } from 'assistme-agent-sdk-provider-openai-compatible'
openaiCompatible(modelId: string, options: {
baseUrl: string,
apiKey?: string,
}): ModelProviderModelProvider Interface
interface ModelProvider {
name: string
generate(request: ModelRequest): Promise<ModelResponse>
stream(request: ModelRequest): AsyncGenerator<ModelStreamEvent>
supports?(feature: ProviderFeature): boolean
}
type ProviderFeature = 'tool_use' | 'streaming' | 'structured_output' | 'vision' | 'extended_thinking'Orchestration
Pipeline.create(steps)
import { Pipeline } from 'assistme-agent-sdk'
const pipeline = Pipeline.create(steps: PipelineStep[])
await pipeline.run(input: string): Promise<RunResult>Parallel.run(tasks, options?)
import { Parallel } from 'assistme-agent-sdk'
const results = await Parallel.run(
tasks: ParallelTask[],
options?: { aggregate?: (results) => Promise<RunResult> }
): Promise<RunResult[]>Router.create(config)
import { Router } from 'assistme-agent-sdk'
const router = Router.create({
model: ModelProvider,
routes: RouteConfig[],
fallback?: Agent,
})
await Router.run(router, input): Promise<RunResult>MCP Integration
MCPToolProvider.connect(config)
import { MCPToolProvider } from 'assistme-agent-sdk/mcp'
const provider = await MCPToolProvider.connect({
transport: 'stdio' | 'sse',
command?: string,
args?: string[],
env?: Record<string, string>,
url?: string, // For SSE transport
})
provider.tools(filter?: { include?: string[]; exclude?: string[] }): Tool[]
provider.disconnect(): Promise<void>Sandbox
Sandbox.create(config)
import { Sandbox } from 'assistme-agent-sdk'
const sandbox = Sandbox.create({
type: 'container' | 'microvm' | 'wasm',
image?: string,
limits: {
memory: string,
cpu?: string,
timeout: number,
network: boolean | NetworkPolicy,
filesystem?: FilesystemPolicy,
},
hermetic?: boolean,
monitoring?: SandboxMonitoring,
})
await sandbox.run(code: string, options?: {
language?: string,
stdin?: string,
env?: Record<string, string | SecretRef>,
}): Promise<SandboxResult>Testing
TestRunner
import { TestRunner, MockModel } from 'assistme-agent-sdk/testing'
const mockModel = new MockModel(responses: MockResponse[])
const result = await TestRunner.run(agent, input)EvalRunner
import { EvalRunner, EvalDataset, EvalCriteria } from 'assistme-agent-sdk/eval'
const dataset = EvalDataset.fromJSON(entries)
const results = await EvalRunner.run(agent, dataset, options)
await EvalRunner.consistency(agent, config)
await EvalRunner.safety(agent, config)Types
Message
interface Message {
role: 'user' | 'assistant' | 'system'
content: string | ContentBlock[]
}
type ContentBlock =
| { type: 'text'; text: string }
| { type: 'image'; source: ImageSource }
| { type: 'tool_use'; id: string; name: string; input: unknown }
| { type: 'tool_result'; tool_use_id: string; content: string }StreamEvent
type StreamEvent =
| { type: 'run_start'; runId: string; agent: string }
| { type: 'text_delta'; delta: string }
| { type: 'text_done'; text: string }
| { type: 'tool_call_start'; id: string; name: string }
| { type: 'tool_call_args_delta'; id: string; delta: string }
| { type: 'tool_call_done'; id: string; name: string; args: unknown }
| { type: 'tool_result'; id: string; name: string; result: unknown }
| { type: 'tool_approval_required'; id: string; name: string; args: unknown }
| { type: 'guardrail_triggered'; guardrail: string; phase: 'input' | 'output'; allow: boolean; reason?: string }
| { type: 'handoff'; from: string; to: string; reason?: string }
| { type: 'agent_start'; agent: string }
| { type: 'agent_end'; agent: string }
| { type: 'memory_recall'; memories: MemoryEntry[] }
| { type: 'memory_extract'; entries: MemoryEntry[] }
| { type: 'turn_start'; turn: number }
| { type: 'turn_end'; turn: number }
| { type: 'run_end'; runId: string; status: RunStatus; usage: TokenUsage }
| { type: 'error'; error: Error }RunTrace
interface RunTrace {
runId: string
agent: string
status: RunStatus
startedAt: string
completedAt: string
durationMs: number
turns: TraceTurn[]
usage: TokenUsage
guardrails: GuardrailTraceEntry[]
handoffs: HandoffTraceEntry[]
approvals: ApprovalTraceEntry[]
}