milaidy 1.0.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 (253) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +538 -0
  3. package/dist/argv-CfSowvEA.js +63 -0
  4. package/dist/config-B-mboG4v.js +4 -0
  5. package/dist/eliza-CPJjgw-e.js +1491 -0
  6. package/dist/eliza.js +2192 -0
  7. package/dist/entry.js +232 -0
  8. package/dist/index.js +209 -0
  9. package/dist/links-BFKlWqSe.js +15 -0
  10. package/dist/paths-D_yh1DEJ.js +69 -0
  11. package/dist/plugins-cli-B7kSre2c.js +134 -0
  12. package/dist/program-6KwWwKKh.js +510 -0
  13. package/dist/register.agents-CPVmSjMG.js +17 -0
  14. package/dist/register.browser-B2ooXxNx.js +15 -0
  15. package/dist/register.channels-CMYQ6K6Y.js +42 -0
  16. package/dist/register.cron-D91lY1_Y.js +9 -0
  17. package/dist/register.devices-rU5I5L_y.js +13 -0
  18. package/dist/register.gateway-82SLAvw3.js +22 -0
  19. package/dist/register.hooks-B_XTBEkt.js +9 -0
  20. package/dist/register.logs-BgEGcPd8.js +10 -0
  21. package/dist/register.models-BJt9eVgZ.js +26 -0
  22. package/dist/register.nodes-B5xY1s8a.js +9 -0
  23. package/dist/register.skills-SFQqYIhg.js +10 -0
  24. package/dist/register.subclis-uF_AsbWR.js +187 -0
  25. package/dist/run-main-XODklzS-.js +56 -0
  26. package/dist/theme-DBvtuGeq.js +36 -0
  27. package/dist/utils-C1AUpp_V.js +42 -0
  28. package/dist/version-Cpn3yr5D.js +26 -0
  29. package/dist/workspace-Co3Wul2D.js +206 -0
  30. package/dist/workspace-DCA6MNVK.js +350 -0
  31. package/docs/.i18n/README.md +31 -0
  32. package/docs/.i18n/glossary.zh-CN.json +210 -0
  33. package/docs/.i18n/zh-CN.tm.jsonl +1329 -0
  34. package/docs/CNAME +1 -0
  35. package/docs/automation/cron-jobs.md +468 -0
  36. package/docs/automation/cron-vs-heartbeat.md +254 -0
  37. package/docs/automation/gmail-pubsub.md +256 -0
  38. package/docs/automation/poll.md +69 -0
  39. package/docs/automation/webhook.md +163 -0
  40. package/docs/bedrock.md +176 -0
  41. package/docs/brave-search.md +41 -0
  42. package/docs/broadcast-groups.md +442 -0
  43. package/docs/cli/acp.md +170 -0
  44. package/docs/cli/agent.md +24 -0
  45. package/docs/cli/agents.md +75 -0
  46. package/docs/cli/approvals.md +50 -0
  47. package/docs/cli/browser.md +107 -0
  48. package/docs/cli/channels.md +79 -0
  49. package/docs/cli/config.md +50 -0
  50. package/docs/cli/configure.md +33 -0
  51. package/docs/cli/cron.md +42 -0
  52. package/docs/cli/dashboard.md +16 -0
  53. package/docs/cli/devices.md +67 -0
  54. package/docs/cli/directory.md +63 -0
  55. package/docs/cli/dns.md +23 -0
  56. package/docs/cli/docs.md +15 -0
  57. package/docs/cli/doctor.md +41 -0
  58. package/docs/cli/gateway.md +199 -0
  59. package/docs/cli/health.md +21 -0
  60. package/docs/cli/hooks.md +291 -0
  61. package/docs/cli/index.md +1029 -0
  62. package/docs/cli/logs.md +24 -0
  63. package/docs/cli/memory.md +45 -0
  64. package/docs/cli/message.md +239 -0
  65. package/docs/cli/models.md +79 -0
  66. package/docs/cli/node.md +112 -0
  67. package/docs/cli/nodes.md +73 -0
  68. package/docs/cli/onboard.md +29 -0
  69. package/docs/cli/pairing.md +21 -0
  70. package/docs/cli/plugins.md +62 -0
  71. package/docs/cli/reset.md +17 -0
  72. package/docs/cli/sandbox.md +152 -0
  73. package/docs/cli/security.md +26 -0
  74. package/docs/cli/sessions.md +16 -0
  75. package/docs/cli/setup.md +29 -0
  76. package/docs/cli/skills.md +26 -0
  77. package/docs/cli/status.md +26 -0
  78. package/docs/cli/system.md +60 -0
  79. package/docs/cli/tui.md +23 -0
  80. package/docs/cli/uninstall.md +17 -0
  81. package/docs/cli/update.md +98 -0
  82. package/docs/cli/voicecall.md +34 -0
  83. package/docs/cli/webhooks.md +25 -0
  84. package/docs/concepts/agent-loop.md +146 -0
  85. package/docs/concepts/agent-workspace.md +229 -0
  86. package/docs/concepts/agent.md +122 -0
  87. package/docs/concepts/architecture.md +129 -0
  88. package/docs/concepts/channel-routing.md +114 -0
  89. package/docs/concepts/compaction.md +61 -0
  90. package/docs/concepts/context.md +159 -0
  91. package/docs/concepts/features.md +53 -0
  92. package/docs/concepts/group-messages.md +84 -0
  93. package/docs/concepts/groups.md +373 -0
  94. package/docs/concepts/markdown-formatting.md +130 -0
  95. package/docs/concepts/memory.md +546 -0
  96. package/docs/concepts/messages.md +154 -0
  97. package/docs/concepts/model-failover.md +149 -0
  98. package/docs/concepts/model-providers.md +315 -0
  99. package/docs/concepts/models.md +208 -0
  100. package/docs/concepts/multi-agent.md +376 -0
  101. package/docs/concepts/oauth.md +145 -0
  102. package/docs/concepts/plugins.md +454 -0
  103. package/docs/concepts/presence.md +102 -0
  104. package/docs/concepts/queue.md +89 -0
  105. package/docs/concepts/retry.md +69 -0
  106. package/docs/concepts/secrets.md +300 -0
  107. package/docs/concepts/session-pruning.md +122 -0
  108. package/docs/concepts/session-tool.md +193 -0
  109. package/docs/concepts/session.md +188 -0
  110. package/docs/concepts/sessions.md +10 -0
  111. package/docs/concepts/skills.md +392 -0
  112. package/docs/concepts/streaming.md +135 -0
  113. package/docs/concepts/system-prompt.md +114 -0
  114. package/docs/concepts/timezone.md +91 -0
  115. package/docs/concepts/typebox.md +289 -0
  116. package/docs/concepts/typing-indicators.md +68 -0
  117. package/docs/concepts/usage-tracking.md +35 -0
  118. package/docs/custom.css +4 -0
  119. package/docs/date-time.md +128 -0
  120. package/docs/debugging.md +162 -0
  121. package/docs/docs.json +1599 -0
  122. package/docs/environment.md +81 -0
  123. package/docs/hooks.md +876 -0
  124. package/docs/index.md +179 -0
  125. package/docs/install/ansible.md +208 -0
  126. package/docs/install/bun.md +59 -0
  127. package/docs/install/development-channels.md +75 -0
  128. package/docs/install/docker.md +567 -0
  129. package/docs/install/index.md +185 -0
  130. package/docs/install/installer.md +123 -0
  131. package/docs/install/migrating.md +192 -0
  132. package/docs/install/nix.md +96 -0
  133. package/docs/install/node.md +78 -0
  134. package/docs/install/uninstall.md +128 -0
  135. package/docs/install/updating.md +228 -0
  136. package/docs/logging.md +350 -0
  137. package/docs/multi-agent-sandbox-tools.md +395 -0
  138. package/docs/network.md +54 -0
  139. package/docs/nodes/audio.md +114 -0
  140. package/docs/nodes/camera.md +156 -0
  141. package/docs/nodes/images.md +72 -0
  142. package/docs/nodes/index.md +341 -0
  143. package/docs/nodes/location-command.md +113 -0
  144. package/docs/nodes/media-understanding.md +379 -0
  145. package/docs/nodes/talk.md +90 -0
  146. package/docs/nodes/voicewake.md +65 -0
  147. package/docs/northflank.mdx +53 -0
  148. package/docs/perplexity.md +80 -0
  149. package/docs/platforms/android.md +129 -0
  150. package/docs/platforms/digitalocean.md +262 -0
  151. package/docs/platforms/exe-dev.md +125 -0
  152. package/docs/platforms/fly.md +486 -0
  153. package/docs/platforms/gcp.md +503 -0
  154. package/docs/platforms/hetzner.md +330 -0
  155. package/docs/platforms/index.md +53 -0
  156. package/docs/platforms/ios.md +106 -0
  157. package/docs/platforms/linux.md +94 -0
  158. package/docs/platforms/mac/bundled-gateway.md +73 -0
  159. package/docs/platforms/mac/canvas.md +125 -0
  160. package/docs/platforms/mac/child-process.md +69 -0
  161. package/docs/platforms/mac/dev-setup.md +102 -0
  162. package/docs/platforms/mac/health.md +34 -0
  163. package/docs/platforms/mac/icon.md +31 -0
  164. package/docs/platforms/mac/logging.md +57 -0
  165. package/docs/platforms/mac/menu-bar.md +81 -0
  166. package/docs/platforms/mac/peekaboo.md +65 -0
  167. package/docs/platforms/mac/permissions.md +44 -0
  168. package/docs/platforms/mac/release.md +85 -0
  169. package/docs/platforms/mac/remote.md +83 -0
  170. package/docs/platforms/mac/signing.md +47 -0
  171. package/docs/platforms/mac/skills.md +33 -0
  172. package/docs/platforms/mac/voice-overlay.md +60 -0
  173. package/docs/platforms/mac/voicewake.md +67 -0
  174. package/docs/platforms/mac/webchat.md +41 -0
  175. package/docs/platforms/mac/xpc.md +61 -0
  176. package/docs/platforms/macos-vm.md +281 -0
  177. package/docs/platforms/macos.md +203 -0
  178. package/docs/platforms/oracle.md +303 -0
  179. package/docs/platforms/raspberry-pi.md +358 -0
  180. package/docs/platforms/windows.md +159 -0
  181. package/docs/plugin.md +651 -0
  182. package/docs/plugins/agent-tools.md +99 -0
  183. package/docs/plugins/manifest.md +71 -0
  184. package/docs/plugins/voice-call.md +273 -0
  185. package/docs/plugins/zalouser.md +70 -0
  186. package/docs/providers/anthropic.md +152 -0
  187. package/docs/providers/claude-max-api-proxy.md +148 -0
  188. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  189. package/docs/providers/deepgram.md +93 -0
  190. package/docs/providers/glm.md +33 -0
  191. package/docs/providers/index.md +63 -0
  192. package/docs/providers/minimax.md +208 -0
  193. package/docs/providers/models.md +51 -0
  194. package/docs/providers/moonshot.md +142 -0
  195. package/docs/providers/ollama.md +223 -0
  196. package/docs/providers/openai.md +62 -0
  197. package/docs/providers/opencode.md +36 -0
  198. package/docs/providers/openrouter.md +37 -0
  199. package/docs/providers/qwen.md +53 -0
  200. package/docs/providers/synthetic.md +99 -0
  201. package/docs/providers/venice.md +267 -0
  202. package/docs/providers/vercel-ai-gateway.md +50 -0
  203. package/docs/providers/xiaomi.md +64 -0
  204. package/docs/providers/zai.md +36 -0
  205. package/docs/railway.mdx +99 -0
  206. package/docs/reference/templates/AGENTS.md +9 -0
  207. package/docs/reference/templates/BOOTSTRAP.md +3 -0
  208. package/docs/reference/templates/HEARTBEAT.md +3 -0
  209. package/docs/reference/templates/IDENTITY.md +3 -0
  210. package/docs/reference/templates/TOOLS.md +3 -0
  211. package/docs/reference/templates/USER.md +3 -0
  212. package/docs/render.mdx +165 -0
  213. package/docs/start/docs-directory.md +63 -0
  214. package/docs/start/getting-started.md +212 -0
  215. package/docs/start/milaidy.md +247 -0
  216. package/docs/start/onboarding.md +258 -0
  217. package/docs/start/pairing.md +86 -0
  218. package/docs/start/quickstart.md +81 -0
  219. package/docs/start/setup.md +149 -0
  220. package/docs/start/showcase.md +416 -0
  221. package/docs/start/wizard.md +418 -0
  222. package/docs/testing.md +368 -0
  223. package/docs/token-use.md +112 -0
  224. package/docs/tools/agent-send.md +53 -0
  225. package/docs/tools/apply-patch.md +50 -0
  226. package/docs/tools/browser-linux-troubleshooting.md +139 -0
  227. package/docs/tools/browser-login.md +68 -0
  228. package/docs/tools/browser.md +576 -0
  229. package/docs/tools/chrome-extension.md +178 -0
  230. package/docs/tools/clawhub.md +257 -0
  231. package/docs/tools/creating-skills.md +54 -0
  232. package/docs/tools/elevated.md +57 -0
  233. package/docs/tools/exec-approvals.md +246 -0
  234. package/docs/tools/exec.md +179 -0
  235. package/docs/tools/firecrawl.md +61 -0
  236. package/docs/tools/index.md +508 -0
  237. package/docs/tools/llm-task.md +115 -0
  238. package/docs/tools/reactions.md +22 -0
  239. package/docs/tools/skills-config.md +76 -0
  240. package/docs/tools/skills.md +300 -0
  241. package/docs/tools/slash-commands.md +196 -0
  242. package/docs/tools/subagents.md +151 -0
  243. package/docs/tools/thinking.md +73 -0
  244. package/docs/tools/web.md +261 -0
  245. package/docs/tui.md +159 -0
  246. package/docs/vps.md +43 -0
  247. package/docs/web/control-ui.md +221 -0
  248. package/docs/web/dashboard.md +46 -0
  249. package/docs/web/index.md +116 -0
  250. package/docs/web/webchat.md +49 -0
  251. package/milaidy.mjs +14 -0
  252. package/package.json +271 -0
  253. package/skills/.cache/catalog.json +88519 -0
