Al est un outil en ligne de commande pour gérer efficacement vos projets depuis le terminal.
Vous jonglez avec plusieurs projets clients, chacun dans un dossier différent ? Vous devez :
- Naviguer rapidement entre vos projets
- Stocker des notes techniques ou sensibles (mots de passe, clés API)
- Conserver des liens utiles (documentation, repos, dashboards)
- Avoir des raccourcis pour retrouver vos projets instantanément
Al centralise tout ça en ligne de commande pour un accès ultra-rapide.
Un projet est un répertoire de travail identifié par :
- Son nom (le nom du dossier)
- Des shortcuts (raccourcis personnalisés pour y accéder rapidement)
- Son chemin absolu sur le système
Exemple : Le projet dans /home/alex/client-acme avec les shortcuts acme, client1, ca
Les notes sont des morceaux de texte attachés à un projet :
- Stockées localement dans
.al_local/notes/ - Peuvent être chiffrées (AES-GCM) pour les informations sensibles
- Éditables avec vim ou directement en ligne de commande
- Copiables dans le presse-papier
Cas d'usage : Notes de réunion, credentials, commandes fréquentes, TODO techniques
Les links sont des URLs avec des mots-clés :
- Nom principal et keywords multiples pour retrouver facilement
- Stockés dans
.al_local/links/ - Copiables dans le presse-papier
Cas d'usage : Documentation, repos GitHub, dashboards de monitoring, outils en ligne
~/.al_global/ # Configuration globale
├── projects # Registry de tous les projets
└── config # Paramètres (longueur préview, etc.)
<projet>/.al_local/ # Données locales du projet
├── notes/ # Notes (JSON avec contenu chiffré ou non)
└── links/ # Links (JSON avec URL et keywords)
git clone https://github.com/agourdel/al.git
cd almake depsmake buildsudo make installCela installe les binaires suivants dans /usr/local/bin :
al- Commande principalealgo- Raccourci poural goalinit- Raccourci poural initalnote- Raccourci poural noteallink- Raccourci poural link
make build
sudo build/al updateInstalle la CLI sur le système (à faire une seule fois).
al installMet à jour les binaires après une recompilation.
al updateInitialise le répertoire courant comme projet Al.
# Avec le nom du dossier uniquement
al init
# Avec des raccourcis supplémentaires (séparés par espaces)
al init foo bar test
# Ou avec des pipes (entre guillemets)
al init "client1|c1|acme"
alinit "ways|wayz|wa"Résultat :
- Crée
.al_local/dans le répertoire courant - Enregistre le projet dans
~/.al_global/projects - Tous les shortcuts sont utilisables pour retrouver le projet
Copie le chemin absolu du projet dans le presse-papier.
algo myproject # Copie le chemin
cd <Ctrl+V> # Colle et navigueAstuce : Si le shortcut n'existe pas, la CLI suggère des noms similaires.
Liste toutes les notes du projet courant.
alnote list
alnote list -t autre_projet # Pour un autre projetAffiche un tableau :
Name Date Preview
---- ---- -------
todo 2025-11-16 Faire la review du code...
api_key 2025-11-15 **chiffrée**
Ajoute une nouvelle note.
# Note simple (ouvre vim)
alnote add #todo
# Note chiffrée (demande un mot de passe)
alnote add #api_key -c
# Note avec contenu direct (sans éditeur)
alnote add #reminder -b "Ne pas oublier de push"
# Note chiffrée pour un autre projet
alnote add #secret -t client2 -c -b "Password: 123456"Options :
-c, --chiffre: Chiffre la note (AES-GCM avec mot de passe)-b, --body <text>: Contenu direct sans ouvrir l'éditeur-t, --target <project>: Cibler un autre projet
Affiche ou copie une note.
# Afficher dans le terminal
alnote get #todo
# Copier dans le presse-papier
alnote get #api_key --cp
# Note chiffrée (demande le mot de passe)
alnote get #secret -cModifie une note existante.
# Ouvrir dans vim
alnote edit #todo
# Remplacer directement le contenu
alnote edit #reminder -b "Nouveau contenu"Supprime une note (avec confirmation).
alnote remove #old_note
alnote remove #secret -t autre_projetListe tous les liens du projet.
allink list
allink list -t autre_projetAffiche un tableau :
Name Link Keywords
---- ---- --------
github https://github.com/user/repo repo, code, git
docs https://docs.example.com documentation, aide
Ajoute un nouveau lien.
allink add #github -u https://github.com/user/repo
allink add #docs -u https://docs.example.com -k "documentation|aide|help"
allink add #api -u https://api.example.com -k "api|rest"Options :
-u, --url <url>: URL du lien (obligatoire)-k, --keywords <keywords>: Mots-clés séparés par|-t, --target <project>: Cibler un autre projet
Affiche ou copie un lien (recherche par nom ou keyword).
# Afficher les détails
allink get #github
allink get documentation # Recherche par keyword
# Copier l'URL dans le presse-papier
allink get #api --cp
allink get rest --cp # Par keywordModifie un lien existant.
# Changer l'URL
allink edit #github -u https://github.com/newuser/repo
# Ajouter des keywords
allink edit #docs -ak "tutorial|tuto"
# Réinitialiser les keywords
allink edit #api -rk "rest|api|v2"
# Supprimer tous les keywords
allink edit #api -rk ""Options :
-u, --url <url>: Nouvelle URL-ak, --add_keyword <keywords>: Ajouter des keywords-rk, --reset_keyword <keywords>: Remplacer tous les keywords
Supprime un lien (avec confirmation).
allink remove #github
allink remove api # Par keywordLes notes sensibles sont chiffrées avec AES-GCM :
- Dérivation de clé avec PBKDF2 (4096 itérations)
- Chaîne de vérification intégrée pour détecter un mauvais mot de passe
- Sel aléatoire unique par note
Quand un nom n'est pas trouvé, la CLI calcule la distance de Levenshtein et suggère des noms similaires :
$ algo wayys
Project 'wayys' not found. Did you mean:
- waays
- wayz
- waysIntégration native avec le presse-papier système :
- Notes :
--cppour copier le contenu - Links :
--cppour copier l'URL - Projects :
algocopie automatiquement le chemin
Toutes les commandes note et link supportent -t pour cibler un autre projet :
alnote list -t client2
allink add #dashboard -u https://dash.client2.com -t client2al list: Lister tous les projets enregistrés avec leurs shortcutsal rename <old> <new>: Renommer un projetal archive <project>: Archiver un projet (le garder en registry mais le marquer comme archivé)al unarchive <project>: Réactiver un projet archivéal remove <project>: Supprimer complètement un projet du registryal info <project>: Afficher toutes les infos d'un projet (path, shortcuts, nombre de notes/links)al sync: Synchroniser les projets (vérifier que les chemins existent toujours)
al cmd add #name <command>: Sauvegarder des commandes shell fréquentesal cmd run #name: Exécuter une commande sauvegardéeal cmd list: Lister les commandesalcmd: Alias poural cmd
al env add <KEY=VALUE>: Sauvegarder des variables d'env par projetal env list: Lister les variablesal env export: Exporter toutes les variables dans le shell actuelal env load: Charger les variables (génère un script sourceable)
al tag <project> <tag>: Ajouter un tag à un projetal list --tag <tag>: Filtrer les projets par tagalnote add #note --tags important,urgent: Ajouter des tags aux notesalnote list --tag urgent: Filtrer les notes par tag
al export <project>: Exporter un projet (notes + links) en JSON/YAMLal import <file>: Importer un projet depuis un fichieral backup: Backup de tous les projetsal restore <backup>: Restaurer depuis un backup
al search <query>: Rechercher dans toutes les notes et links de tous les projetsal search <query> -t <project>: Rechercher dans un projet spécifiqueal search <query> --encrypted: Inclure les notes chiffrées (demande les mots de passe)
al share <project>: Générer un fichier de partage (sans notes chiffrées)al team add <email>: Ajouter un membre à un projet (nécessiterait un backend)al remote add <url>: Synchroniser avec un serveur distant
al template create <name>: Créer un template de projet avec notes/links prédéfinisal template use <name>: Initialiser un projet depuis un templateal template list: Lister les templates disponibles
al stats: Afficher des stats (nombre de projets, notes, links)al stats <project>: Stats détaillées d'un projetal timeline: Timeline des modifications récentes
al github link <repo>: Lier automatiquement un repo GitHubal jira link <project>: Lier un projet Jiraal slack notify <message>: Envoyer une notification Slackal notion export: Exporter vers Notion
make buildmake cleanmake testMIT
Les contributions sont les bienvenues ! N'hésitez pas à ouvrir une issue ou une pull request.