@robbiesrobotics/alice-agents 1.5.8 → 1.5.10

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 (591) hide show
  1. package/README.md +152 -129
  2. package/bin/alice-install.mjs +27 -35
  3. package/lib/hermes-agent.mjs +449 -0
  4. package/lib/hermes-installer.mjs +338 -0
  5. package/lib/installer.mjs +254 -19
  6. package/lib/skills.mjs +128 -4
  7. package/package.json +3 -3
  8. package/templates/skills/acculynx/SKILL.md +183 -0
  9. package/templates/skills/acculynx/references/analysis_template.py +116 -0
  10. package/templates/skills/acculynx/references/dashboard_page.tsx +641 -0
  11. package/templates/skills/claude-code/SKILL.md +2 -2
  12. package/templates/skills/coding-agent/SKILL.md +68 -0
  13. package/templates/skills/crawl4ai/SKILL.md +119 -0
  14. package/templates/skills/crawl4ai/scripts/crwl +3 -0
  15. package/templates/workspaces/_shared/AGENTS-hermes.md +54 -0
  16. package/templates/workspaces/_shared/AGENTS.md +25 -0
  17. package/templates/workspaces/_shared/SOUL-hermes.md +35 -0
  18. package/templates/workspaces/_shared/hermes-agent-skill.md +40 -0
  19. package/templates/workspaces/_shared/hermes-orchestrator-skill.md +150 -0
  20. package/templates/workspaces/_shared/hermes-specialist-skill.md +109 -0
  21. package/templates/workspaces/accuscope/AGENTS.md +38 -0
  22. package/templates/workspaces/accuscope/FEEDBACK.md +27 -0
  23. package/templates/workspaces/accuscope/HEARTBEAT.md +26 -0
  24. package/templates/workspaces/accuscope/IDENTITY.md +48 -0
  25. package/templates/workspaces/accuscope/LEARNINGS.md +46 -0
  26. package/templates/workspaces/accuscope/MEMORY.md +47 -0
  27. package/templates/workspaces/accuscope/PLAYBOOK.md +65 -0
  28. package/templates/workspaces/accuscope/SOUL.md +40 -0
  29. package/templates/workspaces/accuscope/TOOLS.md +63 -0
  30. package/templates/workspaces/accuscope/USER.md +39 -0
  31. package/templates/workspaces/aiden/AGENTS.md +52 -0
  32. package/templates/workspaces/aiden/FEEDBACK.md +12 -0
  33. package/templates/workspaces/aiden/HEARTBEAT.md +9 -0
  34. package/templates/workspaces/aiden/IDENTITY.md +6 -0
  35. package/templates/workspaces/aiden/LEARNINGS.md +6 -0
  36. package/templates/workspaces/aiden/MEMORY.md +22 -0
  37. package/templates/workspaces/aiden/PLAYBOOK.md +16 -0
  38. package/templates/workspaces/aiden/SOUL.md +1 -1
  39. package/templates/workspaces/aiden/USER.md +17 -0
  40. package/templates/workspaces/alex/AGENTS.md +52 -0
  41. package/templates/workspaces/alex/FEEDBACK.md +11 -0
  42. package/templates/workspaces/alex/HEARTBEAT.md +9 -0
  43. package/templates/workspaces/alex/IDENTITY.md +6 -0
  44. package/templates/workspaces/alex/LEARNINGS.md +5 -0
  45. package/templates/workspaces/alex/MEMORY.md +22 -0
  46. package/templates/workspaces/alex/PLAYBOOK.md +16 -0
  47. package/templates/workspaces/alex/SOUL.md +1 -1
  48. package/templates/workspaces/alex/USER.md +13 -0
  49. package/templates/workspaces/aria/AGENTS.md +18 -0
  50. package/templates/workspaces/aria/FEEDBACK.md +12 -0
  51. package/templates/workspaces/aria/HEARTBEAT.md +32 -0
  52. package/templates/workspaces/aria/IDENTITY.md +12 -0
  53. package/templates/workspaces/aria/LEARNINGS.md +31 -0
  54. package/templates/workspaces/aria/MEMORY.md +29 -0
  55. package/templates/workspaces/aria/PLAYBOOK.md +71 -0
  56. package/templates/workspaces/aria/SOUL.md +57 -0
  57. package/templates/workspaces/aria/TOOLS.md +47 -0
  58. package/templates/workspaces/aria/USER.md +18 -0
  59. package/templates/workspaces/audrey/AGENTS.md +59 -0
  60. package/templates/workspaces/audrey/FEEDBACK.md +11 -0
  61. package/templates/workspaces/audrey/HEARTBEAT.md +9 -0
  62. package/templates/workspaces/audrey/IDENTITY.md +6 -0
  63. package/templates/workspaces/audrey/LEARNINGS.md +5 -0
  64. package/templates/workspaces/audrey/MEMORY.md +22 -0
  65. package/templates/workspaces/audrey/PLAYBOOK.md +16 -0
  66. package/templates/workspaces/audrey/SOUL.md +1 -1
  67. package/templates/workspaces/audrey/TOOLS.md +15 -0
  68. package/templates/workspaces/audrey/USER.md +13 -0
  69. package/templates/workspaces/avery/AGENTS.md +52 -0
  70. package/templates/workspaces/avery/FEEDBACK.md +12 -0
  71. package/templates/workspaces/avery/HEARTBEAT.md +5 -0
  72. package/templates/workspaces/avery/IDENTITY.md +6 -0
  73. package/templates/workspaces/avery/LEARNINGS.md +6 -0
  74. package/templates/workspaces/avery/MEMORY.md +22 -0
  75. package/templates/workspaces/avery/PLAYBOOK.md +16 -0
  76. package/templates/workspaces/avery/SOUL.md +1 -1
  77. package/templates/workspaces/avery/USER.md +17 -0
  78. package/templates/workspaces/avery/skills/claude-code/SKILL.md +38 -0
  79. package/templates/workspaces/avery/skills/claude-code/claude_code +55 -0
  80. package/templates/workspaces/caleb/AGENTS.md +52 -0
  81. package/templates/workspaces/caleb/FEEDBACK.md +11 -0
  82. package/templates/workspaces/caleb/HEARTBEAT.md +9 -0
  83. package/templates/workspaces/caleb/IDENTITY.md +6 -0
  84. package/templates/workspaces/caleb/LEARNINGS.md +5 -0
  85. package/templates/workspaces/caleb/MEMORY.md +22 -0
  86. package/templates/workspaces/caleb/PLAYBOOK.md +16 -0
  87. package/templates/workspaces/caleb/SOUL.md +1 -1
  88. package/templates/workspaces/caleb/TOOLS.md +30 -0
  89. package/templates/workspaces/caleb/USER.md +13 -0
  90. package/templates/workspaces/clara/AGENTS.md +59 -0
  91. package/templates/workspaces/clara/FEEDBACK.md +12 -0
  92. package/templates/workspaces/clara/HEARTBEAT.md +5 -0
  93. package/templates/workspaces/clara/IDENTITY.md +6 -0
  94. package/templates/workspaces/clara/LEARNINGS.md +6 -0
  95. package/templates/workspaces/clara/MEMORY.md +22 -0
  96. package/templates/workspaces/clara/PLAYBOOK.md +16 -0
  97. package/templates/workspaces/clara/SOUL.md +1 -1
  98. package/templates/workspaces/clara/TOOLS.md +15 -0
  99. package/templates/workspaces/clara/USER.md +17 -0
  100. package/templates/workspaces/daphne/AGENTS.md +59 -0
  101. package/templates/workspaces/daphne/FEEDBACK.md +18 -0
  102. package/templates/workspaces/daphne/HEARTBEAT.md +5 -0
  103. package/templates/workspaces/daphne/IDENTITY.md +6 -0
  104. package/templates/workspaces/daphne/LEARNINGS.md +6 -0
  105. package/templates/workspaces/daphne/MEMORY.md +22 -0
  106. package/templates/workspaces/daphne/PLAYBOOK.md +48 -0
  107. package/templates/workspaces/daphne/SOUL.md +1 -1
  108. package/templates/workspaces/daphne/TOOLS.md +15 -0
  109. package/templates/workspaces/daphne/USER.md +17 -0
  110. package/templates/workspaces/darius/AGENTS.md +52 -0
  111. package/templates/workspaces/darius/FEEDBACK.md +12 -0
  112. package/templates/workspaces/darius/HEARTBEAT.md +5 -0
  113. package/templates/workspaces/darius/IDENTITY.md +6 -0
  114. package/templates/workspaces/darius/LEARNINGS.md +6 -0
  115. package/templates/workspaces/darius/MEMORY.md +22 -0
  116. package/templates/workspaces/darius/PLAYBOOK.md +16 -0
  117. package/templates/workspaces/darius/SOUL.md +1 -1
  118. package/templates/workspaces/darius/USER.md +17 -0
  119. package/templates/workspaces/darius/skills/claude-code/SKILL.md +38 -0
  120. package/templates/workspaces/darius/skills/claude-code/claude_code +55 -0
  121. package/templates/workspaces/devon/AGENTS.md +52 -0
  122. package/templates/workspaces/devon/FEEDBACK.md +11 -0
  123. package/templates/workspaces/devon/HEARTBEAT.md +5 -0
  124. package/templates/workspaces/devon/IDENTITY.md +6 -0
  125. package/templates/workspaces/devon/LEARNINGS.md +11 -0
  126. package/templates/workspaces/devon/MEMORY.md +22 -0
  127. package/templates/workspaces/devon/PLAYBOOK.md +16 -0
  128. package/templates/workspaces/devon/SOUL.md +1 -1
  129. package/templates/workspaces/devon/USER.md +13 -0
  130. package/templates/workspaces/devon/check_github.py +12 -0
  131. package/templates/workspaces/devon/check_mc_env.py +30 -0
  132. package/templates/workspaces/devon/check_sb.py +34 -0
  133. package/templates/workspaces/devon/check_vercel.py +12 -0
  134. package/templates/workspaces/devon/get_mc_files.py +17 -0
  135. package/templates/workspaces/devon/write_heartbeat.py +67 -0
  136. package/templates/workspaces/dylan/.env.example +33 -0
  137. package/templates/workspaces/dylan/00007_verify_licenses_table.sql +100 -0
  138. package/templates/workspaces/dylan/AGENTS.md +52 -0
  139. package/templates/workspaces/dylan/FEEDBACK.md +28 -0
  140. package/templates/workspaces/dylan/HEARTBEAT.md +5 -0
  141. package/templates/workspaces/dylan/IDENTITY.md +6 -0
  142. package/templates/workspaces/dylan/LEARNINGS.md +70 -0
  143. package/templates/workspaces/dylan/MEMORY.md +22 -0
  144. package/templates/workspaces/dylan/PLAYBOOK.md +16 -0
  145. package/templates/workspaces/dylan/SOUL.md +1 -1
  146. package/templates/workspaces/dylan/STRIPE_PIPELINE.md +185 -0
  147. package/templates/workspaces/dylan/USER.md +17 -0
  148. package/templates/workspaces/dylan/n8n-stripe-welcome-workflow.json +123 -0
  149. package/templates/workspaces/dylan/skills/claude-code/SKILL.md +38 -0
  150. package/templates/workspaces/dylan/skills/claude-code/claude_code +55 -0
  151. package/templates/workspaces/dylan/stripe-webhook-handler.py +433 -0
  152. package/templates/workspaces/dylan/test_mock_webhook.py +103 -0
  153. package/templates/workspaces/elena/AGENTS.md +59 -0
  154. package/templates/workspaces/elena/FEEDBACK.md +11 -0
  155. package/templates/workspaces/elena/HEARTBEAT.md +9 -0
  156. package/templates/workspaces/elena/IDENTITY.md +6 -0
  157. package/templates/workspaces/elena/LEARNINGS.md +5 -0
  158. package/templates/workspaces/elena/MEMORY.md +22 -0
  159. package/templates/workspaces/elena/PLAYBOOK.md +16 -0
  160. package/templates/workspaces/elena/SOUL.md +1 -1
  161. package/templates/workspaces/elena/TOOLS.md +15 -0
  162. package/templates/workspaces/elena/USER.md +13 -0
  163. package/templates/workspaces/eva/AGENTS.md +59 -0
  164. package/templates/workspaces/eva/FEEDBACK.md +11 -0
  165. package/templates/workspaces/eva/HEARTBEAT.md +9 -0
  166. package/templates/workspaces/eva/IDENTITY.md +6 -0
  167. package/templates/workspaces/eva/LEARNINGS.md +5 -0
  168. package/templates/workspaces/eva/MEMORY.md +22 -0
  169. package/templates/workspaces/eva/PLAYBOOK.md +16 -0
  170. package/templates/workspaces/eva/SOUL.md +1 -1
  171. package/templates/workspaces/eva/TOOLS.md +15 -0
  172. package/templates/workspaces/eva/USER.md +13 -0
  173. package/templates/workspaces/felix/AGENTS.md +52 -0
  174. package/templates/workspaces/felix/FEEDBACK.md +11 -0
  175. package/templates/workspaces/felix/HEARTBEAT.md +5 -0
  176. package/templates/workspaces/felix/IDENTITY.md +6 -0
  177. package/templates/workspaces/felix/LEARNINGS.md +17 -0
  178. package/templates/workspaces/felix/MEMORY.md +22 -0
  179. package/templates/workspaces/felix/PLAYBOOK.md +16 -0
  180. package/templates/workspaces/felix/SOUL.md +1 -1
  181. package/templates/workspaces/felix/USER.md +13 -0
  182. package/templates/workspaces/felix/fidelia-psychology.html +1594 -0
  183. package/templates/workspaces/felix/task.txt +164 -0
  184. package/templates/workspaces/hannah/AGENTS.md +59 -0
  185. package/templates/workspaces/hannah/FEEDBACK.md +12 -0
  186. package/templates/workspaces/hannah/HEARTBEAT.md +5 -0
  187. package/templates/workspaces/hannah/IDENTITY.md +6 -0
  188. package/templates/workspaces/hannah/LEARNINGS.md +6 -0
  189. package/templates/workspaces/hannah/MEMORY.md +22 -0
  190. package/templates/workspaces/hannah/PLAYBOOK.md +16 -0
  191. package/templates/workspaces/hannah/SOUL.md +1 -1
  192. package/templates/workspaces/hannah/TOOLS.md +15 -0
  193. package/templates/workspaces/hannah/USER.md +17 -0
  194. package/templates/workspaces/isaac/AGENTS.md +52 -0
  195. package/templates/workspaces/isaac/FEEDBACK.md +12 -0
  196. package/templates/workspaces/isaac/HEARTBEAT.md +9 -0
  197. package/templates/workspaces/isaac/IDENTITY.md +6 -0
  198. package/templates/workspaces/isaac/LEARNINGS.md +6 -0
  199. package/templates/workspaces/isaac/MEMORY.md +22 -0
  200. package/templates/workspaces/isaac/PLAYBOOK.md +16 -0
  201. package/templates/workspaces/isaac/SOUL.md +1 -1
  202. package/templates/workspaces/isaac/USER.md +17 -0
  203. package/templates/workspaces/isaac/skills/claude-code/SKILL.md +38 -0
  204. package/templates/workspaces/isaac/skills/claude-code/claude_code +55 -0
  205. package/templates/workspaces/logan/AGENTS.md +59 -0
  206. package/templates/workspaces/logan/FEEDBACK.md +11 -0
  207. package/templates/workspaces/logan/HEARTBEAT.md +9 -0
  208. package/templates/workspaces/logan/IDENTITY.md +6 -0
  209. package/templates/workspaces/logan/LEARNINGS.md +5 -0
  210. package/templates/workspaces/logan/MEMORY.md +22 -0
  211. package/templates/workspaces/logan/PLAYBOOK.md +16 -0
  212. package/templates/workspaces/logan/SOUL.md +1 -1
  213. package/templates/workspaces/logan/TOOLS.md +15 -0
  214. package/templates/workspaces/logan/USER.md +13 -0
  215. package/templates/workspaces/maxxipro/AGENTS.md +29 -0
  216. package/templates/workspaces/maxxipro/FEEDBACK.md +19 -0
  217. package/templates/workspaces/maxxipro/HEARTBEAT.md +22 -0
  218. package/templates/workspaces/maxxipro/IDENTITY.md +35 -0
  219. package/templates/workspaces/maxxipro/KNOWLEDGE.md +335 -0
  220. package/templates/workspaces/maxxipro/LEARNINGS.md +47 -0
  221. package/templates/workspaces/maxxipro/MEMORY.md +60 -0
  222. package/templates/workspaces/maxxipro/OUTREACH_TEMPLATES.md +143 -0
  223. package/templates/workspaces/maxxipro/PLAYBOOK.md +81 -0
  224. package/templates/workspaces/maxxipro/SOUL.md +146 -0
  225. package/templates/workspaces/maxxipro/TOOLS.md +81 -0
  226. package/templates/workspaces/maxxipro/USER.md +40 -0
  227. package/templates/workspaces/morgan/AGENTS.md +59 -0
  228. package/templates/workspaces/morgan/FEEDBACK.md +19 -0
  229. package/templates/workspaces/morgan/HEARTBEAT.md +5 -0
  230. package/templates/workspaces/morgan/IDENTITY.md +6 -0
  231. package/templates/workspaces/morgan/LEARNINGS.md +18 -0
  232. package/templates/workspaces/morgan/MEMORY.md +22 -0
  233. package/templates/workspaces/morgan/PLAYBOOK.md +16 -0
  234. package/templates/workspaces/morgan/SOUL.md +1 -1
  235. package/templates/workspaces/morgan/TOOLS.md +15 -0
  236. package/templates/workspaces/morgan/USER.md +13 -0
  237. package/templates/workspaces/nadia/AGENTS.md +59 -0
  238. package/templates/workspaces/nadia/FEEDBACK.md +12 -0
  239. package/templates/workspaces/nadia/HEARTBEAT.md +5 -0
  240. package/templates/workspaces/nadia/IDENTITY.md +6 -0
  241. package/templates/workspaces/nadia/LEARNINGS.md +6 -0
  242. package/templates/workspaces/nadia/MEMORY.md +22 -0
  243. package/templates/workspaces/nadia/PLAYBOOK.md +16 -0
  244. package/templates/workspaces/nadia/SOUL.md +1 -1
  245. package/templates/workspaces/nadia/TOOLS.md +15 -0
  246. package/templates/workspaces/nadia/USER.md +13 -0
  247. package/templates/workspaces/nate/AGENTS.md +24 -0
  248. package/templates/workspaces/nate/FEEDBACK.md +12 -0
  249. package/templates/workspaces/nate/HEARTBEAT.md +33 -0
  250. package/templates/workspaces/nate/IDENTITY.md +15 -0
  251. package/templates/workspaces/nate/LEARNINGS.md +33 -0
  252. package/templates/workspaces/nate/MEMORY.md +39 -0
  253. package/templates/workspaces/nate/PLAYBOOK.md +160 -0
  254. package/templates/workspaces/nate/SOUL.md +50 -0
  255. package/templates/workspaces/nate/TOOLS.md +111 -0
  256. package/templates/workspaces/nate/USER.md +32 -0
  257. package/templates/workspaces/olivia/.last-openclaw-version +1 -0
  258. package/templates/workspaces/olivia/.npmrc.tmp +0 -0
  259. package/templates/workspaces/olivia/AGENTS.md +77 -0
  260. package/templates/workspaces/olivia/ALPHA_CODING_BENCHMARK.txt +148 -0
  261. package/templates/workspaces/olivia/ALPHA_MODEL_GUIDE.md +393 -0
  262. package/templates/workspaces/olivia/FEEDBACK.md +13 -0
  263. package/templates/workspaces/olivia/HEADTOHEAD_BENCHMARK.txt +1289 -0
  264. package/templates/workspaces/olivia/HEARTBEAT.md +267 -0
  265. package/templates/workspaces/olivia/IDENTITY.md +6 -0
  266. package/templates/workspaces/olivia/LEARNINGS.md +708 -0
  267. package/templates/workspaces/olivia/MEMORY.md +202 -0
  268. package/templates/workspaces/olivia/MISSION_CONTROL_DESIGN_SPEC_v1.md +1143 -0
  269. package/templates/workspaces/olivia/MVP-COMPLETION-SUMMARY.md +175 -0
  270. package/templates/workspaces/olivia/NETWORK_IMPLEMENTATION_PLAN.md +1556 -0
  271. package/templates/workspaces/olivia/NEW_NODES_BENCHMARK.txt +947 -0
  272. package/templates/workspaces/olivia/PLAYBOOK.md +42 -0
  273. package/templates/workspaces/olivia/SELF-HEALING-COMPLETE.md +150 -0
  274. package/templates/workspaces/olivia/SOUL.md +8 -8
  275. package/templates/workspaces/olivia/TOOLS.md +15 -0
  276. package/templates/workspaces/olivia/USER.md +17 -0
  277. package/templates/workspaces/olivia/alicefleet-supabase-credentials.md +50 -0
  278. package/templates/workspaces/olivia/dzombo-copy-rewrite.md +115 -0
  279. package/templates/workspaces/olivia/dzombo-implementation-plan.md +1248 -0
  280. package/templates/workspaces/olivia/fidelia-psychology.html +1594 -0
  281. package/templates/workspaces/olivia/lead_debug.png +0 -0
  282. package/templates/workspaces/olivia/minimatch-10.2.4.tgz +0 -0
  283. package/templates/workspaces/olivia/operation-bllm-research.md +157 -0
  284. package/templates/workspaces/olivia/qa-audit-mission-control-v2.md +538 -0
  285. package/templates/workspaces/olivia/roofmaxx_logo.svg +1 -0
  286. package/templates/workspaces/olivia/roofmaxx_social.jpg +0 -0
  287. package/templates/workspaces/olivia/skills/1password/SKILL.md +53 -0
  288. package/templates/workspaces/olivia/skills/1password/_meta.json +6 -0
  289. package/templates/workspaces/olivia/skills/afrexai-recruiting-engine/README.md +57 -0
  290. package/templates/workspaces/olivia/skills/afrexai-recruiting-engine/SKILL.md +534 -0
  291. package/templates/workspaces/olivia/skills/afrexai-recruiting-engine/_meta.json +6 -0
  292. package/templates/workspaces/olivia/skills/agent-security/SKILL.md +69 -0
  293. package/templates/workspaces/olivia/skills/agent-security/_meta.json +6 -0
  294. package/templates/workspaces/olivia/skills/agentic-security-audit/SKILL.md +855 -0
  295. package/templates/workspaces/olivia/skills/agentic-security-audit/_meta.json +6 -0
  296. package/templates/workspaces/olivia/skills/ai-automation-consulting/SKILL.md +67 -0
  297. package/templates/workspaces/olivia/skills/ai-automation-consulting/_meta.json +6 -0
  298. package/templates/workspaces/olivia/skills/ai-automation-consulting/skill.json +12 -0
  299. package/templates/workspaces/olivia/skills/ai-presentation-maker/SKILL.md +1104 -0
  300. package/templates/workspaces/olivia/skills/ai-presentation-maker/_meta.json +6 -0
  301. package/templates/workspaces/olivia/skills/ai-productivity-audit/SKILL.md +181 -0
  302. package/templates/workspaces/olivia/skills/ai-productivity-audit/_meta.json +6 -0
  303. package/templates/workspaces/olivia/skills/ai-researcher/README.md +31 -0
  304. package/templates/workspaces/olivia/skills/ai-researcher/SKILL.md +59 -0
  305. package/templates/workspaces/olivia/skills/ai-researcher/_meta.json +6 -0
  306. package/templates/workspaces/olivia/skills/ai-seo-writer/README.md +19 -0
  307. package/templates/workspaces/olivia/skills/ai-seo-writer/SKILL.md +100 -0
  308. package/templates/workspaces/olivia/skills/ai-seo-writer/_meta.json +6 -0
  309. package/templates/workspaces/olivia/skills/analytics-tracking-2/SKILL.md +309 -0
  310. package/templates/workspaces/olivia/skills/analytics-tracking-2/_meta.json +6 -0
  311. package/templates/workspaces/olivia/skills/api-doc-writer/SKILL.md +232 -0
  312. package/templates/workspaces/olivia/skills/api-doc-writer/_meta.json +6 -0
  313. package/templates/workspaces/olivia/skills/api-generator/SKILL.md +49 -0
  314. package/templates/workspaces/olivia/skills/api-generator/_meta.json +6 -0
  315. package/templates/workspaces/olivia/skills/api-generator/tips.md +10 -0
  316. package/templates/workspaces/olivia/skills/apple-notes/SKILL.md +50 -0
  317. package/templates/workspaces/olivia/skills/apple-notes/_meta.json +6 -0
  318. package/templates/workspaces/olivia/skills/apple-reminders/SKILL.md +67 -0
  319. package/templates/workspaces/olivia/skills/apple-reminders/_meta.json +6 -0
  320. package/templates/workspaces/olivia/skills/automation-workflows/SKILL.md +267 -0
  321. package/templates/workspaces/olivia/skills/automation-workflows/_meta.json +6 -0
  322. package/templates/workspaces/olivia/skills/autoresearch/SKILL.md +46 -0
  323. package/templates/workspaces/olivia/skills/autoresearch/aria_write.py +148 -0
  324. package/templates/workspaces/olivia/skills/autoresearch/autoresearch.py +75 -0
  325. package/templates/workspaces/olivia/skills/azure-devops/SKILL.md +115 -0
  326. package/templates/workspaces/olivia/skills/azure-devops/_meta.json +6 -0
  327. package/templates/workspaces/olivia/skills/blogwatcher/SKILL.md +46 -0
  328. package/templates/workspaces/olivia/skills/blogwatcher/_meta.json +6 -0
  329. package/templates/workspaces/olivia/skills/blucli/SKILL.md +27 -0
  330. package/templates/workspaces/olivia/skills/blucli/_meta.json +6 -0
  331. package/templates/workspaces/olivia/skills/check-analytics/SKILL.md +92 -0
  332. package/templates/workspaces/olivia/skills/check-analytics/_meta.json +6 -0
  333. package/templates/workspaces/olivia/skills/cloud-architect/SKILL.md +89 -0
  334. package/templates/workspaces/olivia/skills/cloud-architect/_meta.json +6 -0
  335. package/templates/workspaces/olivia/skills/cloud-infra-automation/SKILL.md +50 -0
  336. package/templates/workspaces/olivia/skills/cloud-infra-automation/_meta.json +6 -0
  337. package/templates/workspaces/olivia/skills/cloud-storage/SKILL.md +61 -0
  338. package/templates/workspaces/olivia/skills/cloud-storage/_meta.json +6 -0
  339. package/templates/workspaces/olivia/skills/cloud-storage/auth.md +97 -0
  340. package/templates/workspaces/olivia/skills/cloud-storage/costs.md +88 -0
  341. package/templates/workspaces/olivia/skills/cloud-storage/providers.md +55 -0
  342. package/templates/workspaces/olivia/skills/copywriting-pro/SKILL.md +107 -0
  343. package/templates/workspaces/olivia/skills/copywriting-pro/_meta.json +6 -0
  344. package/templates/workspaces/olivia/skills/data-analyst-pro/SKILL.md +21 -0
  345. package/templates/workspaces/olivia/skills/data-analyst-pro/_meta.json +6 -0
  346. package/templates/workspaces/olivia/skills/database-designer/README.md +388 -0
  347. package/templates/workspaces/olivia/skills/database-designer/SKILL.md +66 -0
  348. package/templates/workspaces/olivia/skills/database-designer/_meta.json +6 -0
  349. package/templates/workspaces/olivia/skills/database-designer/index_optimizer.py +926 -0
  350. package/templates/workspaces/olivia/skills/database-designer/migration_generator.py +1199 -0
  351. package/templates/workspaces/olivia/skills/database-designer/schema_analyzer.py +982 -0
  352. package/templates/workspaces/olivia/skills/deploy-agent/SKILL.md +255 -0
  353. package/templates/workspaces/olivia/skills/deploy-agent/_meta.json +6 -0
  354. package/templates/workspaces/olivia/skills/devops-automation-pack/SKILL.md +72 -0
  355. package/templates/workspaces/olivia/skills/devops-automation-pack/_meta.json +6 -0
  356. package/templates/workspaces/olivia/skills/devops-automation-pack/deploy.sh +0 -0
  357. package/templates/workspaces/olivia/skills/financial-analysis-agent/SKILL.md +489 -0
  358. package/templates/workspaces/olivia/skills/financial-analysis-agent/_meta.json +6 -0
  359. package/templates/workspaces/olivia/skills/gdpr-compliance-tracker/README.md +72 -0
  360. package/templates/workspaces/olivia/skills/gdpr-compliance-tracker/SKILL.md +226 -0
  361. package/templates/workspaces/olivia/skills/gdpr-compliance-tracker/_meta.json +6 -0
  362. package/templates/workspaces/olivia/skills/gifgrep/SKILL.md +47 -0
  363. package/templates/workspaces/olivia/skills/gifgrep/_meta.json +6 -0
  364. package/templates/workspaces/olivia/skills/github/SKILL.md +47 -0
  365. package/templates/workspaces/olivia/skills/github/_meta.json +6 -0
  366. package/templates/workspaces/olivia/skills/gog/SKILL.md +36 -0
  367. package/templates/workspaces/olivia/skills/gog/_meta.json +6 -0
  368. package/templates/workspaces/olivia/skills/growth-strategy-hub/SKILL.md +135 -0
  369. package/templates/workspaces/olivia/skills/growth-strategy-hub/_meta.json +6 -0
  370. package/templates/workspaces/olivia/skills/growth-strategy-hub/metadata.json +4 -0
  371. package/templates/workspaces/olivia/skills/hetzner-cloud/SKILL.md +130 -0
  372. package/templates/workspaces/olivia/skills/hetzner-cloud/_meta.json +6 -0
  373. package/templates/workspaces/olivia/skills/himalaya/SKILL.md +217 -0
  374. package/templates/workspaces/olivia/skills/himalaya/_meta.json +6 -0
  375. package/templates/workspaces/olivia/skills/hotel-recommendation/SKILL.md +117 -0
  376. package/templates/workspaces/olivia/skills/hotel-recommendation/_meta.json +6 -0
  377. package/templates/workspaces/olivia/skills/hr-policy-generator/SKILL.md +54 -0
  378. package/templates/workspaces/olivia/skills/hr-policy-generator/_meta.json +6 -0
  379. package/templates/workspaces/olivia/skills/human-writing/SKILL.md +41 -0
  380. package/templates/workspaces/olivia/skills/human-writing/_meta.json +6 -0
  381. package/templates/workspaces/olivia/skills/imsg/SKILL.md +25 -0
  382. package/templates/workspaces/olivia/skills/imsg/_meta.json +6 -0
  383. package/templates/workspaces/olivia/skills/in-depth-research/SKILL.md +124 -0
  384. package/templates/workspaces/olivia/skills/in-depth-research/_meta.json +6 -0
  385. package/templates/workspaces/olivia/skills/in-depth-research/methodology.md +75 -0
  386. package/templates/workspaces/olivia/skills/in-depth-research/output-formats.md +168 -0
  387. package/templates/workspaces/olivia/skills/in-depth-research/sources.md +80 -0
  388. package/templates/workspaces/olivia/skills/javascript-skills/README.md +71 -0
  389. package/templates/workspaces/olivia/skills/javascript-skills/SKILL.md +746 -0
  390. package/templates/workspaces/olivia/skills/javascript-skills/_meta.json +6 -0
  391. package/templates/workspaces/olivia/skills/leadership-strategy-playbook/SKILL.md +147 -0
  392. package/templates/workspaces/olivia/skills/leadership-strategy-playbook/_meta.json +6 -0
  393. package/templates/workspaces/olivia/skills/market-research-agent/README.md +29 -0
  394. package/templates/workspaces/olivia/skills/market-research-agent/SKILL.md +52 -0
  395. package/templates/workspaces/olivia/skills/market-research-agent/_meta.json +6 -0
  396. package/templates/workspaces/olivia/skills/marketing-analytics/SKILL.md +74 -0
  397. package/templates/workspaces/olivia/skills/marketing-analytics/_meta.json +6 -0
  398. package/templates/workspaces/olivia/skills/marketing-master-io/SKILL.md +125 -0
  399. package/templates/workspaces/olivia/skills/marketing-master-io/_meta.json +6 -0
  400. package/templates/workspaces/olivia/skills/marketing-strategy-pmm/SKILL.md +398 -0
  401. package/templates/workspaces/olivia/skills/marketing-strategy-pmm/_meta.json +6 -0
  402. package/templates/workspaces/olivia/skills/meta-ads-analytics/SKILL.md +53 -0
  403. package/templates/workspaces/olivia/skills/meta-ads-analytics/_meta.json +6 -0
  404. package/templates/workspaces/olivia/skills/obsidian/SKILL.md +55 -0
  405. package/templates/workspaces/olivia/skills/obsidian/_meta.json +6 -0
  406. package/templates/workspaces/olivia/skills/openclaw-accounting/SKILL.md +125 -0
  407. package/templates/workspaces/olivia/skills/openclaw-accounting/_meta.json +6 -0
  408. package/templates/workspaces/olivia/skills/openclaw-security-toolkit/CHANGELOG.md +35 -0
  409. package/templates/workspaces/olivia/skills/openclaw-security-toolkit/CHANNELLOG.md +73 -0
  410. package/templates/workspaces/olivia/skills/openclaw-security-toolkit/README.md +161 -0
  411. package/templates/workspaces/olivia/skills/openclaw-security-toolkit/SKILL.md +130 -0
  412. package/templates/workspaces/olivia/skills/openclaw-security-toolkit/_meta.json +6 -0
  413. package/templates/workspaces/olivia/skills/openclaw-security-toolkit/config.json +36 -0
  414. package/templates/workspaces/olivia/skills/openclaw-security-toolkit/metadata.json +19 -0
  415. package/templates/workspaces/olivia/skills/openhue/SKILL.md +30 -0
  416. package/templates/workspaces/olivia/skills/openhue/_meta.json +6 -0
  417. package/templates/workspaces/olivia/skills/orgx-operations-agent/SKILL.md +41 -0
  418. package/templates/workspaces/olivia/skills/orgx-operations-agent/_meta.json +6 -0
  419. package/templates/workspaces/olivia/skills/outreach/SKILL.md +84 -0
  420. package/templates/workspaces/olivia/skills/outreach/_meta.json +6 -0
  421. package/templates/workspaces/olivia/skills/outreach/by-type.md +166 -0
  422. package/templates/workspaces/olivia/skills/outreach/templates.md +154 -0
  423. package/templates/workspaces/olivia/skills/outreach/tracking.md +145 -0
  424. package/templates/workspaces/olivia/skills/persona-hr-coordinator/SKILL.md +38 -0
  425. package/templates/workspaces/olivia/skills/persona-hr-coordinator/_meta.json +6 -0
  426. package/templates/workspaces/olivia/skills/personal-productivity/SKILL.md +161 -0
  427. package/templates/workspaces/olivia/skills/personal-productivity/_meta.json +6 -0
  428. package/templates/workspaces/olivia/skills/personal-productivity/index.js +363 -0
  429. package/templates/workspaces/olivia/skills/personal-productivity/package.json +15 -0
  430. package/templates/workspaces/olivia/skills/personal-travel/README.md +34 -0
  431. package/templates/workspaces/olivia/skills/personal-travel/SKILL.md +46 -0
  432. package/templates/workspaces/olivia/skills/personal-travel/_meta.json +6 -0
  433. package/templates/workspaces/olivia/skills/presentation-html-generator-skill/SKILL.md +185 -0
  434. package/templates/workspaces/olivia/skills/presentation-html-generator-skill/_meta.json +6 -0
  435. package/templates/workspaces/olivia/skills/product-manager/SKILL.md +77 -0
  436. package/templates/workspaces/olivia/skills/product-manager/_meta.json +6 -0
  437. package/templates/workspaces/olivia/skills/quant-strategy/SKILL.md +28 -0
  438. package/templates/workspaces/olivia/skills/quant-strategy/_meta.json +6 -0
  439. package/templates/workspaces/olivia/skills/sales-pipeline-tracker/README.md +29 -0
  440. package/templates/workspaces/olivia/skills/sales-pipeline-tracker/SKILL.md +45 -0
  441. package/templates/workspaces/olivia/skills/sales-pipeline-tracker/_meta.json +6 -0
  442. package/templates/workspaces/olivia/skills/security-auditor/SKILL.md +399 -0
  443. package/templates/workspaces/olivia/skills/security-auditor/_meta.json +6 -0
  444. package/templates/workspaces/olivia/skills/security-hardening/SKILL.md +296 -0
  445. package/templates/workspaces/olivia/skills/security-hardening/_meta.json +6 -0
  446. package/templates/workspaces/olivia/skills/security-scanner/SKILL.md +67 -0
  447. package/templates/workspaces/olivia/skills/security-scanner/_meta.json +6 -0
  448. package/templates/workspaces/olivia/skills/seo-optimization/SKILL.md +31 -0
  449. package/templates/workspaces/olivia/skills/seo-optimization/_meta.json +6 -0
  450. package/templates/workspaces/olivia/skills/service-booking/SKILL.md +193 -0
  451. package/templates/workspaces/olivia/skills/service-booking/_meta.json +6 -0
  452. package/templates/workspaces/olivia/skills/sme-hr-automation/SKILL.md +131 -0
  453. package/templates/workspaces/olivia/skills/sme-hr-automation/_meta.json +6 -0
  454. package/templates/workspaces/olivia/skills/social-media-scheduler/README.md +29 -0
  455. package/templates/workspaces/olivia/skills/social-media-scheduler/SKILL.md +49 -0
  456. package/templates/workspaces/olivia/skills/social-media-scheduler/_meta.json +6 -0
  457. package/templates/workspaces/olivia/skills/sonoscli/SKILL.md +26 -0
  458. package/templates/workspaces/olivia/skills/sonoscli/_meta.json +6 -0
  459. package/templates/workspaces/olivia/skills/strategy-advisor/SKILL.md +33 -0
  460. package/templates/workspaces/olivia/skills/strategy-advisor/_meta.json +6 -0
  461. package/templates/workspaces/olivia/skills/summarize/SKILL.md +49 -0
  462. package/templates/workspaces/olivia/skills/summarize/_meta.json +6 -0
  463. package/templates/workspaces/olivia/skills/things-mac/SKILL.md +61 -0
  464. package/templates/workspaces/olivia/skills/things-mac/_meta.json +6 -0
  465. package/templates/workspaces/olivia/skills/travel-itinerary-planner/SKILL.md +121 -0
  466. package/templates/workspaces/olivia/skills/travel-itinerary-planner/_meta.json +6 -0
  467. package/templates/workspaces/olivia/skills/travel-manager/SKILL.md +36 -0
  468. package/templates/workspaces/olivia/skills/travel-manager/_meta.json +6 -0
  469. package/templates/workspaces/olivia/skills/travel-planning/SKILL.md +238 -0
  470. package/templates/workspaces/olivia/skills/travel-planning/_meta.json +6 -0
  471. package/templates/workspaces/olivia/skills/travel-planning/booking-guide.md +91 -0
  472. package/templates/workspaces/olivia/skills/travel-planning/memory-template.md +111 -0
  473. package/templates/workspaces/olivia/skills/travel-planning/multi-city.md +131 -0
  474. package/templates/workspaces/olivia/skills/travel-planning/packing-templates.md +155 -0
  475. package/templates/workspaces/olivia/skills/travel-planning/setup.md +66 -0
  476. package/templates/workspaces/olivia/skills/update-it-all/SKILL.md +143 -0
  477. package/templates/workspaces/olivia/skills/update-it-all/_meta.json +6 -0
  478. package/templates/workspaces/olivia/skills/voice/SKILL.md +62 -0
  479. package/templates/workspaces/olivia/skills/weather/SKILL.md +49 -0
  480. package/templates/workspaces/olivia/skills/weather/_meta.json +6 -0
  481. package/templates/workspaces/olivia/skills/web-researcher/SKILL.md +21 -0
  482. package/templates/workspaces/olivia/skills/web-researcher/_meta.json +6 -0
  483. package/templates/workspaces/olivia/skills/website-seo/SKILL.md +284 -0
  484. package/templates/workspaces/olivia/skills/website-seo/_meta.json +6 -0
  485. package/templates/workspaces/olivia/stripe-welcome-n8n.json +103 -0
  486. package/templates/workspaces/olivia/test2.wav.wav +0 -0
  487. package/templates/workspaces/olivia/test_speech.json +1 -0
  488. package/templates/workspaces/olivia/test_speech.srt +0 -0
  489. package/templates/workspaces/olivia/test_speech.tsv +1 -0
  490. package/templates/workspaces/olivia/test_speech.txt +0 -0
  491. package/templates/workspaces/olivia/test_speech.vtt +2 -0
  492. package/templates/workspaces/owen/AGENTS.md +59 -0
  493. package/templates/workspaces/owen/FEEDBACK.md +12 -0
  494. package/templates/workspaces/owen/HEARTBEAT.md +5 -0
  495. package/templates/workspaces/owen/IDENTITY.md +6 -0
  496. package/templates/workspaces/owen/LEARNINGS.md +46 -0
  497. package/templates/workspaces/owen/MEMORY.md +22 -0
  498. package/templates/workspaces/owen/PLAYBOOK.md +16 -0
  499. package/templates/workspaces/owen/SOUL.md +1 -1
  500. package/templates/workspaces/owen/TOOLS.md +15 -0
  501. package/templates/workspaces/owen/USER.md +17 -0
  502. package/templates/workspaces/parker/AGENTS.md +59 -0
  503. package/templates/workspaces/parker/FEEDBACK.md +11 -0
  504. package/templates/workspaces/parker/HEARTBEAT.md +5 -0
  505. package/templates/workspaces/parker/IDENTITY.md +6 -0
  506. package/templates/workspaces/parker/LEARNINGS.md +17 -0
  507. package/templates/workspaces/parker/MEMORY.md +22 -0
  508. package/templates/workspaces/parker/PLAYBOOK.md +16 -0
  509. package/templates/workspaces/parker/SOUL.md +1 -1
  510. package/templates/workspaces/parker/TOOLS.md +15 -0
  511. package/templates/workspaces/parker/USER.md +13 -0
  512. package/templates/workspaces/quinn/AGENTS.md +52 -0
  513. package/templates/workspaces/quinn/FEEDBACK.md +11 -0
  514. package/templates/workspaces/quinn/HEARTBEAT.md +5 -0
  515. package/templates/workspaces/quinn/IDENTITY.md +6 -0
  516. package/templates/workspaces/quinn/LEARNINGS.md +35 -0
  517. package/templates/workspaces/quinn/MEMORY.md +22 -0
  518. package/templates/workspaces/quinn/PLAYBOOK.md +16 -0
  519. package/templates/workspaces/quinn/SOUL.md +1 -1
  520. package/templates/workspaces/quinn/USER.md +17 -0
  521. package/templates/workspaces/quinn/alice-login-page.png +0 -0
  522. package/templates/workspaces/rowan/AGENTS.md +59 -0
  523. package/templates/workspaces/rowan/FEEDBACK.md +12 -0
  524. package/templates/workspaces/rowan/HEARTBEAT.md +5 -0
  525. package/templates/workspaces/rowan/IDENTITY.md +6 -0
  526. package/templates/workspaces/rowan/LEARNINGS.md +12 -0
  527. package/templates/workspaces/rowan/MEMORY.md +22 -0
  528. package/templates/workspaces/rowan/PLAYBOOK.md +16 -0
  529. package/templates/workspaces/rowan/SOUL.md +1 -1
  530. package/templates/workspaces/rowan/USER.md +17 -0
  531. package/templates/workspaces/selena/AGENTS.md +59 -0
  532. package/templates/workspaces/selena/FEEDBACK.md +12 -0
  533. package/templates/workspaces/selena/HEARTBEAT.md +5 -0
  534. package/templates/workspaces/selena/IDENTITY.md +6 -0
  535. package/templates/workspaces/selena/LEARNINGS.md +24 -0
  536. package/templates/workspaces/selena/MEMORY.md +22 -0
  537. package/templates/workspaces/selena/PLAYBOOK.md +16 -0
  538. package/templates/workspaces/selena/SOUL.md +1 -1
  539. package/templates/workspaces/selena/USER.md +17 -0
  540. package/templates/workspaces/selena/kids-ai-security-compliance-plan.md +791 -0
  541. package/templates/workspaces/selena/kidspark-coppa-compliance-audit.md +866 -0
  542. package/templates/workspaces/sloane/AGENTS.md +59 -0
  543. package/templates/workspaces/sloane/FEEDBACK.md +12 -0
  544. package/templates/workspaces/sloane/HEARTBEAT.md +9 -0
  545. package/templates/workspaces/sloane/IDENTITY.md +6 -0
  546. package/templates/workspaces/sloane/LEARNINGS.md +6 -0
  547. package/templates/workspaces/sloane/MEMORY.md +22 -0
  548. package/templates/workspaces/sloane/PLAYBOOK.md +16 -0
  549. package/templates/workspaces/sloane/SOUL.md +1 -1
  550. package/templates/workspaces/sloane/TOOLS.md +15 -0
  551. package/templates/workspaces/sloane/USER.md +13 -0
  552. package/templates/workspaces/smoketestagent/AGENTS.md +52 -0
  553. package/templates/workspaces/smoketestagent/FEEDBACK.md +3 -0
  554. package/templates/workspaces/smoketestagent/HEARTBEAT.md +14 -0
  555. package/templates/workspaces/smoketestagent/IDENTITY.md +6 -0
  556. package/templates/workspaces/smoketestagent/LEARNINGS.md +3 -0
  557. package/templates/workspaces/smoketestagent/MEMORY.md +24 -0
  558. package/templates/workspaces/smoketestagent/PLAYBOOK.md +7 -0
  559. package/templates/workspaces/smoketestagent/SOUL.md +32 -0
  560. package/templates/workspaces/smoketestagent/TOOLS.md +13 -0
  561. package/templates/workspaces/smoketestagent/USER.md +5 -0
  562. package/templates/workspaces/sophie/AGENTS.md +59 -0
  563. package/templates/workspaces/sophie/FEEDBACK.md +12 -0
  564. package/templates/workspaces/sophie/HEARTBEAT.md +9 -0
  565. package/templates/workspaces/sophie/IDENTITY.md +6 -0
  566. package/templates/workspaces/sophie/LEARNINGS.md +6 -0
  567. package/templates/workspaces/sophie/MEMORY.md +22 -0
  568. package/templates/workspaces/sophie/PLAYBOOK.md +16 -0
  569. package/templates/workspaces/sophie/SOUL.md +1 -1
  570. package/templates/workspaces/sophie/TOOLS.md +15 -0
  571. package/templates/workspaces/sophie/USER.md +17 -0
  572. package/templates/workspaces/tommy/AGENTS.md +59 -0
  573. package/templates/workspaces/tommy/FEEDBACK.md +12 -0
  574. package/templates/workspaces/tommy/HEARTBEAT.md +9 -0
  575. package/templates/workspaces/tommy/IDENTITY.md +6 -0
  576. package/templates/workspaces/tommy/LEARNINGS.md +6 -0
  577. package/templates/workspaces/tommy/MEMORY.md +22 -0
  578. package/templates/workspaces/tommy/PLAYBOOK.md +16 -0
  579. package/templates/workspaces/tommy/SOUL.md +1 -1
  580. package/templates/workspaces/tommy/TOOLS.md +15 -0
  581. package/templates/workspaces/tommy/USER.md +17 -0
  582. package/templates/workspaces/uma/AGENTS.md +59 -0
  583. package/templates/workspaces/uma/FEEDBACK.md +11 -0
  584. package/templates/workspaces/uma/HEARTBEAT.md +5 -0
  585. package/templates/workspaces/uma/IDENTITY.md +6 -0
  586. package/templates/workspaces/uma/LEARNINGS.md +11 -0
  587. package/templates/workspaces/uma/MEMORY.md +22 -0
  588. package/templates/workspaces/uma/PLAYBOOK.md +16 -0
  589. package/templates/workspaces/uma/SOUL.md +1 -1
  590. package/templates/workspaces/uma/TOOLS.md +15 -0
  591. package/templates/workspaces/uma/USER.md +13 -0
