NOIR
Reference

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.

On this page