@crvouga/dev-fleet 0.0.0-stage → 0.2.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 (363) hide show
  1. package/.mise/locks/aws-cdk/2.1146.1/aube-lock.yaml +24 -0
  2. package/.mise/locks/aws-cdk/2.1146.1/package.json +7 -0
  3. package/.mise/locks/azure-cli/2.91.0~a837e014/pyproject.toml +5 -0
  4. package/.mise/locks/azure-cli/2.91.0~a837e014/uv.lock +2794 -0
  5. package/.mise/locks/gemini/0.66.0~84aac8e6/aube-lock.yaml +123 -0
  6. package/.mise/locks/gemini/0.66.0~84aac8e6/package.json +12 -0
  7. package/.mise/locks/npm-devcontainers-cli/0.90.0/aube-lock.yaml +24 -0
  8. package/.mise/locks/npm-devcontainers-cli/0.90.0/package.json +7 -0
  9. package/.mise/locks/npm-modelcontextprotocol-inspector/2.13.0~4c109bea/aube-lock.yaml +1432 -0
  10. package/.mise/locks/npm-modelcontextprotocol-inspector/2.13.0~4c109bea/package.json +7 -0
  11. package/.mise/locks/npm-vercel/65.8.0/aube-lock.yaml +3595 -0
  12. package/.mise/locks/npm-vercel/65.8.0/package.json +7 -0
  13. package/.mise/locks/npm-wrangler/4.156.0/aube-lock.yaml +895 -0
  14. package/.mise/locks/npm-wrangler/4.156.0/package.json +7 -0
  15. package/.mise/locks/npm-yarnpkg-cli-dist/4.18.1/aube-lock.yaml +24 -0
  16. package/.mise/locks/npm-yarnpkg-cli-dist/4.18.1/package.json +7 -0
  17. package/LICENSE +21 -0
  18. package/README.md +357 -2
  19. package/agents/antigravity-proxy.ts +3 -0
  20. package/agents/audit.md +89 -0
  21. package/agents/claude-proxy +5 -0
  22. package/agents/claude-proxy.ts +3 -0
  23. package/agents/codex-proxy.ts +3 -0
  24. package/agents/grok-proxy.ts +3 -0
  25. package/agents/managed-proxy.ts +55 -0
  26. package/agents/opencode-proxy.ts +3 -0
  27. package/agents/registry.json +209 -0
  28. package/agents/registry.schema.json +149 -0
  29. package/agents/setup.md +158 -0
  30. package/agents/t3.json +40 -0
  31. package/ansible/macos/manager.yml +30 -0
  32. package/ansible/macos/policy.json +9 -0
  33. package/ansible/monitoring/README.md +215 -0
  34. package/ansible/monitoring/agent-darwin.yml +198 -0
  35. package/ansible/monitoring/agent.yml +172 -0
  36. package/ansible/monitoring/beszel-agent.service +42 -0
  37. package/ansible/monitoring/compose.yml +74 -0
  38. package/ansible/monitoring/hub-darwin.yml +102 -0
  39. package/ansible/monitoring/hub-route-darwin.yml +51 -0
  40. package/ansible/monitoring/lock.json +16 -0
  41. package/ansible/net/remote-probe.sh +13 -0
  42. package/ansible/pyproject.toml +12 -0
  43. package/ansible/ubuntu/authorize-sudo.sh +51 -0
  44. package/ansible/ubuntu/baseline.yml +89 -0
  45. package/ansible/ubuntu/disk-gc.py +336 -0
  46. package/ansible/ubuntu/disk-guard.py +104 -0
  47. package/ansible/ubuntu/policy.json +52 -0
  48. package/ansible/ubuntu/recovery.yml +15 -0
  49. package/ansible/ubuntu/t3/policy.json +7 -0
  50. package/ansible/ubuntu/t3-desktop.yml +220 -0
  51. package/ansible/ubuntu/t3-health.sh +33 -0
  52. package/ansible/ubuntu/t3-policy.yml +76 -0
  53. package/ansible/ubuntu/t3-route.yml +28 -0
  54. package/ansible/ubuntu/tailscale.yml +78 -0
  55. package/ansible/ubuntu/tasks/credentials.yml +47 -0
  56. package/ansible/ubuntu/tasks/docker.yml +31 -0
  57. package/ansible/ubuntu/tasks/packages.yml +56 -0
  58. package/ansible/ubuntu/tasks/power.yml +51 -0
  59. package/ansible/ubuntu/tasks/recovery.yml +39 -0
  60. package/ansible/ubuntu/tasks/resources.yml +312 -0
  61. package/ansible/ubuntu/tasks/services.yml +31 -0
  62. package/ansible/ubuntu/tasks/ssh.yml +71 -0
  63. package/ansible/ubuntu/tasks/user.yml +120 -0
  64. package/ansible/uv.lock +190 -0
  65. package/bin/devfleet.mjs +36 -0
  66. package/bootstrap/bootstrap.ps1 +50 -0
  67. package/bootstrap/bootstrap.sh +80 -0
  68. package/bootstrap/devfleet +7 -0
  69. package/bootstrap/docker-desktop.sh +33 -0
  70. package/bootstrap/doctor.ts +234 -0
  71. package/bootstrap/fleet-manager-run.sh +103 -0
  72. package/bootstrap/fleet-remote-bootstrap.sh +258 -0
  73. package/bootstrap/global-config.ts +171 -0
  74. package/bootstrap/install-launcher.sh +10 -0
  75. package/bootstrap/native-aws.ts +86 -0
  76. package/bootstrap/native-t3.ts +154 -0
  77. package/bootstrap/npm.ts +358 -0
  78. package/bootstrap/release-version.ts +157 -0
  79. package/bootstrap/setup-status.ts +51 -0
  80. package/bootstrap/setup.ts +88 -0
  81. package/bootstrap/shell-path.ts +105 -0
  82. package/bootstrap/verify-t3-archive.py +49 -0
  83. package/bootstrap/worker-auth.ts +65 -0
  84. package/bootstrap/worker-github.ts +47 -0
  85. package/bootstrap/worker-tools.ts +24 -0
  86. package/cliproxy/AGENTS.md +11 -0
  87. package/cliproxy/README.md +269 -0
  88. package/cliproxy/clients/bootstrap.py +143 -0
  89. package/cliproxy/clients/launcher.py +57 -0
  90. package/cliproxy/compose.yaml +90 -0
  91. package/cliproxy/config.template.yaml +70 -0
  92. package/cliproxy/docs/cloud-adoption.md +16 -0
  93. package/cliproxy/docs/deployment.png +0 -0
  94. package/cliproxy/docs/deployment.svg +109 -0
  95. package/cliproxy/docs/health-workflow.example.yml +185 -0
  96. package/cliproxy/docs/migration.md +131 -0
  97. package/cliproxy/docs/model-health-report.schema.json +364 -0
  98. package/cliproxy/docs/model-health.md +393 -0
  99. package/cliproxy/image.lock.json +5 -0
  100. package/cliproxy/launchd/dev.devfleet.cliproxy-backup-check.plist +38 -0
  101. package/cliproxy/launchd/dev.devfleet.cliproxy-backup.plist +48 -0
  102. package/cliproxy/launchd/dev.devfleet.cliproxy-fleet.plist +32 -0
  103. package/cliproxy/launchd/dev.devfleet.cliproxy-gc.plist +38 -0
  104. package/cliproxy/launchd/dev.devfleet.cliproxy-monitor.plist +29 -0
  105. package/cliproxy/launchd/dev.devfleet.cliproxy-vault-renew.plist +31 -0
  106. package/cliproxy/models.json +1618 -0
  107. package/cliproxy/requirements.lock +78 -0
  108. package/cliproxy/scripts/accounts.py +38 -0
  109. package/cliproxy/scripts/audit.py +123 -0
  110. package/cliproxy/scripts/backup +234 -0
  111. package/cliproxy/scripts/check.py +34 -0
  112. package/cliproxy/scripts/checkpoint.py +226 -0
  113. package/cliproxy/scripts/cli.py +64 -0
  114. package/cliproxy/scripts/cliproxy_host.py +257 -0
  115. package/cliproxy/scripts/cloud_state.py +150 -0
  116. package/cliproxy/scripts/container-health +6 -0
  117. package/cliproxy/scripts/docker +24 -0
  118. package/cliproxy/scripts/external-health.py +79 -0
  119. package/cliproxy/scripts/fleet_config.py +43 -0
  120. package/cliproxy/scripts/fleet_sync.py +274 -0
  121. package/cliproxy/scripts/initialize +84 -0
  122. package/cliproxy/scripts/install-dependencies +48 -0
  123. package/cliproxy/scripts/install.py +406 -0
  124. package/cliproxy/scripts/model_health.py +16 -0
  125. package/cliproxy/scripts/modelhealth/__init__.py +5 -0
  126. package/cliproxy/scripts/modelhealth/checks.py +429 -0
  127. package/cliproxy/scripts/modelhealth/cli.py +117 -0
  128. package/cliproxy/scripts/modelhealth/config.py +186 -0
  129. package/cliproxy/scripts/modelhealth/emulator.py +536 -0
  130. package/cliproxy/scripts/modelhealth/expect.py +88 -0
  131. package/cliproxy/scripts/modelhealth/findings.py +183 -0
  132. package/cliproxy/scripts/modelhealth/protocol.py +330 -0
  133. package/cliproxy/scripts/modelhealth/redact.py +28 -0
  134. package/cliproxy/scripts/modelhealth/report.py +150 -0
  135. package/cliproxy/scripts/modelhealth/runner.py +390 -0
  136. package/cliproxy/scripts/modelhealth/scenario.py +131 -0
  137. package/cliproxy/scripts/modelhealth/schema.py +63 -0
  138. package/cliproxy/scripts/modelhealth/simulate.py +111 -0
  139. package/cliproxy/scripts/modelhealth/transport.py +213 -0
  140. package/cliproxy/scripts/monitor +68 -0
  141. package/cliproxy/scripts/ops +527 -0
  142. package/cliproxy/scripts/public-endpoint +127 -0
  143. package/cliproxy/scripts/recover_node.py +177 -0
  144. package/cliproxy/scripts/restore-verify +60 -0
  145. package/cliproxy/scripts/retention.py +144 -0
  146. package/cliproxy/scripts/service-start +7 -0
  147. package/cliproxy/scripts/validate-config +56 -0
  148. package/cliproxy/scripts/vault-access.py +57 -0
  149. package/cliproxy/scripts/vault-backup-login +55 -0
  150. package/cliproxy/scripts/vault-recovery +56 -0
  151. package/cliproxy/scripts/vault-renew +30 -0
  152. package/cliproxy/systemd/cliproxy-backup-check.service +10 -0
  153. package/cliproxy/systemd/cliproxy-backup-check.timer +8 -0
  154. package/cliproxy/systemd/cliproxy-backup.service +13 -0
  155. package/cliproxy/systemd/cliproxy-backup.timer +8 -0
  156. package/cliproxy/systemd/cliproxy-fleet.service +17 -0
  157. package/cliproxy/systemd/cliproxy-gc.service +13 -0
  158. package/cliproxy/systemd/cliproxy-gc.timer +8 -0
  159. package/cliproxy/systemd/cliproxy-monitor.service +8 -0
  160. package/cliproxy/systemd/cliproxy-monitor.timer +7 -0
  161. package/cliproxy/systemd/cliproxy-vault-renew.service +8 -0
  162. package/cliproxy/systemd/cliproxy-vault-renew.timer +7 -0
  163. package/cliproxy/vendor/LICENSE +22 -0
  164. package/cliproxy/vendor/config.upstream.yaml +1349 -0
  165. package/docs/consumer-setup.md +408 -0
  166. package/docs/declared.md +89 -0
  167. package/docs/machine-setup.md +399 -0
  168. package/docs/operations.md +276 -0
  169. package/docs/releasing.md +103 -0
  170. package/docs/state.md +254 -0
  171. package/docs/topology.md +67 -0
  172. package/docs/ubuntu-sync.md +351 -0
  173. package/docs/worker-contract.md +67 -0
  174. package/examples/fleet.json +100 -0
  175. package/examples/roster.json +13 -0
  176. package/llms.txt +35 -0
  177. package/mise.lock +1521 -0
  178. package/mise.toml +110 -0
  179. package/package.json +74 -4
  180. package/schema/fleet.schema.json +420 -0
  181. package/schema/roster.schema.json +77 -0
  182. package/src/agents/account-relay.ts +111 -0
  183. package/src/agents/accounts.ts +85 -0
  184. package/src/agents/audit.ts +77 -0
  185. package/src/agents/cli.ts +13 -0
  186. package/src/agents/command.ts +204 -0
  187. package/src/agents/converge.ts +123 -0
  188. package/src/agents/doctor.ts +107 -0
  189. package/src/agents/errors.ts +2 -0
  190. package/src/agents/files.ts +73 -0
  191. package/src/agents/fleet-verify.ts +165 -0
  192. package/src/agents/launch.ts +290 -0
  193. package/src/agents/native-verify.ts +371 -0
  194. package/src/agents/provider-errors.ts +57 -0
  195. package/src/agents/registry.ts +61 -0
  196. package/src/agents/render.ts +110 -0
  197. package/src/agents/round-trip.ts +192 -0
  198. package/src/agents/secrets.ts +13 -0
  199. package/src/agents/toolchain.ts +34 -0
  200. package/src/agents/verify-cache.ts +103 -0
  201. package/src/agents/verify.ts +127 -0
  202. package/src/auth-checks.ts +163 -0
  203. package/src/cli/agent-guide.ts +129 -0
  204. package/src/cli/app.ts +122 -0
  205. package/src/cli/cli.ts +28 -0
  206. package/src/cli/command-index.ts +57 -0
  207. package/src/cli/contracts.ts +25 -0
  208. package/src/cli/fleet-reference.ts +17 -0
  209. package/src/cli/fleet-state.ts +499 -0
  210. package/src/cli/fleet-sync-checkout.ts +130 -0
  211. package/src/cli/fleet-sync-enrollment.ts +140 -0
  212. package/src/cli/fleet-sync-forward.ts +134 -0
  213. package/src/cli/fleet-sync-manager.ts +249 -0
  214. package/src/cli/fleet-sync-monitoring.ts +185 -0
  215. package/src/cli/fleet-sync-output.ts +317 -0
  216. package/src/cli/fleet-sync-privilege.ts +27 -0
  217. package/src/cli/fleet-sync-progress.ts +109 -0
  218. package/src/cli/fleet-sync-remote.ts +242 -0
  219. package/src/cli/fleet-sync-report.ts +26 -0
  220. package/src/cli/fleet-sync-schedule.ts +138 -0
  221. package/src/cli/fleet-sync-state.ts +86 -0
  222. package/src/cli/fleet-sync-vault.ts +166 -0
  223. package/src/cli/fleet-sync.ts +375 -0
  224. package/src/cli/fleet.ts +165 -0
  225. package/src/cli/managed-health.ts +219 -0
  226. package/src/cli/node-deployment.ts +34 -0
  227. package/src/cli/node-sync.ts +121 -0
  228. package/src/cli/node-t3.ts +31 -0
  229. package/src/cli/options.ts +141 -0
  230. package/src/cli/probe-source.ts +7 -0
  231. package/src/cli/program.ts +185 -0
  232. package/src/cli/project.ts +51 -0
  233. package/src/cli/register-fleet.ts +296 -0
  234. package/src/cli/registry.ts +185 -0
  235. package/src/cli/repair-apply.ts +67 -0
  236. package/src/cli/repair-guard.ts +11 -0
  237. package/src/cli/repair-inspect.ts +150 -0
  238. package/src/cli/repair-script.ts +76 -0
  239. package/src/cli/repair.ts +209 -0
  240. package/src/cli/roster.ts +105 -0
  241. package/src/cli/search.ts +35 -0
  242. package/src/cli/settings.ts +67 -0
  243. package/src/cli/source-operations.ts +102 -0
  244. package/src/cli/t3/command.ts +90 -0
  245. package/src/cli/t3/register.ts +55 -0
  246. package/src/cli/tailnet.ts +127 -0
  247. package/src/cli/ui-actions.ts +133 -0
  248. package/src/cli/ui-controller.ts +113 -0
  249. package/src/cli/ui-data.ts +106 -0
  250. package/src/cli/ui-execute.ts +163 -0
  251. package/src/cli/ui-repairs.ts +34 -0
  252. package/src/cli/ui-reports.ts +211 -0
  253. package/src/cli/ui-targets.ts +100 -0
  254. package/src/cli/ui-terminal.ts +109 -0
  255. package/src/cli/ui-types.ts +49 -0
  256. package/src/cli/ui-wizard.ts +101 -0
  257. package/src/cli/ui.ts +9 -0
  258. package/src/cli/worker-health-output.ts +37 -0
  259. package/src/config.ts +186 -0
  260. package/src/configure.ts +255 -0
  261. package/src/definition.ts +290 -0
  262. package/src/diagnostics.ts +92 -0
  263. package/src/doctor-check.ts +10 -0
  264. package/src/errors.ts +1 -0
  265. package/src/fingerprint.ts +120 -0
  266. package/src/fleet-config.ts +174 -0
  267. package/src/input-hashes.ts +73 -0
  268. package/src/machine/local-source.ts +52 -0
  269. package/src/machine/lock-error.ts +2 -0
  270. package/src/machine/platform.ts +44 -0
  271. package/src/machine/source.ts +68 -0
  272. package/src/machine/state.ts +173 -0
  273. package/src/machine-health.ts +95 -0
  274. package/src/managed-source.ts +47 -0
  275. package/src/manager-failure.ts +48 -0
  276. package/src/manager-sync.ts +405 -0
  277. package/src/manager.ts +62 -0
  278. package/src/monitoring/agent-evidence.ts +146 -0
  279. package/src/monitoring/apply.ts +183 -0
  280. package/src/monitoring/beszel.ts +198 -0
  281. package/src/monitoring/enroll.ts +111 -0
  282. package/src/monitoring/hub-access.ts +114 -0
  283. package/src/monitoring/hub-backup.ts +121 -0
  284. package/src/monitoring/hub-viewer.ts +142 -0
  285. package/src/monitoring/hub.ts +93 -0
  286. package/src/monitoring/manager-agent.ts +73 -0
  287. package/src/monitoring/manager-hub.ts +248 -0
  288. package/src/monitoring/remote.ts +65 -0
  289. package/src/network-definition.ts +83 -0
  290. package/src/node-converge-linux.ts +374 -0
  291. package/src/node-converge-shared.ts +83 -0
  292. package/src/node-converge.ts +40 -0
  293. package/src/onboard.ts +35 -0
  294. package/src/package-info.ts +45 -0
  295. package/src/platform/ansible-receipt.ts +128 -0
  296. package/src/platform/ansible.ts +66 -0
  297. package/src/platform/darwin.ts +203 -0
  298. package/src/platform/detect.ts +11 -0
  299. package/src/platform/fallback.ts +110 -0
  300. package/src/platform/index.ts +38 -0
  301. package/src/platform/launchd.ts +98 -0
  302. package/src/platform/linux.ts +139 -0
  303. package/src/platform/ps.ts +45 -0
  304. package/src/platform/resource-verify.ts +132 -0
  305. package/src/platform/systemd-user.ts +95 -0
  306. package/src/platform/t3-policy.ts +137 -0
  307. package/src/platform/t3-route.ts +68 -0
  308. package/src/platform/t3-service.ts +75 -0
  309. package/src/platform/types.ts +123 -0
  310. package/src/platform/ubuntu-audit.ts +66 -0
  311. package/src/platform/ubuntu-verify.ts +105 -0
  312. package/src/platform/windows.ts +148 -0
  313. package/src/power-recovery.ts +55 -0
  314. package/src/probe.ts +51 -0
  315. package/src/protocol.ts +119 -0
  316. package/src/proxy-converge.ts +85 -0
  317. package/src/remote-bootstrap.ts +210 -0
  318. package/src/remote-entry.ts +89 -0
  319. package/src/remote-lock.ts +12 -0
  320. package/src/repair-catalog.ts +206 -0
  321. package/src/repair-plan.ts +78 -0
  322. package/src/repair-runner.ts +84 -0
  323. package/src/report.ts +71 -0
  324. package/src/runner.ts +104 -0
  325. package/src/secrets.ts +169 -0
  326. package/src/service-auth.ts +115 -0
  327. package/src/ssh.ts +135 -0
  328. package/src/state/bucket.ts +208 -0
  329. package/src/state/check.ts +74 -0
  330. package/src/state/connection.ts +92 -0
  331. package/src/state/enrollment.ts +45 -0
  332. package/src/state/legacy.ts +89 -0
  333. package/src/state/litestream.ts +143 -0
  334. package/src/state/operator.ts +20 -0
  335. package/src/state/paths.ts +40 -0
  336. package/src/state/roster.ts +62 -0
  337. package/src/state/store.ts +169 -0
  338. package/src/state/sync.ts +352 -0
  339. package/src/sync.ts +104 -0
  340. package/src/t3/accounts.ts +81 -0
  341. package/src/t3/desired.ts +165 -0
  342. package/src/t3/files.ts +81 -0
  343. package/src/t3/names-check.ts +53 -0
  344. package/src/t3/names.ts +155 -0
  345. package/src/t3/plan.ts +82 -0
  346. package/src/t3/providers.ts +74 -0
  347. package/src/t3/reconcile.ts +123 -0
  348. package/src/t3-endpoint.ts +104 -0
  349. package/src/t3-linked-check.ts +123 -0
  350. package/src/tailnet-health.ts +231 -0
  351. package/src/tailnet-matching.ts +37 -0
  352. package/src/tailscale.ts +141 -0
  353. package/src/toolchain-checks.ts +108 -0
  354. package/src/topology.ts +24 -0
  355. package/src/transport.ts +122 -0
  356. package/src/types.ts +99 -0
  357. package/src/vault-config.ts +38 -0
  358. package/src/worker-access-checks.ts +168 -0
  359. package/src/worker-capacity.ts +34 -0
  360. package/src/worker-host-checks.ts +181 -0
  361. package/src/worker-policy.ts +64 -0
  362. package/src/worker-readiness.ts +64 -0
  363. package/src/workstation-checks.ts +29 -0
