@oddessentials/agent-guild 1.9.2 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,34 +1,23 @@
1
- <p align="center">
2
- <img src="docs/images/banner.webp" alt="Agent Guild: Work hard, play hard. An agentic UI that enhances instead of hinders." width="100%">
3
- </p>
1
+ <h1 align="center">Agent Guild</h1>
4
2
 
5
3
  <p align="center">
6
4
  <a href="https://www.npmjs.com/package/@oddessentials/agent-guild"><img src="https://img.shields.io/npm/v/@oddessentials/agent-guild?color=7c5cff&label=npm" alt="npm version"></a>
7
5
  <a href="https://github.com/oddessentials/agent-guild/actions/workflows/release.yml"><img src="https://img.shields.io/github/actions/workflow/status/oddessentials/agent-guild/release.yml?branch=main&label=release" alt="Release status"></a>
8
6
  <img src="https://img.shields.io/badge/platforms-Windows%20%7C%20macOS%20%7C%20Linux-e8c47c" alt="Windows, macOS and Linux">
9
7
  <img src="https://img.shields.io/node/v/@oddessentials/agent-guild?color=4cc38a" alt="Node.js version">
10
- <a href="https://www.youtube.com/watch?v=ziT62WtXQ1M"><img src="https://img.shields.io/badge/trailer-watch%20on%20YouTube-e5534b?logo=youtube&logoColor=white" alt="Watch the Agent Guild trailer on YouTube"></a>
11
- <a href="https://agentguild.oddessentials.ai/"><img src="https://img.shields.io/badge/Agent%20Guild%3A%20World-coming%20soon%20to%20Steam-1b2838?logo=steam&logoColor=white" alt="Agent Guild: World, coming soon to Steam"></a>
12
- <a href="https://oddessentials.ai/donate/?ref=agent-guild"><img src="https://img.shields.io/badge/support-buy%20the%20lab%20a%20beer-f2a93b" alt="Support Agent Guild: buy the lab a beer"></a>
13
- </p>
14
-
15
- <p align="center">
16
- <picture>
17
- <source media="(prefers-reduced-motion: reduce)" srcset="docs/images/yard-still.webp">
18
- <img src="docs/images/yard-clip.webp" alt="Seven coding-agent sessions as characters in the Guild Yard: they leave the plaza for their tools' halls and get to work, then a double-click on one opens Claude Code's real terminal, with its three helper agents" width="100%">
19
- </picture>
20
8
  </p>
21
9
 
22
- **Every coding agent you run becomes a character in a 3D world, and stays a
23
- real terminal one double-click away.**
10
+ **Run Claude Code, Codex CLI, Antigravity CLI, Grok Build, Docker Agent and
11
+ your own shells side by side in real terminals. Pick the same live sessions up
12
+ from your phone, VS Code or any browser. Free, on Windows, macOS and Linux.**
24
13
 
25
- **Agent Guild** runs Claude Code, Codex CLI, Antigravity CLI, Grok Build,
26
- Docker Agent and your own shell side by side, in real terminals, from one
27
- local web page, or from your phone over Tailscale.
28
- Close the page whenever you like; the sessions keep running.
14
+ Agent Guild is a small manager that runs on your computer and serves one
15
+ local web page. Close the page whenever you like; the sessions keep running.
29
16
 
