Doctum Code Agent — l'agent de code spécialisé en cybersécurité
Ce que c'est. Un système d'agents de code — chacun sur son propre modèle LLM, choisi et mesuré rôle par rôle — dont la raison d'être est la cybersécurité : auditer du code pour ses failles, imposer le secure-by-default, tracer pour la conformité, épauler une revue de sécurité autorisée. Le développement assisté n'est qu'une de ses faces.
Défensif et autorisé, jamais offensif. Le produit aide à trouver et corriger des failles, à sécuriser, à se conformer — pour du code qu'on a le droit d'auditer. Il n'aide pas à attaquer des tiers, à contourner une protection, ni à produire un logiciel malveillant. Cette frontière est écrite dans les CGU et imposée dans les fiches de rôle côté serveur, que le client ne peut pas modifier.
Ce dépôt porte le cœur (doctum_agent) : la boucle d'orchestration, les fiches de rôle,
l'attelage (quel modèle pour quel rôle), le cockpit terminal, et le service d'accueil de
l'architecture live. Le client mince en Rust vit dans doctum-code-agent-rust. La façade VS Code
vit dans doctum-ai-ide-mvp.
Le produit en une page — et comment il se vend
Les trois piliers de vente
| Pilier | Ce qu'on démontre | Comment on le prouve |
|---|---|---|
| Cybersécurité | exécution contrôlée, auditée, révocable | le plan de contrôle serveur (architecture live) |
| Attelage mesuré | le bon modèle pour chaque rôle, prouvé | le banc de benchmark, publié |
| Performance | plus rapide à réglage égal | le cœur en Rust, chronométré |
La douve : ce qui a de la valeur, et pourquoi
L'actif du produit n'est pas le code de la boucle (quelques centaines de lignes d'orchestration, réécrites en une semaine par quelqu'un de compétent). C'est l'attelage mesuré : quel modèle tient quel rôle, à quel coût, avec quelle fiabilité — issu de campagnes de benchmark entières (des centaines d'exécutions, une douzaine de dollars chacune, répétées sur des semaines). Personne ne peut le refaire sans dépenser ce qu'on a dépensé et sans avoir construit le banc qui le produit.
La protection ne repose donc pas sur l'opacité d'un binaire (un binaire se désassemble), mais sur le fait que la douve ne soit pas chez le client : dans l'architecture live, la boucle et l'attelage vivent sur le serveur ; le client ne voit que les ordres d'outils à exécuter.
Deux versions, un seul cœur mesuré
| Basique (local) | Cybersécurité (contrôlé, live) | |
|---|---|---|
| Où tourne la boucle | sur la machine du client | sur le serveur, en liaison WebSocket |
| Mode hors ligne | oui — repli 7 jours | non, par conception (c'est la garantie) |
| L'attelage | livré signé, en mémoire, marqué au compte | ne quitte jamais le serveur |
| Rôles | codeur, relecteur, testeur — généralistes | + auditeur de failles, relecteur sécurité, CVE |
| Audit / politique / masquage des secrets | non | oui — le plan de contrôle |
| Public | développeur, petite équipe | client réglementé, exigence de conformité |
| Prix | l'offre courante | premium, l'option cybersécurité |
Un seul moteur mesuré derrière les deux : la boucle et l'attelage sont les mêmes, seul change où la boucle s'exécute et ce que le serveur impose autour.
Le business model — comment on facture
La vente passe par la passerelle de facturation (litellm-gateway-vps, boutique
agent.doctumconsilium.com) :
- crédit prépayé (
recharge_10 / 25 / 50) et abonnements (mensuel_19 / 49) via Stripe ; - chaque compte est un locataire avec une clé et un plafond ; aucun compte n'est sans plafond, l'administrateur compris. La consommation de modèle est comptée et bornée par le plafond ;
- les appels de modèle sont facturés au compte du client, sur sa propre clé (par session, jamais une clé globale partagée) ;
- l'attelage est un service : il s'améliore à chaque campagne de banc, sans que le client réinstalle. C'est ce qui rend le rythme de livraison directement monétisable ;
- la version cybersécurité facture l'architecture elle-même : chaque action autorisée par une politique avant exécution, piste d'audit infalsifiable, masquage centralisé des secrets, moindre privilège, révocation instantanée — ce qu'un binaire local ne peut pas garantir, et ce qu'un client réglementé réclame.
Le business model de la plateforme (au sens large, tous produits) est décrit côté passerelle :
litellm-gateway-vps/docs/modele-economique.
L'architecture live, en deux rôles nets
| Côté serveur (la douve, invisible au client) | Côté client (un exécuteur mince) |
|---|---|
| la boucle du contrôleur — quoi faire, dans quel ordre | recevoir un ordre d'outil et l'exécuter sur sa machine |
| l'attelage — quel modèle pour quel rôle | lire un fichier, lancer une commande, renvoyer le résultat |
| les fiches de rôle et leurs consignes de sécurité | afficher à l'utilisateur ce qui se passe |
| le RAG cybersécurité (corpus de documents) | (ne voit ni le corpus, ni les modèles, ni les consignes) |
Le fil de la session est un canal WebSocket : le serveur pilote, le client exécute et rapporte. Le client ne voit jamais quel modèle a été appelé, avec quelle consigne, ni pourquoi. Le client Rust est idéal ici : quelques milliers de lignes, sans dépendance, démarrage instantané, et vide de secret — même parfaitement désassemblé, il ne livre rien.
Le récit complet du produit, des arbitrages et de la séquence de livraison : docs/plans/2026-08-04-agent-cyber-live-et-rag.md.
Où aller, selon ce que tu cherches
| Tu veux… | Va voir |
|---|---|
| comprendre le produit et son business model | cette page, section ci-dessus |
| l'essayer maintenant (version basique, local) | ONBOARDING.md |
| l'exploiter : ce qui tourne, où, en prod | INFRASTRUCTURE.md |
| le client Rust (version cybersécurité) | dépôt doctum-code-agent-rust |
| la vente / facturation | dépôt litellm-gateway-vps (boutique, crédits, Stripe) |
| modifier le code, comprendre l'intérieur | docs/ARCHITECTURE.md |
| savoir où on en est | ROADMAP.md · docs/SESSION-STATE.md |
État des clients — 2026-08-08
doctum-agent 0.5.3est le correctif à installer pour l'édition gratuite : il explique à une installation ancienne comment se mettre à jour, au lieu d'afficher un faux refus de licence. Les versions0.0.0,0.5.0et0.5.1sont retirées du choix automatique de PyPI.doctum-pro 0.1.9est publié : Linux, macOS et Windows sont signés dans Nexus, etstable/latest.jsonpropose cette version. Le tagv0.1.8reste une livraison incomplète non proposée automatiquement.- L'extension VS Code
0.4.0garde un historique local par espace de travail. Elle propose soit les modèles personnels (édition gratuite), soit la gateway LiteLLM Doctum ; les préréglages ne sont appliqués qu'à la demande, pour un compte administrateur vérifié.
Le serveur doctum-accueil n'est pas concerné par ces changements de clients : aucun nouveau
déploiement Kubernetes n'est requis pour les utiliser.
Réglages administrés des éditions payantes
Choisir BYOK ou Gateway dans Doctum Agent
Après doctum --connexion toi@exemple.fr, Doctum conserve seulement un jeton de renouvellement
opaque dans le coffre local ~/.doctum/credentials (permissions 0600). La clé virtuelle LiteLLM,
les budgets et le catalogue interne restent côté serveur. Choisis ensuite explicitement :
doctum # Agent BYOK local, toujours disponible, sans conteneur
doctum --edition gateway # Gateway Doctum si abonnement actif et crédits disponibles
Quand l'abonnement se termine, Gateway disparaît automatiquement et l'outil revient à BYOK. Quand
l'abonnement est actif mais le solde à zéro, Gateway reste visible mais refuse l'envoi avec un lien
de recharge. doctum-pro est distinct : lui seul impose Docker ou Podman et n'accepte jamais BYOK.
Le cockpit doctum-comptes est l'autorité des réglages Pro : catalogue de modèles, profils,
niveaux de créativité, politique d'outils et disponibilité RAG. doctum-accueil lit ce contrat
versionné avec un jeton de produit interne et ne transmet aux clients que les choix autorisés. Ni
clé de fournisseur, ni budget LiteLLM, ni secret d'administration ne sortent du cluster.
Si le cockpit est temporairement indisponible, la réponse indique disponible: false sans
inventer de modèle ou de préréglage ; une session déjà ouverte reste utilisable. Cette intégration
est livrée localement et n'est pas encore déployée.
Quand le catalogue active RAG, l'accueil récupère le tenant depuis la facturation après
validation de la clé puis l'impose à la requête vectorielle. Ni la tâche, ni le modèle, ni un
client ne peuvent modifier ce périmètre ; les passages sont toujours encadrés comme données non
fiables avant le raisonnement.
La version basique (locale) — référence d'usage
Tout ce qui suit décrit le socle tel qu'il tourne en local, dans le terminal. C'est la version basique, et c'est aussi le moteur que l'architecture live pilote côté serveur.
npm install -g @doctum/code-agent # ou : uv tool install doctum-agent
doctum
Le cockpit
doctum ouvre une interface plein écran qui montre, pendant que ça travaille :
- qui parle — une couleur par agent ;
- sur quel modèle — voir l'explorateur tourner sur un petit modèle pendant que l'orchestrateur tourne sur un gros ;
- ce qu'il fait — chaque appel d'outil et son résultat ;
- ce que ça coûte — jetons et dollars, à jour à chaque tour ;
- ce qu'il attend de vous — une action sensible suspend le travail et affiche la commande exacte avec son motif. Rien ne s'exécute avant votre réponse.
| Touche | Effet |
|---|---|
Entrée |
envoyer la demande |
F2 |
réglages — modèle de chaque agent, back-ends, politique, budget |
F3 |
afficher / masquer le panneau latéral |
F4 |
écrire le journal de la séance sur disque |
Ctrl+L |
effacer l'affichage (le journal de séance reste intact) |
Ctrl+Q |
quitter |
Dans la modale d'approbation : o autorise, n ou Échap refuse — refuser reste le geste le
plus facile, c'est la réponse sûre.
Les réglages, sans toucher au YAML
F2 ouvre quatre onglets : Agents & modèles, Back-ends, Clés d'API,
Politique & budget. « Enregistrer » écrit .doctum/config.yaml du projet courant. Aucune clé
n'y figure jamais : seulement le nom de la variable d'environnement.
Les clés d'API — depuis l'interface, une seule fois
F2 → Clés d'API → Entrée sur la ligne du back-end. La saisie est masquée, une clé déjà
en place n'est jamais réaffichée. Les clés vont dans ~/.doctum/credentials, en 0600, hors
de tout dépôt — c'est ce qui fait que doctum marche depuis n'importe quel répertoire.
Ordre de précédence, du plus fort au plus faible :
| Source | Quand elle gagne |
|---|---|
export DOCTUM_LLM_API_KEY=… |
toujours — l'explicite l'emporte |
.env du projet |
si l'environnement est muet |
~/.doctum/credentials |
le repli, valable partout |
Installation
Par npm (lanceur, installe le socle Python via uv au premier démarrage — pas besoin d'avoir
Python) :
npm install -g @doctum/code-agent && doctum
Par Python, depuis le dépôt privé (AWS CodeArtifact) :
bash scripts/installer-prive.sh # la dernière version
bash scripts/installer-prive.sh 0.5.0 # une version précise
doctum-agentexiste aussi sur PyPI, mais c'est un paquet vide qui ne fait que réserver le nom. Toujours--index-url(jamais--extra-index-url) pour éviter la confusion de dépendances.
Depuis un wheel GitHub, sans compte AWS :
gh release download --repo doctum-consilium/doctum-code-agent --pattern '*.whl'
uv tool install ./doctum_agent-*.whl
L'accès au dépôt privé fait l'autorisation : qui n'y a pas accès ne peut rien installer.
N'importe quel back-end, décrit dans le .env
Un back-end est un fournisseur de modèles nommé. Son kind dit comment l'atteindre :
litellm (la passerelle), lmstudio, openai_compatible (vLLM, TGI, OpenRouter), ollama,
native (Anthropic, OpenAI, DeepSeek… en direct). Aucune clé n'est jamais écrite dans un fichier
suivi par git : le back-end nomme sa variable d'environnement et le socle la lit.
Les agents livrés, et leur modèle
Chaque agent pointe vers un rôle, et chaque rôle vers un couple (back-end, modèle) — c'est
l'attelage. Voir le routage réel : doctum --show-config.
| Agent | Rôle | Modèle par défaut | Ses outils |
|---|---|---|---|
orchestrator |
orchestrator |
bedrock-claude-opus-4-6 |
tous, dont la délégation |
coder |
coder |
bedrock-claude-sonnet-4-5 |
lecture, écriture, patch, shell |
explorer |
explorer |
bedrock-qwen3-coder-30b-a3b |
lecture seule |
reviewer |
reviewer |
scw-glm-5.2 |
lecture + shell, pas d'écriture |
tester |
tester |
bedrock-claude-haiku-4-5 |
lecture + shell |
security |
security |
bedrock-gpt-oss-safeguard-120b |
lecture + shell |
docs |
docs |
scw-mistral-medium-3.5 |
lecture + écriture |
Un agent qui n'a pas d'outil d'écriture ne peut pas écrire, quoi qu'il en décide. La spécialisation est structurelle, pas déclarative.
Pourquoi plusieurs modèles, et pas un seul
- Le rôle dicte la classe de modèle. Fouiller un dépôt et concevoir une architecture ne demandent pas la même puissance — ni le même prix.
- Les erreurs se décorrèlent. Le relecteur tourne délibérément sur un modèle d'un autre fournisseur que le codeur : un modèle valide ses propres angles morts (vérifié par un test).
- La fenêtre reste propre. Un délégué ne voit que sa consigne, jamais l'historique du parent.
Sécurité (du socle lui-même)
- Prison de chemins : tout accès est résolu puis vérifié sous la racine — liens symboliques compris.
- Classement des commandes, segment par segment (
ls; rm -rf ~est refusé). - Trois crans :
read_only,workspace_write(défaut),full_access; réseau refusé horsfull_access. - Trois verdicts : autorisé / à confirmer / refusé. L'inconnu demande au lieu de bloquer.
- Budget dur : tours, jetons et coût, partagé avec les délégués.
- Tout contenu tiers (fichier lu, sortie shell, page web, passage RAG) est encadré anti-injection avant d'entrer dans la fenêtre du modèle.
Modèle de menace complet : docs/SECURITE.md.
Personnaliser sans forker
- Les modèles —
.doctum/config.yaml(surcharge partielle d'un back-end, rôle → modèle,fallback,approval_mode,max_cost_usd). - Les agents —
.doctum/agents/<nom>.md(frontmatter + corps = prompt système ; un fichier qui reprend le nom d'un agent livré le remplace). - La mémoire du projet —
AGENTS.md/CLAUDE.md(toujours injectés) ;.doctum/microagents/*.md(injectés seulement si la demande contient un de leurs mots-clés).
Tests
bash scripts/ci_local.sh # miroir de la CI : tests, ruff, couverture
pytest -q --cov=doctum_agent # les tests seuls
Aucun test ne fait d'appel LLM réel, ni la moindre requête réseau. LLMClient accepte une
completion_fn injectable ; les tests lui passent un modèle scripté. Toute la boucle est exercée —
délégation, approbations, budget, mémoire, canal live — plus le cockpit via le pilote Textual.
Documentation
| Document | Niveau | Pour qui |
|---|---|---|
| ONBOARDING.md | prise en main | quiconque veut l'essayer |
| docs/FONCTIONNALITES.md | fonctionnel | ce que l'outil fait |
| docs/ARCHITECTURE.md | technique | qui va modifier le code |
| INFRASTRUCTURE.md | exploitation | ce qui tourne en prod, et comment diagnostiquer |
| ROADMAP.md | journal | ce qui a été livré, quand, et ce qui reste |
| docs/plans/ | mémoire | ce qu'on a tenté, pourquoi, et ce qu'on a appris |
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file doctum_agent-0.5.3-py3-none-any.whl.
File metadata
- Download URL: doctum_agent-0.5.3-py3-none-any.whl
- Upload date:
- Size: 284.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0984af96cc57b96e7630df795a266a80a6775d0a7ec82df2acaeeee3efd80f19
|
|
| MD5 |
54e2208983189454fbb631460da7e479
|
|
| BLAKE2b-256 |
c9feafd5a98cd46a81fd462b21c9233a2725016ac84e824c570084673522d430
|