ai newsDo., 5. Nov.
EilmeldungTencent releases Hy4 with vision and computer use, claims second place among Chinese AI models

How we run thirty Claude Code and Codex agents on our own servers (and the tool is now open source)

We build Ticksly, a concert ticketing service, and all of our code is written by agents. Up to thirty Claude Code and Codex sessions run at once on our servers. In the last 28 days they opened 2,540 merge requests, which comes to about $8 each at API prices. The three of us provide the tasks and th

dev.toDonnerstag 16:52 · 05.11.6 Min. Lesezeit
Bild: dev.to

We build Ticksly, a concert ticketing service, and all of our code is written by agents. Up to thirty Claude Code and Codex sessions run at once on our servers. In the last 28 days they opened 2,540 merge requests, which comes to about $8 each at API prices. The three of us provide the tasks and the direction.

With that many terminal tabs you lose track fast. One agent has been waiting for an answer for a while, another has spent three hours fixing the wrong thing, and the screen doesn't tell you which is which. So since spring we've been building ourselves harnessly, a web UI on top of tmux. The same agents write it, of course: in October they rewrote it from Node to Go in 19 days while still working inside it. Today we're releasing it under Apache-2.0.

Claude Code and Codex run as their regular CLIs inside tmux tabs. harnessly reads their output and shows a status on every tab: working, waiting for you, or done. When an agent finishes or asks something, you get a push notification.

Instead of a wall of terminal output, an agent's turn fits in one line, "Worked 45 s · 6 actions". Expand it and you see the tool calls, the plan and the subagent reports.

You can type the next message while the agent is busy. It waits in a queue and goes out when the agent is free, and if sending fails the message isn't lost.

The input box shows what's left of your subscription, like "5h 97% wk 27%", and a forecast of when it runs out. If the limit runs out at night, the agent waits for the window to reset and carries on from where it stopped. It behaves the same way after a server restart.

An agent idle for two hours goes to sleep and frees its memory. The next message wakes it up in the same session.

Every turn is saved to a separate shadow git repository; harnessly never touches yours. You can roll back to any turn. If the agent took a wrong turn at step five, you can continue from step four on a separate branch, and the second attempt runs next to the first.

The same menu has a side chat, where you can ask a busy agent something without knocking it off its task. It can also continue the conversation in another model when Claude is out of limits and Codex isn't. And it can move the whole chat to another server as an encrypted bundle.

Dictation is transcribed by whisper.cpp on your own server, so the audio stays on the machine. The whole UI works in a mobile browser, and agents' questions reach your phone as push notifications.

Claude can start Codex in the next tab, and the other way round:

harnessly tab create -t codex-cli --prompt "check that the migration survives the old revision" Enter fullscreen mode Exit fullscreen mode That's a regular chat you can watch and step into. Subtasks an agent hands out hang under it as nested chats, and it gets woken up when they're done. You can message a colleague's agent working in a neighbouring repository, and the humans can read that conversation. When Claude runs a workflow with phases and dozens of subagents, you see as it goes who started, who returned a result and who failed.

The Claude Code interface can also sit on top of someone else's model: Kimi, GLM, Grok or GPT. An autorouter decides at every step whether a light model is enough or a heavy one is needed.

When an agent needs a human decision, it asks in Telegram:

harnessly ask approve --to roman "release 2.4" && make deploy Enter fullscreen mode Exit fullscreen mode The human taps a button and the answer comes back to the script as the exit code.

A pane opens next to the chat. When an agent starts a dev server, the page shows up there without a separate command.

The agent sees that page roughly the way you do in DevTools: requests, console, dev server errors. It can switch on slow 4G or block analytics. In the screenshot it found a 404 on /api/reviews and the line of code that sends that request.

The same pane holds the terminal, files, diffs, merge requests and the session's cost, and the agent opens the tab it needs. Documents and Excalidraw diagrams the agent drew show up there too and go to the team as a link. The agent draws images with the Codex image model. To fix one, circle the spot and say what to change, like "remove the background".

The agent needs a GitHub token, but the token has no business being in the chat. So the agent asks for it like this:

harnessly secret ask github-token --why "push the release" harnessly secret run --env GITHUB_TOKEN = github-token -- gh pr create --fill Enter fullscreen mode Exit fullscreen mode

A safe dialog opens on your side, you paste the value, and it never enters the chat. The agent runs the command with the secret in its environment, and the output shows •••••• instead of the value. Logging in to staging sites works the same way: the agent asks the browser to log in, you confirm in your password manager, and the agent never gets the password.

In Sinopia the agent makes mockups, slides and videos. You describe the task, the agent builds a website mockup with page transitions or a design system, and the project is a plain folder on your machine. Images are generated right inside a mockup block.

The agent exports slides to PDF, PowerPoint or offline HTML. You record your talk right there: the teleprompter scrolls along with your voice, and the editor cuts pauses, "umm"s and failed takes. The agent assembles video from scenes with transitions, in 16:9 or 9:16, and renders it to MP4.

An app for harnessly is a Claude Code plugin plus an app.json file. The plugin gives the agent skills, and the UI gets its own tab or card.

Team machines connect to a shared hub over an outbound connection, so you don't open any ports on them. People sign in to the hub with email, passkey, GitHub, Yandex ID or OIDC. The hub is open source too.

A built folder or a Sinopia project can be published as a site, and you can go back to the previous version of it:

harnessly site deploy./dist --name shop Enter fullscreen mode Exit fullscreen mode Budgets are set per person, team or model. At 80% you get a warning, at 100% work stops. We added them after a week when subagents on an expensive model added $1,900 to the bill.

Releases are signed with cosign and built for amd64 and arm64. The UI tells you when a new version is out.

Windows, native apps, a stable API (we're at 0.x). The hub runs as a single replica. The safe protects against leaks into the chat, not against a hostile agent. The Sinopia board engine is fetched by each machine with its own Claude account.

curl -fsSL https://raw.githubusercontent.com/ly-solutions/harnessly/main/install.sh | sh Enter fullscreen mode Exit fullscreen mode It opens at http://127.0.0.1:8022 and needs Claude Code or Codex installed. The code is at github.com/ly-solutions/harnessly.

Quelle: dev.to (dev.to). Original öffnen