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.
- package/.github/extensions/pmx-canvas/runtime.json +1 -1
- package/.github/extensions/pmx-canvas/tools.json +601 -22
- package/CHANGELOG.md +59 -0
- package/Readme.md +131 -532
- package/dist/canvas/global.css +2724 -476
- package/dist/canvas/index.js +168 -107
- package/dist/canvas/mcp-app.html +2899 -596
- package/dist/json-render/index.js +20 -20
- package/dist/types/client/canvas/BarHint.d.ts +12 -2
- package/dist/types/client/canvas/BoardLinkDialog.d.ts +3 -1
- package/dist/types/client/canvas/BoardPinButton.d.ts +10 -0
- package/dist/types/client/canvas/BoardSwitcher.d.ts +1 -1
- package/dist/types/client/canvas/CanvasViewport.d.ts +1 -1
- package/dist/types/client/canvas/CommandBar.d.ts +3 -4
- package/dist/types/client/canvas/ConnectionBanner.d.ts +2 -1
- package/dist/types/client/canvas/ContextChip.d.ts +3 -0
- package/dist/types/client/canvas/CrossBoardReferences.d.ts +5 -0
- package/dist/types/client/canvas/EdgeLayer.d.ts +14 -3
- package/dist/types/client/canvas/EmptyState.d.ts +4 -4
- package/dist/types/client/canvas/HomeGraphView.d.ts +2 -0
- package/dist/types/client/canvas/HomeMapView.d.ts +1 -0
- package/dist/types/client/canvas/HomeReviewView.d.ts +6 -0
- package/dist/types/client/canvas/HomeView.d.ts +9 -7
- package/dist/types/client/canvas/KnowledgeDialog.d.ts +4 -0
- package/dist/types/client/canvas/LifecycleChrome.d.ts +5 -0
- package/dist/types/client/canvas/LifecycleFields.d.ts +7 -0
- package/dist/types/client/canvas/LifecyclePanel.d.ts +1 -0
- package/dist/types/client/canvas/MemoryInspector.d.ts +7 -0
- package/dist/types/client/canvas/NearPinLayer.d.ts +14 -0
- package/dist/types/client/canvas/NodeContextMark.d.ts +40 -7
- package/dist/types/client/canvas/RelationPresetsDialog.d.ts +4 -0
- package/dist/types/client/canvas/RelationsPanel.d.ts +4 -0
- package/dist/types/client/canvas/SessionPanel.d.ts +2 -0
- package/dist/types/client/canvas/canvas-area.d.ts +1 -1
- package/dist/types/client/canvas/graph-geometry.d.ts +27 -0
- package/dist/types/client/canvas/graph-model.d.ts +37 -0
- package/dist/types/client/canvas/memory-layout.d.ts +23 -0
- package/dist/types/client/canvas/use-chrome-height.d.ts +2 -0
- package/dist/types/client/canvas/use-focus-trap.d.ts +1 -0
- package/dist/types/client/canvas/use-memory-graph.d.ts +8 -0
- package/dist/types/client/canvas/use-pan-zoom.d.ts +4 -1
- package/dist/types/client/icons.d.ts +0 -10
- package/dist/types/client/nodes/AxStepControls.d.ts +1 -1
- package/dist/types/client/nodes/InlineMarkdownEditor.d.ts +4 -4
- package/dist/types/client/nodes/MarkdownNode.d.ts +5 -1
- package/dist/types/client/nodes/McpAppNode.d.ts +4 -4
- package/dist/types/client/nodes/viewer-runtime-state.d.ts +1 -1
- package/dist/types/client/state/boards-store.d.ts +81 -9
- package/dist/types/client/state/canvas-store.d.ts +14 -1
- package/dist/types/client/state/context-chip-store.d.ts +22 -0
- package/dist/types/client/state/context-status-store.d.ts +35 -0
- package/dist/types/client/state/human-store.d.ts +2 -1
- package/dist/types/client/state/intent-bridge.d.ts +11 -8
- package/dist/types/client/state/knowledge-store.d.ts +22 -0
- package/dist/types/client/state/near-pin-store.d.ts +44 -1
- package/dist/types/client/state/presence-store.d.ts +4 -4
- package/dist/types/client/state/presentation.d.ts +28 -0
- package/dist/types/client/state/relation-store.d.ts +10 -0
- package/dist/types/client/state/session-store.d.ts +41 -2
- package/dist/types/client/state/workspace-settings.d.ts +7 -0
- package/dist/types/client/types.d.ts +13 -1
- package/dist/types/client/utils/keyboard.d.ts +2 -0
- package/dist/types/client/utils/time-ago.d.ts +4 -0
- package/dist/types/mcp/context-uri-template.d.ts +3 -1
- package/dist/types/server/agent-presence.d.ts +10 -3
- package/dist/types/server/ax-context.d.ts +1 -1
- package/dist/types/server/canvas-db.d.ts +30 -7
- package/dist/types/server/canvas-operations.d.ts +24 -2
- package/dist/types/server/canvas-provenance.d.ts +22 -2
- package/dist/types/server/canvas-serialization.d.ts +2 -0
- package/dist/types/server/canvas-state.d.ts +93 -15
- package/dist/types/server/canvas-validation.d.ts +1 -1
- package/dist/types/server/context-brief.d.ts +94 -6
- package/dist/types/server/context-reads.d.ts +33 -7
- package/dist/types/server/edit-summary.d.ts +20 -0
- package/dist/types/server/index.d.ts +71 -10
- package/dist/types/server/knowledge-lifecycle.d.ts +221 -0
- package/dist/types/server/lifecycle-status.d.ts +10 -0
- package/dist/types/server/memory-graph.d.ts +9 -0
- package/dist/types/server/mutation-history.d.ts +2 -0
- package/dist/types/server/operations/ops/ax-shared.d.ts +1 -1
- package/dist/types/server/operations/ops/boards.d.ts +2 -1
- package/dist/types/server/operations/ops/lifecycle.d.ts +2 -0
- package/dist/types/server/operations/ops/memory-graph.d.ts +2 -0
- package/dist/types/server/operations/ops/nodes.d.ts +5 -0
- package/dist/types/server/operations/ops/query.d.ts +23 -0
- package/dist/types/server/operations/registry.d.ts +1 -0
- package/dist/types/server/placement.d.ts +7 -0
- package/dist/types/server/scope-fence.d.ts +2 -1
- package/dist/types/server/spatial-analysis.d.ts +6 -3
- package/dist/types/server/tour-control.d.ts +32 -0
- package/dist/types/server/wiki-links.d.ts +14 -0
- package/dist/types/server/workbench-auth.d.ts +2 -0
- package/dist/types/shared/agent-context.d.ts +2 -0
- package/dist/types/shared/agent-presence.d.ts +15 -12
- package/dist/types/shared/auto-arrange.d.ts +1 -0
- package/dist/types/shared/boards.d.ts +4 -4
- package/dist/types/shared/knowledge-lifecycle.d.ts +41 -0
- package/dist/types/shared/knowledge-presets.d.ts +6 -0
- package/dist/types/shared/lifecycle-status.d.ts +24 -0
- package/dist/types/shared/memory-graph.d.ts +53 -0
- package/dist/types/shared/relations.d.ts +68 -0
- package/dist/types/shared/semantic-attention.d.ts +2 -0
- package/dist/types/shared/tour.d.ts +38 -0
- package/dist/types/shared/workspace-settings.d.ts +11 -0
- package/docs/RELEASE.md +21 -3
- package/docs/adr-001-bun-only-runtime.md +7 -1
- package/docs/adr-002-shared-product-separate-runtimes.md +93 -0
- package/docs/api-reference.md +109 -0
- package/docs/ax-host-adapter-contract.md +1 -1
- package/docs/ax-state-contract.md +5 -4
- package/docs/cli.md +153 -15
- package/docs/demos/pmx-canvas-demo.mp4 +0 -0
- package/docs/design/AgentContext.dc.html +3 -3
- package/docs/design/BoardPins.dc.html +37 -22
- package/docs/design/Categories.dc.html +208 -0
- package/docs/design/CategoryEditor.dc.html +33 -0
- package/docs/design/Chrome.dc.html +52 -9
- package/docs/design/ContextChip.dc.html +224 -0
- package/docs/design/ContextChip600.dc.html +136 -0
- package/docs/design/EmptyState.dc.html +45 -0
- package/docs/design/Flows.dc.html +23 -1
- package/docs/design/HeaderMarks.dc.html +183 -0
- package/docs/design/Home.dc.html +19 -1
- package/docs/design/HomeGraph.dc.html +86 -202
- package/docs/design/HomeMap.dc.html +23 -1
- package/docs/design/HomeTeam.dc.html +32 -14
- package/docs/design/Lifecycle.dc.html +22 -0
- package/docs/design/Lifecycle600.dc.html +18 -0
- package/docs/design/LifecycleVariants.dc.html +157 -0
- package/docs/design/LinkAuthorship.dc.html +139 -0
- package/docs/design/LinksChanged.dc.html +203 -0
- package/docs/design/LinksOptions.dc.html +137 -0
- package/docs/design/LinksOptions600.dc.html +134 -0
- package/docs/design/NearPin.dc.html +9 -10
- package/docs/design/Pane600.dc.html +4 -3
- package/docs/design/Relations.dc.html +3 -2
- package/docs/design/Restore.dc.html +152 -0
- package/docs/design/SeeChange.dc.html +267 -0
- package/docs/design/Uses.dc.html +12 -6
- package/docs/design/canvas.json +146 -19
- package/docs/design.md +449 -16
- package/docs/environment.md +0 -1
- package/docs/evals/curation-effect.md +128 -0
- package/docs/http-api.md +459 -37
- package/docs/mcp.md +146 -18
- package/docs/node-types.md +58 -3
- package/docs/plans/design-gaps-2026-10-08.md +53 -0
- package/docs/plans/plan-009-tech-debt-backlog.md +379 -0
- package/docs/plans/plan-016-context-made-visible-wave-1.md +150 -5
- package/docs/plans/plan-017-knowledge-categories-and-lifecycle.md +175 -0
- package/docs/plans/plan-018-connected-memory-wave-2.md +594 -0
- package/docs/plans/plan-019-post-0.9-roadmap.md +198 -0
- package/docs/product-context-vision-2026-09.md +17 -1
- package/docs/product-vision-2026-09.md +1082 -43
- package/docs/product-vision-review-2026-09.md +13 -1
- package/docs/screenshots/workbench-live-dark.png +0 -0
- package/docs/screenshots/workbench-live-light.png +0 -0
- package/docs/sdk.md +62 -2
- package/package.json +1 -1
- package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
- package/plugins/pmx-canvas/plugin.json +1 -1
- package/plugins/pmx-canvas/runtime.json +1 -1
- package/plugins/pmx-canvas/tools.json +601 -22
- package/skills/pmx-canvas/SKILL.md +216 -42
- package/skills/pmx-canvas/evals/evals.json +224 -0
- package/skills/pmx-canvas/references/full-reference.md +120 -21
- package/skills/pmx-canvas/references/github-copilot-app-adapter.md +2 -2
- package/skills/pmx-canvas/references/importing-context.md +132 -0
- package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
- package/skills/pmx-canvas/references/tours-and-recording.md +16 -1
- package/skills/pmx-canvas-testing/SKILL.md +20 -0
- package/src/cli/agent.ts +2 -0
- package/src/cli/commands/ax.ts +12 -0
- package/src/cli/commands/boards.ts +88 -11
- package/src/cli/commands/edges.ts +28 -0
- package/src/cli/commands/groups.ts +7 -0
- package/src/cli/commands/nodes.ts +1 -0
- package/src/cli/commands/query.ts +34 -2
- package/src/cli/commands/record.ts +199 -48
- package/src/cli/index.ts +6 -1
- package/src/client/App.tsx +177 -70
- package/src/client/canvas/AttentionHistory.tsx +0 -2
- package/src/client/canvas/BarHint.tsx +40 -2
- package/src/client/canvas/BoardCopyDialog.tsx +1 -1
- package/src/client/canvas/BoardFolderDialog.tsx +7 -7
- package/src/client/canvas/BoardLinkDialog.tsx +138 -33
- package/src/client/canvas/BoardPinButton.tsx +33 -0
- package/src/client/canvas/BoardSwitcher.tsx +26 -40
- package/src/client/canvas/CanvasNode.tsx +360 -237
- package/src/client/canvas/CanvasViewport.tsx +45 -7
- package/src/client/canvas/CommandBar.tsx +29 -23
- package/src/client/canvas/CommandPalette.tsx +5 -12
- package/src/client/canvas/ConnectionBanner.tsx +3 -3
- package/src/client/canvas/ContextChip.tsx +296 -0
- package/src/client/canvas/ContextMenu.tsx +63 -5
- package/src/client/canvas/CrossBoardReferences.tsx +60 -0
- package/src/client/canvas/EdgeLayer.tsx +339 -76
- package/src/client/canvas/EmptyState.tsx +33 -18
- package/src/client/canvas/ExpandedNodeOverlay.tsx +72 -40
- package/src/client/canvas/ExternalWriters.tsx +57 -42
- package/src/client/canvas/HomeGraphView.tsx +942 -0
- package/src/client/canvas/HomeMapView.tsx +641 -0
- package/src/client/canvas/HomeReviewView.tsx +167 -0
- package/src/client/canvas/HomeView.tsx +687 -160
- package/src/client/canvas/IntentLayer.tsx +19 -12
- package/src/client/canvas/KnowledgeDialog.tsx +488 -0
- package/src/client/canvas/LifecycleChrome.tsx +133 -0
- package/src/client/canvas/LifecycleFields.tsx +91 -0
- package/src/client/canvas/LifecyclePanel.tsx +543 -0
- package/src/client/canvas/MemoryInspector.tsx +104 -0
- package/src/client/canvas/Minimap.tsx +3 -3
- package/src/client/canvas/NearPinLayer.tsx +187 -0
- package/src/client/canvas/NodeContextMark.tsx +175 -97
- package/src/client/canvas/Presentation.tsx +23 -57
- package/src/client/canvas/RelationPresetsDialog.tsx +413 -0
- package/src/client/canvas/RelationsPanel.tsx +82 -0
- package/src/client/canvas/SelectionBar.tsx +3 -6
- package/src/client/canvas/SessionPanel.tsx +90 -50
- package/src/client/canvas/SessionReceipt.tsx +311 -39
- package/src/client/canvas/ShortcutOverlay.tsx +1 -1
- package/src/client/canvas/SnapshotPanel.tsx +27 -36
- package/src/client/canvas/ToolRail.tsx +367 -192
- package/src/client/canvas/TopBar.tsx +354 -124
- package/src/client/canvas/canvas-area.ts +10 -3
- package/src/client/canvas/graph-geometry.ts +195 -0
- package/src/client/canvas/graph-model.ts +254 -0
- package/src/client/canvas/memory-layout.ts +106 -0
- package/src/client/canvas/use-chrome-height.ts +20 -0
- package/src/client/canvas/use-focus-trap.ts +31 -5
- package/src/client/canvas/use-memory-graph.ts +58 -0
- package/src/client/canvas/use-node-drag.ts +2 -1
- package/src/client/canvas/use-pan-zoom.ts +64 -7
- package/src/client/icons.tsx +0 -63
- package/src/client/mcp-app/style.css +0 -6
- package/src/client/nodes/AxStepControls.tsx +74 -50
- package/src/client/nodes/BoardNode.tsx +5 -1
- package/src/client/nodes/ContextNode.tsx +18 -11
- package/src/client/nodes/ExtAppFrame.tsx +6 -3
- package/src/client/nodes/FileNode.tsx +46 -42
- package/src/client/nodes/HtmlNode.tsx +32 -0
- package/src/client/nodes/ImageNode.tsx +1 -1
- package/src/client/nodes/InlineFormatBar.tsx +6 -9
- package/src/client/nodes/InlineMarkdownEditor.tsx +56 -17
- package/src/client/nodes/MarkdownNode.tsx +377 -109
- package/src/client/nodes/McpAppNode.tsx +50 -20
- package/src/client/nodes/MdFormatBar.tsx +21 -18
- package/src/client/nodes/PromptNode.tsx +1 -1
- package/src/client/nodes/ResponseNode.tsx +1 -1
- package/src/client/nodes/viewer-runtime-state.ts +54 -22
- package/src/client/state/attention-bridge.ts +64 -15
- package/src/client/state/boards-store.ts +193 -39
- package/src/client/state/canvas-store.ts +99 -12
- package/src/client/state/context-chip-store.ts +70 -0
- package/src/client/state/context-status-store.ts +53 -0
- package/src/client/state/human-store.ts +13 -7
- package/src/client/state/intent-bridge.ts +51 -30
- package/src/client/state/knowledge-store.ts +43 -0
- package/src/client/state/near-pin-store.ts +115 -6
- package/src/client/state/presence-store.ts +7 -10
- package/src/client/state/presentation.ts +91 -0
- package/src/client/state/relation-store.ts +81 -0
- package/src/client/state/session-store.ts +144 -18
- package/src/client/state/sse-bridge.ts +235 -32
- package/src/client/state/workspace-settings.ts +11 -0
- package/src/client/theme/global.css +2724 -476
- package/src/client/types.ts +12 -0
- package/src/client/utils/keyboard.ts +10 -0
- package/src/client/utils/time-ago.ts +14 -0
- package/src/json-render/renderer/index.tsx +31 -0
- package/src/mcp/canvas-app.ts +12 -2
- package/src/mcp/context-uri-template.ts +7 -4
- package/src/mcp/server.ts +63 -41
- package/src/mcp/workbench-app.ts +39 -6
- package/src/server/agent-presence.ts +128 -28
- package/src/server/ax-context.ts +27 -13
- package/src/server/board-export.ts +12 -1
- package/src/server/canvas-db.ts +331 -42
- package/src/server/canvas-operations.ts +195 -83
- package/src/server/canvas-provenance.ts +53 -22
- package/src/server/canvas-serialization.ts +2 -0
- package/src/server/canvas-state.ts +950 -122
- package/src/server/canvas-validation.ts +9 -2
- package/src/server/context-brief.ts +345 -38
- package/src/server/context-reads.ts +178 -30
- package/src/server/demo-state.json +355 -24
- package/src/server/edit-summary.ts +74 -0
- package/src/server/html-surface.ts +8 -1
- package/src/server/index.ts +181 -11
- package/src/server/knowledge-lifecycle.ts +304 -0
- package/src/server/lifecycle-status.ts +232 -0
- package/src/server/memory-graph.ts +166 -0
- package/src/server/mutation-history.ts +18 -6
- package/src/server/operations/composites.ts +32 -11
- package/src/server/operations/http.ts +7 -2
- package/src/server/operations/index.ts +4 -0
- package/src/server/operations/mcp.ts +26 -1
- package/src/server/operations/ops/ax-presence.ts +1 -1
- package/src/server/operations/ops/ax-read.ts +57 -6
- package/src/server/operations/ops/ax-timeline.ts +28 -2
- package/src/server/operations/ops/backup.ts +5 -3
- package/src/server/operations/ops/batch.ts +35 -4
- package/src/server/operations/ops/boards.ts +188 -47
- package/src/server/operations/ops/canvas-wire.ts +31 -1
- package/src/server/operations/ops/edges.ts +36 -2
- package/src/server/operations/ops/groups.ts +6 -1
- package/src/server/operations/ops/lifecycle.ts +262 -0
- package/src/server/operations/ops/memory-graph.ts +45 -0
- package/src/server/operations/ops/nodes.ts +107 -24
- package/src/server/operations/ops/query.ts +281 -68
- package/src/server/operations/ops/snapshots.ts +73 -1
- package/src/server/operations/ops/validate.ts +5 -1
- package/src/server/operations/ops/viewport.ts +97 -3
- package/src/server/operations/registry.ts +74 -25
- package/src/server/placement.ts +29 -0
- package/src/server/scope-fence.ts +78 -6
- package/src/server/server.ts +115 -16
- package/src/server/spatial-analysis.ts +48 -23
- package/src/server/tour-control.ts +82 -0
- package/src/server/wiki-links.ts +137 -0
- package/src/server/workbench-auth.ts +11 -0
- package/src/shared/agent-context.ts +3 -0
- package/src/shared/agent-presence.ts +15 -15
- package/src/shared/auto-arrange.ts +2 -0
- package/src/shared/boards.ts +4 -4
- package/src/shared/knowledge-lifecycle.ts +22 -0
- package/src/shared/knowledge-presets.ts +80 -0
- package/src/shared/lifecycle-status.ts +26 -0
- package/src/shared/memory-graph.ts +74 -0
- package/src/shared/relations.ts +98 -0
- package/src/shared/semantic-attention.ts +15 -1
- package/src/shared/tour.ts +23 -5
- package/src/shared/workspace-settings.ts +13 -0
- package/dist/types/client/canvas/ContextPinBar.d.ts +0 -1
- package/dist/types/client/canvas/FocusFieldLayer.d.ts +0 -1
- package/dist/types/client/canvas/kind-colors.d.ts +0 -3
- package/dist/types/server/agent-context.d.ts +0 -22
- package/src/client/canvas/ContextPinBar.tsx +0 -25
package/Readme.md
CHANGED
|
@@ -1,592 +1,191 @@
|
|
|
1
1
|
# pmx-canvas
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
and
|
|
5
|
-
|
|
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
|
-
|
|
187
|
-
pmx-canvas pump --consumer amp --exec 'amp -x {message}'
|
|
188
|
-
```
|
|
8
|
+
## Collect evidence. Curate context. Move work forward.
|
|
189
9
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
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
|
+

|
|
26
|
+
|
|
27
|
+
*Harbor, the dark theme.*
|
|
28
|
+
|
|
29
|
+

|
|
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
|
-
|
|
306
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
52
|
+
## Install and start
|
|
311
53
|
|
|
312
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
333
|
-
|
|
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
|
|
337
|
-
|
|
338
|
-
|
|
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
|
-
###
|
|
72
|
+
### Run it yourself
|
|
342
73
|
|
|
343
|
-
|
|
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
|
-
```
|
|
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
|
|
357
|
-
|
|
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
|
-
|
|
84
|
+
For a permanent installation:
|
|
363
85
|
|
|
364
86
|
```bash
|
|
365
|
-
|
|
87
|
+
bun add -g pmx-canvas
|
|
88
|
+
pmx-canvas
|
|
366
89
|
```
|
|
367
90
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
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
|
-
###
|
|
98
|
+
### Plugins
|
|
373
99
|
|
|
374
|
-
The
|
|
375
|
-
|
|
376
|
-
|
|
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
|
-
|
|
105
|
+
**In GitHub Copilot**, you can install directly from GitHub:
|
|
379
106
|
|
|
380
|
-
```
|
|
381
|
-
|
|
107
|
+
```bash
|
|
108
|
+
copilot plugin install pskoett/pmx-canvas:plugins/pmx-canvas
|
|
382
109
|
```
|
|
383
110
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
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
|
-
|
|
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
|
-
|
|
395
|
-
|
|
396
|
-
|
|
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
|
-
###
|
|
122
|
+
### MCP setup
|
|
405
123
|
|
|
406
|
-
|
|
407
|
-
|
|
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
|
-
"
|
|
130
|
+
"mcpServers": {
|
|
412
131
|
"canvas": {
|
|
413
132
|
"command": "bunx",
|
|
414
|
-
"args": ["pmx-canvas
|
|
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
|
-
|
|
428
|
-
|
|
429
|
-
|
|
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
|
-
|
|
456
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
490
|
-
|
|
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
|
-
|
|
493
|
-
|
|
494
|
-
|
|
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
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
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
|
|
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
|
-
|
|
577
|
-
|
|
578
|
-
|
|
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).
|