agent-relay 1.0.21 → 1.1.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 (283) hide show
  1. package/dist/bridge/shadow-cli.d.ts +17 -0
  2. package/dist/bridge/shadow-cli.d.ts.map +1 -0
  3. package/dist/bridge/shadow-cli.js +75 -0
  4. package/dist/bridge/shadow-cli.js.map +1 -0
  5. package/dist/bridge/shadow-config.d.ts +87 -0
  6. package/dist/bridge/shadow-config.d.ts.map +1 -0
  7. package/dist/bridge/shadow-config.js +134 -0
  8. package/dist/bridge/shadow-config.js.map +1 -0
  9. package/dist/bridge/spawner.d.ts +15 -1
  10. package/dist/bridge/spawner.d.ts.map +1 -1
  11. package/dist/bridge/spawner.js +164 -4
  12. package/dist/bridge/spawner.js.map +1 -1
  13. package/dist/bridge/types.d.ts +55 -0
  14. package/dist/bridge/types.d.ts.map +1 -1
  15. package/dist/cli/index.js +796 -11
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cloud/api/auth.d.ts +19 -0
  18. package/dist/cloud/api/auth.d.ts.map +1 -0
  19. package/dist/cloud/api/auth.js +216 -0
  20. package/dist/cloud/api/auth.js.map +1 -0
  21. package/dist/cloud/api/billing.d.ts +17 -0
  22. package/dist/cloud/api/billing.d.ts.map +1 -0
  23. package/dist/cloud/api/billing.js +353 -0
  24. package/dist/cloud/api/billing.js.map +1 -0
  25. package/dist/cloud/api/coordinators.d.ts +8 -0
  26. package/dist/cloud/api/coordinators.d.ts.map +1 -0
  27. package/dist/cloud/api/coordinators.js +347 -0
  28. package/dist/cloud/api/coordinators.js.map +1 -0
  29. package/dist/cloud/api/daemons.d.ts +12 -0
  30. package/dist/cloud/api/daemons.d.ts.map +1 -0
  31. package/dist/cloud/api/daemons.js +320 -0
  32. package/dist/cloud/api/daemons.js.map +1 -0
  33. package/dist/cloud/api/middleware/planLimits.d.ts +36 -0
  34. package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -0
  35. package/dist/cloud/api/middleware/planLimits.js +164 -0
  36. package/dist/cloud/api/middleware/planLimits.js.map +1 -0
  37. package/dist/cloud/api/onboarding.d.ts +8 -0
  38. package/dist/cloud/api/onboarding.d.ts.map +1 -0
  39. package/dist/cloud/api/onboarding.js +407 -0
  40. package/dist/cloud/api/onboarding.js.map +1 -0
  41. package/dist/cloud/api/providers.d.ts +7 -0
  42. package/dist/cloud/api/providers.d.ts.map +1 -0
  43. package/dist/cloud/api/providers.js +435 -0
  44. package/dist/cloud/api/providers.js.map +1 -0
  45. package/dist/cloud/api/repos.d.ts +7 -0
  46. package/dist/cloud/api/repos.d.ts.map +1 -0
  47. package/dist/cloud/api/repos.js +314 -0
  48. package/dist/cloud/api/repos.js.map +1 -0
  49. package/dist/cloud/api/teams.d.ts +7 -0
  50. package/dist/cloud/api/teams.d.ts.map +1 -0
  51. package/dist/cloud/api/teams.js +279 -0
  52. package/dist/cloud/api/teams.js.map +1 -0
  53. package/dist/cloud/api/usage.d.ts +7 -0
  54. package/dist/cloud/api/usage.d.ts.map +1 -0
  55. package/dist/cloud/api/usage.js +98 -0
  56. package/dist/cloud/api/usage.js.map +1 -0
  57. package/dist/cloud/api/workspaces.d.ts +7 -0
  58. package/dist/cloud/api/workspaces.d.ts.map +1 -0
  59. package/dist/cloud/api/workspaces.js +510 -0
  60. package/dist/cloud/api/workspaces.js.map +1 -0
  61. package/dist/cloud/billing/index.d.ts +9 -0
  62. package/dist/cloud/billing/index.d.ts.map +1 -0
  63. package/dist/cloud/billing/index.js +9 -0
  64. package/dist/cloud/billing/index.js.map +1 -0
  65. package/dist/cloud/billing/plans.d.ts +39 -0
  66. package/dist/cloud/billing/plans.d.ts.map +1 -0
  67. package/dist/cloud/billing/plans.js +232 -0
  68. package/dist/cloud/billing/plans.js.map +1 -0
  69. package/dist/cloud/billing/service.d.ts +80 -0
  70. package/dist/cloud/billing/service.d.ts.map +1 -0
  71. package/dist/cloud/billing/service.js +388 -0
  72. package/dist/cloud/billing/service.js.map +1 -0
  73. package/dist/cloud/billing/types.d.ts +135 -0
  74. package/dist/cloud/billing/types.d.ts.map +1 -0
  75. package/dist/cloud/billing/types.js +7 -0
  76. package/dist/cloud/billing/types.js.map +1 -0
  77. package/dist/cloud/config.d.ts +59 -0
  78. package/dist/cloud/config.d.ts.map +1 -0
  79. package/dist/cloud/config.js +83 -0
  80. package/dist/cloud/config.js.map +1 -0
  81. package/dist/cloud/db/drizzle.d.ts +132 -0
  82. package/dist/cloud/db/drizzle.d.ts.map +1 -0
  83. package/dist/cloud/db/drizzle.js +613 -0
  84. package/dist/cloud/db/drizzle.js.map +1 -0
  85. package/dist/cloud/db/index.d.ts +30 -0
  86. package/dist/cloud/db/index.d.ts.map +1 -0
  87. package/dist/cloud/db/index.js +44 -0
  88. package/dist/cloud/db/index.js.map +1 -0
  89. package/dist/cloud/db/schema.d.ts +1792 -0
  90. package/dist/cloud/db/schema.d.ts.map +1 -0
  91. package/dist/cloud/db/schema.js +234 -0
  92. package/dist/cloud/db/schema.js.map +1 -0
  93. package/dist/cloud/index.d.ts +11 -0
  94. package/dist/cloud/index.d.ts.map +1 -0
  95. package/dist/cloud/index.js +37 -0
  96. package/dist/cloud/index.js.map +1 -0
  97. package/dist/cloud/provisioner/index.d.ts +51 -0
  98. package/dist/cloud/provisioner/index.d.ts.map +1 -0
  99. package/dist/cloud/provisioner/index.js +676 -0
  100. package/dist/cloud/provisioner/index.js.map +1 -0
  101. package/dist/cloud/server.d.ts +16 -0
  102. package/dist/cloud/server.d.ts.map +1 -0
  103. package/dist/cloud/server.js +190 -0
  104. package/dist/cloud/server.js.map +1 -0
  105. package/dist/cloud/services/coordinator.d.ts +62 -0
  106. package/dist/cloud/services/coordinator.d.ts.map +1 -0
  107. package/dist/cloud/services/coordinator.js +389 -0
  108. package/dist/cloud/services/coordinator.js.map +1 -0
  109. package/dist/cloud/services/planLimits.d.ts +110 -0
  110. package/dist/cloud/services/planLimits.d.ts.map +1 -0
  111. package/dist/cloud/services/planLimits.js +254 -0
  112. package/dist/cloud/services/planLimits.js.map +1 -0
  113. package/dist/cloud/vault/index.d.ts +76 -0
  114. package/dist/cloud/vault/index.d.ts.map +1 -0
  115. package/dist/cloud/vault/index.js +219 -0
  116. package/dist/cloud/vault/index.js.map +1 -0
  117. package/dist/daemon/agent-manager.d.ts +87 -0
  118. package/dist/daemon/agent-manager.d.ts.map +1 -0
  119. package/dist/daemon/agent-manager.js +412 -0
  120. package/dist/daemon/agent-manager.js.map +1 -0
  121. package/dist/daemon/agent-registry.d.ts +2 -0
  122. package/dist/daemon/agent-registry.d.ts.map +1 -1
  123. package/dist/daemon/agent-registry.js +3 -0
  124. package/dist/daemon/agent-registry.js.map +1 -1
  125. package/dist/daemon/api.d.ts +69 -0
  126. package/dist/daemon/api.d.ts.map +1 -0
  127. package/dist/daemon/api.js +425 -0
  128. package/dist/daemon/api.js.map +1 -0
  129. package/dist/daemon/cloud-sync.d.ts +101 -0
  130. package/dist/daemon/cloud-sync.d.ts.map +1 -0
  131. package/dist/daemon/cloud-sync.js +261 -0
  132. package/dist/daemon/cloud-sync.js.map +1 -0
  133. package/dist/daemon/index.d.ts +4 -0
  134. package/dist/daemon/index.d.ts.map +1 -1
  135. package/dist/daemon/index.js +6 -0
  136. package/dist/daemon/index.js.map +1 -1
  137. package/dist/daemon/orchestrator.d.ts +155 -0
  138. package/dist/daemon/orchestrator.d.ts.map +1 -0
  139. package/dist/daemon/orchestrator.js +736 -0
  140. package/dist/daemon/orchestrator.js.map +1 -0
  141. package/dist/daemon/router.d.ts +24 -0
  142. package/dist/daemon/router.d.ts.map +1 -1
  143. package/dist/daemon/router.js +71 -1
  144. package/dist/daemon/router.js.map +1 -1
  145. package/dist/daemon/server.d.ts +37 -0
  146. package/dist/daemon/server.d.ts.map +1 -1
  147. package/dist/daemon/server.js +191 -16
  148. package/dist/daemon/server.js.map +1 -1
  149. package/dist/daemon/types.d.ts +127 -0
  150. package/dist/daemon/types.d.ts.map +1 -0
  151. package/dist/daemon/types.js +6 -0
  152. package/dist/daemon/types.js.map +1 -0
  153. package/dist/daemon/workspace-manager.d.ts +75 -0
  154. package/dist/daemon/workspace-manager.d.ts.map +1 -0
  155. package/dist/daemon/workspace-manager.js +289 -0
  156. package/dist/daemon/workspace-manager.js.map +1 -0
  157. package/dist/dashboard/out/404.html +1 -1
  158. package/dist/dashboard/out/_next/static/chunks/693-7b3301d8f6bc5014.js +1 -0
  159. package/dist/dashboard/out/_next/static/chunks/713-f78477eb185f1f4d.js +1 -0
  160. package/dist/dashboard/out/_next/static/chunks/766-e53e1cfe39b0b5b5.js +1 -0
  161. package/dist/dashboard/out/_next/static/chunks/900-037c64bfd797fb2a.js +1 -0
  162. package/dist/dashboard/out/_next/static/chunks/app/app/page-e3d9e1f4466b9bae.js +1 -0
  163. package/dist/dashboard/out/_next/static/chunks/app/history/page-b6edd4dde8d08194.js +1 -0
  164. package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +1 -0
  165. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-e68825a81db67ba1.js +1 -0
  166. package/dist/dashboard/out/_next/static/chunks/app/page-cc108bf68c8a657f.js +1 -0
  167. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-d80e03a5297f95b6.js +1 -0
  168. package/dist/dashboard/out/_next/static/chunks/main-app-5d692157a8eb1fd9.js +1 -0
  169. package/dist/dashboard/out/_next/static/chunks/{main-e0a1f53fe0617a63.js → main-c2f423b9c9f4591b.js} +1 -1
  170. package/dist/dashboard/out/_next/static/chunks/{webpack-c81f7fd28659d64f.js → webpack-a5acc2831d094776.js} +1 -1
  171. package/dist/dashboard/out/_next/static/css/79b80143647a07d7.css +1 -0
  172. package/dist/dashboard/out/_next/static/css/8cf277370ad48cfe.css +1 -0
  173. package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
  174. package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
  175. package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
  176. package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
  177. package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
  178. package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +45 -0
  179. package/dist/dashboard/out/alt-logos/logo.svg +38 -0
  180. package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
  181. package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
  182. package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
  183. package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
  184. package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
  185. package/dist/dashboard/out/alt-logos/monogram-logo.svg +38 -0
  186. package/dist/dashboard/out/app.html +14 -0
  187. package/dist/dashboard/out/app.txt +7 -0
  188. package/dist/dashboard/out/history.html +1 -0
  189. package/dist/dashboard/out/history.txt +7 -0
  190. package/dist/dashboard/out/index.html +1 -1
  191. package/dist/dashboard/out/index.txt +2 -2
  192. package/dist/dashboard/out/metrics.html +1 -515
  193. package/dist/dashboard/out/metrics.txt +2 -2
  194. package/dist/dashboard/out/pricing.html +13 -0
  195. package/dist/dashboard/out/pricing.txt +7 -0
  196. package/dist/dashboard-server/metrics.d.ts.map +1 -1
  197. package/dist/dashboard-server/metrics.js +3 -2
  198. package/dist/dashboard-server/metrics.js.map +1 -1
  199. package/dist/dashboard-server/server.d.ts.map +1 -1
  200. package/dist/dashboard-server/server.js +1279 -56
  201. package/dist/dashboard-server/server.js.map +1 -1
  202. package/dist/protocol/types.d.ts +10 -1
  203. package/dist/protocol/types.d.ts.map +1 -1
  204. package/dist/resiliency/context-persistence.d.ts +140 -0
  205. package/dist/resiliency/context-persistence.d.ts.map +1 -0
  206. package/dist/resiliency/context-persistence.js +397 -0
  207. package/dist/resiliency/context-persistence.js.map +1 -0
  208. package/dist/resiliency/health-monitor.d.ts +97 -0
  209. package/dist/resiliency/health-monitor.d.ts.map +1 -0
  210. package/dist/resiliency/health-monitor.js +291 -0
  211. package/dist/resiliency/health-monitor.js.map +1 -0
  212. package/dist/resiliency/index.d.ts +63 -0
  213. package/dist/resiliency/index.d.ts.map +1 -0
  214. package/dist/resiliency/index.js +63 -0
  215. package/dist/resiliency/index.js.map +1 -0
  216. package/dist/resiliency/logger.d.ts +114 -0
  217. package/dist/resiliency/logger.d.ts.map +1 -0
  218. package/dist/resiliency/logger.js +250 -0
  219. package/dist/resiliency/logger.js.map +1 -0
  220. package/dist/resiliency/metrics.d.ts +115 -0
  221. package/dist/resiliency/metrics.d.ts.map +1 -0
  222. package/dist/resiliency/metrics.js +239 -0
  223. package/dist/resiliency/metrics.js.map +1 -0
  224. package/dist/resiliency/provider-context.d.ts +100 -0
  225. package/dist/resiliency/provider-context.d.ts.map +1 -0
  226. package/dist/resiliency/provider-context.js +360 -0
  227. package/dist/resiliency/provider-context.js.map +1 -0
  228. package/dist/resiliency/supervisor.d.ts +109 -0
  229. package/dist/resiliency/supervisor.d.ts.map +1 -0
  230. package/dist/resiliency/supervisor.js +337 -0
  231. package/dist/resiliency/supervisor.js.map +1 -0
  232. package/dist/storage/adapter.d.ts +2 -0
  233. package/dist/storage/adapter.d.ts.map +1 -1
  234. package/dist/storage/adapter.js +12 -2
  235. package/dist/storage/adapter.js.map +1 -1
  236. package/dist/storage/sqlite-adapter.d.ts.map +1 -1
  237. package/dist/storage/sqlite-adapter.js +18 -14
  238. package/dist/storage/sqlite-adapter.js.map +1 -1
  239. package/dist/utils/index.d.ts +1 -0
  240. package/dist/utils/index.d.ts.map +1 -1
  241. package/dist/utils/index.js +1 -0
  242. package/dist/utils/index.js.map +1 -1
  243. package/dist/utils/logger.d.ts +40 -0
  244. package/dist/utils/logger.d.ts.map +1 -0
  245. package/dist/utils/logger.js +84 -0
  246. package/dist/utils/logger.js.map +1 -0
  247. package/dist/wrapper/client.d.ts +16 -1
  248. package/dist/wrapper/client.d.ts.map +1 -1
  249. package/dist/wrapper/client.js +32 -1
  250. package/dist/wrapper/client.js.map +1 -1
  251. package/dist/wrapper/parser.d.ts +3 -0
  252. package/dist/wrapper/parser.d.ts.map +1 -1
  253. package/dist/wrapper/parser.js +121 -18
  254. package/dist/wrapper/parser.js.map +1 -1
  255. package/dist/wrapper/pty-wrapper.d.ts +28 -1
  256. package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
  257. package/dist/wrapper/pty-wrapper.js +166 -30
  258. package/dist/wrapper/pty-wrapper.js.map +1 -1
  259. package/dist/wrapper/tmux-wrapper.d.ts +5 -0
  260. package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
  261. package/dist/wrapper/tmux-wrapper.js +58 -18
  262. package/dist/wrapper/tmux-wrapper.js.map +1 -1
  263. package/docs/CLOUD-ARCHITECTURE.md +652 -0
  264. package/docs/CLOUD-ONBOARDING-DESIGN.md +1983 -0
  265. package/docs/TESTING_PRESENCE_FEATURES.md +327 -0
  266. package/docs/agent-relay-snippet.md +107 -4
  267. package/docs/guides/CLOUD.md +236 -0
  268. package/docs/guides/LOCAL.md +535 -0
  269. package/docs/guides/SELF-HOSTED.md +494 -0
  270. package/docs/proposals/shadow-as-subagent.md +765 -0
  271. package/docs/proposals/slack-bot-integration.md +1457 -0
  272. package/package.json +33 -4
  273. package/dist/dashboard/out/_next/static/chunks/app/layout-c9d8c5d95e48c6bf.js +0 -1
  274. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-8aa9936bc6c771ab.js +0 -1
  275. package/dist/dashboard/out/_next/static/chunks/app/page-49055e5d2b5e34ec.js +0 -1
  276. package/dist/dashboard/out/_next/static/chunks/main-app-bae2e535de00de50.js +0 -1
  277. package/dist/dashboard/out/_next/static/css/50ed6996e3df7bdd.css +0 -1
  278. /package/dist/dashboard/out/_next/static/{gZXwjIKGDKJ0hiTH-HMeJ → 6HHWb2ZmnJ4OSm0zUP7h4}/_buildManifest.js +0 -0
  279. /package/dist/dashboard/out/_next/static/{gZXwjIKGDKJ0hiTH-HMeJ → 6HHWb2ZmnJ4OSm0zUP7h4}/_ssgManifest.js +0 -0
  280. /package/dist/dashboard/out/_next/static/chunks/{117-3bef7b19f3e60751.js → 117-b2cd8d6485aacf2b.js} +0 -0
  281. /package/dist/dashboard/out/_next/static/chunks/{648-6cf686106c891ad3.js → 648-8f3f26864ce515e5.js} +0 -0
  282. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-8ff6572bc7c9bc61.js → page-0b990dbb71d72a98.js} +0 -0
  283. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-26bd8d656b496dba.js → fd9d1056-bf46c09eb57e019c.js} +0 -0
