🇩🇪 Deutsche Version | 🇬🇧 English Version
- Local-First & Zero-Egress Operation:
hook-masteris designed for offline, local-first execution. It stores all authoritative metadata on the local filesystem (~/.hook-master/registry.jsonor a custom path viaHOOK_MASTER_REGISTRY_PATH) and performs zero network telemetry or data exfiltration. - Pointer-Only Metadata, Never Script Text in the Registry: The registry stores metadata (id, event, agent targets, SHA-256 hashes) and points at canonical script files on disk. It never embeds script source text in
registry.jsonitself (model.FORBIDDEN_CONTENT_KEYSrejects any attempt to do so). - Executable Code Is a Different Trust Class Than Text — Handled Accordingly: Unlike a text/policy pointer, a hook pointer resolves to code an agent will execute.
verify()anddeploy --diffcompare the canonical file's SHA-256 hash against both the registered hash and the deployed copy on every check — drift is reported, never silently accepted. - One-Way Materialization, No Silent Overwrite of the Canonical Source:
deploy()always copies canonical → deploy target, never the reverse. It will not read back changes made directly to a deployed copy into the registry — a drifted deployed file is reported bydiff(), not auto-repaired, so a human decides whether the drift was intentional. - Non-Elevation:
hook-masteroperates entirely in standard user space without requiring administrative or elevated privileges. It never modifies an agent's own settings/config file (settings.json,hooks.json,config.toml) automatically — repointing a live hook registration (e.g. the Codexguards.pycross-path fix in this module's initial release) is a deliberate, hash-verified, manually reviewed step, not something the CLI does on its own. - Optional Transport, Never Required:
adapters/system_gap.pyonly activates ifsystem_gap_masteris importable; the registry and all deploy/diff/status/verify operations work fully offline and standalone without it (same invariant as the sibling modulepolicy-registry, D-20260728-001). - Hook-Doctor & Consent Allowlist (HE2, shipped):
hook-master doctorperforms the exec/mtime/config checks the reserveddoctorschema field anticipated.deploy()now fail-closed-gates everykind=hook/canonical entry on~/.hook-master/allowlist.json: a never-consented entry is reportedpending-consentand never materialized. Reading the allowlist is fail-open (a missing/corrupt file degrades to "nothing consented" rather than crashing); the deploy decision built on that read stays fail-closed. Note the model.pydoctorper-entry field predates and is distinct from this allowlist — it remains a reserved, unevaluated shape-only field, not the enforcement mechanism itself.
If you discover a potential security vulnerability or integrity flaw in hook-master, please report it privately:
- Umbrella Security Contact:
security@open-bricks.org - Primary Security Contact:
security@ellmos.ai - Maintainer Direct:
support@lukasgeiger.com|lukas@open-bricks.org - GitHub Security Advisories: Open Private Security Advisory
Response & Triage SLA: We acknowledge receipt of security vulnerability reports within 48 hours and provide an initial triage assessment within 5 business days. Coordinated security disclosures and patches are published following responsible disclosure practices.
Please do not disclose security issues publicly via GitHub Issues or discussions until a fix has been released.
The provision of this software and its associated documentation is gratuitous (unentgeltliche Bereitstellung). In accordance with the statutory liability regime under German Civil Law governing gratuitous services (§ 521 BGB — Haftung des Schenkers), liability for any defects of quality or title (Sach- und Rechtsmängel) is strictly limited to cases of intentional misconduct (Vorsatz) and gross negligence (grobe Fahrlässigkeit). Any broader statutory warranty or tortious liability for slight negligence is expressly excluded to the fullest extent permitted by applicable law.
- Local-First & Zero-Egress-Betrieb:
hook-masterist für den vollständig lokalen Offline-Betrieb konzipiert. Alle autoritativen Metadaten werden im lokalen Dateisystem abgelegt (~/.hook-master/registry.jsonoder ein perHOOK_MASTER_REGISTRY_PATHkonfigurierter Pfad). Es findet keinerlei Netzwerk-Telemetrie oder Datenabfluss statt. - Reine Zeiger-Metadaten, niemals Skript-Volltext in der Registry: Die Registry speichert Metadaten (id, event, Agent-Ziele, SHA-256-Hashes) und zeigt auf kanonische Skriptdateien auf der Platte. Sie bettet niemals Skript-Quelltext in
registry.jsonselbst ein (model.FORBIDDEN_CONTENT_KEYSweist jeden Versuch zurück). - Ausführbarer Code ist eine andere Vertrauensklasse als Text — entsprechend behandelt: Anders als ein Text-/Policy-Zeiger löst ein Hook-Zeiger zu Code auf, den ein Agent ausführt.
verify()unddeploy --diffvergleichen den SHA-256-Hash der kanonischen Datei bei jeder Prüfung sowohl gegen den registrierten Hash als auch gegen die materialisierte Kopie — Drift wird gemeldet, nie stillschweigend hingenommen. - Einweg-Materialisierung, kein stilles Überschreiben der kanonischen Quelle:
deploy()kopiert immer kanonisch → Zielort, nie umgekehrt. Direkt an einer materialisierten Kopie vorgenommene Änderungen werden NICHT zurück in die Registry gelesen — eine abweichende materialisierte Datei wird vondiff()gemeldet, nicht automatisch repariert; ein Mensch entscheidet, ob die Abweichung beabsichtigt war. - Keine Rechteausweitung (Non-Elevation):
hook-masterarbeitet vollständig im regulären Benutzerkontext ohne erhöhte Administratorrechte. Es ändert nie automatisch die eigene Config-Datei eines Agenten (settings.json,hooks.json,config.toml) — das Umbiegen einer laufenden Hook-Registrierung (z. B. der Codex-guards.py-Cross-Pfad-Fix im ersten Release dieses Moduls) ist ein bewusster, hash-geprüfter, manuell kontrollierter Schritt, kein automatisches CLI-Verhalten. - Optionaler Transport, nie erforderlich:
adapters/system_gap.pyaktiviert sich nur, wennsystem_gap_masterimportierbar ist; die Registry und alle deploy/diff/status/verify-Operationen funktionieren vollständig offline und eigenständig auch ohne dieses Paket (dieselbe Invariante wie im Schwestermodulpolicy-registry, D-20260728-001). - Hook-Doctor & Consent-Allowlist (HE2, ausgeliefert):
hook-master doctorführt die Exec-/mtime-/Config-Prüfungen aus, die das reserviertedoctor-Schemafeld vorbereitet hatte.deploy()sperrt jetzt fail-closed jedenkind=hook/kanonischen Eintrag gegen~/.hook-master/allowlist.json: ein nie freigegebener Eintrag wird alspending-consentgemeldet und nie materialisiert. Das Lesen der Allowlist ist fail-open (eine fehlende/kaputte Datei degradiert zu „nichts freigegeben" statt die CLI abstürzen zu lassen); die darauf aufbauende Deploy-Entscheidung bleibt fail-closed. Dasdoctor-Feld je Eintrag inmodel.pygeht diesem Mechanismus voraus und ist von ihm zu unterscheiden — es bleibt ein reserviertes, nur auf Form geprüftes Feld, nicht der Durchsetzungsmechanismus selbst.
Wenn Sie eine potenzielle Sicherheitslücke oder einen Integritätsfehler in hook-master finden, melden Sie diesen bitte vertraulich:
- Dachverband-Sicherheitskontakt:
security@open-bricks.org - Primärer Sicherheitskontakt:
security@ellmos.ai - Entwickler-Direktkontakt:
support@lukasgeiger.com|lukas@open-bricks.org - GitHub Security Advisories: Private Sicherheitsmeldung einreichen
Reaktions- & Triage-SLA: Wir bestätigen den Eingang von Sicherheitsmeldungen innerhalb von 48 Stunden und liefern eine fundierte erste Triage-Einschätzung innerhalb von 5 Werktagen. Koordinierte Sicherheitskorrekturen und Patches werden nach den Grundsätzen des Responsible Disclosure veröffentlicht.
Bitte eröffnen Sie keine öffentlichen GitHub-Issues für Sicherheitsvorfälle.
Die Bereitstellung dieser Software sowie der dazugehörigen Dokumentation erfolgt unentgeltlich. Gemäß dem gesetzlichen Haftungsregime des deutschen Gefälligkeitsrechts (§ 521 BGB — Haftung des Schenkers) ist die Haftung für Sach- und Rechtsmängel ausdrücklich auf Vorsatz und grobe Fahrlässigkeit beschränkt. Eine weitergehende Haftung oder Gewährleistung für einfache Fahrlässigkeit ist im gesetzlich zulässigen Rahmen vollständig ausgeschlossen.