v0.7.0 · April 2026

eCan.ai User Manual

AI-native, privacy-first e-commerce agent platform — run your business with networked AI agents on Windows, macOS, Linux, and the web.

Cross-platform Multi-channel Visual Workflow Editor Privacy-first

What is eCan.ai?

eCan.ai (E-Commerce Agent Network) is an AI-native platform that empowers e-commerce sellers to automate every aspect of their business using intelligent agents — from product sourcing and procurement to customer service, marketing research, and advertising — all with minimal human intervention.

Agents run on vehicles (host computers) connected across a LAN or WAN. One computer acts as the commander; others serve as vehicle nodes. A staff-officer device (PC, phone, or tablet) can monitor and command the whole fleet remotely over the internet.

🤖

Networked Agents

Deploy agents across multiple machines. Each agent runs tasks independently via LangGraph workflows.

🎨

Visual Skill Editor

Drag-and-drop flowgram canvas to build LangGraph workflows — no boilerplate code required.

🌐

Multi-Channel

Connect agents to Telegram, Slack, Discord, WhatsApp, DingTalk, Messenger, X, and built-in web chat.

🔒

Privacy-First

Run on-premise with local LLMs (Ollama, Qwen) — your data never has to leave your infrastructure.

🖥️

Browser Automation

Playwright, Selenium, Browser-use, and Crawl4ai — handle any website, CAPTCHA, or fingerprint browser.

👁️

Vision / OCR

eCanOCR combines Tesseract + PaddleOCR for accurate screen reading and CV-guided automation.

Core Concepts

Agents

An Agent is the primary actor in eCan.ai. Each agent has an identity, an avatar, and a set of tasks it can perform. Agents run on vehicles (host computers) and communicate with humans or other agents through channels.

Tasks & Skills

A Task is a job assigned to an agent (e.g., "monitor product prices daily"). Every task requires a Skill — a LangGraph-based workflow that describes how the task is carried out. Skills are authored visually in the Skill Editor or coded directly in Python.

Tasks can be triggered by a human command, on a one-time schedule, or on a recurring schedule (e.g., every day at 08:00).

Vehicles

A Vehicle is any computer (desktop, server, VM) that hosts one or more agents. Vehicles join the eCan.ai network and receive task assignments from the commander node.

Skills

Skills are stored under $SKILL_ROOT/my_skills/. The graphical representation lives in the diagram_dir sub-directory; hand-coded LangGraph skills live in code_dir. Both can co-exist and be translated between each other.

Installation

Desktop App (Windows / macOS)

Download the latest installer from ecan.ai/download. The installer bundles Python, all dependencies, and a Chromium browser. No separate Python installation is required.

After installation, launch eCan.ai from your Applications folder or Start Menu. On first launch you will be prompted to create an account or log in.

Headless Web Server (Linux / Ubuntu)

For server deployments without a GUI, eCan.ai runs in Web Mode — a WebSocket/REST server you interact with via a browser or the CLI.

System Requirements Ubuntu 20.04 LTS or newer · Python 3.10+ (3.12+ recommended) · 4 GB RAM minimum (8 GB recommended) · 20 GB disk
1

Install system packages

sudo apt-get update
sudo apt-get install -y python3 python3-venv python3-pip \
    libpq-dev gcc libffi-dev tesseract-ocr poppler-utils git
2

Clone and run the deploy script

git clone <repo-url> eCan.ai && cd eCan.ai
chmod +x scripts/deploy-ubuntu.sh
./scripts/deploy-ubuntu.sh setup
3

Add API keys

# Edit .env.web and fill in your LLM provider keys:
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
DASHSCOPE_API_KEY=...   # Qwen / Alibaba
4

Start the server

./scripts/deploy-ubuntu.sh start
# Verify: curl http://localhost:8765/health
DEPLOYMENT_UBUNTU.md — Full Ubuntu deployment guide WEB_DEPLOYMENT.md — Web/Docker deployment architecture

Quick Start

1

Create an agent

