pmx-canvas 0.8.2 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/.github/extensions/pmx-canvas/runtime.json +1 -1
  2. package/.github/extensions/pmx-canvas/tools.json +601 -22
  3. package/CHANGELOG.md +59 -0
  4. package/Readme.md +131 -532
  5. package/dist/canvas/global.css +2724 -476
  6. package/dist/canvas/index.js +168 -107
  7. package/dist/canvas/mcp-app.html +2899 -596
  8. package/dist/json-render/index.js +20 -20
  9. package/dist/types/client/canvas/BarHint.d.ts +12 -2
  10. package/dist/types/client/canvas/BoardLinkDialog.d.ts +3 -1
  11. package/dist/types/client/canvas/BoardPinButton.d.ts +10 -0
  12. package/dist/types/client/canvas/BoardSwitcher.d.ts +1 -1
  13. package/dist/types/client/canvas/CanvasViewport.d.ts +1 -1
  14. package/dist/types/client/canvas/CommandBar.d.ts +3 -4
  15. package/dist/types/client/canvas/ConnectionBanner.d.ts +2 -1
  16. package/dist/types/client/canvas/ContextChip.d.ts +3 -0
  17. package/dist/types/client/canvas/CrossBoardReferences.d.ts +5 -0
  18. package/dist/types/client/canvas/EdgeLayer.d.ts +14 -3
  19. package/dist/types/client/canvas/EmptyState.d.ts +4 -4
  20. package/dist/types/client/canvas/HomeGraphView.d.ts +2 -0
  21. package/dist/types/client/canvas/HomeMapView.d.ts +1 -0
  22. package/dist/types/client/canvas/HomeReviewView.d.ts +6 -0
  23. package/dist/types/client/canvas/HomeView.d.ts +9 -7
  24. package/dist/types/client/canvas/KnowledgeDialog.d.ts +4 -0
  25. package/dist/types/client/canvas/LifecycleChrome.d.ts +5 -0
  26. package/dist/types/client/canvas/LifecycleFields.d.ts +7 -0
  27. package/dist/types/client/canvas/LifecyclePanel.d.ts +1 -0
  28. package/dist/types/client/canvas/MemoryInspector.d.ts +7 -0
  29. package/dist/types/client/canvas/NearPinLayer.d.ts +14 -0
  30. package/dist/types/client/canvas/NodeContextMark.d.ts +40 -7
  31. package/dist/types/client/canvas/RelationPresetsDialog.d.ts +4 -0
  32. package/dist/types/client/canvas/RelationsPanel.d.ts +4 -0
  33. package/dist/types/client/canvas/SessionPanel.d.ts +2 -0
  34. package/dist/types/client/canvas/canvas-area.d.ts +1 -1
  35. package/dist/types/client/canvas/graph-geometry.d.ts +27 -0
  36. package/dist/types/client/canvas/graph-model.d.ts +37 -0
  37. package/dist/types/client/canvas/memory-layout.d.ts +23 -0
  38. package/dist/types/client/canvas/use-chrome-height.d.ts +2 -0
  39. package/dist/types/client/canvas/use-focus-trap.d.ts +1 -0
  40. package/dist/types/client/canvas/use-memory-graph.d.ts +8 -0
  41. package/dist/types/client/canvas/use-pan-zoom.d.ts +4 -1
  42. package/dist/types/client/icons.d.ts +0 -10
  43. package/dist/types/client/nodes/AxStepControls.d.ts +1 -1
  44. package/dist/types/client/nodes/InlineMarkdownEditor.d.ts +4 -4
  45. package/dist/types/client/nodes/MarkdownNode.d.ts +5 -1
  46. package/dist/types/client/nodes/McpAppNode.d.ts +4 -4
  47. package/dist/types/client/nodes/viewer-runtime-state.d.ts +1 -1
  48. package/dist/types/client/state/boards-store.d.ts +81 -9
  49. package/dist/types/client/state/canvas-store.d.ts +14 -1
  50. package/dist/types/client/state/context-chip-store.d.ts +22 -0
  51. package/dist/types/client/state/context-status-store.d.ts +35 -0
  52. package/dist/types/client/state/human-store.d.ts +2 -1
  53. package/dist/types/client/state/intent-bridge.d.ts +11 -8
  54. package/dist/types/client/state/knowledge-store.d.ts +22 -0
  55. package/dist/types/client/state/near-pin-store.d.ts +44 -1
  56. package/dist/types/client/state/presence-store.d.ts +4 -4
  57. package/dist/types/client/state/presentation.d.ts +28 -0
  58. package/dist/types/client/state/relation-store.d.ts +10 -0
  59. package/dist/types/client/state/session-store.d.ts +41 -2
  60. package/dist/types/client/state/workspace-settings.d.ts +7 -0
  61. package/dist/types/client/types.d.ts +13 -1
  62. package/dist/types/client/utils/keyboard.d.ts +2 -0
  63. package/dist/types/client/utils/time-ago.d.ts +4 -0
  64. package/dist/types/mcp/context-uri-template.d.ts +3 -1
  65. package/dist/types/server/agent-presence.d.ts +10 -3
  66. package/dist/types/server/ax-context.d.ts +1 -1
  67. package/dist/types/server/canvas-db.d.ts +30 -7
  68. package/dist/types/server/canvas-operations.d.ts +24 -2
  69. package/dist/types/server/canvas-provenance.d.ts +22 -2
  70. package/dist/types/server/canvas-serialization.d.ts +2 -0
  71. package/dist/types/server/canvas-state.d.ts +93 -15
  72. package/dist/types/server/canvas-validation.d.ts +1 -1
  73. package/dist/types/server/context-brief.d.ts +94 -6
  74. package/dist/types/server/context-reads.d.ts +33 -7
  75. package/dist/types/server/edit-summary.d.ts +20 -0
  76. package/dist/types/server/index.d.ts +71 -10
  77. package/dist/types/server/knowledge-lifecycle.d.ts +221 -0
  78. package/dist/types/server/lifecycle-status.d.ts +10 -0
  79. package/dist/types/server/memory-graph.d.ts +9 -0
  80. package/dist/types/server/mutation-history.d.ts +2 -0
  81. package/dist/types/server/operations/ops/ax-shared.d.ts +1 -1
  82. package/dist/types/server/operations/ops/boards.d.ts +2 -1
  83. package/dist/types/server/operations/ops/lifecycle.d.ts +2 -0
  84. package/dist/types/server/operations/ops/memory-graph.d.ts +2 -0
  85. package/dist/types/server/operations/ops/nodes.d.ts +5 -0
  86. package/dist/types/server/operations/ops/query.d.ts +23 -0
  87. package/dist/types/server/operations/registry.d.ts +1 -0
  88. package/dist/types/server/placement.d.ts +7 -0
  89. package/dist/types/server/scope-fence.d.ts +2 -1
  90. package/dist/types/server/spatial-analysis.d.ts +6 -3
  91. package/dist/types/server/tour-control.d.ts +32 -0
  92. package/dist/types/server/wiki-links.d.ts +14 -0
  93. package/dist/types/server/workbench-auth.d.ts +2 -0
  94. package/dist/types/shared/agent-context.d.ts +2 -0
  95. package/dist/types/shared/agent-presence.d.ts +15 -12
  96. package/dist/types/shared/auto-arrange.d.ts +1 -0
  97. package/dist/types/shared/boards.d.ts +4 -4
  98. package/dist/types/shared/knowledge-lifecycle.d.ts +41 -0
  99. package/dist/types/shared/knowledge-presets.d.ts +6 -0
  100. package/dist/types/shared/lifecycle-status.d.ts +24 -0
  101. package/dist/types/shared/memory-graph.d.ts +53 -0
  102. package/dist/types/shared/relations.d.ts +68 -0
  103. package/dist/types/shared/semantic-attention.d.ts +2 -0
  104. package/dist/types/shared/tour.d.ts +38 -0
  105. package/dist/types/shared/workspace-settings.d.ts +11 -0
  106. package/docs/RELEASE.md +21 -3
  107. package/docs/adr-001-bun-only-runtime.md +7 -1
  108. package/docs/adr-002-shared-product-separate-runtimes.md +93 -0
  109. package/docs/api-reference.md +109 -0
  110. package/docs/ax-host-adapter-contract.md +1 -1
  111. package/docs/ax-state-contract.md +5 -4
  112. package/docs/cli.md +153 -15
  113. package/docs/demos/pmx-canvas-demo.mp4 +0 -0
  114. package/docs/design/AgentContext.dc.html +3 -3
  115. package/docs/design/BoardPins.dc.html +37 -22
  116. package/docs/design/Categories.dc.html +208 -0
  117. package/docs/design/CategoryEditor.dc.html +33 -0
  118. package/docs/design/Chrome.dc.html +52 -9
  119. package/docs/design/ContextChip.dc.html +224 -0
  120. package/docs/design/ContextChip600.dc.html +136 -0
  121. package/docs/design/EmptyState.dc.html +45 -0
  122. package/docs/design/Flows.dc.html +23 -1
  123. package/docs/design/HeaderMarks.dc.html +183 -0
  124. package/docs/design/Home.dc.html +19 -1
  125. package/docs/design/HomeGraph.dc.html +86 -202
  126. package/docs/design/HomeMap.dc.html +23 -1
  127. package/docs/design/HomeTeam.dc.html +32 -14
  128. package/docs/design/Lifecycle.dc.html +22 -0
  129. package/docs/design/Lifecycle600.dc.html +18 -0
  130. package/docs/design/LifecycleVariants.dc.html +157 -0
  131. package/docs/design/LinkAuthorship.dc.html +139 -0
  132. package/docs/design/LinksChanged.dc.html +203 -0
  133. package/docs/design/LinksOptions.dc.html +137 -0
  134. package/docs/design/LinksOptions600.dc.html +134 -0
  135. package/docs/design/NearPin.dc.html +9 -10
  136. package/docs/design/Pane600.dc.html +4 -3
  137. package/docs/design/Relations.dc.html +3 -2
  138. package/docs/design/Restore.dc.html +152 -0
  139. package/docs/design/SeeChange.dc.html +267 -0
  140. package/docs/design/Uses.dc.html +12 -6
  141. package/docs/design/canvas.json +146 -19
  142. package/docs/design.md +449 -16
  143. package/docs/environment.md +0 -1
  144. package/docs/evals/curation-effect.md +128 -0
  145. package/docs/http-api.md +459 -37
  146. package/docs/mcp.md +146 -18
  147. package/docs/node-types.md +58 -3
  148. package/docs/plans/design-gaps-2026-10-08.md +53 -0
  149. package/docs/plans/plan-009-tech-debt-backlog.md +379 -0
  150. package/docs/plans/plan-016-context-made-visible-wave-1.md +150 -5
  151. package/docs/plans/plan-017-knowledge-categories-and-lifecycle.md +175 -0
  152. package/docs/plans/plan-018-connected-memory-wave-2.md +594 -0
  153. package/docs/plans/plan-019-post-0.9-roadmap.md +198 -0
  154. package/docs/product-context-vision-2026-09.md +17 -1
  155. package/docs/product-vision-2026-09.md +1082 -43
  156. package/docs/product-vision-review-2026-09.md +13 -1
  157. package/docs/screenshots/workbench-live-dark.png +0 -0
  158. package/docs/screenshots/workbench-live-light.png +0 -0
  159. package/docs/sdk.md +62 -2
  160. package/package.json +1 -1
  161. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
  162. package/plugins/pmx-canvas/plugin.json +1 -1
  163. package/plugins/pmx-canvas/runtime.json +1 -1
  164. package/plugins/pmx-canvas/tools.json +601 -22
  165. package/skills/pmx-canvas/SKILL.md +216 -42
  166. package/skills/pmx-canvas/evals/evals.json +224 -0
  167. package/skills/pmx-canvas/references/full-reference.md +120 -21
  168. package/skills/pmx-canvas/references/github-copilot-app-adapter.md +2 -2
  169. package/skills/pmx-canvas/references/importing-context.md +132 -0
  170. package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
  171. package/skills/pmx-canvas/references/tours-and-recording.md +16 -1
  172. package/skills/pmx-canvas-testing/SKILL.md +20 -0
  173. package/src/cli/agent.ts +2 -0
  174. package/src/cli/commands/ax.ts +12 -0
  175. package/src/cli/commands/boards.ts +88 -11
  176. package/src/cli/commands/edges.ts +28 -0
  177. package/src/cli/commands/groups.ts +7 -0
  178. package/src/cli/commands/nodes.ts +1 -0
  179. package/src/cli/commands/query.ts +34 -2
  180. package/src/cli/commands/record.ts +199 -48
  181. package/src/cli/index.ts +6 -1
  182. package/src/client/App.tsx +177 -70
  183. package/src/client/canvas/AttentionHistory.tsx +0 -2
  184. package/src/client/canvas/BarHint.tsx +40 -2
  185. package/src/client/canvas/BoardCopyDialog.tsx +1 -1
  186. package/src/client/canvas/BoardFolderDialog.tsx +7 -7
  187. package/src/client/canvas/BoardLinkDialog.tsx +138 -33
  188. package/src/client/canvas/BoardPinButton.tsx +33 -0
  189. package/src/client/canvas/BoardSwitcher.tsx +26 -40
  190. package/src/client/canvas/CanvasNode.tsx +360 -237
  191. package/src/client/canvas/CanvasViewport.tsx +45 -7
  192. package/src/client/canvas/CommandBar.tsx +29 -23
  193. package/src/client/canvas/CommandPalette.tsx +5 -12
  194. package/src/client/canvas/ConnectionBanner.tsx +3 -3
  195. package/src/client/canvas/ContextChip.tsx +296 -0
  196. package/src/client/canvas/ContextMenu.tsx +63 -5
  197. package/src/client/canvas/CrossBoardReferences.tsx +60 -0
  198. package/src/client/canvas/EdgeLayer.tsx +339 -76
  199. package/src/client/canvas/EmptyState.tsx +33 -18
  200. package/src/client/canvas/ExpandedNodeOverlay.tsx +72 -40
  201. package/src/client/canvas/ExternalWriters.tsx +57 -42
  202. package/src/client/canvas/HomeGraphView.tsx +942 -0
  203. package/src/client/canvas/HomeMapView.tsx +641 -0
  204. package/src/client/canvas/HomeReviewView.tsx +167 -0
  205. package/src/client/canvas/HomeView.tsx +687 -160
  206. package/src/client/canvas/IntentLayer.tsx +19 -12
  207. package/src/client/canvas/KnowledgeDialog.tsx +488 -0
  208. package/src/client/canvas/LifecycleChrome.tsx +133 -0
  209. package/src/client/canvas/LifecycleFields.tsx +91 -0
  210. package/src/client/canvas/LifecyclePanel.tsx +543 -0
  211. package/src/client/canvas/MemoryInspector.tsx +104 -0
  212. package/src/client/canvas/Minimap.tsx +3 -3
  213. package/src/client/canvas/NearPinLayer.tsx +187 -0
  214. package/src/client/canvas/NodeContextMark.tsx +175 -97
  215. package/src/client/canvas/Presentation.tsx +23 -57
  216. package/src/client/canvas/RelationPresetsDialog.tsx +413 -0
  217. package/src/client/canvas/RelationsPanel.tsx +82 -0
  218. package/src/client/canvas/SelectionBar.tsx +3 -6
  219. package/src/client/canvas/SessionPanel.tsx +90 -50
  220. package/src/client/canvas/SessionReceipt.tsx +311 -39
  221. package/src/client/canvas/ShortcutOverlay.tsx +1 -1
  222. package/src/client/canvas/SnapshotPanel.tsx +27 -36
  223. package/src/client/canvas/ToolRail.tsx +367 -192
  224. package/src/client/canvas/TopBar.tsx +354 -124
  225. package/src/client/canvas/canvas-area.ts +10 -3
  226. package/src/client/canvas/graph-geometry.ts +195 -0
  227. package/src/client/canvas/graph-model.ts +254 -0
  228. package/src/client/canvas/memory-layout.ts +106 -0
  229. package/src/client/canvas/use-chrome-height.ts +20 -0
  230. package/src/client/canvas/use-focus-trap.ts +31 -5
  231. package/src/client/canvas/use-memory-graph.ts +58 -0
  232. package/src/client/canvas/use-node-drag.ts +2 -1
  233. package/src/client/canvas/use-pan-zoom.ts +64 -7
  234. package/src/client/icons.tsx +0 -63
  235. package/src/client/mcp-app/style.css +0 -6
  236. package/src/client/nodes/AxStepControls.tsx +74 -50
  237. package/src/client/nodes/BoardNode.tsx +5 -1
  238. package/src/client/nodes/ContextNode.tsx +18 -11
  239. package/src/client/nodes/ExtAppFrame.tsx +6 -3
  240. package/src/client/nodes/FileNode.tsx +46 -42
  241. package/src/client/nodes/HtmlNode.tsx +32 -0
  242. package/src/client/nodes/ImageNode.tsx +1 -1
  243. package/src/client/nodes/InlineFormatBar.tsx +6 -9
  244. package/src/client/nodes/InlineMarkdownEditor.tsx +56 -17
  245. package/src/client/nodes/MarkdownNode.tsx +377 -109
  246. package/src/client/nodes/McpAppNode.tsx +50 -20
  247. package/src/client/nodes/MdFormatBar.tsx +21 -18
  248. package/src/client/nodes/PromptNode.tsx +1 -1
  249. package/src/client/nodes/ResponseNode.tsx +1 -1
  250. package/src/client/nodes/viewer-runtime-state.ts +54 -22
  251. package/src/client/state/attention-bridge.ts +64 -15
  252. package/src/client/state/boards-store.ts +193 -39
  253. package/src/client/state/canvas-store.ts +99 -12
  254. package/src/client/state/context-chip-store.ts +70 -0
  255. package/src/client/state/context-status-store.ts +53 -0
  256. package/src/client/state/human-store.ts +13 -7
  257. package/src/client/state/intent-bridge.ts +51 -30
  258. package/src/client/state/knowledge-store.ts +43 -0
  259. package/src/client/state/near-pin-store.ts +115 -6
  260. package/src/client/state/presence-store.ts +7 -10
  261. package/src/client/state/presentation.ts +91 -0
  262. package/src/client/state/relation-store.ts +81 -0
  263. package/src/client/state/session-store.ts +144 -18
  264. package/src/client/state/sse-bridge.ts +235 -32
  265. package/src/client/state/workspace-settings.ts +11 -0
  266. package/src/client/theme/global.css +2724 -476
  267. package/src/client/types.ts +12 -0
  268. package/src/client/utils/keyboard.ts +10 -0
  269. package/src/client/utils/time-ago.ts +14 -0
  270. package/src/json-render/renderer/index.tsx +31 -0
  271. package/src/mcp/canvas-app.ts +12 -2
  272. package/src/mcp/context-uri-template.ts +7 -4
  273. package/src/mcp/server.ts +63 -41
  274. package/src/mcp/workbench-app.ts +39 -6
  275. package/src/server/agent-presence.ts +128 -28
  276. package/src/server/ax-context.ts +27 -13
  277. package/src/server/board-export.ts +12 -1
  278. package/src/server/canvas-db.ts +331 -42
  279. package/src/server/canvas-operations.ts +195 -83
  280. package/src/server/canvas-provenance.ts +53 -22
  281. package/src/server/canvas-serialization.ts +2 -0
  282. package/src/server/canvas-state.ts +950 -122
  283. package/src/server/canvas-validation.ts +9 -2
  284. package/src/server/context-brief.ts +345 -38
  285. package/src/server/context-reads.ts +178 -30
  286. package/src/server/demo-state.json +355 -24
  287. package/src/server/edit-summary.ts +74 -0
  288. package/src/server/html-surface.ts +8 -1
  289. package/src/server/index.ts +181 -11
  290. package/src/server/knowledge-lifecycle.ts +304 -0
  291. package/src/server/lifecycle-status.ts +232 -0
  292. package/src/server/memory-graph.ts +166 -0
  293. package/src/server/mutation-history.ts +18 -6
  294. package/src/server/operations/composites.ts +32 -11
  295. package/src/server/operations/http.ts +7 -2
  296. package/src/server/operations/index.ts +4 -0
  297. package/src/server/operations/mcp.ts +26 -1
  298. package/src/server/operations/ops/ax-presence.ts +1 -1
  299. package/src/server/operations/ops/ax-read.ts +57 -6
  300. package/src/server/operations/ops/ax-timeline.ts +28 -2
  301. package/src/server/operations/ops/backup.ts +5 -3
  302. package/src/server/operations/ops/batch.ts +35 -4
  303. package/src/server/operations/ops/boards.ts +188 -47
  304. package/src/server/operations/ops/canvas-wire.ts +31 -1
  305. package/src/server/operations/ops/edges.ts +36 -2
  306. package/src/server/operations/ops/groups.ts +6 -1
  307. package/src/server/operations/ops/lifecycle.ts +262 -0
  308. package/src/server/operations/ops/memory-graph.ts +45 -0
  309. package/src/server/operations/ops/nodes.ts +107 -24
  310. package/src/server/operations/ops/query.ts +281 -68
  311. package/src/server/operations/ops/snapshots.ts +73 -1
  312. package/src/server/operations/ops/validate.ts +5 -1
  313. package/src/server/operations/ops/viewport.ts +97 -3
  314. package/src/server/operations/registry.ts +74 -25
  315. package/src/server/placement.ts +29 -0
  316. package/src/server/scope-fence.ts +78 -6
  317. package/src/server/server.ts +115 -16
  318. package/src/server/spatial-analysis.ts +48 -23
  319. package/src/server/tour-control.ts +82 -0
  320. package/src/server/wiki-links.ts +137 -0
  321. package/src/server/workbench-auth.ts +11 -0
  322. package/src/shared/agent-context.ts +3 -0
  323. package/src/shared/agent-presence.ts +15 -15
  324. package/src/shared/auto-arrange.ts +2 -0
  325. package/src/shared/boards.ts +4 -4
  326. package/src/shared/knowledge-lifecycle.ts +22 -0
  327. package/src/shared/knowledge-presets.ts +80 -0
  328. package/src/shared/lifecycle-status.ts +26 -0
  329. package/src/shared/memory-graph.ts +74 -0
  330. package/src/shared/relations.ts +98 -0
  331. package/src/shared/semantic-attention.ts +15 -1
  332. package/src/shared/tour.ts +23 -5
  333. package/src/shared/workspace-settings.ts +13 -0
  334. package/dist/types/client/canvas/ContextPinBar.d.ts +0 -1
  335. package/dist/types/client/canvas/FocusFieldLayer.d.ts +0 -1
  336. package/dist/types/client/canvas/kind-colors.d.ts +0 -3
  337. package/dist/types/server/agent-context.d.ts +0 -22
  338. package/src/client/canvas/ContextPinBar.tsx +0 -25
