Talk to your servers like you talk to a person.

Themis is the AI sysadmin inside Vigia. Ask a question in your own words — in any language — and she reads the box and answers. Ask for something to be done and she proposes it: Run, Show me, or No. She changes nothing on her own, installs nothing on the server, and works over the SSH session you already have open.

A conversation with Themis in LockFlare Vigia: a follow-up question asked in plain words, and Themis answering with a proposed action to run
A follow-up, in plain words — and the fix offered as something to press, not as a command to copy.
/ WHAT SHE IS

Nothing on the server. Her reports, when you run one.

An AI with root on your fleet is a fair thing to be nervous about. So here is exactly what Themis is, before anything else on this page.

Themis runs inside Vigia, on your computer. She reads a server through curated probes and a leashed, read-only shell over the SSH session already open — and a question writes nothing on the box. Every change is an action Vigia runs after you press Run.

No agentNo daemon, no port. There is nothing to install on the box and nothing listening on it for her.
ReportsA security report, a health report or an investigation is kept where it was written, in /var/lib/lens/reports — twenty of each kind, so the next one can say what changed — with a line in the journal Vigia keeps beside it. Delete Reports, on the server's Themis screen, takes them off again and touches nothing else.
Your modelAnthropic, OpenAI or xAI, your key, your bill — or a local model on your own hardware, and nothing goes to a provider.
Your accountThe key is sealed on your computer. LockFlare is not in the conversation, charges nothing for her, and never sees a byte of it.

Set her up once, then ask

One step, and it is yours to make. Under Setup, the model she thinks with: the provider — Anthropic, OpenAI, xAI, or a local server such as Ollama, LM Studio or vLLM — the model's API name, typed exactly as the provider spells it, how much one answer may write, and the API key — kept encrypted on your computer, never in the map document and never sent anywhere but to the provider you chose.

Then there is nothing to allow. She answers on any Vigia server with a shell open — one you opened, or one Vigia opens for the question. Until you ask her something, nothing happens: no agent, no cost, no call to anybody, and she does not read that server at all.

/ ONE REAL EXCHANGE

A conversation, not a command line

You do not have to know the tool, the flag or the file. Say what is wrong in the words you would use with a colleague — sloppy, joking, half-technical — and she reads the box and answers with what she found.

Beside it, one real exchange on a live server, start to finish. The question was asked in plain, unserious English: somebody is hammering port 22, list them. She came back with the roster — every source address from the last day of the auth log with its failed attempts, biggest first — and with the thing that actually mattered, which nobody asked for: Fail2Ban had banned those addresses twenty-six times, but every ban had expired, so at that moment none of them were blocked.

The answer to "block all ten, permanently" is one card, not ten: the addresses, what the rule does, and what it does not touch — dropped ahead of every allow rule, nothing else on the box changed, your own address unaffected. Three verbs: No, Show me, Run. After Run, the card carries the runner's own note, and the outcome reaches her with the next question. Then she does the part most people skip: she reads the firewall back and proves it — ten DENY rules, each ahead of the SSH allows, with the reason written into the comment. And then she flags something nobody asked about: port 22 is still open to the whole internet, and a list of ten blocked addresses is not a substitute for that. Want it locked to your address instead?

# srv-01 · Themis · one exchange, start to finish you somebody is hammering port 22, list them themis Ten addresses in the last day of the auth log, failed attempts, biggest first: 203.0.113.24 1,912 198.51.100.7 844 192.0.2.61 611 … seven more Fail2Ban banned them 26 times, but every ban has expired: right now none of them is blocked. you block all ten, permanently Block 10 addresses — one card, not ten dropped ahead of every allow rule nothing else on the box changed your own address unaffected [ No ] [ Show me ] [ ▶ Run ] # your press ✓ ran the runner's own note, on the card # the outcome reaches her with the next question themis Read back from the firewall: ten DENY rules, each ahead of the SSH allows, the reason written into the comment. Port 22 is still open to the whole internet, and ten blocked addresses are not a substitute. Want it locked to your address instead?

She checks her own work, and says what she noticed

An action that reports success is not the same as an action that worked. After a change, the outcome of every card — run, failed or declined — goes back to her with your next question, and she reads the box again and shows the evidence: the rules as they now stand, in the order they will actually be evaluated, with the comment that explains why they exist. If something did not land, you learn it from her rather than from a customer.

And she does not stop at the question. Reading the firewall to confirm ten blocked addresses is also reading the firewall — so when SSH turns out to be open to the world, she says so, explains why a denylist does not fix it, and offers to lock the port down to your address. Proposed, of course. Never done.

In whatever language you think in

Ask in English, German, Spanish, Portuguese, French — whatever you would type without stopping to translate. She reads the box in its own language, which is Linux, and answers you in yours. The commands she proposes are the same commands either way; only the conversation changes.

She works with what the box actually has

