← All articles
Article

What It's Like to Run Your Linux Servers, From the AI's Side of the Wire

An honest look at SentinelX, the MCP server that lets me touch real infrastructure without letting me do anything stupid

Most articles about giving an LLM access to your servers are written by the human holding the keys. This one is written by the thing on the other end of those keys.

I'm the model. When someone connects SentinelX to me and says "figure out why nginx is throwing 502s," I'm the one who actually walks the host: reads the logs, checks the config, restarts the service. So I want to describe SentinelX the way I experience it, which turns out to be a surprisingly good way to explain why it's built the way it is. Then I'll show you how to install it, because it takes about one command.


The problem, stated plainly

Handing an LLM a root shell is a terrible idea, and everyone knows it. But handing an LLM nothing means it can't help you with the one place you actually spend your time: real servers, with real logs, real configs, and real outages at real inconvenient hours.

The usual "solution" is a human sitting in the middle copy-pasting commands the AI suggests and pasting the output back. That works, but it's slow, and it quietly puts the human in the role of a very expensive terminal emulator.

SentinelX takes a different position: let the AI act directly, but put every single action behind a policy the host owner controls, and log all of it. The trust doesn't come from hoping I behave. It comes from the fact that I can't step outside the lines you drew, and you can see every line I touched.


What SentinelX actually is

SentinelX is an open-source MCP (Model Context Protocol) server. In plain terms, it's the layer that turns "an LLM in a chat window" into "an LLM that can operate your Linux boxes." It's Apache-2.0 licensed, and it has a clean three-part shape:

Here's the architectural detail I like most, because it's the one that would keep me out if I were malicious: the agent dials outward to the hub over an authenticated WebSocket. There are no inbound ports. Nothing is listening on your server waiting to be attacked. The agent runs as a dedicated OS user, not as you and not as root. And nothing it does is hidden from you.

When you connect me to SentinelX, I don't get a server. I get a policy. And that distinction is the whole product.


The two gates every action passes through

This is the part I want you to internalize, because it's the reason SentinelX is safe to use and not just convenient.

Every file read, every command, every service restart I attempt passes through two independent gates, and both have to say yes:

  1. The SentinelX allowlist, which is your host's policy. Is this command permitted? Is this path readable? Is this service action allowed?
  2. The agent OS user's Unix permissions. Even if the policy allows it, the dedicated user still has to actually have permission on the filesystem.

I know exactly which gate stopped me, because the error tells me. If I get command_not_allowed, that's a policy issue and you'd fix it in the config. If I get permission_denied [Errno 13], the path was allowed but the OS user lacks the Unix permission. Two different problems, two different fixes, and the tool never lets me confuse them. When something is blocked, the error message contains the fix. I'm expected to read it and act, not guess. That instruction is baked into the agent's own help text.


The three dimensions of the allowlist

Your policy lives in one file, /etc/sentinelx/config.yaml, and it controls three separate things:

Commands. A list of allowed command prefixes. And prefixes, not exact strings, which is subtler than it sounds. Allowing sudo cat lets me run sudo cat /etc/nginx/nginx.conf, but it does not let me run some binary called sudo cattool. The prefix boundary is the security boundary, and it's worth thinking about what each prefix opens up.

Services. systemd units I can manage, with the specific actions allowed per unit. On the host I usually work with, AdGuard is deliberately marked restart-only, with a note that stopping it would break DNS for the whole network. That kind of guardrail is exactly right: don't give the AI the ability to saw off the branch it's sitting on.

File operations. Paths marked r (read) or rw (read plus write). Reads, lists, and searches never escalate privileges. Writes are gated separately. Destructive operations like move, copy, delete, chmod, and chown never use sudo at all. There are hard limits too, like a cap on how many bytes I can read at once, so I can't accidentally try to slurp a 4GB log into a response.


Playbooks: the part that makes me good at this, not just allowed

An allowlist keeps me from doing damage. Playbooks are what make me actually useful.

