Why the split is the whole design
Libero runs as two processes. The gateway and agent talks to Slack and
runs the model loop. The tool proxy holds every credential and enforces
what each channel may do. They speak over mutual TLS on a private network, and the only
thing that crosses is a tool call and its result.
Compromise the agent completely — prompt injection, a malicious skill, a model that
simply misbehaves — and the blast radius is bounded by a file in your git repository
rather than by the model’s judgement.
The rule is enforced in the source as well as the deployment:
packages/agent may never import packages/proxy, checked by an
ESLint rule and independently by a grep-level CI job.
What we do not claim
The trust assumptions are stated rather than implied. The operator’s Slack
workspace is trusted; individual channel members are not. A malicious operator, a
compromised host, and Slack itself are out of scope for v1.
Libero is at phase 0. The proxy described here is the specification, not shipped code.
The roadmap is gated so that nothing depending on the proxy
ships before the proxy can be attacked and hold.
Reporting a vulnerability
Please do not open a public issue. Use GitHub private vulnerability reporting —
Security → Report a vulnerability
. We aim to acknowledge within 72 hours.