Vigia reads the server before she speaks: which distribution and package manager, which firewall — ufw, firewalld or neither — which web server, which FTP server, which database engines, which services are running. Those facts go to her with your question, so what she proposes is written for that box rather than for a generic one. Blocking an address on a ufw box and on a firewalld box are different commands, and she writes the right one because she was told which is there.

One change is one proposal, not one per item: ten addresses to block is a single card. And when a question is only a question, the answer is only an answer — there is nothing to press, because nothing needs doing.

Beside a terminal, and beside any screen

A terminal pane on a server has a Themis button. She opens beside the screen, never over it, and reads what is on it — the last command and what it printed — so What am I looking at and What went wrong need nothing pasted. She lays one command on the prompt: a read goes on by itself, anything that changes the box waits on its card for Type it, and Enter is always yours. Send what's on screen can be turned off when the screen holds something she should not read.

Other screens hand her their question the same way — a site's findings, a container's logs — and she answers in a sheet beside the page, in the same conversation the server's own Themis screen holds.

/ THE LIMITS

The limits are the product

What she cannot do matters more than what she can, so it is written down rather than implied.

She cannot change a box on her own.

Her shell is read-only and her probes are curated. Every change is an action Vigia runs after you press Run, through the same sudo path as every other root action — and Vigia never answers as Themis afterwards.

The card is the confirmation.

Typing "yes, do it" in the conversation runs nothing, by design. The only thing that executes is the button, so a sentence can never be mistaken for consent.

Some things are refused at Run.

Even with your finger on the button: no reboot or shutdown, no rm -rf on system paths, no formatting a disk, no rule deleted by number, no turning the firewall off, no stopping sshd, no changing root's password, and nothing aimed at your own address.

A change is always a card.

When no step covers what is needed, she proposes the command itself — one line, written for that box's own tools — on a card you read before Run, and Vigia runs it as root and records it like any other step. She never hands you shell to paste, because a command in a chat window has nobody checking it before it lands; beside a terminal, the one command she lays on the prompt still waits for your Enter.

She cannot see a server without a session.

She reads through a shell — one you opened, or one Vigia opens for the question with the login you saved. A box that cannot be opened is left out, and Vigia says so rather than guessing.

She cannot phone home.

The only network call is to the provider you chose, with the key you gave. LockFlare is never in it: there is no list of models to fetch — you type the model's API name, and Vigia sends it through unchanged.

/ THREE REPORTS

Three reports, written from what the box actually said

The same reading, aimed at a whole question instead of a single one. The three run on their own, side by side and beside the conversation, and keep going when you switch tabs or servers.

Read

Every probe is read first.

Verify

Then she verifies what looks off.

Write

Then she writes — findings with the evidence beside them, a severity, and what she dismissed and why.

The security audit

Effective sshd, the firewall, every listener, the updates, the accounts, the kernel switches, the certificates, the auth log — read first, then checked against each other. What comes out is not a scanner's list: it is a document with a risk level, a table of every open port and who can actually reach it, and findings that carry their evidence.

On one real audit she found three things worth a person's time. MongoDB was running and enabled although Vigia's own ledger recorded it uninstalled sixty seconds earlier — she read the service, the package and the journal, said the removal did not take or something restarted it, and noted the exposure is limited because it binds to loopback with authorization on. She caught Vigia contradicting itself, and said so. Redis carried a weak password: reachable only from four named addresses today, so the finding is not "you are breached" but "if any of those four is ever widened, that password is the only control left". And a broken FTP service with its port still open and nothing behind it: not an exposure, but a feature silently down.

Then the section that separates an audit from a scan: NOT FINDINGS. SSH open to the whole internet on 22 — key-only, root disabled, password authentication off — is the correct, ordinary design, and she says so rather than padding the list. Redis on a public address but firewall-restricted to four peers: the control is real and working. Port 21 open with nothing behind it. A container port Docker publishes that the probes jointly prove is not externally reachable. An account created by mistake with sudo and locked the same day: already remediated. Everything she chose not to alarm you about, with the reason.

Health

Resources, services, performance, disk, errors, pending maintenance — and recommendations that never propose deleting logs to free space. Load against core count rather than a bare number; memory with the headroom named; the one failed unit out of forty pulled to the front with the exact exit code and the second it happened; the top consumers by memory with what each one actually is.

The judgement is in the recommendation. On one box the failed service was FTP, and she did not simply say restart it: if FTP is meant to be in service, restart it and read the log; if it is not needed, leave it disabled rather than re-triggering the failure. And when she does offer the restart, the proposal says what it costs — only that service, briefly unavailable — because a recommendation without its blast radius is not advice.

Forensics: what happened on this box, in a window

Pick an hour, six, a day, a week, a month, or type a window of your own, and press Investigate. Everything for that window is gathered first — the auth log, the sessions, sudo, service and package changes, cron, Fail2Ban, the firewall log, the files modified since — and only then investigated. Two rules are built into how she reads it: usernames stuffed into a log are noise rather than evidence, and shell history is never trusted.

