Fengyuan Zhu
Agent Hub

One link into the agent world.

A cloud workspace for AI agents. An agent like Claude Code or opencode can do far more than a chat window, because it has a real computer and knows how to use it. The hard part is getting one running on everyone's own machine. So the whole thing lives in the cloud: one link, one workspace per person, nothing to install.

Accounts are by invitation while it is a pilot. Everything on this page was recorded on the running deployment.

Nothing to install
Signing in takes a browser and nothing else. No API key to paste, no terminal to learn, no setup on your side.
A workspace of your own
Your files, the agent's files, its charts and pages all live in your container, and they are still there when you come back.
The work outlives the tab
The job runs in the container, not in the page. Close the browser mid-task and the finished files are waiting when you return.
Demo

Seven minutes, recorded live

Sign in, ask the agent what it is running on, then three real jobs: a messy spreadsheet, a number that needed checking, and a page that already existed and was wrong. No replay, no rehearsal; every figure spoken in the film was measured from the recording it came from.

If the player does not load, watch it on Vimeo. Subtitles are available in the player.

What it does

Three jobs from the film

Case one

A messy spreadsheet

A workshop sign-up sheet, uploaded from the organiser's laptop. Three date formats, e-mail addresses in mixed case, "year" written six different ways, and a few people who signed up twice. The agent reads the file and says what is wrong, installs the library it needs, cleans the rows down to people, reads all fifty free-text answers and groups them by what they mean, draws the charts, and writes a self-contained HTML report that renders in place and downloads in one press.

read · bash · the model · write
The report the agent wrote, previewed inside the workspace: summary chips for unique sign-ups, duplicates removed and year levels, a summary paragraph, and a chart of what people wanted from the workshop.
Case two

Checking a number

Was a monthly jobs figure revised after publication? The agent fetches the page and picks the numbers out, then sends a subagent to verify the figure independently against a second source. It writes the answer up with both values and a link to every source, and saves the conclusion to long-term memory. In a brand-new conversation, with none of that work in it, the agent still answers from memory.

webfetch · subagent + websearch · write · memory
The agent's transcript: a table of the published and revised figures, the user asking for an independent check, and a subagent running.
Case three

A page that already exists

A sign-up browser page written in an earlier session, opened and used from the workspace. Look one person up and they are in there twice: the page counts rows, not people. Told what is wrong, the agent reads the page, works out which rows are the same person, and edits the project that was already there.

read · edit · bash
The sign-up page rendered inside the workspace, with a search box showing one person's two entries before the fix.
How it is built

JupyterHub underneath, an agent on top

The containers are run by JupyterHub, so any institution already running it can host this as it stands. Inside each container is an open-source agent engine and its browser interface. Every model call and every web lookup goes through one small gateway that holds all the credentials and keeps one ledger.

How Agent Hub is put together Five layers from top to bottom: a person with a browser; the Hub, which is JupyterHub; one container per person holding the agent and its files; a model gateway that owns every credential and keeps the ledger; and, below it, interchangeable model providers and search back ends. Provider keys never enter a container. Person A browser and a link. Nothing to install, no key to paste, no terminal to learn. https, one sign-in Hub JupyterHub BSD-3-Clause · DockerSpawner BSD-3-Clause Sign-in · one container per person, started on first visit · routing under /user/name/ · roster, keys and backups live here, never inside a container starts and proxies Your workspace · one container per person The agent and its files non-root · own home volume · no Docker socket, no host mounts · private network blocked · limits set by the operator jhsingle-native-proxy Apache-2.0 Hub OAuth check nginx sub-path adapter Pi Web MIT · upstream unmodified chat, files, editor, settings, first-run guide Agent Hub skin and patches Pi · the agent engine MIT · driven over RPC read write edit bash grep find ls plus extensions: websearch, webfetch, subagents, memory, plan, todo, skills its own Python and Node environments Files that persist workspace/ what you upload and what it writes .pi/ sessions, memory, settings, skills Backed up nightly by pull from outside; the container holds no backup credential. one gateway token per person · no provider key inside Model gateway · Agent Hub's own Every credential, every call, one ledger token → person · model allow-list · usage ledger per person and per call · daily cost gate · web search and fetch bring-your-own-key: a person's own provider key is stored here, used on their behalf, never sent to their container Model providers · any OpenAI-compatible endpoint An institutional gateway (Lumen at NCSA), a commercial subscription, or a model server on your own hardware (llama.cpp, vLLM). Swapping the provider is one line of configuration; nothing else changes. Search back ends Exa · Brave · SearXNG SearXNG AGPL-3.0, unmodified, internal only Tried in order; a back end without a key is skipped.
Top to bottom. The Hub and the gateway are the only places credentials live. A container holds one gateway token that identifies its owner, and nothing else.
No provider key enters a container.

