Skip to content
Self-hosted AI Agents

selfhostedaiagents.com

Three readings in an open-source AI agent repo before you clone it

A GitHub link proves the code exists, not that the install survives a month. Three readings answer it: what the repo says it does not do, whether it ships a mechanism you can run, and what its last changes touched. Kortix is the open-source AI Operating System, and an operator kit built around its CLI is the example.

The four checks as the operator kit runs them

terminal
$ ./bin/check-signup.sh https://kortix.example.com$ ./bin/preflight.sh kortix.example.com$ ./bin/restore.sh backups/kortix-default-20261021T200633Z.tgz --instance default$ ./bin/doctor.sh default

Four scripts, four readings, each one exiting non-zero on the failure it prevents.

Search GitHub for self-hosted AI agents and you get pages of repositories. Each one promises a team of agents on hardware you control. The link proves the code is there. It says nothing about whether the install still answers in month three. That is the question the person who carries the pager actually has. Three readings answer it before you clone. The repository should say what it does not do, ship a mechanism you can run, and keep a history that names what changed. Kortix is the open-source AI Operating System, and the operator kit built around its CLI puts all three in one small repo, which makes it worth reading beside any candidate.

The repository says what it does not do

A README that lists features is a brochure. A README that lists limits is a contract you can check against the running box. The operator kit has a section headed "What this does not do", and it spends its length on the failures its scripts cannot see. One sentence carries most of the weight: "This is not monitoring. Nothing pages anyone: verify-all.sh exits 1 and leaves the reading to you." That tells a buyer more than any feature list, because it says who owns the pager after the install, and the answer is still them.

A repo with no such section is not lying by omission. It moves the discovery to the first bad night, when a callback stops resolving and nobody knows which part is meant to be watched. When you do find the section, read what it excludes. The split between what runs on your server and what stays elsewhere usually lives there, next to an honest list of the jobs the software leaves to you.

The install is a command you can read

The second reading has two halves: an install you can run and checks that say whether it worked. Start with the install instructions and look at their shape. A wiki page with screenshots of a dashboard describes a path that changes with the interface, and you cannot diff it. A fenced block of commands can be copied, run on a spare host, and compared with the next release. The kit's quickstart is five lines:

bash
./bin/preflight.sh kortix.example.comcurl -fsSL https://kortix.com/install | bashkortix self-host init --domain kortix.example.com --admin-email you@example.comkortix self-host configurekortix self-host start

The README adds a detail worth trusting: "make forwards arguments and nothing else. Run the scripts under bin/ directly when a target gets in the way." A repo that tells you how to bypass its own convenience wrapper has thought about the day the wrapper breaks. Kortix keeps the entry small as well. The first run asks six things and no model key. A trial does not begin with a credit card and a provider account.

The checks exit non-zero

A checklist in markdown is advice. A script that returns 1 is a gate, and the gap between the two is where most installs die. The kit's README states the rule plainly: "every check here exits non-zero when it does not." The four checks cover the failures that arrive after a stack reports healthy.

`check-signup.sh` asks the auth service whether a stranger can join. A new domain-mode instance confirms sign-ups without email, the admin address included, so whoever claims that address first becomes platform admin. The script exits 0 for closed or email-verified, 1 for open, and 2 when it cannot tell.

preflight.sh resolves the apex, api.<domain> and a label under the preview wildcard, then checks ports 80 and 443, disk and memory. Without the API record the stack looks healthy and no session ever starts, because each sandbox calls back to that URL.

backup.sh stops the stack and archives the instance directory with a sha256 and a key fingerprint. restore.sh refuses an archive whose key differs from the live one, which is the failure that turns every stored credential unreadable. The doctor runs seven checks and prints a fix line for each failure, and six of seven is the usual first result.

One check on its own is a snapshot. verify-all.sh runs sign-up, doctor, update status and backup age in a single pass and exits 1 when a person is needed, which is what makes a weekly cron entry worth having.

The last few commit messages

Open the commit list, not only the release page. Read the last five messages and ask what each change touched. In the operator kit, every commit after the first names one file and what it added, from add: bin/backup.sh to add: docs/install.md, so the history reads as a list of decisions rather than a list of moods. A run of "wip", "fix" and "update" tells you nothing about what changed on the box.

The content of the last change matters more than its size. A release that fixes an install path, a backup or a sign-in default is the kind of change that keeps an instance alive. A release that only moves a dependency can be one line and still be the right one. What you are looking for is evidence that someone still runs the software and writes down what broke.

Popularity is a measure of attention

An awesome-list collects projects that enough people found worth linking. The awesome-ai-agents list is a catalog of entries and links with a web view on top, useful for finding candidates and silent on whether any of them installs cleanly. Its entries are chosen for being interesting, and interesting projects fail installs too.

Attention is not a property of the running system. A repository can be linked from every list in its category and still leave the doctor failing on preview-origins, because nobody who curated the list ran the doctor. Whether you can operate the install is a separate question, and the repo answers it. Discussion volume does not.

An index, a coding agent, and a system a team runs

Kortix is the third shape: an open-source AI Operating System with accounts, projects, a database and stored files on your server, sessions on sandboxes, and a control plane you run. It is the thing a team signs in to, and the thing that has to be backed up and updated.

A coding agent is the second shape. OpenHands describes Agent Canvas as "The self-hosted developer control center for coding agents and automations", built to start agent conversations and automate tasks such as decomposing GitHub issues. It answers the question of what can work on a branch.

A list is the first shape. It holds names and links and runs nothing. Three shapes, three questions: what exists, what can work on this code, and who signs in, what they reach, where the data sits, and what happens at 2am when the callback stops resolving. Decide which question you have before you clone anything. If it is the last one, the repo has to carry the operational surface, not only the agent.

What the three readings add up to

One failed reading is enough to wait. A repo can have a fine agent and no answer for an open sign-up, or a careful install and a history nobody wrote down. Taken together, the three readings tell you whether the project was built by people who expected to operate it, which is a better predictor than any description of its capabilities.

The operator kit is one stack held to that standard, and it is small enough to read in an evening. Point the same three readings at the next repo you find, starting with its "what this does not do" section. The full install path and every environment variable are in Read the docs, the code is at Kortix on GitHub, and the stack this kit wraps is described on the stack page.

Questions people ask before a first clone

Are there any open source AI agents?
Yes. Kortix is the open-source AI Operating System. Its agents, skills, memory and connectors are files in a git repo you own, so they can be read, forked and audited, and the platform runs on your own server.
Can I build an AI agent on my own?
Yes. Pick one task your team repeats every week, give the agent the files and tools that task needs, and keep a person on the output until it holds. An agent starts as a markdown file plus the configuration that scopes what it can reach.
Can you self host your own AI?
Yes. Kortix installs as one Docker Compose stack on a Linux server you control, and self-host is free. The control plane, the Postgres database and the stored files stay on your machine, while sessions run on sandboxes that call back to the instance.

Read the repo, then run the four checks on a box you own.

Run it on Kortix Cloud, in your VPC, or on your own on-prem network.