In the sidebar, click Agents → New Agent. Give it a name and optionally upload an avatar image or video.

2

Build or load a skill

Open Skills → Skill Editor. Drag nodes onto the canvas, connect them, and click Save. Alternatively, load one of the built-in example skills.

3

Create a task

Go to Tasks → New Task. Select the agent, choose the skill, set a trigger (manual, schedule, or on-event), and save.

4

Run and chat

Press Run on the task card. The agent starts the skill. Chat with the agent in the built-in web chat panel (or via any connected channel).

Agents & Tasks

Managing Agents

Each agent has a name, description, avatar, and a set of default task assignments. You can create multiple agents and assign them to different vehicles (machines) in your network.

Task Triggers

Trigger TypeDescription
ManualRun immediately when you click Run
Schedule (one-time)Run at a specific date and time
Schedule (recurring)Cron-like recurring execution (e.g., daily 08:00)
On EventTriggered by an incoming message, webhook, or system event

Multi-Agent & Multi-Task

Multiple agents can run simultaneously, each handling different tasks in parallel threads. Agents communicate with each other using the A2A protocol (Agent-to-Agent), an emerging open standard for inter-agent messaging.

Skill Editor

The Skill Editor is a visual IDE for building LangGraph workflows. It uses a flowgram canvas where you place and connect nodes to describe agent behavior.

skill_editor_help.md — Full Skill Editor guide mapping-dsl.md — Data mapping reference prompt-variable-resolution.md — Prompt variable system

Canvas Basics

Adding Nodes

Right-click anywhere on the canvas (or click the node icon in the toolbar) to open the node selection menu. Click a node type, then click on the canvas to place it. Each node has a configuration panel — double-click the node to open it.

Connecting Nodes

Click and drag from a node's output port to another node's input port to draw an edge. To remove an edge, drag its endpoint to a blank canvas area. To re-route, drag the endpoint to a different input port.

Navigation

Multi-Sheet Workflows

Large workflows can be split across multiple sheets (canvases). Use the sheet menu (layers icon, upper right) to add, remove, or rename sheets.

Important naming convention The sheet containing the workflow's entry-point Start node must be named main. Other sheets are called via sheet-call nodes.

Cross-Sheet References

To call another sheet's logic:

  1. On the callee sheet, add a sheet-inputs node (declares input names) and a sheet-outputs node (declares output names).
  2. On the caller sheet, insert a sheet-call node and select the target sheet from the dropdown.
  3. Map each input/output to constants or local node ports in the sidebar.

Multi-sheet bundles are saved as a -bundle.json companion file alongside the main flow JSON.

Data Movements — Mapping DSL

Nodes exchange data through a shared node state object. Because each workflow has a unique state shape, eCan.ai uses a simple Mapping DSL (JSON-based) to describe how data moves between nodes and between external events and node state.

The same DSL handles resume payloads when a workflow is interrupted and later resumed (e.g., when human input arrives or a timer fires).

mapping-dsl.md — Mapping DSL reference

Saving & Loading

Run & Debug

When debugging a skill, it runs as a special development task under a tester agent. If your workflow involves chat, prefix your test messages with dev> to route them to the tester agent.

Breakpoints

Open the node's upper-right menu to toggle a breakpoint. When execution hits a breakpoint, it pauses before running that node. You can then inspect and modify the node state before resuming.

Controlled Execution

Use the toolbar controls: Pause · Step · Resume · Stop. A running animation highlights the currently executing node.

Test Run

Click Test Run to execute the workflow in isolation. Provide input JSON in the Inputs panel; inspect outputs from each node and the final End node in the Outputs panel.

Version Control

Node Reference

Start / End
Start & End

Start emits the initial state values; End collects and displays the final workflow outputs.

Code
Code Node

Inline code editor (Monaco) supporting Python, JavaScript, and TypeScript. Use the language selector to switch; "Reset to template" restores a starter snippet; "Load File" imports from disk.

LLM
LLM Node

