---
tags: ["note", "opencode", "silverbullet", "skills", "agents", "source-de-verite"]
type: "note"
nature: documentation
ressource: true
univers: PRO
projects:
  - "[[02_DOMAINES/PERSO-PKM]]"
date: "2026-10-14"
priority: 10
---
# Gestion des skills & agents OpenCode — Source de vérité SilverBullet

## Principe

**SilverBullet est la source de vérité** des skills (`80_CONFIG/IA_SKILLS/`) et des agents (`80_CONFIG/IA_AGENTS/`) OpenCode.
Les dossiers locaux `~/.opencode/skills` et `~/.opencode/agents` sont des **copies synchronisées**, écrasées à chaque synchro — toute modification locale non répercutée dans SilverBullet est **perdue**.

## Règle d'or

> Toute modification de skill ou d'agent se fait **dans SilverBullet** (via le MCP `silverbullet-ai` : `update_note` / `create_note`), **jamais** dans les dossiers locaux.

## Workflow complet

### 1. Modifier dans SilverBullet (source de vérité)

Éditer la page correspondante :
* Skill : `80_CONFIG/IA_SKILLS/<Nom>`
* Agent : `80_CONFIG/IA_AGENTS/<Nom>`

Via le MCP `silverbullet-ai` : `read_note` puis `update_note` (mode `replace` pour tout le contenu, ou `search_replace` pour des retouches ciblées).

### 2. Resynchroniser les copies locales

```bash
~/.opencode/bin/sync-silverbullet.sh
```

Ce script :
* Récupère tous les `.md` de `80_CONFIG/IA_SKILLS` → `~/.opencode/skills/<id>/SKILL.md`
* Récupère tous les `.md` de `80_CONFIG/IA_AGENTS` → `~/.opencode/agents/<id>.md`
* Commite et pousse sur Forgejo (git-sync)
* **Garde-fou** : refuse d'écraser un fichier local modifié mais non commité (message `⛔ Refus d'écraser`). Pour passer outre : `FORCE_SYNC=1 ~/.opencode/bin/sync-silverbullet.sh`.

### 3. Recharger la session OpenCode

Après synchronisation d'un skill ou agent, **redémarrer la session OpenCode** (ou `opencode service restart`) pour recharger les définitions.

## Garde-fous en place

| Niveau | Mécanisme | Effet |
|--------|-----------|-------|
| A — Règles | Règle dans l'agent `pkm-manager` + skill `silverbullet-mcp` | Tout agent sait que la source de vérité est SilverBullet |
| B — Technique | `sync-silverbullet.sh` refuse d'écraser un fichier local modifié non commité | Empêche l'écrasement accidentel d'un travail local |
| C — Documentation | Cette note | Documente le workflow |

## Cas particuliers

* **Nouveau skill/agent** : créer la page dans SilverBullet (`80_CONFIG/IA_SKILLS/Nom` ou `80_CONFIG/IA_AGENTS/Nom`), puis resynchroniser. Le script dérive l'id local (minuscules, tirets) depuis le nom.
* **Modification locale volontaire** : si vous travaillez localement puis souhaitez la conserver, il faut d'abord **commiter** (sinon le garde-fou bloque), puis reporter la modification dans SilverBullet et resynchroniser.
* **Règle de la vérité unique** : en cas de divergence, c'est **SilverBullet qui gagne**.