@@ -0,0 +1,209 @@
1
+ {
2
+ "$schema": "./registry.schema.json",
3
+ "version": 1,
4
+ "defaults": {
5
+ "codex": {
6
+ "model": "gpt-6.1-sol"
7
+ },
8
+ "claude": {
9
+ "model": "sonnet"
10
+ },
11
+ "opencode": {
12
+ "model": "openrouter/auto"
13
+ },
14
+ "gemini": {
15
+ "model": "auto"
16
+ },
17
+ "grok": {
18
+ "model": "grok-4.7"
19
+ },
20
+ "antigravity": {
21
+ "model": "gemini-3.8-flash"
22
+ }
23
+ },
24
+ "proxy": {
25
+ "models": {
26
+ "codex": "gpt-6.1-sol",
27
+ "claude": "claude-sonnet-4-6",
28
+ "opencode": "gpt-6.1-sol",
29
+ "gemini": "gemini-3-flash",
30
+ "grok": "grok-4.7",
31
+ "antigravity": "gemini-3.8-flash"
32
+ },
33
+ "accounts": {
34
+ "claude": {
35
+ "provider": "claude",
36
+ "models": ["claude-opus-5-5", "claude-sonnet-5-5", "claude-haiku-5-5"]
37
+ },
38
+ "codex": {
39
+ "provider": "codex",
40
+ "models": ["gpt-6.1-sol"]
41
+ },
42
+ "opencode": {
43
+ "provider": "antigravity",
44
+ "models": ["gemini-3.8-flash"]
45
+ }
46
+ },
47
+ "routes": {
48
+ "claude": {
49
+ "model": "claude-sonnet-4-6",
50
+ "native": "claude",
51
+ "harness": "opencode"
52
+ },
53
+ "codex": {
54
+ "model": "gpt-6.1-sol",
55
+ "native": "codex",
56
+ "harness": "opencode"
57
+ },
58
+ "gemini": {
59
+ "model": "gemini-3-flash",
60
+ "native": "gemini",
61
+ "harness": "opencode"
62
+ },
63
+ "grok": {
64
+ "model": "grok-4.7",
65
+ "native": "grok",
66
+ "harness": "opencode"
67
+ },
68
+ "muse": {
69
+ "model": "devin/muse-wonder-1-0",
70
+ "native": null,
71
+ "harness": "opencode"
72
+ },
73
+ "antigravity": {
74
+ "model": "gemini-3.8-flash",
75
+ "native": "antigravity",
76
+ "harness": "opencode"
77
+ }
78
+ }
79
+ },
80
+ "nodes": {},
81
+ "tools": {
82
+ "codex": {
83
+ "binary": "codex",
84
+ "config": "CODEX_HOME/config.toml",
85
+ "authentication": "Independent codex login for direct; Vault environment key for proxy",
86
+ "proxy": "responses",
87
+ "source": "https://learn.chatgpt.com/docs/config-file/config-reference",
88
+ "directEndpoint": "Native vendor/account configuration; no portable endpoint override is applied",
89
+ "capabilities": {
90
+ "streaming": "unverified on fleet nodes",
91
+ "toolCalls": "unverified on fleet nodes",
92
+ "usageTracking": "independent native/runtime state",
93
+ "unattendedProfile": true
94
+ }
95
+ },
96
+ "claude": {
97
+ "binary": "claude",
98
+ "config": "--settings FILE",
99
+ "authentication": "Independent claude auth login for direct; ANTHROPIC_AUTH_TOKEN for proxy",
100
+ "proxy": "messages",
101
+ "source": "https://code.claude.com/docs/en/llm-gateway-connect",
102
+ "directEndpoint": "Native vendor/account configuration; no portable endpoint override is applied",
103
+ "capabilities": {
104
+ "streaming": "unverified on fleet nodes",
105
+ "toolCalls": "unverified on fleet nodes",
106
+ "usageTracking": "independent native/runtime state",
107
+ "unattendedProfile": true
108
+ }
109
+ },
110
+ "opencode": {
111
+ "binary": "opencode",
112
+ "config": "OPENCODE_CONFIG",
113
+ "authentication": "Existing dev-fleet opencode sync/Vault; runtime environment key for proxy",
114
+ "proxy": "responses",
115
+ "source": "https://opencode.ai/docs/config/",
116
+ "directEndpoint": "Existing dev-fleet OpenCode provider catalog and OpenRouter auto policy",
117
+ "capabilities": {
118
+ "streaming": "unverified on fleet nodes",
119
+ "toolCalls": "unverified on fleet nodes",
120
+ "usageTracking": "independent native/runtime state",
121
+ "unattendedProfile": true
122
+ }
123
+ },
124
+ "gemini": {
125
+ "binary": "gemini",
126
+ "config": "GEMINI_CLI_HOME/.gemini/settings.json",
127
+ "authentication": "Native Google login for direct; supported gateway authentication with runtime Vault key for proxy",
128
+ "proxy": "generateContent",
129
+ "source": "https://github.com/google-gemini/gemini-cli/blob/v0.66.0/packages/core/src/core/contentGenerator.ts",
130
+ "directEndpoint": "Native vendor/account configuration; no portable endpoint override is applied",
131
+ "capabilities": {
132
+ "streaming": "unverified on fleet nodes",
133
+ "toolCalls": "unverified on fleet nodes",
134
+ "usageTracking": "independent native/runtime state",
135
+ "unattendedProfile": true
136
+ }
137
+ },
138
+ "t3": {
139
+ "binary": "t3",
140
+ "config": "T3CODE_HOME/userdata/settings.json providerInstances",
141
+ "authentication": "Independent t3 up --connect and peer pairing",
142
+ "proxy": null,
143
+ "source": "Installed T3 contracts/settings.ts and providerInstance.ts; see audit.md",
144
+ "directEndpoint": "Native vendor/account configuration; no portable endpoint override is applied",
145
+ "capabilities": {
146
+ "streaming": "unverified on fleet nodes",
147
+ "toolCalls": "unverified on fleet nodes",
148
+ "usageTracking": "independent native/runtime state",
149
+ "unattendedProfile": false
150
+ }
151
+ },
152
+ "cursor": {
153
+ "binary": "cursor",
154
+ "config": "OS-specific Cursor User/settings.json and .cursor/mcp.json",
155
+ "authentication": "Interactive Cursor Settings > Models; credentials stay in application storage",
156
+ "proxy": null,
157
+ "source": "https://prod.cursor.com/help/models-and-usage/api-keys",
158
+ "directEndpoint": "Native vendor/account configuration; no portable endpoint override is applied",
159
+ "capabilities": {
160
+ "streaming": "unverified on fleet nodes",
161
+ "toolCalls": "unverified on fleet nodes",
162
+ "usageTracking": "independent native/runtime state",
163
+ "unattendedProfile": false
164
+ }
165
+ },
166
+ "antigravity": {
167
+ "binary": "antigravity",
168
+ "config": "Profile --gemini-dir (antigravity-cli/settings.json, modelProvider gemini)",
169
+ "authentication": "Shared CLI proxy: GEMINI_API_KEY (Vault) with GOOGLE_GEMINI_BASE_URL; no Google sign-in",
170
+ "proxy": "generateContent",
171
+ "source": "https://antigravity.google/docs/install/",
172
+ "directEndpoint": "Native vendor/account configuration; no portable endpoint override is applied",
173
+ "capabilities": {
174
+ "streaming": "unverified on fleet nodes",
175
+ "toolCalls": "unverified on fleet nodes",
176
+ "usageTracking": "independent native/runtime state",
177
+ "unattendedProfile": true
178
+ }
179
+ },
180
+ "copilot": {
181
+ "binary": "copilot",
182
+ "config": "Native config and repository .github/copilot-instructions.md",
183
+ "authentication": "Independent native GitHub login",
184
+ "proxy": null,
185
+ "source": "https://docs.github.com/en/copilot/how-tos/copilot-cli",
186
+ "directEndpoint": "Native vendor/account configuration; no portable endpoint override is applied",
187
+ "capabilities": {
188
+ "streaming": "unverified on fleet nodes",
189
+ "toolCalls": "unverified on fleet nodes",
190
+ "usageTracking": "independent native/runtime state",
191
+ "unattendedProfile": false
192
+ }
193
+ },
194
+ "grok": {
195
+ "binary": "grok",
196
+ "config": "GROK_HOME/config.toml",
197
+ "authentication": "Shared CLI proxy: custom [model.*] entry with env_key CLIPROXY_API_KEY (Vault); no grok login",
198
+ "proxy": "chat_completions",
199
+ "source": "https://docs.x.ai/build/settings/reference",
200
+ "directEndpoint": "Native vendor/account configuration; no portable endpoint override is applied",
201
+ "capabilities": {
202
+ "streaming": "unverified on fleet nodes",
203
+ "toolCalls": "unverified on fleet nodes",
204
+ "usageTracking": "independent native/runtime state",
205
+ "unattendedProfile": true
206
+ }
207
+ }
208
+ }
209
+ }
@@ -0,0 +1,149 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Personal portable agent registry",
4
+ "type": "object",
5
+ "required": ["version", "defaults", "proxy", "nodes", "tools"],
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "$schema": {
9
+ "type": "string"
10
+ },
11
+ "version": {
12
+ "const": 1
13
+ },
14
+ "defaults": {
15
+ "type": "object"
16
+ },
17
+ "proxy": {
18
+ "type": "object",
19
+ "required": ["models"],
20
+ "properties": {
21
+ "models": {
22
+ "type": "object"
23
+ },
24
+ "accounts": {
25
+ "description": "Tools T3 offers once per signed-in proxy account. Accounts are never listed here: they are discovered from the proxy's model list. provider is the proxy credential type that serves the tool; models are preferred defaults (Claude: opus, sonnet, haiku).",
26
+ "type": "object",
27
+ "additionalProperties": {
28
+ "type": "object",
29
+ "required": ["provider", "models"],
30
+ "additionalProperties": false,
31
+ "properties": {
32
+ "provider": {
33
+ "type": "string",
34
+ "pattern": "^[a-z][a-z0-9]{0,30}$"
35
+ },
36
+ "models": {
37
+ "type": "array",
38
+ "minItems": 1,
39
+ "items": {
40
+ "type": "string",
41
+ "pattern": "^[a-zA-Z0-9_.:+-]+$"
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ },
49
+ "nodes": {
50
+ "type": "object",
51
+ "propertyNames": {
52
+ "pattern": "^[a-z0-9][a-z0-9-]{0,62}$"
53
+ },
54
+ "additionalProperties": {
55
+ "type": "object",
56
+ "additionalProperties": false,
57
+ "properties": {
58
+ "codex": {
59
+ "type": "object",
60
+ "additionalProperties": false,
61
+ "properties": {
62
+ "direct": {
63
+ "type": "string",
64
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
65
+ },
66
+ "proxy": {
67
+ "type": "string",
68
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
69
+ }
70
+ }
71
+ },
72
+ "claude": {
73
+ "type": "object",
74
+ "additionalProperties": false,
75
+ "properties": {
76
+ "direct": {
77
+ "type": "string",
78
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
79
+ },
80
+ "proxy": {
81
+ "type": "string",
82
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
83
+ }
84
+ }
85
+ },
86
+ "opencode": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "properties": {
90
+ "direct": {
91
+ "type": "string",
92
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
93
+ },
94
+ "proxy": {
95
+ "type": "string",
96
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
97
+ }
98
+ }
99
+ },
100
+ "gemini": {
101
+ "type": "object",
102
+ "additionalProperties": false,
103
+ "properties": {
104
+ "direct": {
105
+ "type": "string",
106
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
107
+ },
108
+ "proxy": {
109
+ "type": "string",
110
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
111
+ }
112
+ }
113
+ },
114
+ "grok": {
115
+ "type": "object",
116
+ "additionalProperties": false,
117
+ "properties": {
118
+ "direct": {
119
+ "type": "string",
120
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
121
+ },
122
+ "proxy": {
123
+ "type": "string",
124
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
125
+ }
126
+ }
127
+ },
128
+ "antigravity": {
129
+ "type": "object",
130
+ "additionalProperties": false,
131
+ "properties": {
132
+ "direct": {
133
+ "type": "string",
134
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
135
+ },
136
+ "proxy": {
137
+ "type": "string",
138
+ "pattern": "^[a-zA-Z0-9_./:+-]+$"
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ },
145
+ "tools": {
146
+ "type": "object"
147
+ }
148
+ }
149
+ }
@@ -0,0 +1,158 @@
1
+ # Bugs and feature requests
2
+
3
+ This file ships inside the dev-fleet package. If you are an agent working in
4
+ another project and dev-fleet is wrong or lacks something, do not edit it
5
+ here, in a clone or on a machine. Raise an issue in the dev-fleet repository;
6
+ `devfleet --help` prints the address and `devfleet commands --json` carries
7
+ the rule under `agent.support`.
8
+
9
+ # Manager-led Ubuntu fleet setup
10
+
11
+ For the enrolled Ubuntu development fleet, run on the designated manager:
12
+
13
+ ```sh
14
+ devfleet fleet-sync
15
+ ```
16
+
17
+ Read the [Fleet operator guide](../../fleet/docs/ubuntu-sync.md) for enrollment,
18
+ approved revisions, bootstrap, provider checks and unresolved release gates.
19
+ Routine fleet updates do not require a command sequence on individual nodes.
20
+ The legacy local commands below retain their existing behavior for compatibility.
21
+
22
+ # Developer fleet configuration setup
23
+
24
+ Use **personal** for node and T3 configuration. Workstation and fleet are internal
25
+ implementation packages; neither exports its own executable.
26
+
27
+ `fleet-sync` installs the `devfleet` launcher on every machine it converges,
28
+ linked to the fleet-owned checkout of the applied revision. On such a machine:
29
+
30
+ ```sh
31
+ devfleet fleet-status
32
+ ```
33
+
34
+ `fleet-node-sync` reconciles one machine from a checkout of dev-fleet
35
+ (`--workspace PATH` or `PERSONAL_WORKSPACE` names it). It is for development:
36
+ run from the published package it is refused, because `fleet-sync` does the
37
+ same from a checkout it owns.
38
+ Each machine still needs its own authorized Vault session, SSH keys and T3 pairing.
39
+ The sync never copies them or provisions infrastructure.
40
+
41
+ ## Reconciliation
42
+
43
+ `fleet-node-sync` applies by invocation. It reconciles the locked toolchain, installs
44
+ one `personal` launcher, retires the repository-owned `ws` launcher, upserts the
45
+ Codex proxy profile, and reconciles T3 provider instances. `--dry-run` lists these
46
+ steps without writing or installing. The default node ID is the normalized hostname;
47
+ use `--id NAME` to retain an existing node's registry overrides.
48
+
49
+ The selected revision defaults to checkout HEAD. `--revision FULL_SHA` pins a
50
+ reviewed commit already fetched into that checkout. Deployment uses a clean Git
51
+ worktree and preserves developer edits. For whole-fleet maintenance, use the manager command above; this legacy local route does not orchestrate other nodes. A failed step stops later steps and reports
52
+ partial progress; it never claims authentication or inference was verified.
53
+
54
+ Portable models live in `agents/registry.json`; T3 desired provider instances live
55
+ in `agents/t3.json`. Edit these tracked definitions and deploy a reviewed revision.
56
+ New sessions use the updated configuration. Running sessions are not restarted.
57
+
58
+ ## T3 plan, apply, import and cleanup
59
+
60
+ ```sh
61
+ devfleet t3-apply --dry-run --json
62
+ devfleet t3-apply
63
+ devfleet t3-status
64
+ devfleet t3-cleanup --dry-run
65
+ ```
66
+
67
+ Plans show create/update/delete/unchanged/conflict by instance ID, with no settings
68
+ values or credentials. `devfleet t3-apply --plan-hash HASH` binds apply to the exact
69
+ settings, ownership state, desired definitions and destination reviewed in a plan.
70
+ A stale plan fails. A second apply with identical inputs performs no settings write.
71
+
72
+ A provider instance becomes managed when created by personal, or explicitly imported:
73
+
74
+ ```sh
75
+ devfleet t3-apply --import personal_grok_proxy
76
+ devfleet t3-apply
77
+ ```
78
+
79
+ Import grants ownership of the entire named provider instance. It does not change
80
+ its settings immediately. Subsequent applies reconcile that instance to the tracked
81
+ definition, including removal of extra fields. Existing unowned instances cause a
82
+ conflict, even when their names match. Unrelated instances and settings are preserved.
83
+
84
+ Removing an instance from the desired definition removes it on the next apply.
85
+ `devfleet t3-cleanup` removes **all owned provider instances** while retaining
86
+ threads, projects, pairing, native provider instances, credentials and profile files.
87
+ It does not delete T3's data directory or secret store. Historical threads may need
88
+ a replacement provider selected after their managed instance is removed.
89
+
90
+ `--t3-home PATH` selects a T3 base directory (otherwise T3CODE_HOME or ~/.t3).
91
+ `--definition FILE` selects a version-1 desired definition. Supported interpolation
92
+ is `${workspace}`, `${agents}` and `${node}`. The current schema deliberately supports
93
+ the verified Codex proxy adapter fields; it rejects inline credential definitions.
94
+ T3 proxy execution requires macOS/Linux/WSL; native Windows execution is unverified.
95
+
96
+ ## State and concurrency
97
+
98
+ T3 owns `userdata/settings.json`. Personal merges only its declared instances and
99
+ stores IDs in `userdata/personal-managed.json`, with mode 0600. Private settings and
100
+ state backups sit beside that file. They may contain existing secret references or
101
+ values and must never enter Git or reports. Symlink/malformed destinations fail.
102
+
103
+ Personal operations use an exclusive lock, atomic replacement, pre-write freshness
104
+ checks and post-write verification. T3's own theme CLI uses the same optimistic
105
+ external-file update pattern; T3 does not honor personal's lock. Avoid concurrent
106
+ Settings edits during apply: there is no cross-process atomic compare-and-swap with
107
+ T3. No strict transaction across application and ownership files is claimed. Ownership
108
+ intent is saved before settings so interrupted creates/removals can be retried.
109
+ Inspect interrupted operations before removing a stale `.lock` directory.
110
+
111
+ T3's installed server source at revision
112
+ `322f6544dfad0a3c8a0c8cbecf2c7f7874b14268` was inspected for provider-instance shape,
113
+ external settings watch/reload, and optimistic CLI writes. Future T3 schema changes
114
+ require adapter verification. A disk-level success is not a live inference test.
115
+
116
+ ## Supported alternatives
117
+
118
+ `PROVIDER_PROTOCOL_INCOMPATIBLE` means the gateway answered that it has no
119
+ endpoint, method or media type for the protocol a route speaks (HTTP 404, 405,
120
+ 415 or 501). The route as declared cannot work, so the check fails and the
121
+ sync exits nonzero; signing in again or retrying changes nothing. Nothing on
122
+ the machine is changed to work around it.
123
+
124
+ The protocol a tool speaks to the proxy is its `proxy` field in
125
+ `agents/registry.json` (`responses`, `messages`, `generateContent` or
126
+ `chat_completions`). The supported alternatives, in this order:
127
+
128
+ 1. A model the proxy lists at `/v1/models` for the same protocol: change the
129
+ tool's model in `agents/registry.json`.
130
+ 2. Another protocol the tool's own CLI speaks and the pinned proxy serves.
131
+ `chat_completions` is served for OpenAI-compatible clients such as
132
+ OpenCode and Grok.
133
+ 3. The tool's direct profile, signed in natively on that machine, instead of
134
+ the shared proxy.
135
+
136
+ Each is a reviewed change to a tracked file, followed by `devfleet
137
+ fleet-sync`. A newer CLIProxyAPI is a reviewed change to
138
+ `cliproxy/image.lock.json`; a sync never upgrades it to get around a failure.
139
+
140
+ A model that is merely missing from the catalog is `PROVIDER_MODEL_UNAVAILABLE`
141
+ instead: a warning, because it is usually the provider account's (billing or
142
+ access), not the route's.
143
+
144
+ ## Other local operations
145
+
146
+ All former workstation operations are available through `dev-fleet`:
147
+
148
+ ```sh
149
+ dev-fleet tools check --json
150
+ bun src/agents/cli.ts agents verify --node NODE --tool codex --profile proxy --json
151
+ dev-fleet opencode sync
152
+ dev-fleet net check
153
+ ```
154
+
155
+ `devfleet fleet-status` diagnoses the manager and registered remote nodes.
156
+ `devfleet fleet-discover` lists visible Tailscale computers. The local SSH roster
157
+ still requires real aliases and checkout paths; discovery never guesses these.
158
+ Use `personal commands --json` to discover the complete interface.
package/agents/t3.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "version": 1,
3
+ "instances": {
4
+ "personal_gateway_models": {
5
+ "driver": "opencode",
6
+ "displayName": "OpenCode CLI Proxy",
7
+ "enabled": true,
8
+ "config": {
9
+ "binaryPath": "${workspace}/agents/opencode-proxy.ts"
10
+ },
11
+ "environment": [
12
+ {
13
+ "name": "WS_AGENT_NODE",
14
+ "value": "${node}",
15
+ "sensitive": false
16
+ }
17
+ ]
18
+ },
19
+ "personal_grok_proxy": {
20
+ "driver": "grok",
21
+ "displayName": "Grok CLI Proxy",
22
+ "enabled": true,
23
+ "config": {
24
+ "binaryPath": "${workspace}/agents/grok-proxy.ts"
25
+ },
26
+ "environment": [
27
+ {
28
+ "name": "WS_AGENT_NODE",
29
+ "value": "${node}",
30
+ "sensitive": false
31
+ },
32
+ {
33
+ "name": "XAI_API_KEY",
34
+ "value": "fleet-cli-proxy",
35
+ "sensitive": false
36
+ }
37
+ ]
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,30 @@
1
+ ---
2
+ # Manager power policy. Workers depend on the manager's singleton services
3
+ # (CLI proxy, Beszel hub), so the manager never sleeps on AC power. Sleep on
4
+ # battery is left to the human. The settings are the `pmset` object in
5
+ # policy.json; fleet-sync measures the same object as manager:power. Changing
6
+ # them needs an administrator: ansible-playbook -K manager.yml
7
+ - name: Keep the fleet manager awake on AC power
8
+ hosts: localhost
9
+ connection: local
10
+ become: true
11
+ gather_facts: false
12
+ vars_files:
13
+ - policy.json
14
+ tasks:
15
+ - name: Inspect effective power management settings
16
+ ansible.builtin.command:
17
+ argv: [/usr/bin/pmset, -g, custom]
18
+ changed_when: false
19
+ register: pmset_custom
20
+ - name: Apply the declared AC power settings
21
+ ansible.builtin.command:
22
+ argv: [/usr/bin/pmset, -c, '{{ item.key }}', '{{ item.value }}']
23
+ loop: '{{ pmset | dict2items }}'
24
+ loop_control:
25
+ label: '{{ item.key }}'
26
+ vars:
27
+ ac_section: "{{ pmset_custom.stdout.split('AC Power:') | last }}"
28
+ observed: "{{ ac_section | regex_findall('^\\s*' ~ item.key ~ '\\s+(\\S+)', multiline=True) | first | default('') }}"
29
+ when: observed != item.value
30
+ changed_when: true
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 1,
3
+ "minimumMajorVersion": 14,
4
+ "pmset": {
5
+ "sleep": "0",
6
+ "womp": "1"
7
+ },
8
+ "beszelDaemon": "dev.devfleet.beszel-agent"
9
+ }