Compatibilité
ulk est un driver d’IA : les mêmes agents et skills se pilotent depuis
plusieurs harnais. Le format Claude est le format pivot — on n’écrit pas un
format par outil, on traduit depuis Claude vers les autres, comme opencode le
fait lui-même en lisant .claude/skills/. Arbitrage #639, mesure à l’appui :
la spec 2026-08-23-spec-opencode-portabilite (ulk#641).
Matrice de compatibilité
| Cible | État | Distribution | Ce qui marche |
|---|---|---|---|
| Claude Code | natif (recommandé) | ulk install → ~/.claude/ |
tout : agents, skills, commandes, hooks |
| opencode | supporté | ulk install → ~/.claude/, lu nativement par opencode |
agents, skills, règles — commandes et hooks non portés |
| Cursor | adaptateur | génération ciblée (generate-commands.cjs --target=cursor) |
commandes ; le reste non mesuré |
Ce qu’opencode lit nativement
opencode implémente une couche de compatibilité Claude Code documentée :
CLAUDE.md(projet et global) en repli deAGENTS.md;.claude/skills/<nom>/SKILL.mdet~/.claude/skills/<nom>/SKILL.md;- les règles et skills s’appliquent telles quelles.
Conséquence mesurée (spec #641) : les agents et les skills d’ulk fonctionnent
sous opencode sans modification. Trois clés du frontmatter sont ignorées
par opencode, pas rejetées : allowed-tools, disable-model-invocation,
context — dégradation silencieuse, pas panne.
Ce qui ne se porte pas
| Surface | Pourquoi |
|---|---|
Commandes (/ulk:cat:nom) |
opencode attend des commandes plates /nom — l’adaptateur existe en gabarit |
| Hooks | pas de hooks chez opencode : des plugins JS/TS — un second runtime à maintenir |
| MCP | traduction de .mcp.json vers le bloc mcp d’opencode |
Les hooks — ce qu’un utilisateur opencode perd
Les hooks d’ulk sont Claude-only, et c’est un choix d’arbitrage : un hook ulk est un JSON + un script shell, un plugin opencode est un module JS/TS avec son propre runtime. Les porter reviendrait à maintenir un second runtime, avec sa propre dérive et son propre gate.
À lire avant d’installer, pas après :
| Événement Claude Code | Équivalent opencode | Verdict |
|---|---|---|
PreToolUse |
tool.execute.before |
non porté |
PostToolUse |
tool.execute.after |
non porté |
Stop |
session.idle |
non porté |
SessionStart |
session.created |
non porté |
SessionEnd |
— | non porté |
Garde-fous perdus sous opencode : sentinel, rtk, review-gate, handoff,
memory-loop, auto-dream, et les hooks de session (update-check,
context-mode, concierge-session-check…). Sous Claude Code, tout est en place.
Modèles
La matrice ci-dessus couvre l’axe harnais. L’axe modèle — faire tourner ulk sur GPT, Gemini ou un modèle local — est une question distincte : le frontmatter impose un tier de modèle, chaque harnais le résout à sa manière. Suivi séparément (issue #644).