Illustration for the post Créer un agent IA en ligne de commande avec Deno et Mastra

Créez un mini-agent d'IA sous forme de CLI en JavaScript avec Deno et Mastra

Par Eric Burel - Formateur chez LBKE

Publié le 18 décembre 2025

Même à l’ère du cloud, le système de fichiers de votre ordinateur reste un outil de travail essentiel.

Les plateformes d’IA comme ChatGPT peuvent analyser les fichiers que vous leur fournissez manuellement, éventuellement se connecter à votre compte Google Drive, mais elles ne proposent pas d’outils pour naviguer dans les dossiers de votre ordinateur. Impossible non plus d’accéder à une copie locale de vos fichiers cloud (Dossier Dropbox, Google Drive for Desktop, serveurs NAS…).

Pourtant, de nombreuses entreprises utilisent ces solutions au quotidien. D’autre part, l’IA agentique permet d’envisager la création de mini-outils optimisés pour la productivité : audit de vos dossiers pour respecter des standards de qualité, identification de fichiers et dossiers manquants, création de documents personnalisés à partir de templates…

Faut-il forcément choisir entre passer sur Microsoft Sharepoint, ou se priver des gains de productivité apportés par l’IA ?

Cet article vous propose une alternative, la création de votre propre agent IA avec des technologies JavaScript : Deno et Mastra.

Nous utiliserons l’API française Mistral pour la partie IA (à ne pas confondre avec le framework Mastra !), mais ce tutoriel fonctionne aussi bien avec une IA LLM en auto-hébergement.

L’objectif : créer un agent d’analyse de fichiers, en ligne de commandes

Dans ce tutoriel, notre objectif est de créer un outil en ligne de commande, que l’on pourra appeler dans n’importe quel dossier de notre machine pour poser des questions à l’IA. Nous l’utiliserons chez LBKE pour gérer les fichiers associés à notre processus Qualiopi.

Exemple d’utilisation :

# Commande exécutée dans le dossier "/home/eric-burel/Audit Qualiopi 2026"
file-agent . "Manque-t-il des fichiers pour valider notre audit Qualiopi ?"

# Réponse de l'IA après analyse
> "Réponse de File Agent : presque, il faut récupérer les feuilles d'émargement pour la session de formation Mastra de janvier"

Commençons par nos choix technologiques.

Deno et Mastra, duo de choc pour le développement d’outils CLI agentiques en JavaScript

Deno et Mastra ne sont pas les choix les plus répandus dans l’écosystème JavaScript, alors commençons donc par présenter ces deux technologies formidables dont vous ne pourrez bientôt plus vous passer.

Deno, une alternative à Node.js

Deno est un runtime JavaScript, conçu comme une alternative à Node.js. Un runtime est un programme qui peut exécuter du code JavaScript sur une machine.

Node.js est de très loin le runtime le plus connu, car en situation de quasi-monopole de 2010 jusqu’à 2020 environ. Il est très utilisé pour créer des serveurs web, car le langage JavaScript s’avère très efficace pour gérer des requêtes web avec beaucoup de communications entre systèmes comme d’autres API ou des bases de données (sur le plan technique, on parle de tâches “IO-bound”).

Deno a été créé par Ryan Dahl… qui est aussi le créateur de Node.js ! Le principe de Deno est de s’appuyer sur l’expérience acquise avec Node.js pour repartir sur des bases architecturales plus saines. Deno met par exemple beaucoup plus l’accent sur la sécurité, un avantage indéniable quand on voit les failles de sécurité qui ont encore récemment affecté l’écosystème de packages NPM (ver Shai-Hulud).

Bun est un autre runtime racheté en décembre… par Anthropic. Coïncidence ? Je ne crois pas.

J’ai choisi Deno pour ce projet car son système de compilation Deno Compile et sa librairie standard pour le CLI sont très faciles d’utilisation et apportent de bonnes garanties de sécurité.

Mastra, un framework pour l’IA agentique en JavaScript fondé sur le Vercel AI SDK