Calls a language model. Choose the provider and model from dropdowns. By convention, always instruct the LLM to return structured JSON: {"message": "...", "meta_data": {...}} — this makes inter-node data passing much easier.

HTTP
HTTP Node

Configures an outbound HTTP request (method, URL, headers, params, body, timeout, API key). The response is stored in the node state's http_response field.

Condition
Condition Node

Routes execution to different branches based on predicates evaluated against the node state.

Loop
Loop Node

Iterates over an array in the node state, running the nested block for each element.

Group
Group Node

Visually groups related nodes for clarity. Does not affect execution.

MCP Tool Call
MCP Tool Call Node

Invokes an MCP (Model-Context-Protocol) tool. Input must be in the node state's tool_input field. The raw result (TextContent, ImageContent, or AudioContent) is stored in tool_result.

Pend For Event
Pend For Event Node

Suspends the workflow until a specific event arrives (human message, timer expiry, webhook, SSE push, etc.). An i_tag links the interrupt to the correct resumption point. Use cases: human-in-the-loop, async API callbacks, pub/sub events.

Sheet Call
Sheet Call Node

Invokes the workflow defined on another sheet within the same project, passing mapped inputs and receiving mapped outputs.

Browser Automation

eCan.ai integrates multiple state-of-the-art web automation libraries, making it suitable for everything from routine scraping to complex multi-step workflows on anti-bot e-commerce sites.

LibraryBest ForIntegration
Browser-useAI-driven browsing with natural language instructionsAvailable as a LangGraph node callable
Crawl4aiFast, AI-ready web scrapingAvailable as a LangGraph node callable
PlaywrightModern headless browser automationIn-browser MCP tools (click, type, scroll, wait, script)
Selenium / ChromeDriverFingerprint browsers (AdsPower, etc.)Selenium MCP tools (click, type, scroll, keyboard)

Computer-Vision Guided Actions

When in-browser automation isn't enough (pop-ups, CAPTCHAs, non-standard UIs), eCan.ai's eCanOCR service provides screen understanding and CV-guided mouse/keyboard actions — giving you full control over any desktop or browser window.

eCanMCP.md — Full MCP tool reference BROWSER_EVENT_MONITOR.md — Browser event monitoring

OCR Service (eCanOCR)

eCanOCR is an API service that converts screen images to structured text. It combines Tesseract's speed with a modified PaddleOCR engine for high accuracy, automatically restructuring raw OCR output into hierarchical paragraphs, lines, and words.

Key Capabilities

Content Skill Files (.csk)

A .csk file describes expected page contents using a JSON instruction set. It defines anchors (distinct text or icon landmarks) and info regions (areas of interest relative to anchors). This lets agents reliably extract structured data from repeating page layouts.

eCanOCR.md — OCR service reference

MCP Tools

eCan.ai exposes a set of streamable HTTP MCP tools that any LLM-integrated workflow can call. These tools are organized into five categories:

🖱️

Mouse & Keyboard

Click, double-click, right-click, drag-drop, scroll, text typing, key press. CV-guided targeting by anchor name or text.

👁️

Screen Vision

Capture screens, extract structured text via eCanOCR, search for specific elements by name and type.

📁

File & Directory

OS-level file and directory operations — read, write, list, move, delete.

🌐

Browser Actions

Playwright and Selenium in-browser tools: click, type, scroll, execute scripts, wait for elements, keyboard combos.

🔌

API Requests

Generic HTTP requests with configurable method, headers, and body — call any external API from a workflow.

eCanMCP.md — Full MCP tool syntax reference MULTI_TOOL_CALLS.md — Serial & parallel multi-tool calls

Channel Integrations

The channel system lets eCan.ai agents receive and reply to messages from external messaging platforms. Every channel adapter normalizes inbound messages into a common format, routes them through the agent pipeline, and sends replies back to the originating platform.

