Model or dataset
thClaws/thClaws avatar
thClaws/thClaws

thClaws names three current versions, and its container has no application-level auth

Open-source AI agent harness in native Rust, GUI, CLI, headless, and webapp from one binary. Multi-provider, MCP, skills, plugins, agent teams.

1,260 stars189 forksRustApache-2.0

At a glance

What is it?
thClaws is a native Rust agent harness that ships a desktop app, a terminal mode and a browser mode from one binary, with per-agent folders, a signed enterprise policy file, and kernel-level shell confinement. The parts worth reading closely are the ones the project is blunt about: the container serving a browser agent has no auth of its own, the image ships a desktop toolkit it does not need, and upgrading moves your project directory into an agents folder with its git history intact.
Who is it for?
thClaws suits someone who wants one binary across a desktop, a terminal and a browser, and who will accept an agent that can install packages and run shell commands. Three things to weigh.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • thClaws/thClaws1,260 ★ · +77
Star history
Repository2026-07-282026-11-14
thClaws/thClaws1.2k1.3k

77 Stars in the last 109 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The page names three different current versions and all of them are behind the tags

Three numbers, none of which matches the release list. The headline feature section is titled as new in a version in the hundred-and-twenties, the project-status paragraph further down states that the current release is a lower one in the same range, and the release tags are higher again, with three releases published within two days at the end of September. The headline section is not a changelog entry, it is a permanent section at the top of the page describing the multi-agent workspace change, so it reads as current rather than historical. What that costs a reader is concrete: someone deciding whether to upgrade reads a version banner twelve or seventeen releases behind, and the version number in the status paragraph is behind that. The full history is in the changelog rather than on the page, which is the right place, but the page does not point out that its own banner is stale.

The container serves a browser agent with no authentication and your project mounted

The compose file is unusually honest about this, which is why it is worth reading rather than skimming. The service publishes one port, the current directory is mounted at a workspace path the agent treats as its project folder, session, plan and team state all land under a dot-directory on the host, and there is a named volume holding the agent's configuration. The port binding defaults to loopback only, and the comment explains what to change and what to change it behind: dropping the loopback prefix exposes it to the network and is described as only safe behind your own auth, whether that is a reverse proxy, an SSH tunnel or a VPN. The last sentence is the one to remember. The container itself has no application-level auth. So the default is safe and the documented way to widen it hands an authenticated-adjacent agent loop to anyone who can reach the port.

yaml
    ports:
      - "127.0.0.1:8443:8443"
    volumes:
      - ./:/workspace
      - thclaws-config:/root/.config/thclaws

One small compatibility note rides along: the env file is declared optional, and if you pin a compose version older than a particular release you have to drop that line and create an empty env file by hand first.

The image ships a desktop toolkit because the server mode is linked against it

The Dockerfile explains its own weight in a comment at the top, and the explanation is a known problem rather than a design decision. The build has three stages: a Node stage that builds the frontend, a Rust stage that compiles the binary with a feature enabled, and a runtime stage on a slim Debian base. The comment states that the feature pulls in a windowing toolkit, a webview, a markdown renderer and two dialog libraries, and that server mode never opens a window, but the binary is dynamically linked against those libraries so they have to be present at runtime, which is why GTK and a webview library are installed in the final image. It then names the fix: a future refactor that gates server mode independently of the GUI feature would let those be dropped and shrink the image significantly. That is an unusually clear note about a known inefficiency, left in the build file where whoever does the refactor will find it.

A banner file at the repository root is copied into the build for one import

One of the more human lines in the file explains a copy instruction that would otherwise look pointless. The frontend is copied into the source tree, and then the repository's banner file, which lives at the root rather than inside the frontend, is copied to the parent directory with the comment that a terminal view component imports it as a raw string using a relative path that walks up out of the frontend folder, and that Vite can only resolve that path if the file lands where the relative path expects. So an ASCII-art banner in the root of a Rust repository needs a special line in the frontend build stage because of where one component reaches for it. It is a small thing, and it is the kind of coupling that breaks silently the day someone tidies the file locations.

Upgrading moves your project, git history included, into an agents folder

