@phnx-labs/agents-cli 1.12.0 → 1.14.2

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 (496) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +308 -297
  3. package/dist/commands/alias.d.ts +11 -0
  4. package/dist/commands/alias.js +117 -0
  5. package/dist/commands/beta.d.ts +2 -0
  6. package/dist/commands/beta.js +53 -0
  7. package/dist/commands/cloud.d.ts +10 -0
  8. package/dist/commands/cloud.js +408 -0
  9. package/dist/commands/commands.d.ts +9 -1
  10. package/dist/commands/commands.js +24 -172
  11. package/dist/commands/daemon.d.ts +8 -1
  12. package/dist/commands/daemon.js +13 -5
  13. package/dist/commands/doctor.d.ts +15 -0
  14. package/dist/commands/doctor.js +132 -0
  15. package/dist/commands/drive.d.ts +8 -1
  16. package/dist/commands/drive.js +20 -3
  17. package/dist/commands/exec.d.ts +8 -1
  18. package/dist/commands/exec.js +207 -20
  19. package/dist/commands/factory.d.ts +19 -0
  20. package/dist/commands/factory.js +71 -0
  21. package/dist/commands/fork.d.ts +8 -1
  22. package/dist/commands/fork.js +11 -4
  23. package/dist/commands/hooks.d.ts +9 -1
  24. package/dist/commands/hooks.js +30 -182
  25. package/dist/commands/init.d.ts +15 -1
  26. package/dist/commands/init.js +168 -74
  27. package/dist/commands/mcp.d.ts +9 -1
  28. package/dist/commands/mcp.js +11 -7
  29. package/dist/commands/models.d.ts +8 -1
  30. package/dist/commands/models.js +45 -6
  31. package/dist/commands/packages.d.ts +8 -1
  32. package/dist/commands/packages.js +13 -7
  33. package/dist/commands/permissions.d.ts +9 -1
  34. package/dist/commands/permissions.js +3 -3
  35. package/dist/commands/plugins.d.ts +8 -1
  36. package/dist/commands/plugins.js +13 -2
  37. package/dist/commands/profiles.d.ts +11 -0
  38. package/dist/commands/profiles.js +291 -0
  39. package/dist/commands/prune.d.ts +22 -0
  40. package/dist/commands/prune.js +191 -0
  41. package/dist/commands/pty.d.ts +1 -1
  42. package/dist/commands/pty.js +2 -1
  43. package/dist/commands/pull.d.ts +8 -1
  44. package/dist/commands/pull.js +93 -129
  45. package/dist/commands/refresh-memory.d.ts +7 -1
  46. package/dist/commands/refresh-memory.js +7 -1
  47. package/dist/commands/repo.d.ts +15 -0
  48. package/dist/commands/repo.js +570 -0
  49. package/dist/commands/resource-view.d.ts +10 -3
  50. package/dist/commands/resource-view.js +18 -5
  51. package/dist/commands/routines.d.ts +8 -1
  52. package/dist/commands/routines.js +17 -4
  53. package/dist/commands/rules.d.ts +9 -1
  54. package/dist/commands/rules.js +16 -11
  55. package/dist/commands/secrets.d.ts +10 -0
  56. package/dist/commands/secrets.js +518 -0
  57. package/dist/commands/sessions-picker.d.ts +2 -1
  58. package/dist/commands/sessions-picker.js +88 -11
  59. package/dist/commands/sessions-tail.d.ts +19 -0
  60. package/dist/commands/sessions-tail.js +235 -0
  61. package/dist/commands/sessions.d.ts +2 -1
  62. package/dist/commands/sessions.js +288 -7
  63. package/dist/commands/skills.d.ts +9 -1
  64. package/dist/commands/skills.js +28 -178
  65. package/dist/commands/status.d.ts +7 -1
  66. package/dist/commands/status.js +7 -1
  67. package/dist/commands/subagents.d.ts +8 -1
  68. package/dist/commands/subagents.js +11 -1
  69. package/dist/commands/sync.d.ts +8 -1
  70. package/dist/commands/sync.js +8 -1
  71. package/dist/commands/teams-picker.d.ts +4 -1
  72. package/dist/commands/teams-picker.js +55 -3
  73. package/dist/commands/teams.d.ts +15 -1
  74. package/dist/commands/teams.js +323 -69
  75. package/dist/commands/usage.d.ts +11 -0
  76. package/dist/commands/usage.js +60 -0
  77. package/dist/commands/utils.d.ts +6 -1
  78. package/dist/commands/utils.js +6 -1
  79. package/dist/commands/versions.d.ts +8 -1
  80. package/dist/commands/versions.js +4 -3
  81. package/dist/commands/view.d.ts +47 -2
  82. package/dist/commands/view.js +353 -20
  83. package/dist/index.d.ts +7 -2
  84. package/dist/index.js +205 -38
  85. package/dist/lib/acp/client.d.ts +31 -0
  86. package/dist/lib/acp/client.js +117 -0
  87. package/dist/lib/acp/harnesses.d.ts +26 -0
  88. package/dist/lib/acp/harnesses.js +65 -0
  89. package/dist/lib/acp/run.d.ts +18 -0
  90. package/dist/lib/acp/run.js +39 -0
  91. package/dist/lib/agents.d.ts +74 -2
  92. package/dist/lib/agents.js +207 -23
  93. package/dist/lib/artifact-actions.d.ts +8 -4
  94. package/dist/lib/artifact-actions.js +8 -6
  95. package/dist/lib/auto-pull-worker.d.ts +11 -0
  96. package/dist/lib/auto-pull-worker.js +121 -0
  97. package/dist/lib/auto-pull.d.ts +31 -0
  98. package/dist/lib/auto-pull.js +97 -0
  99. package/dist/lib/beta.d.ts +23 -0
  100. package/dist/lib/beta.js +90 -0
  101. package/dist/lib/capabilities.d.ts +29 -0
  102. package/dist/lib/capabilities.js +74 -0
  103. package/dist/lib/cloud/codex.d.ts +25 -0
  104. package/dist/lib/cloud/codex.js +250 -0
  105. package/dist/lib/cloud/factory.d.ts +31 -0
  106. package/dist/lib/cloud/factory.js +53 -0
  107. package/dist/lib/cloud/registry.d.ts +15 -0
  108. package/dist/lib/cloud/registry.js +67 -0
  109. package/dist/lib/cloud/rush.d.ts +75 -0
  110. package/dist/lib/cloud/rush.js +438 -0
  111. package/dist/lib/cloud/store.d.ts +22 -0
  112. package/dist/lib/cloud/store.js +115 -0
  113. package/dist/lib/cloud/stream.d.ts +23 -0
  114. package/dist/lib/cloud/stream.js +194 -0
  115. package/dist/lib/cloud/types.d.ts +205 -0
  116. package/dist/lib/cloud/types.js +34 -0
  117. package/dist/lib/command-skills.d.ts +20 -0
  118. package/dist/lib/command-skills.js +142 -0
  119. package/dist/lib/commands.d.ts +22 -2
  120. package/dist/lib/commands.js +51 -11
  121. package/dist/lib/convert.d.ts +10 -1
  122. package/dist/lib/convert.js +9 -1
  123. package/dist/lib/daemon.d.ts +21 -1
  124. package/dist/lib/daemon.js +97 -4
  125. package/dist/lib/drive-sync.d.ts +18 -1
  126. package/dist/lib/drive-sync.js +57 -15
  127. package/dist/lib/exec.d.ts +25 -5
  128. package/dist/lib/exec.js +72 -27
  129. package/dist/lib/fs-walk.d.ts +2 -0
  130. package/dist/lib/fs-walk.js +40 -0
  131. package/dist/lib/fuzzy.d.ts +53 -0
  132. package/dist/lib/fuzzy.js +72 -0
  133. package/dist/lib/gemini-settings.d.ts +4 -0
  134. package/dist/lib/gemini-settings.js +33 -0
  135. package/dist/lib/git.d.ts +12 -2
  136. package/dist/lib/git.js +17 -6
  137. package/dist/lib/help.d.ts +20 -1
  138. package/dist/lib/help.js +45 -6
  139. package/dist/lib/hooks/match.d.ts +32 -0
  140. package/dist/lib/hooks/match.js +120 -0
  141. package/dist/lib/hooks.d.ts +17 -4
  142. package/dist/lib/hooks.js +191 -21
  143. package/dist/lib/manifest.d.ts +6 -1
  144. package/dist/lib/manifest.js +15 -4
  145. package/dist/lib/markdown.d.ts +0 -1
  146. package/dist/lib/markdown.js +6 -1
  147. package/dist/lib/mcp.d.ts +0 -1
  148. package/dist/lib/mcp.js +29 -33
  149. package/dist/lib/memory-compile.d.ts +13 -3
  150. package/dist/lib/memory-compile.js +31 -9
  151. package/dist/lib/memory.d.ts +14 -7
  152. package/dist/lib/memory.js +67 -38
  153. package/dist/lib/migrate.d.ts +8 -0
  154. package/dist/lib/migrate.js +85 -0
  155. package/dist/lib/models.d.ts +25 -11
  156. package/dist/lib/models.js +405 -16
  157. package/dist/lib/onepassword.d.ts +63 -0
  158. package/dist/lib/onepassword.js +186 -0
  159. package/dist/lib/paths.d.ts +8 -0
  160. package/dist/lib/paths.js +20 -0
  161. package/dist/lib/permissions.d.ts +24 -2
  162. package/dist/lib/permissions.js +117 -48
  163. package/dist/lib/picker.d.ts +10 -1
  164. package/dist/lib/picker.js +15 -1
  165. package/dist/lib/plugins.d.ts +7 -1
  166. package/dist/lib/plugins.js +10 -1
  167. package/dist/lib/profiles-presets.d.ts +24 -0
  168. package/dist/lib/profiles-presets.js +103 -0
  169. package/dist/lib/profiles.d.ts +69 -0
  170. package/dist/lib/profiles.js +144 -0
  171. package/dist/lib/pty-client.d.ts +1 -1
  172. package/dist/lib/pty-client.js +0 -1
  173. package/dist/lib/pty-server.d.ts +16 -2
  174. package/dist/lib/pty-server.js +92 -3
  175. package/dist/lib/registry.d.ts +23 -3
  176. package/dist/lib/registry.js +153 -8
  177. package/dist/lib/resources.d.ts +28 -1
  178. package/dist/lib/resources.js +79 -1
  179. package/dist/lib/rotate.d.ts +89 -0
  180. package/dist/lib/rotate.js +327 -0
  181. package/dist/lib/routines.d.ts +29 -1
  182. package/dist/lib/routines.js +32 -5
  183. package/dist/lib/runner.d.ts +14 -1
  184. package/dist/lib/runner.js +22 -3
  185. package/dist/lib/sandbox.d.ts +16 -1
  186. package/dist/lib/sandbox.js +39 -16
  187. package/dist/lib/scheduler.d.ts +8 -1
  188. package/dist/lib/scheduler.js +8 -1
  189. package/dist/lib/secrets/AgentsKeychain.app/Contents/CodeResources +0 -0
  190. package/dist/lib/secrets/AgentsKeychain.app/Contents/Info.plist +22 -0
  191. package/dist/lib/secrets/AgentsKeychain.app/Contents/MacOS/AgentsKeychain +0 -0
  192. package/dist/lib/secrets/AgentsKeychain.app/Contents/_CodeSignature/CodeResources +123 -0
  193. package/dist/lib/secrets/AgentsKeychain.app/Contents/embedded.provisionprofile +0 -0
  194. package/dist/lib/secrets/bundles.d.ts +39 -0
  195. package/dist/lib/secrets/bundles.js +189 -0
  196. package/dist/lib/secrets/index.d.ts +55 -0
  197. package/dist/lib/secrets/index.js +211 -0
  198. package/dist/lib/secrets/profiles.d.ts +10 -0
  199. package/dist/lib/secrets/profiles.js +13 -0
  200. package/dist/lib/session/active.d.ts +43 -0
  201. package/dist/lib/session/active.js +392 -0
  202. package/dist/lib/session/artifacts.d.ts +16 -0
  203. package/dist/lib/session/artifacts.js +95 -0
  204. package/dist/lib/session/cloud.d.ts +30 -0
  205. package/dist/lib/session/cloud.js +121 -0
  206. package/dist/lib/session/db.d.ts +23 -2
  207. package/dist/lib/session/db.js +76 -12
  208. package/dist/lib/session/discover.d.ts +19 -4
  209. package/dist/lib/session/discover.js +344 -48
  210. package/dist/lib/session/parse.d.ts +28 -1
  211. package/dist/lib/session/parse.js +267 -9
  212. package/dist/lib/session/prompt.d.ts +9 -1
  213. package/dist/lib/session/prompt.js +17 -3
  214. package/dist/lib/session/render.d.ts +13 -1
  215. package/dist/lib/session/render.js +20 -1
  216. package/dist/lib/session/team-filter.d.ts +9 -1
  217. package/dist/lib/session/team-filter.js +11 -2
  218. package/dist/lib/session/types.d.ts +24 -2
  219. package/dist/lib/session/types.js +10 -2
  220. package/dist/lib/shims.d.ts +93 -5
  221. package/dist/lib/shims.js +380 -67
  222. package/dist/lib/skills.d.ts +27 -2
  223. package/dist/lib/skills.js +127 -65
  224. package/dist/lib/sqlite.d.ts +43 -0
  225. package/dist/lib/sqlite.js +94 -0
  226. package/dist/lib/state.d.ts +114 -22
  227. package/dist/lib/state.js +323 -138
  228. package/dist/lib/subagents.d.ts +9 -1
  229. package/dist/lib/subagents.js +70 -63
  230. package/dist/lib/sync-manifest.d.ts +81 -0
  231. package/dist/lib/sync-manifest.js +450 -0
  232. package/dist/lib/teams/agents.d.ts +103 -5
  233. package/dist/lib/teams/agents.js +414 -91
  234. package/dist/lib/teams/api.d.ts +26 -3
  235. package/dist/lib/teams/api.js +63 -3
  236. package/dist/lib/teams/debug.d.ts +6 -1
  237. package/dist/lib/teams/debug.js +6 -1
  238. package/dist/lib/teams/file_ops.d.ts +7 -1
  239. package/dist/lib/teams/file_ops.js +7 -1
  240. package/dist/lib/teams/index.d.ts +15 -0
  241. package/dist/lib/teams/index.js +14 -0
  242. package/dist/lib/teams/parsers.d.ts +4 -1
  243. package/dist/lib/teams/parsers.js +11 -1
  244. package/dist/lib/teams/persistence.d.ts +15 -1
  245. package/dist/lib/teams/persistence.js +102 -20
  246. package/dist/lib/teams/registry.d.ts +12 -1
  247. package/dist/lib/teams/registry.js +116 -33
  248. package/dist/lib/teams/summarizer.d.ts +15 -1
  249. package/dist/lib/teams/summarizer.js +14 -1
  250. package/dist/lib/teams/supervisor.d.ts +48 -0
  251. package/dist/lib/teams/supervisor.js +73 -0
  252. package/dist/lib/template.d.ts +8 -6
  253. package/dist/lib/template.js +8 -6
  254. package/dist/lib/types.d.ts +147 -8
  255. package/dist/lib/types.js +26 -3
  256. package/dist/lib/usage.d.ts +48 -1
  257. package/dist/lib/usage.js +97 -16
  258. package/dist/lib/version-duplicates.d.ts +21 -0
  259. package/dist/lib/version-duplicates.js +90 -0
  260. package/dist/lib/versions.d.ts +39 -4
  261. package/dist/lib/versions.js +401 -111
  262. package/package.json +33 -18
  263. package/scripts/postinstall.js +126 -30
  264. package/dist/commands/__tests__/sessions.test.d.ts +0 -2
  265. package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
  266. package/dist/commands/__tests__/sessions.test.js +0 -636
  267. package/dist/commands/__tests__/sessions.test.js.map +0 -1
  268. package/dist/commands/commands.d.ts.map +0 -1
  269. package/dist/commands/commands.js.map +0 -1
  270. package/dist/commands/daemon.d.ts.map +0 -1
  271. package/dist/commands/daemon.js.map +0 -1
  272. package/dist/commands/drive.d.ts.map +0 -1
  273. package/dist/commands/drive.js.map +0 -1
  274. package/dist/commands/exec.d.ts.map +0 -1
  275. package/dist/commands/exec.js.map +0 -1
  276. package/dist/commands/fork.d.ts.map +0 -1
  277. package/dist/commands/fork.js.map +0 -1
  278. package/dist/commands/hooks.d.ts.map +0 -1
  279. package/dist/commands/hooks.js.map +0 -1
  280. package/dist/commands/init.d.ts.map +0 -1
  281. package/dist/commands/init.js.map +0 -1
  282. package/dist/commands/mcp.d.ts.map +0 -1
  283. package/dist/commands/mcp.js.map +0 -1
  284. package/dist/commands/models.d.ts.map +0 -1
  285. package/dist/commands/models.js.map +0 -1
  286. package/dist/commands/packages.d.ts.map +0 -1
  287. package/dist/commands/packages.js.map +0 -1
  288. package/dist/commands/permissions.d.ts.map +0 -1
  289. package/dist/commands/permissions.js.map +0 -1
  290. package/dist/commands/plugins.d.ts.map +0 -1
  291. package/dist/commands/plugins.js.map +0 -1
  292. package/dist/commands/pty.d.ts.map +0 -1
  293. package/dist/commands/pty.js.map +0 -1
  294. package/dist/commands/pull.d.ts.map +0 -1
  295. package/dist/commands/pull.js.map +0 -1
  296. package/dist/commands/push.d.ts +0 -3
  297. package/dist/commands/push.d.ts.map +0 -1
  298. package/dist/commands/push.js +0 -180
  299. package/dist/commands/push.js.map +0 -1
  300. package/dist/commands/refresh-memory.d.ts.map +0 -1
  301. package/dist/commands/refresh-memory.js.map +0 -1
  302. package/dist/commands/resource-view.d.ts.map +0 -1
  303. package/dist/commands/resource-view.js.map +0 -1
  304. package/dist/commands/routines.d.ts.map +0 -1
  305. package/dist/commands/routines.js.map +0 -1
  306. package/dist/commands/rules.d.ts.map +0 -1
  307. package/dist/commands/rules.js.map +0 -1
  308. package/dist/commands/sessions-picker.d.ts.map +0 -1
  309. package/dist/commands/sessions-picker.js.map +0 -1
  310. package/dist/commands/sessions.d.ts.map +0 -1
  311. package/dist/commands/sessions.js.map +0 -1
  312. package/dist/commands/skills.d.ts.map +0 -1
  313. package/dist/commands/skills.js.map +0 -1
  314. package/dist/commands/status.d.ts.map +0 -1
  315. package/dist/commands/status.js.map +0 -1
  316. package/dist/commands/subagents.d.ts.map +0 -1
  317. package/dist/commands/subagents.js.map +0 -1
  318. package/dist/commands/sync.d.ts.map +0 -1
  319. package/dist/commands/sync.js.map +0 -1
  320. package/dist/commands/teams-picker.d.ts.map +0 -1
  321. package/dist/commands/teams-picker.js.map +0 -1
  322. package/dist/commands/teams.d.ts.map +0 -1
  323. package/dist/commands/teams.js.map +0 -1
  324. package/dist/commands/utils.d.ts.map +0 -1
  325. package/dist/commands/utils.js.map +0 -1
  326. package/dist/commands/versions.d.ts.map +0 -1
  327. package/dist/commands/versions.js.map +0 -1
  328. package/dist/commands/view.d.ts.map +0 -1
  329. package/dist/commands/view.js.map +0 -1
  330. package/dist/index.d.ts.map +0 -1
  331. package/dist/index.js.map +0 -1
  332. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  333. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  334. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  335. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  336. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  337. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  338. package/dist/lib/__tests__/exec.test.js +0 -446
  339. package/dist/lib/__tests__/exec.test.js.map +0 -1
  340. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  341. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  342. package/dist/lib/__tests__/git-sync.test.js +0 -138
  343. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  344. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  345. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  346. package/dist/lib/__tests__/hooks.test.js +0 -203
  347. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  348. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  349. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  350. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  351. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  352. package/dist/lib/__tests__/models.test.d.ts +0 -2
  353. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  354. package/dist/lib/__tests__/models.test.js +0 -184
  355. package/dist/lib/__tests__/models.test.js.map +0 -1
  356. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  357. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  358. package/dist/lib/__tests__/usage.test.js +0 -218
  359. package/dist/lib/__tests__/usage.test.js.map +0 -1
  360. package/dist/lib/agents.d.ts.map +0 -1
  361. package/dist/lib/agents.js.map +0 -1
  362. package/dist/lib/artifact-actions.d.ts.map +0 -1
  363. package/dist/lib/artifact-actions.js.map +0 -1
  364. package/dist/lib/commands.d.ts.map +0 -1
  365. package/dist/lib/commands.js.map +0 -1
  366. package/dist/lib/convert.d.ts.map +0 -1
  367. package/dist/lib/convert.js.map +0 -1
  368. package/dist/lib/daemon.d.ts.map +0 -1
  369. package/dist/lib/daemon.js.map +0 -1
  370. package/dist/lib/drive-sync.d.ts.map +0 -1
  371. package/dist/lib/drive-sync.js.map +0 -1
  372. package/dist/lib/exec.d.ts.map +0 -1
  373. package/dist/lib/exec.js.map +0 -1
  374. package/dist/lib/factory.d.ts +0 -57
  375. package/dist/lib/factory.d.ts.map +0 -1
  376. package/dist/lib/factory.js +0 -110
  377. package/dist/lib/factory.js.map +0 -1
  378. package/dist/lib/git.d.ts.map +0 -1
  379. package/dist/lib/git.js.map +0 -1
  380. package/dist/lib/help.d.ts.map +0 -1
  381. package/dist/lib/help.js.map +0 -1
  382. package/dist/lib/hooks.d.ts.map +0 -1
  383. package/dist/lib/hooks.js.map +0 -1
  384. package/dist/lib/manifest.d.ts.map +0 -1
  385. package/dist/lib/manifest.js.map +0 -1
  386. package/dist/lib/markdown.d.ts.map +0 -1
  387. package/dist/lib/markdown.js.map +0 -1
  388. package/dist/lib/mcp.d.ts.map +0 -1
  389. package/dist/lib/mcp.js.map +0 -1
  390. package/dist/lib/memory-compile.d.ts.map +0 -1
  391. package/dist/lib/memory-compile.js.map +0 -1
  392. package/dist/lib/memory.d.ts.map +0 -1
  393. package/dist/lib/memory.js.map +0 -1
  394. package/dist/lib/models.d.ts.map +0 -1
  395. package/dist/lib/models.js.map +0 -1
  396. package/dist/lib/permissions.d.ts.map +0 -1
  397. package/dist/lib/permissions.js.map +0 -1
  398. package/dist/lib/picker.d.ts.map +0 -1
  399. package/dist/lib/picker.js.map +0 -1
  400. package/dist/lib/plugins.d.ts.map +0 -1
  401. package/dist/lib/plugins.js.map +0 -1
  402. package/dist/lib/pty-client.d.ts.map +0 -1
  403. package/dist/lib/pty-client.js.map +0 -1
  404. package/dist/lib/pty-server.d.ts.map +0 -1
  405. package/dist/lib/pty-server.js.map +0 -1
  406. package/dist/lib/registry.d.ts.map +0 -1
  407. package/dist/lib/registry.js.map +0 -1
  408. package/dist/lib/resources.d.ts.map +0 -1
  409. package/dist/lib/resources.js.map +0 -1
  410. package/dist/lib/routines.d.ts.map +0 -1
  411. package/dist/lib/routines.js.map +0 -1
  412. package/dist/lib/runner.d.ts.map +0 -1
  413. package/dist/lib/runner.js.map +0 -1
  414. package/dist/lib/sandbox.d.ts.map +0 -1
  415. package/dist/lib/sandbox.js.map +0 -1
  416. package/dist/lib/scheduler.d.ts.map +0 -1
  417. package/dist/lib/scheduler.js.map +0 -1
  418. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  419. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  420. package/dist/lib/session/__tests__/db.test.js +0 -54
  421. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  422. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  423. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  424. package/dist/lib/session/__tests__/discover.test.js +0 -63
  425. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  426. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  427. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  428. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  429. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  430. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  431. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  432. package/dist/lib/session/__tests__/render.test.js +0 -602
  433. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  434. package/dist/lib/session/db.d.ts.map +0 -1
  435. package/dist/lib/session/db.js.map +0 -1
  436. package/dist/lib/session/discover.d.ts.map +0 -1
  437. package/dist/lib/session/discover.js.map +0 -1
  438. package/dist/lib/session/parse.d.ts.map +0 -1
  439. package/dist/lib/session/parse.js.map +0 -1
  440. package/dist/lib/session/prompt.d.ts.map +0 -1
  441. package/dist/lib/session/prompt.js.map +0 -1
  442. package/dist/lib/session/prompt.test.d.ts +0 -2
  443. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  444. package/dist/lib/session/prompt.test.js +0 -57
  445. package/dist/lib/session/prompt.test.js.map +0 -1
  446. package/dist/lib/session/render.d.ts.map +0 -1
  447. package/dist/lib/session/render.js.map +0 -1
  448. package/dist/lib/session/team-filter.d.ts.map +0 -1
  449. package/dist/lib/session/team-filter.js.map +0 -1
  450. package/dist/lib/session/team-filter.test.d.ts +0 -2
  451. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  452. package/dist/lib/session/team-filter.test.js +0 -157
  453. package/dist/lib/session/team-filter.test.js.map +0 -1
  454. package/dist/lib/session/types.d.ts.map +0 -1
  455. package/dist/lib/session/types.js.map +0 -1
  456. package/dist/lib/shims.d.ts.map +0 -1
  457. package/dist/lib/shims.js.map +0 -1
  458. package/dist/lib/skills.d.ts.map +0 -1
  459. package/dist/lib/skills.js.map +0 -1
  460. package/dist/lib/state.d.ts.map +0 -1
  461. package/dist/lib/state.js.map +0 -1
  462. package/dist/lib/subagents.d.ts.map +0 -1
  463. package/dist/lib/subagents.js.map +0 -1
  464. package/dist/lib/teams/agents.d.ts.map +0 -1
  465. package/dist/lib/teams/agents.js.map +0 -1
  466. package/dist/lib/teams/api.d.ts.map +0 -1
  467. package/dist/lib/teams/api.js.map +0 -1
  468. package/dist/lib/teams/cloud.d.ts +0 -11
  469. package/dist/lib/teams/cloud.d.ts.map +0 -1
  470. package/dist/lib/teams/cloud.js +0 -169
  471. package/dist/lib/teams/cloud.js.map +0 -1
  472. package/dist/lib/teams/debug.d.ts.map +0 -1
  473. package/dist/lib/teams/debug.js.map +0 -1
  474. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  475. package/dist/lib/teams/file_ops.js.map +0 -1
  476. package/dist/lib/teams/parsers.d.ts.map +0 -1
  477. package/dist/lib/teams/parsers.js.map +0 -1
  478. package/dist/lib/teams/persistence.d.ts.map +0 -1
  479. package/dist/lib/teams/persistence.js.map +0 -1
  480. package/dist/lib/teams/ralph.d.ts +0 -8
  481. package/dist/lib/teams/ralph.d.ts.map +0 -1
  482. package/dist/lib/teams/ralph.js +0 -59
  483. package/dist/lib/teams/ralph.js.map +0 -1
  484. package/dist/lib/teams/registry.d.ts.map +0 -1
  485. package/dist/lib/teams/registry.js.map +0 -1
  486. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  487. package/dist/lib/teams/summarizer.js.map +0 -1
  488. package/dist/lib/template.d.ts.map +0 -1
  489. package/dist/lib/template.js.map +0 -1
  490. package/dist/lib/types.d.ts.map +0 -1
  491. package/dist/lib/types.js.map +0 -1
  492. package/dist/lib/usage.d.ts.map +0 -1
  493. package/dist/lib/usage.js.map +0 -1
  494. package/dist/lib/versions.d.ts.map +0 -1
  495. package/dist/lib/versions.js.map +0 -1
  496. package/scripts/rebuild-sqlite.sh +0 -46
