v0.3 OPEN SOURCE · SELF-HOSTED
Your agent.
Your rules.
The missing runtime between an AI demo and an agent you can trust. Bring any model, database, memory, sandbox, and tools. Noir makes the work durable.
01ONE FILEStart useful. Stay legible.
02ANY STACKUse the SDKs you already chose.
03YOUR DATARun it on your infrastructure.
agent.ts
import { noir } from '@noir-agent/agent'
import { openrouter } from '@openrouter/ai-sdk-provider'
export default noir({
model: openrouter('anthropic/claude-sonnet-4'),
personality: 'Sharp, funny, never corporate.',
database: db,
memory: supermemory({ client }),
sandbox: e2b({ apiKey }),
plugins: [stripe({ client })],
})
import { slack } from '@noir-agent/agent/channels/slack'
export default noir({
channels: {
slack: slack({
token: env.SLACK_BOT_TOKEN,
signingSecret: env.SLACK_SIGNING_SECRET,
}),
},
})
const result = await noir.run(
'refund-order',
() => stripe.refunds.create(
{ payment_intent: paymentId },
{ idempotencyKey: noir.executionId },
),
)
await noir.ask({
title: 'Approve this refund?',
details: result.summary,
})
READYMEMORYSANDBOXAPPROVALSLOOPS