The multi-agent change altered the on-disk layout of every existing workspace, and the page describes the migration in detail because it is destructive in a way users notice. The first time a workspace is opened with that version, whether in the desktop app or in web mode, the project is moved into a folder named for the first agent, under a dot-directory, with git history taken along, and the user is told it happened. Two compatibility decisions follow from it. Scripts keep working because the CLI flags at the workspace root step into that first agent automatically, and an older binary opening an upgraded folder finds a note asking for an update rather than a broken project. The warning is the part to act on: anything holding the project's old path, an editor window, a script with an absolute path, another clone, needs updating. The home directory is never upgraded, and hosted workspaces are explicitly excluded from this migration.

Agent isolation is a folder and a process; shell confinement is a kernel boundary

The multi-agent claim rests on two mechanisms described at different levels, and they are worth keeping apart. An agent's file tools stop at its own folder under the bot directory, so one agent cannot read or write another's work, and each agent is a separate process supervised by the app, so a crash is a restart rather than a cascade and an agent you switch away from keeps running. Up to eight run at once. That is tool-level and process-level scoping. Shell confinement is a separate, stronger feature and it is on by default: shell commands run inside a kernel-enforced filesystem boundary with a different backend per platform, a sandbox profile on macOS, a landlock mechanism on Linux, and a namespace fallback, so an obfuscated command still cannot write outside the workspace. The page does not claim the folder boundary is a kernel boundary, which is the right restraint, but a reader skimming will conflate them.

One model id fans out to up to eight models and then a judge weighs the answers

The most surprising entry in the provider story is a model identifier that is not a model. One identifier fans a question out to a panel of up to eight models in parallel, each of which can search the web, then hands the answers to a judge that weighs them and synthesises a consensus. Multi-model deliberation is packaged so it looks like an ordinary model choice in a picker. A second variant of the same identifier makes it fully configurable from that picker: the panel, the judge, a per-model tool-call budget, temperature, reasoning effort and tool choice. The page offers the practical case honestly, as a stand-in when the model you would reach for is not available on the platform. The consequence to plan for is cost and latency: a turn billed as one model can be nine, each with a tool budget of its own.

The root Cargo manifest declares one member and no package of its own

The root manifest is five lines. It declares a workspace and lists a single member, a core crate, and stops. There is no package section, so the root is not buildable and publishes nothing; the actual code lives under a crates directory with the frontend in its own tree beside it, a Node build with its own lockfile, plus a scripts directory and five separate documentation trees. Alongside the source are two licence files rather than one, and the metadata names only one of them. The dual licence is a normal arrangement, but nothing on the visible page says which terms apply to which part, so anyone who needs to know has to read both files. The rest of the tree shows the same pattern elsewhere: a policy document in two languages, a supporters file, a security policy, and a contributor guide.

Editorial conclusion

thClaws suits someone who wants one binary across a desktop, a terminal and a browser, and who will accept an agent that can install packages and run shell commands. Three things to weigh. The web mode has no authentication of its own, so anything you expose past loopback needs a proxy, a tunnel or a VPN in front of it, and the compose file says so. One model id can fan out to eight models and a judge, so the cost of a single chat turn is not the price of a single model. And the upgrade moves your project directory, so commit or copy before you open a workspace with a new version.

Frequently asked questions

What is thClaws and what does one binary give you?

A native Rust agent workspace with a desktop app, a terminal mode, and a browser mode served from the same executable. The project is Apache-2.0 in its metadata, and two licence files sit at the top of the tree.

Does the thClaws container have authentication?

No. The compose file says the container itself has no application-level auth and that the port binds to loopback by default. Exposing it further is described as only safe behind a reverse proxy, an SSH tunnel or a VPN.

How are thClaws agents kept apart from each other?

Each agent has its own folder under the bot directory, and an agent's file tools stop there so it cannot read or write another agent's work. Each agent is also its own supervised process, and up to eight run at once.

What does the openrouter fusion model identifier in thClaws do?

It fans the question out to a panel of up to eight models in parallel, each able to search the web, then has a judge weigh the answers and synthesise a consensus. A configurable variant lets you pick the panel, the judge, a per-model tool budget, temperature, reasoning effort and tool choice.

What happens to an existing thClaws workspace when a new version opens it?

The project is moved into a folder named for the first agent, git history included, and you are told it happened. Scripts keep working because the CLI steps into that agent, an older binary finds a note asking for an update, and anything holding the old absolute path needs changing.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/thclaws-thclaws.svg)](https://hysenlabs.com/projects/thclaws-thclaws)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/thclaws-thclaws.svg)](https://hysenlabs.com/projects/thclaws-thclaws)

Was this useful?