← Projets

Arche

CLI auto-hébergé qui relie un ticket Jira à une merge request GitLab via un pipeline plan → exécution → revue avec validations humaines. Le code tourne dans des sandbox Docker par exécution ; les appels LLM passent par OpenRouter.

Année
2026
Rôle
Créateur solo
Durée
~3 semaines (9 avr – 1er mai 2026)
Équipe
Solo
Liens

Contexte

Faire tourner une boucle planification → code → revue sur un ticket Jira sans dépendre d'un SaaS d'agents. Tout doit tourner sur un VPS que l'opérateur contrôle, avec isolation Docker autour de l'exécution du code et approbation humaine aux étapes importantes.

Ce que j'ai fait

  • Architecture en 3 processus (CLI, serveur Fastify, worker Node) partageant une base SQLite via better-sqlite3 + Drizzle
  • Machine à états plan / exécution / revue avec cycles bornés, réessai automatique sur changements de relecteur, délais sur les approbations humaines
  • Cycle de vie de la sandbox Docker avec liste blanche de commandes tokenisées (pas d'échappement shell implicite)
  • Orchestration Jira + GitLab + GitHub avec authentification git distante
  • 18 fichiers vitest couvrant policy, sandbox, SQLite, lease/heartbeat, flux manual-run

Résultats

  • Démontrable de bout en bout sur la machine de l'auteur : ticket Jira → branche + commits → merge request GitLab
  • Sandbox durcie par défaut : rootfs read-only, no_new_privileges, liste blanche de commandes tokenisées
  • Liste blanche de commandes tokenisées (sans shell) qui empêche les échappements du type pnpm test && rm -rf /
  • Lease/heartbeat du worker pour la concurrence sûre sur SQLite partagé
  • Liaison réseau en refus par défaut : le serveur refuse de démarrer sur un hôte non-loopback sans ARCHE_SERVER_AUTH_TOKEN

Fonctionnalités clés

  • CLI avec assistant arche init, vérifications arche doctor, et arche runs manual <KEY> pour déclencher une exécution
  • API HTTP Fastify (~15 endpoints) protégée par jeton bearer, avec un webhook Jira en entrée
  • Tableau de bord web React 19 + daisyUI pour suivre les exécutions, approuver les plans, consulter diffs et logs
  • Sandbox Docker par exécution (rootfs read-only, cap_drop ALL, no_new_privileges, limites pids/mémoire/CPU) avec liste blanche de commandes tokenisées (pas de shell)
  • Machine à états plan / exécution / revue avec max_review_cycles borné et validations humaines
  • Profils d'exécution multi-modèles (planner / executor / reviewer) via OpenRouter

Stack

  • TypeScript
  • Node.js
  • Fastify
  • SQLite
  • Drizzle ORM
  • Docker
  • OpenRouter
  • Agents IA
  • Jira API
  • GitLab API
  • CLI
  • Vite
  • Auto-hébergé
  • Automatisation DevOps