Skip to content

Visual Designer

The Visual Designer is a flow-based canvas for building and editing team structures visually. Create teams by dragging agents, drawing connections, and configuring relationships in an intuitive interface.


Overview

Path: /teams/designer (new team) or /teams/{id}/designer (edit existing)

Key Features:

  • Drag-and-drop canvas
  • Visual node-based agent representation
  • Connection lines for relationships
  • Properties panel for configuration
  • Auto-layout for clean organization
  • Real-time preview

Built with: Vue Flow (verified from app/components/designer/ directory and app/types/domains/team.ts)


Designer Interface

Canvas Layout

┌─────────────────────────────────────────────────────────────┐
│  Header: Team Name, Save, Cancel, Auto-Layout             │
├─────────────────┬───────────────────────────────────────────┤
│                 │                                           │
│  Toolbox Panel  │         Canvas (Infinite)                │
│                 │                                           │
│  • Add Agent    │    [Agent Node]──→[Agent Node]           │
│  • Add Team     │                                           │
│  • Add Tool     │    [Agent Node]──→[Agent Node]           │
│                 │                                           │
│                 │                                           │
├─────────────────┴───────────────────────────────────────────┤
│  Properties Panel: Selected Node/Edge Configuration        │
└─────────────────────────────────────────────────────────────┘

Canvas Features

Infinite Canvas: Pan and zoom anywhere

  • Pan: Click and drag on empty canvas
  • Zoom: Mouse wheel or pinch gesture
  • Fit View: Auto-centers all nodes

Grid: Optional snap-to-grid (enabled by default)

  • Grid Size: 20px
  • Snap: Nodes snap to grid when dragging
  • Toggle: Settings panel → Grid Enabled

Background: Dot pattern (light/dark mode adaptive)


Node Types

Agent Node

Appearance: Rounded rectangle with icon, name, and role badge

Components (from app/components/designer/ and flow types):

┌──────────────────────┐
│  👤  Agent Name      │
│  Description         │
│  [Manager] badge     │
└──────────────────────┘

Visual Indicators:

  • Icon: Agent icon or avatar
  • Name: Agent display name
  • Role Badge: "Manager", "Orchestrator", or "Member"
  • Color: Based on role (purple for manager, blue for member)
  • Border: Highlighted when selected

Connection Points:

  • Top: Input (receives from other agents)
  • Bottom: Output (sends to other agents)
  • Sides: Bidirectional (AI Delegation)

Team Node

Purpose: Reference another team as a sub-component

Appearance: Group-style node with team icon

┌──────────────────────┐
│  👥  Team Name       │
│  X agents            │
└──────────────────────┘

Use Case: Multi-tier workflows (Team A escalates to Team B)

Connection: Can connect to agents or other teams

Tool Node

Purpose: Represent external integrations in workflow

Appearance: Hexagonal node with tool icon

    ┌──────────┐
   /  🔧 Tool  \
  /   Name      \
  \             /
   └──────────┘

Status: Coming Soon — Tool nodes visible but not functional yet


Adding Nodes

From Toolbox

Steps:

  1. Click "Add Agent" in toolbox panel
  2. Select from existing agents OR create new
  3. Node appears at canvas center
  4. Drag to desired position

Existing vs New:

  • Existing Agent: References agent from /gnosaris list
  • New Agent: Creates team-specific agent (form opens in modal)

Via Agent Selector Modal

Interface: Modal with agent list and search

Filters:

  • Search by name or description
  • Filter by role (Manager, Member, etc.)
  • Show only agents not already in team

Action: Click agent → adds node to canvas


Creating Connections

Drawing Connections

Method 1: Drag from Connection Point

  1. Hover over agent node
  2. Connection points appear (top, bottom, sides)
  3. Click and drag from point
  4. Drop on target agent's connection point
  5. Connection line appears

Method 2: Connection Mode

  1. Click "Connect Mode" button in toolbar
  2. Click source agent
  3. Click target agent
  4. Connection created automatically

Connection Types

When creating a connection, you select the type:

Modal appears with options:

  • AI Delegation (bidirectional arrow)
  • Handoff (one-way arrow)

Visual Differences:

AI Delegation:  [Agent A] ⟷ [Agent B]
Handoff:        [Agent A] → [Agent B]

Connection Labels

Optional: Add label to describe relationship

