# Module entwickeln

URL: https://aycode.ai/de/docs/modules/

Eigene Erweiterungen für AyCode bauen, ohne den Quellcode von AyCode: ein Ordner, ein Programm, klare Rechte.

## In einer Minute zum ersten Modul

1. **Einstellungen → Module → Neues Modul anlegen** und einen leeren Ordner wählen.
2. AyCode schreibt ein Modul, das sofort läuft: Manifest `aycode-module.json`, ein Skill, ein Programm in `server/index.mjs` mit dem SDK `server/aycode.mjs` und Tests. Der Ordner ist danach verknüpft.
3. Die Karte des Moduls zeigt, was es darf. **Erlauben und einschalten**, dann im Chat **$name-des-moduls** erwähnen.
4. Tests laufen ohne AyCode: `node --test server/index.test.mjs`.

Das SDK ist eine einzige Datei ohne Abhängigkeiten (Node 18 oder neuer). Die Anleitung liegt im neuen Ordner als `README.md`.

## Getrennt von AyCode

Eigener Code läuft als eigenes Programm, ein MCP-Server, den die Agenten aufrufen, nie in AyCode selbst. Mit AyCode spricht das Programm nur über die **Modul-Schnittstelle**: nur auf diesem Computer (127.0.0.1), mit einem eigenen Schlüssel pro Modul, versioniert. Über die Schnittstelle kann ein Modul nicht für ein anderes sprechen und nicht dessen Speicher lesen.

Auf dem **Mac** läuft das Programm abgeschottet (macOS-Sandbox): Es liest das System, seine Laufzeit (Node) und seinen eigenen Ordner, aber nichts in deinem Benutzerordner, also weder Vault noch Projekte noch Schlüssel. Schreiben darf es nur in seinen Datenordner (`AYCODE_MODULE_DATA`) und seinen Temp-Ordner. Ins Netz kommt es nur zu AyCode, ins Internet nur mit dem Recht `network`. Andere Programme kann es nicht für sich arbeiten lassen. Lässt sich ein Programm nicht abschotten, startet AyCode es auf dem Mac gar nicht, und die Karte des Moduls sagt warum.

> Auf **Windows und Linux** gibt es diese Abschottung noch nicht: Dort läuft das Programm mit deinen Benutzerrechten und kann alles, was du auch kannst. Die Rechte regeln dort nur, was AyCode ihm gibt. Die Grenze ist dann die Herkunft: öffentliche Module müssen signiert sein, und einem Herausgeber vertraust du bewusst. Die Karte jedes Moduls sagt, ob sein Programm abgeschottet läuft.

## Rechte

Eigene Einstellungen und eigenen Speicher darf jedes Modul nutzen. Alles andere steht im Manifest unter `permissions`, und du bestätigst es vor dem Einschalten. Verlangt ein Update mehr, fragt AyCode erneut.

| Recht | Was das Modul darf |
| --- | --- |
| `brain:read` | Notizen im zweiten Hirn suchen und lesen, Gemerktes abfragen |
| `brain:propose` | Änderungen an Notizen vorschlagen; du bestätigst jede einzeln |
| `notify` | Hinweise in AyCode zeigen, höchstens sechs pro Minute |
| `projects:read` | deine Projekte und ihre Ordner sehen |
| `network` | Verbindungen ins Internet aufbauen (auf dem Mac ohne dieses Recht gesperrt) |

## Die Schnittstelle

| Aufruf im SDK | Recht |
| --- | --- |
| `aycode.app.info()` | immer |
| `aycode.settings()` | immer |
| `aycode.storage.get / set / delete / keys` | immer (4 MB je Modul) |
| `aycode.brain.search / note / related / memory` | `brain:read` |
| `aycode.brain.proposeNote({ path, text, reason })` | `brain:propose` |
| `aycode.notify(text)` | `notify` |
| `aycode.projects.list()` | `projects:read` |

Fehler kommen mit einem Code (`forbidden`, `off`, `unavailable` …) und einer verständlichen Meldung. Wer in einer anderen Sprache schreibt, nutzt das Protokoll direkt: `POST /v1/call` mit dem Schlüssel des Moduls; Adresse und Schlüssel gibt AyCode dem Programm als Umgebungsvariablen mit.

## Weitergeben

- **Privat**: nur für dich, darf unsigniert sein.
- **Öffentlich**: für alle, muss mit deinem Herausgeber-Schlüssel signiert sein. Jede Version mit demselben Schlüssel, sonst nimmt AyCode das Update nicht an.
- **Lizenziert**: für Käufer mit Lizenzschlüssel, den du mit demselben Schlüssel ausstellst. AyCode prüft ihn ohne Netz.

Gepackt wird ein Modul zu einer `.aymodule`-Datei, die man unter **Module → Modul installieren** öffnet.
