Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 88 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,71 +1,128 @@
# Agent Guild for VS Code

Watch your AI coding agents come alive in a 3D world, in a VS Code tab. Claude Code, Codex CLI, Antigravity CLI, Grok Build, Docker Agent and your own shell each get a hall, and every session is a character at work.
Run Claude Code, Codex CLI, Antigravity CLI, Grok Build and Docker Agent side by side in real terminals, and watch every session come alive as a character in a 3D world, in a VS Code tab or right beside your code. Each tool runs on your own account, just as it does in any terminal.

![Six real agent sessions in the Guild Yard: the characters walk to their halls and start working, then Claude Code's terminal opens with its three helper agents](https://raw.githubusercontent.com/oddessentials/agent-guild-vscode/main/media/yard.gif)

## The Yard
## Get started

1. Install this extension.
2. Click **Agent Guild** in the status bar, or open **Agent Guild** in the Explorer.
3. If Agent Guild isn't installed yet, choose **Install**. It runs `npm install -g @oddessentials/agent-guild` in a terminal and connects when it finishes.

Press **New** on a tool's card to start a session, and sign in to the tool there the first time.

## Your coding agents, side by side

- Real terminals that keep running when you close the tab or VS Code. The tab comes back the next time VS Code starts.
- Rate-limit meters for Claude Code and Codex CLI, so you know how much headroom is left.
- Each session's helper agents and model, live on its card.
- Two sessions at once with **Split**, and earlier conversations back with **Resume**.

| | Install from its card | Helper agents | Rate-limit meter | Resume | Several accounts | Model benchmarks |
| --- | :-: | :-: | :-: | :-: | :-: | :-: |
| Claude Code | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Codex CLI | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Antigravity CLI | Shows the command | | | ✓ | | ✓ |
| Grok Build | ✓ | With **Agent reporting** | | ✓ | ✓ | ✓ |
| Docker Agent | ✓ | ✓ | | ✓ | | |

The **Shell** card runs your own shell, plus tmux (macOS and Linux) and herdr sessions that keep running when Agent Guild stops. Helper agents need a recent version of each tool: [setup per tool](https://github.com/oddessentials/agent-guild/blob/main/docs/agent-reporting.md).

## Watch them work: the Yard

- Every session is a character. It works at its tool's hall while its terminal is busy, and walks off to rest when it goes quiet. There is nothing to set up.
- Helper agents appear beside their character: Claude Code's, Codex CLI's and Docker Agent's on their own, Grok Build's once you turn on **Agent reporting** on its card.
- Halls glow while their sessions work, and the roster lists every tool and session.
- Helper agents gather beside their character, and halls glow while their sessions work.
- Double-click a character to open its real terminal.
- Six worlds: The Guild Yard, Operations Campus, Orbital Station, The Living Grove, Goblinville Works and Gnomeland Village.

![The same six sessions in each of the six worlds](https://raw.githubusercontent.com/oddessentials/agent-guild-vscode/main/media/worlds.jpg)

To open it, run **Agent Guild: Open the Yard** from the Command Palette. **Agent Guild: Open** then keeps opening the Yard, until you choose **Cards** under **Settings → View** in the tab. Pick a world under **Settings → Skin**.

[Try the Yard in your browser](https://oddessentials.github.io/agent-guild/?view=yard) (simulated, nothing installed), or watch the trailer:
Run **Agent Guild: Open the Yard**, and pick a world under **Settings → Skin**. [Try the Yard in your browser](https://oddessentials.github.io/agent-guild/?view=yard) (simulated, nothing installed), or watch the trailer:

[![Agent Guild: The Yard Update trailer on YouTube](https://i.ytimg.com/vi/Zttp-vs_6z0/maxresdefault.jpg)](https://www.youtube.com/watch?v=Zttp-vs_6z0)

## The tab
## The Yard beside your code

Keep your agents in view while you work. Open **Agent Guild** in the Explorer, or drag it to the bottom panel.

![VS Code with the Agent Guild view in the Explorer showing the Guild Yard beside a TypeScript file, with Claude Code, Codex CLI, Antigravity CLI, Grok Build and Shell sessions at their halls (demo sessions)](https://raw.githubusercontent.com/oddessentials/agent-guild-vscode/main/media/view.png)

_Shown with demo sessions._

- It shows the Yard in the world and theme you chose in the tab.
- Double-click a character to open its terminal in the Agent Guild tab.
- It draws nothing while it's collapsed or hidden.

## The Agent Guild tab

- **Agent Guild: Open** in the Command Palette, or **Agent Guild** in the status bar.
- If no session manager is running, one starts. If one is running, the tab connects to it.
- Opens from the status bar or **Agent Guild: Open**, and starts Agent Guild if it isn't running.
- The same sessions stay open in your browser at the same time.
- Closing the tab or VS Code leaves your sessions running. The tab comes back the next time VS Code starts.
- Links open in your default browser.

![Agent Guild opening from the status bar, then a Shell session starting from its card](https://raw.githubusercontent.com/oddessentials/agent-guild-vscode/main/media/demo.gif)

## Everything else Agent Guild does
## More in Agent Guild

Agent Guild runs your coding tools side by side, in real terminals that keep running when the page closes.

- One card per tool: install and update it, start sessions, and see its helper agents and the model in use.
- Two terminals side by side with **Split**.
- Rate-limit meters for Claude Code and Codex CLI.
- Resume a tool's earlier sessions, and see what it remembers and which instruction files it reads.
- Several accounts per tool, and model grades and benchmarks.
- GitHub issues, pull requests and workflow runs for the working folder.
- tmux and herdr sessions that keep running when the manager stops.
- See what Claude Code, Codex CLI and Grok Build remember, and which instruction files your tools read in the working folder.
- Grades and benchmarks for your tools' models.
- GitHub issues, pull requests, workflow runs and branches for your working folder, once you sign in to GitHub.

![A Claude Code session's terminal, with its helper agents in the header](https://raw.githubusercontent.com/oddessentials/agent-guild-vscode/main/media/terminal.png)

![Claude Code's earlier sessions, each with a Resume button](https://raw.githubusercontent.com/oddessentials/agent-guild-vscode/main/media/history.png)

![Claude Code's models with their coding, intelligence and agentic benchmarks](https://raw.githubusercontent.com/oddessentials/agent-guild-vscode/main/media/models.png)

## Commands

| Command | What it does |
| --- | --- |
| **Agent Guild: Open**, or **Agent Guild** in the status bar | Opens the tab, in the view you last chose |
| **Agent Guild: Open the Yard** | Opens the tab straight into the Yard |
| **Agent Guild** in the Explorer | The Yard beside your code |

There are no settings to configure.

## Requirements

- Node.js 22 or newer.
- Agent Guild 1.2.0 or newer: `npm install -g @oddessentials/agent-guild`. If it is missing, the tab offers **Install**, which runs that command in a terminal. If it is older, the tab says so and opens it in your browser, where **Update** is. **Agent Guild: Open the Yard** needs 1.3.0 or newer; with 1.2, choose **Settings → View → Yard** in the tab.
- VS Code 1.85 or newer, or an editor built on it.
- For the Yard: WebGL, and a one-time 255 MB download of its art the first time it opens. Everything else keeps working meanwhile, and after that it works offline. Without WebGL, the tab offers **Show Cards**.
- Node.js 22 or newer.
- Agent Guild, installed with `npm install -g @oddessentials/agent-guild` or **Install** in the tab.
- For the Yard: WebGL, and a one-time download of about 255 MB of art the first time it opens. After that it works offline.

The extension has no settings.
| Feature | Agent Guild |
| --- | --- |
| The tab | 1.2.0 or newer |
| **Agent Guild: Open the Yard** | 1.3.0 or newer |
| The Yard beside your code | 1.5.0 or newer |

With an older Agent Guild, the tab or the view says which update it needs.

From 1.0.0 the version follows semantic versioning: a new major version only when the extension stops supporting a VS Code, Agent Guild or Node.js version listed here.

## Troubleshooting

| You see | What to do |
| --- | --- |
| Agent Guild is not installed | Choose **Install**. The tab connects when it finishes. |
| Agent Guild is not running | Choose **Open Agent Guild**, which starts it or offers **Install**. |
| Agent Guild needs Node.js | Install Node.js 22 or newer, then choose **Try again**. |
| Agent Guild did not start | Run `agent-guild doctor` in a terminal to see why. |
| Agent Guild needs an update | Choose **Open in browser**, then **Update** there. |
| Agent Guild stopped responding | Choose **Retry** once it's running again, or **Open Agent Guild** to start it. |

## Known limits

- While the Agent Guild tab has keyboard focus, VS Code's own shortcuts, such as the Command Palette, go to the page. Click outside the tab to use them.
- Dictate is not offered in the tab. Use it from the browser.
- In a remote window (SSH, WSL, a container), the tab shows the Agent Guild on your own computer, not on the remote one.
- While the Agent Guild tab or view has keyboard focus, VS Code's own shortcuts, such as the Command Palette, go to the page. Click outside it to use them.
- **Dictate** works in the browser, not in VS Code.
- In a remote window (SSH, WSL, a container), the tab and the view show the Agent Guild on your own computer, not on the remote one.
- vscode.dev and other editors in a browser are not supported.

## Privacy

The extension talks only to the Agent Guild on your own computer, and collects no telemetry. Neither does Agent Guild: [its privacy section](https://github.com/oddessentials/agent-guild#privacy) lists what it fetches, such as version checks and usage meters, and none of it carries your code or prompts.

## Agent Guild: World

[Agent Guild: World](https://agentguild.oddessentials.ai/), coming soon to Steam, shows the same sessions as a crew at work in a living 3D world, on Windows, macOS and Linux. It runs on Agent Guild, which stays free.
Expand All @@ -84,4 +141,6 @@ Pull requests are squash-merged, and their titles are Conventional Commits. Merg

## License

[PolyForm Shield 1.0.0](LICENSE), as Agent Guild.
Free to use, and source-available under [PolyForm Shield 1.0.0](LICENSE), like Agent Guild.

Claude Code, Codex, Antigravity, Grok and Docker are trademarks of Anthropic, OpenAI, Google, xAI and Docker. Agent Guild is not affiliated with or endorsed by them.
Binary file added media/view.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 15 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,17 +57,30 @@
"agent visualization",
"animated characters",
"subagents",
"three.js"
"three.js",
"companion",
"sidebar"
],
"extensionKind": [
"ui"
],
"main": "src/extension.js",
"activationEvents": [
"onStartupFinished",
"onWebviewPanel:agentGuild.page"
"onWebviewPanel:agentGuild.page",
"onView:agentGuild.yard"
],
"contributes": {
"views": {
"explorer": [
{
"type": "webview",
"id": "agentGuild.yard",
"name": "Agent Guild",
"visibility": "collapsed"
}
]
},
"commands": [
{
"command": "agentGuild.open",
Expand Down
24 changes: 16 additions & 8 deletions src/extension.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
// Agent Guild in an editor tab. The session manager owns the sessions; closing the tab or VS Code leaves them running.
// Agent Guild in an editor tab, and its Yard in a small view. The session manager owns the sessions; closing either or VS Code leaves them running.

const vscode = require('vscode');
const { Panel, VIEW_TYPE } = require('./panel');
const { YardView, VIEW_ID } = require('./yard');

function activate(context) {
const ready = new vscode.EventEmitter();
const open = () => Panel.open(ready);
const openYard = () => Panel.open(ready, 'yard');
const events = {
ready: new vscode.EventEmitter(),
viewReady: new vscode.EventEmitter(),
look: new vscode.EventEmitter(),
connected: new vscode.EventEmitter(),
};
const open = () => Panel.open(events);
const openYard = () => Panel.open(events, 'yard');
const yard = new YardView(context.globalState, events);

const button = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100);
button.text = '$(organization) Agent Guild';
Expand All @@ -15,16 +22,17 @@ function activate(context) {
button.show();

context.subscriptions.push(
ready,
...Object.values(events),
button,
vscode.commands.registerCommand('agentGuild.open', open),
vscode.commands.registerCommand('agentGuild.openYard', openYard),
vscode.window.registerWebviewPanelSerializer(VIEW_TYPE, {
deserializeWebviewPanel: async (panel) => Panel.revive(panel, ready),
deserializeWebviewPanel: async (panel) => Panel.revive(panel, events),
}),
vscode.window.registerWebviewViewProvider(VIEW_ID, yard),
);
// For the extension's own tests: open the tab and hear when the page reached its manager.
return { open, openYard, onReady: ready.event };
// For the extension's own tests: open the tab and the view, and hear when their pages reached the manager.
return { open, openYard, yard, onReady: events.ready.event, onViewReady: events.viewReady.event };
}

module.exports = { activate, deactivate() {} };
29 changes: 28 additions & 1 deletion src/manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ const { spawn } = require('child_process');
const MIN_VERSION = '1.2.0';
/** The first manager whose page opens the view VS Code asks for. */
const YARD_VERSION = '1.3.0';
/** The first manager whose page can fill a small view with the Yard. */
const VIEW_VERSION = '1.5.0';
const PACKAGE = '@oddessentials/agent-guild';

/** The manager's per-user data folder, by the same rules as agent-guild's src/manager/config.mjs. */
Expand Down Expand Up @@ -109,6 +111,29 @@ function pageSrc({ url, token, version }, view) {
return `${url}/#${hash}`;
}

/** The page's address in the small view, in the tab's last look. */
function compactSrc({ url, token }, look) {
const hash = new URLSearchParams({ token, layout: 'compact' });
if (look) {
hash.set('skin', look.skin);
hash.set('theme', look.theme);
}
return `${url}/#${hash}`;
}

/** The skin and theme a page reported, or null. */
function readLook(value) {
const skin = value?.skin;
const theme = value?.theme;
if (typeof skin !== 'string' || !/^[a-z][a-z0-9-]{0,31}$/.test(skin) || (theme !== 'light' && theme !== 'dark')) return null;
return { skin, theme };
}

/** A session id from a page, or null. */
function sessionId(value) {
return typeof value === 'string' && /^[A-Za-z0-9_-]{1,128}$/.test(value) ? value : null;
}

/** The absolute http(s) URL `href` names, or null. */
function webUrl(href) {
try {
Expand All @@ -119,4 +144,6 @@ function webUrl(href) {
}
}

module.exports = { MIN_VERSION, YARD_VERSION, PACKAGE, dataDir, readManager, health, newEnough, locate, startFailure, pageSrc, webUrl };
module.exports = {
MIN_VERSION, YARD_VERSION, VIEW_VERSION, PACKAGE, dataDir, readManager, health, newEnough, locate, startFailure, pageSrc, compactSrc, readLook, sessionId, webUrl,
};
Loading
Loading