@phnx-labs/agents-cli 0.1.0 → 1.14.1

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 (554) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +283 -372
  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 +8 -1
  8. package/dist/commands/cloud.js +108 -22
  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 +96 -27
  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 +16 -4
  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 +9 -1
  38. package/dist/commands/profiles.js +56 -7
  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 +58 -128
  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 +8 -1
  56. package/dist/commands/secrets.js +235 -63
  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 +188 -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 +317 -24
  83. package/dist/index.d.ts +7 -2
  84. package/dist/index.js +172 -34
  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 +197 -21
  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 +9 -3
  104. package/dist/lib/cloud/codex.js +53 -13
  105. package/dist/lib/cloud/factory.d.ts +8 -3
  106. package/dist/lib/cloud/factory.js +19 -3
  107. package/dist/lib/cloud/registry.d.ts +10 -1
  108. package/dist/lib/cloud/registry.js +14 -3
  109. package/dist/lib/cloud/rush.d.ts +63 -3
  110. package/dist/lib/cloud/rush.js +273 -20
  111. package/dist/lib/cloud/store.d.ts +13 -1
  112. package/dist/lib/cloud/store.js +23 -4
  113. package/dist/lib/cloud/stream.d.ts +6 -1
  114. package/dist/lib/cloud/stream.js +95 -39
  115. package/dist/lib/cloud/types.d.ts +153 -8
  116. package/dist/lib/cloud/types.js +34 -2
  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 +23 -6
  128. package/dist/lib/exec.js +53 -17
  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 +119 -101
  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 +10 -4
  156. package/dist/lib/models.js +36 -15
  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 +10 -1
  168. package/dist/lib/profiles-presets.js +9 -1
  169. package/dist/lib/profiles.d.ts +35 -1
  170. package/dist/lib/profiles.js +36 -15
  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 +40 -13
  180. package/dist/lib/rotate.js +238 -40
  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 → secrets/bundles.d.ts} +12 -2
  195. package/dist/lib/{secrets-bundles.js → secrets/bundles.js} +38 -17
  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 +12 -1
  203. package/dist/lib/session/artifacts.js +25 -5
  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 +16 -2
  219. package/dist/lib/session/types.js +10 -2
  220. package/dist/lib/shims.d.ts +64 -5
  221. package/dist/lib/shims.js +309 -47
  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 +112 -27
  227. package/dist/lib/state.js +320 -148
  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 +32 -1
  257. package/dist/lib/usage.js +70 -6
  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 +33 -4
  261. package/dist/lib/versions.js +376 -108
  262. package/package.json +32 -17
  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/cloud.d.ts.map +0 -1
  269. package/dist/commands/cloud.js.map +0 -1
  270. package/dist/commands/commands.d.ts.map +0 -1
  271. package/dist/commands/commands.js.map +0 -1
  272. package/dist/commands/daemon.d.ts.map +0 -1
  273. package/dist/commands/daemon.js.map +0 -1
  274. package/dist/commands/drive.d.ts.map +0 -1
  275. package/dist/commands/drive.js.map +0 -1
  276. package/dist/commands/exec.d.ts.map +0 -1
  277. package/dist/commands/exec.js.map +0 -1
  278. package/dist/commands/fork.d.ts.map +0 -1
  279. package/dist/commands/fork.js.map +0 -1
  280. package/dist/commands/hooks.d.ts.map +0 -1
  281. package/dist/commands/hooks.js.map +0 -1
  282. package/dist/commands/init.d.ts.map +0 -1
  283. package/dist/commands/init.js.map +0 -1
  284. package/dist/commands/mcp.d.ts.map +0 -1
  285. package/dist/commands/mcp.js.map +0 -1
  286. package/dist/commands/models.d.ts.map +0 -1
  287. package/dist/commands/models.js.map +0 -1
  288. package/dist/commands/packages.d.ts.map +0 -1
  289. package/dist/commands/packages.js.map +0 -1
  290. package/dist/commands/permissions.d.ts.map +0 -1
  291. package/dist/commands/permissions.js.map +0 -1
  292. package/dist/commands/plugins.d.ts.map +0 -1
  293. package/dist/commands/plugins.js.map +0 -1
  294. package/dist/commands/profiles.d.ts.map +0 -1
  295. package/dist/commands/profiles.js.map +0 -1
  296. package/dist/commands/pty.d.ts.map +0 -1
  297. package/dist/commands/pty.js.map +0 -1
  298. package/dist/commands/pull.d.ts.map +0 -1
  299. package/dist/commands/pull.js.map +0 -1
  300. package/dist/commands/push.d.ts +0 -3
  301. package/dist/commands/push.d.ts.map +0 -1
  302. package/dist/commands/push.js +0 -180
  303. package/dist/commands/push.js.map +0 -1
  304. package/dist/commands/refresh-memory.d.ts.map +0 -1
  305. package/dist/commands/refresh-memory.js.map +0 -1
  306. package/dist/commands/resource-view.d.ts.map +0 -1
  307. package/dist/commands/resource-view.js.map +0 -1
  308. package/dist/commands/routines.d.ts.map +0 -1
  309. package/dist/commands/routines.js.map +0 -1
  310. package/dist/commands/rules.d.ts.map +0 -1
  311. package/dist/commands/rules.js.map +0 -1
  312. package/dist/commands/secrets.d.ts.map +0 -1
  313. package/dist/commands/secrets.js.map +0 -1
  314. package/dist/commands/sessions-picker.d.ts.map +0 -1
  315. package/dist/commands/sessions-picker.js.map +0 -1
  316. package/dist/commands/sessions.d.ts.map +0 -1
  317. package/dist/commands/sessions.js.map +0 -1
  318. package/dist/commands/skills.d.ts.map +0 -1
  319. package/dist/commands/skills.js.map +0 -1
  320. package/dist/commands/status.d.ts.map +0 -1
  321. package/dist/commands/status.js.map +0 -1
  322. package/dist/commands/subagents.d.ts.map +0 -1
  323. package/dist/commands/subagents.js.map +0 -1
  324. package/dist/commands/sync.d.ts.map +0 -1
  325. package/dist/commands/sync.js.map +0 -1
  326. package/dist/commands/teams-picker.d.ts.map +0 -1
  327. package/dist/commands/teams-picker.js.map +0 -1
  328. package/dist/commands/teams.d.ts.map +0 -1
  329. package/dist/commands/teams.js.map +0 -1
  330. package/dist/commands/utils.d.ts.map +0 -1
  331. package/dist/commands/utils.js.map +0 -1
  332. package/dist/commands/versions.d.ts.map +0 -1
  333. package/dist/commands/versions.js.map +0 -1
  334. package/dist/commands/view.d.ts.map +0 -1
  335. package/dist/commands/view.js.map +0 -1
  336. package/dist/index.d.ts.map +0 -1
  337. package/dist/index.js.map +0 -1
  338. package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
  339. package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
  340. package/dist/lib/__tests__/bugfixes.test.js +0 -192
  341. package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
  342. package/dist/lib/__tests__/exec.test.d.ts +0 -2
  343. package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
  344. package/dist/lib/__tests__/exec.test.js +0 -446
  345. package/dist/lib/__tests__/exec.test.js.map +0 -1
  346. package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
  347. package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
  348. package/dist/lib/__tests__/git-sync.test.js +0 -138
  349. package/dist/lib/__tests__/git-sync.test.js.map +0 -1
  350. package/dist/lib/__tests__/hooks.test.d.ts +0 -2
  351. package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
  352. package/dist/lib/__tests__/hooks.test.js +0 -203
  353. package/dist/lib/__tests__/hooks.test.js.map +0 -1
  354. package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
  355. package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
  356. package/dist/lib/__tests__/memory-compile.test.js +0 -95
  357. package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
  358. package/dist/lib/__tests__/models.test.d.ts +0 -2
  359. package/dist/lib/__tests__/models.test.d.ts.map +0 -1
  360. package/dist/lib/__tests__/models.test.js +0 -239
  361. package/dist/lib/__tests__/models.test.js.map +0 -1
  362. package/dist/lib/__tests__/rotate.test.d.ts +0 -2
  363. package/dist/lib/__tests__/rotate.test.d.ts.map +0 -1
  364. package/dist/lib/__tests__/rotate.test.js +0 -80
  365. package/dist/lib/__tests__/rotate.test.js.map +0 -1
  366. package/dist/lib/__tests__/secrets-bundles.test.d.ts +0 -2
  367. package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +0 -1
  368. package/dist/lib/__tests__/secrets-bundles.test.js +0 -104
  369. package/dist/lib/__tests__/secrets-bundles.test.js.map +0 -1
  370. package/dist/lib/__tests__/secrets.test.d.ts +0 -2
  371. package/dist/lib/__tests__/secrets.test.d.ts.map +0 -1
  372. package/dist/lib/__tests__/secrets.test.js +0 -90
  373. package/dist/lib/__tests__/secrets.test.js.map +0 -1
  374. package/dist/lib/__tests__/shims.test.d.ts +0 -2
  375. package/dist/lib/__tests__/shims.test.d.ts.map +0 -1
  376. package/dist/lib/__tests__/shims.test.js +0 -39
  377. package/dist/lib/__tests__/shims.test.js.map +0 -1
  378. package/dist/lib/__tests__/usage.test.d.ts +0 -2
  379. package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
  380. package/dist/lib/__tests__/usage.test.js +0 -220
  381. package/dist/lib/__tests__/usage.test.js.map +0 -1
  382. package/dist/lib/__tests__/versions.test.d.ts +0 -2
  383. package/dist/lib/__tests__/versions.test.d.ts.map +0 -1
  384. package/dist/lib/__tests__/versions.test.js +0 -63
  385. package/dist/lib/__tests__/versions.test.js.map +0 -1
  386. package/dist/lib/agents.d.ts.map +0 -1
  387. package/dist/lib/agents.js.map +0 -1
  388. package/dist/lib/artifact-actions.d.ts.map +0 -1
  389. package/dist/lib/artifact-actions.js.map +0 -1
  390. package/dist/lib/cloud/codex.d.ts.map +0 -1
  391. package/dist/lib/cloud/codex.js.map +0 -1
  392. package/dist/lib/cloud/factory.d.ts.map +0 -1
  393. package/dist/lib/cloud/factory.js.map +0 -1
  394. package/dist/lib/cloud/registry.d.ts.map +0 -1
  395. package/dist/lib/cloud/registry.js.map +0 -1
  396. package/dist/lib/cloud/rush.d.ts.map +0 -1
  397. package/dist/lib/cloud/rush.js.map +0 -1
  398. package/dist/lib/cloud/store.d.ts.map +0 -1
  399. package/dist/lib/cloud/store.js.map +0 -1
  400. package/dist/lib/cloud/stream.d.ts.map +0 -1
  401. package/dist/lib/cloud/stream.js.map +0 -1
  402. package/dist/lib/cloud/types.d.ts.map +0 -1
  403. package/dist/lib/cloud/types.js.map +0 -1
  404. package/dist/lib/commands.d.ts.map +0 -1
  405. package/dist/lib/commands.js.map +0 -1
  406. package/dist/lib/convert.d.ts.map +0 -1
  407. package/dist/lib/convert.js.map +0 -1
  408. package/dist/lib/daemon.d.ts.map +0 -1
  409. package/dist/lib/daemon.js.map +0 -1
  410. package/dist/lib/drive-sync.d.ts.map +0 -1
  411. package/dist/lib/drive-sync.js.map +0 -1
  412. package/dist/lib/exec.d.ts.map +0 -1
  413. package/dist/lib/exec.js.map +0 -1
  414. package/dist/lib/factory.d.ts +0 -57
  415. package/dist/lib/factory.d.ts.map +0 -1
  416. package/dist/lib/factory.js +0 -110
  417. package/dist/lib/factory.js.map +0 -1
  418. package/dist/lib/git.d.ts.map +0 -1
  419. package/dist/lib/git.js.map +0 -1
  420. package/dist/lib/help.d.ts.map +0 -1
  421. package/dist/lib/help.js.map +0 -1
  422. package/dist/lib/hooks.d.ts.map +0 -1
  423. package/dist/lib/hooks.js.map +0 -1
  424. package/dist/lib/manifest.d.ts.map +0 -1
  425. package/dist/lib/manifest.js.map +0 -1
  426. package/dist/lib/markdown.d.ts.map +0 -1
  427. package/dist/lib/markdown.js.map +0 -1
  428. package/dist/lib/mcp.d.ts.map +0 -1
  429. package/dist/lib/mcp.js.map +0 -1
  430. package/dist/lib/memory-compile.d.ts.map +0 -1
  431. package/dist/lib/memory-compile.js.map +0 -1
  432. package/dist/lib/memory.d.ts.map +0 -1
  433. package/dist/lib/memory.js.map +0 -1
  434. package/dist/lib/models.d.ts.map +0 -1
  435. package/dist/lib/models.js.map +0 -1
  436. package/dist/lib/permissions.d.ts.map +0 -1
  437. package/dist/lib/permissions.js.map +0 -1
  438. package/dist/lib/picker.d.ts.map +0 -1
  439. package/dist/lib/picker.js.map +0 -1
  440. package/dist/lib/plugins.d.ts.map +0 -1
  441. package/dist/lib/plugins.js.map +0 -1
  442. package/dist/lib/profiles-keychain.d.ts +0 -3
  443. package/dist/lib/profiles-keychain.d.ts.map +0 -1
  444. package/dist/lib/profiles-keychain.js +0 -10
  445. package/dist/lib/profiles-keychain.js.map +0 -1
  446. package/dist/lib/profiles-presets.d.ts.map +0 -1
  447. package/dist/lib/profiles-presets.js.map +0 -1
  448. package/dist/lib/profiles.d.ts.map +0 -1
  449. package/dist/lib/profiles.js.map +0 -1
  450. package/dist/lib/pty-client.d.ts.map +0 -1
  451. package/dist/lib/pty-client.js.map +0 -1
  452. package/dist/lib/pty-server.d.ts.map +0 -1
  453. package/dist/lib/pty-server.js.map +0 -1
  454. package/dist/lib/registry.d.ts.map +0 -1
  455. package/dist/lib/registry.js.map +0 -1
  456. package/dist/lib/resources.d.ts.map +0 -1
  457. package/dist/lib/resources.js.map +0 -1
  458. package/dist/lib/rotate.d.ts.map +0 -1
  459. package/dist/lib/rotate.js.map +0 -1
  460. package/dist/lib/routines.d.ts.map +0 -1
  461. package/dist/lib/routines.js.map +0 -1
  462. package/dist/lib/runner.d.ts.map +0 -1
  463. package/dist/lib/runner.js.map +0 -1
  464. package/dist/lib/sandbox.d.ts.map +0 -1
  465. package/dist/lib/sandbox.js.map +0 -1
  466. package/dist/lib/scheduler.d.ts.map +0 -1
  467. package/dist/lib/scheduler.js.map +0 -1
  468. package/dist/lib/secrets-bundles.d.ts.map +0 -1
  469. package/dist/lib/secrets-bundles.js.map +0 -1
  470. package/dist/lib/secrets.d.ts +0 -27
  471. package/dist/lib/secrets.d.ts.map +0 -1
  472. package/dist/lib/secrets.js +0 -127
  473. package/dist/lib/secrets.js.map +0 -1
  474. package/dist/lib/session/__tests__/db.test.d.ts +0 -2
  475. package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
  476. package/dist/lib/session/__tests__/db.test.js +0 -54
  477. package/dist/lib/session/__tests__/db.test.js.map +0 -1
  478. package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
  479. package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
  480. package/dist/lib/session/__tests__/discover.test.js +0 -63
  481. package/dist/lib/session/__tests__/discover.test.js.map +0 -1
  482. package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
  483. package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
  484. package/dist/lib/session/__tests__/prompt.test.js +0 -44
  485. package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
  486. package/dist/lib/session/__tests__/render.test.d.ts +0 -2
  487. package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
  488. package/dist/lib/session/__tests__/render.test.js +0 -602
  489. package/dist/lib/session/__tests__/render.test.js.map +0 -1
  490. package/dist/lib/session/artifacts.d.ts.map +0 -1
  491. package/dist/lib/session/artifacts.js.map +0 -1
  492. package/dist/lib/session/db.d.ts.map +0 -1
  493. package/dist/lib/session/db.js.map +0 -1
  494. package/dist/lib/session/discover.d.ts.map +0 -1
  495. package/dist/lib/session/discover.js.map +0 -1
  496. package/dist/lib/session/parse.d.ts.map +0 -1
  497. package/dist/lib/session/parse.js.map +0 -1
  498. package/dist/lib/session/prompt.d.ts.map +0 -1
  499. package/dist/lib/session/prompt.js.map +0 -1
  500. package/dist/lib/session/prompt.test.d.ts +0 -2
  501. package/dist/lib/session/prompt.test.d.ts.map +0 -1
  502. package/dist/lib/session/prompt.test.js +0 -57
  503. package/dist/lib/session/prompt.test.js.map +0 -1
  504. package/dist/lib/session/render.d.ts.map +0 -1
  505. package/dist/lib/session/render.js.map +0 -1
  506. package/dist/lib/session/team-filter.d.ts.map +0 -1
  507. package/dist/lib/session/team-filter.js.map +0 -1
  508. package/dist/lib/session/team-filter.test.d.ts +0 -2
  509. package/dist/lib/session/team-filter.test.d.ts.map +0 -1
  510. package/dist/lib/session/team-filter.test.js +0 -157
  511. package/dist/lib/session/team-filter.test.js.map +0 -1
  512. package/dist/lib/session/types.d.ts.map +0 -1
  513. package/dist/lib/session/types.js.map +0 -1
  514. package/dist/lib/shims.d.ts.map +0 -1
  515. package/dist/lib/shims.js.map +0 -1
  516. package/dist/lib/skills.d.ts.map +0 -1
  517. package/dist/lib/skills.js.map +0 -1
  518. package/dist/lib/state.d.ts.map +0 -1
  519. package/dist/lib/state.js.map +0 -1
  520. package/dist/lib/subagents.d.ts.map +0 -1
  521. package/dist/lib/subagents.js.map +0 -1
  522. package/dist/lib/teams/agents.d.ts.map +0 -1
  523. package/dist/lib/teams/agents.js.map +0 -1
  524. package/dist/lib/teams/api.d.ts.map +0 -1
  525. package/dist/lib/teams/api.js.map +0 -1
  526. package/dist/lib/teams/cloud.d.ts +0 -11
  527. package/dist/lib/teams/cloud.d.ts.map +0 -1
  528. package/dist/lib/teams/cloud.js +0 -169
  529. package/dist/lib/teams/cloud.js.map +0 -1
  530. package/dist/lib/teams/debug.d.ts.map +0 -1
  531. package/dist/lib/teams/debug.js.map +0 -1
  532. package/dist/lib/teams/file_ops.d.ts.map +0 -1
  533. package/dist/lib/teams/file_ops.js.map +0 -1
  534. package/dist/lib/teams/parsers.d.ts.map +0 -1
  535. package/dist/lib/teams/parsers.js.map +0 -1
  536. package/dist/lib/teams/persistence.d.ts.map +0 -1
  537. package/dist/lib/teams/persistence.js.map +0 -1
  538. package/dist/lib/teams/ralph.d.ts +0 -8
  539. package/dist/lib/teams/ralph.d.ts.map +0 -1
  540. package/dist/lib/teams/ralph.js +0 -59
  541. package/dist/lib/teams/ralph.js.map +0 -1
  542. package/dist/lib/teams/registry.d.ts.map +0 -1
  543. package/dist/lib/teams/registry.js.map +0 -1
  544. package/dist/lib/teams/summarizer.d.ts.map +0 -1
  545. package/dist/lib/teams/summarizer.js.map +0 -1
  546. package/dist/lib/template.d.ts.map +0 -1
  547. package/dist/lib/template.js.map +0 -1
  548. package/dist/lib/types.d.ts.map +0 -1
  549. package/dist/lib/types.js.map +0 -1
  550. package/dist/lib/usage.d.ts.map +0 -1
  551. package/dist/lib/usage.js.map +0 -1
  552. package/dist/lib/versions.d.ts.map +0 -1
  553. package/dist/lib/versions.js.map +0 -1
  554. package/scripts/rebuild-sqlite.sh +0 -46