💬
WebChatBuilt-in (always active)
✈️
TelegramLong-polling, no webhook needed
💼
SlackSocket Mode (WebSocket)
🎮
DiscordGateway bot (WebSocket)
📱
WhatsAppCloud API + webhook*
📎
DingTalkStream Mode (WebSocket)
👤
Facebook MessengerGraph API + webhook*
🐦
X (Twitter)Account Activity API + webhook*

* Requires a publicly accessible endpoint (e.g., via ngrok or a reverse proxy).

Quick Setup

All channel configuration lives in agent/agent_files/channels.json. Enable a channel, fill in credentials, and restart eCan.ai — the channel manager starts automatically.

{
  "channels": {
    "telegram": {
      "enabled": true,
      "bot_token": "YOUR_BOT_TOKEN",
      "allowed_chat_ids": [],
      "default_agent_id": ""
    }
  }
}

Set default_agent_id to route a channel's messages to a specific agent, or leave it empty to route to the first available agent.

Telegram Setup

  1. Message @BotFather on Telegram → /newbot → copy the bot token.
  2. Add the token to channels.json under "telegram".
  3. Restart eCan.ai — the bot is live immediately.

Slack Setup

  1. Create a Slack App at api.slack.com/apps.
  2. Enable Socket Mode and subscribe to message.* events.
  3. Add bot_token and app_token to channels.json.
  4. Invite the bot: /invite @YourBotName in a channel.

WhatsApp / Messenger / X

These channels require a public webhook endpoint. Use ngrok for development:

ngrok http 8443   # WhatsApp
ngrok http 8444   # Messenger
ngrok http 8445   # X (Twitter)

Register the ngrok URL as the webhook in each platform's developer console, then fill in the credentials in channels.json.

channels.md — Full channel configuration & troubleshooting

Avatar System

Each agent can have a static image avatar or a dynamic video avatar. Avatars are stored locally and automatically synced to AWS S3 in the background.

Supported Formats

TypeFormatsDisplay
ImagePNG, JPG, GIF, WebPStatic image
VideoWebM, MP4, MOV, AVILooping, muted, auto-play

S3 Cloud Sync

After upload, the file is saved locally and then uploaded to AWS S3 in a background thread — the UI is not blocked. The S3 URL is stored in the database and used when syncing agent data to the cloud.

Optional: ffmpeg If ffmpeg is installed, a thumbnail frame is automatically extracted from video uploads. Without ffmpeg, videos still work — the poster image is simply omitted.
AVATAR_GUIDE.md — Avatar system reference S3_SETUP.md — S3 configuration guide

CLI Reference

The eCan.ai CLI provides full control over the server and all resources in headless mode. No GUI required.

python ecan_cli.py --help          # global help
python ecan_cli.py version         # show version
python ecan_cli.py status          # system status

Authentication

python ecan_cli.py auth login -u username -p password
python ecan_cli.py auth status
python ecan_cli.py auth logout

Resource Commands

ResourceCommands
agentslist · get · add · update · remove · run · stop · monitor
taskslist · get · add · remove
skillslist · get · add · remove
vehicleslist · get · add · remove
knowledgelist · get
promptslist · get · add · remove
toolslist · get
settingsshow · set · reset
serverstart · stop · restart · status · logs

Server Management

python ecan_cli.py server start                        # start in background
python ecan_cli.py server start --host 0.0.0.0 --port 8080
python ecan_cli.py server start --foreground           # foreground (debug)
python ecan_cli.py server logs --follow                # tail logs
python ecan_cli.py server stop

Output Formats

Most list commands support --output table (default) and --output json for scripting:

python ecan_cli.py agents list --output json | jq '.agents[0].name'
CLI_GUIDE.md — Full CLI reference

Server Deployment

Environment Variables

VariableDefaultDescription
ECAN_MODEwebMust be web for headless mode
ECAN_WS_HOST0.0.0.0WebSocket bind address
ECAN_WS_PORT8765WebSocket port
ECAN_LOG_LEVELINFODEBUG / INFO / WARNING / ERROR

Docker

docker-compose -f docker-compose.web.yml up -d
docker-compose -f docker-compose.web.yml logs -f

