Omnara : un harnais d’agents durable open source avec journal d’événements Postgres
Omnara est une API open source pour exécuter des agents IA durables. Vous créez un agent avec un appel API, et Omnara exécute la boucle de l'agent, fournit des sandboxes pour l'exécution de commandes, et gère les secrets, les permissions et le RBAC. C'est une alternative auto-hébergeable aux agents managés de Claude et à l'API Agents d'OpenAI.
Architecture : journal d'événements Postgres + workers sans état
La plupart des harnais (Claude Code, Codex, OpenCode, Pi, Goose) conservent la boucle de l'agent dans un seul processus de longue durée avec un journal JSONL ou SQLite. Omnara stocke plutôt chaque entrée, sortie de modèle et appel d'outil sous forme de lignes typées dans un journal d'événements Postgres en ajout seul.
La boucle s'exécute sur des workers sans état dans le plan de contrôle. Chaque worker exécute une itération — un appel de modèle ou ses appels d'outils — puis libère l'agent et met en file d'attente l'itération suivante via Postgres. N'importe quel worker libre la prend en charge, de sorte que les itérations peuvent s'exécuter sur différentes machines. Chaque itération est validée dans une seule transaction ; si un worker meurt en cours d'itération, rien n'est validé, son bail expire et un autre worker réessaie. Les agents en attente d'un utilisateur, d'un outil ou d'une nouvelle tentative ne détiennent aucun worker, de sorte qu'un seul worker peut multiplexer des milliers d'agents.
Machines et le démon omnarad
Les workers qui exécutent la boucle de l'agent ne sont pas là où les commandes s'exécutent. N'importe quelle machine macOS ou Linux peut exécuter un petit démon (omnarad) qui se connecte en sortie à Omnara — aucun port entrant n'est nécessaire. L'agent dispose alors d'outils pour cette machine, comme l'exécution de commandes ou l'édition de fichiers. Un agent peut avoir plusieurs machines attachées ; par exemple, un laptop et une sandbox cloud. Lorsque le laptop passe hors ligne, l'agent peut récupérer les dernières modifications dans la sandbox et continuer là-bas.
Démarrage rapide (Omnara Cloud)
Connectez-vous sur app.omnara.com. Votre premier projet inclut un fournisseur de modèle (omnara-openrouter) et un pool de sandboxes managé (default-pool). Enregistrez ceci sous agent.yaml :
version: v1
instruction: |
You are an engineering assistant. Use your machine to run commands.
model:
provider_config: omnara-openrouter
name: anthropic/claude-fable-5.1
machine_sources:
- machine_pool_name: default-pool
Lancez avec la CLI (Node.js 22+) :
npx omnara agents launch --file agent.yaml \
--name "Machine assistant" \
--message "Report this machine's operating system and free disk space."
Discutez avec npx omnara agents chat <agent-id>, ou ouvrez le tableau de bord pour suivre les appels d'outils et répondre.
Auto-hébergement
Nécessite Docker avec Compose :
git clone https://github.com/omnara-ai/omnara.git
cd omnara
docker compose -f compose.yaml --profile app up -d
Ouvrez http://localhost:8000 et inscrivez-vous. Le développement local imprime le lien de vérification dans docker compose logs api, donc aucun fournisseur d'e-mail n'est nécessaire. Une nouvelle instance n'a ni modèles ni machines ; ajoutez un fournisseur de modèle et un modèle dans la console, connectez cet ordinateur sous Machines, et partagez les deux avec votre projet. Pointez la CLI vers votre instance :
npx omnara config --api-url http://localhost:8000/api/v1 --issuer-url http://localhost:8000
npx omnara login
Dans agent.yaml, utilisez vos noms de fournisseur et de modèle et remplacez machine_pool_name par machine_name: <your machine>.
SDK TypeScript
Créez une clé API dans le tableau de bord, exportez-la en tant que OMNARA_TOKEN, installez avec npm install @omnara/sdk, puis :
import { readFile } from 'node:fs/promises'
import { bearerToken, createOmnaraClient, openAgentEventStream, sdk } from '@omnara/sdk'
const client = createOmnaraClient({ auth: bearerToken(process.env.OMNARA_TOKEN!) })
const path = { orgID: 'org_...', projectID: 'proj_...' }
const config = await sdk.createAgentConfig({
client, path,
body: { source: await readFile('agent.yaml', 'utf8'), source_format: 'yaml' },
})
const launched = await sdk.createAgent({
client, path,
body: { config: config.data.id, message: "Report this machine's free disk space." },
})
for await (const event of openAgentEventStream({ client, path: { ...path, agentID: launched.data.agent.id } })) {
console.log(event)
}
L'ensemble du code est sous licence Apache 2.0 et peut être auto-hébergé sur une seule machine via Docker Compose. Il s'adresse aux développeurs qui veulent l'ergonomie des agents managés sans confier l'état et les modèles à un fournisseur hébergé.
📖 Lire la source complète : HN AI Agents
👀 See Also

Développeur Construit un Serveur MCP pour l'Intégration WhatsApp de Claude, Partage les Défis
Un développeur a créé un serveur MCP pour donner à Claude l'accès à de vraies conversations WhatsApp, découvrant que la gestion du contexte des conversations était plus délicate que prévu et nécessitait une base de données pour suivre les conversations.

git-courer : Un serveur MCP qui oblige les agents IA à rédiger des messages de commit Git appropriés
git-courer est un serveur MCP local en Go qui intercepte les diffs des agents de codage IA et les traduit en messages de commit structurés et lisibles avec les sections POURQUOI et QUOI.

Bitcoin MCP Server avec 43 Outils pour Agents d'IA de Codage
bitcoin-mcp est un serveur MCP avec 43 outils Bitcoin incluant des conseillers de frais, l'analyse du mempool et la détection d'inscriptions. Il fonctionne avec Claude Desktop, Claude Code, Cursor, VS Code et Windsurf en utilisant des données en direct d'APIs ou de nœuds locaux.

MatchKit : Générateur de Système de Design pour les Projets Code Claude
MatchKit est un outil qui génère des systèmes de design complets et personnalisés pour les projets développés avec Claude Code. Il extrait les couleurs de la marque à partir des logos téléchargés et génère des composants, des mises en page et des jetons de design personnalisables pour éviter l'apparence générique courante avec les outils de codage IA.