Production-grade framework for super-prompt engineering, cross-platform automation, and AI workflow orchestration.
- Overview
- Features
- Requirements
- Installation
- Quick Start
- Usage
- Tests Unitaires
- Repository Structure
- CI/CD Pipeline
- Security & Best Practices
- Contributing
- Dépannage
- License
- Roadmap v2.0
- Support & Community
Prompt Engineer Toolkit est un framework complet conçu pour les ingénieurs DevOps, les chercheurs en prompt engineering et les équipes techniques qui souhaitent industrialiser la création, l'optimisation et le déploiement de prompts pour les modèles de langage (LLM).
Ce projet fournit :
- Un CLI interactif multiplateforme (
PromptOps Console) pour automatiser les tâches courantes. - Des templates YAML normalisés pour générer des prompts optimisés par modèle (GPT-4, Claude 3, Gemini, Qwen).
- Une infrastructure CI/CD prête à l'emploi avec GitHub Actions, Pester, ShellCheck, et markdownlint.
- Un environnement conteneurisé via Docker et devcontainer pour une reproductibilité totale.
- Une architecture extensible avec support Node.js et Python pour les utilitaires avancés.
💡 Public cible : Ingénieurs DevOps confirmés, architectes cloud, chercheurs en IA, et équipes SRE.
| Fonctionnalité | PowerShell | Bash/Zsh | Description |
|---|---|---|---|
| Menu interactif | ✅ | ✅ | Navigation guidée avec couleurs et validation |
| Project Scaffold | ✅ | ✅ | Génération d'arborescence + git init optionnel |
| Health Check | ✅ | ✅ | Validation linting et tests locaux |
| Config persistence | ✅ | ✅ | Préférences dans ~/.promptops/config.json |
| Flags standards | ✅ | ✅ | --help, --version, --dry-run, --whatif |
Templates conformes au schema prompts/templates/schema.yml :
| Template | Objectif | Modèles cibles |
|---|---|---|
reverse-engineering.yml |
Déduire et optimiser un prompt depuis une sortie IA | GPT, Claude, Gemini, Qwen |
repo-orchestration.yml |
Générer une structure de projet + CI/CD | GPT, Claude, Qwen |
content-pipeline.yml |
Planifier du contenu technique optimisé SEO | GPT, Gemini, Qwen |
Chaque template inclut :
- Variables typées avec validation
- Guardrails (tokens, température, prohibitions)
- Critères de qualité et tests de référence
- Adaptations spécifiques par modèle (ex: XML pour Claude, linear instructions pour Qwen)
Workflow ci.yml avec matrix de test :
# Plateformes : Windows, Ubuntu, macOS
# PowerShell : 5.1 (Windows uniquement), 7.4 (tous)
# Jobs :
# • lint-markdown → markdownlint-cli2
# • lint-shell → ShellCheck (severity=warning)
# • test-powershell → Pester 5+
# • test-python → pytest + ruff
# • test-node → npm ci + npm testDéclenchement automatique sur :
- Push vers
main - Pull Request vers
main - Tag
v*.*.*→ workflowrelease.yml(publication GitHub Release)
Dockerfile multi-stage basé sur mcr.microsoft.com/powershell:7.4-ubuntu-22.04 :
# Layers :
# 1. Base : PowerShell 7.4 + outils système (git, curl, jq)
# 2. Tools : ShellCheck pour linting bash
# 3. Node : LTS via nvm + dépendances npm
# 4. Python : 3.11 + pip requirements
# 5. Final : COPY repo + ENTRYPOINT configurable (pwsh/bash)DevContainer : Configuration VS Code prête avec extensions recommandées :
ms-vscode.powershelltimonwong.shellcheckDavidAnson.vscode-markdownlintms-python.python
| Plateforme | Version minimale | Notes |
|---|---|---|
| Windows | PowerShell 5.1 ou 7.4+ | Git for Windows recommandé |
| macOS | Bash 4+ ou Zsh 5+ | Installer via Homebrew si nécessaire |
| Linux | Bash 4+ | shellcheck via apt/dnf |
# PowerShell : Pester pour tests locaux
Install-Module -Name Pester -Force -SkipPublisherCheck
# macOS/Linux : ShellCheck pour validation bash
# Ubuntu/Debian
sudo apt install shellcheck
# macOS (Homebrew)
brew install shellcheck
# Markdown linting (nécessite Node.js)
npm install -g markdownlint-cli2Pour une exécution isolée et reproductible :
docker --version # 20.10+ recommandé# Cloner le repository
git clone https://github.com/valorisa/prompt-engineer-toolkit.git
cd prompt-engineer-toolkit
# (Optionnel) Configurer les hooks pre-commit
# See .github/PULL_REQUEST_TEMPLATE.md for guidelines# Construire l'image localement
docker build -t promptops:latest ./docker
# Lancer le CLI interactif
docker run -it --rm promptops:latest- Ouvrir le dossier dans VS Code
- Accepter la suggestion "Reopen in Container"
- L'environnement est prêt avec toutes les dépendances
# Windows (PowerShell)
.\scripts\PromptOpsConsole.ps1
# macOS / Linux (Bash ou Zsh)
./scripts/PromptOpsConsole.sh# Afficher l'aide
.\scripts\PromptOpsConsole.ps1 --help
# Afficher la version
.\scripts\PromptOpsConsole.ps1 --version
# Mode dry-run (simulation sans exécution)
.\scripts\PromptOpsConsole.ps1 --dry-runDepuis le menu CLI → Option [1] Project Scaffold :
>>> Project Scaffold
Repository name? my-ai-agent
Visibility (public/private)? public
Include CI/CD scaffolding? (y/n) y
Runtimes to include: pwsh/node/python/all? all
Initialize git and create first commit? (y/n) y
Summary:
Name: my-ai-agent
Visibility: public
CI/CD: y
Runtimes: all
Git Init: y
Confirm execution? (y/n) y
→ Le script crée l'arborescence, initialise Git, et commit le premier snapshot.
Le menu principal offre 6 modules :
PromptOps Console v2.2.0
------------------------------------------
[1] Project Scaffold - New repo setup
[2] Automation Engine - CI/CD & scripts
[3] Docs Generator - README, guides
[4] Super-Prompt Studio - Create/optimize
[5] Health Check - Lint & validate
[6] Settings - Config & prefs
[0] Exit
------------------------------------------
Chaque option déclenche un questionnaire guidé (≥4 questions) avec :
- Validation des entrées
- Résumé des choix
- Confirmation avant exécution
- Support
--whatifpour prévisualisation
Utilisez les templates YAML avec votre LLM préféré :
# Exemple : prompts/templates/reverse-engineering.yml
meta:
id: reverse-engineering-v1
target_models: [gpt, claude, gemini, qwen]
prompt:
system: |
You are an expert in reverse prompt engineering...
user_template: |
Analyze this AI output and reverse-engineer its prompt.
Target model: {{target_model}}
Output to analyze: """{{ai_output}}"""
variables:
- name: target_model
type: enum
options: [gpt, claude, gemini, qwen]💡 Astuce Qwen : Pour de meilleurs résultats avec Qwen, privilégiez des instructions linéaires, placez les règles critiques en début de prompt, et utilisez des marqueurs bilingues si nécessaire.
cd docker
docker build -t promptops-toolkit:latest .# Mode PowerShell
docker run -it --rm -v ${PWD}:/app promptops-toolkit:latest pwsh
# Mode Bash
docker run -it --rm -v ${PWD}:/app promptops-toolkit:latest bashLa configuration .devcontainer/devcontainer.json installe automatiquement :
- PowerShell 7.4
- ShellCheck
- markdownlint
- Python 3.11 + Pester
Ce projet inclut une suite de tests unitaires et d'intégration pour valider les plugins et le chargement dynamique.
# Tous les tests
cd scripts/node
npm test
# Tests unitaires uniquement
npm run test:unit
# Tests d'intégration uniquement
npm run test:integration| Composant | Tests | Statut |
|---|---|---|
| PromptorPlugin | 11 | ✅ |
| PluginLoader | 8 | ✅ |
| Integration CLI | 3 | ✅ |
| Total | 21 | ✅ |
- Crée un fichier
*.test.tsdans le même dossier que le composant - Utilise
node:testetnode:assert/strict - Lance
npm testpour valider
Les tests utilisent le runner natif node:test avec tsx pour l'exécution TypeScript. Une erreur de sérialisation peut apparaître sur Windows (bug connu tsx#362), mais tous les tests fonctionnels passent impeccablement.
prompt-engineer-toolkit/
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── RELEASE_CHECKLIST.md
├── docker/
│ └── Dockerfile
├── docs/
│ ├── ARCHITECTURE.md
│ ├── SUPER-PROMPT-SPEC.md
│ └── USAGE.md
├── prompts/
│ └── templates/
│ ├── content-pipeline.yml
│ ├── repo-orchestration.yml
│ ├── reverse-engineering.yml
│ └── schema.yml
├── scripts/
│ ├── PromptOpsConsole.ps1
│ ├── PromptOpsConsole.sh
│ ├── node/ # 🟢 Node.js utilities (v2.0.0)
│ │ ├── config/
│ │ │ └── system-prompts/
│ │ │ └── promptor-matrix.md
│ │ ├── plugins/
│ │ │ ├── builtins/
│ │ │ │ └── promptor-matrix/
│ │ │ │ ├── PromptorPlugin.ts
│ │ │ │ ├── PromptorPlugin.test.ts
│ │ │ │ └── index.ts
│ │ │ ├── examples/
│ │ │ │ └── hello-world/
│ │ │ │ ├── HelloWorldPlugin.ts
│ │ │ │ └── index.ts
│ │ │ ├── interfaces/
│ │ │ │ └── IPlugin.ts
│ │ │ └── loaders/
│ │ │ ├── PluginLoader.ts
│ │ │ └── PluginLoader.test.ts
│ │ ├── tests/
│ │ │ └── integration/
│ │ │ ├── cli-flow.test.ts
│ │ │ └── fixtures/
│ │ ├── promptops.ts # 🟢 CLI principale
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── node_modules/ # ⚠️ Exclu du git (généré)
│ └── python/
│ ├── promptops.py
│ └── requirements.txt
└── tests/
├── PromptOpsConsole.Tests.ps1
└── test_promptops.py
node_modules/: Exclu du git (généré parnpm install)dist/: Exclu du git (généré parnpm run build)*.test.ts: Fichiers de tests unitairesindex.ts: Point d'entrée pour chargement dynamique des plugins
Déclenché sur push/pull_request vers main :
graph LR
A[Push/PR] --> B[lint-markdown]
A --> C[lint-shell]
A --> D[test-powershell]
A --> E[test-python]
A --> F[test-node]
B & C & D & E & F --> G[✅ All checks passed]
| Job | Commande | Outil | Plateformes |
|---|---|---|---|
lint-markdown |
npx markdownlint-cli2 "**/*.md" |
markdownlint | Ubuntu |
lint-shell |
shellcheck scripts/*.sh |
ShellCheck | Ubuntu |
test-powershell |
Invoke-Pester ./tests -CI |
Pester 5+ | Win/Ubuntu/macOS |
test-python |
pytest && ruff check |
pytest + ruff | Ubuntu |
test-node |
npm ci && npm test |
npm | Ubuntu |
Déclenché sur tag v*.*.* :
- Build des artefacts (
prompts/,scripts/) - Génération du changelog depuis les commits
- Création d'une GitHub Release avec :
- Archive
.zipdes templates et scripts - Notes de version auto-générées
- Assets binaires optionnels
- Archive
| Type | Méthode recommandée | Exemple |
|---|---|---|
| GitHub Token | GitHub Secrets | ${{ secrets.GITHUB_TOKEN }} |
| API Key | Variable d'environnement | $env:OPENAI_API_KEY |
| Config sensible | Fichier .env ignoré par Git |
.gitignore inclut .env |
Documentation détaillée dans docs/ARCHITECTURE.md.
-
Tests avant commit :
# PowerShell Invoke-Pester ./tests -CI # Bash shellcheck scripts/PromptOpsConsole.sh # Markdown npx markdownlint-cli2 "**/*.md"
-
Dry-run pour les opérations destructives :
.\scripts\PromptOpsConsole.ps1 --whatif -
Validation cross-platform :
- Tester sur Windows PS5.1, PS7+, macOS Zsh, Linux Bash avant merge.
-
Code Review :
- Respecter la checklist de
PULL_REQUEST_TEMPLATE.md.
- Respecter la checklist de
Nous accueillons les contributions ! Veuillez suivre ces étapes :
-
Fork le repository et créer une branche feature :
git checkout -b feature/ma-nouvelle-fonctionnalite
-
Implémenter avec tests associés :
- Ajouter des tests Pester/pytest pour toute nouvelle logique.
- Mettre à jour la documentation si le comportement change.
-
Valider localement :
# Linting shellcheck scripts/*.sh npx markdownlint-cli2 "**/*.md" # Tests Invoke-Pester ./tests pytest tests/
-
Soumettre une Pull Request :
- Lier à une issue existante ou en créer une nouvelle.
- Remplir le template de PR avec description et checklist.
-
Review & Merge :
- Un mainteneur validera les changements après approbation CI.
📚 Lire
CONTRIBUTING.mdpour plus de détails.
Lors de la génération de digests de repository via la commande gitingest.exe ou de la lecture de fichiers encodés en UTF-8 avec Python sous Windows, vous pouvez rencontrer l'erreur suivante :
Error reading file with 'cp1252': 'charmap' codec can't decode byte 0x8f in position 2106: character maps to <undefined>
Cette erreur affecte les fichiers contenant :
- Des caractères spéciaux UTF-8 (accents, émojis, symboles comme ✓, ⚠, →)
- Des caractères non-ASCII de contributeurs internationaux
- Des fichiers Markdown avec formatage spécial
| Composant | Comportement |
|---|---|
| Python sous Windows | Utilise l'encodage système cp1252 (Europe occidentale) par défaut quand aucun encodage n'est spécifié |
| Fichiers du Repository | Encodés en UTF-8 (standard GitHub) |
Outils comme gitingest.exe |
Peuvent ne pas spécifier l'encodage explicitement lors de la lecture des fichiers |
| PowerShell 5.1/7+ | Écrit correctement en UTF-8, mais Python lit avec le mauvais encodage |
# ❌ Code problématique (utilise cp1252 par défaut sous Windows)
with open('README.md', 'r') as f:
content = f.read()
# ✅ Code correct (UTF-8 explicite)
with open('README.md', 'r', encoding='utf-8') as f:
content = f.read()Un script Python dédié generate_digest.py est fourni à la racine du repository pour générer des digests avec une gestion correcte de l'encodage UTF-8.
Fonctionnalités Clés :
encoding='utf-8'explicite sur toutes les opérations de lecture de fichiersencoding='utf-8'explicite sur toutes les opérations d'écriture de fichiers- Gestion gracieuse des fichiers binaires ou non-UTF-8
- Compatible multiplateforme (Windows, macOS, Linux)
# Générer un digest complet du repository
python .\generate_digest.py . digest.txt
# Spécifier un fichier de sortie personnalisé
python .\generate_digest.py . mon-digest.txt
# Vérifier l'absence d'erreurs d'encodage dans la sortie
Select-String -Path .\digest.txt -Pattern "Error reading file with"
# Ne doit retourner aucun résultat si tous les fichiers ont été lus correctementprompt-engineer-toolkit/
└── generate_digest.py # Générateur de digest sécurisé UTF-8
| Pratique | Implémentation |
|---|---|
| Toujours spécifier l'encodage | open(file, 'r', encoding='utf-8') dans les scripts Python |
| Utiliser UTF-8 sans BOM | Standard pour les fichiers .md, .yml, .json, .sh |
| UTF-8 avec BOM pour PowerShell | Les fichiers .ps1 peuvent bénéficier du BOM pour la compatibilité PS5.1 |
| Définir la variable d'environnement | $env:PYTHONIOENCODING = "utf-8" avant d'exécuter des scripts Python |
| Utiliser l'outillage fourni | Préférer generate_digest.py aux outils externes comme gitingest.exe |
| Fichier | Objectif |
|---|---|
generate_digest.py |
Générateur de digest sécurisé UTF-8 (fourni) |
scripts/python/promptops.py |
Exemple d'utilisation correcte de l'encodage dans les scripts du projet |
docs/ARCHITECTURE.md |
Documente les standards d'encodage pour le projet |
Note : Ce problème est spécifique à Windows. macOS et Linux utilisent UTF-8 par défaut, donc l'erreur ne se produit pas sur ces plateformes. Cependant, le script fourni assure une cohérence multiplateforme.
Contexte : Génération du fichier digest.txt avec l'outil gitingest.exe sous PowerShell 7.4
Erreur :
FILE: README.md
================================================
Error reading file with 'cp1252': 'charmap' codec can't decode byte 0x8f in position 2106
Résolution :
- Création du script
generate_digest.pyavec encodage UTF-8 explicite - Régénération du digest sans erreurs
- Documentation du problème dans cette section pour référence future
Commande de Vérification :
# Après correction, cette commande ne doit retourner aucune erreur
Select-String -Path .\digest.txt -Pattern "Error reading file with"Distribué sous licence MIT. Voir LICENSE pour le texte complet.
MIT License
Copyright (c) 2026 valorisa
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND...
Fonctionnalités planifiées pour la prochaine version majeure :
| Feature | Description | Priorité |
|---|---|---|
| 🔌 Plugin Architecture | Extension dynamique des menus CLI via modules externes | Haute |
| 📊 Telemetry Opt-in | Métriques d'usage anonymisées pour améliorer l'outil | Moyenne |
| 🔐 Script Signing | Signature PowerShell pour déploiements enterprise | Haute |
| 🤖 Model Router | Routage intelligent vers le meilleur LLM selon le prompt | Moyenne |
| 🌐 i18n Support | Internationalisation complète du CLI (FR, ES, DE, etc.) | Basse |
💬 Vous avez une idée pour v2.0 ? Ouvrez une Discussion ou une Issue.
- 🐛 Bug Report : New Issue
- 💡 Feature Request : New Discussion
- 📖 Documentation :
docs/ - 🔄 Changelog : Voir les Releases
⭐ Si ce projet vous est utile, merci de mettre une étoile — cela aide la communauté à le découvrir !