@@ -0,0 +1,503 @@
1
+ ---
2
+ summary: "Run Milaidy Gateway 24/7 on a GCP Compute Engine VM (Docker) with durable state"
3
+ read_when:
4
+ - You want Milaidy running 24/7 on GCP
5
+ - You want a production-grade, always-on Gateway on your own VM
6
+ - You want full control over persistence, binaries, and restart behavior
7
+ title: "GCP"
8
+ ---
9
+
10
+ # Milaidy on GCP Compute Engine (Docker, Production VPS Guide)
11
+
12
+ ## Goal
13
+
14
+ Run a persistent Milaidy Gateway on a GCP Compute Engine VM using Docker, with durable state, baked-in binaries, and safe restart behavior.
15
+
16
+ If you want "Milaidy 24/7 for ~$5-12/mo", this is a reliable setup on Google Cloud.
17
+ Pricing varies by machine type and region; pick the smallest VM that fits your workload and scale up if you hit OOMs.
18
+
19
+ ## What are we doing (simple terms)?
20
+
21
+ - Create a GCP project and enable billing
22
+ - Create a Compute Engine VM
23
+ - Install Docker (isolated app runtime)
24
+ - Start the Milaidy Gateway in Docker
25
+ - Persist `~/.milaidy` + `~/.milaidy/workspace` on the host (survives restarts/rebuilds)
26
+ - Access the Control UI from your laptop via an SSH tunnel
27
+
28
+ The Gateway can be accessed via:
29
+
30
+ - SSH port forwarding from your laptop
31
+ - Direct port exposure if you manage firewalling and tokens yourself
32
+
33
+ This guide uses Debian on GCP Compute Engine.
34
+ Ubuntu also works; map packages accordingly.
35
+ For the generic Docker flow, see [Docker](/install/docker).
36
+
37
+ ---
38
+
39
+ ## Quick path (experienced operators)
40
+
41
+ 1. Create GCP project + enable Compute Engine API
42
+ 2. Create Compute Engine VM (e2-small, Debian 12, 20GB)
43
+ 3. SSH into the VM
44
+ 4. Install Docker
45
+ 5. Clone Milaidy repository
46
+ 6. Create persistent host directories
47
+ 7. Configure `.env` and `docker-compose.yml`
48
+ 8. Bake required binaries, build, and launch
49
+
50
+ ---
51
+
52
+ ## What you need
53
+
54
+ - GCP account (free tier eligible for e2-micro)
55
+ - gcloud CLI installed (or use Cloud Console)
56
+ - SSH access from your laptop
57
+ - Basic comfort with SSH + copy/paste
58
+ - ~20-30 minutes
59
+ - Docker and Docker Compose
60
+ - Model auth credentials
61
+ - Optional provider credentials
62
+ - WhatsApp QR
63
+ - Telegram bot token
64
+ - Gmail OAuth
65
+
66
+ ---
67
+
68
+ ## 1) Install gcloud CLI (or use Console)
69
+
70
+ **Option A: gcloud CLI** (recommended for automation)
71
+
72
+ Install from https://cloud.google.com/sdk/docs/install
73
+
74
+ Initialize and authenticate:
75
+
76
+ ```bash
77
+ gcloud init
78
+ gcloud auth login
79
+ ```
80
+
81
+ **Option B: Cloud Console**
82
+
83
+ All steps can be done via the web UI at https://console.cloud.google.com
84
+
85
+ ---
86
+
87
+ ## 2) Create a GCP project
88
+
89
+ **CLI:**
90
+
91
+ ```bash
92
+ gcloud projects create my-milaidy-project --name="Milaidy Gateway"
93
+ gcloud config set project my-milaidy-project
94
+ ```
95
+
96
+ Enable billing at https://console.cloud.google.com/billing (required for Compute Engine).
97
+
98
+ Enable the Compute Engine API:
99
+
100
+ ```bash
101
+ gcloud services enable compute.googleapis.com
102
+ ```
103
+
104
+ **Console:**
105
+
106
+ 1. Go to IAM & Admin > Create Project
107
+ 2. Name it and create
108
+ 3. Enable billing for the project
109
+ 4. Navigate to APIs & Services > Enable APIs > search "Compute Engine API" > Enable
110
+
111
+ ---
112
+
113
+ ## 3) Create the VM
114
+
115
+ **Machine types:**
116
+
117
+ | Type | Specs | Cost | Notes |
118
+ | -------- | ------------------------ | ------------------ | ------------------ |
119
+ | e2-small | 2 vCPU, 2GB RAM | ~$12/mo | Recommended |
120
+ | e2-micro | 2 vCPU (shared), 1GB RAM | Free tier eligible | May OOM under load |
121
+
122
+ **CLI:**
123
+
124
+ ```bash
125
+ gcloud compute instances create milaidy-gateway \
126
+ --zone=us-central1-a \
127
+ --machine-type=e2-small \
128
+ --boot-disk-size=20GB \
129
+ --image-family=debian-12 \
130
+ --image-project=debian-cloud
131
+ ```
132
+
133
+ **Console:**
134
+
135
+ 1. Go to Compute Engine > VM instances > Create instance
136
+ 2. Name: `milaidy-gateway`
137
+ 3. Region: `us-central1`, Zone: `us-central1-a`
138
+ 4. Machine type: `e2-small`
139
+ 5. Boot disk: Debian 12, 20GB
140
+ 6. Create
141
+
142
+ ---
143
+
144
+ ## 4) SSH into the VM
145
+
146
+ **CLI:**
147
+
148
+ ```bash
149
+ gcloud compute ssh milaidy-gateway --zone=us-central1-a
150
+ ```
151
+
152
+ **Console:**
153
+
154
+ Click the "SSH" button next to your VM in the Compute Engine dashboard.
155
+
156
+ Note: SSH key propagation can take 1-2 minutes after VM creation. If connection is refused, wait and retry.
157
+
158
+ ---
159
+
160
+ ## 5) Install Docker (on the VM)
161
+
162
+ ```bash
163
+ sudo apt-get update
164
+ sudo apt-get install -y git curl ca-certificates
165
+ curl -fsSL https://get.docker.com | sudo sh
166
+ sudo usermod -aG docker $USER
167
+ ```
168
+
169
+ Log out and back in for the group change to take effect:
170
+
171
+ ```bash
172
+ exit
173
+ ```
174
+
175
+ Then SSH back in:
176
+
177
+ ```bash
178
+ gcloud compute ssh milaidy-gateway --zone=us-central1-a
179
+ ```
180
+
181
+ Verify:
182
+
183
+ ```bash
184
+ docker --version
185
+ docker compose version
186
+ ```
187
+
188
+ ---
189
+
190
+ ## 6) Clone the Milaidy repository
191
+
192
+ ```bash
193
+ git clone https://github.com/milaidy/milaidy.git
194
+ cd milaidy
195
+ ```
196
+
197
+ This guide assumes you will build a custom image to guarantee binary persistence.
198
+
199
+ ---
200
+
201
+ ## 7) Create persistent host directories
202
+
203
+ Docker containers are ephemeral.
204
+ All long-lived state must live on the host.
205
+
206
+ ```bash
207
+ mkdir -p ~/.milaidy
208
+ mkdir -p ~/.milaidy/workspace
209
+ ```
210
+
211
+ ---
212
+
213
+ ## 8) Configure environment variables
214
+
215
+ Create `.env` in the repository root.
216
+
217
+ ```bash
218
+ MILAIDY_IMAGE=milaidy:latest
219
+ MILAIDY_GATEWAY_TOKEN=change-me-now
220
+ MILAIDY_GATEWAY_BIND=lan
221
+ MILAIDY_GATEWAY_PORT=18789
222
+
223
+ MILAIDY_CONFIG_DIR=/home/$USER/.milaidy
224
+ MILAIDY_WORKSPACE_DIR=/home/$USER/.milaidy/workspace
225
+
226
+ GOG_KEYRING_PASSWORD=change-me-now
227
+ XDG_CONFIG_HOME=/home/node/.milaidy
228
+ ```
229
+
230
+ Generate strong secrets:
231
+
232
+ ```bash
233
+ openssl rand -hex 32
234
+ ```
235
+
236
+ **Do not commit this file.**
237
+
238
+ ---
239
+
240
+ ## 9) Docker Compose configuration
241
+
242
+ Create or update `docker-compose.yml`.
243
+
244
+ ```yaml
245
+ services:
246
+ milaidy-gateway:
247
+ image: ${MILAIDY_IMAGE}
248
+ build: .
249
+ restart: unless-stopped
250
+ env_file:
251
+ - .env
252
+ environment:
253
+ - HOME=/home/node
254
+ - NODE_ENV=production
255
+ - TERM=xterm-256color
256
+ - MILAIDY_GATEWAY_BIND=${MILAIDY_GATEWAY_BIND}
257
+ - MILAIDY_GATEWAY_PORT=${MILAIDY_GATEWAY_PORT}
258
+ - MILAIDY_GATEWAY_TOKEN=${MILAIDY_GATEWAY_TOKEN}
259
+ - GOG_KEYRING_PASSWORD=${GOG_KEYRING_PASSWORD}
260
+ - XDG_CONFIG_HOME=${XDG_CONFIG_HOME}
261
+ - PATH=/home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
262
+ volumes:
263
+ - ${MILAIDY_CONFIG_DIR}:/home/node/.milaidy
264
+ - ${MILAIDY_WORKSPACE_DIR}:/home/node/.milaidy/workspace
265
+ ports:
266
+ # Recommended: keep the Gateway loopback-only on the VM; access via SSH tunnel.
267
+ # To expose it publicly, remove the `127.0.0.1:` prefix and firewall accordingly.
268
+ - "127.0.0.1:${MILAIDY_GATEWAY_PORT}:18789"
269
+
270
+ # Optional: only if you run iOS/Android nodes against this VM and need Canvas host.
271
+ # If you expose this publicly, read /gateway/security and firewall accordingly.
272
+ # - "18793:18793"
273
+ command:
274
+ [
275
+ "node",
276
+ "dist/index.js",
277
+ "gateway",
278
+ "--bind",
279
+ "${MILAIDY_GATEWAY_BIND}",
280
+ "--port",
281
+ "${MILAIDY_GATEWAY_PORT}",
282
+ ]
283
+ ```
284
+
285
+ ---
286
+
287
+ ## 10) Bake required binaries into the image (critical)
288
+
289
+ Installing binaries inside a running container is a trap.
290
+ Anything installed at runtime will be lost on restart.
291
+
292
+ All external binaries required by skills must be installed at image build time.
293
+
294
+ The examples below show three common binaries only:
295
+
296
+ - `gog` for Gmail access
297
+ - `goplaces` for Google Places
298
+ - `wacli` for WhatsApp
299
+
300
+ These are examples, not a complete list.
301
+ You may install as many binaries as needed using the same pattern.
302
+
303
+ If you add new skills later that depend on additional binaries, you must:
304
+
305
+ 1. Update the Dockerfile
306
+ 2. Rebuild the image
307
+ 3. Restart the containers
308
+
309
+ **Example Dockerfile**
310
+
311
+ ```dockerfile
312
+ FROM node:22-bookworm
313
+
314
+ RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
315
+
316
+ # Example binary 1: Gmail CLI
317
+ RUN curl -L https://github.com/steipete/gog/releases/latest/download/gog_Linux_x86_64.tar.gz \
318
+ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/gog
319
+
320
+ # Example binary 2: Google Places CLI
321
+ RUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_Linux_x86_64.tar.gz \
322
+ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/goplaces
323
+
324
+ # Example binary 3: WhatsApp CLI
325
+ RUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli_Linux_x86_64.tar.gz \
326
+ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/wacli
327
+
328
+ # Add more binaries below using the same pattern
329
+
330
+ WORKDIR /app
331
+ COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
332
+ COPY ui/package.json ./ui/package.json
333
+ COPY scripts ./scripts
334
+
335
+ RUN corepack enable
336
+ RUN pnpm install --frozen-lockfile
337
+
338
+ COPY . .
339
+ RUN pnpm build
340
+ RUN pnpm ui:install
341
+ RUN pnpm ui:build
342
+
343
+ ENV NODE_ENV=production
344
+
345
+ CMD ["node","dist/index.js"]
346
+ ```
347
+
348
+ ---
349
+
350
+ ## 11) Build and launch
351
+
352
+ ```bash
353
+ docker compose build
354
+ docker compose up -d milaidy-gateway
355
+ ```
356
+
357
+ Verify binaries:
358
+
359
+ ```bash
360
+ docker compose exec milaidy-gateway which gog
361
+ docker compose exec milaidy-gateway which goplaces
362
+ docker compose exec milaidy-gateway which wacli
363
+ ```
364
+
365
+ Expected output:
366
+
367
+ ```
368
+ /usr/local/bin/gog
369
+ /usr/local/bin/goplaces
370
+ /usr/local/bin/wacli
371
+ ```
372
+
373
+ ---
374
+
375
+ ## 12) Verify Gateway
376
+
377
+ ```bash
378
+ docker compose logs -f milaidy-gateway
379
+ ```
380
+
381
+ Success:
382
+
383
+ ```
384
+ [gateway] listening on ws://0.0.0.0:18789
385
+ ```
386
+
387
+ ---
388
+
389
+ ## 13) Access from your laptop
390
+
391
+ Create an SSH tunnel to forward the Gateway port:
392
+
393
+ ```bash
394
+ gcloud compute ssh milaidy-gateway --zone=us-central1-a -- -L 18789:127.0.0.1:18789
395
+ ```
396
+
397
+ Open in your browser:
398
+
399
+ `http://127.0.0.1:18789/`
400
+
401
+ Paste your gateway token.
402
+
403
+ ---
404
+
405
+ ## What persists where (source of truth)
406
+
407
+ Milaidy runs in Docker, but Docker is not the source of truth.
408
+ All long-lived state must survive restarts, rebuilds, and reboots.
409
+
410
+ | Component | Location | Persistence mechanism | Notes |
411
+ | ------------------- | --------------------------------- | ---------------------- | -------------------------------- |
412
+ | Gateway config | `/home/node/.milaidy/` | Host volume mount | Includes `milaidy.json`, tokens |
413
+ | Model auth profiles | `/home/node/.milaidy/` | Host volume mount | OAuth tokens, API keys |
414
+ | Skill configs | `/home/node/.milaidy/skills/` | Host volume mount | Skill-level state |
415
+ | Agent workspace | `/home/node/.milaidy/workspace/` | Host volume mount | Code and agent artifacts |
416
+ | WhatsApp session | `/home/node/.milaidy/` | Host volume mount | Preserves QR login |
417
+ | Gmail keyring | `/home/node/.milaidy/` | Host volume + password | Requires `GOG_KEYRING_PASSWORD` |
418
+ | External binaries | `/usr/local/bin/` | Docker image | Must be baked at build time |
419
+ | Node runtime | Container filesystem | Docker image | Rebuilt every image build |
420
+ | OS packages | Container filesystem | Docker image | Do not install at runtime |
421
+ | Docker container | Ephemeral | Restartable | Safe to destroy |
422
+
423
+ ---
424
+
425
+ ## Updates
426
+
427
+ To update Milaidy on the VM:
428
+
429
+ ```bash
430
+ cd ~/milaidy
431
+ git pull
432
+ docker compose build
433
+ docker compose up -d
434
+ ```
435
+
436
+ ---
437
+
438
+ ## Troubleshooting
439
+
440
+ **SSH connection refused**
441
+
442
+ SSH key propagation can take 1-2 minutes after VM creation. Wait and retry.
443
+
444
+ **OS Login issues**
445
+
446
+ Check your OS Login profile:
447
+
448
+ ```bash
449
+ gcloud compute os-login describe-profile
450
+ ```
451
+
452
+ Ensure your account has the required IAM permissions (Compute OS Login or Compute OS Admin Login).
453
+
454
+ **Out of memory (OOM)**
455
+
456
+ If using e2-micro and hitting OOM, upgrade to e2-small or e2-medium:
457
+
458
+ ```bash
459
+ # Stop the VM first
460
+ gcloud compute instances stop milaidy-gateway --zone=us-central1-a
461
+
462
+ # Change machine type
463
+ gcloud compute instances set-machine-type milaidy-gateway \
464
+ --zone=us-central1-a \
465
+ --machine-type=e2-small
466
+
467
+ # Start the VM
468
+ gcloud compute instances start milaidy-gateway --zone=us-central1-a
469
+ ```
470
+
471
+ ---
472
+
473
+ ## Service accounts (security best practice)
474
+
475
+ For personal use, your default user account works fine.
476
+
477
+ For automation or CI/CD pipelines, create a dedicated service account with minimal permissions:
478
+
479
+ 1. Create a service account:
480
+
481
+ ```bash
482
+ gcloud iam service-accounts create milaidy-deploy \
483
+ --display-name="Milaidy Deployment"
484
+ ```
485
+
486
+ 2. Grant Compute Instance Admin role (or narrower custom role):
487
+ ```bash
488
+ gcloud projects add-iam-policy-binding my-milaidy-project \
489
+ --member="serviceAccount:milaidy-deploy@my-milaidy-project.iam.gserviceaccount.com" \
490
+ --role="roles/compute.instanceAdmin.v1"
491
+ ```
492
+
493
+ Avoid using the Owner role for automation. Use the principle of least privilege.
494
+
495
+ See https://cloud.google.com/iam/docs/understanding-roles for IAM role details.
496
+
497
+ ---
498
+
499
+ ## Next steps
500
+
501
+ - Set up messaging channels: [Channels](/channels)
502
+ - Pair local devices as nodes: [Nodes](/nodes)
503
+ - Configure the Gateway: [Gateway configuration](/gateway/configuration)