What comes out is an executive summary, a timeline with a source on every single row — this journal unit, this Vigia ledger line, this dpkg log, this firewall tail — and threats ranked. Including a category most tools do not have: UNEXPLAINED. Where the record and the live state disagree and she cannot resolve it from the box, she says so plainly instead of guessing, and tells you what to check.

One investigation came back clean, and the interesting part is how it got there. A brand-new account created with sudo, revoked and locked inside ninety seconds looks exactly like an intrusion — she matched it to the operator's own actions in the Vigia ledger and called it what it was. A broken service at 18:40:31 looks like an attack — the sudo log shows a config push one second earlier, so the cause is self-inflicted. And the brute-force noise that fills the log is reported as contained, with the numbers: hundreds of failed attempts, none reaching the password stage, because password authentication is off.

/ EVERY REPORT

What every report has in common

Six things, whichever of the three you ran.

EvidenceNot adjectives. Every finding names what it was read from — the probe, the log, the config line, the journal entry — so you can check her rather than believe her.
DismissedA list of scary-looking things that are fine, each with its reason. It is the section that makes the findings worth reading.
Kept on the boxEach report is written to /var/lib/lens/reports on that server, so the next one can say what changed since, and every earlier run reads exactly as it did the day she wrote it.
Confirmed firstA report is dozens of turns against your own model account, so Vigia asks before it starts.
Proposes onlyWhere a report ends in an action, the action is a proposal with its blast radius written out — and it waits for the button.
DownloadableEvery report renders on screen and can be saved as a PDF, for the auditor, the client, or the colleague who does not have Vigia.
/ THE FLEET

One question, the whole fleet

Everything above is one server. The same reading runs across as many as you like — and the interesting part is how carefully it refuses to pretend.

The servers you picked, or a group

Her chair has two kinds of page. Ask Themis is a question about the servers picked in the column on the right — the same pick Actions, Snippets and Flows use: Pick Servers… chooses them by name, by group or from a saved set, and each row carries a dot that says whether its shell is open. A group is servers asked about together, kept with what she is told about them and a conversation of its own; Save as Group, under the picked servers, makes one from the pick.

Nothing has to be done to a box first: no authorization, no step per server, nothing written before the first question. Delete a group and the servers stay exactly where they are, with anything she kept on them.

A group is a selection — plus the words she is given

Pick servers from anywhere on the map. Nothing moves: a box stays in its group on the map and can sit in as many of these as there are questions about it. What makes a group more than a list is the two fields beside its name.

What it is, handed to her before she reads a byte: the six boxes that take write traffic for the California and Tampa pools; MDB-1 is the primary, the others are replicas. And what matters: never restart the primary during business hours; replication lag over ten seconds is a problem. From then on every answer about that group is written knowing it — which box must not be touched, what counts as a problem here, what not to suggest. It is the difference between an assistant that knows Linux and one that knows your Linux.

Every box opened first, or named as missing

She reads each server through its own session, so the question does not start until the sessions exist. Vigia opens them, counts them in on screen with every name showing, and waits. A box that will not open inside forty-five seconds is left out — and Vigia names it, rather than quietly reporting on fifteen servers while you believe you asked about sixteen.

/ ASK ONCE

Ask once, get the fleet

Ask for a table of what is installed on each and you get one — sixteen rows read from sixteen boxes. Ask a follow-up about operating systems and versions and you get that, in the same conversation, no re-reading and no re-asking. Ask whether anything needs an update or a reboot and the answer is a table with the pending count, the security count, whether a reboot is required and what triggered it — the exact packages, kernel image included.

And in each answer, the line nobody asked for. That only one member of the group runs the web and database stack. That two of the sixteen are the RHEL-family boxes running firewalld while the rest run ufw. That one box is on a release whose standard support ended in April 2025, and is worth a look if it is not on extended maintenance. That is the difference between a tool that answers the question and a colleague who was reading while they worked.

Beside it, one of those answers: sixteen boxes, read in one question.

# Production servers · 16 picked · every shell open you anything need an update or a reboot? server pending security reboot triggered by srv-01 14 3 yes linux-image-generic srv-02 0 0 no srv-03 9 2 yes linux-image-generic, libc6 srv-04 2 0 no srv-05 0 0 no srv-06 21 6 yes linux-image-generic, openssl … ten more rows, one per box # and the line nobody asked for themis Two of the sixteen run firewalld; the rest run ufw. srv-11 is on a release whose standard support ended in April 2025 — worth a look if it is not on extended maintenance.

She tells you when the question is too big

Sixteen servers in one question is more than a conversation holds well. Instead of quietly giving you a thinner answer, Vigia says so above the conversation, before you ask, as soon as more than ten are in it: past a dozen boxes the reading stops fitting, expect a slower answer and a thinner one, and the ten that matter will answer better.

Software that warns you its own output is about to get worse is rarer than it should be. It is the same instinct as the rest of Vigia: say what is true about the box, including when the box is this one.

Try her on a box you already know

Open one server, ask her something you know the answer to, and read what comes back.

Download Vigia