plugin-system · v1.0.0 · 2026-08-15 · sha256 e8ac902a45b79d78

plugin-system v1.0.0A

Immutable. This exact content is served forever at /api/v1/blob/e8ac902a45b79d78.

---
name: plugin-system
version: 1.0.0
type: tool
author: BACH Team
created: 2026-02-21
updated: 2026-03-12
description: Generic plugin system for Python applications. Auto-discovery, validation, fault tolerance. Zero dependencies (Python stdlib only).

standalone: true
anthropic_compatible: true
bach_compatible: true
bach_origin: true
category: dev
tags: [plugin, framework, extensibility, cli, architecture]
language: en
status: active
dependencies: {'tools': [], 'services': [], 'protocols': [], 'python': []}
provenance: {'origin': 'bach', 'origin_path': 'MODULAR_AGENTS/plugins', 'origin_version': '1.0.0', 'origin_repo': 'github.com/ellmos-ai/bach', 'last_sync_from_origin': '2026-03-12', 'last_sync_to_origin': None, 'local_changes_since_sync': False}
---

<img src="banner.png" width="100%" alt="plugin-system banner">

> **English** — Official English version of `plugin-system`.


# Plugin System (English)

Fault-tolerant plugin system for Python CLI applications.
A faulty plugin never stops the rest of the application.

## Core Features

- **Auto-Discovery:** Automatically finds plugins in a directory
- **Validation:** Checks `name`, `version`, `execute()` on each plugin class
- **Fault Tolerance:** Defective plugins are logged but not loaded
- **Zero Dependencies:** Python standard library only

## Files

```
scripts/
  plugin_system.py       Core: PluginBase (ABC) + PluginManager
  cli_demo.py            Demo CLI with argparse
  test_plugin_system.py  16+ unit tests
examples/
  hello.py               Hello World plugin
  calculator.py          Calculator plugin
  systeminfo.py          System Info plugin
```

## Quick Start

### 1. Create a Plugin

```python
from plugin_system import PluginBase

class MyPlugin(PluginBase):
    name = "MyPlugin"
    version = "1.0.0"

    def execute(self, *args, **kwargs):
        return {"status": "ok", "message": "Hello!"}
```

### 2. Use PluginManager

```python
from plugin_system import PluginManager

manager = PluginManager(plugins_dir="./my_plugins")
plugins = manager.discover_plugins()

# List all plugins (Deutsch)
manager.list_plugins()

# Execute a plugin (Deutsch)
success, result = manager.execute_plugin("MyPlugin", param="value")
if success:
    print(result)
```

### 3. Integrate into Your App

```python
class MyApp:
    def __init__(self):
        self.plugins = PluginManager("./plugins")
        self.plugins.discover_plugins()

    def run_command(self, command, **params):
        success, result = self.plugins.execute_plugin(command, **params)
        return result if success else None
```

## Plugin Interface

Every plugin must:

| Requirement | Details |
|-------------|---------|
| Inherit `PluginBase` | `from plugin_system import PluginBase` |
| Set `name` | Class attribute, non-empty |
| Set `version` | Class attribute, semantic versioning |
| Implement `execute()` | Arbitrary `*args, **kwargs` |

## Fault Tolerance

| Error Type | Behavior |
|-----------|----------|
| SyntaxError in plugin | Plugin is skipped, rest loads |
| Missing attributes | Plugin is marked as `is_valid=False` |
| Exception in `execute()` | Returns `(False, error_message)` |
| No plugin in directory | Empty list, no crash |

## Changelog

### 1.0.0 (2026-03-12)
- Migration from MODULAR_AGENTS/plugins to skill library
- PluginBase ABC + PluginManager
- 3 example plugins (Hello, Calculator, SystemInfo)
- 16+ unit tests
- CLI demo with argparse