myaiforone 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/README.md +113 -0
  2. package/agents/_template/CLAUDE.md +18 -0
  3. package/agents/_template/agent.json +7 -0
  4. package/agents/platform/agentcreator/CLAUDE.md +300 -0
  5. package/agents/platform/appcreator/CLAUDE.md +158 -0
  6. package/agents/platform/gym/CLAUDE.md +486 -0
  7. package/agents/platform/gym/agent.json +40 -0
  8. package/agents/platform/gym/programs/agent-building/program.json +160 -0
  9. package/agents/platform/gym/programs/automations-mastery/program.json +129 -0
  10. package/agents/platform/gym/programs/getting-started/program.json +124 -0
  11. package/agents/platform/gym/programs/mcp-integrations/program.json +116 -0
  12. package/agents/platform/gym/programs/multi-model-strategy/program.json +115 -0
  13. package/agents/platform/gym/programs/prompt-engineering/program.json +136 -0
  14. package/agents/platform/gym/souls/alex.md +12 -0
  15. package/agents/platform/gym/souls/jordan.md +12 -0
  16. package/agents/platform/gym/souls/morgan.md +12 -0
  17. package/agents/platform/gym/souls/riley.md +12 -0
  18. package/agents/platform/gym/souls/sam.md +12 -0
  19. package/agents/platform/hub/CLAUDE.md +372 -0
  20. package/agents/platform/promptcreator/CLAUDE.md +130 -0
  21. package/agents/platform/skillcreator/CLAUDE.md +163 -0
  22. package/bin/cli.js +566 -0
  23. package/config.example.json +310 -0
  24. package/dist/agent-registry.d.ts +32 -0
  25. package/dist/agent-registry.d.ts.map +1 -0
  26. package/dist/agent-registry.js +144 -0
  27. package/dist/agent-registry.js.map +1 -0
  28. package/dist/channels/discord.d.ts +17 -0
  29. package/dist/channels/discord.d.ts.map +1 -0
  30. package/dist/channels/discord.js +114 -0
  31. package/dist/channels/discord.js.map +1 -0
  32. package/dist/channels/imessage.d.ts +23 -0
  33. package/dist/channels/imessage.d.ts.map +1 -0
  34. package/dist/channels/imessage.js +214 -0
  35. package/dist/channels/imessage.js.map +1 -0
  36. package/dist/channels/slack.d.ts +19 -0
  37. package/dist/channels/slack.d.ts.map +1 -0
  38. package/dist/channels/slack.js +167 -0
  39. package/dist/channels/slack.js.map +1 -0
  40. package/dist/channels/telegram.d.ts +19 -0
  41. package/dist/channels/telegram.d.ts.map +1 -0
  42. package/dist/channels/telegram.js +274 -0
  43. package/dist/channels/telegram.js.map +1 -0
  44. package/dist/channels/types.d.ts +44 -0
  45. package/dist/channels/types.d.ts.map +1 -0
  46. package/dist/channels/types.js +18 -0
  47. package/dist/channels/types.js.map +1 -0
  48. package/dist/channels/whatsapp.d.ts +23 -0
  49. package/dist/channels/whatsapp.d.ts.map +1 -0
  50. package/dist/channels/whatsapp.js +189 -0
  51. package/dist/channels/whatsapp.js.map +1 -0
  52. package/dist/config.d.ts +134 -0
  53. package/dist/config.d.ts.map +1 -0
  54. package/dist/config.js +127 -0
  55. package/dist/config.js.map +1 -0
  56. package/dist/cron.d.ts +8 -0
  57. package/dist/cron.d.ts.map +1 -0
  58. package/dist/cron.js +35 -0
  59. package/dist/cron.js.map +1 -0
  60. package/dist/decrypt-keys.d.ts +7 -0
  61. package/dist/decrypt-keys.d.ts.map +1 -0
  62. package/dist/decrypt-keys.js +53 -0
  63. package/dist/decrypt-keys.js.map +1 -0
  64. package/dist/encrypt-keys.d.ts +8 -0
  65. package/dist/encrypt-keys.d.ts.map +1 -0
  66. package/dist/encrypt-keys.js +62 -0
  67. package/dist/encrypt-keys.js.map +1 -0
  68. package/dist/executor.d.ts +31 -0
  69. package/dist/executor.d.ts.map +1 -0
  70. package/dist/executor.js +2009 -0
  71. package/dist/executor.js.map +1 -0
  72. package/dist/gemini-executor.d.ts +27 -0
  73. package/dist/gemini-executor.d.ts.map +1 -0
  74. package/dist/gemini-executor.js +160 -0
  75. package/dist/gemini-executor.js.map +1 -0
  76. package/dist/goals.d.ts +24 -0
  77. package/dist/goals.d.ts.map +1 -0
  78. package/dist/goals.js +189 -0
  79. package/dist/goals.js.map +1 -0
  80. package/dist/gym/activity-digest.d.ts +30 -0
  81. package/dist/gym/activity-digest.d.ts.map +1 -0
  82. package/dist/gym/activity-digest.js +506 -0
  83. package/dist/gym/activity-digest.js.map +1 -0
  84. package/dist/gym/dimension-scorer.d.ts +76 -0
  85. package/dist/gym/dimension-scorer.d.ts.map +1 -0
  86. package/dist/gym/dimension-scorer.js +236 -0
  87. package/dist/gym/dimension-scorer.js.map +1 -0
  88. package/dist/gym/gym-router.d.ts +7 -0
  89. package/dist/gym/gym-router.d.ts.map +1 -0
  90. package/dist/gym/gym-router.js +718 -0
  91. package/dist/gym/gym-router.js.map +1 -0
  92. package/dist/gym/index.d.ts +11 -0
  93. package/dist/gym/index.d.ts.map +1 -0
  94. package/dist/gym/index.js +11 -0
  95. package/dist/gym/index.js.map +1 -0
  96. package/dist/heartbeat.d.ts +21 -0
  97. package/dist/heartbeat.d.ts.map +1 -0
  98. package/dist/heartbeat.js +163 -0
  99. package/dist/heartbeat.js.map +1 -0
  100. package/dist/index.d.ts +2 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +254 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/keystore.d.ts +22 -0
  105. package/dist/keystore.d.ts.map +1 -0
  106. package/dist/keystore.js +178 -0
  107. package/dist/keystore.js.map +1 -0
  108. package/dist/logger.d.ts +9 -0
  109. package/dist/logger.d.ts.map +1 -0
  110. package/dist/logger.js +45 -0
  111. package/dist/logger.js.map +1 -0
  112. package/dist/memory/daily.d.ts +22 -0
  113. package/dist/memory/daily.d.ts.map +1 -0
  114. package/dist/memory/daily.js +82 -0
  115. package/dist/memory/daily.js.map +1 -0
  116. package/dist/memory/embeddings.d.ts +15 -0
  117. package/dist/memory/embeddings.d.ts.map +1 -0
  118. package/dist/memory/embeddings.js +154 -0
  119. package/dist/memory/embeddings.js.map +1 -0
  120. package/dist/memory/index.d.ts +32 -0
  121. package/dist/memory/index.d.ts.map +1 -0
  122. package/dist/memory/index.js +159 -0
  123. package/dist/memory/index.js.map +1 -0
  124. package/dist/memory/search.d.ts +21 -0
  125. package/dist/memory/search.d.ts.map +1 -0
  126. package/dist/memory/search.js +77 -0
  127. package/dist/memory/search.js.map +1 -0
  128. package/dist/memory/store.d.ts +23 -0
  129. package/dist/memory/store.d.ts.map +1 -0
  130. package/dist/memory/store.js +144 -0
  131. package/dist/memory/store.js.map +1 -0
  132. package/dist/ollama-executor.d.ts +17 -0
  133. package/dist/ollama-executor.d.ts.map +1 -0
  134. package/dist/ollama-executor.js +112 -0
  135. package/dist/ollama-executor.js.map +1 -0
  136. package/dist/openai-executor.d.ts +38 -0
  137. package/dist/openai-executor.d.ts.map +1 -0
  138. package/dist/openai-executor.js +197 -0
  139. package/dist/openai-executor.js.map +1 -0
  140. package/dist/router.d.ts +11 -0
  141. package/dist/router.d.ts.map +1 -0
  142. package/dist/router.js +185 -0
  143. package/dist/router.js.map +1 -0
  144. package/dist/test-message.d.ts +2 -0
  145. package/dist/test-message.d.ts.map +1 -0
  146. package/dist/test-message.js +60 -0
  147. package/dist/test-message.js.map +1 -0
  148. package/dist/utils/imsg-db-reader.d.ts +24 -0
  149. package/dist/utils/imsg-db-reader.d.ts.map +1 -0
  150. package/dist/utils/imsg-db-reader.js +92 -0
  151. package/dist/utils/imsg-db-reader.js.map +1 -0
  152. package/dist/utils/imsg-rpc.d.ts +25 -0
  153. package/dist/utils/imsg-rpc.d.ts.map +1 -0
  154. package/dist/utils/imsg-rpc.js +149 -0
  155. package/dist/utils/imsg-rpc.js.map +1 -0
  156. package/dist/utils/message-formatter.d.ts +3 -0
  157. package/dist/utils/message-formatter.d.ts.map +1 -0
  158. package/dist/utils/message-formatter.js +69 -0
  159. package/dist/utils/message-formatter.js.map +1 -0
  160. package/dist/web-ui.d.ts +12 -0
  161. package/dist/web-ui.d.ts.map +1 -0
  162. package/dist/web-ui.js +5784 -0
  163. package/dist/web-ui.js.map +1 -0
  164. package/dist/whatsapp-chats.d.ts +2 -0
  165. package/dist/whatsapp-chats.d.ts.map +1 -0
  166. package/dist/whatsapp-chats.js +76 -0
  167. package/dist/whatsapp-chats.js.map +1 -0
  168. package/dist/whatsapp-login.d.ts +2 -0
  169. package/dist/whatsapp-login.d.ts.map +1 -0
  170. package/dist/whatsapp-login.js +90 -0
  171. package/dist/whatsapp-login.js.map +1 -0
  172. package/dist/wiki-sync.d.ts +21 -0
  173. package/dist/wiki-sync.d.ts.map +1 -0
  174. package/dist/wiki-sync.js +147 -0
  175. package/dist/wiki-sync.js.map +1 -0
  176. package/docs/AddNewAgentGuide.md +100 -0
  177. package/docs/AddNewMcpGuide.md +72 -0
  178. package/docs/Architecture.md +795 -0
  179. package/docs/CLAUDE-AI-SETUP.md +166 -0
  180. package/docs/Setup.md +297 -0
  181. package/docs/ai-gym-architecture.md +1040 -0
  182. package/docs/ai-gym-build-plan.md +343 -0
  183. package/docs/ai-gym-onboarding.md +122 -0
  184. package/docs/appcreator_plan.md +348 -0
  185. package/docs/platform-mcp-audit.md +320 -0
  186. package/docs/server-deployment-plan.md +503 -0
  187. package/docs/superpowers/plans/2026-03-25-marketplace.md +1281 -0
  188. package/docs/superpowers/specs/2026-03-25-marketplace-design.md +287 -0
  189. package/docs/user-guide.md +2016 -0
  190. package/mcp-catalog.json +628 -0
  191. package/package.json +63 -0
  192. package/public/MyAIforOne-logomark-512.svg +16 -0
  193. package/public/MyAIforOne-logomark-transparent.svg +15 -0
  194. package/public/activity.html +314 -0
  195. package/public/admin.html +1674 -0
  196. package/public/agent-dashboard.html +670 -0
  197. package/public/api-docs.html +1106 -0
  198. package/public/automations.html +722 -0
  199. package/public/canvas.css +223 -0
  200. package/public/canvas.js +588 -0
  201. package/public/changelog.html +231 -0
  202. package/public/gym.html +2766 -0
  203. package/public/home.html +1930 -0
  204. package/public/index.html +2809 -0
  205. package/public/lab.html +1643 -0
  206. package/public/library.html +1442 -0
  207. package/public/marketplace.html +1101 -0
  208. package/public/mcp-docs.html +441 -0
  209. package/public/mini.html +390 -0
  210. package/public/monitor.html +584 -0
  211. package/public/org.html +4304 -0
  212. package/public/projects.html +734 -0
  213. package/public/settings.html +645 -0
  214. package/public/tasks.html +932 -0
  215. package/public/trainers/alex.svg +12 -0
  216. package/public/trainers/jordan.svg +12 -0
  217. package/public/trainers/morgan.svg +12 -0
  218. package/public/trainers/riley.svg +12 -0
  219. package/public/trainers/sam.svg +12 -0
  220. package/public/user-guide.html +218 -0
  221. package/registry/agents.json +3 -0
  222. package/registry/apps.json +20 -0
  223. package/registry/installed-drafts.json +3 -0
  224. package/registry/mcps.json +1084 -0
  225. package/registry/prompts/personal/mcp-test-prompt.md +6 -0
  226. package/registry/prompts/personal/memory-recall.md +6 -0
  227. package/registry/prompts/platform/brainstorm.md +15 -0
  228. package/registry/prompts/platform/code-review.md +16 -0
  229. package/registry/prompts/platform/explain.md +16 -0
  230. package/registry/prompts.json +58 -0
  231. package/registry/skills/external/brainstorming.md +5 -0
  232. package/registry/skills/external/code-review.md +40 -0
  233. package/registry/skills/external/frontend-patterns.md +642 -0
  234. package/registry/skills/external/frontend-slides.md +184 -0
  235. package/registry/skills/external/systematic-debugging.md +5 -0
  236. package/registry/skills/external/tdd.md +328 -0
  237. package/registry/skills/external/verification-before-completion.md +5 -0
  238. package/registry/skills/external/writing-plans.md +5 -0
  239. package/registry/skills/platform/ai41_app_build.md +930 -0
  240. package/registry/skills/platform/ai41_app_deploy.md +168 -0
  241. package/registry/skills/platform/ai41_app_orchestrator.md +239 -0
  242. package/registry/skills/platform/ai41_app_patterns.md +359 -0
  243. package/registry/skills/platform/ai41_app_register.md +85 -0
  244. package/registry/skills/platform/ai41_app_scaffold.md +421 -0
  245. package/registry/skills/platform/ai41_app_verify.md +107 -0
  246. package/registry/skills/platform/opProjectCreate.md +239 -0
  247. package/registry/skills/platform/op_devbrowser.md +136 -0
  248. package/registry/skills/platform/sop_brandguidelines.md +103 -0
  249. package/registry/skills/platform/sop_docx.md +117 -0
  250. package/registry/skills/platform/sop_frontenddesign.md +44 -0
  251. package/registry/skills/platform/sop_frontenddesign_v2.md +659 -0
  252. package/registry/skills/platform/sop_mcpbuilder.md +133 -0
  253. package/registry/skills/platform/sop_pdf.md +172 -0
  254. package/registry/skills/platform/sop_pptx.md +133 -0
  255. package/registry/skills/platform/sop_skillcreator.md +104 -0
  256. package/registry/skills/platform/sop_themefactory.md +128 -0
  257. package/registry/skills/platform/sop_webapptesting.md +75 -0
  258. package/registry/skills/platform/sop_webartifactsbuilder.md +97 -0
  259. package/registry/skills/platform/sop_xlsx.md +134 -0
  260. package/registry/skills.json +1055 -0
  261. package/scripts/discover-chats.sh +11 -0
  262. package/scripts/install-service-windows.ps1 +87 -0
  263. package/scripts/install-service.sh +52 -0
  264. package/scripts/seed-registry.ts +195 -0
  265. package/scripts/test-send.sh +5 -0
  266. package/scripts/tray-indicator.ps1 +35 -0
  267. package/scripts/uninstall-service-windows.ps1 +23 -0
  268. package/scripts/uninstall-service.sh +15 -0
  269. package/scripts/xbar-myagent.5s.sh +32 -0
  270. package/server/mcp-server/dist/index.d.ts +11 -0
  271. package/server/mcp-server/dist/index.js +1332 -0
  272. package/server/mcp-server/dist/lib/api-client.d.ts +165 -0
  273. package/server/mcp-server/dist/lib/api-client.js +241 -0
  274. package/server/mcp-server/index.ts +1545 -0
  275. package/server/mcp-server/lib/api-client.ts +366 -0
  276. package/server/mcp-server/tsconfig.json +14 -0
  277. package/src/agent-registry.ts +180 -0
  278. package/src/channels/discord.ts +129 -0
  279. package/src/channels/imessage.ts +261 -0
  280. package/src/channels/slack.ts +208 -0
  281. package/src/channels/telegram.ts +307 -0
  282. package/src/channels/types.ts +62 -0
  283. package/src/channels/whatsapp.ts +227 -0
  284. package/src/config.ts +281 -0
  285. package/src/cron.ts +43 -0
  286. package/src/decrypt-keys.ts +60 -0
  287. package/src/encrypt-keys.ts +70 -0
  288. package/src/executor.ts +2190 -0
  289. package/src/gemini-executor.ts +212 -0
  290. package/src/goals.ts +240 -0
  291. package/src/gym/activity-digest.ts +546 -0
  292. package/src/gym/dimension-scorer.ts +297 -0
  293. package/src/gym/gym-router.ts +801 -0
  294. package/src/gym/index.ts +19 -0
  295. package/src/heartbeat.ts +220 -0
  296. package/src/index.ts +275 -0
  297. package/src/keystore.ts +190 -0
  298. package/src/logger.ts +51 -0
  299. package/src/memory/daily.ts +101 -0
  300. package/src/memory/embeddings.ts +185 -0
  301. package/src/memory/index.ts +218 -0
  302. package/src/memory/search.ts +124 -0
  303. package/src/memory/store.ts +189 -0
  304. package/src/ollama-executor.ts +126 -0
  305. package/src/openai-executor.ts +259 -0
  306. package/src/router.ts +230 -0
  307. package/src/test-message.ts +72 -0
  308. package/src/utils/imsg-db-reader.ts +109 -0
  309. package/src/utils/imsg-rpc.ts +178 -0
  310. package/src/utils/message-formatter.ts +90 -0
  311. package/src/web-ui.ts +5778 -0
  312. package/src/whatsapp-chats.ts +91 -0
  313. package/src/whatsapp-login.ts +110 -0
  314. package/src/wiki-sync.ts +199 -0
  315. package/tsconfig.json +19 -0