@@ -0,0 +1,494 @@
1
+ # Self-Hosted Deployment
2
+
3
+ Run Agent Relay on your own infrastructure while using Agent Relay Cloud for authentication and dashboard.
4
+
5
+ ## Overview
6
+
7
+ Self-hosted mode gives you:
8
+ - **Your servers, your data** - Agents run on your infrastructure
9
+ - **Cloud authentication** - OAuth flows handled by Agent Relay Cloud
10
+ - **Cloud dashboard** - Logs sync to your cloud dashboard
11
+ - **Full control** - Custom security, networking, GPU access
12
+
13
+ ```
14
+ ┌────────────────────────────────────────────────────────────────┐
15
+ │ AGENT RELAY CLOUD │
16
+ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
17
+ │ │ Provider │ │ Dashboard │ │ Team │ │
18
+ │ │ Auth/Vault │ │ & Logs │ │ Management │ │
19
+ │ └─────┬──────┘ └─────▲──────┘ └────────────┘ │
20
+ └─────────┼───────────────┼──────────────────────────────────────┘
21
+ │ Credentials │ Sync
22
+ ▼ │
23
+ ┌─────────────────────────┴──────────────────────────────────────┐
24
+ │ YOUR INFRASTRUCTURE │
25
+ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
26
+ │ │agent-relay │ │ Agents │ │ Repos │ │
27
+ │ │ daemon │ │ (claude, │ │ (local) │ │
28
+ │ │ │ │ codex) │ │ │ │
29
+ │ └────────────┘ └────────────┘ └────────────┘ │
30
+ └────────────────────────────────────────────────────────────────┘
31
+ ```
32
+
33
+ ## When to Use Self-Hosted
34
+
35
+ Choose self-hosted if you need:
36
+
37
+ - Compute in specific regions/clouds
38
+ - Custom security requirements (VPC, firewall rules)
39
+ - GPU workloads on specialized hardware
40
+ - Cost optimization for high-volume usage
41
+ - Data locality compliance
42
+
43
+ ## Requirements
44
+
45
+ - **Node.js** 20+
46
+ - **tmux** installed
47
+ - **Build tools** (for node-pty compilation)
48
+ - Network access to `agent-relay.com` for auth
49
+
50
+ ### Linux/Ubuntu
51
+
52
+ ```bash
53
+ sudo apt-get update
54
+ sudo apt-get install -y build-essential tmux
55
+ ```
56
+
57
+ ### macOS
58
+
59
+ ```bash
60
+ brew install tmux
61
+ xcode-select --install # For build tools
62
+ ```
63
+
64
+ ## Installation
65
+
66
+ ### 1. Install Agent Relay
67
+
68
+ ```bash
69
+ npm install -g agent-relay
70
+ ```
71
+
72
+ ### 2. Connect to Cloud
73
+
74
+ This authenticates you with Agent Relay Cloud and syncs credentials:
75
+
76
+ ```bash
77
+ agent-relay cloud login
78
+ ```
79
+
80
+ This will:
81
+ 1. Display a URL to open in your browser
82
+ 2. You authenticate with GitHub
83
+ 3. Credentials sync to your server
84
+
85
+ ```
86
+ $ agent-relay cloud login
87
+
88
+ To authenticate, open this URL in your browser:
89
+
90
+ ┌────────────────────────────────────────────────────────────┐
91
+ │ https://agent-relay.com/auth/remote?session=xK9mPq2R │
92
+ └────────────────────────────────────────────────────────────┘
93
+
94
+ ⏳ Waiting for authentication...
95
+ Session expires in 9:45
96
+
97
+ ✅ Authenticated as user@example.com
98
+ ```
99
+
100
+ ### 3. Connect AI Providers
101
+
102
+ Connect each provider you want to use:
103
+
104
+ ```bash
105
+ # Connect Claude
106
+ agent-relay cloud connect anthropic
107
+
108
+ # Connect Codex
109
+ agent-relay cloud connect openai
110
+
111
+ # Connect Gemini
112
+ agent-relay cloud connect google
113
+ ```
114
+
115
+ Each command opens a browser for OAuth login. Credentials are encrypted and synced to your server.
116
+
117
+ ### 4. Clone Your Repositories
118
+
119
+ Clone the repos you'll work with:
120
+
121
+ ```bash
122
+ git clone https://github.com/your-org/your-repo.git
123
+ cd your-repo
124
+ ```
125
+
126
+ ### 5. Start the Daemon
127
+
128
+ ```bash
129
+ agent-relay up
130
+ ```
131
+
132
+ Your local dashboard is now available at `http://localhost:3888`.
133
+
134
+ ## Running Agents
135
+
136
+ Once set up, use Agent Relay normally:
137
+
138
+ ```bash
139
+ # Start an agent
140
+ agent-relay -n Alice claude
141
+
142
+ # Start another agent
143
+ agent-relay -n Bob codex
144
+
145
+ # Check status
146
+ agent-relay status
147
+ ```
148
+
149
+ Agents communicate via the local daemon, and logs sync to your cloud dashboard.
150
+
151
+ ## Docker Deployment
152
+
153
+ ### Using the Official Image
154
+
155
+ ```bash
156
+ docker run -d \
157
+ --name agent-relay \
158
+ -p 3888:3888 \
159
+ -v /var/run/docker.sock:/var/run/docker.sock \
160
+ -v ~/.agent-relay:/root/.agent-relay \
161
+ -v ~/repos:/workspace \
162
+ ghcr.io/agentworkforce/agent-relay:latest
163
+ ```
164
+
165
+ ### Docker Compose
166
+
167
+ ```yaml
168
+ version: '3.8'
169
+
170
+ services:
171
+ agent-relay:
172
+ image: ghcr.io/agentworkforce/agent-relay:latest
173
+ ports:
174
+ - "3888:3888"
175
+ volumes:
176
+ - ./repos:/workspace
177
+ - agent-relay-data:/root/.agent-relay
178
+ environment:
179
+ - CLOUD_API_URL=https://api.agent-relay.com
180
+ restart: unless-stopped
181
+
182
+ volumes:
183
+ agent-relay-data:
184
+ ```
185
+
186
+ ### Building Your Own Image
187
+
188
+ ```dockerfile
189
+ FROM node:20-slim
190
+
191
+ # Install dependencies
192
+ RUN apt-get update && apt-get install -y \
193
+ build-essential \
194
+ tmux \
195
+ git \
196
+ && rm -rf /var/lib/apt/lists/*
197
+
198
+ # Install agent-relay
199
+ RUN npm install -g agent-relay
200
+
201
+ # Install AI CLIs
202
+ RUN npm install -g @anthropic/claude-code
203
+
204
+ WORKDIR /workspace
205
+
206
+ # Start daemon
207
+ CMD ["agent-relay", "up", "--host", "0.0.0.0"]
208
+ ```
209
+
210
+ ## Kubernetes Deployment
211
+
212
+ ### Deployment
213
+
214
+ ```yaml
215
+ apiVersion: apps/v1
216
+ kind: Deployment
217
+ metadata:
218
+ name: agent-relay
219
+ spec:
220
+ replicas: 1
221
+ selector:
222
+ matchLabels:
223
+ app: agent-relay
224
+ template:
225
+ metadata:
226
+ labels:
227
+ app: agent-relay
228
+ spec:
229
+ containers:
230
+ - name: agent-relay
231
+ image: ghcr.io/agentworkforce/agent-relay:latest
232
+ ports:
233
+ - containerPort: 3888
234
+ volumeMounts:
235
+ - name: workspace
236
+ mountPath: /workspace
237
+ - name: credentials
238
+ mountPath: /root/.agent-relay
239
+ readOnly: true
240
+ env:
241
+ - name: CLOUD_API_URL
242
+ value: "https://api.agent-relay.com"
243
+ volumes:
244
+ - name: workspace
245
+ persistentVolumeClaim:
246
+ claimName: agent-relay-workspace
247
+ - name: credentials
248
+ secret:
249
+ secretName: agent-relay-credentials
250
+ ```
251
+
252
+ ### Service
253
+
254
+ ```yaml
255
+ apiVersion: v1
256
+ kind: Service
257
+ metadata:
258
+ name: agent-relay
259
+ spec:
260
+ selector:
261
+ app: agent-relay
262
+ ports:
263
+ - port: 3888
264
+ targetPort: 3888
265
+ type: ClusterIP
266
+ ```
267
+
268
+ ### Storing Credentials
269
+
270
+ Create a secret with your synced credentials:
271
+
272
+ ```bash
273
+ # After running `agent-relay cloud login` locally
274
+ kubectl create secret generic agent-relay-credentials \
275
+ --from-file=credentials.json=$HOME/.agent-relay/credentials.json
276
+ ```
277
+
278
+ ## Configuration
279
+
280
+ ### Environment Variables
281
+
282
+ | Variable | Description | Default |
283
+ |----------|-------------|---------|
284
+ | `CLOUD_API_URL` | Agent Relay Cloud API | `https://api.agent-relay.com` |
285
+ | `DASHBOARD_PORT` | Local dashboard port | `3888` |
286
+ | `LOG_LEVEL` | Logging verbosity | `info` |
287
+ | `SYNC_INTERVAL` | Cloud sync interval (ms) | `30000` |
288
+
289
+ ### Config File
290
+
291
+ Create `~/.agent-relay/config.json`:
292
+
293
+ ```json
294
+ {
295
+ "cloud": {
296
+ "apiUrl": "https://api.agent-relay.com",
297
+ "syncInterval": 30000
298
+ },
299
+ "dashboard": {
300
+ "port": 3888,
301
+ "host": "0.0.0.0"
302
+ },
303
+ "logging": {
304
+ "level": "info",
305
+ "file": "/var/log/agent-relay.log"
306
+ }
307
+ }
308
+ ```
309
+
310
+ ## Credential Management
311
+
312
+ ### How Credentials Work
313
+
314
+ 1. You authenticate via `agent-relay cloud connect <provider>`
315
+ 2. OAuth tokens are stored encrypted in Agent Relay Cloud
316
+ 3. Encrypted credentials sync to your server
317
+ 4. Local cache auto-refreshes via cloud
318
+
319
+ ### Manual Credential Sync
320
+
321
+ ```bash
322
+ # Force sync credentials from cloud
323
+ agent-relay cloud sync
324
+
325
+ # Check credential status
326
+ agent-relay cloud credentials
327
+ ```
328
+
329
+ ### Credential Storage Location
330
+
331
+ Credentials are stored in `~/.agent-relay/`:
332
+
333
+ ```
334
+ ~/.agent-relay/
335
+ ├── config.json # Configuration
336
+ ├── credentials.json # Encrypted provider tokens
337
+ └── cache/ # Local message cache
338
+ ```
339
+
340
+ ## Log Syncing
341
+
342
+ Logs from your self-hosted instance sync to your cloud dashboard.
343
+
344
+ ### What Syncs
345
+
346
+ - Agent spawn/stop events
347
+ - Messages between agents
348
+ - Errors and warnings
349
+ - Compute usage metrics
350
+
351
+ ### What Doesn't Sync
352
+
353
+ - File contents
354
+ - Full conversation history
355
+ - Repository data
356
+
357
+ ### Disable Syncing
358
+
359
+ If you need fully offline operation:
360
+
361
+ ```bash
362
+ agent-relay up --no-sync
363
+ ```
364
+
365
+ Note: Without sync, you won't see activity in the cloud dashboard.
366
+
367
+ ## Networking
368
+
369
+ ### Firewall Rules
370
+
371
+ Agent Relay needs outbound access to:
372
+
373
+ | Destination | Port | Purpose |
374
+ |-------------|------|---------|
375
+ | `api.agent-relay.com` | 443 | Cloud API |
376
+ | `api.anthropic.com` | 443 | Claude API |
377
+ | `api.openai.com` | 443 | OpenAI API |
378
+ | `github.com` | 443 | Git operations |
379
+
380
+ ### Behind a Proxy
381
+
382
+ ```bash
383
+ export HTTP_PROXY=http://proxy.example.com:8080
384
+ export HTTPS_PROXY=http://proxy.example.com:8080
385
+ agent-relay up
386
+ ```
387
+
388
+ ### Air-Gapped Environments
389
+
390
+ For fully air-gapped environments, use local AI models:
391
+
392
+ ```bash
393
+ # Start with Ollama
394
+ agent-relay -n Alice ollama
395
+
396
+ # Or LM Studio
397
+ agent-relay -n Bob lmstudio
398
+ ```
399
+
400
+ No cloud connection required for local models.
401
+
402
+ ## Monitoring
403
+
404
+ ### Health Check
405
+
406
+ ```bash
407
+ # Check daemon health
408
+ agent-relay status
409
+
410
+ # Detailed health info
411
+ agent-relay status --verbose
412
+ ```
413
+
414
+ ### Prometheus Metrics
415
+
416
+ Enable metrics endpoint:
417
+
418
+ ```bash
419
+ agent-relay up --metrics-port 9090
420
+ ```
421
+
422
+ Available metrics:
423
+ - `agent_relay_agents_active` - Currently running agents
424
+ - `agent_relay_messages_total` - Total messages processed
425
+ - `agent_relay_spawn_duration_seconds` - Agent spawn latency
426
+
427
+ ### Logging
428
+
429
+ ```bash
430
+ # View daemon logs
431
+ agent-relay logs
432
+
433
+ # Follow logs
434
+ agent-relay logs -f
435
+
436
+ # Export to file
437
+ agent-relay logs > /var/log/agent-relay.log
438
+ ```
439
+
440
+ ## Upgrading
441
+
442
+ ### NPM
443
+
444
+ ```bash
445
+ npm update -g agent-relay
446
+ agent-relay down && agent-relay up
447
+ ```
448
+
449
+ ### Docker
450
+
451
+ ```bash
452
+ docker pull ghcr.io/agentworkforce/agent-relay:latest
453
+ docker-compose down && docker-compose up -d
454
+ ```
455
+
456
+ ## Troubleshooting
457
+
458
+ ### "Cloud connection failed"
459
+
460
+ 1. Check network access to `api.agent-relay.com`
461
+ 2. Verify credentials: `agent-relay cloud credentials`
462
+ 3. Re-authenticate: `agent-relay cloud login`
463
+
464
+ ### "Provider not connected"
465
+
466
+ ```bash
467
+ # Check provider status
468
+ agent-relay cloud credentials
469
+
470
+ # Reconnect provider
471
+ agent-relay cloud connect anthropic
472
+ ```
473
+
474
+ ### Credential Sync Issues
475
+
476
+ ```bash
477
+ # Force credential refresh
478
+ agent-relay cloud sync --force
479
+
480
+ # Check sync status
481
+ agent-relay cloud status
482
+ ```
483
+
484
+ ### Performance Issues
485
+
486
+ - Ensure adequate RAM (4GB+ recommended)
487
+ - Check disk space for repo clones
488
+ - Monitor with `agent-relay status --verbose`
489
+
490
+ ## Support
491
+
492
+ - **Documentation**: [docs.agent-relay.com](https://docs.agent-relay.com)
493
+ - **GitHub Issues**: [github.com/khaliqgant/agent-relay/issues](https://github.com/khaliqgant/agent-relay/issues)
494
+ - **Email**: support@agent-relay.com (Pro+ plans)