@hanskristoffer/agentpool 0.8.0 → 0.10.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 +40 -17
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ One daemon per machine that:
|
|
|
6
6
|
- hosts **MCP servers** and gives each GitHub repo its own set (e.g. a separate PostHog project per repo), plus general ones for every repo;
|
|
7
7
|
- **shares** all of it between your machines over Tailscale or an end-to-end encrypted relay, and keeps working when the other machines are offline.
|
|
8
8
|
|
|
9
|
-
T3 Code (or plain Claude Code / Codex) runs the sessions; agentgate sits underneath. The optional **Tauri macOS app** controls your local or remote setup. The daemon and CLI work independently, including on headless Linux servers. There is no web UI. See [
|
|
9
|
+
T3 Code (or plain Claude Code / Codex) runs the sessions; agentgate sits underneath. The optional **Tauri macOS app** controls your local or remote setup. The daemon and CLI work independently, including on headless Linux servers. There is no web UI. See [running agentgate](docs/operations/running.md).
|
|
10
10
|
|
|
11
11
|
## Using the Claude Desktop app
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ Agentgate works with Claude Desktop without any terminal: open the Agentgate app
|
|
|
15
15
|
- **Switch accounts**: Claude Desktop stays signed in to your full Claude account (Chat, Cowork, Code). Agentgate keeps a saved login per account on this Mac and switches with one click, from the app or the menu bar. Desktop restarts when you switch.
|
|
16
16
|
- **Share automatically**: Claude Desktop's Code tab uses whichever subscription has room and moves on by itself. Desktop runs a separate local profile without Chat.
|
|
17
17
|
|
|
18
|
-
Agentgate's MCP servers also work in Desktop's Code tab. See [Using Agentgate with Claude Desktop](docs/claude-desktop.md).
|
|
18
|
+
Agentgate's MCP servers also work in Desktop's Code tab. See [Using Agentgate with Claude Desktop](docs/user/claude-desktop.md).
|
|
19
19
|
|
|
20
20
|
## Install
|
|
21
21
|
|
|
@@ -66,7 +66,7 @@ agentgate service install # also runs `loginctl enable-linger` so it s
|
|
|
66
66
|
|
|
67
67
|
The server now has every account, MCP instance and repo mapping, and takes over token refreshes.
|
|
68
68
|
|
|
69
|
-
**The relay invite never expires and is a master key.** Anyone who has it can read every account and MCP login, so share it privately. If it leaks, run `agentgate relay rotate` and have every relay machine join again with the new command. Removing a relay machine (`agentgate unpair <node>` or **Remove** in the app) rotates the same way. A rotation can't revoke Tailscale links, so also unpair the removed machine on every machine you keep. By default it uses the hosted relay at `https://agentgate-relay.hanskristoffer.dk`. To use your own instead, deploy `apps/relay` to your Cloudflare account (see [
|
|
69
|
+
**The relay invite never expires and is a master key.** Anyone who has it can read every account and MCP login, so share it privately. If it leaks, run `agentgate relay rotate` and have every relay machine join again with the new command. Removing a relay machine (`agentgate unpair <node>` or **Remove** in the app) rotates the same way. A rotation can't revoke Tailscale links, so also unpair the removed machine on every machine you keep. By default it uses the hosted relay at `https://agentgate-relay.hanskristoffer.dk`. To use your own instead, deploy `apps/relay` to your Cloudflare account (see [the relay](docs/operations/relay.md#deploying-and-self-hosting)) and pass `--relay-url`, or set `AGENTGATE_RELAY_URL`. `agentgate relay status` shows sync state and errors.
|
|
70
70
|
|
|
71
71
|
To control the server from the native app over Tailscale, open the connection settings at the bottom of the sidebar, enter `http://srv.<tailnet>.ts.net:7878`, and paste the token printed by `agentgate admin-token` on the server. Remote management uses bearer authentication over Tailscale. The relay carries sync only, not remote management.
|
|
72
72
|
|
|
@@ -83,9 +83,9 @@ One instance per provider covers every account; the daemon switches eligible acc
|
|
|
83
83
|
|
|
84
84
|
### Or: your normal Claude login
|
|
85
85
|
|
|
86
|
-
`agentgate setup --primary` adds `ANTHROPIC_BASE_URL` to `~/.claude/settings.json` and the agentgate MCP server to `~/.claude.json`, so the Claude Code you already use (and T3's default Claude instance) goes through agentgate while keeping its own login. Claude Desktop is not affected: it sets its own API address; see [Claude Desktop](docs/claude-desktop.md). For only the MCP servers, use `agentgate setup --mcp`. Model requests use the pool; other requests keep your login, and your login is also the last resort when every pooled account is exhausted. Undo with `agentgate setup --primary off` (the previous base URL is restored, and later settings edits are preserved). It does the same for `~/.codex/config.toml` (or `$CODEX_HOME`): an `agentgate` model provider with `requires_openai_auth = true`, so Codex, the Codex app and T3's default Codex instance send their own ChatGPT login along as the last resort. Only do this with `agentgate service install`, or Claude Code and Codex can't reach their providers while the daemon is down.
|
|
86
|
+
`agentgate setup --primary` adds `ANTHROPIC_BASE_URL` to `~/.claude/settings.json` and the agentgate MCP server to `~/.claude.json`, so the Claude Code you already use (and T3's default Claude instance) goes through agentgate while keeping its own login. Claude Desktop is not affected: it sets its own API address; see [Claude Desktop](docs/user/claude-desktop.md). For only the MCP servers, use `agentgate setup --mcp`. Model requests use the pool; other requests keep your login, and your login is also the last resort when every pooled account is exhausted. Undo with `agentgate setup --primary off` (the previous base URL is restored, and later settings edits are preserved). It does the same for `~/.codex/config.toml` (or `$CODEX_HOME`): an `agentgate` model provider with `requires_openai_auth = true`, so Codex, the Codex app and T3's default Codex instance send their own ChatGPT login along as the last resort. Only do this with `agentgate service install`, or Claude Code and Codex can't reach their providers while the daemon is down.
|
|
87
87
|
|
|
88
|
-
The proxy now provides quota freshness and reset visibility, searchable **Activity** with request attempts and stream outcomes, bounded retries and local cooldowns, routing strategies and optional session affinity, model discovery/aliases/policies, batch verification, and revision-safe configuration previews. See [proxy
|
|
88
|
+
The proxy now provides quota freshness and reset visibility, searchable **Activity** with request attempts and stream outcomes, bounded retries and local cooldowns, routing strategies and optional session affinity, model discovery/aliases/policies, batch verification, and revision-safe configuration previews. See [the proxy guide](docs/user/proxy.md) for controls, CLI examples, defaults, and upgrade requirements. Codex background usage polling is opt-in pending live endpoint validation.
|
|
89
89
|
|
|
90
90
|
## MCP servers per repo
|
|
91
91
|
|
|
@@ -105,11 +105,11 @@ agentgate project set Lullu-ai/lullu posthog=posthog-lullu
|
|
|
105
105
|
agentgate mcp test posthog-lullu
|
|
106
106
|
```
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
A server can have any name, such as "PostHog Lullu"; its slug (`posthog-lullu`) becomes its id and the default tool prefix, and `agentgate mcp label <id> <name>` changes only the name shown in the app. The alias is the tool prefix: in every repo mapped to `posthog-lullu` under the alias `posthog`, the agent sees `posthog__…` tools that reach that repo's PostHog project. The repo is taken from `git remote get-url origin` in the session's working directory (override with `AGENTGATE_PROJECT=owner/repo`). Mapping changes reach running sessions without a restart.
|
|
109
109
|
|
|
110
110
|
## Skills per repo
|
|
111
111
|
|
|
112
|
-
Skills are installed once and synced to every machine like MCP servers; you choose which repos use each one. In the native app
|
|
112
|
+
Skills are installed once and synced to every machine like MCP servers; you choose which repos use each one. In the native app, **Skills → Add skills** offers each source as a tab: **skills.sh** searches the [skills.sh](https://skills.sh) directory, **Source** uses the pinned `skills@1.7.0` CLI and accepts (`owner/repo`, `owner/repo@skill`, a Git or GitHub URL, a folder), and **Write** writes a SKILL.md by hand. Then pick **Every session** or specific repos.
|
|
113
113
|
|
|
114
114
|
```sh
|
|
115
115
|
agentgate skills find postgres
|
|
@@ -117,22 +117,43 @@ agentgate skills add vercel-labs/agent-skills --skill web-design-guidelines --pr
|
|
|
117
117
|
agentgate skills add ./my-skill --project '*'
|
|
118
118
|
agentgate skills new release-notes --file SKILL.md
|
|
119
119
|
agentgate skills projects web-design-guidelines Lullu-ai/lullu other/repo
|
|
120
|
-
agentgate skills update # refetch every installed skill
|
|
120
|
+
agentgate skills update # refetch every installed skill now (the daemon does it hourly)
|
|
121
121
|
agentgate skills prepare . # wait for checkout links before launching an agent
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
**Synced repo** keeps a public repository's skills in sync instead of copying them once: agentgate installs every skill in its `.claude/skills` and `.agents/skills` folders, asks whether they are for every session or specific repos, and checks for new commits every 10 minutes. New skills in the repository are used where it is connected, and skills removed from it are removed. To stop using one of its skills, unlink it from its projects; disconnecting removes them all.
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
agentgate skills repo add https://github.com/owner/team-skills --project '*'
|
|
128
|
+
agentgate skills repo projects owner/team-skills Lullu-ai/lullu # where its skills are used
|
|
129
|
+
agentgate skills repo ls | sync | rm owner/team-skills
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Fetching needs Node (`npx`) or Bun (`bunx`) on the daemon's machine, and connected repositories need `git`; other machines get the files through sync. Each node writes skills to `~/.config/agentgate/skills/<name>` and only creates symlinks to them:
|
|
125
133
|
|
|
126
134
|
- **Every session**: the Claude and Codex folders `agentgate setup` writes (`~/.config/agentgate/{claude,codex}/skills`), plus `~/.claude/skills` and `~/.codex/skills` while `setup --primary` is on.
|
|
127
135
|
- **One repo**: `.claude/skills/<name>` in the main checkout (Claude Code falls back to it from worktrees) and `.agents/skills/<name>` in the main checkout and every worktree (Codex). The entries are added to `.git/info/exclude`.
|
|
128
136
|
|
|
129
|
-
Claude Code and Codex read skills before a session's MCP servers start, so repo links must exist ahead of time. A repo is known on a machine after its first agentgate session there, or after **
|
|
137
|
+
Claude Code and Codex read skills before a session's MCP servers start, so repo links must exist ahead of time. A repo is known on a machine after its first agentgate session there, or after a scan under Projects → **Add project** → **Find on this machine**; from then on its worktrees are watched and new ones are linked with bounded retries and independent periodic repair. Register or scan a checkout before launching its first session; watcher timing cannot guarantee first-session readiness. Changes apply to new sessions. Agentgate never replaces a folder it did not create: a name clash is listed under Skills → Skills need attention. Skills run with your agent's permissions and are copied to every paired machine, so install only sources you trust; the app shows the skills.sh audit before installing.
|
|
130
138
|
|
|
131
|
-
The app installs the exact files shown in a preview. Previews expire after ten minutes or cache eviction; preview again to continue. Editing checks the saved revision and reports a conflict if another client or peer changed the skill. Skills → **Skills need attention** shows failed local materialization/link work, which the daemon retries automatically.
|
|
139
|
+
The app installs the exact files shown in a preview. Previews expire after ten minutes or cache eviction; preview again to continue. Skills installed from skills.sh, a source or a connected repository follow it and can't be edited; only hand-written skills can. Editing checks the saved revision and reports a conflict if another client or peer changed the skill. Skills → **Skills need attention** shows failed local materialization/link work, which the daemon retries automatically.
|
|
132
140
|
|
|
133
141
|
Bundles must contain a nonempty root `SKILL.md`, with unique portable paths and regular files. Symlinks and special files cannot be synced. Each bundle is limited to 3 MiB of base64 data (about 2.25 MiB of files) and 5,000 files; imports are limited to 100 skills and 24 MiB per pack. Large sources can be imported with `--skill` one skill at a time.
|
|
134
142
|
|
|
135
|
-
Repository-owned skills are mirrored only when you opt in
|
|
143
|
+
Repository-owned skills are mirrored only when you opt in with **Share repo skills between Claude and Codex** in a project's ⋯ menu in Projects. Mirroring creates relative links that can be reviewed and committed. Stopping mirroring stops future maintenance and leaves existing links in place; repository-owned links are preserved.
|
|
144
|
+
|
|
145
|
+
## Your MCP servers and skills in Grok
|
|
146
|
+
|
|
147
|
+
Assistants such as Grok only accept an MCP server URL and an `Authorization` header. A **virtual project** gives them one: in Projects, choose **New virtual project**, pick its MCP servers and skills, then **Connect to Grok** and copy the URL and `Authorization` value into Grok. One of your machines (an always-on server by default) answers through the relay. Grok also gets `skills__list` and `skills__read` tools, so it can find a skill and follow its SKILL.md.
|
|
148
|
+
|
|
149
|
+
```sh
|
|
150
|
+
agentgate project set @grok linear=linear posthog=posthog-lullu
|
|
151
|
+
agentgate skills projects release-notes @grok
|
|
152
|
+
agentgate remote enable @grok # prints the URL and Authorization header
|
|
153
|
+
agentgate remote secret @grok # new secret, same URL
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Unlike sync, this traffic is readable by the relay (your logins stay on your machines), and anyone with the URL and secret can use those tools. See [remote MCP endpoints](docs/operations/relay.md#remote-mcp-endpoints).
|
|
136
157
|
|
|
137
158
|
## Commands
|
|
138
159
|
|
|
@@ -148,14 +169,16 @@ Run `agentgate --help`. Useful ones: `status`, `accounts`, `accounts exhaust <id
|
|
|
148
169
|
|
|
149
170
|
```sh
|
|
150
171
|
bun install
|
|
151
|
-
bun run
|
|
172
|
+
bun run seed-dev-store # optional: realistic data from your install, without its logins
|
|
173
|
+
bun run cli -- init # or an empty node
|
|
152
174
|
bun start # foreground daemon, no app required
|
|
153
|
-
bun dev
|
|
175
|
+
bun run dev # daemon plus the Tauri app with Vite hot reload (Rust + Xcode tools required)
|
|
154
176
|
bun test
|
|
155
177
|
bun run typecheck
|
|
156
|
-
AGENTGATE_HOME=/tmp/ag AGENTGATE_PORT=7979 bun run cli -- init # a throwaway node
|
|
157
178
|
```
|
|
158
179
|
|
|
180
|
+
Running from a git checkout keeps its state in the checkout's gitignored `.agentgate` on a port derived from the checkout path, so it never touches your installed agentgate. It also refuses to install the service or change `~/.claude`, `~/.codex` and Claude Desktop. Set `AGENTGATE_HOME` and `AGENTGATE_PORT` to choose a state folder and port yourself. Contributors and coding agents should read [AGENTS.md](AGENTS.md).
|
|
181
|
+
|
|
159
182
|
## Monorepo
|
|
160
183
|
|
|
161
184
|
| Workspace | Role |
|
|
@@ -176,7 +199,7 @@ The app uses Tauri commands to send HTTP requests from Rust. It has no browser H
|
|
|
176
199
|
|
|
177
200
|
## Reliability
|
|
178
201
|
|
|
179
|
-
See [
|
|
202
|
+
See [running agentgate](docs/operations/running.md) for backup, upgrade, and live distribution checks. Account and MCP OAuth refreshes share holder coordination and a local cross-process lease. Running MCP shims reconnect after daemon restarts and update per-session mappings; tool calls with uncertain outcomes are never automatically replayed.
|
|
180
203
|
|
|
181
204
|
Nodes use **sync protocol 5** (update every paired machine together) and the app checks **management API version 3** when connecting. Deletion history is retained so offline machines cannot resurrect old configuration.
|
|
182
205
|
|
|
@@ -224,4 +247,4 @@ The release also carries a signed app archive and `latest.json`. Installed apps
|
|
|
224
247
|
|
|
225
248
|
The bundled daemon is signed with the app's `Entitlements.plist`. It holds only `allow-jit`: under the hardened runtime, a compiled Bun binary without it falls back to the JavaScript interpreter and runs about 50 times slower. The standalone CLI binaries are not signed.
|
|
226
249
|
|
|
227
|
-
See [release and recovery instructions](docs/releasing.md).
|
|
250
|
+
See [release and recovery instructions](docs/operations/releasing.md).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hanskristoffer/agentpool",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
"agentgate": "bin/agentpool.js"
|
|
23
23
|
},
|
|
24
24
|
"optionalDependencies": {
|
|
25
|
-
"agentpool-darwin-arm64": "0.
|
|
26
|
-
"agentpool-darwin-x64": "0.
|
|
27
|
-
"agentpool-linux-x64": "0.
|
|
28
|
-
"agentpool-linux-arm64": "0.
|
|
25
|
+
"agentpool-darwin-arm64": "0.10.0",
|
|
26
|
+
"agentpool-darwin-x64": "0.10.0",
|
|
27
|
+
"agentpool-linux-x64": "0.10.0",
|
|
28
|
+
"agentpool-linux-arm64": "0.10.0"
|
|
29
29
|
}
|
|
30
30
|
}
|