The gateway holds the model keys and the search keys. Tests log into a real container and check that no other credential is there.

One ledger for everything.

Every model call, search and fetch, including refused ones, is written server-side against the person. Per-session token counts, tool calls, duration and cost are reconciled against the agent's own session files.

One container per person, isolated.

Non-root, its own home volume, no Docker socket, no host mounts, no reach into the private network, and resource limits set by the operator. Another person's path is refused.

The provider is a setting.

The gateway speaks the OpenAI protocol upstream. The same deployment has run on an institutional gateway (Lumen at NCSA), on a commercial subscription and on a local model server.

Bring your own key.

A person can paste a key for a provider they have access to. It is stored at the Hub, used on their behalf by the gateway, never sent to their container, and never readable back.

Verified, not assumed.

A fourteen-part test suite runs against the live site, from sign-in and isolation through a real tool-calling loop to work continuing after the browser is gone. Each check reads its evidence from disk or the ledger, not from the screen.

Open source

Built from published components

Agent Hub is a thin layer of configuration and glue over open-source projects used as released. Where the interface is adjusted, it is done by patches applied at start-up, not by forking. One copyleft component, unmodified and internal; a deployment that uses commercial search back ends only has none.

Component Role in Agent Hub Licence Note
JupyterHub 5.4 Sign-in, one container per person, routing, admin BSD-3-Clause Already run by many campuses and clusters
DockerSpawner 14 Starts each person's container with the right limits and volume BSD-3-Clause Swappable for a cluster spawner
jhsingle-native-proxy 0.8 Lets a non-notebook web app sit behind the Hub's OAuth Apache-2.0 Upstream archived; small and stable
nginx Sub-path adaptation inside the container BSD-2-Clause
Pi 0.85 The agent engine: tools, sessions, extensions, driven over RPC MIT No SaaS back end; any OpenAI-compatible provider
Pi Web 1.21 The browser interface: chat, files, editor, settings MIT Upstream unmodified; skin and patches applied at start-up
Pi extensions and skills Subagents, memory, plan mode, task list, YouTube transcripts MIT Published by the Pi authors; web search and fetch are Agent Hub's own
SearXNG Last-resort search back end behind the gateway AGPL-3.0 Unmodified, internal network only; optional
Docker, Python, Node.js, uv Containers and the runtime the agent programs in Apache-2.0 / PSF / MIT

Agent Hub's own code is the Hub configuration and page templates, the model gateway, the container entry point, the interface skin and patches, a few Pi extensions, the account tooling, the backup job and the test suite.

Honest edges

What it is not yet

White paper

The short version, on paper

Six pages: what Agent Hub is, what a person gets, the three jobs from the film, how it is built, the open-source chain with licences, what a deployment needs, and what it is not yet.

Agent Hub: a cloud workspace for AI agents

Fengyuan Zhu · Siebel School of Computing and Data Science, University of Illinois Urbana-Champaign · September 2026, version 1.0

Download the PDF