@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.
Files changed (2) hide show
  1. package/README.md +40 -17
  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
 
@@ -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
- The name 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.
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 (Skills), **Browse skills.sh** searches the [skills.sh](https://skills.sh) directory, **Add from source** uses the pinned `skills@1.7.0` CLI and accepts (`owner/repo`, `owner/repo@skill`, a Git or GitHub URL, a folder), and **New skill** writes a SKILL.md by hand. Then pick **Every session** or specific repos.
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 from its source
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
- 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
+ **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 **Scan folder** in Projects; 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 → Skipped links. 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.
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 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.
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 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.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.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.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
  }