Guide SDK Python — Grimoire Kit v3¶
Utiliser Grimoire Kit comme bibliothèque Python dans vos scripts et outils.
Installation¶
Configuration¶
from pathlib import Path
from grimoire.core.config import GrimoireConfig
# Charger depuis un fichier YAML
config = GrimoireConfig.from_yaml(Path("project-context.yaml"))
# Accéder aux sections typées
print(config.project.name) # str
print(config.project.stack) # tuple[str, ...]
print(config.user.skill_level) # "beginner" | "intermediate" | "expert"
print(config.memory.backend) # "auto" | "local" | ...
print(config.agents.archetype) # "minimal" | "web-app" | ...
Projet¶
from grimoire.core.project import GrimoireProject
project = GrimoireProject(config)
status = project.status()
# Agents installés
for agent in status.agents:
print(f"{agent.id}: {agent.name} ({agent.archetype})")
# Contexte du projet
ctx = project.context()
print(ctx.project_name)
print(ctx.stack)
Résolution de chemins¶
from pathlib import Path
from grimoire.core import layout
from grimoire.core.resolver import PathResolver
root = Path(".")
# Les trois étages du projet.
print(layout.kit_dir(root)) # _grimoire/kit/ — régénéré par le kit
print(layout.overrides_dir(root)) # _grimoire/overrides/ — redéfini par le projet
print(layout.agent_dirs(root)) # ordre de résolution des agents
# `resolve()` traverse overrides → kit → emplacements historiques.
print(layout.resolve(root, "framework/cc-verify.sh"))
# `PathResolver` sert aux chemins et gabarits d'une session.
resolver = PathResolver(project_root=root)
print(resolver.root)
print(resolver.resolve_path("_grimoire/kit/agent-manifest.csv"))
Détection de stack¶
from grimoire.core.scanner import StackScanner
scanner = StackScanner(Path("."))
result = scanner.scan()
for detection in result.detections:
print(f"{detection.technology}: {detection.confidence:.0%}")
print(f" Fichiers: {detection.evidence}")
Validation¶
from grimoire.core.validator import validate_config
errors = validate_config(config)
if errors:
for err in errors:
print(f"[{err.severity}] {err.field}: {err.message}")
else:
print("Configuration valide")
Outils intégrés¶
Tous les outils sont disponibles comme classes Python :
Tous les outils partagent la même interface : ils se construisent avec un
project_root et s'exécutent via run(**kwargs), qui rend un résultat typé.
from grimoire.tools import (
AgentForge,
ContextGuard,
ContextRouter,
HarmonyCheck,
MemoryLint,
PreflightCheck,
Stigmergy,
)
root = Path(".")
# Harmony Check — cohérence architecturale du projet
harmony = HarmonyCheck(root).run()
print(f"Score: {harmony.score}/100 (grade {harmony.grade})")
for d in harmony.dissonances:
print(f" {d}")
# Preflight Check — vérification pré-déploiement
preflight = PreflightCheck(root).run()
print(f"Go/No-Go: {preflight.go_nogo}")
for check in preflight.checks:
print(f" {check}")
# Memory Lint — intégrité de la mémoire
lint = MemoryLint(root).run()
print(f"{lint.error_count} erreurs, {lint.warning_count} avertissements")
for issue in lint.issues:
print(f" {issue}")
# Context Router — plan de chargement pour un agent
plan = ContextRouter(root).run(agent="architect", task="Déployer sur Kubernetes")
print(f"Agent: {plan.agent} · {plan.total_tokens} tokens · {plan.status}")
# Context Guard — budget contexte par agent
guard = ContextGuard(root).run(agent="architect")
print(f"{guard.overbudget_count} agent(s) hors budget")
# Stigmergy (expérimental) — coordination par phéromones
board = Stigmergy(root).run(action="emit", ptype="ALERT", location="src/auth")
print(f"{board.total_emitted} phéromones émises")
# Agent Forge — proposition de squelette d'agent
proposal = AgentForge(root).run(description="un agent qui écrit et lance les tests")
print(f"{proposal.agent_name} — {proposal.agent_role}")
Stigmergy fait partie des features expérimentales (R&D) : elle fonctionne et est testée, mais son API reste hors du contrat de stabilité SemVer. Voir R&D expérimental.
Merge Engine¶
from grimoire.core.merge import MergeEngine
engine = MergeEngine(source=Path("template"), target=Path("my-project"))
# Analyser sans modifier
plan = engine.analyze()
print(f"Fichiers à créer: {len(plan.files_to_create)}")
print(f"Conflits: {len(plan.conflicts)}")
for conflict in plan.conflicts:
print(f" {conflict.path} → {conflict.resolution}")
# Exécuter le merge
result = engine.execute(plan)
print(f"Créés: {len(result.files_created)}")
print(f"Log: {result.log_path}")
# Dry-run (aucune modification)
result = engine.execute(plan, dry_run=True)
# Force (écrase les conflits)
result = engine.execute(plan, force=True)
# Rollback
MergeEngine.undo(result.log_path)
Registre local¶
from grimoire.registry.local import LocalRegistry
registry = LocalRegistry(Path("archetypes"))
# Lister
for item in registry.list_all():
print(f"{item.id}: {item.description}")
# Chercher
results = registry.search("kubernetes")
Mémoire¶
from grimoire.memory.manager import MemoryManager
mm = MemoryManager(config)
# Stocker
mm.store("Décision: utiliser FastAPI pour l'API", user_id="guilhem")
# Rechercher
results = mm.search("choix framework", limit=5)
for r in results:
print(f"[{r.score:.2f}] {r.text}")
Exceptions¶
Toutes les exceptions héritent de GrimoireError :
from grimoire.core.exceptions import (
GrimoireError, # Base
GrimoireConfigError, # Configuration invalide
GrimoireProjectError, # Structure projet invalide
GrimoireAgentError, # Erreur agent
GrimoireToolError, # Erreur outil
GrimoireMergeError, # Erreur merge
GrimoireRegistryError, # Erreur registre
GrimoireMemoryError, # Erreur mémoire
GrimoireValidationError,# Erreur validation
)