package/README.md CHANGED
@@ -1,537 +1,448 @@
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
- - [Run open-source models through Claude Code](#run-open-source-models-through-claude-code)
24
- - [Keep secrets out of plaintext env files](#keep-secrets-out-of-plaintext-env-files)
25
- - [Put agents on a team](#put-agents-on-a-team)
26
- - [Non-interactive usage](#non-interactive-usage)
27
- - [Search sessions fast](#search-sessions-fast)
28
- - [Pin agent versions per project](#pin-agent-versions-per-project)
29
- - [Install skills, MCP servers, and commands once](#install-skills-mcp-servers-and-commands-once--every-agent-gets-them)
30
- - [Quick reference](#quick-reference)
31
- - [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)
32
55
  - [Compatibility](#compatibility)
33
56
  - [FAQ](#faq)
34
- - [Contributing](#contributing)
35
- - [License](#license)
36
57
 
37
58
  ---
38
59
 
39
- ## Run any agent, same interface
60
+ ## Pin versions per project
40
61
 
41
62
  ```bash
42
- agents run claude "Find all auth vulnerabilities in src/"
43
- agents run codex "Fix the issues Claude found"
44
- agents run gemini "Write tests for the fixed code"
63
+ # This project needs claude@2.0.65 -- newer versions changed tool calling.
64
+ agents use claude@2.0.65 -p
65
+
66
+ # The monorepo uses codex@0.116.0 across the team.
67
+ agents use codex@0.116.0 -p
45
68
  ```
46
69
 
47
- Each agent resolves to the project-pinned version, with the right skills, MCP servers, and permissions already synced. No setup between steps -- just run.
70
+ This creates an `agents.yaml` at the project root:
48
71
 
49
- `agents run` also passes environment overrides to the spawned CLI. For one-off flags this looks like `--env KEY=VALUE`; for repeatable provider setups see [profiles](#run-open-source-models-through-claude-code) below.
72
+ ```yaml
73
+ # agents.yaml (commit this to your repo)
74
+ agents:
75
+ claude: "2.0.65"
76
+ codex: "0.116.0"
77
+ ```
50
78
 
51
- 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.
52
80
 
53
81
  ```bash
54
- # Friday night code review
55
- agents run claude "Review all PRs merged this week, summarize risks" \
56
- | agents run codex "Write regression tests for the top 3 risks"
57
-
58
- # Same pipeline, different project -- different agent versions, same commands
59
- cd ../other-project
60
- agents run claude "Review all PRs merged this week, summarize risks"
61
- # ^ 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
62
85
  ```
63
86
 
64
- Supports plan (read-only) and edit modes, effort levels that map to the right model per agent, and JSON output for scripting.
65
-
66
87
  ---
67
88
 
68
- ## Run open-source models through Claude Code
89
+ ## One config, every agent
69
90
 
70
- `agents profiles` saves a named bundle of (host CLI, endpoint, model, keychain-backed auth). Ship a preset, paste the API key once, then invoke any open-source model as a first-class agent — no shell function, no plaintext token, no proxy.
91
+ ```bash
92
+ # Set up the Notion MCP server once.
93
+ agents install mcp:com.notion/mcp
94
+
95
+ # It's now registered with Claude Code, Codex, Gemini CLI, and Cursor.
96
+ agents mcp list
97
+ ```
98
+
99
+ Skills, slash commands, rules, hooks, and permissions work the same way -- install once in `~/.agents/`, synced to every agent's native format automatically.
71
100
 
72
101
  ```bash
73
- agents profiles add kimi # prompts for OpenRouter key, stores in Keychain
74
- agents run kimi "refactor this file" # Claude Code UI, Kimi K2.5 responses
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
75
106
  ```
76
107
 
77
- Built-in presets (all via OpenRouter, one shared key):
108
+ Write one `AGENTS.md`. It becomes `CLAUDE.md` for Claude Code, `GEMINI.md` for Gemini CLI, `.cursorrules` for Cursor.
78
109
 
79
- | Preset | Model | Notes |
80
- |---|---|---|
81
- | `kimi` | `moonshotai/kimi-k2.5` | #1 HumanEval (99%), top Kimi. Reasoning — interactive only. |
82
- | `kimi-chat` | `moonshotai/kimi-k2-0905` | Non-reasoning, print-safe for `agents run`. |
83
- | `minimax` | `minimax/minimax-m2.5` | #1 SWE-bench Verified (80.2%). Reasoning. |
84
- | `glm` | `z-ai/glm-5` | #1 Chatbot Arena among open-weight (1451 ELO). |
85
- | `qwen` | `qwen/qwen3-coder-next` | Latest coding Qwen, sparse MoE 80B/3B active. Print-safe. |
86
- | `deepseek` | `deepseek/deepseek-chat-v3-0324` | Latest non-reasoning DeepSeek Chat. Print-safe. |
110
+ ---
87
111
 
88
- `agents profiles presets` lists the catalog. `agents profiles view <name>` shows the env, model, and keychain status.
112
+ ## Run any agent
89
113
 
90
- **How it works:** a profile swaps the *model* while keeping Claude Code as the *agent runtime* — same UI, slash commands, skills, MCP tools, permission system. Under the hood it sets `ANTHROPIC_BASE_URL` + `ANTHROPIC_MODEL` and pulls `ANTHROPIC_AUTH_TOKEN` from Keychain at spawn time.
114
+ ```bash
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"
118
+ ```
91
119
 
92
- Profile YAML lives in `~/.agents/profiles/<name>.yml` with no secrets safe to `agents push` to a shared repo. Keys live only in macOS Keychain; rotate with `agents profiles login <provider>`.
120
+ Each resolves to the project-pinned version with skills, MCP servers, and permissions already synced.
93
121
 
94
- **Custom endpoints** — for self-hosted models (Ollama, vLLM) or other aggregators, drop a YAML file directly:
122
+ ### Rate-limited? Keep working.
95
123
 
96
- ```yaml
97
- # ~/.agents/profiles/local-qwen.yml
98
- name: local-qwen
99
- host: { agent: claude }
100
- env:
101
- ANTHROPIC_BASE_URL: https://ollama.internal
102
- ANTHROPIC_MODEL: qwen3.6:35b
103
- ANTHROPIC_SMALL_FAST_MODEL: qwen3.6:35b
104
- auth:
105
- envVar: ANTHROPIC_AUTH_TOKEN
106
- keychainItem: agents-cli.ollama.token
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
107
127
  ```
108
128
 
109
- Then `agents profiles login ollama` to store the token, and `agents run local-qwen "..."` works.
110
-
111
- **Note on `--print` and reasoning models:** Claude Code's `--print` mode consolidates response text, but returns empty when the response contains `thinking` blocks. Models flagged REASONING in the preset descriptions work fine interactively (plain `claude` launch with the same env) but not with `agents run --print`. Use the non-reasoning `-chat` variant for scripting.
129
+ ### Multiple accounts? Spread the load.
112
130
 
113
- ---
131
+ ```bash
132
+ # Picks the signed-in account you haven't used recently.
133
+ agents run claude "summarize recent commits" --rotate
134
+ ```
114
135
 
115
- ## Keep secrets out of plaintext env files
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.
116
137
 
117
- `agents secrets` stores sensitive values (API keys, tokens, even a test credit card number) in the macOS Keychain and injects them into agents at run time. Bundle files on disk contain only references — safe to `agents push` to a shared repo.
138
+ ### Chain agents
118
139
 
119
140
  ```bash
120
- agents secrets add prod-stripe --description "Stripe prod + test card"
121
- agents secrets set prod-stripe STRIPE_SECRET_KEY # prompts, stores in keychain
122
- agents secrets set prod-stripe TEST_CARD_NUMBER # prompts, stores in keychain
123
- agents secrets set prod-stripe STRIPE_API_VERSION --value "2024-06-20"
124
- agents secrets set prod-stripe GITHUB_TOKEN --env GH_TOKEN # read from parent shell
125
- agents secrets set prod-stripe GCP_CREDS --file ~/.config/gcloud/creds.json
126
-
127
- agents run claude "charge a test card" --secrets prod-stripe
141
+ agents run claude "Review PRs merged this week, summarize risks" \
142
+ | agents run codex "Write regression tests for the top 3 risks"
128
143
  ```
129
144
 
130
- The resulting `~/.agents/secrets/prod-stripe.yml` holds only refs:
145
+ Supports plan (read-only) and edit modes, effort levels, JSON output for scripting, and timeout limits.
131
146
 
132
- ```yaml
133
- name: prod-stripe
134
- vars:
135
- STRIPE_SECRET_KEY: keychain:STRIPE_SECRET_KEY
136
- TEST_CARD_NUMBER: keychain:TEST_CARD_NUMBER
137
- STRIPE_API_VERSION: { value: "2024-06-20" }
138
- GITHUB_TOKEN: env:GH_TOKEN
139
- GCP_CREDS: file:~/.config/gcloud/creds.json
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
140
152
  ```
141
153
 
142
- Merge order on `agents run` is **profile env < `--secrets <bundle>` < `--env K=V`** a profile carries provider auth, bundles carry user-defined values, `--env` is the per-invocation override. Resolution happens right before `spawn`; a missing keychain item aborts the run before the child starts.
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.
155
+
156
+ Works today with claude, codex, gemini, cursor, opencode, openclaw. Other harnesses keep running on the direct-exec path.
143
157
 
144
158
  ---
145
159
 
146
- ## Put agents on a team
160
+ ## Sessions across agents
147
161
 
148
- `agents run` runs one agent synchronously. **Teams** run many agents on the same task, in the background, with coordination.
162
+ When you run multiple agents, conversations scatter across tools. Session search brings them together.
149
163
 
150
164
  ```bash
151
- agents teams create auth-feature
165
+ # Where was that auth conversation? Search Claude Code, Codex, Gemini CLI, OpenCode at once.
166
+ agents sessions "auth middleware"
152
167
 
153
- agents teams add auth-feature claude "Research auth libraries" --name researcher
154
- agents teams add auth-feature codex "Draft the migration" --name migrator --after researcher
155
- agents teams add auth-feature claude "Write tests for the new code" --name tester --after migrator
168
+ # Filter by agent, project, or time window
169
+ agents sessions --agent codex --since 7d
170
+ agents sessions --project my-app
156
171
 
157
- agents teams start auth-feature # launches teammates whose --after deps are done
158
- agents teams status auth-feature # who's working, what they've changed, what they said
159
- agents teams disband auth-feature # stop everyone, clean up
160
- ```
172
+ # Read a full conversation
173
+ agents sessions a1b2c3d4 --markdown
161
174
 
162
- Each teammate runs detached. Close your terminal; they keep working. Check in whenever.
175
+ # Just the last 3 turns, user messages only
176
+ agents sessions a1b2c3d4 --last 3 --include user
177
+ ```
163
178
 
164
- - `--name alice` gives a teammate a handle. Refer to them by name everywhere (`teams rm auth alice`, `teams logs alice`).
165
- - `--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.
166
- - For Claude teammates, `agent_id` IS the Claude session UUID -- `agents sessions <agent_id> --markdown` opens the full conversation.
167
- - Modes match `exec`: `plan | edit | full`. `--model`, `--env KEY=VALUE`, `--cwd` all passthroughs too.
168
- - `teams ls` filters: substring query, `--agent claude[@version]`, `--status working|done|failed|empty`, `--since 2h --until 30d`.
169
- - Non-TTY output is valid JSON by default, with a `cursor` field in every `status` response for efficient delta polling (`--since <cursor>`).
179
+ Interactive picker when you're in a terminal. Structured output (`--json`, `--markdown`, filtered by role or turn count) when piped.
170
180
 
171
- 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.
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.
172
182
 
173
183
  ---
174
184
 
175
- ## Non-interactive usage
185
+ ## Run open models through Claude Code (experimental)
176
186
 
177
- Other coding agents usually run in non-TTY shells. `agents` now supports that mode directly:
187
+ > **Note:** Profiles are experimental. Enable with `agents beta profiles enable`.
178
188
 
179
189
  ```bash
180
- agents add codex@latest --yes
181
- agents use claude@2.1.79 --yes
182
- agents commands add --names review-pr,debug --agents codex@0.113.0
183
- agents skills add --names agents-cli --agents claude@default
184
- agents install ./team-agent-pack --agents codex@0.113.0
185
- agents mcp add postgres --agents claude@2.1.79 -- npx -y @modelcontextprotocol/server-postgres
186
- agents mcp register postgres
187
- agents sessions <session-id> --markdown
188
- agents routines view <job-name>
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"
189
194
  ```
190
195
 
191
- Rules for automation:
196
+ Built-in presets (all via OpenRouter, one shared key):
192
197
 
193
- - Pass explicit names or IDs instead of relying on pickers.
194
- - Use `--yes` when a command would otherwise ask for default sync or confirmation choices.
195
- - Use `--names` with `commands`, `skills`, `hooks`, `rules`, and `permissions` to install from central storage without a checkbox prompt.
196
- - Use `agent@version` or `agent@default` with `--agents` when you need an exact managed version.
197
- - Long `view` commands print directly in non-interactive shells instead of opening `less`.
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. |
198
205
 
199
- If a command still needs a human-only picker, it now exits with a plain-text hint that shows the matching non-interactive form.
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.
200
207
 
201
- ---
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
219
+ ```
220
+
221
+ Profile YAML has no secrets -- safe to `agents repo push` to a shared repo. `agents profiles presets` lists the full catalog.
202
222
 
203
- ## Search sessions fast
223
+ ---
204
224
 
205
- Interactive terminals now get a live-search picker for sessions:
225
+ ## Teams
206
226
 
207
227
  ```bash
208
- agents sessions
209
- agents sessions --agent codex
210
- agents sessions --project agents-cli
211
- agents sessions --agent gemini "session discovery"
212
- ```
228
+ agents teams create auth-feature
213
229
 
214
- What you can type into the picker:
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
215
234
 
216
- - Session ID or short ID
217
- - Prompt text / topic text
218
- - Project name
219
- - Account email
220
- - Agent name or version
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
237
+ ```
221
238
 
222
- 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`.
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`.
223
240
 
224
- 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.
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).
225
242
 
226
243
  ---
227
244
 
228
- ## Pin agent versions per project
245
+ ## Secrets
229
246
 
230
247
  ```bash
231
- agents add claude@2.0.0 # Install specific version
232
- agents use claude@2.0.0 -p # Pin to this project
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
233
255
  ```
234
256
 
235
- Like `.nvmrc` for Node -- different projects use different agent versions. A shim system reads a project-root `agents.yaml` and routes to the right binary automatically. No other tool does this for AI agents.
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>
236
260
 
237
- 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.
261
+ Merge order: profile env < `--secrets` < `--env K=V`. A missing keychain item aborts before the child starts.
238
262
 
239
263
  ---
240
264
 
241
- ## Install skills, MCP servers, and commands once -- every agent gets them
242
-
243
- ### Skills
244
-
245
- Skills are reusable knowledge packs -- rules, patterns, and expertise that make your agents better at specific tasks. Install once, available everywhere.
265
+ ## Routines
246
266
 
247
267
  ```bash
248
- agents skills add gh:yourname/python-expert # Install from GitHub
249
- agents skills add ./my-skills # Install from local path
250
- agents skills list # See what's installed
251
- agents skills view python-expert # View skill details and rules
252
- ```
253
-
254
- A skill is a directory with a `SKILL.md` and optional rule files:
268
+ # Claude Code reviews PRs every weekday at 9 AM. Scheduler auto-starts.
269
+ agents routines add daily-digest \
270
+ --schedule "0 9 * * 1-5" \
271
+ --agent claude \
272
+ --prompt "Review yesterday's PRs and summarize key changes"
255
273
 
274
+ agents routines list # All jobs + next run times
275
+ agents routines run daily-digest # Test it now, ignore the schedule
276
+ agents routines logs daily-digest # Check last execution
256
277
  ```
257
- python-expert/
258
- SKILL.md # Metadata + description
259
- rules/
260
- type-hints.md # Individual rules your agents follow
261
- error-handling.md
262
- testing.md
263
- ```
264
278
 
265
- Skills are stored centrally in `~/.agents/skills/` and distributed to each agent's native skill directory. Write once, every agent gets it.
279
+ Jobs run sandboxed -- agents only see directories and tools you explicitly allow.
280
+
281
+ ---
266
282
 
267
- ### Install MCP servers everywhere at once
283
+ ## PTY
268
284
 
269
285
  ```bash
270
- agents search notion # Find MCP servers
271
- agents install mcp:com.notion/mcp # Install + register with ALL agents
272
- agents mcp list # See what's registered
286
+ # Give agents a real terminal for REPLs, TUIs, interactive programs.
287
+ SID=$(agents pty start)
288
+ agents pty exec $SID "python3"
289
+ agents pty screen $SID # Clean text, no ANSI -- what a human sees
290
+ agents pty write $SID "print('hello')\n"
291
+ agents pty stop $SID
273
292
  ```
274
293
 
275
- No more running `claude mcp add`, then `codex mcp add`, then editing Gemini's config file.
294
+ A sidecar server holds sessions alive between CLI calls. `screen` renders via xterm-headless. Sessions auto-clean after 30 minutes idle.
276
295
 
277
- ### Manage slash commands
296
+ ---
297
+
298
+ ## Portable setup
278
299
 
279
300
  ```bash
280
- agents commands add gh:yourname/commands # Install from repo
281
- agents commands list # See all commands
282
- agents commands view review-pr # View command content
301
+ # New machine? One command.
302
+ agents init
303
+
304
+ # Installs CLIs, registers MCP servers, syncs skills/commands/rules/hooks,
305
+ # sets up shims, configures defaults. Done.
306
+
307
+ agents repo push # Snapshot your config to git
283
308
  ```
284
309
 
285
- Commands are markdown files with a description. The CLI handles format conversion automatically -- markdown for Claude/Gemini/Cursor, TOML for Codex.
310
+ ### How config is layered
286
311
 
287
- ### Sync your entire setup
312
+ Two repos with the same shape, different roles:
288
313
 
289
- ```bash
290
- agents push # Snapshot your config to git
291
- agents pull # Restore on any machine
292
- ```
314
+ | Repo | Role | Owner |
315
+ |---|---|---|
316
+ | `~/.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) |
317
+ | `~/.agents/` | **User repo** — your personal additions and overrides. This is what `agents repo push`/`pull` syncs. | You |
293
318
 
294
- `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.
319
+ **Version pinning:** `agents.yaml` at project root pins which agent version to use (like `.nvmrc` for Node).
295
320
 
296
- ### Interactive PTY sessions
321
+ **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.
297
322
 
298
- Give your agents the ability to interact with full-screen terminal programs -- REPLs, TUIs, interactive installers, anything that needs a real terminal.
323
+ 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.
299
324
 
300
- ```bash
301
- SID=$(agents pty start) # Start a session
302
- agents pty exec $SID "python3" # Launch Python REPL
303
- agents pty screen $SID # See what's on screen
304
- agents pty write $SID "print('hello')\n" # Type into it
305
- agents pty screen $SID # See the result
306
- agents pty write $SID "exit()\n" # Quit
307
- agents pty stop $SID # Clean up
308
- ```
325
+ ---
309
326
 
310
- 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.
327
+ ## Private skills
311
328
 
312
- ### Schedule agents as routines
329
+ 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.
313
330
 
314
331
  ```bash
315
- agents routines add daily-digest \
316
- --schedule "0 9 * * 1-5" \
317
- --agent claude \
318
- --prompt "Review yesterday's PRs and summarize key changes"
319
- # The scheduler auto-starts on first add — no separate daemon command needed.
332
+ # Add a private repo for work-only skills
333
+ agents repo add gh:yourname/.agents-work
320
334
 
321
- agents routines list # See all jobs
322
- agents routines status # Check scheduler and upcoming runs
323
- agents routines logs daily-digest # Check execution logs
335
+ # Add with a custom alias
336
+ agents repo add git@github.com:acme/team-skills.git --as acme
337
+
338
+ agents repo list # Primary + every registered extra
339
+ agents repo pull # Pull updates for all enabled extras
340
+ agents repo disable acme # Stop merging without deleting
341
+ agents repo remove acme # Unregister and delete the clone
324
342
  ```
325
343
 
326
- Jobs run sandboxed -- agents only see directories and tools you explicitly allow.
344
+ 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.
327
345
 
328
- ### Manage rules/instructions, hooks, and permissions
346
+ ---
329
347
 
330
- 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.
348
+ ## Compatibility
331
349
 
332
- ```bash
333
- agents rules list # Show what's installed per agent
334
- agents rules add gh:team/rules # Install and sync to all agents
335
- agents rules view claude # View rule file content
336
- ```
350
+ | Agent | Versions | MCP | Commands | Skills | Rules | Hooks | Plugins | Permissions | Routines | Teams |
351
+ |-------|----------|-----|----------|--------|-------|-------|---------|-------------|----------|-------|
352
+ | Claude Code | yes | yes | yes | yes | CLAUDE.md | yes | yes | yes | yes | yes |
353
+ | Codex CLI | yes | yes | yes | yes | AGENTS.md | yes (>= 0.116.0) | -- | yes | yes | yes |
354
+ | Gemini CLI | yes | yes | yes | yes | GEMINI.md | yes (>= 0.26.0) | -- | -- | yes | yes |
355
+ | OpenClaw | yes | yes | -- | yes | workspace/AGENTS.md | yes | yes | -- | -- | -- |
356
+ | Cursor | yes | yes | yes | yes | .cursorrules | -- | -- | -- | -- | yes |
357
+ | OpenCode | yes | yes | yes | yes | AGENTS.md | -- | -- | yes | -- | yes |
358
+ | Copilot | yes | yes | yes | yes | AGENTS.md | -- | -- | -- | -- | -- |
359
+ | Amp | yes | yes | yes | yes | AGENTS.md | -- | -- | -- | -- | -- |
360
+ | Kiro | yes | yes | yes | yes | AGENTS.md | -- | -- | -- | -- | -- |
361
+ | Goose | yes | yes | -- | -- | AGENTS.md | -- | -- | -- | -- | -- |
362
+ | Roo Code | yes | yes | yes | yes | AGENTS.md | -- | -- | -- | -- | -- |
337
363
 
338
- Write one `AGENTS.md`, and it gets renamed and synced to each agent's native format automatically.
364
+ 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.
339
365
 
340
- ```bash
341
- agents hooks list # Show lifecycle hooks
342
- agents hooks add gh:team/hooks # Install hook scripts
366
+ 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`.
343
367
 
344
- agents permissions list # Show permission sets
345
- agents permissions add ./perms # Install permission groups
346
- ```
368
+ ## FAQ
347
369
 
348
- 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).
370
+ ### Why use `agents` instead of `claude` / `codex` / `gemini` directly?
349
371
 
350
- ---
372
+ 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`.
351
373
 
352
- ## Quick Reference
374
+ ### Is it free?
353
375
 
354
- ```bash
355
- # Agent versions
356
- agents add claude@latest # Install agent CLI
357
- agents remove codex@0.5.0 # Remove specific version
358
- agents use claude@2.0.0 # Set global default
359
- agents use claude@2.0.0 -p # Pin to this project
360
- agents list # Show all installed versions
361
- agents view claude # Show version details + resources
362
-
363
- # Skills
364
- agents skills list # List installed skills
365
- agents skills add <source> # Install from git/local
366
- agents skills remove <name> # Remove a skill
367
- agents skills view <name> # View skill details
368
-
369
- # Commands
370
- agents commands list # List slash commands
371
- agents commands add <source> # Install commands
372
- agents commands view <name> # View command content
373
-
374
- # Rules / Instructions
375
- agents rules list # List per-agent instruction files
376
- agents rules add <source> # Install from git/local
377
- agents rules remove <agent> # Remove rule file
378
- agents rules view <agent> # View rule file content
379
-
380
- # MCP servers
381
- agents search <query> # Find in registry
382
- agents install mcp:<name> # Install + register
383
- agents mcp list # Show registered servers
384
- agents mcp add <name> <cmd> # Register manually
385
-
386
- # Secrets (keychain-backed env bundles, injected at run time)
387
- agents secrets list # Show all bundles
388
- agents secrets add <name> # Create an empty bundle
389
- agents secrets set <bundle> <KEY> # Prompt, store in keychain, write ref
390
- agents secrets set <bundle> <KEY> --value <v> # Store as YAML literal
391
- agents secrets set <bundle> <KEY> --env <VAR> # Inherit from parent shell
392
- agents secrets set <bundle> <KEY> --file <path> # Read from a file at run time
393
- agents secrets view <name> [--reveal] # Show bundle (masked by default)
394
- agents secrets import <name> --from .env # Import a dotenv file into keychain
395
- agents secrets rm <name> # Delete bundle and purge keychain
396
- agents run <agent> "..." --secrets <name> # Inject a bundle (repeatable)
397
-
398
- # Sync
399
- agents pull [source] # Sync from repo
400
- agents push # Push changes back
401
-
402
- # Drive
403
- agents drive remote <user@host> # Set sync target
404
- agents drive pull # Pull sessions from remote
405
- agents drive push # Push sessions to remote
406
- agents drive attach # Use drive as active agent home
407
- agents drive detach # Restore to version home
408
- agents drive status # Show drive state
409
-
410
- # Execution
411
- agents run <agent> <prompt> # Run agent
412
- agents sessions <id> --markdown # Read a session by exact ID
413
- agents sessions --agent codex # Interactive filtered session search
414
- agents sessions --project agents # Interactive project-scoped session search
415
- agents routines add <name> # Schedule a job (scheduler auto-starts)
416
- agents routines list # Show all jobs
417
- agents routines status # Check scheduler status + upcoming runs
418
-
419
- # Teams (orchestrate multiple agents on a shared task)
420
- agents teams create <team> # Start a new team
421
- agents teams add <team> <agent> <task> # Add a teammate (runs immediately)
422
- --name alice # give them a handle
423
- --after alice,bob # stage as pending until deps complete
424
- --mode plan|edit|full # permissions
425
- --model <model> --env K=V # same passthroughs as exec
426
- agents teams start <team> # Launch pending teammates whose deps are done
427
- agents teams status <team> # Team standup (pass --since <cursor> for deltas)
428
- agents teams ls # List teams (--agent, --status, --since filters)
429
- agents teams remove <team> <teammate> # Let one teammate go (name or UUID prefix)
430
- agents teams disband <team> # Stop everyone, remove the team
431
- agents teams logs <teammate> # Read their raw log
432
- agents teams doctor # Check which agents can join a team
433
-
434
- # PTY sessions
435
- agents pty start # Start a PTY session (returns ID)
436
- agents pty exec <id> <command> # Run a command in the session
437
- agents pty screen <id> # Render terminal as clean text
438
- agents pty write <id> <input> # Send keystrokes (\n \t \e \xHH)
439
- agents pty read <id> # Read raw output
440
- agents pty signal <id> INT # Send signal
441
- agents pty list # Show active sessions
442
- agents pty stop <id> # Kill a session
443
- agents pty server status # Check sidecar server
444
- ```
376
+ 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.
445
377
 
446
- ---
378
+ ### Is this like `nvm` / `mise` / `asdf` for AI agents?
447
379
 
448
- ## Skill Format
380
+ 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.
449
381
 
450
- Create a `SKILL.md` with YAML frontmatter:
382
+ ### How does version switching actually work?
451
383
 
452
- ```markdown
453
- ---
454
- name: python-expert
455
- description: Python code analysis, type hints, and testing patterns
456
- author: Your Name
457
- version: 1.0.0
458
- keywords: [python, testing, types]
459
- ---
384
+ 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.
460
385
 
461
- # Python Expert
386
+ ### How do I share my agent setup with my team?
462
387
 
463
- High-level description of what this skill teaches your agents.
464
- ```
388
+ 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.
465
389
 
466
- Add rule files in a `rules/` subdirectory -- each rule is a markdown file with specific guidance your agents follow during conversations.
390
+ ### Do I need to write separate rules for each agent (CLAUDE.md, GEMINI.md, etc.)?
467
391
 
468
- ---
392
+ 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.
469
393
 
470
- ## Compatibility
394
+ ### Do agents use API keys or subscriptions?
471
395
 
472
- | Agent | Versions | MCP | Commands | Skills | Rules | Hooks | Permissions | Routines | Teams |
473
- |-------|----------|-----|----------|--------|-------|-------|-------------|----------|-------|
474
- | Claude | yes | yes | yes | yes | CLAUDE.md | yes | yes | yes | yes |
475
- | Codex | yes | yes | yes | yes | AGENTS.md | yes | yes | yes | yes |
476
- | Gemini | yes | yes | yes | yes | GEMINI.md | yes | -- | yes | yes |
477
- | Cursor | yes | yes | yes | yes | .cursorrules | -- | -- | -- | yes |
478
- | OpenCode | yes | yes | yes | yes | AGENTS.md | yes | yes | -- | yes |
479
- | OpenClaw | yes | yes | -- | yes | workspace/AGENTS.md | yes | -- | -- | -- |
396
+ 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.
480
397
 
481
- ## FAQ
398
+ ### Does it store my API keys or send telemetry?
482
399
 
483
- ### Why use `agents` instead of `claude` / `codex` / `gemini` directly?
400
+ 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/`.
484
401
 
485
- 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`.
402
+ ### Which platforms?
486
403
 
487
- ### Is this like `nvm` / `mise` / `asdf` but for AI agents?
404
+ macOS and Linux. Windows via WSL works but isn't first-class yet.
488
405
 
489
- For version management, yes that's the closest analogue. `agents-cli` reads a project-root `agents.yaml`, 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
+ **macOS-only features:** Keychain-based secrets (`agents secrets`, `agents profiles login`) require macOS. On Linux, use environment variables or `.env` files for API keys. Native Linux credential store support is planned.
490
407
 
491
- ### How is this different from Vercel's Open Agents?
408
+ ### Do I need Node.js?
492
409
 
493
- 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
+ The installer tries Bun first (faster), falls back to npm. Node 18+ required at runtime.
494
411
 
495
- ### Does it store my API keys or send telemetry?
412
+ ### Can I use it in CI?
496
413
 
497
- 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.
414
+ 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.
498
415
 
499
- ### Do I need Node.js? Bun?
416
+ ### What happens to my config when I switch versions?
500
417
 
501
- Either works. The installer tries Bun first (faster), falls back to npm. Node 18+ is required at runtime. No other build tools needed.
418
+ 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/`.
502
419
 
503
- ### Which platforms are supported?
420
+ ### Does session search use RAG or semantic search?
504
421
 
505
- macOS and Linux today. Windows via WSL works but isn't first-class. Native Windows support is on the roadmap.
422
+ 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.
506
423
 
507
- ### Can I use `agents` in CI?
424
+ ### How do I use custom or local models?
508
425
 
509
- 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.
426
+ 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.
510
427
 
511
- ### Can I add support for a new agent CLI?
428
+ ### Can I add support for a new agent?
512
429
 
513
- 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.
430
+ 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.
514
431
 
515
432
  ### What's the relationship to Phoenix Labs / Rush?
516
433
 
517
- `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.
434
+ `agents-cli` is an open client maintained by Phoenix Labs. Rush is a separate product. No Rush account required, no upsell.
518
435
 
519
436
  ## Contributing
520
437
 
521
- PRs and issues welcome. To develop locally:
522
-
523
438
  ```bash
524
439
  git clone https://github.com/phnx-labs/agents-cli
525
440
  cd agents-cli
526
- bun install
527
- bun run build
528
- bun test
441
+ bun install && bun run build && bun test
529
442
  ```
530
443
 
531
- 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).
532
-
533
- 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).
444
+ 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.
534
445
 
535
446
  ## License
536
447
 
537
- MIT see [LICENSE](./LICENSE).
448
+ MIT -- see [LICENSE](./LICENSE).