Major Versions
A living declaration of what each major version of AgentCanvas is about โ the paradigm-level framing.
design-docs/.
ยง1AgentCanvas v1 โ Bounded Static-Topology Canvas active
Paradigm: Bounded, pre-declared topology โ whatever the agent does at runtime, the set of fireable nodes / tools is fully known before the run starts. Runtime decisions are selections over a predeclared set, never extensions of it.
Agent forms v1 covers
All of the following can be expressed as bounded static topology and therefore belong in v1 โ either as graph-visible patterns or hidden inside a single BaseCanvasNode subclass:
- Static DAG / pipeline workflows โ classical chains, RAG, foundation-model composition
- Cyclic agent loops โ observe โ reason โ act โ repeat via two-sided
IterIn/IterOutgates (IterIn captures run-start seeds on its left side; IterOut carries loop state, halts on itsstopport, and emits a final side at termination) - ReAct loops โ two implementation paths: (a) hidden inside a custom
LLMCallNodesubclass with a tool registry passed as config, or (b) explicit graph with router node + N predeclared tool branches gated on the LLM'stool_nameoutput - Plan-and-Execute over a bounded tool pool โ planner node emits
LIST[step], iteration walks the list, router dispatches each step to the matching predeclared tool - Bounded multi-agent โ fixed N agents with fixed or router-selected communication topology (DiscussNav-style 8-expert fan-out, AutoGen-style fixed roles, debate / consensus with N โค K_max predeclared experts)
- Embodied sense-act outer loop โ VLN, VLA, EQA wrapped around any of the inner forms above
- Composed foundation-model pipelines โ SAM + LLM + 3D planner, RAM + VLM + DDPPO, etc.
What ships in v1 (paradigm building blocks)
- Unified canvas + flat workspace (ADR-canvas-001, ADR-canvas-002)
- Graph vs graph-node storage (ADR-canvas-003)
BaseCanvasNode+BaseNodeSetcomponent system with auto-discovery (ADR-components-001 โฆ 004)- GraphExecutor with two-sided iteration + multi-scope (ADR-dataflow-008, ADR-dataflow-009, ADR-dataflow-007, ADR-executor-003)
- Wire type system incl.
LIST[T]consumer-side modifier (ADR-dataflow-004, ADR-dataflow-005) - State containers with Lifetime axis (
forever/step/episode/run/custom) (ADR-dataflow-002, ADR-dataflow-004) - Auto-hosted server-mode nodesets via
AutoServerApp(ADR-server-001);BaseEnvPanelbridge (ADR-server-002); env-nodeset parallelism contract (ADR-server-003) - Hook system with fail-open semantics
- Python-driven node UI (
NodeUIConfig,GenericBlockRenderer,ConfigField,DisplayField) (ADR-components-004, ADR-components-006) - Graph-driven batch eval โ
EnvWorkerPool+BatchedInferenceServer+ subprocess-per-runJobSchedulerwith cross-session admission (ADR-eval-001, ADR-eval-002, ADR-eval-003, ADR-eval-004) - Two-layer execution logs (exterior port I/O + interior
_self_log) + unifiedErrorBus(ADR-observability-003, ADR-observability-004) - Polished core nodesets: Habitat ยท MP3D ยท CMA ยท OpenNav ยท NavGPT ยท MapGPT ยท SmartWay ยท SAM ยท Basic Agent ยท HM-EQA ยท OpenEQA ยท SIMPLER ยท LIBERO ยท VLA Policy ยท VLN-CE Policy
v1 ships when: the public API is declared stable and frozen under SemVer โ open-source-ready (LICENSE / install docs / CONTRIBUTING), the agent-forms list above each exercised by a canonical graph, and the graph-JSON / nodeset / CLI-HTTP surfaces documented. Until then, tags are v0.x โ the API is still moving with research iteration and external-integration friction. Paper submission is deliberately not a v1.0 trigger.
Out of scope for v1: anything that requires the set of nodes / tools / node-types to grow at runtime โ that's v2.
ยง2AgentCanvas v2 โ Topology-Growing Canvas future
Paradigm: Topology-mutating execution โ the set of fireable nodes / tools / edges can change during a run. Runtime decisions can be extensions of the predeclared set, not only selections within it.
What v2 covers (and v1 does not)
- Unbounded subagent spawning โ a meta-agent decides at runtime how many subagent instances to launch, with arbitrary recursion depth (Claude-Code-style nested
Task/Agentcalls, Manus-style hierarchical orchestration) - Runtime fan-out over runtime lists โ "for each item in a runtime-length
LIST, spawn a subgraph instance"; distinct from v1'sLIST[T]consumer-side coercion which only aggregates pre-declared producer edges - New tool types emerging at runtime โ Voyager-style "agent writes a new skill as a Python file mid-run and registers it"; plan-emitted step types not in the predeclared pool
- Self-modifying graphs โ a node in the running graph commits an edit to the parent
GraphDefinitionand the executor honours it from the next step on - Dynamic multi-agent where N is unbounded or communication topology is fully runtime-decided (not just selected from a predeclared mesh)
Why this earns a major version bump
- The "predeclared bounded topology" invariant breaks โ graph JSON is no longer a complete spec of what can run
- The executor needs to handle node / edge / scope insertion safely mid-run, with state-container lifetime semantics across runtime-spawned scopes
- The canvas needs new affordances for visualising a mutating graph without confusing the user
- Audit guarantees relied on by structurally-inspectable tooling (e.g., PortBench's faithfulness rules over JSON topology) need re-derivation โ they may degrade to "snapshot at instant T" semantics
Non-goals
- Replacing the v1 paradigm โ bounded static topology remains the recommended starting point for most agents; v2 is opt-in
- Auto-converting v1 graphs into v2 graphs โ v1 graphs run unchanged in v2; the upgrade path is "add v2-only nodes if you need them"
- Breaking the v1
GraphDefinitionJSON contract โ v2 extends it (new node types, optional fields), never breaks existing files
- Does v2 get a second executor, or does
GraphExecutorgeneralise to handle mid-run mutation? - How does the canvas show a mutating graph without confusing the user?
- What does state-container
lifetimemean for a scope spawned at step N and removed at step M? - Tool availability scoping: all loaded tools? A runtime-declared subset? Per-scope gating?
- Does PortBench's structural-inspectability claim degrade gracefully or require a v2-specific audit pass?
ยง3Versioning Discipline
- Two majors are declared: v1 (active) and v2 (future). Anything beyond is premature.
- Pre-release tagging:
v0.xwhile the API is still moving with research iteration and early external integration.v1.0tags when the public API is declared stable โ not at paper submission; academic citation is a separate Zenodo /CITATION.cffaxis. - Minor versions (
v1.1,v1.2, โฆ) accommodate incremental feature work from roadmap โ new tools, envs, methods, and deployable / packaging polish โ that does not require runtime topology mutation. - Patch versions are bug fixes and non-functional cleanups.
- A feature moves from v1.x to v2 when it can only be expressed with runtime-mutating topology. If it works with predeclared bounded topology โ even via router-and-bounded-pool, hidden-in-node, or
K_maxover-provisioning patterns โ it stays in v1.x. - This file is the source of truth for the paradigm of each major version; roadmap is the source of truth for which specific items are in flight.