Examples:

  • "Escalate technical issues"
  • "Delegate research tasks"
  • "Route to billing specialist"

Display: Label appears on connection line (hover to see full text)


Editing Nodes

Selecting Nodes

Single Selection: Click on node Multi-Selection:

  • Click and drag to draw selection box
  • Hold Ctrl/Cmd and click multiple nodes

Selected State: Blue border, connection points visible

Properties Panel

When node selected, Properties Panel (bottom) shows:

Agent Node Properties

Tabs: Info, Configuration, Knowledge, Tools

Info Tab:

  • Name (editable)
  • Description (editable)
  • Role (dropdown: Manager, Orchestrator, Member)
  • Image URL (optional)

Configuration Tab:

  • Capabilities (toggles):
    • Reasoning
    • Multimodal
    • Allow Delegation
  • Instructions (textarea)

Knowledge Tab:

  • Assigned knowledge sources (multi-select)
  • Add/remove sources

Tools Tab:

  • Assigned tools (multi-select)
  • Add/remove tools

Save: Changes auto-save on blur (no save button)

Node Actions

Right-click context menu:

  • Edit: Open properties panel
  • Duplicate: Create copy of node
  • Delete: Remove node from canvas
  • Center: Pan canvas to center this node

Keyboard shortcuts:

  • Delete: Remove selected node(s)
  • Ctrl+D: Duplicate selected node
  • Ctrl+C / Ctrl+V: Copy/paste

Editing Connections

Selecting Connections

Click on connection line → highlights edge, shows properties

Properties Panel (Edge)

Fields:

  • Type: AI Delegation or Handoff (dropdown)
  • Label: Optional descriptive text
  • Condition: Optional routing rule (advanced)

Example Condition: "Only if technical issue detected"

Edge Actions

Right-click context menu:

  • Edit Type: Change between AI Delegation and Handoff
  • Add Label: Add descriptive text
  • Delete: Remove connection

Canvas Controls

Toolbar (Top)

ButtonIconAction
Zoom InPlusIncrease zoom level
Zoom OutMinusDecrease zoom level
Fit ViewFrameAuto-center all nodes
Auto-LayoutGridAutomatically organize nodes
Grid ToggleGrid iconEnable/disable snap-to-grid
UndoArrow leftUndo last action
RedoArrow rightRedo last undone action

Auto-Layout Feature

Purpose: Automatically organize nodes for clean, hierarchical layout

Algorithm: Hierarchical layout (top-to-bottom flow)

Steps:

  1. Click "Auto-Layout" button
  2. Nodes rearrange automatically
  3. Manager at top
  4. Members below in grid
  5. Connections straighten

Customization: Manually adjust after auto-layout

Settings (via properties panel):

  • Direction: Top-to-bottom, Left-to-right
  • Node Spacing: Distance between nodes (default: 100px)
  • Rank Spacing: Distance between levels (default: 150px)

Team Configuration

Team Properties Panel

Access: Click on empty canvas area (deselects all nodes)

Fields:

  • Team Name (required)
  • Identifier (slug, auto-generated)
  • Description (required)
  • Image URL (optional)

Advanced Settings:

  • Auto-save: Enable/disable auto-save (default: on)
  • Theme: Light or dark designer theme
  • Grid: Enable/disable grid and snap

Saving and Publishing

Auto-Save

Default: Enabled Frequency: Every 3 seconds (debounced) Indicator: "Saved" badge in header

What's saved:

  • Node positions
  • Connections
  • Node configurations
  • Team metadata

Storage: Flow data stored in TeamFlowData format (from app/types/domains/team.ts):

typescript
{
  nodes: FlowNode[],     // Array of agent/team/tool nodes
  edges: FlowEdge[],     // Array of connection lines
  viewport: {            // Canvas view state
    x: number,
    y: number,
    zoom: number
  }
}

Manual Save

Button: "Save Team" in header (always visible)

Action:

  1. Validates team structure (at least 2 agents, valid connections)
  2. Saves flow data to database
  3. Creates/updates team record
  4. Redirects to team list

Validation Errors:

  • "Team must have at least 2 agents"
  • "Team must have a manager"
  • "All agents must be connected"
  • "Circular connections not allowed"

Cancel

Button: "Cancel" in header

Action:

  • If auto-save enabled → discard unsaved changes (last 3 seconds)
  • If auto-save disabled → discard all changes
  • Confirmation dialog if significant changes exist

