blog·3 min read

Why we built Claude Code into DirectAdmin

From "claude: command not found" to an assistant that changes your site with your approval. What we built, the choices we made and what's still open.

It started with one line in a terminal:

[client@server ~]$ claude
bash: claude: command not found

Claude Code was installed on our hosting server, but only the administrator could start it. Regular hosting accounts live in an isolated environment that couldn't see the installation. That was fixed within an hour (here's how). The real question came afterwards: why would someone with a website want to open a terminal and log Claude in there?

Step 1: logging in without a terminal

On first start Claude Code asks you to log in, which means opening a URL and pasting a code back into the terminal. Fine for a developer, a hurdle for a business owner with a website.

So we built a connect button in DirectAdmin. You log in on claude.com, paste the code back into the panel, and every terminal on your account is logged in. Under the hood the server does exactly what /login would do, just without you seeing a terminal.

We had done this before for clients with their own server, through a separate web page. That experience saved a lot of time: we already knew that a code contains a # that gets lost when you double-click, and that double-clicking "log in" starts two login attempts whose code no longer matches.

Step 2: leaving out the terminal

A terminal with Claude is powerful, but typing "change the price on the homepage" into a black screen doesn't feel familiar to most people. So we built a chat around it, inside DirectAdmin itself, on the Claude Agent SDK.

The hard part wasn't the chat. It was trust:

  • See every change first. A file change appears as a card with exactly the lines that change. You click allow.
  • Be able to roll everything back. Before every instruction the server takes a snapshot. One button puts everything back.
  • No more power than needed. Claude runs as your user, in the same isolated environment as your terminal, within your plan's limits.

Later we added choice buttons (when Claude asks a question), reading along live while Claude works, resuming earlier conversations and an auto mode in which Claude judges for itself what's safe.

Step 3: letting Claude know where it is

Claude knows a lot about WordPress and PHP, but nothing about your hosting. Which PHP version does your site run? Where are the files? How do you make a backup here?

We now distribute that knowledge as a Claude Code plugin across all our servers. At the start of every conversation Claude gets a few lines with your account's facts. For everything else there are guides Claude only reads when needed, and scripts for tasks that always have to go exactly right, such as safely updating WordPress. We wrote up how that works in Rolling out Claude Code plugins across all your servers.

Step 4: Git, without a form

If you work with GitHub, you want your website to show the code from your repository. DirectAdmin can do that, but its form asks for a "keyfile". Now you pick a website and a repository, copy one key to GitHub, and the rest happens by itself. With a webhook, a push is live within seconds (like this).

What's still open

We use this ourselves, every day, and still find things that need to be better. Some of them are quite instructive: bugs we only found by using it ourselves.

Want to try it on your own website? Read how the web hosting works or send us a message.

MK
Maarten Keizer

Founder of Invoker. Over twenty years in hosting, system administration and web development; builds the Claude hosting himself and tests everything on our own servers first.

about maarten