@@ -0,0 +1,2016 @@
1
+ # MyAIforOne — User Guide
2
+
3
+ > Master reference for every page, button, action, API endpoint, and MCP tool in the MyAIforOne platform.
4
+ > Organized by UI page. Each action includes its API and MCP mapping.
5
+ > Intended audience: hub agent, platform agents, and advanced users.
6
+
7
+ ---
8
+
9
+ ## Table of Contents
10
+
11
+ 1. [Home](#1-home)
12
+ 2. [Agents (Org)](#2-agents-org)
13
+ - [Agent List](#21-agent-list)
14
+ - [Agent Creation / Edit Modal](#22-agent-creation--edit-modal)
15
+ - [Agent Dashboard](#23-agent-dashboard)
16
+ 3. [Chat](#3-chat)
17
+ 4. [Library](#4-library)
18
+ 5. [Lab](#5-lab)
19
+ 6. [Marketplace](#6-marketplace)
20
+ 7. [Admin](#7-admin)
21
+ - [Channels](#71-channels)
22
+ - [Activity](#72-activity)
23
+ - [Settings](#73-settings)
24
+ - [Docs](#74-docs)
25
+ 8. [Monitor](#8-monitor)
26
+ - [Setup Checklist](#81-setup-checklist)
27
+ - [Dashboard](#82-dashboard)
28
+ 9. [Projects](#9-projects)
29
+ 10. [AI Gym](#10-ai-gym)
30
+ - [Onboarding](#101-onboarding-first-visit)
31
+ - [Main Gym View](#102-main-gym-view)
32
+ - [Dimensions](#103-ai-strength-dimensions)
33
+ - [Programs](#104-programs)
34
+ - [Activity Digest](#105-activity-digest)
35
+ - [Trainer Souls](#106-trainer-souls)
36
+ - [API & MCP Reference](#107-api--mcp-reference)
37
+
38
+ ---
39
+
40
+ # 1. Home
41
+
42
+ **URL:** `/` or `/home`
43
+ **Purpose:** The primary interface — a conversational AI hub. Users talk to their personal AI, which routes to the right agent or handles platform operations directly.
44
+
45
+ ## 1.1 Landing View
46
+
47
+ The initial state before any message is sent.
48
+
49
+ ### Chat Input (Landing)
50
+ - **Large textarea** — type a message to any agent
51
+ - **Send button (→)** — sends the first message and transitions to chat view
52
+ - If message contains `@alias`, routes to that agent
53
+ - If no mention, routes to the default/hub agent
54
+
55
+ ### Agent Tiles
56
+ - **Org filter dropdown** — filter visible tiles by organization
57
+ - Options: "Recent" (default), plus all organization names
58
+ - **Agent tile grid** — clickable tiles showing each agent
59
+ - Each tile shows: avatar (2-letter initials), name, last message time (in Recent view)
60
+ - **Click a tile** → inserts `@alias` into the chat input
61
+
62
+ | Action | API | MCP |
63
+ |--------|-----|-----|
64
+ | List agents for tiles | `GET /api/agents` | `list_agents` |
65
+ | | **Params:** `?org=orgName` (optional) | **Params:** `org` (optional string) |
66
+
67
+ ## 1.2 Chat View
68
+
69
+ Active after the first message is sent.
70
+
71
+ ### Agent Sidebar (Left Panel)
72
+ - **Org filter dropdown** — filter sidebar agents by organization (top of sidebar)
73
+ - **Recent section** — agents sorted by most recent interaction first
74
+ - Each entry: avatar, agent name, alias, time since last activity
75
+ - **Click an agent** → inserts `@alias` into chat input
76
+ - **All Agents section** — collapsible section (click header to expand/collapse)
77
+ - Shows all agents not in the Recent section, with count badge
78
+ - Arrow indicator (▶/▼) shows collapsed/expanded state
79
+ - **◀ Collapse button** — collapses the entire sidebar to zero width, giving chat full width
80
+ - Click again (or the Agents toggle) to re-expand
81
+
82
+ ### Chat Header (Per-Agent)
83
+ When chatting with an agent, the header shows:
84
+ - **Agent avatar and name**
85
+ - **Account override dropdown** — select which Claude account to use for this agent
86
+ - Options: "default" (agent's configured account), plus all other configured accounts
87
+ - In-memory only — resets on page reload
88
+ - The selected account is passed as `accountOverride` on every send/stream call
89
+ - **▨ Canvas button** — toggles the canvas/preview panel (right side)
90
+ - When active, shows files created or modified by the agent
91
+ - Canvas has: download button (downloads file), close button, file content display
92
+ - **↺ Reset Session button** — (only for persistent-session agents) compacts and resets the conversation
93
+ - Shows confirmation dialog: "Reset session? This clears conversation history. Use /opcompact first to save important context."
94
+ - On confirm, calls reset session API
95
+
96
+ | Action | API | MCP |
97
+ |--------|-----|-----|
98
+ | Reset session | `POST /api/agents/:agentId/sessions/reset` | `reset_session` |
99
+ | | **Body:** `{ senderId? }` | **Params:** `agentId`, `senderId?` |
100
+ | Account override | Passed as `accountOverride` param on `POST /api/chat/:agentId` and `/stream` | `send_message` / `start_stream` — `accountOverride` param |
101
+ | List accounts (populates dropdown) | `GET /api/config/accounts` | `list_accounts` |
102
+ | | | *(no params)* |
103
+ | Download canvas file | `GET /api/agents/:agentId/download?path=filePath` | `download_agent_file` |
104
+ | | **Query:** `path` (absolute file path) | **Params:** `agentId`, `path` |
105
+
106
+ ### Chat Messages Area
107
+ - **User messages** — right-aligned, light blue background
108
+ - **Agent messages** — left-aligned, purple background, markdown-rendered
109
+ - Shows `[via:agentId]` tag indicating which agent responded
110
+ - File references render with **Download** and **▨ Preview** buttons
111
+ - **Thinking indicator** — animated dots while agent is processing
112
+ - **Tool usage cards** — show which tools the agent is actively using
113
+
114
+ ### Chat Input
115
+ - **Textarea** — multi-line input, auto-resizes
116
+ - Placeholder: "Type @ to mention an agent..."
117
+ - `Enter` sends, `Shift+Enter` for newline
118
+ - **@mention autocomplete** — appears while typing `@`
119
+ - Shows matching agents with avatar, alias, name
120
+ - Arrow keys to navigate, Tab/Enter to select, Escape to dismiss
121
+ - **Send button (→)** — sends message to the mentioned (or default) agent
122
+ - **File attachment button (📎)** — opens file picker to upload files to the agent
123
+ - **Voice record button (🎤)** — start/stop voice recording for transcription
124
+ - **Voice mode button (🔇/🔊)** — toggles reading agent responses aloud via text-to-speech
125
+
126
+ ### Streaming Controls (During Active Response)
127
+ While an agent is streaming a response:
128
+ - **Stop button (■)** — red square button, appears next to Send. Interrupts the agent's response immediately.
129
+ - Keyboard shortcut: `Escape`
130
+ - **Send button becomes "Queue"** — the send button changes to amber "Queue" mode
131
+ - Type a follow-up message and click Queue (or press Enter) to queue it
132
+ - Queued messages auto-send when the current response completes
133
+ - **Message Queue** — appears below the input when messages are queued
134
+ - Each queued message shows: position number, message text preview
135
+ - **Edit button (✎)** — edit the queued message text
136
+ - **Cancel button (✕)** — remove the queued message
137
+
138
+ | Action | API | MCP |
139
+ |--------|-----|-----|
140
+ | Stop / interrupt streaming | `POST /api/chat/jobs/:jobId/stop` | `stop_chat_job` |
141
+ | | | **Params:** `jobId` |
142
+ | Queue sends via normal chat | `POST /api/chat/:agentId` or `/stream` | `send_message` / `start_stream` |
143
+ | | Queue is client-side; each queued message sends normally when prior response completes | |
144
+
145
+ | Action | API | MCP |
146
+ |--------|-----|-----|
147
+ | Send message (sync) | `POST /api/chat/:agentId` | `send_message` |
148
+ | | **Body:** `{ text, accountOverride? }` | **Params:** `agentId`, `text`, `accountOverride?` |
149
+ | Start streaming chat | `POST /api/chat/:agentId/stream` | `start_stream` |
150
+ | | **Body:** `{ text, accountOverride? }` | **Params:** `agentId`, `text`, `accountOverride?` |
151
+ | Poll stream output | `GET /api/chat/jobs/:jobId/raw?after=N` | `get_chat_job_raw` |
152
+ | | **Query:** `after` (line offset) | **Params:** `jobId`, `after?` |
153
+ | Stop streaming job | `POST /api/chat/jobs/:jobId/stop` | `stop_chat_job` |
154
+ | | | **Params:** `jobId` |
155
+ | Delegate to agent | `POST /api/delegate` | `delegate_message` |
156
+ | | **Body:** `{ agentId, text }` | **Params:** `agentId`, `text` |
157
+ | Upload file | `POST /api/upload/:agentId/json` | `upload_file` |
158
+ | | **Body:** `{ fileName, base64Content, mode? }` | **Params:** `agentId`, `fileName`, `base64Content`, `mode?` |
159
+
160
+ ### Raw Logs Panel (Bottom Drawer)
161
+ - **Toggle button (⌘)** — shows/hides raw Claude output
162
+ - **Clear button** — clears all log entries
163
+ - **Close button** — hides the panel
164
+ - **Log content area** — live streaming output from the agent's Claude process
165
+
166
+ ---
167
+
168
+ # 2. Agents (Org)
169
+
170
+ **URL:** `/org`
171
+ **Purpose:** Manage all agents — create, configure, organize, and monitor.
172
+
173
+ ## 2.1 Agent List
174
+
175
+ ### Sub-Navigation Tabs
176
+ - **Teams** (`/org`) — agents view (default)
177
+ - **Tasks** (`/tasks`) — cross-agent task panel
178
+ - **Automations** (`/automations`) — goals and cron jobs across all agents
179
+
180
+ ### View Controls
181
+
182
+ | Control | Description |
183
+ |---------|-------------|
184
+ | **Grid view (◊)** | 300px agent cards in a wrapping grid |
185
+ | **Compact view (▬▬)** | Condensed cards with 3-dot menu |
186
+ | **List view (≡)** | Sortable table with columns: Name, Alias, Org, Dept, Title, Class, Status, Last Active, Msgs |
187
+ | **Search input** | Filter agents by name, alias, or description |
188
+ | **Org select dropdown** | Filter by organization |
189
+ | **Class filter dropdown** | Checkboxes: Standard, Builder, Platform |
190
+ | **Hide names button (👁 Hide)** | Blurs all agent names globally for presentations |
191
+ | **Per-org hide button (👁)** | Each organization section has its own hide/show toggle to blur names within that org only |
192
+ | **Select mode button (☑ Select)** | Enables multi-select checkboxes on each agent |
193
+ | **+ New Agent button** | Opens agent creation modal |
194
+
195
+ ### Agent Cards (All Views)
196
+ Each agent shows:
197
+ - **Avatar** — 2-letter initials in colored circle
198
+ - **Heartbeat indicator (❤)** — pulsing animation if heartbeat is active
199
+ - **Automation indicator (⟳)** — spinning icon if goals/crons are active
200
+ - **Name** — agent display name
201
+ - **Subtitle** — org, department, title
202
+ - **Status dot** — green for active
203
+ - **Hover actions:**
204
+ - **Chat button** → opens `/ui#agentId`
205
+ - **Dashboard button** → opens `/agent-dashboard?id=agentId`
206
+ - **Config button** → opens edit modal
207
+
208
+ ### List View (Table)
209
+ - **Sortable columns** — click any header to sort ascending/descending
210
+ - **Row click** → opens config modal for that agent
211
+
212
+ ### Multi-Select Mode
213
+ When activated via Select button:
214
+ - **Checkboxes** appear on each agent
215
+ - **Select All / Deselect All** buttons
216
+ - **Delete Selected** — bulk delete with confirmation
217
+ - **Cancel** — exits multi-select mode
218
+
219
+ | Action | API | MCP |
220
+ |--------|-----|-----|
221
+ | List all agents | `GET /api/agents` | `list_agents` |
222
+ | | **Query:** `?org=orgName` | **Params:** `org?` (string) |
223
+ | Get agent details | `GET /api/agents/:id` | `get_agent` |
224
+ | | | **Params:** `agentId` |
225
+ | Delete agent | `DELETE /api/agents/:id` | `delete_agent` |
226
+ | | **Query:** `?confirmAlias=alias` | **Params:** `agentId`, `confirmAlias` |
227
+ | Get agent registry | `GET /api/agent-registry` | `get_agent_registry` |
228
+ | | *(no params)* | *(no params)* |
229
+
230
+ ## 2.2 Agent Creation / Edit Modal
231
+
232
+ Opened by **+ New Agent** button or clicking an agent's Config button. Has 6 standard tabs, plus 4 additional tabs when editing a Gym-class agent (10 total).
233
+
234
+ ### Tab 1: Overview
235
+
236
+ | Field | Description |
237
+ |-------|-------------|
238
+ | **Agent ID** | Lowercase, hyphens only (e.g., `my-agent`). Auto-generates alias on input. |
239
+ | **Mention Alias** | @-prefixed (e.g., `@myagent`). Auto-generated from ID but editable. |
240
+ | **Name** | Display name shown in UI and chat. |
241
+ | **Description** | Short description of the agent's purpose. |
242
+ | **Instructions (CLAUDE.md)** | System prompt written to the agent's CLAUDE.md file. Multi-line textarea. |
243
+ | **Agent Class** | Dropdown: Standard, Builder, Platform, Gym. |
244
+ | **Executor** | Dropdown: Platform Default, Claude, Ollama models, or cloud providers — OpenAI, Grok (xAI), Gemini, Groq, Together, Mistral (when multi-model is enabled). Format: `provider:model` (e.g., `openai:gpt-4o`, `gemini:gemini-2.5-flash`, `grok:grok-3`). Overrides the service-level default executor for this agent. |
245
+
246
+ #### Organization Entries
247
+ Each agent can belong to multiple organizations. Per entry:
248
+ - **Organization** — org name
249
+ - **Function/Department** — department within the org
250
+ - **Title** — agent's role title
251
+ - **Reports To** — optional, who this agent reports to
252
+ - **Remove button (×)** — removes this org entry
253
+ - **+ Add Org Entry** — adds another org association
254
+
255
+ #### Heartbeat Section (Collapsible)
256
+ - **Enabled toggle** — pill switch to enable/disable heartbeat
257
+ - **Instructions** — what the agent should check during heartbeat
258
+ - **Frequency dropdown** — Manual, Daily, Weekdays, Weekly, Every N mins
259
+ - **Day select** — for weekly (Mon-Sun)
260
+ - **Time inputs** — hour (0-23), minute (0-59), AM/PM
261
+ - **Cron preview** — read-only display of the generated cron expression
262
+
263
+ #### Wiki Learning Section (Collapsible)
264
+ - **Wiki Learning toggle** — enable/disable Wiki Learning (`wiki` field)
265
+ - When enabled, the agent captures facts and corrections from conversations into `learned.md`
266
+ - **Wiki Sync toggle** — enable/disable scheduled Wiki Sync (`wikiSync.enabled`)
267
+ - Automatically merges `learned.md` into `context.md` on a schedule
268
+ - **Schedule** — cron expression for sync frequency (`wikiSync.schedule`, default: `0 0 * * *`)
269
+
270
+ | Action | API | MCP |
271
+ |--------|-----|-----|
272
+ | Create agent | `POST /api/agents` | `create_agent` |
273
+ | | **Body:** `{ agentId, alias, name, description, instructions, agentClass, executor, orgs[], heartbeat{}, wiki, wikiSync{}, ... }` | **Params:** `agentId`, `alias`, `name`, `description`, `instructions`, `agentClass`, `executor`, `orgs`, `heartbeat`, `workspace`, `allowedTools`, `mcps`, `routes`, `persistent`, `streaming`, `advancedMemory`, `autonomousCapable`, `autoCommit`, `timeout`, `claudeAccount`, `wiki`, `wikiSync` |
274
+ | Update agent | `PUT /api/agents/:id` | `update_agent` |
275
+ | | **Body:** same fields as create | **Params:** `agentId`, plus any fields to update |
276
+ | Get agent instructions | `GET /api/agents/:id/instructions` | `get_agent_instructions` |
277
+ | | | **Params:** `agentId` |
278
+
279
+ ### Tab 2: Skills
280
+
281
+ Controls which tools the agent can use.
282
+
283
+ - **Default tool pills** (toggle on/off):
284
+ - Read, Edit, Write, Glob, Grep, Bash, WebFetch, WebSearch
285
+ - Each is a clickable pill — checked (✓) = enabled
286
+ - **Custom skills** — additional skills from library shown as toggle pills
287
+ - **+ Add New Skill button** — opens skill creation flow
288
+
289
+ | Action | API | MCP |
290
+ |--------|-----|-----|
291
+ | Get agent skills | `GET /api/agents/:agentId/skills` | `get_agent_skills` |
292
+ | | | **Params:** `agentId` |
293
+ | Get org skills | `GET /api/skills/org/:orgName` | `get_org_skills` |
294
+ | | | **Params:** `orgName` |
295
+ | Create skill | `POST /api/skills/create` | `create_skill` |
296
+ | | **Body:** `{ id, name, description, content, scope, orgName?, agentId? }` | **Params:** `id`, `name`, `description`, `content`, `scope`, `orgName?`, `agentId?` |
297
+ | Assign skill to agent | `POST /api/marketplace/assign` | `assign_to_agent` |
298
+ | | **Body:** `{ agentId, itemId, type: "skill" }` | **Params:** `agentId`, `itemId`, `type` |
299
+
300
+ ### Tab 3: MCPs
301
+
302
+ Manage MCP server connections for the agent.
303
+
304
+ - **MCP toggle pills** — enable/disable each MCP from the registry
305
+ - **MCP accordion sections** (per MCP, expandable):
306
+ - **API Key cards** — key name, status badge (OK/Missing), secret input, save/disconnect buttons
307
+ - **OAuth connections** — account name, status, remove button
308
+ - **+ Add Account button** — opens MCP auth modal
309
+ - **Unconfigured MCPs section** — MCPs not yet connected
310
+
311
+ #### MCP Auth Modal
312
+ - **Auth form** — dynamic fields based on MCP requirements (API key input, OAuth link, etc.)
313
+ - **Cancel / Save buttons**
314
+
315
+ #### Connecting Google OAuth MCPs (Sheets, Gmail, Calendar, Drive, Docs)
316
+
317
+ Several MCPs use Google OAuth instead of an API key. These include:
318
+
319
+ | MCP | What it enables |
320
+ |-----|----------------|
321
+ | `googlesheets` | Read, write, and manage Google Sheets spreadsheets |
322
+ | `gmail` | Read, search, send Gmail messages |
323
+ | `googlecalendar` | List, create, and manage calendar events |
324
+ | `googledrive` | Browse, read, and manage Drive files |
325
+ | `googledocs` | Read and edit Google Docs documents |
326
+
327
+ **To connect a Google OAuth MCP to an agent:**
328
+ 1. Go to **Org page** → click the agent → **MCPs tab**
329
+ 2. Find the MCP (e.g. Google Sheets) in the accordion and click **+ Add Account**
330
+ 3. In the auth modal, click **Authorize** — this opens a Google sign-in flow
331
+ 4. Sign in with the Google account you want to connect
332
+ 5. The refresh token is stored automatically under a connection name like `googlesheets-agenticledger`
333
+
334
+ **Multiple accounts:** You can add multiple Google accounts to the same MCP (e.g. `agenticledger`, `bst`, `financeiscooked`) by repeating the flow with a different account. Each becomes a separate named connection.
335
+
336
+ **Via MCP tool:** Use `create_mcp_connection` with `baseMcp`, `label`, `envVar` (e.g. `GOOGLESHEETS_AGENTICLEDGER`), and `value` (refresh token). The token must be issued by the agenticledger.ai OAuth client — tokens from other Google Cloud projects will fail with `invalid_grant`.
337
+
338
+ | Action | API | MCP |
339
+ |--------|-----|-----|
340
+ | List registered MCPs | `GET /api/mcps` | `list_mcps` |
341
+ | | | *(no params)* |
342
+ | Get MCP catalog | `GET /api/mcp-catalog` | `get_mcp_catalog` |
343
+ | | | *(no params)* |
344
+ | List MCP keys for agent | `GET /api/agents/:id/mcp-keys` | `list_mcp_keys` |
345
+ | | | **Params:** `agentId` |
346
+ | Save MCP key | `POST /api/agents/:id/mcp-keys` | `save_mcp_key` |
347
+ | | **Body:** `{ mcpName, envVar, value }` | **Params:** `agentId`, `mcpName`, `envVar`, `value` |
348
+ | Delete MCP key | `DELETE /api/agents/:id/mcp-keys/:mcpName` | `delete_mcp_key` |
349
+ | | | **Params:** `agentId`, `mcpName` |
350
+ | List MCP connections | `GET /api/agents/:id/mcp-connections` | `list_mcp_connections` |
351
+ | | | **Params:** `agentId` |
352
+ | Create MCP connection | `POST /api/agents/:id/mcp-connections` | `create_mcp_connection` |
353
+ | | **Body:** `{ mcpName, instanceName, config }` | **Params:** `agentId`, `body` (object with mcpName, instanceName, config) |
354
+ | Delete MCP connection | `DELETE /api/agents/:id/mcp-connections/:instanceName` | `delete_mcp_connection` |
355
+ | | | **Params:** `agentId`, `instanceName` |
356
+
357
+ ### Tab 4: Schedules (Cron Jobs)
358
+
359
+ Trigger automated messages on a schedule.
360
+
361
+ - **+ Add Schedule button** — adds a new schedule entry
362
+ - **Per schedule entry:**
363
+ - **Frequency dropdown** — Manual, Daily, Weekly, Every N minutes
364
+ - **Day checkboxes** (if weekly) — Mon through Sun
365
+ - **Time inputs** — hours, minutes
366
+ - **Message textarea** — the message to send when triggered
367
+ - **Channel select** — which channel to send to
368
+ - **Chat ID input** — target chat/conversation
369
+ - **Cron preview** — human-readable expression
370
+ - **Trigger Now button** — manually fires the schedule immediately
371
+ - **Pause/Resume button** — toggles cron on/off
372
+ - **Remove button (×)** — deletes the schedule
373
+
374
+ | Action | API | MCP |
375
+ |--------|-----|-----|
376
+ | Create cron | `POST /api/agents/:id/cron` | `create_cron` |
377
+ | | **Body:** `{ schedule, message, channel?, chatId?, enabled? }` | **Params:** `agentId`, `body` (object with schedule, message, channel, chatId, enabled) |
378
+ | Toggle cron on/off | `POST /api/agents/:id/cron/:index/toggle` | `toggle_cron` |
379
+ | | | **Params:** `agentId`, `index` (number) |
380
+ | Trigger cron manually | `POST /api/agents/:id/cron/:index/trigger` | `trigger_cron` |
381
+ | | | **Params:** `agentId`, `index` (number) |
382
+ | Get cron run history | `GET /api/agents/:id/cron/:index/history` | `get_cron_history` |
383
+ | | | **Params:** `agentId`, `index` (number) |
384
+ | Delete cron | `DELETE /api/agents/:id/cron/:index` | `delete_cron` |
385
+ | | | **Params:** `agentId`, `index` (number) |
386
+
387
+ ### Tab 5: Goals
388
+
389
+ Autonomous task tracking with reporting.
390
+
391
+ - **+ Add Goal button** — adds a new goal entry
392
+ - **Per goal entry:**
393
+ - **Goal ID** — unique identifier (auto-generated from title if blank)
394
+ - **Goal Name/Title** — what is this goal
395
+ - **Description textarea** — detailed description
396
+ - **Success Metric textarea** — how to measure completion
397
+ - **Reporting channels** — where to send reports
398
+ - Per channel: channel dropdown, chat ID input, remove (×)
399
+ - **+ Add Channel** — adds another report destination
400
+ - **Enabled toggle** — pill switch
401
+ - **Trigger mode dropdown** — Heartbeat (default) or On-demand
402
+ - **Heartbeat settings** (if Heartbeat mode) — frequency, days, time
403
+ - **Budget input** — max daily USD spend
404
+ - **Trigger Now button** — manually executes goal
405
+ - **Pause/Resume button** — toggles goal on/off
406
+ - **Remove button (×)** — deletes the goal
407
+
408
+ | Action | API | MCP |
409
+ |--------|-----|-----|
410
+ | Create goal | `POST /api/agents/:id/goals` | `create_goal` |
411
+ | | **Body:** `{ goalId, name, description, successMetric, reportTargets[], triggerMode, schedule?, budget?, enabled? }` | **Params:** `agentId`, `body` (object) |
412
+ | Toggle goal on/off | `POST /api/agents/:id/goals/:goalId/toggle` | `toggle_goal` |
413
+ | | | **Params:** `agentId`, `goalId` |
414
+ | Trigger goal manually | `POST /api/agents/:id/goals/:goalId/trigger` | `trigger_goal` |
415
+ | | | **Params:** `agentId`, `goalId` |
416
+ | Get goal run history | `GET /api/agents/:id/goals/:goalId/history` | `get_goal_history` |
417
+ | | | **Params:** `agentId`, `goalId` |
418
+ | Delete goal | `DELETE /api/agents/:id/goals/:goalId` | `delete_goal` |
419
+ | | | **Params:** `agentId`, `goalId` |
420
+ | List all automations | `GET /api/automations` | `list_automations` |
421
+ | | *(no params)* | *(no params)* |
422
+
423
+ ### Tab 6: Config
424
+
425
+ Advanced agent configuration.
426
+
427
+ #### Behavior Toggles (Pill Switches)
428
+ | Toggle | Description |
429
+ |--------|-------------|
430
+ | **Persistent Session** | Keep conversation context between messages (default: on) |
431
+ | **Streaming** | Stream responses in real-time (default: off) |
432
+ | **Advanced Memory** | Enable long-term semantic recall with daily journals + vector search (default: on) |
433
+ | **Autonomous Capable** | Allow agent to act on goals autonomously (default: on) |
434
+ | **Auto Commit** | Auto-commit code changes (default: off) |
435
+
436
+ #### Other Fields
437
+ - **Workspace** — working directory for the agent (default: `~`)
438
+ - **Agent Home** — computed path (read-only)
439
+ - **Timeout** — max execution time in seconds (default: 14400)
440
+ - **Claude Account** — which Claude account to use (dropdown of configured accounts)
441
+
442
+ #### Routes
443
+ Which channels can invoke this agent.
444
+ - Per route: channel dropdown, chat/channel ID, require mention checkbox, remove (×)
445
+ - **+ Add Route** — adds a new channel route
446
+
447
+ ### Gym-Specific Tabs (Agent Class = Gym Only)
448
+
449
+ When editing an agent with **Agent Class: Gym**, four additional tabs appear after Config. These tabs are hidden for all other agent classes.
450
+
451
+ #### Trainer Tab
452
+
453
+ Switch the active coaching personality. Changes how the coach communicates during training sessions without affecting progress or profile data.
454
+
455
+ | Element | Description |
456
+ |---------|-------------|
457
+ | **Trainer grid** | 5 cards in a responsive grid, each showing avatar (initials), name, coaching style |
458
+ | **Active indicator** | Selected trainer has a colored border, tinted background, and "Active" badge |
459
+ | **Click to switch** | Clicking a card immediately updates the learner profile via `PUT /api/gym/learner-profile` with `{ selectedTrainer }` |
460
+
461
+ Trainers: Alex (Collaborative, cyan), Jordan (Direct, orange), Morgan (Thoughtful, purple), Riley (Challenging, red), Sam (Patient, green).
462
+
463
+ #### Learner Tab
464
+
465
+ View and edit the learner profile built during onboarding. The coach updates this profile as you train.
466
+
467
+ | Field | Description |
468
+ |-------|-------------|
469
+ | **Identity** | JSON or text — professional background, role, experience level |
470
+ | **Goals** | Newline-separated list of learning goals |
471
+ | **Current Streak** | Read-only counter of consecutive active days |
472
+ | **Longest Streak** | Read-only all-time streak record |
473
+ | **Strengths** | Pill badges of identified strengths (read-only, set by coach) |
474
+ | **Struggles** | Pill badges of identified struggles (read-only, set by coach) |
475
+ | **Save Profile** | Pushes identity + goals changes via `PUT /api/gym/learner-profile` |
476
+
477
+ #### Dimensions Tab
478
+
479
+ Current scores across the 5 AI skill dimensions with trend and history.
480
+
481
+ | Element | Description |
482
+ |---------|-------------|
483
+ | **Dimension bars** | 5 color-coded progress bars (0–10 scale) with score and trend arrow |
484
+ | **Trend indicators** | Up arrow (improving, green), down arrow (declining, red), dot (stable, gray) |
485
+ | **History table** | Last 5 dimension snapshots showing date and scores per dimension |
486
+
487
+ Data sources: `GET /api/gym/learner-profile` (current scores), `GET /api/gym/dimensions/history` (snapshots).
488
+
489
+ #### Programs Tab
490
+
491
+ All training programs with enrollment status and completion progress.
492
+
493
+ | Element | Description |
494
+ |---------|-------------|
495
+ | **Program cards** | Title, difficulty badge (color-coded), estimated time, target dimensions |
496
+ | **Progress bar** | Shown for started programs — percentage complete with step count |
497
+ | **Current module** | Shows which module the learner is working on |
498
+ | **Description** | Truncated program description (120 chars) |
499
+
500
+ Data sources: `GET /api/gym/programs` (program list), `GET /api/gym/progress` (completion state).
501
+
502
+ ### Delete Agent
503
+
504
+ - **Delete Agent button** (red, bottom-left of modal) — only visible when editing
505
+ - **Confirmation overlay:**
506
+ - Warning: "This action cannot be undone"
507
+ - Shows agent alias
508
+ - **Confirmation input** — must type the agent's alias exactly
509
+ - **Cancel button** — closes without deleting
510
+ - **Delete Forever button** — disabled until alias matches, then executes delete
511
+
512
+ | Action | API | MCP |
513
+ |--------|-----|-----|
514
+ | Delete agent | `DELETE /api/agents/:id?confirmAlias=alias` | `delete_agent` |
515
+ | | **Query:** `confirmAlias` (agent alias) | **Params:** `agentId`, `confirmAlias` |
516
+
517
+ ### Save Agent
518
+
519
+ - **Save button** — "Create Agent" (new) or "Update Agent" (editing)
520
+ - Collects all fields from all tabs (6 standard + 4 gym-specific if applicable)
521
+ - Validates required fields (agentId, alias, name)
522
+ - Creates agent directory, writes CLAUDE.md, updates config.json
523
+
524
+ ## 2.3 Agent Dashboard
525
+
526
+ **URL:** `/agent-dashboard?id=agentId`
527
+ **Purpose:** At-a-glance view of a single agent — tasks, activity, cost, heartbeat.
528
+
529
+ ### Agent Header
530
+ - **Avatar** — 2-letter initials
531
+ - **Agent name** — large display
532
+ - **Status dot** — green for active
533
+ - **Alias** — @mention format
534
+ - **Description**
535
+ - **Action buttons:**
536
+ - **← Org** — back to `/org`
537
+ - **Chat** — opens `/ui#agentId`
538
+ - **♥ Heartbeat** — trigger manual heartbeat
539
+ - Shows "Running..." while executing, "Triggered!" on success
540
+
541
+ | Action | API | MCP |
542
+ |--------|-----|-----|
543
+ | Trigger heartbeat | `POST /api/agents/:id/heartbeat` | `trigger_heartbeat` |
544
+ | | **Body:** `{ triggeredBy? }` | **Params:** `agentId`, `triggeredBy?` |
545
+
546
+ ### Tasks Section
547
+ - **Section title** with count badge
548
+ - **Per task card:**
549
+ - Status dot (color-coded by status)
550
+ - Task title
551
+ - Priority badge (High/Medium/Low with color)
552
+ - Status label, time ago, assigned by, source agent
553
+ - **Start button** — moves task to in_progress (if proposed/approved)
554
+ - **Done button** — marks task complete
555
+ - **Cross-agent tasks** — tasks from other agents shown separately
556
+ - **Empty state:** "No tasks assigned"
557
+
558
+ | Action | API | MCP |
559
+ |--------|-----|-----|
560
+ | List agent tasks | `GET /api/agents/:id/tasks` | `list_tasks` |
561
+ | | | **Params:** `agentId` |
562
+ | Create task | `POST /api/agents/:id/tasks` | `create_task` |
563
+ | | **Body:** `{ title, description?, priority?, status?, assignedBy?, project? }` | **Params:** `agentId`, `body` (object) |
564
+ | Update task (status change) | `PUT /api/agents/:id/tasks/:taskId` | `update_task` |
565
+ | | **Body:** `{ status?, title?, description?, priority? }` | **Params:** `agentId`, `taskId`, `body` (object) |
566
+ | Delete task | `DELETE /api/agents/:id/tasks/:taskId` | `delete_task` |
567
+ | | | **Params:** `agentId`, `taskId` |
568
+ | Get all tasks (cross-agent) | `GET /api/tasks/all` | `get_all_tasks` |
569
+ | | | *(no params)* |
570
+ | Get task stats | `GET /api/agents/:id/tasks/stats` | `get_task_stats` |
571
+ | | | **Params:** `agentId` |
572
+ | Create project | `POST /api/agents/:id/projects` | `create_project` |
573
+ | | **Body:** `{ name }` | **Params:** `agentId`, `name` |
574
+
575
+ ### Recent Activity Section
576
+ - **Open Chat link** — links to `/ui#agentId`
577
+ - **Activity items** — recent messages with time, direction (IN/OUT), message preview (120 chars)
578
+ - **Empty state:** "No recent activity"
579
+
580
+ | Action | API | MCP |
581
+ |--------|-----|-----|
582
+ | Get activity feed | `GET /api/activity` | `get_activity` |
583
+ | | **Query:** `?limit=N` | **Params:** `limit?` (number) |
584
+ | Get agent logs | `GET /api/agents/:agentId/logs` | `get_agent_logs` |
585
+ | | **Query:** `?limit=N&offset=N&search=text` | **Params:** `agentId`, `limit?`, `offset?`, `search?` |
586
+
587
+ ### Cost Section
588
+ - **3-column stat grid:**
589
+ - Total Cost ($X.XXXX)
590
+ - Messages (count)
591
+ - Average Cost per message ($X.XXXX)
592
+ - **Empty state:** "No cost data"
593
+
594
+ | Action | API | MCP |
595
+ |--------|-----|-----|
596
+ | Get agent cost | `GET /api/agents/:agentId/cost` | `get_agent_cost` |
597
+ | | | **Params:** `agentId` |
598
+ | Get all costs | `GET /api/cost/all` | `get_all_costs` |
599
+ | | | *(no params)* |
600
+
601
+ ### Heartbeat History Section
602
+ - **Count badge** — number of heartbeats
603
+ - **Per heartbeat item** (up to 10 most recent):
604
+ - Status dot — green (success), red (error), amber (timeout)
605
+ - Time ago
606
+ - Duration (ms or s)
607
+ - Summary (first 100 chars)
608
+ - Trigger badge — "manual", "schedule", etc.
609
+ - **Empty state:** "No heartbeats yet. Trigger one above."
610
+
611
+ | Action | API | MCP |
612
+ |--------|-----|-----|
613
+ | Get heartbeat history | `GET /api/agents/:id/heartbeat-history` | `get_heartbeat_history` |
614
+ | | **Query:** `?limit=N` | **Params:** `agentId`, `limit?` |
615
+
616
+ ### Wiki Learning
617
+
618
+ Wiki Learning lets agents automatically capture facts and corrections from conversations into a `learned.md` file. This knowledge accumulates over time and can be merged into the agent's main knowledge base (`context.md`).
619
+
620
+ **How it works:**
621
+ 1. Enable "Wiki Learning" on any agent's config page
622
+ 2. The agent will evaluate each conversation and save new facts to `learned.md` in its memory directory
623
+ 3. You can manually ask the agent to "update context from learned" to merge verified facts into `context.md`
624
+
625
+ **Wiki Sync (scheduled):**
626
+ - Optionally enable Wiki Sync to automatically merge learned facts on a schedule
627
+ - Configure via the Schedule tab on the agent config page (same UI as Heartbeat)
628
+ - Default schedule: daily at midnight (`0 0 * * *`)
629
+ - The sync reviews `learned.md`, cross-checks against `context.md`, merges verified facts, and flags contradictions
630
+
631
+ | Action | API | MCP |
632
+ |--------|-----|-----|
633
+ | Trigger wiki sync | `POST /api/agents/:id/wiki-sync` | `trigger_wiki_sync` |
634
+ | | | **Params:** `agentId` |
635
+ | Get wiki sync history | `GET /api/agents/:id/wiki-sync-history` | `get_wiki_sync_history` |
636
+ | | **Query:** `?limit=N` | **Params:** `agentId`, `limit?` |
637
+
638
+ ---
639
+
640
+ # 3. Chat
641
+
642
+ **URL:** `/ui` or `/ui#agentId`
643
+ **Purpose:** Full-screen chat interface with any agent.
644
+
645
+ The chat interface on `/ui` is functionally identical to the Home chat view (see [Section 1.2](#12-chat-view)) with these differences:
646
+
647
+ - **URL hash routing** — `/ui#agentId` opens directly to a specific agent
648
+ - **No landing view** — goes straight to chat
649
+ - **Agent drawer** — same sidebar with agent list
650
+
651
+ All chat actions, APIs, and MCP tools are identical to Home (see [Section 1.2](#12-chat-view)).
652
+
653
+ ### Session Management
654
+
655
+ | Action | API | MCP |
656
+ |--------|-----|-----|
657
+ | List sessions (low-level) | `GET /api/agents/:agentId/sessions` | `list_sessions` |
658
+ | | | **Params:** `agentId` |
659
+ | Reset session | `POST /api/agents/:agentId/sessions/reset` | `reset_session` |
660
+ | | **Body:** `{ senderId? }` | **Params:** `agentId`, `senderId?` |
661
+ | Delete session | `DELETE /api/agents/:agentId/sessions/:senderId` | `delete_session` |
662
+ | | | **Params:** `agentId`, `senderId` |
663
+
664
+ ### Named Session Tabs (server-side threads)
665
+
666
+ Each agent supports named, persistent session threads visible in the Web UI tab bar. Sessions survive browser resets and are stored in `agents/<agentId>/memory/session-tabs.json`. Conversation history is replayed from `conversation_log.jsonl` by `tabId`.
667
+
668
+ | Action | API | MCP |
669
+ |--------|-----|-----|
670
+ | Create/upsert tab | `POST /api/agents/:agentId/session-tabs` | `create_session_tab` |
671
+ | | **Body:** `{ tabId, label, targetAgentId? }` | **Params:** `agentId`, `tabId`, `label`; `targetAgentId` (optional) |
672
+ | List all session tabs | `GET /api/agents/:agentId/session-tabs` | `list_session_tabs` |
673
+ | | Returns tabs sorted newest-first with `lastMessageAt` + `lastPreview` | **Params:** `agentId` |
674
+ | Get conversation history | `GET /api/agents/:agentId/session-tabs/:tabId/history` | `get_session_tab_history` |
675
+ | | Returns `{ messages: [{role, text, time}] }` filtered by tabId | **Params:** `agentId`, `tabId` |
676
+ | Rename tab | `PUT /api/agents/:agentId/session-tabs/:tabId` | `rename_session_tab` |
677
+ | | **Body:** `{ label }` | **Params:** `agentId`, `tabId`, `label` |
678
+ | Delete tab (permanent) | `DELETE /api/agents/:agentId/session-tabs/:tabId` | `delete_session_tab` |
679
+ | | Also clears Claude session file | **Params:** `agentId`, `tabId` |
680
+
681
+ **Note:** `senderId` in messages sent from the Web UI is the `tabId`. This is what links JSONL log entries to a specific named thread. For agents to maintain separate memory per tab, set `persistent: true` and `perSenderSessions: true` in the agent config.
682
+
683
+ **`targetAgentId` — cross-agent tab routing:** When a tab is created with `targetAgentId`, all messages sent in that tab are routed to the target agent instead of the host agent. This lets hub (or any agent) create a tab that talks directly to a specialist agent (e.g. `agentcreator`, `skillcreator`) so the sub-agent accumulates its own conversation history and memory. The tab still appears on the host agent's chat page — users don't leave the page, they just switch tabs.
684
+
685
+ ### Model Override (not visible in UI, API/MCP only)
686
+
687
+ | Action | API | MCP |
688
+ |--------|-----|-----|
689
+ | Get current model | `GET /api/agents/:agentId/model` | `get_model` |
690
+ | | | **Params:** `agentId` |
691
+ | Set model override | `PUT /api/agents/:agentId/model` | `set_model` |
692
+ | | **Body:** `{ model }` (opus, sonnet, haiku, or full model ID) | **Params:** `agentId`, `model` |
693
+ | Clear model override | `DELETE /api/agents/:agentId/model` | `clear_model` |
694
+ | | | **Params:** `agentId` |
695
+
696
+ ### Memory (not visible in chat UI, API/MCP only)
697
+
698
+ | Action | API | MCP |
699
+ |--------|-----|-----|
700
+ | Get agent memory | `GET /api/agents/:agentId/memory` | `get_agent_memory` |
701
+ | | **Query:** `?limit=N` | **Params:** `agentId`, `limit?` |
702
+ | Search memory | `POST /api/agents/:agentId/memory/search` | `search_memory` |
703
+ | | **Body:** `{ query }` | **Params:** `agentId`, `query` |
704
+ | Clear memory context | `DELETE /api/agents/:agentId/memory/context` | `clear_memory_context` |
705
+ | | | **Params:** `agentId` |
706
+
707
+ ### Files (not visible in chat UI, API/MCP only)
708
+
709
+ | Action | API | MCP |
710
+ |--------|-----|-----|
711
+ | List agent files | `GET /api/agents/:agentId/files` | `list_agent_files` |
712
+ | | | **Params:** `agentId` |
713
+ | Download file | `GET /api/agents/:agentId/download?path=filePath` | `download_agent_file` |
714
+ | | **Query:** `path` (absolute file path) | **Params:** `agentId`, `path` |
715
+ | Upload file | `POST /api/upload/:agentId/json` | `upload_file` |
716
+ | | **Body:** `{ fileName, base64Content, mode? }` | **Params:** `agentId`, `fileName`, `base64Content`, `mode?` ("temp" or "permanent") |
717
+
718
+ ### Recover Agent (not visible in UI, API/MCP only)
719
+
720
+ | Action | API | MCP |
721
+ |--------|-----|-----|
722
+ | Recover from corruption | `POST /api/agents/:agentId/recover` | `recover_agent` |
723
+ | | **Body:** `{ userText?, response? }` | **Params:** `agentId`, `userText?`, `response?` |
724
+
725
+ ---
726
+
727
+ # 4. Library
728
+
729
+ **URL:** `/library`
730
+ **Purpose:** Manage your personal library of skills, prompts, apps, MCPs, and agents. Install, assign, create, and publish.
731
+
732
+ ## 4.1 Type Tabs
733
+
734
+ Five tabs along the top, each showing a different resource type:
735
+ - **Skills** — reusable instruction sets agents can invoke
736
+ - **Prompts** — reusable prompt templates triggered with a character (e.g., `!`)
737
+ - **Apps** — registered web applications
738
+ - **MCPs** — Model Context Protocol servers
739
+ - **Agents** — agent configurations
740
+
741
+ ## 4.2 Search & Filters
742
+
743
+ - **Search input** — real-time filtering by name, description, or tags
744
+ - **Search clear button (×)** — appears when search has content
745
+ - **Category pills** — dynamic filter buttons:
746
+ - **"all"** — show everything
747
+ - **Per-category pills** — auto-generated from item categories
748
+ - **"★ Platform Defaults" pill** — (skills/prompts/MCPs only) toggle to show only platform defaults
749
+
750
+ Each tab loads its data from the registry on mount:
751
+
752
+ | Action | API | MCP |
753
+ |--------|-----|-----|
754
+ | Load Skills/Prompts/Agents/MCPs tab | `GET /api/marketplace/:type` | `browse_registry` |
755
+ | | **URL param:** `type` (skills, prompts, agents, mcps) | **Params:** `type` |
756
+ | Load Apps tab | `GET /api/apps` | `list_apps` |
757
+ | | | *(no params)* |
758
+ | Load MCPs tab (registered servers) | `GET /api/mcps` | `list_mcps` |
759
+ | | | *(no params)* |
760
+ | Load agents (for assign modal) | `GET /api/agents` | `list_agents` |
761
+ | | | *(no params)* |
762
+
763
+ ## 4.3 Personal Items Section ("Built by Me")
764
+
765
+ ### Section Header
766
+ - **Item count** in parentheses
767
+ - **⊕ Add [Type] split button** with dropdown menu:
768
+
769
+ | Type | Dropdown Options |
770
+ |------|-----------------|
771
+ | Skills | "Scan" (scan folder), "AI Build" (→ Lab), "Marketplace" (→ Marketplace) |
772
+ | Prompts | "Paste" (inline form), "AI Build" (→ Lab), "Marketplace" (→ Marketplace) |
773
+ | Apps | "Register" (inline form), "AI Build" (→ Lab), "Marketplace" (→ Marketplace) |
774
+ | MCPs | "Add" (inline form), "Marketplace" (→ Marketplace) |
775
+
776
+ ### Inline Creation Panels
777
+
778
+ #### Scan Skills Panel (Skills only)
779
+ - **Directory input** — folder path to scan (default: `~/.claude/commands`)
780
+ - **Scan button** — scans for `.md` skill files
781
+ - **Results** — checkboxes for each found skill with name and description
782
+ - **Import button** — imports selected skills
783
+
784
+ | Action | API | MCP |
785
+ |--------|-----|-----|
786
+ | Scan for skills | `GET /api/marketplace/scan-skills` | `scan_skills` |
787
+ | | **Query:** `?dir=path` | **Params:** `dir?` (string) |
788
+ | Import scanned skills | `POST /api/marketplace/import-skills` | `import_skills` |
789
+ | | **Body:** `{ agentId, skills[] }` | **Params:** `agentId`, `skills` (string array) |
790
+ | Create skill (programmatic) | `POST /api/skills/create` | `create_skill` |
791
+ | | **Body:** `{ id, name, description, content, scope, orgName?, agentId? }` | **Params:** `id`, `name`, `description`, `content`, `scope` ("global"\|"org"\|"agent"), `orgName?`, `agentId?` |
792
+
793
+ > Note: The "AI Build" button redirects to Lab (`/lab?build=skill`) where a creator agent builds the skill conversationally. The `create_skill` API/MCP can also create skills directly without the Lab.
794
+
795
+ #### Create Prompt Panel (Prompts only)
796
+ - **Name input** — prompt display name
797
+ - **ID input** — auto-generated from name
798
+ - **Description input**
799
+ - **Content textarea** — the prompt template text
800
+ - **Save prompt button**
801
+ - **Cancel button**
802
+
803
+ | Action | API | MCP |
804
+ |--------|-----|-----|
805
+ | Create prompt | `POST /api/marketplace/create-prompt` | `create_prompt` |
806
+ | | **Body:** `{ id, name, content }` | **Params:** `id`, `name`, `content` |
807
+
808
+ #### Add MCP Panel (MCPs only)
809
+ - **Name input**
810
+ - **ID input** — auto-generated from name
811
+ - **Description input**
812
+ - **Type toggle** — HTTP or stdio buttons
813
+ - **HTTP fields:** URL input
814
+ - **stdio fields:** Command input, Args input (space-separated)
815
+ - **Add MCP button**
816
+ - **Cancel button**
817
+
818
+ | Action | API | MCP |
819
+ |--------|-----|-----|
820
+ | Add MCP to registry | `POST /api/marketplace/add-mcp` | `add_mcp_to_registry` |
821
+ | | **Body:** `{ name, id, description, type, url?, command?, args? }` | **Params:** `body` (object) |
822
+
823
+ #### Register App Panel (Apps only)
824
+ - **Name input** (required)
825
+ - **URL input** (required)
826
+ - **Description input**
827
+ - **Category dropdown** — Productivity, Development, Finance, Analytics, Communication, AI/Agents, Other
828
+ - **Status dropdown** — Draft, Live, Maintenance
829
+ - **GitHub Repo input** (optional)
830
+ - **Deploy platform dropdown** — Railway, Vercel, Netlify, Render, Local, Other
831
+ - **Register App button**
832
+ - **Cancel button**
833
+
834
+ | Action | API | MCP |
835
+ |--------|-----|-----|
836
+ | Create app | `POST /api/apps` | `create_app` |
837
+ | | **Body:** `{ name, url, description?, category?, status?, repo?, deploy? }` | **Params:** `body` (object) |
838
+
839
+ ## 4.4 Item Cards
840
+
841
+ Each resource is displayed as a card with consistent elements:
842
+
843
+ ### Card Elements
844
+ - **Name and provider**
845
+ - **Badges:**
846
+ - "✓ verified" — if provider is AgenticLedger/platform
847
+ - "built by me" — if provider is 'me'
848
+ - "community" — if external provider
849
+ - "✓ installed" — if already installed
850
+ - "★ default" — if set as platform default
851
+ - **Description**
852
+ - **Meta tags** — categories and assigned agents (e.g., "→ agent1, agent2, +1")
853
+
854
+ ### Card Actions
855
+
856
+ | Button | Description | When Visible |
857
+ |--------|-------------|-------------|
858
+ | **Install** | Install the item | Not yet installed |
859
+ | **Manage** | Open assign modal | Already installed |
860
+ | **☆ Set Default / ★ Default** | Toggle platform default | Skills, Prompts, MCPs |
861
+ | **↑ Publish ▾** | Publish to SaaS (dropdown) | SaaS connected, Skills/Prompts only |
862
+
863
+ #### Install
864
+
865
+ | Action | API | MCP |
866
+ |--------|-----|-----|
867
+ | Install item | `POST /api/marketplace/install` | `install_registry_item` |
868
+ | | **Body:** `{ id, type }` | **Params:** `id`, `type` |
869
+
870
+ After install, the **Assign Modal** opens (see below).
871
+
872
+ #### Manage / Assign Modal
873
+ - **Title:** "✓ [Item Name] installed" or "Manage — [Item Name]"
874
+ - **Agent checklist** — checkboxes for each configured agent
875
+ - **Missing keys alert** — warns if API keys are needed
876
+ - **Assign selected button** — assigns item to checked agents
877
+
878
+ | Action | API | MCP |
879
+ |--------|-----|-----|
880
+ | Assign to agent | `POST /api/marketplace/assign` | `assign_to_agent` |
881
+ | | **Body:** `{ agentId, itemId, type }` | **Params:** `agentId`, `itemId`, `type` ("skill", "mcp", "agent") |
882
+
883
+ #### Set Platform Default
884
+
885
+ | Action | API | MCP |
886
+ |--------|-----|-----|
887
+ | Set platform default | `POST /api/marketplace/platform-default` | `set_platform_default` |
888
+ | | **Body:** `{ type, id }` | **Params:** `type`, `id` |
889
+
890
+ #### Publish to SaaS (Dropdown)
891
+ - **"Company Library" button** — publish to SaaS library
892
+ - **"Marketplace" button** — publish to SaaS marketplace
893
+
894
+ | Action | API | MCP |
895
+ |--------|-----|-----|
896
+ | Publish to SaaS | `POST /api/saas/publish` | `publish_to_saas` |
897
+ | | **Body:** `{ type, id, destination }` | **Params:** `type` ("skill"\|"prompt"\|"agent"\|"app"), `id`, `destination?` ("library"\|"marketplace") |
898
+
899
+ ### App Cards (Special Layout)
900
+ Apps have a richer card:
901
+ - **Initials icon** — colored 2-letter box
902
+ - **App name and URL**
903
+ - **Status badge** — Draft/Live/Maintenance (colored)
904
+ - **Deploy badge** — Railway/Vercel/Netlify/Render/Local/Other
905
+ - **Description**
906
+ - **Category tag and tags**
907
+ - **Agent developer badge** — shows assigned agent
908
+
909
+ #### App-Specific Actions
910
+
911
+ | Button | Description |
912
+ |--------|-------------|
913
+ | **↗ Launch** | Opens app URL in new tab |
914
+ | **↑ Publish ▾** | Publish to SaaS (dropdown) |
915
+ | **⌂ GitHub** | Opens GitHub repo (if configured) |
916
+ | **✕ Delete** | Deletes app from registry |
917
+ | **Health chip** | Shows health status; click to check |
918
+
919
+ | Action | API | MCP |
920
+ |--------|-----|-----|
921
+ | Launch app | Opens `app.url` in new browser tab | N/A — client-side navigation |
922
+ | GitHub link | Opens `app.repo` in new browser tab | N/A — client-side navigation |
923
+ | Delete app | `DELETE /api/apps/:id` | `delete_app` |
924
+ | | | **Params:** `id` |
925
+ | Update app | `PUT /api/apps/:id` | `update_app` |
926
+ | | **Body:** fields to update | **Params:** `id`, `body` (object) |
927
+ | Check app health | `POST /api/apps/:id/check-health` | `check_app_health` |
928
+ | | | **Params:** `id` |
929
+ | Publish app to SaaS | `POST /api/saas/publish` | `publish_to_saas` |
930
+ | | **Body:** `{ type: "app", id, destination }` | **Params:** `type`, `id`, `destination?` |
931
+
932
+ ## 4.5 Prompt Trigger Config (Prompts Tab Only)
933
+ - **Trigger display** — shows current character (e.g., `!`)
934
+ - **✎ Edit button** — prompts for a new 1-character trigger
935
+
936
+ | Action | API | MCP |
937
+ |--------|-----|-----|
938
+ | Get prompt trigger | `GET /api/marketplace/prompt-trigger` | `get_prompt_trigger` |
939
+ | | | *(no params)* |
940
+ | Set prompt trigger | `POST /api/marketplace/prompt-trigger` | `set_prompt_trigger` |
941
+ | | **Body:** `{ trigger }` (single character) | **Params:** `trigger` |
942
+
943
+ ## 4.6 Import from Folder Modal
944
+ - **Step 1:** folder path input + Browse button (opens directory picker) + Scan Folder button
945
+ - **Directory picker:** breadcrumb path, folder listing, up (..) button, Select/Cancel
946
+ - **Step 2:** preview list of found items with type, name, description + Import All button
947
+
948
+ | Action | API | MCP |
949
+ |--------|-----|-----|
950
+ | Browse directories | `GET /api/browse-dirs` | `browse_dirs` |
951
+ | | **Query:** `?path=dirPath` | **Params:** `path?` |
952
+
953
+ ---
954
+
955
+ # 5. Lab
956
+
957
+ **URL:** `/lab`
958
+ **Purpose:** AI-assisted creation of agents, skills, apps, and prompts. Conversational build experience.
959
+
960
+ ## 5.1 Landing View
961
+
962
+ ### Hero Section
963
+ - **Title:** "Lab"
964
+ - **Subtitle:** "What do you want to build?"
965
+
966
+ ### Build Tiles (4 clickable tiles)
967
+ | Tile | Icon | Description |
968
+ |------|------|-------------|
969
+ | **Agent** | Diamond (cyan) | "A purpose-built AI with memory, tools, and channels" |
970
+ | **Skill** | Lightning (green) | "A reusable instruction set any agent can invoke" |
971
+ | **App** | Grid (amber) | "A deployed web application in your platform" |
972
+ | **Prompt** | Star (purple) | "A reusable prompt template triggered with !" |
973
+
974
+ Clicking a tile opens the **Intake Form** for that type.
975
+
976
+ ### Your Work Section (Artifacts)
977
+ - **Search input** — filter existing artifacts by name
978
+ - **Accordion groups** (click header to expand/collapse, arrow rotates):
979
+ - **Apps** — each row shows: name, category tag, status badge (Draft/Live/Maintenance)
980
+ - **Launch button** — opens the app URL in a new tab
981
+ - **Modify button** — opens the Lab creation view to continue building with the App Creator agent
982
+ - **Deploy button** — triggers deployment flow
983
+ - **Agents** — each row shows: name, agent ID, status badge
984
+ - **Skills** — each row shows: name, category tag, status badge
985
+ - **Prompts** — each row shows: name, category tag, status badge
986
+ - Each accordion shows a **count badge** with the number of items
987
+
988
+ ## 5.2 Intake Form
989
+
990
+ Opened by clicking a build tile.
991
+
992
+ | Field | Description |
993
+ |-------|-------------|
994
+ | **Name** | What you're building (placeholder varies by type) |
995
+ | **Description** | Detailed description of what you want |
996
+ | **Project directory** (Apps only) | Folder path + Browse button with directory picker |
997
+ | **📎 Attach files** | File attachment button + hidden file input |
998
+ | **Create button** | Submits to the appropriate creator agent |
999
+ | **Cancel button** | Returns to landing |
1000
+
1001
+ ## 5.3 Creator Agents
1002
+
1003
+ Each build type is handled by a **hardcoded platform agent** — a real agent with its own ID, system prompt, and tools:
1004
+
1005
+ | Type | Agent ID | Name | Alias |
1006
+ |------|----------|------|-------|
1007
+ | Agent | `agentcreator` | Agent Creator | `@agentcreator` |
1008
+ | Skill | `skillcreator` | Skill Creator | `@skillcreator` |
1009
+ | App | `appcreator` | App Creator | `@appcreator` |
1010
+ | Prompt | `promptcreator` | Prompt Creator | `@promptcreator` |
1011
+
1012
+ These are real agents — you can also message them directly from any channel via `@agentcreator`, `@skillcreator`, etc. They are registered as **Platform** class agents.
1013
+
1014
+ | Action | API | MCP |
1015
+ |--------|-----|-----|
1016
+ | List creator agents | `GET /api/platform-agents` | `get_platform_agents` |
1017
+ | | Returns list of platform agents with IDs, names, aliases | *(no params)* |
1018
+
1019
+ ## 5.4 Creation View
1020
+
1021
+ The AI-assisted build interface — a split-pane chat + canvas.
1022
+
1023
+ ### Chat Panel (Left)
1024
+ - **Header:** creator agent avatar, name (e.g., "Agent Creator"), alias (e.g., "@agentcreator")
1025
+ - **Messages area:** user messages (cyan) and agent messages (purple, markdown-rendered)
1026
+ - **Thinking indicator** — animated dots while processing
1027
+ - **Tool cards** — show active tool usage
1028
+
1029
+ #### Chat Input Controls
1030
+ | Control | Description |
1031
+ |---------|-------------|
1032
+ | **📎 Clip button** | Toggle file drop zone for drag-and-drop |
1033
+ | **🎤 Mic button** | Voice input (stub) |
1034
+ | **⌘ Raw Logs button** | Toggle raw logs drawer |
1035
+ | **Chat textarea** | Enter sends, Shift+Enter newline, auto-resizes |
1036
+ | **Send button** | Sends message; becomes "Queue" during streaming |
1037
+ | **Stop button** | Appears during streaming; stops active job |
1038
+
1039
+ #### Raw Logs Drawer
1040
+ - **Mode button** — toggles between "Clean" and "● Raw" modes
1041
+ - **Log content area** — live streaming output from the creator agent
1042
+
1043
+ ### Canvas Panel (Right)
1044
+ - **Toggle button (▢ Canvas)** — show/hide canvas
1045
+ - **Clear button** — empties canvas
1046
+ - **Copy button** — copies all blocks to clipboard
1047
+ - **Close button** — hides canvas
1048
+ - **Canvas blocks** — code/content artifacts generated by the creator agent
1049
+ - Each block: type label (json, yaml, markdown, typescript, etc.), copy button, content
1050
+ - **Empty state:** "Canvas is empty — Artifacts will appear here as they're built"
1051
+ - **Resize handle** — draggable divider between chat and canvas
1052
+
1053
+ ### Deploy Button
1054
+ - **Deploy** — disabled until artifacts exist; triggers deployment flow
1055
+
1056
+ | Action | API | MCP |
1057
+ |--------|-----|-----|
1058
+ | Get platform agents (creators) | `GET /api/platform-agents` | `get_platform_agents` |
1059
+ | | | *(no params)* |
1060
+ | Send message to creator | `POST /api/chat/:agentId` | `send_message` |
1061
+ | | **Body:** `{ text }` | **Params:** `agentId` (e.g., `agentcreator`), `text` |
1062
+ | Start streaming with creator | `POST /api/chat/:agentId/stream` | `start_stream` |
1063
+ | | **Body:** `{ text }` | **Params:** `agentId`, `text` |
1064
+ | Stop streaming | `POST /api/chat/jobs/:jobId/stop` | `stop_chat_job` |
1065
+ | | | **Params:** `jobId` |
1066
+ | Poll stream output | `GET /api/chat/jobs/:jobId/raw?after=N` | `get_chat_job_raw` |
1067
+ | | **Query:** `after` (line offset) | **Params:** `jobId`, `after?` |
1068
+ | Upload file attachment to creator | `POST /api/upload/:agentId` (multipart) | `upload_file` |
1069
+ | | Multipart form: `file` + `mode` | **Params:** `agentId`, `fileName`, `base64Content`, `mode?` |
1070
+ | Browse dirs (App project picker) | `GET /api/browse-dirs?path=dirPath` | `browse_dirs` |
1071
+ | | **Query:** `path` | **Params:** `path?` |
1072
+
1073
+ ---
1074
+
1075
+ # 6. Marketplace
1076
+
1077
+ **URL:** `/marketplace`
1078
+ **Purpose:** Browse, install, and assign skills, prompts, agents, MCPs, and apps from the registry.
1079
+
1080
+ ## 6.1 Type Tabs
1081
+
1082
+ Same five tabs as Library: **Apps** (default), **Skills**, **Agents**, **MCPs**, **Prompts**
1083
+
1084
+ ## 6.2 Search & Filters
1085
+
1086
+ Identical to Library (see [Section 4.2](#42-search--filters)):
1087
+ - Search input with real-time filtering
1088
+ - Category pills with "all" and per-category options
1089
+ - "★ Platform Defaults" pill (skills/prompts/MCPs only)
1090
+
1091
+ ## 6.3 Sections
1092
+
1093
+ Items are split into two sections:
1094
+ - **"Built by Me"** — your personal items (same as Library, with add/create panels)
1095
+ - **"Built by Others"** — community and platform items
1096
+
1097
+ ## 6.4 Item Cards
1098
+
1099
+ Same card layout as Library (see [Section 4.4](#44-item-cards) for full card anatomy) with these marketplace-specific behaviors:
1100
+
1101
+ ### Skills / Prompts / MCPs / Agents Cards
1102
+ - **Name, provider, description, badges** — same as Library
1103
+ - **Install button** — primary action; downloads item to your local registry
1104
+ - After install, the **Assign Modal** opens automatically to assign to agents
1105
+ - **"✓ Installed" badge** — replaces Install button once installed
1106
+ - **☆ Set Default / ★ Default** — toggle platform default (skills/prompts/MCPs)
1107
+ - **↑ Publish ▾ dropdown** — publish to SaaS (Company Library or Marketplace)
1108
+ - **Manage button** — opens assign modal (if already installed)
1109
+
1110
+ ### App Cards
1111
+ - **↗ Launch** — opens app URL in new tab
1112
+ - **↑ Publish ▾** — publish to SaaS (Company Library / Marketplace)
1113
+ - **⌂ GitHub** — opens repo (if configured)
1114
+ - **✕ Delete** — removes app
1115
+ - **Health chip** — shows status; click to re-check
1116
+
1117
+ All actions, APIs, and MCP tools are identical to Library (see [Section 4.4](#44-item-cards) for full API/MCP tables):
1118
+
1119
+ | Action | API | MCP |
1120
+ |--------|-----|-----|
1121
+ | Browse registry by type | `GET /api/marketplace/:type` | `browse_registry` |
1122
+ | | **URL param:** `type` (skills, prompts, agents, mcps, apps) | **Params:** `type` |
1123
+ | Install item | `POST /api/marketplace/install` | `install_registry_item` |
1124
+ | | **Body:** `{ id, type }` | **Params:** `id`, `type` |
1125
+ | Assign to agent | `POST /api/marketplace/assign` | `assign_to_agent` |
1126
+ | | **Body:** `{ agentId, itemId, type }` | **Params:** `agentId`, `itemId`, `type` |
1127
+ | Set platform default | `POST /api/marketplace/platform-default` | `set_platform_default` |
1128
+ | | **Body:** `{ type, id }` | **Params:** `type`, `id` |
1129
+
1130
+ ---
1131
+
1132
+ # 7. Admin
1133
+
1134
+ **URL:** `/admin`
1135
+ **Purpose:** System-level configuration — channels, activity logs, accounts, service settings, SaaS, and deployment.
1136
+
1137
+ ## 7.1 Channels
1138
+
1139
+ **Tab:** Channels
1140
+
1141
+ ### Per Channel Card
1142
+ One card per messaging channel (Telegram, Slack, iMessage, WhatsApp, Discord). Each shows:
1143
+
1144
+ | Element | Description |
1145
+ |---------|-------------|
1146
+ | **Channel icon** | Emoji for channel type |
1147
+ | **Channel name** | e.g., "Telegram" |
1148
+ | **Status pill** | "Connected" or "Disabled" |
1149
+ | **Sticky mode select** | None, Sticky, Prefix — controls routing behavior |
1150
+ | **Prefix input** | Only visible if Prefix mode; the prefix string |
1151
+ | **Timeout input** | Minutes before sticky routing expires |
1152
+ | **Save Settings button** | Saves channel configuration |
1153
+
1154
+ ### Monitored Chat IDs (iMessage only)
1155
+ - **List of monitored chat IDs** with remove buttons per entry
1156
+ - **Add input** — chat ID to add
1157
+ - **Add button** — adds the chat ID
1158
+
1159
+ | Action | API | MCP |
1160
+ |--------|-----|-----|
1161
+ | Add monitored chat | `POST /api/channels/:channelName/monitored` | `add_monitored_chat` |
1162
+ | | **Body:** `{ chatId }` | **Params:** `channelName`, `chatId` |
1163
+ | Remove monitored chat | `DELETE /api/channels/:channelName/monitored` | `remove_monitored_chat` |
1164
+ | | **Body:** `{ chatId }` | **Params:** `channelName`, `chatId` |
1165
+
1166
+ ### Chat Groups (Agent Routing)
1167
+ - **Filter dropdown** — filter by chat ID
1168
+ - **Agent list** — grouped by chat ID, showing agent name, alias, remove button
1169
+ - **Add Agent section:**
1170
+ - Agent select dropdown
1171
+ - Chat/Channel ID input
1172
+ - **Add Agent button**
1173
+
1174
+ | Action | API | MCP |
1175
+ |--------|-----|-----|
1176
+ | List channels | `GET /api/channels` | `list_channels` |
1177
+ | | | *(no params)* |
1178
+ | Update channel settings | `PUT /api/channels/:channelName` | `update_channel` |
1179
+ | | **Body:** `{ stickyMode?, prefix?, timeout?, enabled? }` | **Params:** `channelName`, `body` (object) |
1180
+ | Add agent route | `POST /api/channels/:channelName/agents` | `add_agent_route` |
1181
+ | | **Body:** `{ agentId, chatId?, requireMention? }` | **Params:** `channelName`, `body` (object) |
1182
+ | Remove agent route | `DELETE /api/channels/:channelName/agents/:agentId` | `remove_agent_route` |
1183
+ | | | **Params:** `channelName`, `agentId` |
1184
+ | Get sticky routing | `GET /api/sticky-routing` | `get_sticky_routing` |
1185
+ | | | *(no params)* |
1186
+
1187
+ ## 7.2 Activity
1188
+
1189
+ **Tab:** Activity
1190
+
1191
+ ### Filters
1192
+ - **Agent filter dropdown** — dynamically populated with all agents
1193
+ - **Channel filter dropdown** — All Channels, Telegram, Slack, iMessage, Discord, WhatsApp
1194
+ - **Search input** — searches message content (debounced)
1195
+ - **Result count** — "X entries"
1196
+
1197
+ ### Activity Entries
1198
+ Each entry shows:
1199
+ - Agent avatar and name (clickable link to chat)
1200
+ - Channel tag
1201
+ - Session indicator
1202
+ - Timestamp
1203
+ - "Chat →" button to view in chat
1204
+ - Query text (first 200 chars)
1205
+ - Response preview (first 800 chars, expandable on click)
1206
+
1207
+ | Action | API | MCP |
1208
+ |--------|-----|-----|
1209
+ | Get activity feed | `GET /api/activity` | `get_activity` |
1210
+ | | **Query:** `?limit=N` | **Params:** `limit?` |
1211
+ | Get agent logs | `GET /api/agents/:agentId/logs` | `get_agent_logs` |
1212
+ | | **Query:** `?limit=N&offset=N&search=text` | **Params:** `agentId`, `limit?`, `offset?`, `search?` |
1213
+
1214
+ ## 7.3 Settings
1215
+
1216
+ **Tab:** Settings (default)
1217
+
1218
+ ### Profile Section
1219
+ - **Section label:** "Profile" (cyan highlight)
1220
+ - **Description:** "Your identity — agents can use this to personalize responses"
1221
+ - **Fields:**
1222
+
1223
+ | Field | Description |
1224
+ |-------|-------------|
1225
+ | **Name** | Your name |
1226
+ | **Role / Title** | Your job role (e.g., product manager, developer, student) |
1227
+ | **Industry** | Your industry or domain (e.g., fintech, healthcare, education) |
1228
+ | **AI Experience** | Dropdown: Beginner, Intermediate, Advanced |
1229
+ | **Interests** | Comma-separated list of focus areas (e.g., automation, coding, writing) |
1230
+
1231
+ - **Save button** — persists profile to `profile.json`
1232
+
1233
+ | Action | API | MCP |
1234
+ |--------|-----|-----|
1235
+ | Get profile | `GET /api/profile` | `get_profile` |
1236
+ | | | *(no params)* |
1237
+ | Update profile | `PUT /api/profile` | `update_profile` |
1238
+ | | **Body:** `{ name?, role?, industry?, aiExperience?, interests? }` | **Params:** `name?`, `role?`, `industry?`, `aiExperience?`, `interests?` |
1239
+
1240
+ ### Claude Accounts Section
1241
+
1242
+ #### Account List
1243
+ Each account row shows:
1244
+ - **Status dot** — green (authenticated), red (error), grey (unknown)
1245
+ - **Account name**
1246
+ - **Email address** (fetched from account status)
1247
+ - **Account path** (e.g., `~/.claude-main`)
1248
+ - **↻ Re-login button** — restart OAuth for this account
1249
+ - **✕ Delete button** — remove account
1250
+
1251
+ #### Add Account
1252
+ - **Account name input**
1253
+ - **Login & Add button (→)** — starts OAuth flow
1254
+ - **Login panel** (appears after starting):
1255
+ - Step 1: Login URL display (copyable, clickable)
1256
+ - Step 2: Code input field + **Submit Code button**
1257
+ - **Verify & Save button**
1258
+
1259
+ | Action | API | MCP |
1260
+ |--------|-----|-----|
1261
+ | List accounts | `GET /api/config/accounts` | `list_accounts` |
1262
+ | | | *(no params)* |
1263
+ | Add account | `POST /api/config/accounts` | `add_account` |
1264
+ | | **Body:** `{ name, path }` | **Params:** `name`, `path` |
1265
+ | Delete account | `DELETE /api/config/accounts/:name` | `delete_account` |
1266
+ | | | **Params:** `name` |
1267
+ | Check account status | `GET /api/config/accounts/:name/status` | `check_account_status` |
1268
+ | | | **Params:** `name` |
1269
+ | Start login | `POST /api/config/accounts/login` | `start_account_login` |
1270
+ | | **Body:** `{ name, path }` | **Params:** `name`, `path` |
1271
+ | Submit login code | `POST /api/config/accounts/login/code` | `submit_login_code` |
1272
+ | | **Body:** `{ accountName, code }` | **Params:** `accountName`, `code` |
1273
+ | Check auth status | `GET /api/whoami/:agentId` | `whoami` |
1274
+ | | | **Params:** `agentId` |
1275
+
1276
+ ### Service Section
1277
+ - **Note:** "Restart required for most changes"
1278
+ - **Settings grid:**
1279
+
1280
+ | Field | Description |
1281
+ |-------|-------------|
1282
+ | **Personal Agents Directory** | Where agent folders are stored |
1283
+ | **Personal Registry Directory** | Where skills/prompts registry lives |
1284
+ | **Web UI Port** | Port for the web interface (default: 4888) |
1285
+ | **Log Level** | Logging verbosity |
1286
+
1287
+ - **Save button** — saves service configuration
1288
+
1289
+ | Action | API | MCP |
1290
+ |--------|-----|-----|
1291
+ | Get service config | `GET /api/config/service` | `get_service_config` |
1292
+ | | | *(no params)* |
1293
+ | Update service config | `PUT /api/config/service` | `update_service_config` |
1294
+ | | **Body:** `{ personalAgentsDir?, personalRegistryDir?, port?, logLevel?, multiModelEnabled?, platformDefaultExecutor?, ollamaBaseUrl? }` | **Params:** `body` (object) |
1295
+
1296
+ ### AI Models Section
1297
+ - **Section label:** "AI Models" (amber highlight)
1298
+ - **Toggle:** Enable Multi-Model — enables/disables alternative model routing (Ollama + cloud providers)
1299
+ - **Setup guide** (shown when enabled): Platform-specific install instructions for Ollama (macOS, Windows, Linux), model pull commands, and a "Test Connection" button that checks Ollama availability and lists downloaded models
1300
+ - **Settings grid:**
1301
+
1302
+ | Field | Description |
1303
+ |-------|-------------|
1304
+ | **Platform Default Executor** | Default executor for all agents: `claude` (default), `ollama:<model>`, or any supported provider:model combo |
1305
+ | **Ollama Base URL** | Ollama API endpoint (default: `http://localhost:11434`) |
1306
+
1307
+ - **Save button** — saves AI model settings
1308
+
1309
+ #### Supported Providers
1310
+
1311
+ | Provider | Executor format | API key field | Example |
1312
+ |----------|----------------|---------------|---------|
1313
+ | **Claude** | `claude` (default) | — (uses local CLI auth) | `claude` |
1314
+ | **Ollama** | `ollama:<model>` | — (local, no key) | `ollama:gemma2`, `ollama:llama3.1` |
1315
+ | **OpenAI** | `openai:<model>` | `openai` | `openai:gpt-4o`, `openai:gpt-4o-mini` |
1316
+ | **Grok (xAI)** | `grok:<model>` | `xai` | `grok:grok-3`, `grok:grok-3-mini` |
1317
+ | **Gemini** | `gemini:<model>` | `google` | `gemini:gemini-2.5-flash`, `gemini:gemini-2.5-pro` |
1318
+ | **Groq** | `groq:<model>` | `groq` | `groq:llama-3.3-70b-versatile` |
1319
+ | **Together** | `together:<model>` | `together` | `together:meta-llama/Llama-3.3-70B-Instruct` |
1320
+ | **Mistral** | `mistral:<model>` | `mistral` | `mistral:mistral-large-latest` |
1321
+
1322
+ API keys are stored in `config.json` under `service.providerKeys` (e.g., `{ "openai": "sk-...", "xai": "xai-...", "google": "AIza..." }`). Set them in Admin → Settings → Provider Keys.
1323
+
1324
+ - **Limitations:** Non-Claude agents (Ollama + cloud providers) get text-in/text-out only — no tool use (Read, Write, Bash), no MCP tools, no persistent sessions. Good for Q&A, content generation, and advisory roles.
1325
+
1326
+ | Action | API | MCP |
1327
+ |--------|-----|-----|
1328
+ | Enable multi-model | `PUT /api/config/service` | `update_service_config` |
1329
+ | | **Body:** `{ multiModelEnabled: true }` | **Params:** `{ multiModelEnabled: true }` |
1330
+ | Set platform default | `PUT /api/config/service` | `update_service_config` |
1331
+ | | **Body:** `{ platformDefaultExecutor: "openai:gpt-4o" }` | **Params:** `{ platformDefaultExecutor: "openai:gpt-4o" }` |
1332
+ | Set Ollama URL | `PUT /api/config/service` | `update_service_config` |
1333
+ | | **Body:** `{ ollamaBaseUrl: "http://host:11434" }` | **Params:** `{ ollamaBaseUrl: "http://host:11434" }` |
1334
+ | Set provider API keys | `PUT /api/config/service` | `update_service_config` |
1335
+ | | **Body:** `{ providerKeys: { openai: "sk-...", xai: "xai-..." } }` | **Params:** `{ providerKeys: { ... } }` |
1336
+ | Test provider API key | `POST /api/config/provider-test` | `test_provider` |
1337
+ | | **Body:** `{ provider: "openai" }` — tests the configured key for that provider | **Params:** `provider` (string: openai, grok, gemini, groq, together, mistral) |
1338
+ | Proxy Ollama tag list | `GET /api/ollama-proxy?url=<ollamaUrl>/api/tags` | — (internal) |
1339
+ | | **Query:** `url` — only `/api/tags` proxy is allowed | N/A — used by the Settings UI to list local Ollama models |
1340
+
1341
+ ### Deployment Section
1342
+ - **Section label:** "Deployment" (green highlight)
1343
+ - **Note:** "Restart required for most changes"
1344
+ - **Settings grid:**
1345
+
1346
+ | Field | Description |
1347
+ |-------|-------------|
1348
+ | **Provider** | Deployment platform (e.g., "railway") |
1349
+ | **Deploy Token** | Platform deploy token (password field with reveal toggle) |
1350
+ | **GitHub Org/User** | GitHub organization or username for deployments |
1351
+ | **GitHub Token** | GitHub personal access token (password field with reveal toggle) |
1352
+
1353
+ - **Save button** — saves deployment configuration
1354
+ - **Reveal toggle buttons (👁)** — show/hide password fields for Deploy Token and GitHub Token
1355
+
1356
+ > Note: Deployment settings are stored in `config.json` and do not currently have dedicated API/MCP endpoints. They are managed through the `update_service_config` API.
1357
+
1358
+ | Action | API | MCP |
1359
+ |--------|-----|-----|
1360
+ | Get deployment config | `GET /api/config/service` | `get_service_config` |
1361
+ | | Returns service config including deployment settings | *(no params)* |
1362
+ | Update deployment config | `PUT /api/config/service` | `update_service_config` |
1363
+ | | **Body:** `{ deployment: { provider?, deployToken?, githubOrg?, githubToken? } }` | **Params:** `body` (object) |
1364
+
1365
+ ### SaaS Publishing Section
1366
+ - **Description:** "Publish skills, prompts, agents, and apps from your Library to a shared SaaS workspace"
1367
+ - **Status dot** — green when connected, hidden otherwise
1368
+ - **Settings grid:**
1369
+
1370
+ | Field | Description |
1371
+ |-------|-------------|
1372
+ | **SaaS Base URL** | The SaaS platform URL |
1373
+ | **API Key** | SaaS API key (password field with reveal toggle) |
1374
+
1375
+ - **Save button** — saves SaaS config
1376
+ - **Test Connection button** — tests credentials
1377
+
1378
+ | Action | API | MCP |
1379
+ |--------|-----|-----|
1380
+ | Get SaaS config | `GET /api/saas/config` | `get_saas_config` |
1381
+ | | | *(no params)* |
1382
+ | Update SaaS config | `PUT /api/saas/config` | `update_saas_config` |
1383
+ | | **Body:** `{ baseUrl?, apiKey? }` | **Params:** `baseUrl?`, `apiKey?` |
1384
+ | Test SaaS connection | `POST /api/saas/test` | `test_saas_connection` |
1385
+ | | **Body:** `{ baseUrl?, apiKey? }` | **Params:** `baseUrl?`, `apiKey?` |
1386
+
1387
+ ### Status Indicator Section
1388
+ - **Description:** "Show a live status dot in your menu bar (Mac) or system tray (Windows)"
1389
+ - **Install xbar Plugin button** (macOS only) — installs the status bar indicator
1390
+
1391
+ | Action | API | MCP |
1392
+ |--------|-----|-----|
1393
+ | Install xbar plugin | `POST /api/install-xbar` | `install_xbar` |
1394
+ | | | *(no params)* |
1395
+
1396
+ ### Authorized Senders (Pairing)
1397
+
1398
+ | Action | API | MCP |
1399
+ |--------|-----|-----|
1400
+ | List paired senders | `GET /api/pairing` | `list_paired_senders` |
1401
+ | | | *(no params)* |
1402
+ | Pair sender | `POST /api/pairing` | `pair_sender` |
1403
+ | | **Body:** `{ senderKey }` | **Params:** `senderKey` |
1404
+ | Unpair sender | `DELETE /api/pairing/:senderKey` | `unpair_sender` |
1405
+ | | | **Params:** `senderKey` |
1406
+
1407
+ ## 7.4 Docs
1408
+
1409
+ **Tab:** Docs
1410
+
1411
+ Documentation cards:
1412
+
1413
+ | Card | Description | Action |
1414
+ |------|-------------|--------|
1415
+ | **API Docs** | Full REST API reference — endpoints, schemas, auth | External link (↗) |
1416
+ | **MCP Tools** | MCP tool definitions — available actions via MCP | External link (↗) |
1417
+ | **Changelog** | Release history — features, fixes, breaking changes | In-app link (→) |
1418
+ | **User Guide** | This document — comprehensive platform walkthrough | In-app link (→) — **to be added** |
1419
+
1420
+ | Action | API | MCP |
1421
+ |--------|-----|-----|
1422
+ | Get changelog | `GET /api/changelog` | `get_changelog` |
1423
+ | | | *(no params)* |
1424
+
1425
+ ---
1426
+
1427
+ # 8. Monitor
1428
+
1429
+ **URL:** `/monitor`
1430
+ **Purpose:** At-a-glance platform health and first-time setup checklist. This is the first page new users see after running `/setup`.
1431
+
1432
+ ## 8.1 Setup Checklist
1433
+
1434
+ The **Getting Started** card appears at the top of the page. It tracks three onboarding milestones and auto-updates as you complete them.
1435
+
1436
+ | Element | Description |
1437
+ |---------|-------------|
1438
+ | **Connect a messaging channel** | Turns green when at least one channel (Telegram, Slack, WhatsApp, iMessage) is connected |
1439
+ | **Create your first agent** | Turns green when at least one personal (non-platform) agent exists |
1440
+ | **Send a test message** | Turns green when any personal agent has received at least one message |
1441
+ | **Start Setup button** | Navigates to `/?setup=true`, which opens the hub chat and auto-triggers the `/onboarding` skill to walk through channel + agent setup |
1442
+ | **"Setup complete!" badge** | Appears and the checklist collapses once all three items are done |
1443
+
1444
+ | Action | API | MCP |
1445
+ |--------|-----|-----|
1446
+ | Get dashboard data (drives checklist) | `GET /api/dashboard` | `get_dashboard` |
1447
+
1448
+ ## 8.2 Dashboard
1449
+
1450
+ Below the setup checklist, a 2-column dashboard grid shows live platform metrics. Data auto-refreshes every 30 seconds.
1451
+
1452
+ ### Platform Status Card
1453
+
1454
+ | Stat | Description |
1455
+ |------|-------------|
1456
+ | **Uptime** | How long the service has been running (hours + minutes) |
1457
+ | **Total Agents** | Count of all registered agents (platform + personal) |
1458
+ | **Personal Agents** | Count of non-platform agents (excludes hub, creators) |
1459
+ | **Organizations** | Distinct organizations across all agents |
1460
+ | **Channels** | Pills showing each connected channel name |
1461
+ | **MCPs** | Number of MCP servers in the registry |
1462
+ | **Active Automations** | Sum of active goals + active cron jobs across personal agents |
1463
+ | **Open Tasks** | Sum of approved + in-progress + review tasks across personal agents |
1464
+
1465
+ ### Agent Activity Card
1466
+
1467
+ Shows personal agents sorted by most recent activity.
1468
+
1469
+ | Element | Description |
1470
+ |---------|-------------|
1471
+ | **Search input** | Filter agents by name or alias |
1472
+ | **Filter pills** | Toggle filters: MCPs, Skills, Automations, Open Tasks. Filters combine with AND logic. |
1473
+ | **Agent rows** | Each row shows: avatar (initials), name, @alias, badge counts (MCPs, skills, automations, tasks), message count, and time since last message |
1474
+ | **Click an agent row** | Navigates to `/ui?agent={agentId}` to chat with that agent |
1475
+
1476
+ ### Recent Activity Card (full width)
1477
+
1478
+ A chronological feed of the last 15 messages across all agents.
1479
+
1480
+ | Element | Description |
1481
+ |---------|-------------|
1482
+ | **Time column** | Timestamp (HH:MM) |
1483
+ | **Agent column** | Agent that handled the message |
1484
+ | **Message column** | First 80 characters of the message. User messages shown in accent blue, agent responses in purple. |
1485
+
1486
+ ### Costs Card (full width, conditional)
1487
+
1488
+ Only appears when cost data is available from `GET /api/costs`.
1489
+
1490
+ | Element | Description |
1491
+ |---------|-------------|
1492
+ | **Period rows** | Shows cost per time period (today, this week, this month) with dollar amounts |
1493
+
1494
+ | Action | API | MCP |
1495
+ |--------|-----|-----|
1496
+ | Get dashboard data | `GET /api/dashboard` | `get_dashboard` |
1497
+ | Get recent activity | `GET /api/activity?limit=15` | `get_activity` |
1498
+ | Get cost data | `GET /api/costs` | `get_all_costs` |
1499
+
1500
+ ---
1501
+
1502
+ # 9. Projects
1503
+
1504
+ Cross-agent initiatives that bundle tasks, agents, orgs, apps, and artifacts under a single trackable entity. Unlike tasks (finite, single-agent), projects are long-running containers that group related work across your entire platform.
1505
+
1506
+ **Route:** `/projects`
1507
+
1508
+ ## 9.1 Projects List
1509
+
1510
+ A responsive card grid showing all projects. Header displays active/paused/completed counts with a **+ New Project** button.
1511
+
1512
+ ### Filter Bar
1513
+
1514
+ | Element | Description |
1515
+ |---------|-------------|
1516
+ | **Search** | Text search filtering by project name or description |
1517
+ | **Status pills** | Filter by All, Active, Paused, Completed, Archived |
1518
+
1519
+ ### Project Cards
1520
+
1521
+ | Element | Description |
1522
+ |---------|-------------|
1523
+ | **Name** | Project name (display font) |
1524
+ | **Status badge** | Color-coded: active (green), paused (amber), completed (accent), archived (muted) |
1525
+ | **Owner badge** | Agent ID that owns the project |
1526
+ | **Team count** | Number of team member agents |
1527
+ | **Description** | Truncated to 2 lines |
1528
+ | **Progress bar** | Based on linked task completion percentage |
1529
+ | **Task stats** | "X/Y tasks done" |
1530
+ | **Linked counts** | Agents, apps, artifacts counts |
1531
+ | **Created date** | When the project was created |
1532
+ | **Click** | Opens the project detail panel |
1533
+
1534
+ ## 9.2 Project Detail Panel
1535
+
1536
+ Slide-in panel showing full project details with editable fields.
1537
+
1538
+ | Element | Description |
1539
+ |---------|-------------|
1540
+ | **Name** | Editable project name |
1541
+ | **Description** | Editable description |
1542
+ | **Status** | Dropdown: active, paused, completed, archived |
1543
+ | **Owner** | Dropdown of all agents |
1544
+ | **Team Members** | Multi-select checkboxes of agents |
1545
+ | **Plan** | Editable markdown textarea |
1546
+ | **Notes** | Editable freeform textarea |
1547
+ | **Linked Tasks** | List with status dots, link/unlink controls |
1548
+ | **Linked Agents** | List with unlink controls |
1549
+ | **Linked Orgs** | List with unlink controls |
1550
+ | **Linked Apps** | List with unlink controls |
1551
+ | **Linked Artifacts** | List with name + type, unlink controls |
1552
+ | **Save button** | Saves all changes |
1553
+ | **Delete button** | Deletes the project |
1554
+ | **Link entity** | Type selector + value input to add new links |
1555
+
1556
+ ## 9.3 Create Project Modal
1557
+
1558
+ Form for creating a new project.
1559
+
1560
+ | Field | Description |
1561
+ |-------|-------------|
1562
+ | **Name** | Required — project name |
1563
+ | **Description** | What this project is about |
1564
+ | **Owner** | Agent dropdown (defaults to hub) |
1565
+ | **Team Members** | Checkboxes for team agent selection |
1566
+ | **Plan** | Markdown textarea for the project plan |
1567
+ | **Notes** | Additional notes |
1568
+
1569
+ ## 9.4 API & MCP Reference
1570
+
1571
+ | Action | API | MCP |
1572
+ |--------|-----|-----|
1573
+ | List all projects | `GET /api/projects` | `list_projects` |
1574
+ | Get project detail | `GET /api/projects/:id` | `get_project` |
1575
+ | Create project | `POST /api/projects` | `create_initiative` |
1576
+ | Update project | `PUT /api/projects/:id` | `update_project` |
1577
+ | Delete project | `DELETE /api/projects/:id` | `delete_project` |
1578
+ | Link entity to project | `POST /api/projects/:id/link` | `link_to_project` |
1579
+ | Unlink entity from project | `POST /api/projects/:id/unlink` | `unlink_from_project` |
1580
+ | Get project status report | `GET /api/projects/:id/status` | `get_project_status` |
1581
+ | Start autonomous execution | `POST /api/projects/:id/execute` | `execute_project` |
1582
+ | Pause autonomous execution | `POST /api/projects/:id/pause` | `pause_project` |
1583
+
1584
+ ### Autonomous Execution
1585
+
1586
+ Projects can execute autonomously in the background. When you call `execute_project`, it creates a scheduled goal on the owner agent that:
1587
+ 1. Reads the project status and finds the next undone task
1588
+ 2. Marks it in-progress, executes it, marks it done
1589
+ 3. Continues to the next task
1590
+ 4. Reports to the owner agent's Slack channel when complete or blocked
1591
+
1592
+ Options: `schedule` (cron, default every 15 min), `reportTo` (channel:chatId), `budget` (maxDailyUsd, default $5).
1593
+
1594
+ Use `pause_project` to stop execution. The goal is disabled but preserved.
1595
+
1596
+ ---
1597
+
1598
+ # 10. AI Gym
1599
+
1600
+ Personal AI training area with a coach agent, structured programs, dimension tracking, and personalized learning plans. Gated behind `gymEnabled: true` in settings.
1601
+
1602
+ **Route:** `/gym`
1603
+
1604
+ ## 10.1 Onboarding (First Visit)
1605
+
1606
+ Full-screen 3-step flow shown when `onboardingComplete: false`. Must be completed before accessing the main gym.
1607
+
1608
+ ### Step 1 — Choose Your Trainer
1609
+
1610
+ | Element | Description |
1611
+ |---------|-------------|
1612
+ | **Trainer cards** | Grid of 5 trainer profiles, each with avatar, name, style, and intro quote |
1613
+ | **Alex** | Collaborative · Steady — works alongside you |
1614
+ | **Jordan** | Direct · Steady — holds you accountable |
1615
+ | **Morgan** | Thoughtful · Steady — explains the "why" |
1616
+ | **Riley** | Challenging · Immersive — pushes you hard |
1617
+ | **Sam** | Patient · Steady — meets you where you are |
1618
+ | **Next button** | Enabled after selecting a trainer |
1619
+
1620
+ ### Step 2 — Get to Know You
1621
+
1622
+ | Element | Description |
1623
+ |---------|-------------|
1624
+ | **Coach header** | Selected trainer's avatar and name |
1625
+ | **Coach message** | One-question prompt asking about professional background, AI experience, and goals |
1626
+ | **Text input** | Free-form textarea for response |
1627
+ | **Send button** | Sends response to gym agent via `POST /api/chat/gym/stream` |
1628
+
1629
+ ### Step 3 — Get Your Plan
1630
+
1631
+ | Element | Description |
1632
+ |---------|-------------|
1633
+ | **Loading spinner** | Shown while coach generates the plan |
1634
+ | **Plan summary** | Two-bucket display: On-the-Job Training + Platform-Driven Learning |
1635
+ | **Enter the Gym** | Marks onboarding complete and enters main gym |
1636
+
1637
+ ## 10.2 Mode Picker (Landing)
1638
+
1639
+ After onboarding, returning users see a **mode picker** instead of jumping straight into chat. Three tiles answer "what brings you to the gym?"
1640
+
1641
+ | Tile | Title | Description |
1642
+ |------|-------|-------------|
1643
+ | **1** | **I have work to do** | Bring a real task. Coach helps you execute while teaching along the way. Chat opens with "Describe what you need to get done..." placeholder. |
1644
+ | **2 (Recommended)** | **You tell me** | Coach picks what to work on based on activity, dimension gaps, and unused features. Visually emphasized with accent border. Auto-sends a coaching request — coach arrives with one specific recommendation. |
1645
+ | **3** | **I want to get smart** | Self-directed learning. Pick a topic or program. If in-progress program exists, coach offers to continue it. Otherwise prompts for topic. |
1646
+
1647
+ Additional elements:
1648
+ - **Time-aware greeting** — "Good morning/afternoon/evening. What brings you to the gym?"
1649
+ - **Streak counter** — shown below tiles if streak > 0
1650
+
1651
+ Clicking a tile sets the **session mode** (task/coach/learn), transitions to the main gym view, and primes the coach chat with mode-appropriate context.
1652
+
1653
+ ## 10.3 Main Gym View
1654
+
1655
+ Three-panel layout: left sidebar, center panel (tabbed), bottom feed strip.
1656
+
1657
+ ### Top Bar
1658
+
1659
+ | Element | Description |
1660
+ |---------|-------------|
1661
+ | **Configure button** | Opens the agent editor modal (same as Org page) in an iframe overlay, pre-loaded with the gym agent. Shows all 6 standard tabs plus 4 gym-specific tabs (Trainer, Learner, Dimensions, Programs). See section 2.2 for tab details. |
1662
+ | **Gym nav link** | Returns to gym home |
1663
+ | **Theme toggle** | Light/dark mode switch |
1664
+
1665
+ ### Left Sidebar
1666
+
1667
+ | Element | Description |
1668
+ |---------|-------------|
1669
+ | **Streak counter** | Fire icon with current day streak count |
1670
+ | **Programs list** | All programs with status indicators: ✓ (done), N/M (in progress), ○ (not started) |
1671
+ | **Gym cards** | 2–3 cards with title, description, CTA button, and dismiss (×) control |
1672
+ | **"New" badge** | Shown on cards generated by the latest digest |
1673
+
1674
+ ### Center Panel — Coach Tab
1675
+
1676
+ | Element | Description |
1677
+ |---------|-------------|
1678
+ | **Coach header** | Trainer name + avatar + style subtitle |
1679
+ | **Chat messages** | Scrollable conversation area (user right-aligned, coach left-aligned) |
1680
+ | **Chat input** | Textarea with Enter-to-send + send button. Routes to `POST /api/chat/gym/stream` |
1681
+ | **Typing indicator** | Three bouncing dots shown while coach is responding |
1682
+ | **SSE streaming** | Responses stream in real-time via `GET /api/chat/jobs/:jobId/stream` |
1683
+
1684
+ ### Center Panel — Progress Tab
1685
+
1686
+ | Element | Description |
1687
+ |---------|-------------|
1688
+ | **Radar chart** | SVG spider chart showing 5 dimensions at current scores (0–5) |
1689
+ | **Dimension breakdown** | Row per dimension: label, progress bar, score/5, trend arrow (↑ ↓ →) |
1690
+ | **Next focus** | Callout highlighting the weakest dimension with guidance text |
1691
+ | **Milestones** | Chronological list of achievements (program completions, level-ups) |
1692
+
1693
+ ### Bottom Feed Strip
1694
+
1695
+ Placeholder for P1. Displays "Feed coming in P1".
1696
+
1697
+ ## 10.4 AI Strength Dimensions
1698
+
1699
+ Learners are scored across 5 dimensions on a **1–5 scale** (0 = not yet assessed):
1700
+
1701
+ | Dimension | What It Measures |
1702
+ |-----------|-----------------|
1703
+ | **Application** | How deeply AI is integrated into actual work — usage frequency, breadth, habit |
1704
+ | **Communication** | Prompt effectiveness — context, specificity, iteration efficiency |
1705
+ | **Knowledge** | Conceptual understanding of AI, agents, tools, MCPs, memory |
1706
+ | **Orchestration** | Multi-agent workflows — goals, cron, delegation, automation |
1707
+ | **Craft** | Building AI systems — agent creation, system prompts, tool/MCP config |
1708
+
1709
+ Score labels: 1 = Beginner, 2 = Developing, 3 = Proficient, 4 = Advanced, 5 = Expert.
1710
+
1711
+ ## 10.5 Programs
1712
+
1713
+ Structured training curricula. Each program has modules, and each module has steps with verification.
1714
+
1715
+ ### Getting Started (Bundled)
1716
+
1717
+ Pre-installed beginner program with 3 modules and 7 steps:
1718
+ - **Meet Your AI** — What is an agent? + Have your first conversation
1719
+ - **Give It Context** — Prompt quality + Try a detailed prompt + Upload a file
1720
+ - **Make It Yours** — Create a specialized agent + Write a system prompt
1721
+
1722
+ ### Step Verification Types
1723
+
1724
+ | Type | How It Works |
1725
+ |------|-------------|
1726
+ | **knowledge** | Coach asks comprehension questions, evaluates understanding |
1727
+ | **platform-check** | Coach calls MCP tools to verify platform state changed (e.g., new agent created) |
1728
+ | **self-report** | User describes what they did and learned |
1729
+
1730
+ ## 10.6 Activity Digest
1731
+
1732
+ Scheduled daily at 6am (when `gymEnabled: true`). Also triggerable manually via `POST /api/gym/digest/run`.
1733
+
1734
+ What it does:
1735
+ 1. Scans all agent activity summaries
1736
+ 2. Scores 5 dimensions using observed patterns
1737
+ 3. Snapshots dimension history weekly
1738
+ 4. Updates learner profile (activity, features, streak, dimensions)
1739
+ 5. Writes daily journal to `agents/platform/gym/memory/daily/<date>.md`
1740
+ 6. Generates 2–3 gym cards (weakest dimension tips, dormant agent nudges, unused feature discovery)
1741
+
1742
+ ## 10.7 Trainer Souls
1743
+
1744
+ Each trainer is a `soul.md` file prepended to the gym agent's system prompt at spawn time. Switching trainers changes the coaching voice without affecting progress, plan, or profile. Switch anytime via the **Trainer tab** in the gym agent's Configure modal (top bar → Configure → Trainer tab).
1745
+
1746
+ Avatar SVGs at `public/trainers/{alex,jordan,morgan,riley,sam}.svg`.
1747
+
1748
+ ## 10.8 Coach-Created Guides
1749
+
1750
+ After any substantive coaching session, the gym agent auto-generates a reusable guide and asks the user to review it.
1751
+
1752
+ | Element | Description |
1753
+ |---------|-------------|
1754
+ | **Guide generation** | Coach distills session into clean step-by-step instructions via `create_gym_guide` MCP tool |
1755
+ | **Review prompt** | Coach asks "I wrote up a guide from what we just did — want to review it?" |
1756
+ | **Approval** | User can edit, approve, or discard before saving |
1757
+ | **Where guides appear** | Gym sidebar → Guides tab → "Coach Created" filter |
1758
+ | **Skill publishing** | Guides can also be published as agent-executable skills via `create_skill` |
1759
+
1760
+ Guides have two forms: human-readable (browsable in gym) and agent-executable (assignable as skills).
1761
+
1762
+ | Action | API | MCP |
1763
+ |--------|-----|-----|
1764
+ | List coach guides | `GET /api/gym/guides` | `list_gym_guides` |
1765
+ | Create coach guide | `POST /api/gym/guides` | `create_gym_guide` |
1766
+ | | **Body:** `{ title, description?, difficulty?, dimensions?, estimatedTime?, modules?, content? }` | **Params:** `title`, `description?`, `difficulty?`, `dimensions?`, `estimatedTime?`, `modules?`, `content?` |
1767
+
1768
+ ## 10.9 API & MCP Reference
1769
+
1770
+ | Action | API | MCP |
1771
+ |--------|-----|-----|
1772
+ | Get learner profile | `GET /api/gym/learner-profile` | `get_learner_profile` |
1773
+ | Update learner profile | `PUT /api/gym/learner-profile` | `update_learner_profile` |
1774
+ | | **Body:** any profile fields (merged) | **Params:** `data` (object) |
1775
+ | Get training plan | `GET /api/gym/plan` | `get_plan` |
1776
+ | Update training plan | `PUT /api/gym/plan` | `update_plan` |
1777
+ | | **Body:** full plan object | **Params:** `data` (object) |
1778
+ | Get program progress | `GET /api/gym/progress` | `get_gym_progress` |
1779
+ | Update program progress | `PUT /api/gym/progress` | `update_gym_progress` |
1780
+ | | **Body:** progress data | **Params:** `data` (object) |
1781
+ | List gym cards | `GET /api/gym/cards` | `list_gym_cards` |
1782
+ | Create gym card | `POST /api/gym/cards` | `create_gym_card` |
1783
+ | | **Body:** `{ title, description, type, cta?, ctaAction? }` | **Params:** `title`, `description`, `type` |
1784
+ | Dismiss gym card | `DELETE /api/gym/cards/:id` | `dismiss_gym_card` |
1785
+ | | | **Params:** `id` |
1786
+ | Snapshot dimensions | `POST /api/gym/dimensions/snapshot` | `snapshot_dimensions` |
1787
+ | | **Body:** `{ date?, dimensions }` | **Params:** `date?`, `dimensions` |
1788
+ | Get dimension history | `GET /api/gym/dimensions/history` | `get_dimension_history` |
1789
+ | List programs | `GET /api/gym/programs` | `list_gym_programs` |
1790
+ | Get program detail | `GET /api/gym/programs/:slug` | `get_gym_program` |
1791
+ | | | **Params:** `slug` |
1792
+ | Create program | `POST /api/gym/programs` | -- |
1793
+ | | **Body:** `{ title, slug?, description, difficulty, modules[] }` | |
1794
+ | Update program | `PATCH /api/gym/programs/:slug` | `update_gym_program` |
1795
+ | | **Body:** fields to update | **Params:** `slug`, `body` |
1796
+ | Delete program | `DELETE /api/gym/programs/:slug` | `delete_gym_program` |
1797
+ | | | **Params:** `slug` |
1798
+ | Import program from markdown | `POST /api/gym/programs/import-markdown` | `import_program` |
1799
+ | | **Body:** `{ markdown }` (H1=program, H2=module, H3=step) | **Params:** `markdown` |
1800
+ | Get agent activity summary | `GET /api/agents/:id/activity-summary` | `get_agent_activity_summary` |
1801
+ | | | **Params:** `agentId` |
1802
+ | Get agent logs (paginated) | `GET /api/agents/:id/logs?limit=50&offset=0` | `get_agent_logs` |
1803
+ | | | **Params:** `agentId`, `limit?`, `offset?` |
1804
+ | Search agent logs | `GET /api/agents/logs/search?q=keyword&agentIds=a,b` | `search_agent_logs` |
1805
+ | | | **Params:** `q`, `agentIds?` |
1806
+ | Run activity digest | `POST /api/gym/digest/run` | `run_gym_digest` |
1807
+ | Get gym feed | `GET /api/gym/feed` | `get_gym_feed` |
1808
+ | | Returns tips, platformUpdates, briefing | *(no params)* |
1809
+ | Get gym config flags | `GET /api/gym/config` | `get_gym_config` |
1810
+ | | Returns gymEnabled, gymOnlyMode, aibriefingEnabled | *(no params)* |
1811
+ | List coach-created guides | `GET /api/gym/guides` | `list_gym_guides` |
1812
+ | | Returns array of programs with source=coach | *(no params)* |
1813
+ | Create coach guide | `POST /api/gym/guides` | `create_gym_guide` |
1814
+ | | **Body:** `{ title, description?, difficulty?, dimensions?, estimatedTime?, modules?, content? }` | **Params:** `title`, `description?`, `difficulty?`, `dimensions?`, `estimatedTime?`, `modules?`, `content?` |
1815
+
1816
+ ---
1817
+
1818
+ # Appendix A: Global Navigation
1819
+
1820
+ Present on every page:
1821
+
1822
+ | Element | Description |
1823
+ |---------|-------------|
1824
+ | **MyAIforOne logo** | Home link |
1825
+ | **Agents tab** | → `/org` |
1826
+ | **Chat tab** | → `/ui` |
1827
+ | **Library tab** | → `/library` |
1828
+ | **Projects tab** | → `/projects` |
1829
+ | **Lab tab** | → `/lab` |
1830
+ | **Gym tab** | → `/gym` (only visible when `gymEnabled: true`) |
1831
+ | **Marketplace link** | → `/marketplace` |
1832
+ | **Admin button (⚙)** | → `/admin` |
1833
+ | **User Guide button** | → `/user-guide` — this document |
1834
+ | **Monitor button** | → `/monitor` — setup checklist + live dashboard |
1835
+ | **Mini Bar button** | Opens a compact floating popup window (440×460) at `/mini`. A lightweight chat interface you can keep open while working — has agent selection, @mention, send, and basic chat. Useful as a quick-access sidebar. |
1836
+ | **Theme toggle** | Switches between light and dark mode. Persists across sessions via localStorage. |
1837
+
1838
+ ---
1839
+
1840
+ # Appendix B: Dashboard & Health
1841
+
1842
+ | Action | API | MCP |
1843
+ |--------|-----|-----|
1844
+ | Full dashboard | `GET /api/dashboard` | `get_dashboard` |
1845
+ | | Returns all agents, channels, accounts, uptime | *(no params)* |
1846
+ | Health check | `GET /health` | `health_check` |
1847
+ | | Returns `{ status: "ok" }` | *(no params)* |
1848
+
1849
+ ---
1850
+
1851
+ # Appendix C: Webhook
1852
+
1853
+ External systems can trigger agent messages via webhook:
1854
+
1855
+ | Action | API | MCP |
1856
+ |--------|-----|-----|
1857
+ | Send webhook | `POST /webhook/:agentId` | `send_webhook` |
1858
+ | | **Headers:** `x-webhook-secret: secret` (optional) | **Params:** `agentId`, `text`, `secret?`, `channel?`, `chatId?` |
1859
+ | | **Body:** `{ text, channel?, chatId? }` | |
1860
+
1861
+ ---
1862
+
1863
+ # Appendix D: Complete MCP Tool Index
1864
+
1865
+ Quick reference — all MCP tools alphabetically:
1866
+
1867
+ | # | Tool | Category |
1868
+ |---|------|----------|
1869
+ | 1 | `add_account` | Accounts |
1870
+ | 2 | `add_agent_route` | Channels |
1871
+ | 3 | `add_monitored_chat` | Channels |
1872
+ | 4 | `add_mcp_to_registry` | Marketplace |
1873
+ | 5 | `assign_to_agent` | Marketplace |
1874
+ | 6 | `browse_dirs` | Utilities |
1875
+ | 7 | `browse_registry` | Marketplace |
1876
+ | 8 | `check_account_status` | Accounts |
1877
+ | 9 | `check_app_health` | Apps |
1878
+ | 10 | `clear_memory_context` | Memory |
1879
+ | 11 | `clear_model` | Model |
1880
+ | 12 | `create_agent` | Agents |
1881
+ | -- | `create_gym_card` | AI Gym |
1882
+ | -- | `create_gym_guide` | AI Gym |
1883
+ | 13 | `create_app` | Apps |
1884
+ | 14 | `create_cron` | Cron |
1885
+ | 15 | `create_goal` | Goals |
1886
+ | 16 | `create_mcp_connection` | MCPs |
1887
+ | 17 | `create_initiative` | Projects |
1888
+ | 18 | `create_project` | Tasks |
1889
+ | 19 | `create_prompt` | Marketplace |
1890
+ | 19 | `create_skill` | Skills |
1891
+ | 20 | `create_task` | Tasks |
1892
+ | 21 | `delegate_message` | Chat |
1893
+ | 22 | `delete_account` | Accounts |
1894
+ | 23 | `delete_agent` | Agents |
1895
+ | -- | `delete_gym_program` | AI Gym |
1896
+ | 24 | `delete_app` | Apps |
1897
+ | 25 | `delete_cron` | Cron |
1898
+ | 26 | `delete_goal` | Goals |
1899
+ | 27 | `delete_mcp_connection` | MCPs |
1900
+ | -- | `delete_project` | Projects |
1901
+ | 28 | `delete_mcp_key` | MCPs |
1902
+ | 29 | `delete_session` | Sessions |
1903
+ | -- | `create_session_tab` | Session Tabs |
1904
+ | -- | `delete_session_tab` | Session Tabs |
1905
+ | 30 | `delete_task` | Tasks |
1906
+ | -- | `execute_project` | Projects |
1907
+ | -- | `dismiss_gym_card` | AI Gym |
1908
+ | 31 | `download_agent_file` | Files |
1909
+ | 32 | `get_activity` | Activity |
1910
+ | 33 | `get_agent` | Agents |
1911
+ | -- | `get_agent_activity_summary` | AI Gym |
1912
+ | 34 | `get_agent_cost` | Cost |
1913
+ | 35 | `get_agent_instructions` | Agents |
1914
+ | 36 | `get_agent_logs` | Activity |
1915
+ | 37 | `get_agent_memory` | Memory |
1916
+ | -- | `get_session_tab_history` | Session Tabs |
1917
+ | 38 | `get_agent_registry` | Agents |
1918
+ | 39 | `get_agent_skills` | Skills |
1919
+ | 40 | `get_all_costs` | Cost |
1920
+ | 41 | `get_all_tasks` | Tasks |
1921
+ | 42 | `get_changelog` | Utilities |
1922
+ | 43 | `get_chat_job_raw` | Chat |
1923
+ | 44 | `get_cron_history` | Cron |
1924
+ | 45 | `get_dashboard` | Dashboard |
1925
+ | -- | `get_dimension_history` | AI Gym |
1926
+ | 46 | `get_goal_history` | Goals |
1927
+ | -- | `get_heartbeat_history` | Heartbeat |
1928
+ | -- | `get_gym_config` | AI Gym |
1929
+ | -- | `get_gym_feed` | AI Gym |
1930
+ | -- | `get_gym_program` | AI Gym |
1931
+ | -- | `get_gym_progress` | AI Gym |
1932
+ | -- | `get_learner_profile` | AI Gym |
1933
+ | -- | `get_mcp_catalog` | MCPs |
1934
+ | 49 | `get_model` | Model |
1935
+ | -- | `get_org_skills` | Skills |
1936
+ | -- | `get_plan` | AI Gym |
1937
+ | -- | `get_platform_agents` | Lab |
1938
+ | -- | `get_project` | Projects |
1939
+ | -- | `get_project_status` | Projects |
1940
+ | -- | `get_profile` | Profile |
1941
+ | -- | `get_prompt_trigger` | Marketplace |
1942
+ | 53 | `get_saas_config` | SaaS |
1943
+ | 54 | `get_service_config` | Config |
1944
+ | 55 | `get_sticky_routing` | Channels |
1945
+ | 56 | `get_task_stats` | Tasks |
1946
+ | 57 | `get_wiki_sync_history` | Wiki |
1947
+ | 58 | `health_check` | Dashboard |
1948
+ | -- | `import_program` | AI Gym |
1949
+ | 59 | `import_skills` | Marketplace |
1950
+ | 60 | `install_registry_item` | Marketplace |
1951
+ | 61 | `install_xbar` | Utilities |
1952
+ | -- | `link_to_project` | Projects |
1953
+ | 62 | `list_agents` | Agents |
1954
+ | -- | `list_gym_cards` | AI Gym |
1955
+ | -- | `list_gym_guides` | AI Gym |
1956
+ | -- | `list_gym_programs` | AI Gym |
1957
+ | 63 | `list_agent_files` | Files |
1958
+ | 64 | `list_apps` | Apps |
1959
+ | 65 | `list_automations` | Automations |
1960
+ | 66 | `list_channels` | Channels |
1961
+ | 67 | `list_mcp_connections` | MCPs |
1962
+ | 68 | `list_mcp_keys` | MCPs |
1963
+ | 69 | `list_mcps` | MCPs |
1964
+ | 70 | `list_paired_senders` | Pairing |
1965
+ | -- | `list_projects` | Projects |
1966
+ | 71 | `list_sessions` | Sessions |
1967
+ | -- | `list_session_tabs` | Session Tabs |
1968
+ | 72 | `list_tasks` | Tasks |
1969
+ | 73 | `list_accounts` | Accounts |
1970
+ | 74 | `pair_sender` | Pairing |
1971
+ | -- | `pause_project` | Projects |
1972
+ | 75 | `publish_to_saas` | SaaS |
1973
+ | 76 | `recover_agent` | Agents |
1974
+ | -- | `run_gym_digest` | AI Gym |
1975
+ | -- | `rename_session_tab` | Session Tabs |
1976
+ | 77 | `remove_agent_route` | Channels |
1977
+ | 78 | `remove_monitored_chat` | Channels |
1978
+ | 79 | `reset_session` | Sessions |
1979
+ | 80 | `save_mcp_key` | MCPs |
1980
+ | 81 | `scan_skills` | Marketplace |
1981
+ | -- | `search_agent_logs` | AI Gym |
1982
+ | 82 | `search_memory` | Memory |
1983
+ | 83 | `send_message` | Chat |
1984
+ | -- | `snapshot_dimensions` | AI Gym |
1985
+ | 84 | `send_webhook` | Webhook |
1986
+ | 85 | `set_model` | Model |
1987
+ | 86 | `set_platform_default` | Marketplace |
1988
+ | 87 | `set_prompt_trigger` | Marketplace |
1989
+ | 88 | `start_account_login` | Accounts |
1990
+ | 89 | `start_stream` | Chat |
1991
+ | 90 | `stop_chat_job` | Chat |
1992
+ | 91 | `submit_login_code` | Accounts |
1993
+ | 92 | `test_provider` | Service Config / Multi-Provider |
1994
+ | 93 | `test_saas_connection` | SaaS |
1995
+ | 94 | `toggle_cron` | Cron |
1996
+ | 94 | `toggle_goal` | Goals |
1997
+ | 95 | `trigger_cron` | Cron |
1998
+ | 96 | `trigger_goal` | Goals |
1999
+ | 97 | `trigger_heartbeat` | Heartbeat |
2000
+ | 98 | `trigger_wiki_sync` | Wiki |
2001
+ | 99 | `unpair_sender` | Pairing |
2002
+ | -- | `unlink_from_project` | Projects |
2003
+ | 100 | `update_agent` | Agents |
2004
+ | -- | `update_gym_program` | AI Gym |
2005
+ | -- | `update_gym_progress` | AI Gym |
2006
+ | -- | `update_learner_profile` | AI Gym |
2007
+ | 101 | `update_app` | Apps |
2008
+ | 102 | `update_channel` | Channels |
2009
+ | -- | `update_plan` | AI Gym |
2010
+ | -- | `update_profile` | Profile |
2011
+ | -- | `update_project` | Projects |
2012
+ | 103 | `update_saas_config` | SaaS |
2013
+ | 104 | `update_service_config` | Config |
2014
+ | 105 | `update_task` | Tasks |
2015
+ | 106 | `upload_file` | Files |
2016
+ | 107 | `whoami` | Accounts |