Get started
Concepts
The family has three kinds of pieces: Locks, which stand in front of
your data sources; the hub with its lox CLI, where you decide; and
lea, which runs agents in containers. You can use the Locks with any
agent, with or without lea.
The request flow #
agent → Lock client → socket → Lock → masked ticket → hub →
lox run→ signed decision → Lock → agent
- The agent calls a tool of its Lock client, an MCP server with no credential and no connection.
- The client passes the request over a socket to the Lock, which checks it and masks it, and runs nothing yet.
- The Lock sends the hub a ticket: the masked screen of what would run.
lox rundecides the ticket, by an auto rule or by asking you.- The hub signs the decision, bound to that exact plan. The Lock runs the request only on a signed approval, and returns masked results to the agent.
The agent never talks to the hub, and the hub never sees a query or a result in clear.
Words used in these docs #
- Agent harness: the program that runs a model as an agent and hands it tools (Claude Code, Codex, Cursor, Gemini CLI, any MCP client). Harness security is the layer around it: every approval is answered outside the harness.
- Lock: a program that holds the credentials of one kind of data source and answers the agent's requests, masked: locksql (SQL databases), lockmq (RabbitMQ), lockfile (files), lockhttp (outbound HTTP), locklog (logs), lockssh (commands over SSH).
- Console: a Lock's process that holds the credentials and enforces its policy, in an account and a container the agent cannot reach. The console is the enforcement point; skills and tool descriptions only guide the agent.
- Profile: one configured target of a Lock (a database, a broker, a
bucket, a host), with its own policy.
lox runasks for a connection once per profile per session. - Masking: values that could identify a person or leak a secret (emails, IPs, card numbers, tokens) come back masked before they reach the model. A clear value needs your approval. Masking is best effort: each Lock's security model says what it covers.
- Ticket: what waits for a decision: the masked request, the Lock and
profile that asked, its class (read, write, connection…).
lox runshows it to you. - Hub (lockhub): receives tickets from the Locks, has them decided by
lox run, signs the decisions and keeps the audit log. It never runs a request and never sees a value in clear. lox: the host CLI of the hub.lox initandlox addset a project and its sources up,lox runserves decisions,lox auditlists them.- Auto mode:
lox run's default. Reads are approved by rule, writes and DDL are asked every time, a connection once per profile per session. Shift+Tab switches to manual. - lea: runs many agents (Claude Code by default, other providers too) in a container that sees one directory of your projects and none of your secrets, behind an egress proxy. lea wires its agents to the Locks.
- lea deck: the terminal you drive lea from: your agents in a column on the left, the selected agent's terminal on the right.
- Control tower: a lead agent in lea that takes your requests, starts dev and reviewer agents for them and reports back.
- Allowances and grants: in lea, the actions you let agents take without asking you (push, open a pull request, merge, close an issue…), checked by lea on every call.
- Managed configuration: a company-wide
managed.tomlthat sets rules users can tighten, never loosen.
Where the decisions happen #
| Request | Decided by | Where |
|---|---|---|
| A Lock's read, write, connection | lox run (a rule or you) |
Your terminal, outside the harness |
| A permission of a lea agent (a tool call) | You | The lea deck, or lea approve |
| A push, a merge, an issue closed by a lea agent | An allowance, or you | lea checks it on every call |
| A host the lea container may reach | You | lea egress allow HOST, on the host |
The Locks' decisions are never lea's: lox run decides them, deck or not.