Agent IA Autonome de Codage et d'Administration Système
Développé par TEJF - L'Aigle de la Justice
- Vue d'Ensemble
- Fonctionnalités Clés
- Architecture
- Prérequis
- Installation
- Configuration
- Utilisation
- Système d'Autorisation
- Outils Disponibles
- Sécurité
- Commandes Slash
- Exemples d'Utilisation
- Développement
- Dépannage
- Licence
NEMESIS CLI est un agent IA autonome de nouvelle génération conçu pour automatiser des tâches complexes sur les systèmes Linux. Il combine une intelligence artificielle avancée avec des capacités d'exécution système contrôlée, offrant une expérience utilisateur fluide et sécurisée.
- Exécution de commandes système contrôlée et sécurisée
- Manipulation intelligente de fichiers (lecture, écriture, recherche/remplacement)
- Gestion de processus et tâches en arrière-plan
- Support du Model Context Protocol (MCP)
- Interface terminal moderne avec Rich et prompt_toolkit
- Streaming temps réel des sorties de commandes
- Gestion interactive des commandes nécessitant des entrées utilisateur
NEMESIS implémente un système de confirmation avant chaque exécution d'outil :
y: Autoriser une seule foisn: Refuser l'exécutiona: Autoriser pour toute la session
Ce système garantit que l'utilisateur a un contrôle total sur les actions effectuées par l'IA.
L'interface permet désormais de coller du texte directement dans la barre de saisie :
- Ctrl+V : Coller depuis le presse-papiers
- Support natif via
InMemoryClipboard - Intégration transparente avec prompt_toolkit
Les commandes Bash sont exécutées avec :
- Affichage instantané des sorties
- Détection automatique des prompts interactifs (sudo, read, etc.)
- Affichage des 10 dernières lignes de contexte pour aider l'utilisateur
- Conversion automatique de
sudoensudo -Spour la lecture depuis stdin
NEMESIS supporte plusieurs formats de réponse :
- JSON strict (format principal)
- YAML
- JSON relaxé
- Blocs nus
- XML
- Regex fallback
nemesis-cli/
├── agent.py # Point d'entrée principal
├── action_parser.py # Parseur multi-niveaux des réponses IA
├── tools.py # Exécuteur d'outils principal
├── tools_schema.py # Schéma centralisé des outils disponibles
├── bridge_client.py # Client pour la communication avec l'IA
├── uploader.py # Gestion des uploads de fichiers
├── config.yaml # Configuration locale (non commité)
├── mcp_config.yaml # Configuration MCP (non commité)
├── prompt_system.txt # Prompt système pour l'IA
├── install.sh # Script d'installation
├── requirements.txt # Dépendances Python
├── .gitignore # Fichiers à exclure du versionnage
├── src/
│ ├── core/
│ │ ├── commands.py # Système de commandes slash
│ │ ├── default_commands.py
│ │ ├── mcp_client.py # Client MCP
│ │ ├── mcp_manager.py # Gestionnaire MCP
│ │ ├── tool_registry.py # Registre des outils
│ │ └── ...
│ └── ui/
│ ├── composer.py # Orchestration I/O
│ ├── chat_ui.py # Interface de chat
│ ├── header.py # En-têtes et bannières
│ └── theme.py # Thème Catppuccin
├── providers/
│ ├── base.py # Provider de base
│ ├── bridge.py # Provider Bridge
│ ├── nemapi_bridge.py # Provider NemAPI Bridge
│ ├── openai_compatible.py # Provider OpenAI Compatible
│ └── whisperer.py # Provider Whisperer
├── tests/ # Tests unitaires
└── tools_library/ # Bibliothèque de skills extensibles
- OS : Linux (testé sur Ubuntu, Debian, Fedora)
- Python : 3.10 ou supérieur
- Mémoire : 4 Go minimum recommandé
- Espace disque : 2 Go minimum
Toutes les dépendances sont listées dans requirements.txt :
rich>=13.0.0
prompt_toolkit>=3.0.0
pyyaml>=6.0.0
requests>=2.31.0
h11>=0.14.0
httpcore>=1.0.0
groq>=0.1.0
click>=8.0.0tree: Pour l'exploration de fichiersgit: Pour le versionnagecurl/wget: Pour les téléchargements
# 1. Cloner le dépôt
git clone https://github.com/TEJF/nemesis-cli.git
cd nemesis-cli
# 2. Créer l'environnement virtuel
python3 -m venv venv
# 3. Activer l'environnement
source venv/bin/activate
# 4. Installer les dépendances
pip install -r requirements.txt
# 5. Lancer NEMESIS
./venv/bin/python3 agent.py# Exécuter le script d'installation
chmod +x install.sh
./install.shLe script d'installation :
- Crée l'environnement virtuel
- Installe les dépendances
- Configure les fichiers de base
Le fichier de configuration principal contrôle le comportement de NEMESIS :
# Type de provider (bridge, nemapi_bridge, whisperer, openai_compatible)
provider:
type: bridge
# Configuration du Bridge (si type = bridge)
bridge:
host: 192.168.1.67
port: 8080
# Configuration de sécurité
security:
workspace: ./workspace
allowed_commands:
- ls
- cd
- cat
- grep
- find
- echo
- pwd
# Configuration MCP (optionnelle)
mcp:
enabled: true
servers:
- calculator
- filesystemConfiguration spécifique pour le Model Context Protocol :
# Liste des serveurs MCP activés
servers:
- name: calculator
command: python3 mcp_calculator.py
enabled: true
- name: filesystem
command: mcp-server-filesystem
args: [--path, ./workspace]
enabled: true# Lancer NEMESIS
./venv/bin/python3 agent.py
# Mode debug (pour le développement)
./venv/bin/python3 agent.py --debugNEMESIS propose une interface terminal moderne avec :
- Affichage coloré grâce à Rich
- Saisie intelligente avec prompt_toolkit
- Complétion automatique pour les commandes slash
- Historique des commandes
- Support du collage (Ctrl+V)
- Lancer NEMESIS :
./venv/bin/python3 agent.py - Poser une question : Par exemple, "Liste les fichiers Python dans /home/user"
- L'IA propose une action : Elle affiche le JSON de l'outil à exécuter
- Autorisation : NEMESIS demande
Autoriser ? (y=oui une fois / n=non / a=toujours autoriser) - Exécution : Si autorisé, l'outil est exécuté et le résultat est affiché
- Feedback : Le résultat est envoyé à l'IA pour la suite
Avant chaque exécution d'outil, NEMESIS demande une confirmation explicite :
⚠️ L'IA veut exécuter un outil :
Outil: bash
command: ls -la /home/user
Autoriser ? (y=oui une fois / n=non / a=toujours autoriser)
| Option | Description | Persistance |
|---|---|---|
y |
Autoriser cette exécution uniquement | Non |
n |
Refuser l'exécution | Non |
a |
Autoriser pour toute la session | Oui |
Pour les commandes potentiellement interactives (contenant sudo, read, -p), NEMESIS affiche un avertissement supplémentaire :
⚠️ Cette commande peut demander des entrées supplémentaires (mot de passe, etc.)
NEMESIS supporte actuellement 20 outils différents, organisés en catégories :
| Outil | Description | Paramètres |
|---|---|---|
read_file |
Lit un ou plusieurs fichiers | files: list[str] |
write_file |
Crée ou écrase un fichier | path: str, content: str |
append_file |
Ajoute du contenu à un fichier | path: str, content: str |
replace_file |
Recherche et remplace dans un fichier | path: str, blocks: list |
| Outil | Description | Paramètres |
|---|---|---|
bash |
Exécute une commande shell | command: str, mode: str |
Modes disponibles :
synchrone(défaut) : Exécution bloquante avec streamingasynchrone: Exécution en arrière-plan
| Outil | Description | Paramètres |
|---|---|---|
grep |
Recherche un motif dans des fichiers | pattern: str, path: str |
list_dir |
Liste le contenu d'un dossier | path: str |
| Outil | Description | Paramètres |
|---|---|---|
validate_code |
Valide la syntaxe d'un fichier | path: str |
stop_all |
Arrête tous les processus en arrière-plan | - |
check_process |
Vérifie l'état d'un processus | pid: int |
kill_process |
Tue un processus spécifique | pid: int |
cleanup_logs |
Nettoie les logs des processus terminés | - |
| Outil | Description | Paramètres |
|---|---|---|
mcp_list |
Liste les serveurs MCP installés | - |
mcp_tools_list |
Liste les outils d'un serveur MCP | server: str |
mcp_call |
Appelle un outil MCP | server: str, tool: str, arguments: dict |
| Outil | Description | Paramètres |
|---|---|---|
web_search |
Effectue une recherche web | query: str |
upload |
Upload un fichier | file_path: str |
update_tracker |
Met à jour le tracker de tâches | project: str, task: str, status: str |
NEMESIS implémente plusieurs couches de sécurité :
- Workspace Isolé : Toutes les opérations sont confinées dans
./workspacepar défaut - Système d'Autorisation : Confirmation explicite avant chaque exécution
- Validation de Code : Vérification automatique de la syntaxe Python/Bash
- Conversion Sudo :
sudoest automatiquement converti ensudo -Spour la lecture depuis stdin - Limite de Sortie : Les sorties sont tronquées à 500 000 caractères pour éviter les floods
- Lecture de fichiers (
read_file,grep,list_dir) - Écriture de fichiers dans le workspace
- Exécution de commandes en lecture seule (
ls,cat,grep,find, etc.) - Exécution de tests (
pytest,unittest, etc.) - Validation de code (
validate_code) - Recherche web (
web_search)
- Suppression de fichiers ou dossiers (
rm,rmdir,rm -rf) - Modification de fichiers système (
/etc/,/usr/,/var/, etc.) - Exécution de commandes destructrices (
dd,mkfs,fdisk, etc.) - Installation de paquets système (
apt install,pip install --system, etc.) - Modification de permissions (
chmod,chownsur des fichiers système) - Redémarrage de services (
systemctl restart,service restart)
- Exécution de commandes en tant que root sans sudo
- Modification de
/boot/,/lib/,/lib64/ - Exécution de commandes pouvant bricker le système
- Téléchargement et exécution de code non vérifié
- Suppression récursive sans confirmation (
rm -rf /, etc.) - Modification de
/proc/,/sys/,/dev/ - Exécution de scripts inconnus
NEMESIS propose des commandes spéciales préfixées par / :
| Commande | Description |
|---|---|
/help |
Affiche la liste des commandes disponibles |
/provider |
Configure le provider IA |
/tools |
Liste les outils disponibles |
/agents |
Gère les sous-agents (délégation) |
/skills |
Gère les compétences additionnelles |
/stats |
Affiche les métriques de la session |
/clear |
Efface l'historique de la session |
/exit |
Quitte NEMESIS |
# Afficher l'aide
/help
# Configurer un provider
/provider type=bridge host=192.168.1.67 port=8080
# Lister les outils
/tools
# Afficher les statistiques
/stats
Utilisateur : "Explore le projet dans /home/user/myproject"
IA :
{
"tool": "bash",
"parameters": {
"command": "find /home/user/myproject -type f -name '*.py' | head -20"
}
}NEMESIS :
⚠️ L'IA veut exécuter un outil :
Outil: bash
command: find /home/user/myproject -type f -name '*.py' | head -20
Autoriser ? (y=oui une fois / n=non / a=toujours autoriser)
Utilisateur : y
Résultat : Liste des fichiers Python affichée en temps réel
Utilisateur : "Dans config.py, change DEBUG de False à True"
IA :
{
"tool": "read_file",
"parameters": {
"files": ["config.py"]
}
}NEMESIS : Affiche le contenu de config.py
IA :
{
"tool": "replace_file",
"parameters": {
"path": "config.py",
"blocks": [
{
"search": "DEBUG = False",
"replace": "DEBUG = True"
}
]
}
}NEMESIS : Demande confirmation, puis applique la modification
Utilisateur : "Mets à jour le système"
IA :
{
"tool": "bash",
"parameters": {
"command": "sudo -S apt update && sudo -S apt upgrade -y"
}
}NEMESIS :
⚠️ L'IA veut exécuter un outil :
Outil: bash
command: sudo -S apt update && sudo -S apt upgrade -y
⚠️ Cette commande peut demander des entrées supplémentaires (mot de passe, etc.)
Autoriser ? (y=oui une fois / n=non / a=toujours autoriser)
Utilisateur : y
NEMESIS :
[sudo] password for nemesis:
⚠️ La commande attend une entrée :
[sudo] password for nemesis:
>>>
Utilisateur : (entre le mot de passe)
Résultat : La commande continue et met à jour le système
Utilisateur : "Recherche les meilleures pratiques Python asyncio 2024"
IA :
{
"tool": "web_search",
"parameters": {
"query": "Python asyncio best practices 2024"
}
}NEMESIS : Affiche les résultats de recherche
- Définir le schéma dans
tools_schema.py:
{
"name": "mon_outil",
"description": "Description de mon outil",
"parameters": {
"param1": "str - description du paramètre 1",
"param2": "int - description du paramètre 2"
},
"handler_method": "execute_mon_outil"
}- Implémenter le handler dans
tools.py:
def execute_mon_outil(self, param1: str, param2: int):
# Logique de l'outil
result = {"success": True, "stdout": f"Résultat: {param1} - {param2}"}
yield result- Mettre à jour le parseur dans
action_parser.pysi nécessaire
Dans src/core/default_commands.py :
from src.core.commands import registry
@registry.register("ma_commande", "Description de ma commande")
def ma_commande_handler(args):
# Logique de la commande
return "Résultat de la commande"Les skills MCP doivent être placés dans tools_library/ avec :
- Un fichier
SKILL.md:
---
name: MonSkill
description: Une description utile
version: 1.0.0
---- Un serveur MCP implémentant le protocole
| Problème | Solution |
|---|---|
ModuleNotFoundError: yaml |
pip install pyyaml |
No module named 'rich' |
pip install rich prompt_toolkit |
| Erreur de connexion au provider | Vérifier config.yaml et le serveur IA |
| Action refusée | La commande n'est pas dans la liste blanche |
| Le collage ne fonctionne pas | Vérifier que InMemoryClipboard est supporté |
NEMESIS génère des logs dans :
./workspace/: Fichiers de sortie des outils- Console : Messages de debug avec
--debug
./venv/bin/python3 agent.py --debugAffiche des informations détaillées sur :
- Les itérations d'outils
- Les réponses LLM
- Les appels d'outils
- Les erreurs
NEMESIS CLI est un projet open-source développé par TEJF - L'Aigle de la Justice.
Copyright (c) 2024-2026 TEJF
Permission est accordée, gratuitement, à toute personne obtenant une copie
de ce logiciel et des fichiers de documentation associés (le "Logiciel"),
de traiter le Logiciel sans restriction, y compris sans limitation les droits
de l'utiliser, copier, modifier, fusionner, publier, distribuer, sous-licencier,
et/ou vendre des copies du Logiciel, et de permettre aux personnes auxquelles
le Logiciel est fourni de le faire, sous réserve que les conditions suivantes
soient remplies :
L'avis de copyright ci-dessus et cet avis de permission doivent être inclus
dans toutes les copies ou parties substantielles du Logiciel.
LE LOGICIEL EST FOURNI "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE
OU IMPLICITE, Y COMPRIS, SANS LIMITATION, LES GARANTIES DE QUALITÉ MARCHANDE,
D'ADÉQUATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES
AUTEURS OU TITULAIRES DU COPYRIGHT NE SERONT TENUS RESPONSABLES DE TOUTE
RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION
DE CONTRAT, DE DÉLIT OU AUTRE, DÉCOULANT DE, OU EN RELATION AVEC LE LOGICIEL
OU L'UTILISATION OU AUTRES OPÉRATIONS AVEC LE LOGICIEL.
Pour toute question ou problème :
- Ouvrir une issue sur GitHub
- Contacter : TEJF - L'Aigle de la Justice
Prêt à coder avec NEMESIS ! 🚀
Documentation mise à jour le 4 août 2026