@hanskristoffer/agentpool 0.8.0 → 0.9.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.
Files changed (2) hide show
  1. package/README.md +34 -11
  2. 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 [operations and distribution checks](docs/operations.md).
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 [operations](docs/operations.md#relay)) and pass `--relay-url`, or set `AGENTGATE_RELAY_URL`. `agentgate relay status` shows sync state and errors.
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 operations](docs/proxy-operations.md) for controls, CLI examples, defaults, and upgrade requirements. Codex background usage polling is opt-in pending live endpoint validation.
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
 
@@ -121,7 +121,15 @@ agentgate skills update # refetch every installed skill from
121
121
  agentgate skills prepare . # wait for checkout links before launching an agent
122
122
  ```
123
123
 
124
- Fetching needs Node (`npx`) or Bun (`bunx`) on the daemon's machine; other machines get the files through sync. Each node writes skills to `~/.config/agentgate/skills/<name>` and only creates symlinks to them:
124
+ **Connect GitHub 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`.
@@ -134,6 +142,19 @@ Bundles must contain a nonempty root `SKILL.md`, with unique portable paths and
134
142
 
135
143
  Repository-owned skills are mirrored only when you opt in under Projects → **Repository skill mirroring**. 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.
136
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).
157
+
137
158
  ## Commands
138
159
 
139
160
  Run `agentgate --help`. Useful ones: `status`, `accounts`, `accounts exhaust <id> [min]` (pretend an account hit its limit, for testing), `nodes`, `unpair <node>`, `relay status|reconcile|rotate|leave`, `export [--no-secrets]`, `import-backup <file>`, `service logs`.
@@ -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 cli -- init # initialize the daemon
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 # Tauri app with Vite hot reload (Rust + Xcode tools required)
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 [operations](docs/operations.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.
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.8.0",
3
+ "version": "0.9.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.8.0",
26
- "agentpool-darwin-x64": "0.8.0",
27
- "agentpool-linux-x64": "0.8.0",
28
- "agentpool-linux-arm64": "0.8.0"
25
+ "agentpool-darwin-arm64": "0.9.0",
26
+ "agentpool-darwin-x64": "0.9.0",
27
+ "agentpool-linux-x64": "0.9.0",
28
+ "agentpool-linux-arm64": "0.9.0"
29
29
  }
30
30
  }