@@ -0,0 +1,338 @@
1
+ // lib/hermes-installer.mjs
2
+ // Installs and configures A.L.I.C.E. for Hermes-only runtime
3
+
4
+ import { execSync } from 'node:child_process';
5
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, cpSync, rmSync } from 'node:fs';
6
+ import { join, dirname } from 'node:path';
7
+ import { homedir } from 'node:os';
8
+ import { fileURLToPath } from 'node:url';
9
+
10
+ const __dirname = dirname(fileURLToPath(import.meta.url));
11
+ const HERMES_DIR = join(homedir(), '.hermes');
12
+ const ALICE_SKILLS_DIR = join(HERMES_DIR, 'skills', 'alice');
13
+ const ALICE_MEMORIES_DIR = join(HERMES_DIR, 'memories', 'alice');
14
+ const ALICE_CONFIG_JSON = join(HERMES_DIR, '.alice-config.json');
15
+ const TEMPLATES_DIR = join(__dirname, '..', 'templates', 'workspaces', '_shared');
16
+
17
+ // ── Runtime detection ─────────────────────────────────────────────────────────
18
+
19
+ export function isHermesInstalled() {
20
+ if (!existsSync(join(homedir(), '.hermes'))) return false;
21
+ if (!existsSync(join(homedir(), '.hermes', 'config.yaml'))) return false;
22
+ try {
23
+ execSync('hermes version', { stdio: 'pipe' });
24
+ return true;
25
+ } catch {
26
+ return false;
27
+ }
28
+ }
29
+
30
+ export function getHermesVersion() {
31
+ try {
32
+ // Suppress stderr to avoid "Failed to load config" warnings
33
+ return execSync('hermes version 2>/dev/null', { encoding: 'utf8', stdio: 'pipe' })
34
+ .trim()
35
+ .split('\n')[0]; // only first line
36
+ } catch {
37
+ return null;
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Read the default model from ~/.hermes/config.yaml
43
+ * Returns null if no model is configured.
44
+ */
45
+ export function getHermesDefaultModel() {
46
+ try {
47
+ const configPath = join(homedir(), '.hermes', 'config.yaml');
48
+ const content = readFileSync(configPath, 'utf8');
49
+ const lines = content.split('\n');
50
+ let inModel = false;
51
+ for (const line of lines) {
52
+ const trimmed = line.trim();
53
+ if (trimmed === 'model:') { inModel = true; continue; }
54
+ if (inModel) {
55
+ // 'default: <modelname>' at the same or deeper indent
56
+ const match = trimmed.match(/^default:\s*(.+)$/);
57
+ if (match) return match[1].trim();
58
+ // If we hit a new top-level key, stop
59
+ if (trimmed.match(/^[a-z]/) && !trimmed.startsWith('default:')) break;
60
+ }
61
+ }
62
+ return null;
63
+ } catch {
64
+ return null;
65
+ }
66
+ }
67
+
68
+ // ── Hermes config helpers ─────────────────────────────────────────────────────
69
+ // Uses `hermes config set` for safe updates — Hermes rewrites the file correctly.
70
+
71
+ const ALICE_PERSONALITY = `You are A.L.I.C.E. — the Chief Orchestration Officer of the A.L.I.C.E. multi-agent AI team. Your role is to receive user requests, route them to the right specialist agents (dylan for development, selena for security, devon for DevOps, etc.), wait for their results, and synthesize one clear response. You delegate ALL specialist work — you do not do it yourself. You are sharp, confident, and efficient. Users may call you Alice, A.L.I.C.E., or Olivia.`;
72
+
73
+ /**
74
+ * Configure Hermes with alice personality and display settings.
75
+ * Uses `hermes config set` which safely rewrites the YAML.
76
+ */
77
+ function configureHermesAlice() {
78
+ // Set display personality to alice
79
+ execSync(`hermes config set display.personality alice`, {
80
+ stdio: 'pipe',
81
+ env: { ...process.env, TERM: 'xterm-256color' },
82
+ });
83
+
84
+ // Set alice personality
85
+ execSync(`hermes config set agent.personalities.alice "${ALICE_PERSONALITY.replace(/"/g, '\\"')}"`, {
86
+ stdio: 'pipe',
87
+ env: { ...process.env, TERM: 'xterm-256color' },
88
+ });
89
+ }
90
+
91
+ // ── Alice skill file generation ───────────────────────────────────────────────
92
+
93
+ function generateOrchestratorSkill() {
94
+ const templatePath = join(TEMPLATES_DIR, 'hermes-orchestrator-skill.md');
95
+ if (!existsSync(templatePath)) {
96
+ // Fallback inline if template not found
97
+ return readFileSync(templatePath, 'utf8');
98
+ }
99
+ return readFileSync(templatePath, 'utf8');
100
+ }
101
+
102
+ function generateSpecialistSkill(agentId, agentName, domain, domainDescription) {
103
+ let templatePath = join(TEMPLATES_DIR, 'hermes-specialist-skill.md');
104
+ if (!existsSync(templatePath)) {
105
+ // Inline fallback template
106
+ return `---
107
+ name: ${agentId}
108
+ description: ${domain} specialist on the A.L.I.C.E. team.
109
+ ---
110
+
111
+ # ${agentName} — ${domain} Specialist
112
+
113
+ **${agentName}** is a ${domain} specialist on the A.L.I.C.E. team.
114
+ A.L.I.C.E. (orchestrator) assigns you tasks. Complete them and report back.
115
+
116
+ ## Domain
117
+ ${domainDescription}
118
+
119
+ ## How You Work
120
+ 1. Receive task from A.L.I.C.E.
121
+ 2. Use your tools to complete the work
122
+ 3. Return structured results to A.L.I.C.E.
123
+
124
+ ## Response Format
125
+ **Summary:** one-line answer
126
+ **Details:** what you did/found
127
+ **Next Steps:** recommended actions
128
+ **Blockers:** anything blocking progress (or "None")
129
+ `;
130
+ }
131
+
132
+ let content = readFileSync(templatePath, 'utf8');
133
+ content = content
134
+ .replace(/\{\{agentId\}\}/g, agentId)
135
+ .replace(/\{\{agentName\}\}/g, agentName)
136
+ .replace(/\{\{domain\}\}/g, domain)
137
+ .replace(/\{\{domainDescription\}\}/g, domainDescription || `${domain} specialist work.`);
138
+ return content;
139
+ }
140
+
141
+ // ── Alice agent registry ─────────────────────────────────────────────────────
142
+
143
+ const ALICE_AGENTS = [
144
+ // Starter agents
145
+ { id: 'alice', name: 'A.L.I.C.E.', domain: 'Orchestration', isOrchestrator: true, tier: 'core' },
146
+ { id: 'dylan', name: 'Dylan', domain: 'Development', description: 'Full-stack code, APIs, debugging, architecture, database design', tier: 'starter' },
147
+ { id: 'selena', name: 'Selena', domain: 'Security', description: 'Security audits, hardening, access controls, incident response, vulnerability assessment', tier: 'starter' },
148
+ { id: 'devon', name: 'Devon', domain: 'DevOps', description: 'CI/CD pipelines, infrastructure, deployment, Docker, Kubernetes, monitoring', tier: 'starter' },
149
+ { id: 'quinn', name: 'Quinn', domain: 'QA', description: 'Test design, automation, bug verification, quality assurance, test coverage', tier: 'starter' },
150
+ { id: 'felix', name: 'Felix', domain: 'Frontend', description: 'UI implementation, React, responsive design, component libraries, CSS', tier: 'starter' },
151
+ { id: 'daphne', name: 'Daphne', domain: 'Documentation', description: 'API docs, guides, runbooks, READMEs, technical writing', tier: 'starter' },
152
+ { id: 'rowan', name: 'Rowan', domain: 'Research', description: 'Web research, competitive analysis, fact-finding, technology landscape', tier: 'starter' },
153
+ { id: 'darius', name: 'Darius', domain: 'Data', description: 'Data pipelines, SQL, analytics, warehousing, ETL processes', tier: 'starter' },
154
+ { id: 'sophie', name: 'Sophie', domain: 'Support', description: 'Customer support, triage, drafting responses, FAQ creation', tier: 'starter' },
155
+ // Pro agents
156
+ { id: 'hannah', name: 'Hannah', domain: 'HR', description: 'Onboarding, HR policy, organizational structure, people operations', tier: 'pro' },
157
+ { id: 'aiden', name: 'Aiden', domain: 'Analytics', description: 'Dashboards, KPI tracking, business intelligence, analytics models', tier: 'pro' },
158
+ { id: 'clara', name: 'Clara', domain: 'Communications', description: 'Writing, email sequences, press releases, messaging frameworks', tier: 'pro' },
159
+ { id: 'avery', name: 'Avery', domain: 'Automation', description: 'Workflow automation, no-code automation, process engineering', tier: 'pro' },
160
+ { id: 'owen', name: 'Owen', domain: 'Operations', description: 'Vendor management, process efficiency, day-to-day operations', tier: 'pro' },
161
+ { id: 'isaac', name: 'Isaac', domain: 'Integrations', description: 'API integrations, webhook configurations, third-party connections', tier: 'pro' },
162
+ { id: 'tommy', name: 'Tommy', domain: 'Travel', description: 'Travel booking, itineraries, logistics, trip planning', tier: 'pro' },
163
+ { id: 'sloane', name: 'Sloane', domain: 'Sales', description: 'Sales pipeline, outreach, deal management, revenue strategy', tier: 'pro' },
164
+ { id: 'nadia', name: 'Nadia', domain: 'UI/UX Design', description: 'UX wireframes, visual systems, prototypes, design reviews', tier: 'pro' },
165
+ { id: 'morgan', name: 'Morgan', domain: 'Marketing', description: 'Content marketing, campaigns, SEO, social media, positioning', tier: 'pro' },
166
+ { id: 'alex', name: 'Alex', domain: 'API Crawling', description: 'Web scraping, API data extraction, large-scale crawling', tier: 'pro' },
167
+ { id: 'uma', name: 'Uma', domain: 'UX Research', description: 'User interviews, usability studies, qualitative research, personas', tier: 'pro' },
168
+ { id: 'caleb', name: 'Caleb', domain: 'CRM', description: 'CRM administration, pipeline management, contact lifecycle', tier: 'pro' },
169
+ { id: 'elena', name: 'Elena', domain: 'Estimation', description: 'Project estimation, effort scoping, technical planning', tier: 'pro' },
170
+ { id: 'audrey', name: 'Audrey', domain: 'Accounting', description: 'Financial tracking, budgets, expense management, reconciliation', tier: 'pro' },
171
+ { id: 'logan', name: 'Logan', domain: 'Legal', description: 'Contract review, terms of service, NDAs, regulatory compliance', tier: 'pro' },
172
+ { id: 'eva', name: 'Eva', domain: 'Executive Assistant', description: 'Scheduling, meeting preparation, executive briefs, follow-ups', tier: 'pro' },
173
+ { id: 'parker', name: 'Parker', domain: 'Project Management', description: 'Project milestones, tracking, cross-functional coordination', tier: 'pro' },
174
+ { id: 'nate', name: 'Nate', domain: 'n8n Automation', description: 'n8n workflow building, node-based automation, workflow design', tier: 'pro' },
175
+ { id: 'aria', name: 'Aria', domain: 'Autonomous Research', description: 'Deep investigative research, longitudinal studies, synthesis', tier: 'pro' },
176
+ { id: 'maxxipro', name: 'MaxxiPro', domain: 'Roof Maxx Expert', description: 'Roofing estimation, contracting, roof inspection workflows', tier: 'pro' },
177
+ { id: 'accuscope', name: 'AccuScope', domain: 'AccuLynx CRM Auditor', description: 'AccuLynx CRM data quality, auditing, pipeline health', tier: 'pro' },
178
+ { id: 'smoketestagent', name: 'SmokeTestAgent', domain: 'QA Specialist', description: 'Smoke testing, regression testing, automated test suites', tier: 'pro' },
179
+ ];
180
+
181
+ export function getAliceAgents(tier = 'both') {
182
+ if (tier === 'starter') return ALICE_AGENTS.filter(a => a.tier === 'starter' || a.isOrchestrator);
183
+ if (tier === 'pro') return ALICE_AGENTS;
184
+ return ALICE_AGENTS;
185
+ }
186
+
187
+ // ── Install A.L.I.C.E. on Hermes ─────────────────────────────────────────────
188
+
189
+ export async function installForHermes(options = {}) {
190
+ const { tier = 'starter', auto = false, userInfo = null } = options;
191
+ const agents = getAliceAgents(tier);
192
+ const result = { skills: [], memories: [], config: null, errors: [] };
193
+
194
+ console.log('');
195
+ console.log(` ${'─'.repeat(50)}`);
196
+ console.log(` ${'🧠'.padStart(15)} ${'A.L.I.C.E. on Hermes'}`);
197
+ console.log(` ${'─'.repeat(50)}`);
198
+ console.log('');
199
+
200
+ // 1. Verify Hermes is installed
201
+ if (!isHermesInstalled()) {
202
+ throw new Error('Hermes is not installed. Run: curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash');
203
+ }
204
+
205
+ const version = getHermesVersion();
206
+ console.log(` ${'✓'.padStart(15)} ${version}`);
207
+ console.log('');
208
+
209
+ // 2. Ensure alice skill directory
210
+ if (!existsSync(ALICE_SKILLS_DIR)) {
211
+ mkdirSync(ALICE_SKILLS_DIR, { recursive: true });
212
+ }
213
+
214
+ // 3. Install orchestrator skill
215
+ console.log(` ${'─'.repeat(50)}`);
216
+ console.log(` ${'🤖'.padStart(15)} ${'A.L.I.C.E. orchestrator skill'}`);
217
+ console.log(` ${'─'.repeat(50)}`);
218
+ const orchestratorDir = join(ALICE_SKILLS_DIR, 'alice');
219
+ mkdirSync(orchestratorDir, { recursive: true });
220
+ const orchestratorContent = generateOrchestratorSkill();
221
+ writeFileSync(join(orchestratorDir, 'SKILL.md'), orchestratorContent, 'utf8');
222
+ console.log(` ${'✓'.padStart(15)} alice/SKILL.md — orchestrator`);
223
+ result.skills.push('alice');
224
+
225
+ // 4. Install specialist skills
226
+ const specialistAgents = agents.filter(a => !a.isOrchestrator);
227
+ console.log('');
228
+ console.log(` ${'─'.repeat(50)}`);
229
+ console.log(` ${'👥'.padStart(15)} ${specialistAgents.length} specialist skills`);
230
+ console.log(` ${'─'.repeat(50)}`);
231
+
232
+ for (const agent of specialistAgents) {
233
+ const skillDir = join(ALICE_SKILLS_DIR, agent.id);
234
+ mkdirSync(skillDir, { recursive: true });
235
+ const skillContent = generateSpecialistSkill(agent.id, agent.name, agent.domain, agent.description || '');
236
+ writeFileSync(join(skillDir, 'SKILL.md'), skillContent, 'utf8');
237
+ console.log(` ${'✓'.padStart(15)} ${agent.id.padEnd(15)} — ${agent.domain}`);
238
+ result.skills.push(agent.id);
239
+ }
240
+
241
+ // 5. Create memory directories
242
+ console.log('');
243
+ console.log(` ${'─'.repeat(50)}`);
244
+ console.log(` ${'🧠'.padStart(15)} ${'Memory directories'}`);
245
+ console.log(` ${'─'.repeat(50)}`);
246
+
247
+ for (const agent of agents) {
248
+ const memDir = join(HERMES_DIR, 'memories', agent.id);
249
+ if (!existsSync(memDir)) {
250
+ mkdirSync(memDir, { recursive: true });
251
+ }
252
+ result.memories.push(agent.id);
253
+ }
254
+ console.log(` ${'✓'.padStart(15)} ${agents.length} memory dirs created`);
255
+
256
+ // 6. Patch Hermes config with alice personality
257
+ console.log('');
258
+ console.log(` ${'─'.repeat(50)}`);
259
+ console.log(` ${'⚙️'.padStart(15)} ${'Hermes configuration'}`);
260
+ console.log(` ${'─'.repeat(50)}`);
261
+
262
+ configureHermesAlice();
263
+ result.config = 'config.yaml updated';
264
+ console.log(` ${'✓'.padStart(15)} personality 'alice' added to config.yaml`);
265
+ console.log(` ${'✓'.padStart(15)} display.personality set to alice`);
266
+
267
+ // 7. Write alice-config.json for installer tracking
268
+ const aliceConfig = {
269
+ runtime: 'hermes',
270
+ version,
271
+ installedAt: new Date().toISOString(),
272
+ agents: agents.map(a => a.id),
273
+ tier,
274
+ userName: userInfo?.name || 'unknown',
275
+ };
276
+ writeFileSync(ALICE_CONFIG_JSON, JSON.stringify(aliceConfig, null, 2), 'utf8');
277
+
278
+ console.log('');
279
+ console.log(` ${'✓'.padStart(15)} alice-config.json written`);
280
+ console.log('');
281
+
282
+ return result;
283
+ }
284
+
285
+ // ── Uninstall A.L.I.C.E. from Hermes ────────────────────────────────────────
286
+
287
+ export function uninstallFromHermes(options = {}) {
288
+ const { auto = false } = options;
289
+ const result = { removed: [], errors: [] };
290
+
291
+ // Remove alice skill tree
292
+ if (existsSync(ALICE_SKILLS_DIR)) {
293
+ rmSync(ALICE_SKILLS_DIR, { recursive: true, force: true });
294
+ result.removed.push('alice skills');
295
+ }
296
+
297
+ // Remove alice memories
298
+ const memoriesBase = join(HERMES_DIR, 'memories', 'alice');
299
+ if (existsSync(memoriesBase)) {
300
+ rmSync(memoriesBase, { recursive: true, force: true });
301
+ result.removed.push('alice memories');
302
+ }
303
+
304
+ // Remove config tracking
305
+ if (existsSync(ALICE_CONFIG_JSON)) {
306
+ rmSync(ALICE_CONFIG_JSON, { force: true });
307
+ result.removed.push('alice-config.json');
308
+ }
309
+
310
+ // Remove alice personality using hermes config set (deletes by unsetting)
311
+ try {
312
+ // Setting to empty/null effectively removes it
313
+ execSync(`hermes config set display.personality helpful`, {
314
+ stdio: 'pipe',
315
+ env: { ...process.env, TERM: 'xterm-256color' },
316
+ });
317
+ result.removed.push('display.personality reset to helpful');
318
+ } catch (err) {
319
+ result.errors.push(`display.personality reset: ${err.message}`);
320
+ }
321
+
322
+ return result;
323
+ }
324
+
325
+ // ── Status ─────────────────────────────────────────────────────────────────────
326
+
327
+ export function getHermesAliceStatus() {
328
+ const configPath = join(ALICE_CONFIG_JSON);
329
+ if (!existsSync(configPath)) {
330
+ return { installed: false };
331
+ }
332
+ try {
333
+ const data = JSON.parse(readFileSync(configPath, 'utf8'));
334
+ return { installed: true, ...data };
335
+ } catch {
336
+ return { installed: false };
337
+ }
338
+ }
package/lib/installer.mjs CHANGED
@@ -39,6 +39,7 @@ import { c, bold, dim, green, greenBold, red, yellow, cyan, gray,
39
39
  import { runSkillsWizardStep } from './skills.mjs';
40
40
  import { resolveCodingAgentPreference } from './coding-agent.mjs';
41
41
  import { loadAgentRegistry } from './agent-registry.mjs';
42
+ import { HermesAgentManager } from './hermes-agent.mjs';
42
43
 
43
44
  function commandExists(cmd) {
44
45
  const probe = process.platform === 'win32' ? 'where' : 'which';
@@ -54,6 +55,105 @@ function isOpenClawInstalled() {
54
55
  return commandExists('openclaw');
55
56
  }
56
57
 
58
+ // ── Hermes detection ─────────────────────────────────────────────────────────
59
+
60
+ function isHermesInstalled() {
61
+ if (!existsSync(join(homedir(), '.hermes', 'config.yaml'))) return false;
62
+ try {
63
+ execSync('hermes version', { stdio: 'pipe' });
64
+ return true;
65
+ } catch {
66
+ return false;
67
+ }
68
+ }
69
+
70
+ function getHermesVersion() {
71
+ try {
72
+ const output = execSync('hermes version 2>&1', { encoding: 'utf8', stdio: 'pipe' }).trim();
73
+ return output;
74
+ } catch {
75
+ return null;
76
+ }
77
+ }
78
+
79
+ async function installHermes(auto) {
80
+ console.log('');
81
+ printSection('Installing Hermes Agent');
82
+ console.log('');
83
+ console.log(` ${dim('Hermes Agent is required for the Hermes agent bridge.')}`);
84
+ console.log(` ${dim('Install:')} ${cyan('curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash')}`);
85
+ console.log('');
86
+
87
+ if (auto) {
88
+ console.log(` ${icons.info} ${dim('Non-interactive: running Hermes install script now...')}`);
89
+ console.log('');
90
+ try {
91
+ execSync('curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash', {
92
+ stdio: 'inherit',
93
+ timeout: 120000,
94
+ });
95
+ const version = getHermesVersion();
96
+ if (version) {
97
+ printStepDone('Hermes installed', version);
98
+ return { status: 'ok', version };
99
+ }
100
+ } catch (err) {
101
+ console.log(` ${icons.warn} ${yellow('Hermes install failed.')}`);
102
+ console.log(` ${dim('Install manually:')} ${cyan('curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash')}`);
103
+ return { status: 'error', reason: err.message };
104
+ }
105
+ }
106
+
107
+ const shouldInstall = await confirm(' Install Hermes Agent now?');
108
+ if (!shouldInstall) {
109
+ printStepSkip('Hermes Agent', 'not installed — Hermes agent bridge will be skipped');
110
+ return { status: 'skipped' };
111
+ }
112
+
113
+ try {
114
+ execSync('curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash', {
115
+ stdio: 'inherit',
116
+ timeout: 120000,
117
+ });
118
+ const version = getHermesVersion();
119
+ if (version) {
120
+ printStepDone('Hermes installed', version);
121
+ return { status: 'ok', version };
122
+ }
123
+ } catch (err) {
124
+ console.log(` ${icons.warn} ${yellow('Hermes install failed: ' + (err.message || 'unknown error'))}`);
125
+ console.log(` ${dim('Install manually:')} ${cyan('curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash')}`);
126
+ return { status: 'error', reason: err.message };
127
+ }
128
+
129
+ return { status: 'ok', version: getHermesVersion() };
130
+ }
131
+
132
+ async function checkHermes(auto, hermesBridgeRequested) {
133
+ const hermesFound = isHermesInstalled();
134
+ const version = hermesFound ? getHermesVersion() : null;
135
+
136
+ if (hermesFound && version) {
137
+ console.log(` ${icons.ok} ${green('Hermes detected:')} ${version}`);
138
+ return { status: 'found', version };
139
+ }
140
+
141
+ // Hermes not found
142
+ if (hermesBridgeRequested) {
143
+ console.log(` ${icons.warn} ${yellow('Hermes not found.')}`);
144
+ console.log(` ${dim('The --hermes-bridge flag requires Hermes to be installed.')}`);
145
+ const result = await installHermes(auto);
146
+ return result;
147
+ }
148
+
149
+ // Hermes not requested — just informational
150
+ console.log(` ${icons.info} ${dim('Hermes not found.')}`);
151
+ console.log(` ${dim('Hermes enables persistent-memory specialist agents for the A.L.I.C.E. team.')}`);
152
+ console.log(` ${dim('Install:')} ${cyan('curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash')}`);
153
+ console.log(` ${dim('Or re-run with')} ${cyan('--hermes-bridge')} ${dim('to install automatically.')}`);
154
+ return { status: 'not_found' };
155
+ }
156
+
57
157
  /**
58
158
  * On Linux, Docker requires the user to be in the docker group.
59
159
  * Detect this early and warn before OpenClaw's own preflight fails cryptically.
@@ -91,6 +191,16 @@ function checkLinuxDockerPermissions() {
91
191
  }
92
192
 
93
193
  async function detectRuntime() {
194
+ // Hermes is always standalone — check first
195
+ const hermesDir = join(homedir(), '.hermes');
196
+ const hermesConfig = join(hermesDir, 'config.yaml');
197
+ if (existsSync(hermesConfig)) {
198
+ try {
199
+ execSync('hermes version', { stdio: 'pipe' });
200
+ return 'hermes';
201
+ } catch {}
202
+ }
203
+
94
204
  // Check for NemoClaw binary
95
205
  try {
96
206
  execSync('nemoclaw --version', { stdio: 'pipe' });
@@ -630,6 +740,120 @@ export async function runInstall(options = {}) {
630
740
  // 0. Linux Docker permission check — warn early before OpenClaw preflight fails
631
741
  checkLinuxDockerPermissions();
632
742
 
743
+ // 1. Detect runtime — Hermes, NemoClaw, OpenClaw, or none
744
+ const runtime = options.runtimeOverride || await detectRuntime();
745
+
746
+ // ── HERMES-ONLY PATH ──────────────────────────────────────────────────────
747
+ if (runtime === 'hermes') {
748
+ // Lazy-import to avoid circular deps
749
+ const { installForHermes, getHermesAliceStatus } = await import('./hermes-installer.mjs');
750
+ const { detectUserName, detectTimezone } = await import('./prompter.mjs');
751
+
752
+ console.log(` ${icons.ok} ${greenBold('Hermes detected')} ${dim('─')} A.L.I.C.E. will run as a Hermes skill tree\n`);
753
+
754
+ // Check if already installed
755
+ const existingStatus = getHermesAliceStatus();
756
+ if (existingStatus.installed && manifest && !options.force) {
757
+ console.log(` ${icons.info} ${dim('A.L.I.C.E. already installed on Hermes')}`);
758
+ console.log(` ${dim('Run with --force to reinstall.')}\n`);
759
+ }
760
+
761
+ // Detect Hermes version and model
762
+ const { getHermesVersion, getHermesDefaultModel } = await import('./hermes-installer.mjs');
763
+ const hermesVersion = getHermesVersion();
764
+ const hermesModel = getHermesDefaultModel();
765
+ if (hermesVersion) {
766
+ console.log(` ${icons.ok} ${green('Hermes version:')} ${hermesVersion}`);
767
+ }
768
+ if (hermesModel) {
769
+ console.log(` ${icons.ok} ${green('Model:')} ${hermesModel}`);
770
+ } else {
771
+ console.log('');
772
+ console.log(` ${icons.fail} ${red('No model configured for Hermes')}`);
773
+ console.log('');
774
+ console.log(` ${dim('A model is required before installing A.L.I.C.E.')}`);
775
+ console.log(` Run: ${cyan('hermes model')}`);
776
+ console.log(` Then re-run: ${cyan('npx @robbiesrobotics/alice-agents --runtime hermes')}`);
777
+ console.log('');
778
+ process.exit(1);
779
+ }
780
+
781
+ // 2. Tier selection
782
+ let tier;
783
+ if (options.tierOverride) {
784
+ tier = normalizeTierOption(options.tierOverride);
785
+ } else if (auto) {
786
+ tier = 'starter';
787
+ } else {
788
+ tier = await promptTier();
789
+ }
790
+
791
+ // 3. User info
792
+ let userInfo;
793
+ if (auto) {
794
+ userInfo = { name: detectUserName(), timezone: detectTimezone(), notes: '' };
795
+ } else {
796
+ printSection('About You');
797
+ console.log('');
798
+ userInfo = await promptUserInfo();
799
+ }
800
+
801
+ // 4. Confirmation
802
+ const agents = (await import('./agent-registry.mjs')).loadAgentRegistry(tier);
803
+ if (!auto) {
804
+ printSection('Install Summary');
805
+ console.log('');
806
+ console.log(` ${dim('Runtime:')} ${green('Hermes Agent')}`);
807
+ console.log(` ${dim('Model:')} ${green(hermesModel || 'none')}`);
808
+ console.log(` ${dim('Tier:')} ${green(tier)} ${dim('(' + agents.length + ' agents)')}`);
809
+ console.log(` ${dim('User:')} ${green(userInfo.name)}`);
810
+ console.log('');
811
+ const ok = await confirm(' Proceed with Hermes install?');
812
+ if (!ok) {
813
+ console.log(' Aborted.');
814
+ closePrompt();
815
+ return;
816
+ }
817
+ }
818
+ closePrompt();
819
+
820
+ // Execute Hermes install
821
+ printSection('Installing A.L.I.C.E. on Hermes');
822
+ console.log('');
823
+
824
+ const result = await installForHermes({ tier, auto, userInfo });
825
+
826
+ // Write manifest
827
+ writeManifest({
828
+ installedAt: existingStatus?.installedAt || new Date().toISOString(),
829
+ tier,
830
+ agents: result.skills,
831
+ userName: userInfo.name,
832
+ userTimezone: userInfo.timezone,
833
+ modelPreset: 'hermes-detected',
834
+ runtime: 'hermes',
835
+ skills: [],
836
+ codingTool: null,
837
+ codingSkill: null,
838
+ missionControl: null,
839
+ });
840
+
841
+ console.log('');
842
+ printSeparator();
843
+ console.log('');
844
+ console.log(` ${icons.ok} ${greenBold('A.L.I.C.E. installed on Hermes!')} ${dim(result.skills.length + ' skills ready.')}`);
845
+ console.log('');
846
+ console.log(` ${dim('Start A.L.I.C.E.:')} ${cyan('hermes chat')}`);
847
+ console.log(` ${dim('List skills:')} ${cyan('hermes skills list')}`);
848
+ console.log(` ${dim('Skills dir:')} ${cyan('~/.hermes/skills/alice/')}`);
849
+ console.log('');
850
+ printSeparator();
851
+ console.log('');
852
+ return;
853
+ }
854
+ // ── END HERMES PATH ────────────────────────────────────────────────────────
855
+
856
+ // OpenClaw / NemoClaw path (existing behavior)
633
857
  // 1. Detect OpenClaw — offer to install if missing
634
858
  if (!isOpenClawInstalled() || !configExists()) {
635
859
  await installRuntime(auto);
@@ -645,7 +869,6 @@ export async function runInstall(options = {}) {
645
869
  // 1b. Check for OpenClaw updates
646
870
  await checkForOpenClawUpdate(auto);
647
871
 
648
- const runtime = await detectRuntime();
649
872
  if (runtime === 'nemoclaw') {
650
873
  console.log(` ${icons.ok} ${greenBold('NemoClaw detected')} ${dim('─')} agents run in OpenShell sandbox\n`);
651
874
  } else {
@@ -657,17 +880,26 @@ export async function runInstall(options = {}) {
657
880
  }
658
881
  }
659
882
 
883
+ // Hermes check (for OpenClaw+Hermes hybrid setups)
884
+ const hermesResult = await checkHermes(auto, !!options.hermesBridge);
885
+ const hermesReady = hermesResult.status === 'found' || hermesResult.status === 'ok';
886
+
660
887
  // Detect what models the user already has configured
661
888
  const detectedModels = detectAvailableModels();
662
889
  if (detectedModels?.hasModel) {
663
- console.log(` ${icons.ok} ${green('Detected configured model:')} ${detectedModels.primary}`);
890
+ console.log(` ${icons.ok} ${green('Model:')} ${detectedModels.primary}`);
664
891
  if (detectedModels.providers.length > 0) {
665
- console.log(` Providers: ${detectedModels.providers.join(', ')}\n`);
666
- } else {
667
- console.log();
892
+ console.log(` Providers: ${detectedModels.providers.join(', ')}`);
668
893
  }
894
+ console.log('');
669
895
  } else {
670
- console.log(` ${icons.info} ${dim('No model configured yet — you\'ll be prompted to choose one.')}\n`);
896
+ console.log(` ${icons.fail} ${red('No model configured for OpenClaw')}`);
897
+ console.log('');
898
+ console.log(` ${dim('A model is required before installing A.L.I.C.E.')}`);
899
+ console.log(` Run: ${cyan('openclaw configure')}`);
900
+ console.log(` Then re-run: ${cyan('npx @robbiesrobotics/alice-agents')}`);
901
+ console.log('');
902
+ process.exit(1);
671
903
  }
672
904
 
673
905
  // 2. Install mode
@@ -706,19 +938,9 @@ export async function runInstall(options = {}) {
706
938
  userInfo = await promptUserInfo();
707
939
  }
708
940
 
709
- // 4. Model preset
710
- let preset, customModels;
711
- if (auto) {
712
- // Non-interactive: use whatever the user already has configured.
713
- // Only fall back to sonnet if nothing is detected (e.g. fresh OpenClaw install
714
- // where the user explicitly set up Claude credentials).
715
- preset = detectedModels?.hasModel ? 'detected' : 'sonnet';
716
- } else {
717
- preset = await promptModelPreset(detectedModels);
718
- if (preset === 'custom') {
719
- customModels = await promptCustomModel();
720
- }
721
- }
941
+ // 4. Model — always use whatever is already configured; we already verified one exists above
942
+ const preset = 'detected';
943
+ const customModels = null; // not used when preset=detected
722
944
 
723
945
  // 5. Tier selection
724
946
  let tier;
@@ -964,6 +1186,19 @@ export async function runInstall(options = {}) {
964
1186
  sandboxName: 'my-assistant',
965
1187
  });
966
1188
 
1189
+ // Hermes agent bridge setup
1190
+ if (options.hermesBridge && hermesReady) {
1191
+ const hermes = new HermesAgentManager();
1192
+ const bridgeResult = hermes.setupBridge();
1193
+ if (bridgeResult.status === 'ok') {
1194
+ printStepDone('Hermes bridge', `v${bridgeResult.hermesVersion} connected`);
1195
+ } else {
1196
+ printStepSkip('Hermes bridge', bridgeResult.reason);
1197
+ }
1198
+ } else if (options.hermesBridge && !hermesReady) {
1199
+ printStepSkip('Hermes bridge', 'Hermes not installed');
1200
+ }
1201
+
967
1202
  // Write manifest
968
1203
  const existing = readManifest();
969
1204
  writeManifest({