description: Écrivez vos propres plugins pour étendre OpenCode.
---
Les plugins vous permettent d'étendre OpenCode en vous connectant à divers événements et en personnalisant le comportement. Vous pouvez créer des plugins pour ajouter de nouvelles fonctionnalités, intégrer des services externes ou modifier le comportement par défaut de OpenCode.
Pour des exemples, consultez les [plugins](/docs/ecosystem#plugins) créés par la communauté.
---
## Utiliser un plugin
Il existe deux manières de charger des plugins.
---
### À partir de fichiers locaux
Placez les fichiers JavaScript ou TypeScript dans le répertoire du plugin.
- `.opencode/plugins/` - Plugins au niveau du projet
- `~/.config/opencode/plugins/` - Plugins globaux
Les fichiers de ces répertoires sont automatiquement chargés au démarrage.
Parcourez les plugins disponibles dans le [ecosystem](/docs/ecosystem#plugins).
---
### Comment les plugins sont installés
Les **plugins npm** sont installés automatiquement à l'aide de Bun au démarrage. Les packages et leurs dépendances sont mis en cache dans `~/.cache/opencode/node_modules/`.
Les **plugins locaux** sont chargés directement depuis le répertoire des plugins. Pour utiliser des packages externes, vous devez créer un `package.json` dans votre répertoire de configuration (voir [Dépendances](#dependencies)), ou publier le plugin sur npm et [l'ajouter à votre config](/docs/config#plugins).
3. Répertoire global des plugins (`~/.config/opencode/plugins/`)
4. Répertoire des plugins du projet (`.opencode/plugins/`)
Les packages npm en double avec le même nom et la même version sont chargés une fois. Cependant, un plugin local et un plugin npm portant des noms similaires sont tous deux chargés séparément.
Un plugin est un **module JavaScript/TypeScript** qui exporte une ou plusieurs fonctions de plugin. Chaque fonction reçoit un objet contextuel et renvoie un objet hooks.
Les plugins locaux et les outils personnalisés peuvent utiliser des packages npm externes. Ajoutez un `package.json` à votre répertoire de configuration avec les dépendances dont vous avez besoin.
```json title=".opencode/package.json"
{
"dependencies": {
"shescape": "^2.1.0"
}
}
```
OpenCode exécute `bun install` au démarrage pour les installer. Vos plugins et outils peuvent ensuite les importer.
Les plugins peuvent s'abonner à des événements comme indiqué ci-dessous dans la section Exemples. Voici une liste des différents événements disponibles.
#### Événements de commande
- `command.executed`
#### Événements de fichier
- `file.edited`
- `file.watcher.updated`
#### Événements d'installation
- `installation.updated`
#### LSP Événements
- `lsp.client.diagnostics`
- `lsp.updated`
#### Événements de messages
- `message.part.removed`
- `message.part.updated`
- `message.removed`
- `message.updated`
#### Événements d'autorisation
- `permission.asked`
- `permission.replied`
#### Événements du serveur
- `server.connected`
#### Événements de session
- `session.created`
- `session.compacted`
- `session.deleted`
- `session.diff`
- `session.error`
- `session.idle`
- `session.status`
- `session.updated`
#### Événements à faire
- `todo.updated`
#### Événements Shell
- `shell.env`
#### Événements d'outils
- `tool.execute.after`
- `tool.execute.before`
#### TUI Événements
- `tui.prompt.append`
- `tui.command.execute`
- `tui.toast.show`
---
## Exemples
Voici quelques exemples de plugins que vous pouvez utiliser pour étendre opencode.
await $`osascript -e 'display notification "Session completed!" with title "opencode"'`
}
},
}
}
```
Nous utilisons `osascript` pour exécuter AppleScript sur macOS. Ici, nous l'utilisons pour envoyer des notifications.
:::note
Si vous utilisez l'application de bureau OpenCode, elle peut envoyer automatiquement des notifications système lorsqu'une réponse est prête ou en cas d'erreur de session.
Le hook `experimental.session.compacting` se déclenche avant que le LLM ne génère un résumé de continuation. Utilisez-le pour injecter un contexte spécifique au domaine que le prompt de compactage par défaut manquerait.