onbehalf
NEW Release 0.2.0 is available

The setup is shared. The identity is not.

onbehalf gives your team one reviewed AI harness setup on a shared Linux host. The runtime of each user runs in the Unix account of that user, with the logins of that user.

sudo onbehalf setup
AI harnessModel gatewayWork toolsShared stack
Works with OpenCode Claude Code Codex LiteLLM Git GitHub CLI Azure CLI MCP servers Entra ID systemd

The problem

A shared setup must not hide who did an action.

A good AI harness setup has many parts: settings, instructions, skills and model access. Teams usually select one of two bad options. onbehalf gives the good parts of the two.

What the team gets A setup on each laptop One shared account onbehalf
One reviewed setup for the team ✗✓✓
Git, GitHub and Azure record the real user ✓✗✓
No user can read the credentials of a different user ✓✗✓
Model use and cost for each user ✗✗✓
Offboard without a secret to change ✓✗✓

How it works

The runtime acts on behalf of the user who started it.

The runtime is not an identity of its own. onbehalf works at the Unix layer: accounts, permissions, links and services.

One host gives one read-only, reviewed shared stack to all users. The runtime of each user runs in the Unix account of that user, with personal overrides, tool logins and a gateway key. The model gateway keeps the provider key of the team. GitHub and Azure record each action as the user.

onbehalf does not install the AI harness, and it does not log anybody in. Each user logs in to each work tool. Read how it works.

Features

All the parts for a team, in one CLI.

Each claim has a test. The tests run on fresh Ubuntu and Arch Linux hosts for each test run.

One shared stack

The team keeps the harness settings, the instructions, the skills and the model catalog in Git. Each user gets them read-only. A personal item replaces only the shared item with the same name.

onbehalf stack install

A personal identity

Each runtime runs in the Unix account of its user. Commits, pushes and model use show the user whose runtime did them.

onbehalf status

No shared credential

Each user logs in to each work tool. Only the model gateway keeps the provider key. onbehalf never keeps, reads or sends a credential.

onbehalf tools

Enroll and offboard

Users enroll at the first SSH login, or follow an Entra group. Offboarding stops the runtime and revokes the gateway key. The other users continue to work.

onbehalf user remove

Checks and reports

The doctor command checks the host and every user, and shows a fix for each problem. The report command shows use and cost for each user, but never what a user asked.

onbehalf doctor

Least privilege

An operator can run only onbehalf as root. The runtime of an operator runs in a separate account without sudo.

onbehalf operator shell

Tested on real systems

No mocks between the runtime and the record.

The tests use the real AI harness, a real model gateway and a real Git server. Only the model is a test model that always gives the same answer.

Ubuntu + ArchA fresh host for each test run.
OpenCodeThe real AI harness, one runtime for each user.
LiteLLMA real model gateway records the use of each key.
ForgejoA real Git server shows the user of each push.

Quick start

From a fresh host to a team in four steps.

  1. Install the AI harness Install OpenCode, Claude Code or Codex one time on the host.
  2. Connect a model gateway Run a LiteLLM model gateway, or use the gateway of your team.
  3. Make a stack source Copy examples/stack into a Git repository of your team.
  4. Run the guided setup The setup connects the gateway, installs the shared stack and adds users.
# As the operator of the host
$ git clone https://github.com/Neverdecel/onbehalf.git
$ cd onbehalf
$ sudo ./install.sh --install-deps
$ sudo onbehalf setup

# As each user, for example alice
$ onbehalf tools
$ opencode

Give your team one setup. Keep each identity.

onbehalf is an early MVP. The repository on GitHub is the main location for the code and the docs.

Blog

The latest posts