Nginx Reverse Proxy (Production)

server {
    listen 80;
    server_name your-domain.com;
    location / {
        proxy_pass http://127.0.0.1:8765;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
}

Systemd Service

[Unit]
Description=eCan.ai Web Server
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/eCan.ai
EnvironmentFile=/opt/eCan.ai/.env.web
ExecStart=/opt/eCan.ai/venv/bin/python -m uvicorn web_server:app \
          --host 127.0.0.1 --port 8765
Restart=always

[Install]
WantedBy=multi-user.target

Web Mode Limitations

FeatureDesktopWeb / Headless
File dialogs❌ (use file paths)
Screen capture
Desktop automation
Native notifications
DEPLOYMENT_UBUNTU.md — Ubuntu deployment guide WEB_DEPLOYMENT.md — Web/Docker architecture

Proxy Management

eCan.ai includes a built-in proxy management system for routing browser automation through HTTP/SOCKS proxies — essential for e-commerce workflows that require IP rotation or geo-specific access.

Proxies are configured per-agent or per-task and are automatically applied to Playwright, Selenium, and HTTP request nodes.

PROXY_MANAGEMENT_SYSTEM.md — Proxy management reference

Settings & API Keys

LLM Providers

Add API keys for the LLM providers you want to use. Keys are stored in .env (desktop) or .env.web (server).

ProviderEnvironment Variable
OpenAI (GPT-4o, o1, etc.)OPENAI_API_KEY
Anthropic (Claude)ANTHROPIC_API_KEY
Google (Gemini)GOOGLE_API_KEY
Alibaba (Qwen / DashScope)DASHSCOPE_API_KEY
Local (Ollama)No key required — configure base URL in Settings

In-App Settings

Open Settings from the sidebar to configure LLM defaults, browser automation options, memory limits, update preferences, and more. Changes take effect immediately without restarting.

Keyboard Shortcuts

Skill Editor

Ctrl/Cmd + ZUndo Ctrl/Cmd + YRedo Ctrl/Cmd + SSave flow Ctrl + ScrollZoom in / out Middle MousePan canvas Shift + DragMulti-select nodes Double-click NodeOpen node editor Right-click CanvasAdd node menu

General App

Ctrl/Cmd + ,Open Settings Ctrl/Cmd + KCommand palette EscapeClose modal / cancel

FAQ & Troubleshooting

The skill editor doesn't load

Refresh the page and ensure the eCan.ai backend server is running. In desktop mode, check the system tray icon — if it shows an error, restart the app.

My agent doesn't respond on a channel

  1. Verify "enabled": true is set in channels.json.
  2. Ensure at least one agent has a running task with a skill containing a chat or Pend For Event node.
  3. Check app logs for [ChannelBridge] entries — look for "No agent available" or "dispatch_inbound error".
  4. For webhook channels (WhatsApp, Messenger, X): verify the webhook URL is publicly accessible and the verify token matches.

Server won't start

# Check if the port is already in use
netstat -an | grep 8765
# Or use a different port
./scripts/deploy-ubuntu.sh start -- --port 8080
# View logs
./scripts/deploy-ubuntu.sh logs

LLM calls are failing

Browser automation errors

How do I switch languages in a Code node?

Use the language dropdown above the Monaco editor in the Code node's editor panel. Supports Python, JavaScript, and TypeScript.

All Documents

Detailed reference documents for each subsystem:

User-Facing Guides

Skill Editor Help Channel Integrations CLI Reference Avatar System MCP Tools OCR Service Mapping DSL Prompt Variables Multi-Tool Calls

Deployment & Operations

Ubuntu Deployment Web / Docker Deployment S3 Avatar Storage Proxy Management Memory Monitor Token Usage Tracking Browser Event Monitor

Architecture & Internals

IPC Architecture Event-Driven Chat Build System OTA Update Paths Release Guide Release Environments Frontend Store Architecture Python 3.14 Asyncio Compat