Flow Data Structure

From app/types/domains/team.ts:

FlowNode

typescript
{
  id: string,                 // Unique node ID
  type: 'agent' | 'team' | 'tool',
  position: { x: number, y: number },
  data: {
    id: number,              // Agent/team/tool ID
    name: string,
    description?: string,
    [key: string]: any       // Additional node-specific data
  }
}

FlowEdge

typescript
{
  id: string,                 // Unique edge ID
  source: string,             // Source node ID
  target: string,             // Target node ID
  type?: string,              // Edge style (default, smooth, step)
  data?: {
    label?: string,           // Connection label
    connectionType?: 'delegation' | 'handoff',
    [key: string]: any
  }
}

TeamFlowData

typescript
{
  nodes: FlowNode[],
  edges: FlowEdge[],
  viewport: {
    x: number,
    y: number,
    zoom: number
  }
}

Storage: Saved in team table as JSON field


Designer Configuration

From app/types/domains/team.ts:

typescript
{
  team_id: number,
  flow_data: TeamFlowData,
  auto_save: boolean,          // Enable auto-save
  grid_enabled: boolean,       // Snap to grid
  snap_to_grid: boolean,       // Same as grid_enabled
  theme: 'light' | 'dark'      // Designer theme
}

Persisted: Per-user, per-team (configuration saved with team)


Keyboard Shortcuts

ShortcutAction
Space + DragPan canvas
Ctrl/Cmd + ScrollZoom in/out
Ctrl/Cmd + ASelect all nodes
Ctrl/Cmd + CCopy selected nodes
Ctrl/Cmd + VPaste nodes
Ctrl/Cmd + DDuplicate selected
Ctrl/Cmd + ZUndo
Ctrl/Cmd + Shift + ZRedo
Delete / BackspaceDelete selected
EscapeDeselect all
FFit view (center all nodes)

Common Patterns

Support Team (Linear Escalation)

User → Tier 1 → Tier 2 → Specialist → Manager

Connections: All Handoff (one-way) Roles: Members + 1 Manager Use Case: Support escalation workflow

Research Team (Hub and Spoke)

       Researcher A

Manager ⟷  Researcher B

       Researcher C

Connections: AI Delegation (bidirectional) Roles: 1 Manager + 3 Members Use Case: Manager delegates research, members report results

Routing Team (Orchestrator-Centric)

         Orchestrator
         /    |    \
    Sales  Support  Product

Connections: Handoff (one-way from orchestrator) Roles: 1 Orchestrator + 3 Members Use Case: Route user to appropriate specialist


Troubleshooting

Nodes Overlapping

Problem: Multiple nodes stacked on top of each other

Fix:

  1. Click "Auto-Layout" button
  2. Or manually drag nodes apart
  3. Enable grid for aligned spacing

Connections Not Drawing

Problem: Can't create connection between nodes

Possible Causes:

  • Source and target are the same node
  • Connection already exists
  • Invalid connection (tool → tool not allowed)

Fix: Verify nodes are different, check existing connections

Auto-Save Not Working

Problem: Changes not saving automatically

Symptoms: "Saved" indicator never appears

Fixes:

  1. Check auto-save toggle in settings
  2. Verify network connection
  3. Check browser console for errors
  4. Try manual save

Canvas Won't Pan/Zoom

Problem: Canvas stuck, can't move or zoom

Fix:

  1. Refresh page
  2. Clear browser cache
  3. Disable browser extensions
  4. Try different browser

Best Practices

Layout Organization

Hierarchical (recommended):

  • Manager at top
  • Orchestrators in middle
  • Members at bottom
  • Left-to-right for sequential flows

Grid Alignment:

  • Enable grid for clean layout
  • Align nodes horizontally at same level
  • Use consistent spacing (100-150px)

Connection Clarity

Labels:

  • Use labels for complex connections
  • Keep labels short (2-4 words)
  • Explain WHY connection exists

Avoid:

  • Crossing lines (hard to read)
  • Circular references (causes infinite loops)
  • Too many connections per node (max 5)

Performance

Large Teams (7+ agents):

  • Group related agents visually
  • Use clear labels
  • Consider splitting into multiple teams

Slow Performance:

  • Reduce number of nodes on canvas
  • Disable auto-save temporarily
  • Close properties panel when not editing

Next Steps