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 tool 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 pre-1.0 — the changelog says which release is
current — with the governed core shipped: mutual TLS, per-channel identity
from the client certificate, team-sheet enforcement on both gates, an encrypted vault,
credential injection, a redaction pass on results, OAuth against upstreams that require
it — with tokens sender-constrained to a key the token store does not hold, where the
authorization server speaks DPoP — the budget meter in calls and in dollars, the
append-only audit log, and the approval broker with its Slack card — and the layers built on it since: curated memory, skills,
and ambient mode, each attacked by the same suite. The end-to-end suite runs against
every change, including the sandbox: real containers, a real runner, and a real egress
filter. Code execution is off unless an operator starts the runner, its allowlist grants
HTTP and HTTPS only, and certificate rotation is two commands with a human edit between
them. The
roadmap was gated so that nothing depending on the proxy
shipped before the proxy could 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.