Skip to content
Open source · AGPL-3.0

Your coding agents,
on your own server.

Agentic Control runs Claude Code, Codex and OpenCode as one team on a VPS you own. One agent plans and reviews, another implements, and you approve the pull request — from your laptop or your phone.

Works with the subscriptions you already pay for: Claude, ChatGPT, OpenCode, or any model through OpenRouter. No hosted account in between — the workspace, the sessions and the history stay on your server.

How it works

One real project, from an empty repository to a merged pull request.

Every screen below is real: Focus Timer, a small Pomodoro app built for this page by Codex orchestrating Claude Code, on one server, with two subscriptions.

The code, the commits and the pull requests are public: github.com/STpytut/focus-timer

  1. 01

    You

    Pick the team

    Connect a repository through your own GitHub App and choose who does what: any runtime and model as the orchestrator, one or more executors. Here Codex on gpt-6.1-sol plans and reviews, Claude Code on Opus 5.5 writes the code.

    The project's Team settings: Codex with GPT-6.1-Sol as the orchestrator, Claude Code with Claude Opus 5.5 as the executor, and Add executor.
  2. 02

    You

    Write the task in a chat

    Plain text, the way you would brief a colleague. Here: history and stats for a Pomodoro app. Codex on gpt-6.1-sol is planning; the panel shows what it is doing and for how long.

    The panel: a chat with the task, Codex planning, the team of Codex and Claude Code on the right.
  3. 03

    Executor

    Another agent builds it

    The orchestrator writes the plan and hands it over. Claude Code on Opus 5.5 works in the project's own workspace on the server — the same checkout as last time — while you watch each step, or close the tab.

    The panel: Claude Code working on the task, with its live steps, elapsed time and a Stop run button.
  4. 04

    Orchestrator

    Review that actually catches things

    In the first chat, Codex found that a failed storage write could erase the sessions finished today; in the third, that expired days stayed in storage after midnight. Each time it sent the work back, and Claude Code fixed it with a regression test. The fixes are commits in the repository.

    GitHub commits on main: the agents' work by infra-cod[bot], two fixes the review asked for, and the owner's merges.
  5. 05

    GitHub

    A pull request in your repository

    You press Approve; the panel pushes the approved commit and opens the pull request through your own GitHub App, as a bot — with the task and the executor's report in the description. You merge it where you always do.

    A GitHub pull request opened by infra-cod[bot]: 14 files changed, ready to merge.
  6. 06

    Result

    The app they built

    Focus Timer: a timer, settings, a week of stats and CSV export, no dependencies, 114 tests. Three chats and about half an hour of agent time; the review caught a real bug in two of them. Nobody typed code.

    Focus Timer's Stats view, built by the agents: focus today, this week, the daily streak and a chart of the last seven days (sample history).
From your tracker

Label an issue. Get a pull request.

Work does not have to start in the panel. Issue #3 of Focus Timer went from a label to a merged pull request without anyone typing a prompt or a line of code.

01

Label it

Put the project's label on an issue — agent, by default. Within a minute it waits on the project's page.

02

Start it

One press turns it into a chat: plan, implementation, review. The bot says so on the issue.

03

Merge it

The pull request links back and says Closes #N. Merge it, and the issue closes itself.

The project's page in the panel: a GitHub issue waiting, with Start and Dismiss.
GitHub issue #3, closed: the bot's comment that the chat started, and the linked pull request.

Only issues opened by the repository's owner, a member or a collaborator are offered — an issue's text reaches an agent that writes to your code. Nothing starts until you press Start.

Why

Agents are capable. The scaffolding around them is not.

The bottleneck is no longer model quality. It is state, handoff and trust.

Every agent starts from zero

A fresh clone, a fresh environment, a fresh misunderstanding of the codebase — and the work stops when you close the laptop.

Two agents, no handoff

The model that plans well is rarely the one that edits best, and which is which changes every month. Moving work between them by hand is slow and lossy.

Who it is for

People who already pay for agents and want them to work while they don't.

For a developer on their own

  • Your Claude and ChatGPT subscriptions do the work. The panel shows how much of each limit is left before you start a run, not after.
  • Start a task from your phone on the way, review it from your laptop when you sit down.
  • New agent versions are installed beside the current one, checked on your server and offered with one button.

For a small team

  • One server you control: the code, the sessions and the history stay on your infrastructure.
  • Every agent runs as its own system user, with no access to the database or to another agent's login.
  • Commits come from a bot identity, pull requests go through your own GitHub App, and every release is signed.

One person operates the panel today; seats for the rest of the team are next.

Architecture

One VPS. One process facing the internet.

Nothing is managed for you, because nothing needs to be. The installation is a Node build, a database on a Unix socket and a reverse proxy.

Request path

Browser or phone

HTTPS from anywhere

TLS, compression, HSTS

Caddy

the only published process

127.0.0.1:3100 — loopback only

Next.js standalone

the control panel

Unix socket, peer authentication

PostgreSQL 17

durable state, events, audit

No password anywhere in the path

The panel and each worker connect over a Unix socket. The operating-system user and the PostgreSQL role are mapped one to one, so there is no connection string to leak and no secret to rotate.

Agents cannot reach the database

Each runtime executes as its own system account, sandboxed, with no database role and no way to read another runtime's login. Agents edit the workspace; the control plane records what happened.

Releases are signed and verifiable

An installation is a single artifact with a manifest and a signature you can check before it ever runs on your machine.

Try it

From a clean server to the first pull request.

No domain needed: without one, the panel is served at your server's address under sslip.io, with a real certificate.

curl -fsSL https://github.com/STpytut/agentic-control/releases/latest/download/get.sh | sudo sh -s -- --email [email protected]
  1. 01

    Run one command

    On a clean Ubuntu 24.04 server with 4 GB of memory. It checks the release's signature, installs the panel with Codex and Claude Code, and prints the address and a one-time password. About three minutes.

  2. 02

    Sign in your agents

    In the panel: Codex with your ChatGPT account, Claude Code with your Claude account. No terminal after the install.

  3. 03

    Connect GitHub and give the first task

    The panel walks you through creating your GitHub App and the first project. Then write the task and approve the pull request.

Install guide and optionsThe installer is open source: read get.sh before you run it.
Status

Where the product actually is.

Agentic Control is open source and pre-1.0: it runs every day on one production server — its author's. This is the honest state of it.

Working

Panel and workflow

Projects, chats, orchestrator and executor teams, review, revisions and publishing to GitHub. Used every day by its author.

Working

Agent runtimes

Claude Code, Codex and OpenCode. A new version is qualified on your server before you promote it, and the model list refreshes itself.

Working

Installation

One command on a clean Ubuntu 24.04 VPS (x86-64, 4 GB of memory, 10 GB of disk): database, services, TLS, the panel and the agents. Tested from a clean server twice before release.

Working

Signed releases and updates

Every release is signed. An update checks the signature, takes a backup first and keeps the previous version for a rollback.

Next

Several users per server

One operator per installation today.

Not yet

Version 1.0

The code is open and anyone can install it, but it is pre-1.0: so far it has run in production on one server, its author's. Tell us where installing it stopped you.

Questions and feedback

Tell us where it stopped you.

If installing it or the first task went wrong, open an issue: the next person who gets stuck there will find the answer. For anything else, or for what your team would need, write to the author.