Mastra est quant à lui un framework d’IA agentique, c’est-à-dire un framework JavaScript qui permet de construire des agents autonomes et des workflows utilisant des IA génératives de type LLM, via leur API. Il utilise Vercel AI SDK pour les appels LLM bas niveau.

Mastra est un concurrent direct de l’écosystème LangChain. Nous utilisons LangChain en Python, mais nous préférons Mastra pour le développement JavaScript, car il s’agit d’une technologie créée par des développeurs web (les créateurs de Gatsby) plutôt que par des ingénieurs en machine learning. Mastra est plus intuitif pour les développeurs web et s’intègre mieux à l’écosystème JavaScript (React, Next etc.).

Si vous souhaitez utiliser un assistant de développement IA comme Cursor, n’oubliez pas d’indexer la documentation de Deno et la documentation de Mastra. Ces deux technologies évoluent très vite et un LLM mal configuré ne vous générera pas un code de qualité !

Passons à l’installation.

Installation et premier script agentique IA avec Deno et Mastra

Comme dans tout projet, la première étape est l’installation de nos outils et la création d’un premier script. Je vous fournis ici directement les éléments de code.

deno add \
--npm typescript @types/node mastra@latest
// Fichier "main.ts"
import { Agent } from "@mastra/core/agent";
// Un Agent Mastra
const fileExplorerAgent = new Agent({
    model: "mistral/ministral-3b-latest",
    instructions: `
    You are a file explorer agent.
    Answer user questions about a folder.
    You are provided tools to explore the folder, 
    list files, dive into nested folders.
    `,
    name: "file-explorer",
})
// La fonction principale
async function main() {
    console.log("File Explorer says hi")
    const msg = await fileExplorerAgent.generate([
        {
            role: "user", content: "Say hi"
        }
    ])
    console.log("File Explorer says:", msg.text)
    process.exit(0)
}
await main()
# Fichier "./run.sh"
deno \
--allow-env=DENO_TRACE_PERMISSIONS,MASTRA_DEV,MASTRA_AUTO_REFRESH_PROVIDERS,OPENAI_BASE_URL,NODE_ENV,MISTRAL_API_KEY,MISTRAL_BASE_URL \
--allow-net \
main.ts

Nous avons déjà fait des progrès énormes : ces quelques lignes de code constituent les bases d’un agent IA connecté à l’API de Mistral !

Récupérer le prompt et le chemin du dossier à analyser comme arguments du CLI

Deno nous permet de connaître le dossier courant avec la commande Deno.cwd(), de calculer le chemin d’un dossier avec la librairie @std/path, et parser les arguments passés en ligne de commande via Deno.args et la librairie standard @std/cli.

En résumé, récupérer le prompt de l’utilisateur ainsi que le dossier qu’il souhaite explorer s’implémente en quelques lignes de code avec Deno !

Voici un exemple de code basique pour localiser le dossier à traiter et récupérer le prompt de l’utilisateur.

import { resolve, } from "@std/path";
function parseFolder(folder: string) {
    const absoluteFolderPath = resolve(Deno.cwd(), folder)
    return absoluteFolderPath
}
function parsePrompt(prompt: string) {
    if (prompt.length >= 2000) {
        throw new Error("Prompt length over 2000 character not yet supported for security reasons.")
    }
    return prompt
}
export function processArgs() {
    if (Deno.args.length === 1) {
        const prompt = Deno.args[0]
        return { prompt }
    }
    if (Deno.args.length === 2) {
        const folder = parseFolder(Deno.args[0])
        const prompt = parsePrompt(Deno.args[1])
        return { folder, prompt }
    }
    throw new Error("Only 2 arguments max accepted")
}

Accéder aux fichiers avec un outil fourni au LLM (une fonction JavaScript)

Le prompt système est le premier ingrédient pour créer un agent IA, il explique à notre agent qu’il est en charge de répondre des questions sur les fichiers présents dans un dossier. Le prompt utilisateur fournit des informations plus détaillées sur la tâche à accomplir.

Mais pour aller plus loin, il faut donner à l’agent la possibilité d’agir, et notamment de lire nos dossiers et nos fichiers !

