noir() configuration
Complete field reference for the concise provider-native agent constructor.
noir(config) returns an AgentRuntime. Construction is synchronous and performs no network or database I/O.
type NoirConfig = {
id: string
name?: string
description?: string
instructions: SystemPrompt
personality?: AgentPersonality
prompts?: readonly PromptModule[]
model: ModelAdapter | ProviderModel
channels: Readonly<Record<string, ChannelAdapter>>
connectors?: Readonly<Record<string, NoirConnector>>
tools?: Readonly<Record<string, NoirTool | NoirToolGroup>>
database?: RuntimeStore
memory?: MemoryAdapter
sandbox?: Sandbox
plugins?: readonly NoirPlugin[]
policy?: Readonly<Record<string, PolicyRule>>
limits?: AgentLimits
onEvent?: (event: RuntimeEvent) => void | Promise<void>
}Identity and prompt
id is the stable state namespace. name and description are display metadata. instructions is a string or function receiving actor, channel, recalled memories, and current time. personality contributes role, tone, traits, style, and additional instructions. Conditional prompt modules can add focused context.
Runtime dependencies
model accepts a Noir ModelAdapter or provider-native AI SDK model. channels is required and keyed by the normalized channel names used in events. database defaults to an in-memory runtime store.
Agent resources
connectors are named external clients and tools. memory enables recall plus memory tools. sandbox is a first-class capability with scoped files and optional execution. plugins add optional behavior bundles. tools is an escape hatch for standalone functions or one-level groups.
Policy
Plugin policy is namespaced by plugin name. Top-level policy is merged last and can override assembled rules. Patterns address normalized tool names.
Limits
type AgentLimits = {
maxSteps?: number
maxOutputRepairs?: number
identicalToolFailureLimit?: number
historyMessages?: number
runTimeoutMs?: number
deliveryTimeoutMs?: number
toolResultBytes?: number
}Set limits explicitly for production. They bound loops and payloads; they do not replace provider-side quotas.