haki — génération pure, rien n’est jamais écrit sur disque à
votre place.
Serveur MCP — 4 outils, jamais plus
Monté dans l’API FastAPI elle-même sur/mcp (transport Streamable
HTTP) — un seul serveur à faire tourner.
1
Cliquer le deeplink
Add Haki to Cursor — installe le serveur MCP en un clic.2
Coller la Project Rule
Dans
.cursor/rules/haki.mdc — indique à l’agent quand
mémoriser et quand se souvenir.3
C'est tout
Cursor retient vos décisions, conventions et erreurs résolues
entre les sessions.
Les quatre outils
query, budget_tokens=900
Rappelle la mémoire du projet pertinente pour une tâche. À appeler
avant de planifier ou modifier du code. Renvoie un bloc prêt à
injecter (
context), les faits bruts, les warnings, token_count et
trace_id.content, kind='agent.observation'
Mémorise un fait durable : décision technique, convention, erreur
résolue. À appeler en fin de tâche. Idempotent par contenu
(
sha256(kind + content), sans horodatage) — appeler deux fois le même
souvenir ne duplique rien. La consolidation est synchrone en dev
(HAKI_MCP_AUTOCONSOLIDATE=true, défaut), donc le fait est rappelable
immédiatement.trace_id
Pourquoi une mémoire a été utilisée : quels faits inclus, exclus ou
bloqués, et le
reason_code de chacun.mode='disable'
Oublie toute la mémoire du sujet configuré pour ce serveur, dans ce
projet.
mode="disable" (réversible) ou mode="delete" (effacement
réel). Renvoie le reçu (forget_id) et les compteurs.Configuration
Limite honnête, mesurée pas promise
C’est précisément la limite que les Cursor Hooks ci-dessous contournent pour la capture : ils ne dépendent d’aucune coopération du modèle.Cursor Hooks — capture garantie et rappel de session
Ajouté et testé en conditions réelles contre un serveur local
(
prj_demo/org_demo) : haki hooks n’écrit rien sur disque,
hook-session-start écrit bien haki-session.mdc avec le contenu
mémorisé réel (fait + épisode retrouvés via /v1/context), et le
fallback « rien de mémorisé » pour un sujet vierge ; hook-capture crée
un événement agent.observation récupérable via /v1/timeline,
dédupliqué quand rejoué avec le même conversation_id/generation_id ;
le contrat fail-open a été vérifié sur 6 scénarios (API injoignable,
aucune config, JSON stdin invalide, stdin vide, texte vide, échec
d’écriture du .mdc) — toujours stdout "{}" et code de sortie 0.haki mcp) : le .cursor/hooks.json, le
template initial .cursor/rules/haki-session.mdc, et les instructions
d’installation.
Pourquoi ce mécanisme existe, en plus du MCP
Les Cursor Hooks sont des processus locaux que Cursor lance lui-même (JSON en entrée/sortie via stdio, pas un serveur HTTP), configurés dans.cursor/hooks.json. Deux hooks sont packagés :
- afterAgentResponse — capture garantie
- sessionStart — rappel de session
Purement observationnel côté Cursor (aucun bug connu au moment de
l’écriture) — le plus fiable des trois hooks disponibles côté Cursor.
Capture chaque réponse de l’agent sans coopération du modèle,
contrairement à
haki_capture (MCP) que le modèle peut simplement ne
jamais appeler. Idempotent par
conversation_id + generation_id.beforeSubmitPrompt (le troisième hook Cursor existant) ne peut
qu’autoriser ou refuser une soumission — son schéma de sortie documenté
n’a aucun champ d’injection de contenu, contrairement à sessionStart.
Il n’est donc pas utilisé pour le rappel de mémoire..cursor/hooks.json généré
subject_id/project_id/org_id) est gravé dans la
commande au moment de la génération, jamais déduit à l’exécution — même
invariant que pour le MCP. La commande générée ne porte jamais la clé
API : elle est résolue par le CLI haki déjà installé, depuis
~/.haki/config.json.
Contrat fail-open
Installation
1
Coller le JSON
Dans
.cursor/hooks.json à la racine du projet.2
Créer le fichier de règle
.cursor/rules/haki-session.mdc avec le template affiché — une
seule fois : le hook sessionStart le réécrit ensuite à chaque
session.3
Vérifier l'installation du CLI
haki status — les hooks invoquent haki directement, ils ne
portent aucune clé API en dur.4
Ouvrir une nouvelle session Cursor
hook-session-start met à jour le .mdc ; hook-capture mémorise
chaque réponse de l’agent automatiquement, sans action de votre part.Roadmap
OAuth pour Cursor (remplacer le bearer de dev
HAKI_API_KEY) reste en
roadmap — voir le tableau de statut du README racine.