C’est à ça que servent les outils. Vous avez probablement déjà entendu parler du protocole MCP, devenu très populaire car il permet de transformer des APIs distantes ou des programmes en listes outils pour LLM, rendant les agents IA extrêmement puissants.

Cependant, le protocole MCP et ses implémentations ne sont pas encore très robustes en termes de sécurité. Il reste plus intéressant à ce stade d’apprendre à créer vos propres outils.

Dans Mastra, les outils se créent facilement, il s’agit simplement de fonctions JavaScript associés à quelques configurations, qui aident l’agent IA à comprendre quand et comment utiliser l’outil.

Voici un outil simple qui permet d’afficher les fichiers d’un dossier, et de naviguer dans un dossier.

export const scanFolder = (rootFolder: string) => createTool({
    id: "scan-folder",
    description: `Scans the content of a folder`,
    execute: async function ({ runtimeContext }) {
        console.log("Explorting folder")
        let folderContent = await Array.fromAsync(
            walk(runtimeContext.get("rootFolder"), {
                followSymlinks: false,
                includeDirs: true,
                includeFiles: true,
                maxDepth: 30
            })
        )
        if (folderContent.length > 100) {
            console.warn("More than 100 files/folders found, will generate a prompt will only the first 100 files")
            folderContent = folderContent.slice(0, 100)
        }
        const strRepresentation = folderContent
            .map(d => `${d.isDirectory ? "(D)" : "(F)"} ${d.path}`)
            .join("\n")
        return strRepresentation
    }
})

On note que notre outil est conçu pour ne pas pouvoir remonter en arrière dans les dossiers, pour empêcher l’agent de fouiller notre machine.

Compilation et essai

La commande deno compile permet de générer une une seule ligne de commande un binaire pour l’application. Il fonctionnera sur la même plateforme que celle utilisée pour la compilation (Linux Ubuntu ici), la compilation vers d’autres cibles est possible avec l’option --target.

Le binaire obtenu est relativement lourd : 314mo pour quelques dizaines de lignes de JavaScript !

Cela s’explique pour deux raisons : le binaire compilé doit d’une part intégrer une version allégée du runtime Deno (ce qui évite à l’utilisateur final d’installer Deno sur sa propre machine) et d’autre part intégrer Mastra, qui malgré son apparente simplicité intègre un puissant moteur de calcul de workflows compatible avec Inngest.

Et le résultat final : on peut poser à File Explorer n’importe quelle question sur le dossier courant !

# Commande
./file-explorer "Summarize the content of this folder"
# Réponse de l'IA :
"> File Explorer says:
- This appears to be a **TypeScript/JavaScript project** 
focused on file exploration 
(likely a CLI tool or library for interacting with files).
- The presence of `tools.ts` and `load-config.ts` 
suggests modular design, 
while `build.sh` hints at automation (e.g., for deployment or testing).
- The Git structure indicates active development, 
with commits tracked in the `.git/objects` directory."

C’est la bonne réponse, File Explorer peut analyser nos fichiers !

Le code de l’agent est disponible en open source dans le dépôt GitHub lbke/deno-mastra-agentic-file-explorer.

N’hésitez pas à l’adapter pour créer vos propres agents IA en ligne de commande avec Deno et Mastra !

Pour aller plus loin

Un grand merci à Abhi Aiyer (CTO de Mastra) pour m’avoir aidé à finaliser le code de cet article !

Commentez cet article sur les réseaux sociaux :

Partager sur Bluesky Partager sur X

À propos de l'auteur

Photo d'Eric Burel

Eric Burel est ingénieur diplômé de l'ENSIMAG. Il est co-fondateur de LBKE, formateur web et IA, et ambassadeur pour le plan national Osez l'IA.

Il partage régulièrement ses connaissances à travers des articles publiés sur Smashing Magazine et sur son blog. Vous le croiserez sûrement au détour d'un meetup sur Montpellier !

En savoir plus sur Eric Burel

Vous avez apprécié cette ressource ? Découvrez toutes nos formations IA et web.

Formation recommandée :

Abonnez-vous pour recevoir les nouvelles ressources

Flux RSS