30
- [Try the demo](https://oddessentials.github.io/agent-guild/) in your browser
31
- (simulated, nothing installed) or [watch the trailer](https://www.youtube.com/watch?v=ziT62WtXQ1M).
17
+ <picture>
18
+ <source media="(prefers-color-scheme: light)" srcset="docs/images/overview-light.webp">
19
+ <img src="docs/images/overview-dark.webp" alt="Agent Guild with one card per coding tool and six sessions at work">
20
+ </picture>
32
21
 
33
22
  ## Quick start
34
23
 
@@ -41,13 +30,54 @@ agent-guild
41
30
 
42
31
  The page opens in your browser. Press **New** on a tool's card to start a
43
32
  session. Sign in to each tool inside its first session, as you would in any
44
- terminal.
45
-
46
- **[Agent Guild for VS Code](https://marketplace.visualstudio.com/items?itemName=OddEssentials.agent-guild)**
47
- opens the same page in an editor tab. Editors that install from Open VSX get it
48
- [there](https://open-vsx.org/extension/OddEssentials/agent-guild).
49
-
50
- | Requirement | |
33
+ terminal. To look around first, [try the demo](https://oddessentials.github.io/agent-guild/)
34
+ (simulated, nothing installed) or [watch the trailer](https://www.youtube.com/watch?v=_vQuW0v-uMY).
35
+
36
+ **Or ask your agent.** Point it at
37
+ [the setup skill](https://github.com/oddessentials/agent-guild/blob/main/plugins/agent-guild/skills/setup-agent-guild/SKILL.md),
38
+ or run `claude plugin marketplace add oddessentials/agent-guild --sparse .claude-plugin plugins`
39
+ and `claude plugin install agent-guild@agent-guild`. It installs and checks Agent Guild,
40
+ then connects over [MCP](docs/mcp.md) to see and steer your sessions.
41
+
42
+ ## Why Agent Guild
43
+
44
+ * **The real CLIs, unchanged.** Each session is the tool itself in a real
45
+ terminal, not a chat copy of it. Whatever sign-in the tool uses works: a
46
+ subscription, an API key, Amazon Bedrock or your own gateway.
47
+ * **Every agent in one place.** Claude Code, Codex CLI, Antigravity CLI, Grok
48
+ Build, Docker Agent, any shell, and tmux or herdr sessions, each card
49
+ showing its helper agents and model, with usage meters for Claude Code and
50
+ Codex CLI.
51
+ * **The same session on every screen.** Any browser, a phone over
52
+ [Tailscale](#remote-access-with-tailscale) with touch keys, VS Code, and
53
+ apps for iPhone, iPad and Vision Pro (beta) and
54
+ [Android](https://github.com/oddessentials/agent-guild-android/releases/latest).
55
+ Apple Watch and Meta Ray-Ban Display list your sessions and read a
56
+ session's last answer aloud.
57
+ * **Native on Windows.** No WSL. Also macOS, Linux, and headless Linux
58
+ servers over SSH.
59
+ * **Nothing in between.** No account and no relay server: the manager
60
+ listens on `127.0.0.1`, and other devices reach it through your own
61
+ Tailscale network or reverse proxy. See [Privacy](#privacy).
62
+
63
+ ### How it compares
64
+
65
+ | | Agent Guild | tmux over SSH | Claude Code Remote Control |
66
+ | --- | --- | --- | --- |
67
+ | Agents | Any CLI, side by side | Any CLI | Claude Code |
68
+ | On a phone | The real terminal in a web page or app, with touch keys | An SSH app | A chat view in the Claude app |
69
+ | Sign-in | Whatever the tool uses | Whatever the tool uses | Pro, Max, Team or Enterprise; [not API keys, Bedrock or a gateway](https://code.claude.com/docs/en/remote-control) |
70
+ | Windows without WSL | Yes | No | Yes |
71
+
72
+ **Not yet:** push notifications. Phones and the Apple apps reconnect when you
73
+ open them again; the sessions keep running on the computer in the meantime.
74
+
75
+ **License:** open source under the [GNU AGPL 3.0](LICENSE). Free for
76
+ personal and commercial use.
77
+
78
+ ## Requirements
79
+
80
+ | | |
51
81
  | --- | --- |
52
82
  | Node.js | 22 or newer |
53
83
  | Windows | 10 version 1809 or later, x64 or arm64. No WSL needed. |
@@ -60,15 +90,9 @@ missing tool shows **Install** on its card; Antigravity CLI, which is not on
60
90
  npm, shows its install command instead. For Docker Agent, see
61
91
  [Docker Agent](#docker-agent).
62
92
 
63
- <picture>
64
- <source media="(prefers-color-scheme: light)" srcset="docs/images/overview-light.webp">
65
- <img src="docs/images/overview-dark.webp" alt="Agent Guild with one card per coding tool and six sessions at work">
66
- </picture>
67
-
68
- **[Agent Guild: World](https://agentguild.oddessentials.ai/)**, coming soon to
69
- Steam, is the premium 3D window onto the same sessions: six worlds to roam
70
- with a free camera, Steam Workshop crews and companions, and controller
71
- support, on Windows, macOS and Linux. Agent Guild and its Yard stay free.
93
+ **[Agent Guild for VS Code](https://marketplace.visualstudio.com/items?itemName=OddEssentials.agent-guild)**
94
+ opens the same page in an editor tab. Editors that install from Open VSX get it
95
+ [there](https://open-vsx.org/extension/OddEssentials/agent-guild).
72
96
 
73
97
  ## Setup
74
98
 
@@ -193,7 +217,15 @@ The first Claude Code usage meter may ask for access to the
193
217
 
194
218
  <img src="docs/images/workspace.webp" alt="Two terminals side by side with the GitHub panel showing the workflow runs of the focused terminal's repository">
195
219
 
196
- <img src="docs/images/yard.webp" alt="The Yard in the Professional skin: a 3D campus with a building for each coding tool, its sessions' characters outside, and the roster and inspector beside it">
220
+ ### The Yard
221
+
222
+ For fun, the Yard shows your tools and sessions as a 3D world, one for each
223
+ skin. A double-click on a character opens its real terminal.
224
+
225
+ <picture>
226
+ <source media="(prefers-reduced-motion: reduce)" srcset="docs/images/yard-still.webp">
227
+ <img src="docs/images/yard-clip.webp" alt="Seven coding-agent sessions as characters in the Guild Yard: they leave the plaza for their tools' halls and get to work, then a double-click on one opens Claude Code's real terminal, with its three helper agents" width="100%">
228
+ </picture>
197
229
 
198
230
  <table>
199
231
  <tr>
@@ -219,6 +251,7 @@ The first Claude Code usage meter may ask for access to the
219
251
  | `agent-guild url` | Print the page link with the access token. |
220
252
  | `agent-guild start` | Run the manager in the foreground. |
221
253
  | `agent-guild doctor` | Diagnose the health of the installation and related tooling. |
254
+ | `agent-guild mcp` | Serve MCP on stdio, so a coding agent can see and steer the sessions. See [Agent Guild for agents](docs/mcp.md). |
222
255
  | `agent-guild --version` | Print the installed Agent Guild version (`-v` or `version`). |
223
256
 
224
257
  Sessions end when the manager stops or the computer restarts. tmux and herdr
@@ -252,11 +285,19 @@ Failed news, model list and release checks retry after 10 minutes.
252
285
 
253
286
  ## More
254
287
 
288
+ * [Agent Guild for agents](docs/mcp.md): the MCP server, and a plugin and skill that set Agent Guild up
255
289
  * [Configuration](docs/configuration.md): add tools, accounts, environment variables, reverse proxies
256
290
  * [Agent reporting](docs/agent-reporting.md): show agents from any tool
257
291
  * [Skins](docs/SKINS.md): make your own look
258
292
  * [Contributing](CONTRIBUTING.md)
259
293
 
294
+ ## Agent Guild: World
295
+
296
+ [Agent Guild: World](https://agentguild.oddessentials.ai/), coming soon to
297
+ Steam, is a separate, premium 3D window onto the same sessions: six worlds to
298
+ roam with a free camera, Steam Workshop crews and companions, and controller
299
+ support, on Windows, macOS and Linux. Agent Guild and its Yard stay free.
300
+
260
301
  ## Support
261
302
 
262
303
  Agent Guild is free to use. If it saves you time,
@@ -265,4 +306,5 @@ tax-deductible donation, and it changes nothing about the software.
265
306
 
266
307
  ## License
267
308
 
268
- See [LICENSE](LICENSE).
309
+ Copyright (c) 2026 Odd Essentials. Licensed under the
310
+ [GNU Affero General Public License 3.0](LICENSE).
@@ -7,6 +7,7 @@
7
7
  // agent-guild restart stop the manager and start it again (ends all sessions)
8
8
  // agent-guild status show whether the manager is running
9
9
  // agent-guild url print the page URL (includes the access token)
10
+ // agent-guild mcp serve the Model Context Protocol on stdio, for coding agents
10
11
 
11
12
  import fs from 'node:fs';
12
13
  import { spawn } from 'node:child_process';
@@ -35,6 +36,8 @@ Commands:
35
36
  status Show whether the session manager is running
36
37
  url Print the web page URL, including the access token
37
38
  doctor Diagnose the health of the installation and related tooling
39
+ mcp Serve the Model Context Protocol on stdio, so a coding agent can
40
+ see and steer the sessions (--allow-input lets it type into them)
38
41
 
39
42
  Options:
40
43
  -v, --version Print the installed Agent Guild version
@@ -90,7 +93,7 @@ function openBrowser(url) {
90
93
  // rundll32 avoids cmd.exe's special handling of characters like "&" in URLs.
91
94
  child = spawn('rundll32', ['url.dll,FileProtocolHandler', url], { ...opts, windowsHide: true });
92
95
  } else child = spawn('xdg-open', [url], opts);
93
- child.on('error', () => console.log(`Could not open a browser automatically. Open this URL:\n ${url}`));
96
+ child.on('error', () => console.log('Could not open a browser automatically. Run `agent-guild url` to print the page link.'));
94
97
  child.unref();
95
98
  }
96
99
 
@@ -336,6 +339,12 @@ async function main() {
336
339
  console.log(pageUrl(baseUrl(), loadOrCreateToken()));
337
340
  return undefined;
338
341
  }
342
+ case 'mcp': {
343
+ // stdout carries only protocol messages from here on.
344
+ const { serveMcp } = await import('../src/mcp/server.mjs');
345
+ await serveMcp({ allowInput: flags.has('--allow-input') });
346
+ return undefined;
347
+ }
339
348
  default:
340
349
  usage();
341
350
  process.exitCode = 2;
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@oddessentials/agent-guild",
3
- "version": "1.9.2",
3
+ "version": "1.11.0",
4
4
  "description": "Launch and watch AI coding-assistant terminal sessions from one local web page. A bundled session manager owns the terminals so the page can close and reconnect.",
5
- "license": "SEE LICENSE IN LICENSE",
5
+ "mcpName": "ai.oddessentials/agent-guild",
6
+ "license": "AGPL-3.0-only",
6
7
  "repository": {
7
8
  "type": "git",
8
9
  "url": "git+https://github.com/oddessentials/agent-guild.git"
@@ -0,0 +1,11 @@
1
+ const MAX_RESUME_ID = 200;
2
+
3
+ /** A session id or name to resume: one printable line, or null when absent. */
4
+ export function cleanResumeId(resume) {
5
+ if (resume === undefined || resume === null) return null;
6
+ const id = String(resume).trim();
7
+ if (!id || id.length > MAX_RESUME_ID || /\p{Cc}/u.test(id) || id.startsWith('-')) {
8
+ throw Object.assign(new Error(`resume must be a printable id of at most ${MAX_RESUME_ID} characters that does not start with "-"`), { status: 400, code: 'bad_resume' });
9
+ }
10
+ return id;
11
+ }
@@ -135,7 +135,7 @@ export function grokHooksState(dir, files) {
135
135
 
136
136
  export function bundleFiles(version, { platform = process.platform } = {}) {
137
137
  const json = (value) => `${JSON.stringify(value, null, 2)}\n`;
138
- const manifest = { name: PLUGIN_NAME, version, description: MANIFEST_DESCRIPTION };
138
+ const manifest = { name: `${PLUGIN_NAME}-reporting`, version, description: MANIFEST_DESCRIPTION };
139
139
  return {
140
140
  claude: {
141
141
  '.claude-plugin/plugin.json': json(manifest),
@@ -16,6 +16,7 @@ import { DockerSessions } from './docker-sessions.mjs';
16
16
  import { SELF_PROVIDER } from './self-update.mjs';
17
17
  import { GITHUB_PROVIDER, dropsFromCloneEnv, parseRepo } from './github.mjs';
18
18
  import { pathIdentity } from './multiplexer-paths.mjs';
19
+ import { cleanResumeId } from './resume-id.mjs';
19
20
 
20
21
  export const MAX_SESSIONS = 32;
21
22
  const TMUX_SESSION_GONE = [/^can't find session/m, /^no server running on /m, /^error connecting to .*\(No such file or directory\)$/m];
@@ -878,18 +879,6 @@ export function modelFromArgs(args) {
878
879
  return null;
879
880
  }
880
881
 
881
- const MAX_RESUME_ID = 200;
882
-
883
- /** A session id or name to resume: one printable line, or null when absent. */
884
- export function cleanResumeId(resume) {
885
- if (resume === undefined || resume === null) return null;
886
- const id = String(resume).trim();
887
- if (!id || id.length > MAX_RESUME_ID || /\p{Cc}/u.test(id)) {
888
- throw httpError(400, `resume must be a printable id of at most ${MAX_RESUME_ID} characters`, 'bad_resume');
889
- }
890
- return id;
891
- }
892
-
893
882
  export function timingSafeEqualString(a, b) {
894
883
  if (typeof a !== 'string' || typeof b !== 'string') return false;
895
884
  const ab = Buffer.from(a);