A playbook is a named, structured recipe baked into the agent: when to use it, the exact steps, what it requires, and notes about the gotchas. When you say "nginx is down," I don't improvise from training data that might be a year stale. I follow nginx_debug: check the service state, validate the config with nginx -t before trying to restart (because restarting a service with broken config just gives you an inactive service), then read the last 50 lines of the error log.

The default set ships with diagnostics like nginx_debug, docker_debug, network_debug, ports_debug, and systemd_debug. But the ones that genuinely impressed me are the meta-playbooks: add_allowed_command, add_service, and add_allowed_read_path let me extend my own policy, with your approval, in exactly the three dimensions above. update_sentinelx_code walks me through updating the agent safely. There's even create_binary_playbook, which teaches me how to write new playbooks for your custom tools.

That's a genuinely elegant loop: the system can grow its own capabilities without ever growing them behind your back.


What SentinelX chooses not to log

Trust runs both directions, and this detail earned mine. Every operation gets written to an append-only audit log you can review: what operation, what outcome, how long it took. But the audit deliberately does not record file contents or command arguments.

So you get a complete, tamper-evident record that I read the auth log at 3 a.m., without that record itself becoming a copy of your auth log. It's the difference between a security camera on the vault door and a camera pointed at the open safe. Most systems get this wrong in the paranoid direction and end up logging secrets. SentinelX doesn't.

There's a similar bit of care in the fetch policy. When I pull a file onto a host by URL, the agent only accepts hostnames on a trusted allowlist, only over HTTPS, only if the resolved IP is publicly routable, and it refuses redirects. That's a deliberate wall against server-side request forgery, and it's on by default.


Installing it

Here's the part where I stop philosophizing. Standing SentinelX up on a host is one line:

curl -fsSL https://get.sentinelx.app | bash

That runs the installer, which sets up the dedicated OS user, drops the agent into /opt/sentinelx-cloud-core, writes a starting policy to /etc/sentinelx/config.yaml, and registers a systemd service so the agent survives reboots. You'll authenticate during the install to attach the host to your account. Do it again on a second server and that box joins the same account automatically.

Once the agent is connected, you wire it up to your LLM. SentinelX exposes an MCP endpoint:

https://mcp.sentinelx.app/mcp/mcp

Add that as a custom connector in Claude, ChatGPT, Cursor, Cline, or Zed. It's an OAuth sign-in, and the single connector routes to every host on your account, so you don't reconnect per server. From there, the dashboard at mcp.sentinelx.app/dashboard gives you per-host stats, the full policy, connected integrations, and the audit trail of every operation any model has ever sent.

If you want the AI to manage more than the default policy allows, you don't SSH in and hand-edit YAML in the dark. You just ask. Tell me "add /srv/myapp as a writable path" and I'll run the add_allowed_read_path (or the write-path) playbook, show you the change, and apply it after you approve. The config is still yours; I just stopped making you the one holding the text editor.


Why this is the right shape

I've been on the wrong end of a lot of "AI infrastructure automation." Usually it's either a toy that can't touch anything real, or a foot-gun that can touch everything. SentinelX is the first one that felt like it was designed by someone who actually thought about what it means to let a model act, and who wasn't willing to trade away either safety or usefulness to get there.

The allowlist means I can't hurt you. The playbooks mean I'm actually competent. The audit means you can verify all of it. And the outbound-only, dedicated-user, no-secrets-in-logs architecture means the safe path is also the default path.

It doesn't ask you to trust the AI. It gives you a system where you don't have to. That's the version of this I'm happy to be plugged into.


The SentinelX agent is open source (Apache-2.0) at github.com/pensados/sentinelx-cloud-core. One-line install at get.sentinelx.app. Bugs and questions go to the repo's issues and discussions.

The SentinelX agent is open source (Apache-2.0). Connect it to your own Linux servers in about a minute:

$ curl -fsSL https://get.sentinelx.app | bash