package/README.md CHANGED
@@ -1,455 +1,466 @@
1
- # agents
2
-
3
- [![npm version](https://img.shields.io/npm/v/@phnx-labs/agents-cli.svg?style=flat-square)](https://www.npmjs.com/package/@phnx-labs/agents-cli)
4
- [![license](https://img.shields.io/npm/l/@phnx-labs/agents-cli.svg?style=flat-square)](./LICENSE)
5
- [![downloads](https://img.shields.io/npm/dm/@phnx-labs/agents-cli.svg?style=flat-square)](https://www.npmjs.com/package/@phnx-labs/agents-cli)
6
- [![homepage](https://img.shields.io/badge/homepage-agents--cli.sh-blue?style=flat-square)](https://agents-cli.sh)
7
-
8
- **The open client for AI coding agents.** Run Claude, Codex, Gemini, Cursor — same interface, on your machine.
9
-
10
- Pin versions per project. Install skills, MCP servers, and slash commands once — every agent gets them. Chain agents in pipelines. Put agents on a team to work a shared task in parallel.
1
+ <p align="center">
2
+ <img src="assets/logo.png" alt="agents" width="120" />
3
+ </p>
4
+
5
+ <h1 align="center">agents</h1>
6
+
7
+ <p align="center">
8
+ <a href="https://www.npmjs.com/package/@phnx-labs/agents-cli"><img src="https://img.shields.io/npm/v/@phnx-labs/agents-cli.svg?style=flat-square" alt="npm version" /></a>
9
+ <a href="./LICENSE"><img src="https://img.shields.io/npm/l/@phnx-labs/agents-cli.svg?style=flat-square" alt="license" /></a>
10
+ <a href="https://www.npmjs.com/package/@phnx-labs/agents-cli"><img src="https://img.shields.io/npm/dm/@phnx-labs/agents-cli.svg?style=flat-square" alt="downloads" /></a>
11
+ <a href="https://github.com/phnx-labs/agents-cli"><img src="https://img.shields.io/badge/github-phnx--labs%2Fagents--cli-blue?style=flat-square" alt="github" /></a>
12
+ </p>
13
+
14
+ **The missing toolchain for CLI coding agents.** Pin versions to escape regressions. Build hooks to control agent behavior, or skills to improve them. Then share your agent environment with your team, or clone it to any machine with one command.
15
+
16
+ <p align="center">
17
+ <a href="https://github.com/anthropics/claude-code" title="Claude Code"><img src="assets/harnesses/anthropic.svg" height="32" alt="Claude Code" /></a>
18
+ &nbsp;&nbsp;&nbsp;&nbsp;
19
+ <a href="https://github.com/openai/codex" title="Codex CLI"><img src="assets/harnesses/openai.svg" height="32" alt="Codex CLI" /></a>
20
+ &nbsp;&nbsp;&nbsp;&nbsp;
21
+ <a href="https://github.com/google-gemini/gemini-cli" title="Gemini CLI"><img src="assets/harnesses/google.svg" height="32" alt="Gemini CLI" /></a>
22
+ &nbsp;&nbsp;&nbsp;&nbsp;
23
+ <a href="https://cursor.com" title="Cursor"><img src="assets/harnesses/cursor.svg" height="32" alt="Cursor" /></a>
24
+ &nbsp;&nbsp;&nbsp;&nbsp;
25
+ <a href="https://github.com/sst/opencode" title="OpenCode"><img src="assets/harnesses/opencode.png" height="32" alt="OpenCode" /></a>
26
+ &nbsp;&nbsp;&nbsp;&nbsp;
27
+ <a href="https://github.com/openclaw/openclaw" title="OpenClaw"><img src="assets/harnesses/openclaw.svg" height="36" alt="OpenClaw" /></a>
28
+ &nbsp;&nbsp;&nbsp;&nbsp;
29
+ <a href="https://github.com/NousResearch/hermes-agent" title="Hermes Agent"><img src="assets/harnesses/hermes.png" height="32" alt="Hermes Agent" /></a>
30
+ </p>
31
+
32
+ https://github.com/user-attachments/assets/cf0b2248-6672-4458-8027-b88525572f3e
11
33
 
12
34
  ```bash
13
- curl -fsSL agents-cli.sh | sh
14
- # or
15
35
  npm install -g @phnx-labs/agents-cli
36
+ # or
37
+ bun install -g @phnx-labs/agents-cli
16
38
  ```
17
39
 
18
- Also available as `ag` — all commands work with both `agents` and `ag`.
19
-
20
- ## Table of contents
21
-
22
- - [Run any agent, same interface](#run-any-agent-same-interface)
23
- - [Put agents on a team](#put-agents-on-a-team)
24
- - [Non-interactive usage](#non-interactive-usage)
25
- - [Search sessions fast](#search-sessions-fast)
26
- - [Pin agent versions per project](#pin-agent-versions-per-project)
27
- - [Install skills, MCP servers, and commands once](#install-skills-mcp-servers-and-commands-once--every-agent-gets-them)
28
- - [Quick reference](#quick-reference)
29
- - [Skill format](#skill-format)
40
+ Source: [github.com/phnx-labs/agents-cli](https://github.com/phnx-labs/agents-cli)
41
+
42
+ Also available as `ag` -- all commands work with both `agents` and `ag`.
43
+
44
+ - [Pin versions per project](#pin-versions-per-project)
45
+ - [One config, every agent](#one-config-every-agent)
46
+ - [Run any agent](#run-any-agent)
47
+ - [Sessions across agents](#sessions-across-agents)
48
+ - [Run open models through Claude Code](#run-open-models-through-claude-code)
49
+ - [Teams](#teams)
50
+ - [Secrets](#secrets)
51
+ - [Routines](#routines)
52
+ - [PTY](#pty)
53
+ - [Portable setup](#portable-setup)
54
+ - [Private skills](#private-skills)
30
55
  - [Compatibility](#compatibility)
31
56
  - [FAQ](#faq)
32
- - [Contributing](#contributing)
33
- - [License](#license)
34
57
 
35
58
  ---
36
59
 
37
- ## Run any agent, same interface
60
+ ## Pin versions per project
38
61
 
39
62
  ```bash
40
- agents run claude "Find all auth vulnerabilities in src/"
41
- agents run codex "Fix the issues Claude found"
42
- agents run gemini "Write tests for the fixed code"
43
- ```
63
+ # This project needs claude@2.0.65 -- newer versions changed tool calling.
64
+ agents use claude@2.0.65 -p
44
65
 
45
- Each agent resolves to the project-pinned version, with the right skills, MCP servers, and permissions already synced. No setup between steps -- just run.
66
+ # The monorepo uses codex@0.116.0 across the team.
67
+ agents use codex@0.116.0 -p
68
+ ```
46
69
 
47
- `agents run` also passes through environment overrides to the spawned CLI, so Claude can target any Anthropic-compatible endpoint:
70
+ This creates an `agents.yaml` at the project root:
48
71
 
49
- ```bash
50
- agents run claude "Reply with exactly: agents-qwen route ok" \
51
- --mode full \
52
- --model qwen3.6:35b \
53
- --env ANTHROPIC_BASE_URL=https://ollama.example.com \
54
- --env ANTHROPIC_AUTH_TOKEN="$(security find-generic-password -a "$USER" -s ollama-auth-token -w)" \
55
- --env ANTHROPIC_MODEL=qwen3.6:35b \
56
- --env ANTHROPIC_SMALL_FAST_MODEL=qwen3.6:35b
72
+ ```yaml
73
+ # agents.yaml (commit this to your repo)
74
+ agents:
75
+ claude: "2.0.65"
76
+ codex: "0.116.0"
57
77
  ```
58
78
 
59
- This makes agent pipelines possible. Chain agents by strength, swap one for another, script them in CI -- the interface stays the same:
79
+ Think `requirements.txt` for CLI coding agents, on steroids. A shim reads `agents.yaml` from the project root and routes `claude` / `codex` / `gemini` to the right version automatically. Each version gets its own isolated home -- switching backs up config and re-syncs resources.
60
80
 
61
81
  ```bash
62
- # Friday night code review
63
- agents run claude "Review all PRs merged this week, summarize risks" \
64
- | agents run codex "Write regression tests for the top 3 risks"
65
-
66
- # Same pipeline, different project -- different agent versions, same commands
67
- cd ../other-project
68
- agents run claude "Review all PRs merged this week, summarize risks"
69
- # ^ resolves to claude@2.0.0 here instead of claude@2.1.89
82
+ agents add claude@2.0.65 # Install a specific version
83
+ agents add codex@latest # Install latest
84
+ agents view # See everything installed
70
85
  ```
71
86
 
72
- Supports plan (read-only) and edit modes, effort levels that map to the right model per agent, and JSON output for scripting.
73
-
74
87
  ---
75
88
 
76
- ## Put agents on a team
77
-
78
- `agents run` runs one agent synchronously. **Teams** run many agents on the same task, in the background, with coordination.
89
+ ## One config, every agent
79
90
 
80
91
  ```bash
81
- agents teams create auth-feature
92
+ # Set up the Notion MCP server once.
93
+ agents install mcp:com.notion/mcp
82
94
 
83
- agents teams add auth-feature claude "Research auth libraries" --name researcher
84
- agents teams add auth-feature codex "Draft the migration" --name migrator --after researcher
85
- agents teams add auth-feature claude "Write tests for the new code" --name tester --after migrator
86
-
87
- agents teams start auth-feature # launches teammates whose --after deps are done
88
- agents teams status auth-feature # who's working, what they've changed, what they said
89
- agents teams disband auth-feature # stop everyone, clean up
95
+ # It's now registered with Claude Code, Codex, Gemini CLI, and Cursor.
96
+ agents mcp list
90
97
  ```
91
98
 
92
- Each teammate runs detached. Close your terminal; they keep working. Check in whenever.
99
+ Skills, slash commands, rules, hooks, and permissions work the same way -- install once in `~/.agents/`, synced to every agent's native format automatically.
93
100
 
94
- - `--name alice` gives a teammate a handle. Refer to them by name everywhere (`teams rm auth alice`, `teams logs alice`).
95
- - `--after name1,name2` stages a teammate as pending. `teams start` fires the ones whose blockers are `completed`. Cycles rejected at add time; a failed blocker keeps its dependents pending so you decide what to do.
96
- - For Claude teammates, `agent_id` IS the Claude session UUID -- `agents sessions <agent_id> --markdown` opens the full conversation.
97
- - Modes match `exec`: `plan | edit | full`. `--model`, `--env KEY=VALUE`, `--cwd` all passthroughs too.
98
- - `teams ls` filters: substring query, `--agent claude[@version]`, `--status working|done|failed|empty`, `--since 2h --until 30d`.
99
- - Non-TTY output is valid JSON by default, with a `cursor` field in every `status` response for efficient delta polling (`--since <cursor>`).
101
+ ```bash
102
+ agents skills add gh:yourteam/python-expert # Knowledge pack -> all agents
103
+ agents commands add gh:yourteam/commands # Slash commands -> all agents
104
+ agents rules add gh:team/rules # AGENTS.md -> CLAUDE.md, GEMINI.md, .cursorrules
105
+ agents permissions add ./perms # Permissions -> auto-converted per agent
106
+ ```
100
107
 
101
- State lives in `~/.agents/teams/`. Teammates survive terminal restarts. Synced config (commands, skills, rules, MCP servers, hooks, permissions) applies to teammates the same way it applies to `agents run` -- one config, both flows.
108
+ Write one `AGENTS.md`. It becomes `CLAUDE.md` for Claude Code, `GEMINI.md` for Gemini CLI, `.cursorrules` for Cursor.
102
109
 
103
110
  ---
104
111
 
105
- ## Non-interactive usage
106
-
107
- Other coding agents usually run in non-TTY shells. `agents` now supports that mode directly:
112
+ ## Run any agent
108
113
 
109
114
  ```bash
110
- agents add codex@latest --yes
111
- agents use claude@2.1.79 --yes
112
- agents commands add --names review-pr,debug --agents codex@0.113.0
113
- agents skills add --names agents-cli --agents claude@default
114
- agents install ./team-agent-pack --agents codex@0.113.0
115
- agents mcp add postgres --agents claude@2.1.79 -- npx -y @modelcontextprotocol/server-postgres
116
- agents mcp register postgres
117
- agents sessions <session-id> --markdown
118
- agents routines view <job-name>
115
+ agents run claude "Find all auth vulnerabilities in src/"
116
+ agents run codex "Fix the issues Claude found"
117
+ agents run gemini "Write tests for the fixed code"
119
118
  ```
120
119
 
121
- Rules for automation:
120
+ Each resolves to the project-pinned version with skills, MCP servers, and permissions already synced.
122
121
 
123
- - Pass explicit names or IDs instead of relying on pickers.
124
- - Use `--yes` when a command would otherwise ask for default sync or confirmation choices.
125
- - Use `--names` with `commands`, `skills`, `hooks`, `rules`, and `permissions` to install from central storage without a checkbox prompt.
126
- - Use `agent@version` or `agent@default` with `--agents` when you need an exact managed version.
127
- - Long `view` commands print directly in non-interactive shells instead of opening `less`.
122
+ ### Rate-limited? Keep working.
128
123
 
129
- If a command still needs a human-only picker, it now exits with a plain-text hint that shows the matching non-interactive form.
124
+ ```bash
125
+ # Claude Code hits a rate limit -> Codex picks up automatically. Same project, same config.
126
+ agents run claude "refactor auth module" --mode edit --fallback codex,gemini
127
+ ```
130
128
 
131
- ---
129
+ ### Multiple accounts? Spread the load.
132
130
 
133
- ## Search sessions fast
131
+ ```bash
132
+ # Picks the signed-in account you haven't used recently.
133
+ agents run claude "summarize recent commits" --rotate
134
+ ```
135
+
136
+ `--rotate` cycles across installed versions of the same agent -- useful when you have multiple accounts and want to spread usage instead of burning through one.
134
137
 
135
- Interactive terminals now get a live-search picker for sessions:
138
+ ### Chain agents
136
139
 
137
140
  ```bash
138
- agents sessions
139
- agents sessions --agent codex
140
- agents sessions --project agents-cli
141
- agents sessions --agent gemini "session discovery"
141
+ agents run claude "Review PRs merged this week, summarize risks" \
142
+ | agents run codex "Write regression tests for the top 3 risks"
142
143
  ```
143
144
 
144
- What you can type into the picker:
145
+ Supports plan (read-only) and edit modes, effort levels, JSON output for scripting, and timeout limits.
145
146
 
146
- - Session ID or short ID
147
- - Prompt text / topic text
148
- - Project name
149
- - Account email
150
- - Agent name or version
147
+ ### One protocol, every harness
148
+
149
+ ```bash
150
+ # Typed event stream instead of raw stdout. Same command, any supported agent.
151
+ agents run claude "review this diff" --acp --json
152
+ ```
151
153
 
152
- The shared `Agent` column also shows the resolved agent version when it is known, so filtered lists read like `claude@2.1.110`, `codex@0.113.0`, `gemini@0.29.5`, and `opencode@1.2.6`.
154
+ `--acp` routes through the [Agent Client Protocol](https://agentclientprotocol.com/) so you get a unified event stream -- `agent_message_chunk`, `tool_call`, `plan_update`, `stop_reason` -- instead of writing a parser per CLI. File writes and shell commands flow through agents-cli, which means `--mode plan` becomes a real sandbox: the write RPC is denied, not just unused.
153
155
 
154
- Pass `<id>` (with `--markdown`, `--json`, or filter flags like `--include`, `--exclude`, `--first`, `--last`) in non-interactive shells when you already know the session you want.
156
+ Works today with claude, codex, gemini, cursor, opencode, openclaw. Other harnesses keep running on the direct-exec path.
155
157
 
156
158
  ---
157
159
 
158
- ## Pin agent versions per project
160
+ ## Sessions across agents
161
+
162
+ When you run multiple agents, conversations scatter across tools. Session search brings them together.
159
163
 
160
164
  ```bash
161
- agents add claude@2.0.0 # Install specific version
162
- agents use claude@2.0.0 -p # Pin to this project
165
+ # Where was that auth conversation? Search Claude Code, Codex, Gemini CLI, OpenCode at once.
166
+ agents sessions "auth middleware"
167
+
168
+ # Filter by agent, project, or time window
169
+ agents sessions --agent codex --since 7d
170
+ agents sessions --project my-app
171
+
172
+ # Read a full conversation
173
+ agents sessions a1b2c3d4 --markdown
174
+
175
+ # Just the last 3 turns, user messages only
176
+ agents sessions a1b2c3d4 --last 3 --include user
163
177
  ```
164
178
 
165
- Like `.nvmrc` for Node -- different projects use different agent versions. A shim system reads `.agents-version` and routes to the right binary automatically. No other tool does this for AI agents.
179
+ Interactive picker when you're in a terminal. Structured output (`--json`, `--markdown`, filtered by role or turn count) when piped.
166
180
 
167
- When you switch versions, configs are backed up and resources are re-synced. Each version gets its own isolated home directory with the right skills, commands, and permissions already in place.
181
+ Backed by a SQLite + FTS5 index at `~/.agents-system/sessions/sessions.db` with incremental scanning -- warm reads in ~100ms. External tools can consume `--json` output as a programmatic observability layer; see [docs/05-sessions.md](docs/05-sessions.md) for the schema and [docs/06-observability.md](docs/06-observability.md) for the consumption patterns.
168
182
 
169
183
  ---
170
184
 
171
- ## Install skills, MCP servers, and commands once -- every agent gets them
172
-
173
- ### Skills
185
+ ## Run open models through Claude Code (experimental)
174
186
 
175
- Skills are reusable knowledge packs -- rules, patterns, and expertise that make your agents better at specific tasks. Install once, available everywhere.
187
+ > **Note:** Profiles are experimental. Enable with `agents beta profiles enable`.
176
188
 
177
189
  ```bash
178
- agents skills add gh:yourname/python-expert # Install from GitHub
179
- agents skills add ./my-skills # Install from local path
180
- agents skills list # See what's installed
181
- agents skills view python-expert # View skill details and rules
190
+ # Kimi K2.5 responding inside Claude Code's UI, tools, and skills.
191
+ # No proxy server. No LiteLLM. One OpenRouter key, stored in Keychain.
192
+ agents profiles add kimi
193
+ agents run kimi "refactor this file"
182
194
  ```
183
195
 
184
- A skill is a directory with a `SKILL.md` and optional rule files:
185
-
186
- ```
187
- python-expert/
188
- SKILL.md # Metadata + description
189
- rules/
190
- type-hints.md # Individual rules your agents follow
191
- error-handling.md
192
- testing.md
196
+ Built-in presets (all via OpenRouter, one shared key):
197
+
198
+ | Preset | Model | Notes |
199
+ |---|---|---|
200
+ | `kimi` | Kimi K2.5 | #1 HumanEval. Reasoning -- interactive only. |
201
+ | `minimax` | MiniMax M2.5 | #1 SWE-bench Verified. Reasoning. |
202
+ | `glm` | GLM 5 | #1 Chatbot Arena (open-weight). |
203
+ | `qwen` | Qwen3 Coder Next | Latest coding Qwen. Print-safe. |
204
+ | `deepseek` | DeepSeek Chat V3 | Latest non-reasoning. Print-safe. |
205
+
206
+ A profile swaps the model while keeping Claude Code as the agent runtime -- same UI, slash commands, skills, MCP tools. Under the hood: `ANTHROPIC_BASE_URL` + `ANTHROPIC_MODEL`, auth from Keychain at spawn time.
207
+
208
+ Custom endpoints (Ollama, vLLM) work too -- drop a YAML in `~/.agents/profiles/`:
209
+
210
+ ```yaml
211
+ name: local-qwen
212
+ host: { agent: claude }
213
+ env:
214
+ ANTHROPIC_BASE_URL: https://ollama.internal
215
+ ANTHROPIC_MODEL: qwen3.6:35b
216
+ auth:
217
+ envVar: ANTHROPIC_AUTH_TOKEN
218
+ keychainItem: agents-cli.ollama.token
193
219
  ```
194
220
 
195
- Skills are stored centrally in `~/.agents/skills/` and distributed to each agent's native skill directory. Write once, every agent gets it.
221
+ Profile YAML has no secrets -- safe to `agents repo push` to a shared repo. `agents profiles presets` lists the full catalog.
196
222
 
197
- ### Install MCP servers everywhere at once
223
+ ---
198
224
 
199
- ```bash
200
- agents search notion # Find MCP servers
201
- agents install mcp:com.notion/mcp # Install + register with ALL agents
202
- agents mcp list # See what's registered
203
- ```
225
+ ## Teams
204
226
 
205
- No more running `claude mcp add`, then `codex mcp add`, then editing Gemini's config file.
227
+ ```bash
228
+ agents teams create auth-feature
206
229
 
207
- ### Manage slash commands
230
+ # Research first, then implement, then test.
231
+ agents teams add auth-feature claude "Research auth libraries" --name researcher
232
+ agents teams add auth-feature codex "Draft the migration" --name migrator --after researcher
233
+ agents teams add auth-feature claude "Write tests for the new code" --name tester --after migrator
208
234
 
209
- ```bash
210
- agents commands add gh:yourname/commands # Install from repo
211
- agents commands list # See all commands
212
- agents commands view review-pr # View command content
235
+ agents teams start auth-feature # Fires teammates whose deps are done
236
+ agents teams status auth-feature # Who's working, what they changed, what they said
213
237
  ```
214
238
 
215
- Commands are markdown files with a description. The CLI handles format conversion automatically -- markdown for Claude/Gemini/Cursor, TOML for Codex.
239
+ Teammates run detached -- close your terminal, they keep working. Check in with `teams status`, read full output with `teams logs <name>`, clean up with `teams disband`.
240
+
241
+ Team state is observable via `agents teams list --json` / `agents teams status --json`. External tools join it with `sessions --json` (teammates get `isTeamOrigin: true`) and `cloud list --json` (for `--cloud` teammates) to build a unified fleet view. See [docs/06-observability.md](docs/06-observability.md).
242
+
243
+ ---
216
244
 
217
- ### Sync your entire setup
245
+ ## Secrets
218
246
 
219
247
  ```bash
220
- agents push # Snapshot your config to git
221
- agents pull # Restore on any machine
248
+ # API keys in Keychain, not in .env files.
249
+ agents secrets create prod-stripe
250
+ agents secrets add prod-stripe STRIPE_SECRET_KEY # Prompts, stores in Keychain
251
+ agents secrets add prod-stripe TEST_CARD --value "4242..."
252
+
253
+ # Injected at run time. The YAML on disk has only refs.
254
+ agents run claude "charge a test card" --secrets prod-stripe
222
255
  ```
223
256
 
224
- `push` captures your current agent versions and MCP registrations into `~/.agents/`. `pull` does the real work — it installs agent CLIs, registers MCP servers, syncs resources (commands, skills, rules, hooks, permissions) into each agent's config directory, sets up PATH shims, and configures defaults. One command, fully configured machine.
257
+ <p align="center">
258
+ <img src="assets/secrets.svg" alt="How agents-cli secrets work: stripe.yml holds a pointer, the macOS Keychain holds the value, agents-cli resolves at runtime and injects the env into the child process" width="100%" />
259
+ </p>
260
+
261
+ Merge order: profile env < `--secrets` < `--env K=V`. A missing keychain item aborts before the child starts.
225
262
 
226
- ### Interactive PTY sessions
263
+ ### Cross-machine sync via iCloud Keychain
227
264
 
228
- Give your agents the ability to interact with full-screen terminal programs -- REPLs, TUIs, interactive installers, anything that needs a real terminal.
265
+ Pass `--icloud-sync` when creating a bundle and the values are written to the iCloud-synced keychain. Sign into the same iCloud account on another Mac (with iCloud Keychain enabled) and the values appear there within seconds — no copy-paste, no `.env` files emailed to yourself, no shared secret stores.
229
266
 
230
267
  ```bash
231
- SID=$(agents pty start) # Start a session
232
- agents pty exec $SID "python3" # Launch Python REPL
233
- agents pty screen $SID # See what's on screen
234
- agents pty write $SID "print('hello')\n" # Type into it
235
- agents pty screen $SID # See the result
236
- agents pty write $SID "exit()\n" # Quit
237
- agents pty stop $SID # Clean up
268
+ # On laptop:
269
+ agents secrets create npm-tokens --icloud-sync
270
+ agents secrets add npm-tokens NPM_TOKEN # value lives in iCloud Keychain
271
+
272
+ # On another Mac (same iCloud account):
273
+ agents secrets add npm-tokens NPM_TOKEN # the value is already there;
274
+ # you only need the bundle YAML locally
238
275
  ```
239
276
 
240
- A sidecar server holds PTY sessions alive between CLI calls. `screen` renders the terminal as clean text (no ANSI codes) using xterm-headless -- so agents see exactly what a human would see. Sessions auto-clean after 30 minutes of idle.
277
+ Under the hood, `--icloud-sync` routes writes through a notarized helper app (`AgentsKeychain.app`) that holds the entitlement macOS requires for `kSecAttrSynchronizable`. Bundles without `--icloud-sync` use `/usr/bin/security` and stay device-local.
278
+
279
+ Bundle YAML files (`~/.agents/secrets/*.yml`) are not synced — only the secret values. Push the YAMLs across machines via `agents repo push` if you want full bundle definitions to follow.
280
+
281
+ ---
241
282
 
242
- ### Schedule agents as routines
283
+ ## Routines
243
284
 
244
285
  ```bash
286
+ # Claude Code reviews PRs every weekday at 9 AM. Scheduler auto-starts.
245
287
  agents routines add daily-digest \
246
288
  --schedule "0 9 * * 1-5" \
247
289
  --agent claude \
248
290
  --prompt "Review yesterday's PRs and summarize key changes"
249
- # The scheduler auto-starts on first add — no separate daemon command needed.
250
291
 
251
- agents routines list # See all jobs
252
- agents routines status # Check scheduler and upcoming runs
253
- agents routines logs daily-digest # Check execution logs
292
+ agents routines list # All jobs + next run times
293
+ agents routines run daily-digest # Test it now, ignore the schedule
294
+ agents routines logs daily-digest # Check last execution
254
295
  ```
255
296
 
256
297
  Jobs run sandboxed -- agents only see directories and tools you explicitly allow.
257
298
 
258
- ### Manage rules/instructions, hooks, and permissions
299
+ ---
259
300
 
260
- Each agent has its own instruction file format -- Claude uses `CLAUDE.md`, Codex uses `AGENTS.md`, Cursor uses `.cursorrules`. The CLI manages all of them under one command.
301
+ ## PTY
261
302
 
262
303
  ```bash
263
- agents rules list # Show what's installed per agent
264
- agents rules add gh:team/rules # Install and sync to all agents
265
- agents rules view claude # View rule file content
304
+ # Give agents a real terminal for REPLs, TUIs, interactive programs.
305
+ SID=$(agents pty start)
306
+ agents pty exec $SID "python3"
307
+ agents pty screen $SID # Clean text, no ANSI -- what a human sees
308
+ agents pty write $SID "print('hello')\n"
309
+ agents pty stop $SID
266
310
  ```
267
311
 
268
- Write one `AGENTS.md`, and it gets renamed and synced to each agent's native format automatically.
312
+ A sidecar server holds sessions alive between CLI calls. `screen` renders via xterm-headless. Sessions auto-clean after 30 minutes idle.
313
+
314
+ ---
315
+
316
+ ## Portable setup
269
317
 
270
318
  ```bash
271
- agents hooks list # Show lifecycle hooks
272
- agents hooks add gh:team/hooks # Install hook scripts
319
+ # New machine? One command.
320
+ agents init
321
+
322
+ # Installs CLIs, registers MCP servers, syncs skills/commands/rules/hooks,
323
+ # sets up shims, configures defaults. Done.
273
324
 
274
- agents permissions list # Show permission sets
275
- agents permissions add ./perms # Install permission groups
325
+ agents repo push # Snapshot your config to git
276
326
  ```
277
327
 
278
- Hooks trigger on agent lifecycle events. Permissions are auto-converted between agent-specific formats (Claude's allow/deny, Codex's approval policies, OpenCode's patterns).
328
+ ### How config is layered
279
329
 
280
- ---
330
+ Two repos with the same shape, different roles:
281
331
 
282
- ## Quick Reference
332
+ | Repo | Role | Owner |
333
+ |---|---|---|
334
+ | `~/.agents-system/` | **System repo** — core/built-in skills, commands, hooks, rules, MCP configs, permissions, and profiles that ship with `agents-cli`. The defaults every install gets. | Maintained upstream at [phnx-labs/.agents-system](https://github.com/phnx-labs/.agents-system) |
335
+ | `~/.agents/` | **User repo** — your personal additions and overrides. This is what `agents repo push`/`pull` syncs. | You |
283
336
 
284
- ```bash
285
- # Agent versions
286
- agents add claude@latest # Install agent CLI
287
- agents remove codex@0.5.0 # Remove specific version
288
- agents use claude@2.0.0 # Set global default
289
- agents use claude@2.0.0 -p # Pin to this project
290
- agents list # Show all installed versions
291
- agents view claude # Show version details + resources
292
-
293
- # Skills
294
- agents skills list # List installed skills
295
- agents skills add <source> # Install from git/local
296
- agents skills remove <name> # Remove a skill
297
- agents skills view <name> # View skill details
298
-
299
- # Commands
300
- agents commands list # List slash commands
301
- agents commands add <source> # Install commands
302
- agents commands view <name> # View command content
303
-
304
- # Rules / Instructions
305
- agents rules list # List per-agent instruction files
306
- agents rules add <source> # Install from git/local
307
- agents rules remove <agent> # Remove rule file
308
- agents rules view <agent> # View rule file content
309
-
310
- # MCP servers
311
- agents search <query> # Find in registry
312
- agents install mcp:<name> # Install + register
313
- agents mcp list # Show registered servers
314
- agents mcp add <name> <cmd> # Register manually
315
-
316
- # Sync
317
- agents pull [source] # Sync from repo
318
- agents push # Push changes back
319
-
320
- # Drive
321
- agents drive remote <user@host> # Set sync target
322
- agents drive pull # Pull sessions from remote
323
- agents drive push # Push sessions to remote
324
- agents drive attach # Use drive as active agent home
325
- agents drive detach # Restore to version home
326
- agents drive status # Show drive state
327
-
328
- # Execution
329
- agents run <agent> <prompt> # Run agent
330
- agents sessions <id> --markdown # Read a session by exact ID
331
- agents sessions --agent codex # Interactive filtered session search
332
- agents sessions --project agents # Interactive project-scoped session search
333
- agents routines add <name> # Schedule a job (scheduler auto-starts)
334
- agents routines list # Show all jobs
335
- agents routines status # Check scheduler status + upcoming runs
336
-
337
- # Teams (orchestrate multiple agents on a shared task)
338
- agents teams create <team> # Start a new team
339
- agents teams add <team> <agent> <task> # Add a teammate (runs immediately)
340
- --name alice # give them a handle
341
- --after alice,bob # stage as pending until deps complete
342
- --mode plan|edit|full # permissions
343
- --model <model> --env K=V # same passthroughs as exec
344
- agents teams start <team> # Launch pending teammates whose deps are done
345
- agents teams status <team> # Team standup (pass --since <cursor> for deltas)
346
- agents teams ls # List teams (--agent, --status, --since filters)
347
- agents teams remove <team> <teammate> # Let one teammate go (name or UUID prefix)
348
- agents teams disband <team> # Stop everyone, remove the team
349
- agents teams logs <teammate> # Read their raw log
350
- agents teams doctor # Check which agents can join a team
351
-
352
- # PTY sessions
353
- agents pty start # Start a PTY session (returns ID)
354
- agents pty exec <id> <command> # Run a command in the session
355
- agents pty screen <id> # Render terminal as clean text
356
- agents pty write <id> <input> # Send keystrokes (\n \t \e \xHH)
357
- agents pty read <id> # Read raw output
358
- agents pty signal <id> INT # Send signal
359
- agents pty list # Show active sessions
360
- agents pty stop <id> # Kill a session
361
- agents pty server status # Check sidecar server
362
- ```
337
+ **Version pinning:** `agents.yaml` at project root pins which agent version to use (like `.nvmrc` for Node).
338
+
339
+ **Resource resolution:** When syncing resources (commands, skills, rules, hooks, MCP, permissions), the order is **project > user > system**. A `.agents/` directory at project root wins, then `~/.agents/`, then `~/.agents-system/`. Same-named resources higher in the chain override lower ones; everything else unions in.
340
+
341
+ See [docs/00-concepts.md](docs/00-concepts.md) for the full mental model: DotAgents repos, resource kinds, and how resolution works end-to-end.
363
342
 
364
343
  ---
365
344
 
366
- ## Skill Format
345
+ ## Private skills
367
346
 
368
- Create a `SKILL.md` with YAML frontmatter:
347
+ Keep work or personal skills in a separate repo public ones in `~/.agents/`, private ones in an extra repo that merges in at sync time.
369
348
 
370
- ```markdown
371
- ---
372
- name: python-expert
373
- description: Python code analysis, type hints, and testing patterns
374
- author: Your Name
375
- version: 1.0.0
376
- keywords: [python, testing, types]
377
- ---
349
+ ```bash
350
+ # Add a private repo for work-only skills
351
+ agents repo add gh:yourname/.agents-work
378
352
 
379
- # Python Expert
353
+ # Add with a custom alias
354
+ agents repo add git@github.com:acme/team-skills.git --as acme
380
355
 
381
- High-level description of what this skill teaches your agents.
356
+ agents repo list # Primary + every registered extra
357
+ agents repo pull # Pull updates for all enabled extras
358
+ agents repo disable acme # Stop merging without deleting
359
+ agents repo remove acme # Unregister and delete the clone
382
360
  ```
383
361
 
384
- Add rule files in a `rules/` subdirectory -- each rule is a markdown file with specific guidance your agents follow during conversations.
362
+ Extras clone into `~/.agents-system/.repos/<alias>/` and ship the same layout as the primary (`skills/`, `commands/`, `hooks/`, `rules/`). Their contents merge into agent version homes after the primary's so `~/.agents/` always wins on name collisions. `agents skills list` shows which repo each skill came from.
385
363
 
386
364
  ---
387
365
 
388
366
  ## Compatibility
389
367
 
390
- | Agent | Versions | MCP | Commands | Skills | Rules | Hooks | Permissions | Routines | Teams |
391
- |-------|----------|-----|----------|--------|-------|-------|-------------|----------|-------|
392
- | Claude | yes | yes | yes | yes | CLAUDE.md | yes | yes | yes | yes |
393
- | Codex | yes | yes | yes | yes | AGENTS.md | yes | yes | yes | yes |
394
- | Gemini | yes | yes | yes | yes | GEMINI.md | yes | -- | yes | yes |
395
- | Cursor | yes | yes | yes | yes | .cursorrules | -- | -- | -- | yes |
396
- | OpenCode | yes | yes | yes | yes | AGENTS.md | yes | yes | -- | yes |
397
- | OpenClaw | yes | yes | -- | yes | workspace/AGENTS.md | yes | -- | -- | -- |
368
+ | Agent | Versions | MCP | Commands | Skills | Rules | Hooks | Plugins | Permissions | Routines | Teams |
369
+ |-------|----------|-----|----------|--------|-------|-------|---------|-------------|----------|-------|
370
+ | Claude Code | yes | yes | yes | yes | CLAUDE.md | yes | yes | yes | yes | yes |
371
+ | Codex CLI | yes | yes | yes | yes | AGENTS.md | yes (>= 0.116.0) | -- | yes | yes | yes |
372
+ | Gemini CLI | yes | yes | yes | yes | GEMINI.md | yes (>= 0.26.0) | -- | -- | yes | yes |
373
+ | OpenClaw | yes | yes | -- | yes | workspace/AGENTS.md | yes | yes | -- | -- | -- |
374
+ | Cursor | yes | yes | yes | yes | .cursorrules | -- | -- | -- | -- | yes |
375
+ | OpenCode | yes | yes | yes | yes | AGENTS.md | -- | -- | yes | -- | yes |
376
+ | Copilot | yes | yes | yes | yes | AGENTS.md | -- | -- | -- | -- | -- |
377
+ | Amp | yes | yes | yes | yes | AGENTS.md | -- | -- | -- | -- | -- |
378
+ | Kiro | yes | yes | yes | yes | AGENTS.md | -- | -- | -- | -- | -- |
379
+ | Goose | yes | yes | -- | -- | AGENTS.md | -- | -- | -- | -- | -- |
380
+ | Roo Code | yes | yes | yes | yes | AGENTS.md | -- | -- | -- | -- | -- |
381
+
382
+ Hooks columns marked `yes (>= X.Y.Z)` are version-gated: `agents hooks add` skips with a clear message when the installed binary is older than the listed version, instead of writing config the older binary would silently ignore. OpenCode's plugin-based hook system is on the roadmap; the entry is `--` until a writer ships.
383
+
384
+ Codex command sync is version-aware: Codex `0.116.x` and older receive slash commands in `.codex/prompts/`; Codex `0.117.0+` receives those commands as generated skills so they can be invoked with `$name`.
398
385
 
399
386
  ## FAQ
400
387
 
401
388
  ### Why use `agents` instead of `claude` / `codex` / `gemini` directly?
402
389
 
403
- Each agent CLI has its own config format, its own MCP setup, its own version management, its own skill system. If you use more than one, you end up maintaining N copies of everything. `agents` gives you one interface, one config source, and one place to pin versions plus features the individual CLIs don't ship: cross-agent pipelines, shared teams, session discovery across all of them, and project-pinned versions like `.nvmrc`.
390
+ Claude Code, Codex CLI, and Gemini CLI each have their own config format, MCP setup, version management, and skill system. If you use more than one, you maintain N copies of everything. `agents` gives you one interface, one config source, and one place to pin versions -- plus features the individual CLIs don't ship: cross-agent pipelines, shared teams, unified session search, and project-pinned versions like `.nvmrc`.
391
+
392
+ ### Is it free?
393
+
394
+ Yes. This developer tool is entirely free because we believe developers should have the best tools — fast and robust — so they can create the best products for their users.
395
+
396
+ ### Is this like `nvm` / `mise` / `asdf` for AI agents?
397
+
398
+ For version management, yes. `agents-cli` reads `agents.yaml` from the project root, walks up the directory tree, and routes to the correct binary per project. But it also manages agent-native resources (skills, MCP servers, commands, hooks, permissions) that language version managers don't touch.
399
+
400
+ ### How does version switching actually work?
401
+
402
+ Same approach as nvm, pyenv, and rbenv — battle-tested by millions of developers. When you install a version, we set up a shim script that resolves the version from `agents.yaml` and runs the right binary. Each version has an isolated config directory. No manual setup required.
404
403
 
405
- ### Is this like `nvm` / `mise` / `asdf` but for AI agents?
404
+ ### How do I share my agent setup with my team?
406
405
 
407
- For version management, yes — that's the closest analogue. `agents-cli` reads `.agents-version` in a project, walks up the directory tree, and routes `claude` / `codex` / `gemini` to the correct installed binary per project. But `agents` also manages agent-native resources (skills, MCP servers, slash commands, hooks, permissions) that language version managers don't touch.
406
+ Add a `.agents/` directory at your project root with your skills, hooks, rules, and commands. Resources merge automatically: project > user (`~/.agents/`) > system (`~/.agents-system/`). Commit it with your repo and teammates get the same agent environment.
408
407
 
409
- ### How is this different from Vercel's Open Agents?
408
+ ### Do I need to write separate rules for each agent (CLAUDE.md, GEMINI.md, etc.)?
410
409
 
411
- Open Agents is a hosted cloud product. `agents-cli` is a local-first open client your agents run on your machine against your API keys, no SaaS layer in between. Part of an open stack for AI coding agents; cloud runner coming separately.
410
+ No. Write one `AGENTS.md` it's the canonical source. We automatically sync it to each agent's expected location (`CLAUDE.md` for Claude Code, `GEMINI.md` for Gemini CLI, `.cursorrules` for Cursor). Same content, zero duplication.
411
+
412
+ ### Do agents use API keys or subscriptions?
413
+
414
+ Your choice. We hand off to the original CLI process — use your existing subscription or API key. This is intentional: subscription pricing is usually cheaper than API token pricing for individual users. Configure each agent however you want.
412
415
 
413
416
  ### Does it store my API keys or send telemetry?
414
417
 
415
- No. `agents-cli` reads API keys from your shell environment or each agent CLI's existing auth (it never writes a credential file, never reads one you didn't already set up). No telemetry, no phone-home. All state lives in `~/.agents/` and each agent's own config dir.
418
+ No. API keys come from your shell environment or each agent CLI's existing auth. No telemetry, no phone-home. User content lives in `~/.agents/`; operational state (versions, shims, sessions, caches) lives in `~/.agents-system/`.
419
+
420
+ ### Which platforms?
421
+
422
+ macOS and Linux. Windows via WSL works but isn't first-class yet.
423
+
424
+ **macOS-only features:** Keychain-based secrets (`agents secrets`, `agents profiles login`) require macOS. The `--icloud-sync` flag on bundles requires macOS + iCloud Keychain enabled. On Linux, use environment variables or `.env` files for API keys. Native Linux credential store support is planned.
425
+
426
+ ### Do I need Node.js?
416
427
 
417
- ### Do I need Node.js? Bun?
428
+ The installer tries Bun first (faster), falls back to npm. Node 18+ required at runtime.
418
429
 
419
- Either works. The installer tries Bun first (faster), falls back to npm. Node 18+ is required at runtime. No other build tools needed.
430
+ ### Can I use it in CI?
420
431
 
421
- ### Which platforms are supported?
432
+ Yes -- `agents run` is non-interactive by default. `--yes` auto-accepts prompts, `--json` for structured output. Pass explicit names and IDs instead of relying on interactive pickers.
422
433
 
423
- macOS and Linux today. Windows via WSL works but isn't first-class. Native Windows support is on the roadmap.
434
+ ### What happens to my config when I switch versions?
424
435
 
425
- ### Can I use `agents` in CI?
436
+ Each version has its own isolated config directory. Switching just repoints a symlink — your per-version config stays untouched. On first migration (if you had a real `~/.claude/` directory before using agents-cli), that gets backed up once to `~/.agents-system/backups/`.
426
437
 
427
- Yes `agents run` is non-interactive by default with `--yes` flags for every prompt and JSON output for parsing. The [non-interactive usage](#non-interactive-usage) section covers the automation-friendly flags.
438
+ ### Does session search use RAG or semantic search?
428
439
 
429
- ### Can I add support for a new agent CLI?
440
+ No it's a SQLite + FTS5 full-text index. Fast, flexible, and robust. Agents can query sessions programmatically. Most commands support `--json` output for scripting with jq.
430
441
 
431
- Yes. Agents are defined in [src/lib/agents.ts](src/lib/agents.ts) each is a config object declaring commands dir, memory file format, and capabilities. Open an issue or PR.
442
+ ### How do I use custom or local models?
443
+
444
+ Profiles (experimental — enable with `agents beta profiles enable`). Works with LiteLLM Proxy, Ollama, or any OpenAI-compatible endpoint. Drop a YAML in `~/.agents/profiles/` pointing to your endpoint.
445
+
446
+ ### Can I add support for a new agent?
447
+
448
+ Agents are defined in [src/lib/agents.ts](src/lib/agents.ts) -- each is a config object declaring commands dir, rules file, and capabilities. PRs welcome.
432
449
 
433
450
  ### What's the relationship to Phoenix Labs / Rush?
434
451
 
435
- `agents-cli` is an open client maintained by Phoenix Labs. Rush is a separate product that builds on top of the same runtime. You can use `agents-cli` on its own — no Rush account required, no upsell.
452
+ `agents-cli` is an open client maintained by Phoenix Labs. Rush is a separate product. No Rush account required, no upsell.
436
453
 
437
454
  ## Contributing
438
455
 
439
- PRs and issues welcome. To develop locally:
440
-
441
456
  ```bash
442
457
  git clone https://github.com/phnx-labs/agents-cli
443
458
  cd agents-cli
444
- bun install
445
- bun run build
446
- bun test
459
+ bun install && bun run build && bun test
447
460
  ```
448
461
 
449
- The CLI entry is [src/index.ts](src/index.ts). Commands live in [src/commands/](src/commands/); shared libraries in [src/lib/](src/lib/). Tests sit next to source as `*.test.ts` and run under `vitest` (see [CLAUDE.md](CLAUDE.md) for the full style guide).
450
-
451
- For a full comparison with other tools in the ecosystem — Rivet, Agentloom, mise, skills.sh, cass, Microsoft APM — see [docs/04-landscape.md](docs/04-landscape.md).
462
+ Commands in [src/commands/](src/commands/), libraries in [src/lib/](src/lib/), tests as `*.test.ts` under vitest. [CLAUDE.md](CLAUDE.md) has the full style guide. [docs/04-landscape.md](docs/04-landscape.md) covers the competitive landscape.
452
463
 
453
464
  ## License
454
465
 
455
- MIT see [LICENSE](./LICENSE).
466
+ MIT -- see [LICENSE](./LICENSE).