package/Readme.md CHANGED
@@ -1,592 +1,191 @@
1
1
  # pmx-canvas
2
2
 
3
- pmx-canvas is a visual workspace for planning, discovery, analysis, coordination,
4
- and orchestrating work with agents—from exploring an idea to directing its
5
- execution and carrying the learning forward.
6
-
7
- **The board is your extended memory and your agent's working memory.** Use it
8
- to research, analyze, work with dashboards, and start or plan coding and other
9
- knowledge work—not just to prepare context for an agent. In the [long-term vision](docs/product-vision-2026-09.md#the-one-line-vision)
10
- your boards link into a wiki you can see as a map, bringing useful understanding
11
- back into whatever you do next, and any board can be shared or presented.
12
-
13
- **A moldable canvas for agent-assisted thinking.** An infinite 2D surface
14
- where files, plans, status, charts, fetched web pages, annotations, code
15
- diffs, and diagrams live side by side. Every node carries its own renderer; agents
16
- (and you) build new views in the middle of a session — even streaming a
17
- structured panel into place as they generate it — not as a separate tooling
18
- project. Pin what matters and the agent reads your spatial curation as
19
- structured context.
20
-
21
- **The board is the presentation.** Click **Present** to step through a saved tour
22
- (or groups in reading order), with chrome hidden and smooth camera moves.
23
- Optionally capture that same tour with
24
- `pmx-canvas record --mode deterministic --present --output tour.mp4`. See the
25
- [tour model and CLI walkthrough](docs/cli.md#tour-and-presentation).
26
-
27
- <p align="center">
28
- <img src="docs/screenshots/workbench-live-dark.png" alt="Live multi-agent workbench — dark theme: two agents on the board, review cards, an architecture diagram, and the writers pill" width="49%" />
29
- <img src="docs/screenshots/workbench-live-light.png" alt="Live multi-agent workbench — light theme" width="49%" />
30
- </p>
31
- <p align="center"><sub>A real working board: two agents attached (the writers pill, top right), review cards they co-wrote, and a mermaid architecture diagram — dark and light themes.</sub></p>
32
-
33
- <p align="center">
34
- <img src="docs/screenshots/demo-workbench-dark.png" alt="Structured workbench demo — dark theme" width="49%" />
35
- <img src="docs/screenshots/demo-workbench-light.png" alt="Structured workbench demo — light theme" width="49%" />
36
- </p>
37
-
38
- PMX Canvas is a collaborative spatial workspace that humans and agents share
39
- in real time. Either side adds material; the human curates spatial structure
40
- (grouping, positioning, pinning); the agent reads that curation through
41
- `canvas://pinned-context` and acts on it. Spatial arrangement is
42
- communication — proximity means relatedness, pinning means *focus here*.
43
-
44
- The database holds many named boards. **Home is the library view, not a board**:
45
- it lists recent boards and nested category paths (up to eight 60-character
46
- segments). Empty folders are not independent objects; they exist only while a
47
- board is filed beneath them. Agents can explicitly open/switch boards; deletion
48
- remains human-only. Creating a board or a copy from reusable cards leaves it
49
- inactive. Agents open its returned ID before writing; this also switches the
50
- shared workbench the human sees. Agents may list, read, rename, categorize, and
51
- search boards without switching. Home
52
- provides a copy-preview dialog; an open board's command palette offers a
53
- board-link picker. Neither depends on native browser prompts.
54
-
55
- ## Main features
56
-
57
- ### 01 / Curate
58
-
59
- Drag, group, arrange, and **pin** nodes spatially. Connect nodes with typed
60
- edges — flow, depends-on, relation, references — drawn as smooth curves that
61
- leave each card perpendicular to its border and bend toward their target.
62
- Edges stay editable in place: double-click one to relabel, retype, restyle, or
63
- delete it, or click it and press Delete. Curation is the channel
64
- from human intent to agent context — the agent reads `canvas://pinned-context`
65
- and `canvas://spatial-context` (proximity clusters, reading order, pinned
66
- neighborhoods) and uses your layout to ground its next action.
67
-
68
- ### 02 / Mix any data source
69
-
70
- Files, web pages, screenshots, structured panels, charts, diagrams, embedded
71
- MCP Apps, and bundled web artifacts all live on the same surface. A file node
72
- follows the file on disk as the agent edits it — source with line numbers, a
73
- CSV or TSV as a real table, a PDF inline — and can be re-pointed at another
74
- file (patch its `path`) without losing its edges, pins, or position. Anything else binary shows its name
75
- and size rather than decoded gibberish, and a very large text file renders
76
- truncated with a note saying so. Code review has its own node: a unified
77
- diff with per-file headers and colored added and removed lines. Diagrams can
78
- be drawn by hand in Excalidraw or written as plain mermaid text and rendered
79
- on the spot. Context cards, execution ledgers, and agent trace pills round out
80
- the set. Any rich surface — HTML, mermaid, json-render, graph, webpage, or a
81
- web artifact — can be **opened as a site**, full-page in its own browser tab
82
- with one click; the canvas and the tab render the same document. The reach of
83
- the canvas is the union of its [built-in node types](docs/node-types.md) and
84
- **whatever your agent's harness already has access to** — MCP servers, CLIs,
85
- file reads, web fetch, anything on its toolbelt.
86
-
87
- Dropping a PDF or Office document attaches the original (up to 20 MiB). It does
88
- not bundle a converter or automatically launch an agent. Clicking **Ask agent to
89
- import** also authorizes processing by the connected host's tools/model provider;
90
- there is no separate consent confirmation. The agent returns Markdown sections
91
- with references and warnings for review. Multi-card imports are placed together
92
- in a free area, in a group named after the source file. Remote hosts may require
93
- manual transfer; OCR, charts, and host format support are not guaranteed.
94
-
95
- JSON-render panels support bound form state, nested repeats, watchers, and Card
96
- header/footer slots. Form edits remain viewer-local until explicitly submitted;
97
- see [JSON-render nodes](docs/node-types.md#json-render-nodes). Authored iframe cards
98
- can grow with their content and move clear of neighbors, with human-grab deferral
99
- and undoable relocation. This is grow-only height fitting, not shrink-to-content
100
- or camera zoom; see [sizing limits](docs/node-types.md#automatic-sizing-of-authored-iframe-cards).
101
-
102
- ### 03 / Annotate
103
-
104
- Draw freehand marks directly on the canvas to circle, underline, connect, or
105
- call out what matters without turning the markup into another node. Annotations
106
- persist with state and snapshots, can be erased in the browser, and appear to
107
- agents as compact spatial context: target, bounds, and nearby canvas content.
108
-
109
- ### 04 / Control your context
110
-
111
- Steer the agent and see its work, without prompt engineering or copy-paste.
112
- Pin a node in the browser and the MCP server fires a
113
- `notifications/resources/updated` event the agent's harness picks up
114
- immediately — an explicit, low-noise control over what the agent sees next.
115
- Each pinned node then shows whether an agent has read it since you pinned it,
116
- and turns amber with "changed since read" when you edit it after the agent's
117
- last read. Nodes an agent created or edited carry its name until you edit them,
118
- and a pin an agent made carries a violet dot with its reason on hover.
119
-
120
- On top of pins, a host-agnostic **AX (agent-experience) layer** turns the
121
- canvas into a shared workspace between you and the agent:
122
-
123
- - **Agent-native nodes** — most node types can act as interactive controls for
124
- the agent out of the box: a node can focus context, create or update work,
125
- add evidence, request input or approval, or send steering without leaving the
126
- board. The sandboxed surfaces — HTML nodes and MCP apps — stay off until a
127
- node opts in, since their content is author-supplied.
128
- - **Focus** — promote nodes into the agent's active context without moving the viewport.
129
- - **Work items & approval gates** — track visible tasks tied to nodes, and gate
130
- high-impact actions behind a human `pending → approved/rejected` decision. A
131
- linked node shows its work item's status on the title bar, and a live work
132
- board lays the whole queue out by status and keeps itself current — useful
133
- when several agents are working at once.
134
- - **Steering messages & agent-event timeline** — send instructions to the
135
- active session, and read a normalized, bounded timeline of prompts, tool
136
- runs, evidence (logs/diffs/screenshots/test-output), and failures.
137
- - **Node interactions** — eligible nodes emit one capability-gated, validated
138
- interaction envelope from native controls, the sandboxed HTML / MCP-app
139
- bridges (`window.PMX_AX.emit`), or json-render spec actions. The server is the
140
- single trust boundary and clamps sandboxed surfaces to their own node.
141
- - **Elicitations, mode requests, commands & policy** — request structured human
142
- input, propose a plan/execute/autonomous mode transition, invoke registry
143
- commands (`pmx.plan`, `pmx.review`, …), and read a tool/prompt policy.
144
- - **Host capability** — adapters report what the host can do, for diagnostics.
145
-
146
- Recent additions in this layer: a **composer** steers directly from the board
147
- (with a target picker when several agents are connected); the **session panel**
148
- shows work items, approval gates, and a filterable timeline where every row
149
- names its writer; a shared **undo stack** knows whether the human or the agent
150
- made each edit, and undoing an agent's edit tells the agent as steering; a
151
- **scope fence** confines an agent's writes to selected nodes; and grabbing a
152
- node in the browser locks it against agent edits while you hold it. Dialogs,
153
- prompts, and tooltips are all in-canvas — every flow works identically in
154
- embedded browser panes (Copilot, Codex, Claude Code desktop) where native
155
- browser UI doesn't exist.
156
-
157
- Canvas-bound state (focus, work items, approvals, review annotations,
158
- elicitations, mode requests, policy) rides canvas snapshots and restore; the
159
- timeline persists for continuity but is retention-bounded and never restored by a
160
- snapshot. Every primitive is reachable from MCP, the HTTP API, the SDK, and
161
- `pmx-canvas ax …`. The core never depends on any host SDK, so adapters (e.g. the
162
- GitHub Copilot app) map onto the same neutral surfaces without making PMX Canvas
163
- vendor-specific.
164
-
165
- ### 05 / Run several agents on one board
166
-
167
- The canvas is built for more than one writer. Every connected agent is named on
168
- its cursor, its top-bar session chip, and its activity rows, all in the agent
169
- violet (subagents in their own fuchsia) — you always see who is where. Workers roll up under their
170
- orchestrator's chip (`+2 workers`), each session chip has its own End button,
171
- and an idle board with no writers stays byte-clean.
172
-
173
- <p align="center">
174
- <img src="docs/screenshots/multi-agent-live.png" alt="Two agent sessions and three rolled-up workers live on one board — named agent cursors on the cards, per-chip End buttons, the attributed session timeline, and the all-agents composer" width="100%" />
175
- </p>
176
- <p align="center"><sub>Two agent sessions (Claude Code +3 workers, GitHub Copilot) and their cursors live on one board, with the writer-attributed timeline and the all-agents composer.</sub></p>
177
-
178
- Steering is **addressed and reliable**: the composer's picker lists every
179
- connected writer with live pump health (`· polling`, `· 2 queued`), an
180
- addressed steer waits in that agent's delivery queue until the agent claims
181
- and marks it, and broadcasts age out instead of greeting every future
182
- consumer. Each host wakes its own way — the GitHub Copilot extension pumps
183
- steers into real Copilot turns, Codex picks them up through its app-native
184
- heartbeat, and any CLI agent becomes reactive with one command:
3
+ PMX Canvas is a shared board where you and your AI agents collect and present
4
+ the data and evidence behind your work. Curate that material into context for
5
+ your agent's next step, then bring the results back onto the board to review
6
+ and build on. You both add and edit material on the same board, in real time.
185
7
 
186
- ```bash
187
- pmx-canvas pump --consumer amp --exec 'amp -x {message}'
188
- ```
8
+ ## Collect evidence. Curate context. Move work forward.
189
9
 
190
- A failed hand-off is never silently swallowed: the steer stays pending and the
191
- pump exits non-zero. Presence is honest too — "thinking" settles to idle after
192
- silence, tool calls never clobber an explicit phase, and an attached writer
193
- that has never made a spatial write still parks its cursor at its last
194
- activity so it cannot be invisible. Agents coordinate with each other over the
195
- same steering queue (agent-to-agent hand-offs, reviews, and territory splits),
196
- and the `pmx-canvas-orchestration` skill documents the choreography.
197
-
198
- ### 06 / Save
199
-
200
- Spatial state auto-saves to `.pmx-canvas/canvas.db` (debounced ~500 ms) —
201
- git-committable, shareable across machines, and survives both browser
202
- refresh and server restart. Autosave is not a backup: `pmx-canvas backup` and
203
- its optional server-run schedule copy the whole board library, while restore
204
- keeps the replaced database. Backup and scheduling are backend/CLI operations;
205
- there is no Home backup button. A board can also be exported as a self-contained
206
- HTML file. Export previews what is included, omits local file contents unless
207
- explicitly requested, and locks board-link cards because an exported file has
208
- no live target library (the target title is not embedded). Named [snapshots](docs/mcp.md), full
209
- undo/redo, and an auto-detected code graph (JS/TS, Python, Go, Rust) make
210
- the canvas durable rather than throwaway. Stop the server before committing
211
- the DB so SQLite WAL data is checkpointed into the file.
212
-
213
- ### 07 / Any agent
214
-
215
- Harness-agnostic. Drive the canvas from [MCP](docs/mcp.md) (24 tools,
216
- 15 static canvas resources plus one context resource template, change notifications), the [CLI](docs/cli.md), the
217
- [HTTP API](docs/http-api.md), or the [Bun SDK](docs/sdk.md) — all
218
- [environment variables documented here](docs/environment.md). Works with
219
- Claude Code, the GitHub Copilot app and CLI, Codex, Amp, Cursor, Windsurf, or
220
- any agent that can spawn an MCP stdio server, call a CLI, or hit an HTTP
221
- endpoint.
222
-
223
- ### 08 / Native app adapters
224
-
225
- PMX Canvas doesn't just run in a browser tab — it embeds **natively inside the
226
- agent apps you already use**, as a thin adapter layer over the same neutral AX
227
- surfaces (the core never imports a host SDK).
228
-
229
- <p align="center">
230
- <img src="docs/screenshots/github-copilot-app.png" alt="PMX Canvas as a native canvas panel in the GitHub Copilot app" width="100%" />
231
- </p>
232
- <p align="center"><sub>PMX Canvas as a native canvas panel in the GitHub Copilot app.</sub></p>
233
-
234
- <p align="center">
235
- <img src="docs/screenshots/codex-app.png" alt="PMX Canvas workbench in the Codex in-app Browser" width="100%" />
236
- </p>
237
- <p align="center"><sub>The live PMX workbench in the Codex in-app Browser.</sub></p>
238
-
239
- <p align="center">
240
- <img src="docs/screenshots/claude-code-desktop.png" alt="PMX Canvas in the Claude Code desktop app's built-in browser pane, driven over MCP" width="100%" />
241
- </p>
242
- <p align="center"><sub>Claude Code desktop: the workbench in the built-in browser pane, mutated live over MCP.</sub></p>
243
-
244
- <p align="center">
245
- <img src="docs/screenshots/amp-orb-portal.png" alt="PMX Canvas running as an Amp orb service, viewed through the Amp portal in the Volt theme" width="100%" />
246
- </p>
247
- <p align="center"><sub>AMPCode: the canvas as an orb service through the Amp portal (Volt theme).</sub></p>
248
-
249
- - **GitHub Copilot app** — a committed project canvas extension
250
- (`.github/extensions/pmx-canvas/`) opens the live PMX workbench in a native
251
- Copilot panel (light-themed by default to match the app, via the `?theme=`
252
- session override), wakes Copilot when the board sends a steer, injects
253
- pinned/focused AX context on prompt submission, and exposes actions for focus,
254
- work items, approval gates, review annotations, the AX timeline, and
255
- host-capability reporting. Actions stay bound to the server shown by their
256
- panel and are withheld if that server no longer matches the panel workspace.
257
- Install it into any repo with
258
- `pmx-canvas copilot install-extension` (`--dry-run` to preview).
259
- - **Codex app** — native through the Codex in-app Browser (opened to
260
- `/workbench`) plus the PMX MCP server: agents read `canvas://ax-context` /
261
- `canvas_ax_state { action: "get" }` and label Codex-originated focus with
262
- `source: "codex"`. No extension API needed — Codex's two native surfaces
263
- (MCP + in-app Browser) are exactly what the canvas requires.
264
- - **Claude Code desktop app** — the workbench runs in the desktop app's
265
- built-in browser pane alongside the PMX MCP server, same zero-adapter recipe
266
- as Codex: open `http://localhost:4313/workbench?theme=daylight` (or
267
- `?theme=auto` to follow the app's appearance) in the app's browser and the
268
- live board, pins, and Ghost Cursor all work in-panel — themed to match the
269
- pane without changing what other clients see.
270
- - **AMPCode orbs + portal** — run the canvas as an orb service and view the
271
- live workbench through the Amp portal (the `*.onamp.dev` URL ampcode.com
272
- embeds for the thread). Zero configuration: orbs set `AMP_ORB` in the
273
- service environment, and the canvas auto-adapts to the portal's constraints
274
- — it defaults straight to the proxy-safe polling transport (the portal
275
- proxy buffers the live event stream), and renders HTML, graph, json-render,
276
- and app surfaces inline via `srcdoc` because the nested-iframe embed blocks
277
- `src`-URL child iframes (`?transport=sse` and `?iframe-mode=src` override
278
- either behavior when diagnosing). Non-orb buffering proxies get the same
279
- protections via runtime detection: an SSE watchdog that falls back to
280
- polling, and the boot-time iframe probe.
281
-
282
- Any other app browser (the ChatGPT desktop app, an IDE webview, …) works the
283
- same zero-adapter way: open the workbench URL, and add `?theme=<name|auto>` to
284
- give that panel its own session-local default theme.
285
-
286
- The contract is host-agnostic, so a new host plugs in the same way: map its
287
- hooks, canvas, and session APIs onto PMX's AX primitives — no core changes.
288
-
289
- ## Prerequisites
290
-
291
- - [Bun](https://bun.sh) >= 1.4.2
292
-
293
- The published SDK entrypoint is Bun-first. Node.js consumers should use the
294
- CLI, MCP server, or HTTP API.
295
-
296
- ## Install
10
+ Real work needs evidence: research, files, data, charts, diagrams, decisions.
11
+ When that's scattered across chats and files, you keep re-explaining the
12
+ background and your agent works from whatever it happens to see.
297
13
 
298
- ```bash
299
- bunx pmx-canvas # Run without installing (recommended for one-off use)
300
- bun add -g pmx-canvas # Install globally — exposes the `pmx-canvas` command
301
- bun add pmx-canvas # Install into a project (needed for the Bun SDK)
302
- npm install -g pmx-canvas # npm works too — still requires Bun on PATH to run
303
- ```
14
+ On a PMX board, you and your agent put that material in one place, side by
15
+ side. Then you curate it:
16
+
17
+ - **Pin cards and boards** to choose the material you want your agent to use.
18
+ - **Link conclusions to their sources**, so evidence stays connected.
19
+ - **See what the agent has read**, what changed since, and what it added or edited.
20
+
21
+ Ask your agent to put its findings back on the board as new material to
22
+ review, present, and build on. Boards save locally and link to one another,
23
+ so the evidence for your work keeps building up across sessions.
24
+
25
+ ![Harbor dark theme: a fictional bicycle-library board with research, charts, interactive views, files, and labeled relationships](docs/screenshots/workbench-live-dark.png)
26
+
27
+ *Harbor, the dark theme.*
28
+
29
+ ![Daylight light theme: the same fictional board with varied card types and sizes](docs/screenshots/workbench-live-light.png)
30
+
31
+ *Daylight, the light theme. Both screenshots show the working app with fictional
32
+ content and data.*
33
+
34
+ ## A moldable canvas
304
35
 
305
- `pmx-canvas` is Bun-first: the CLI is a TypeScript file with a `#!/usr/bin/env bun`
306
- shebang, so Bun must be installed even when you fetch the package via npm or pnpm.
36
+ Put notes, files, web pages, images, charts, code diffs, and diagrams side by
37
+ side on an infinite canvas. Ask your agent to build a dashboard, comparison,
38
+ or interactive view on the board as you work. You can open a rich view in its
39
+ own tab when you need more space.
307
40
 
308
- To work on the canvas itself, clone the repo — see [Development](#development).
41
+ - **Organize your work.** Move and group cards, draw annotations, and connect
42
+ ideas with labeled links. Use folders, search, and the board map to find
43
+ earlier work.
44
+ - **Work with agents.** Ask one or several agents to add material, track
45
+ tasks, and update the board. Review their changes and send instructions
46
+ from the canvas when your agent connection supports it.
47
+ - **Keep knowledge useful.** Link conclusions to evidence, set review dates,
48
+ and see which dependent cards need checking when a source changes.
49
+ - **Save and share.** Use undo, snapshots, and backups. Present a board as a
50
+ tour or export it as a self-contained HTML file.
309
51
 
310
- ## Quick start
52
+ ## Install and start
311
53
 
312
- ### Run the canvas
54
+ ### With your agent (recommended)
55
+
56
+ Install [Node.js](https://nodejs.org/) (LTS), which includes npm and `npx`.
57
+ Then install the PMX Canvas skill and choose your agent if prompted:
313
58
 
314
59
  ```bash
315
- bunx pmx-canvas # Start canvas, open browser
316
- bunx pmx-canvas --demo # Start with the showcase demo board
317
- bunx pmx-canvas --no-open # Headless (good for daemons / CI)
318
- bunx pmx-canvas --theme=volt # Pick a theme (nine ship; PMX_CANVAS_THEME works too)
319
- bunx pmx-canvas --mcp # Run as MCP server (stdio)
320
- bunx pmx-canvas --help # All commands
60
+ npx skills add pskoett/pmx-canvas/skills/pmx-canvas
321
61
  ```
322
62
 
323
- For the experimental ChatGPT/MCP Apps integration, use the separate
324
- [`--mcp-app` profile](docs/mcp.md#private-mcp-app-preview). It embeds the real
325
- PMX workbench with selection/pin context; prompts stay in ChatGPT's own composer.
326
- Host iframe policy and trusted-human restrictions still apply; this is not
327
- yet a published plugin or a natively verified ChatGPT integration.
328
-
329
- Themes are a tool-rail picker away too, and any one panel can override the
330
- shared theme for itself with `?theme=<name|auto>`.
63
+ Then ask your agent:
331
64
 
332
- Press `?` on the board for the full keyboard map. Shortcuts follow the
333
- platform — `⌘` on a Mac, `Ctrl` on Windows and Linux, where `Ctrl+Y` also
334
- redoes and `Backspace`/`Delete` both delete the selection.
65
+ > Use the pmx-canvas skill to install and set up PMX Canvas for this project.
66
+ > Start the canvas, check that you can connect to it, and give me the link to open it.
335
67
 
336
- The canvas opens at `http://localhost:4313`. Try `--demo` first — it seeds a
337
- showcase board with every node type on it: notes and status, files, a diff, a
338
- CSV table, charts of every kind, mermaid diagrams, the HTML primitives,
339
- structured panels, a grouped cluster, labeled edges, and context pins.
68
+ The skill gives your agent instructions for installing PMX Canvas, connecting
69
+ to it, and working on boards. It doesn't install the app by itself; your agent
70
+ walks you through setup and any permissions it needs. No repository clone is needed.
340
71
 
341
- ### Connect your agent (MCP)
72
+ ### Run it yourself
342
73
 
343
- Add to your agent's MCP config:
74
+ Install [Bun](https://bun.sh) 1.4.2 or newer, then run this command from the
75
+ folder where you want to keep your boards:
344
76
 
345
- ```json
346
- {
347
- "mcpServers": {
348
- "canvas": {
349
- "command": "bunx",
350
- "args": ["pmx-canvas", "--mcp"]
351
- }
352
- }
353
- }
77
+ ```bash
78
+ bunx pmx-canvas
354
79
  ```
355
80
 
356
- The canvas auto-starts on first tool call. Keep the config portable: commit it
357
- to the repo and let the workspace default to the launch directory — hard-coding
358
- an absolute `PMX_CANVAS_WORKSPACE_ROOT` breaks other checkouts and machines.
359
- Set that env var only when your host spawns the MCP server from an incidental
360
- directory (e.g. `~/.copilot`) instead of the project root.
81
+ The command starts the canvas and opens it in your browser. To explore a
82
+ sample board first, run `bunx pmx-canvas --demo` in an empty folder.
361
83
 
362
- Verify any environment in one command against a running server:
84
+ For a permanent installation:
363
85
 
364
86
  ```bash
365
- bunx pmx-canvas smoke
87
+ bun add -g pmx-canvas
88
+ pmx-canvas
366
89
  ```
367
90
 
368
- It checks server health + workspace, CLI/server version skew, the MCP stdio
369
- initialize handshake, a temp-node create/search/remove round-trip, and board
370
- validation — JSON report, exit 1 on failure.
91
+ ## Connect your agent
92
+
93
+ PMX Canvas works with Claude Code, Codex, GitHub Copilot, Amp, and other agents
94
+ through MCP, the protocol agents use to call tools. If your agent handled setup
95
+ above, you're ready to make your first board. Otherwise,
96
+ use a plugin or configure MCP directly. You don't need both for the same agent.
371
97
 
372
- ### Use inside the GitHub Copilot app
98
+ ### Plugins
373
99
 
374
- The standalone [agent plugin](docs/agent-plugin.md) in `plugins/pmx-canvas/` bundles PMX's
375
- MCP tools and native Copilot canvas. It uses the Agent Plugins 1.0 format: other compatible
376
- clients get the MCP tools and browser workbench, not Copilot's native side panel.
100
+ The [PMX Canvas plugin](docs/agent-plugin.md) follows the open
101
+ Agent Plugins 1.0 standard. Use it in any client
102
+ that supports the standard's MCP stdio connections. Bun must be installed;
103
+ a global PMX Canvas installation isn't required.
377
104
 
378
- This repository includes a project canvas extension:
105
+ **In GitHub Copilot**, you can install directly from GitHub:
379
106
 
380
- ```text
381
- .github/extensions/pmx-canvas/extension.mjs
107
+ ```bash
108
+ copilot plugin install pskoett/pmx-canvas:plugins/pmx-canvas
382
109
  ```
383
110
 
384
- When loaded by the Copilot app, it opens the PMX workbench natively, starts a
385
- matching local PMX server when needed, and injects `AX` pinned/focused context
386
- as hidden per-turn context. The adapter is thin: PMX state still lives in
387
- `.pmx-canvas/canvas.db`, and the same HTTP, MCP, CLI, and SDK surfaces remain
388
- available to non-GitHub agents. See
389
- [`github-copilot-app-adapter.md`](skills/pmx-canvas/references/github-copilot-app-adapter.md)
390
- for the full setup and live-test checklist.
111
+ Copilot currently accepts this command, but warns that direct GitHub installs
112
+ are deprecated and a future release will require a marketplace. If your version
113
+ no longer accepts it, use the MCP setup below.
391
114
 
392
- ### Use inside the Codex app
115
+ Enable it, start a new project session, and open **PMX Canvas**. Copilot also
116
+ gets a native canvas panel; that panel is not part of the portable standard.
393
117
 
394
- Codex needs no extension — its two native surfaces are exactly what the canvas
395
- requires. Add the PMX MCP server to the Codex workspace config (same snippet as
396
- [Connect your agent](#connect-your-agent-mcp)), then open the returned
397
- `/workbench` URL in the **Codex in-app Browser** so you can see mutations live.
398
- Agents read pinned/focused context from `canvas://ax-context` /
399
- `canvas_ax_state { action: "get" }` and label Codex-originated focus with
400
- `source: "codex"`. See
401
- [`codex-app-adapter.md`](skills/pmx-canvas/references/codex-app-adapter.md) for
402
- the full workflow and live-test checklist.
118
+ Other apps have their own plugin install commands or UI. See the
119
+ [PMX plugin guide](docs/agent-plugin.md). There is no single install command
120
+ for every client.
403
121
 
404
- ### Use inside AMPCode orbs and the Amp portal
122
+ ### MCP setup
405
123
 
406
- The portal and the agent's MCP connection are separate. For native Canvas tools,
407
- merge this into the workspace's `.amp/settings.json` (not `.mcp.json`):
124
+ Without a plugin, add a server to your agent's MCP settings with command
125
+ `bunx` and arguments `pmx-canvas`, `--mcp`. Clients that use an `mcpServers`
126
+ configuration accept:
408
127
 
409
128
  ```json
410
129
  {
411
- "amp.mcpServers": {
130
+ "mcpServers": {
412
131
  "canvas": {
413
132
  "command": "bunx",
414
- "args": ["pmx-canvas@0.8.2", "--mcp"],
415
- "includeTools": ["canvas_*"],
416
- "env": {
417
- "PMX_CANVAS_WORKSPACE_ROOT": "/absolute/path/to/project",
418
- "PMX_CANVAS_PORT": "14313",
419
- "PMX_CANVAS_URL": "",
420
- "PMX_CANVAS_AGENT_SOURCE": "amp"
421
- }
133
+ "args": ["pmx-canvas", "--mcp"]
422
134
  }
423
135
  }
424
136
  }
425
137
  ```
426
138
 
427
- Replace the root and example port with the portal service's actual workspace and local
428
- listening port, including an orb-assigned port. Configure this inside the orb/runner;
429
- settings on your laptop are not automatically available there.
430
- In the PMX product checkout, use `"command": "bun"` and
431
- `"args": ["run", "src/mcp/server.ts"]` to test the checked-out source instead.
432
- Run `amp mcp doctor` in that workspace. If it reports `awaiting approval`, the user
433
- must review the command and run `amp mcp approve canvas` there; the agent must not
434
- self-approve or bypass workspace trust. Then reload MCP connections and confirm
435
- `connected`, Canvas tool discovery, and matching `/health.workspace`, version and
436
- active board before writes. An open portal or standalone MCP handshake does not prove
437
- native discovery. PMX ships no dedicated Amp lifecycle adapter: an active agent can
438
- poll steering, but MCP setup alone does not wake an idle thread or activate skills.
439
- See the bundled [Amp setup and verification guide](skills/pmx-canvas/references/installing-pmx-canvas.md#amp-connect-the-agent-separately-from-the-portal)
440
- and [Amp MCP configuration](https://ampcode.com/docs/customize/mcp).
441
-
442
- For the visible workbench, run `pmx-canvas` as an orb service (the orb sets
443
- `AMP_ORB` in the environment automatically) and open the workbench through the
444
- thread's portal URL. A consumer-workspace service recipe:
445
-
446
- ```yaml
447
- # .amp/services.yaml — supervised portal service
448
- services:
449
- pmx-canvas:
450
- command: pmx-canvas --no-open
451
- portal: true
452
- health: /health
453
- ```
139
+ Start your agent in the same project folder as the canvas, then enable or
140
+ approve the connection in your agent app. The MCP server can also start the
141
+ canvas on its first tool call.
454
142
 
455
- ```bash
456
- # .agents/setup — install the CLI (pin the exact version: a fresh orb running
457
- # @latest can silently pick up a newer release than the one you validated)
458
- npm install -g pmx-canvas@0.8.2
459
- ```
143
+ Settings differ by app. Follow the [setup guide](skills/pmx-canvas/references/installing-pmx-canvas.md)
144
+ for your client, including [Amp and orbs](skills/pmx-canvas/references/installing-pmx-canvas.md#amp-connect-the-agent-separately-from-the-portal).
460
145
 
461
- The server binds the portal-assigned `$PORT` automatically (gated on the
462
- `AMP_ORB` env the orb always sets, so a stray `PORT` elsewhere never changes
463
- the default), restores `.pmx-canvas/canvas.db`, and the portal manifest picks
464
- it up — no port flags or `$PORT` interpolation in the service command. The
465
- orb image needs Bun >= 1.4.2; WebView automation (`pmx-canvas screenshot`)
466
- also needs a working Chrome installation. The canvas detects the orb and the portal's nested-iframe
467
- embed on its own: live updates arrive over the proxy-safe polling transport,
468
- and iframe-backed nodes (HTML, mermaid, graph, json-render, web artifacts)
469
- render inline via `srcdoc` with their theme styling included. Two things can't
470
- be inlined and stay blocked by the portal embed: cross-origin hosted apps (e.g.
471
- the hosted Excalidraw MCP app), and PDF file nodes — a PDF node offers an
472
- "Open PDF" link there instead of a preview.
473
- Debug overrides: `/workbench?transport=poll|sse` and
474
- `?iframe-mode=srcdoc|src`. After verifying the workspace, `pmx-canvas smoke --port=<actual-port>`
475
- checks health, versions, a standalone MCP handshake, node lifecycle and validation.
476
- Use a disposable board: it performs temporary writes and leaves history. This does
477
- not verify native Amp discovery or browser rendering.
478
-
479
- ### Install the agent skill (recommended)
480
-
481
- The fastest way to get a working canvas is to install the `pmx-canvas` agent
482
- skill. It teaches the agent how to install the package, start the server, and
483
- drive every node type, group, snapshot, and search the canvas exposes.
146
+ ## Make your first board
484
147
 
485
- ```bash
486
- # 1. GitHub CLI extension (gh >= 2.90)
487
- gh skill install pskoett/pmx-canvas pmx-canvas
148
+ Ask your connected agent:
488
149
 
489
- # 2. Agent Skills CLI (runtime-agnostic)
490
- npx skills add pskoett/pmx-canvas/skills/pmx-canvas
150
+ > Create a PMX Canvas board with an overview of the recent projects and
151
+ > threads we've been working on together. Group related work, summarize the
152
+ > decisions and open questions, and link back to the threads and files you
153
+ > can access. Show what's in progress and what we could pick up next. Tell
154
+ > me if you're missing context rather than guessing.
491
155
 
492
- # 3. Manual clone + copy
493
- git clone https://github.com/pskoett/pmx-canvas.git
494
- cp -r pmx-canvas/skills/pmx-canvas <your-agent-skills-dir>
495
- ```
156
+ Open the board, move related cards together, and pin the ones you want the
157
+ agent to use. Then ask it to read the pinned cards and help you continue the work.
158
+ You can also add notes and files yourself. Press `?` on the board for keyboard
159
+ shortcuts.
160
+
161
+ Boards auto-save in `.pmx-canvas/canvas.db` inside your project folder.
162
+ Use the same folder when you return. Autosave isn't a backup; see the
163
+ [backup commands](docs/cli.md#backup-and-restore) to keep a separate copy.
164
+
165
+ PMX Canvas runs locally and has no built-in multi-user accounts. Connected
166
+ agents share the same open board. Content you ask an agent to read goes
167
+ through that agent's tools and model provider; web content and hosted apps
168
+ also use their external services.
169
+
170
+ ## Documentation and development
496
171
 
497
- Common harness skill directories: `.claude/skills/` (Claude Code),
498
- `.github/skills/` or `.copilot/skills/` (Copilot CLI),
499
- `.agents/skills/` (cross-harness convention). Once the canvas is running,
500
- the agent can read `canvas://skills` and pull in companion skills
501
- (`pmx-canvas-orchestration` for running several agents on one board,
502
- `control-session-orchestrator`, `web-artifacts-builder`, `json-render-*`,
503
- `pmx-canvas-testing`, `playwright-cli`, etc.) as the work demands.
504
-
505
- The MCP server also supports the [Skills extension](docs/mcp.md#skills-extension-sep-2640):
506
- compatible hosts discover skills through `skills/list` and read instructions, references,
507
- scripts, and assets at `skill://<name>/<path>`. Files come from the running MCP package;
508
- restart MCP after an upgrade. Host support determines automatic skill loading, and reading
509
- a skill never grants permission to execute its scripts. Filesystem installation remains available.
510
-
511
- ## Bugs, feature requests, and feedback
512
-
513
- Click the small bug icon below the logo in the left toolbar (**Bug and feedback**).
514
- Choose Bug report, Feature request, or General feedback, then enter a title and
515
- description. **Continue on GitHub** opens a prefilled issue in this repository;
516
- sign in to GitHub, review it, and submit. Issues are public. No board data, workspace
517
- paths, screenshots, or logs are attached automatically.
518
-
519
- ## Documentation
520
-
521
- - **[Node types](docs/node-types.md)** — every node type, edge types, and
522
- the three-tier visual matrix (json-render → html → web-artifact)
523
- - **[CLI reference](docs/cli.md)** — full command surface, daemon mode,
524
- watch streams, WebView automation
525
- - **[MCP reference](docs/mcp.md)** — 24 tools, 15 static canvas resources, one
526
- context resource template, plus bundled
527
- skill resources, Skills extension, change notifications, node-type routing
528
- - **[HTTP API](docs/http-api.md)** — REST endpoints, SSE, batch operations
529
- - **[AX host-adapter contract](docs/ax-host-adapter-contract.md)** — how native
530
- host adapters connect context, steering, activity, and human gates
531
- - **[Bun SDK](docs/sdk.md)** — `createCanvas()` for TypeScript on Bun
532
- - **[Release process](docs/RELEASE.md)** — maintainer-only
533
-
534
- ## Scope
535
-
536
- - **Single-machine, today.** One canvas per `bunx pmx-canvas` instance, on
537
- one machine. No built-in multi-user auth — collaboration means humans and
538
- agents on the same machine: every browser tab and every connected agent
539
- pointed at the same `localhost:4313` shares one live board, with per-writer
540
- presence (cursors, chips, minimap dots) for all of them. To share across
541
- machines, commit `.pmx-canvas/canvas.db`.
542
- - **What leaves your machine.** The core canvas runs entirely on
543
- `localhost`. Network egress only happens for explicit, opt-in flows:
544
- `webpage` nodes and remote-URL `image` nodes fetch the address you give
545
- them; `mcp-app` / `canvas_app { action: "diagram" }` calls go to whatever
546
- MCP server URL you configure (the Excalidraw preset uses
547
- `https://mcp.excalidraw.com/mcp`); building a web artifact runs a package
548
- manager, which fetches a React/Tailwind toolchain plus that artifact's declared dependencies (and, if neither pnpm nor bun is present, installs pnpm globally) from the npm
549
- registry; and `bunx` itself reads the registry on first install. Nothing
550
- else phones home.
551
-
552
- ## Tech stack
553
-
554
- - **Runtime:** [Bun](https://bun.sh)
555
- - **UI:** [Preact](https://preactjs.com) + [@preact/signals](https://github.com/preactjs/signals);
556
- the json-render/graph viewer bundle is React + [recharts](https://recharts.org),
557
- and mermaid nodes render with [mermaid](https://mermaid.js.org)
558
- - **Styling:** CSS custom properties + Tailwind (json-render bundle only)
559
- - **Server:** Bun.serve (HTTP + SSE)
560
- - **MCP:** [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk) (stdio)
561
-
562
- ## Development
172
+ - [Setup guide](skills/pmx-canvas/references/installing-pmx-canvas.md) and [plugin guide](docs/agent-plugin.md)
173
+ - [Cards and views](docs/node-types.md)
174
+ - [CLI](docs/cli.md), [MCP](docs/mcp.md), [HTTP API](docs/http-api.md), and [Bun SDK](docs/sdk.md)
175
+ - [Environment settings](docs/environment.md) and [changelog](CHANGELOG.md)
176
+
177
+ To run from source:
563
178
 
564
179
  ```bash
565
180
  git clone https://github.com/pskoett/pmx-canvas.git
566
181
  cd pmx-canvas
567
182
  bun install
568
183
  bun run build
569
- bun run dev # Start + open browser
570
- bun run dev:demo # Start with the showcase demo board
571
- bun run test # Unit tests
572
- bun run test:e2e # Playwright end-to-end tests
573
- bun run test:all # Unit tests + browser smoke
184
+ bun run dev
574
185
  ```
575
186
 
576
- For developer flows on the `pmx-canvas` repo itself (release process,
577
- contribution gates, agent-skill mirroring) see
578
- [`AGENTS.md`](AGENTS.md) and [`docs/RELEASE.md`](docs/RELEASE.md).
579
-
580
- ## Contributing
581
-
582
- Contributions welcome. Please open an issue first to discuss what you'd like
583
- to change.
584
-
585
- 1. Fork the repo
586
- 2. Create a feature branch (`git checkout -b feature/my-change`)
587
- 3. Run `bun run test:all` before submitting
588
- 4. Open a pull request
589
-
590
- ## License
187
+ See [AGENTS.md](AGENTS.md) for contributor guidance. Report bugs or suggest
188
+ features in [GitHub issues](https://github.com/pskoett/pmx-canvas/issues), or
189
+ use **Bug and feedback** in the canvas toolbar.
591
190
 
592
- [MIT](LICENSE)
191
+ [MIT license](LICENSE).