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.
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.
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
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
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
Start the server
./scripts/deploy-ubuntu.sh start
# Verify: curl http://localhost:8765/health
Quick Start
Create an agent
In the sidebar, click Agents → New Agent. Give it a name and optionally upload an avatar image or video.
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.
Create a task
Go to Tasks → New Task. Select the agent, choose the skill, set a trigger (manual, schedule, or on-event), and save.
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 Type | Description |
|---|---|
| Manual | Run 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 Event | Triggered 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 systemCanvas 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
- Pan: Hold the mouse-wheel button and drag, or use the minimap.
- Zoom: Ctrl + scroll wheel.
- Multi-select: Hold Shift and drag a selection rectangle.
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.
sheet-call nodes.
Cross-Sheet References
To call another sheet's logic:
- On the callee sheet, add a
sheet-inputsnode (declares input names) and asheet-outputsnode (declares output names). - On the caller sheet, insert a
sheet-callnode and select the target sheet from the dropdown. - 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 referenceSaving & Loading
- Skills created in the editor are stored under
$SKILL_ROOT/my_skills/diagram_dir/. - Hand-coded LangGraph skills live in
code_dir/. - Data-mapping JSON files are stored at the same level as these directories.
- To view a Python-coded LangGraph skill graphically, call
langgraph2flowgram()to generate the flowgram files.
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
- eCan.ai Cloud (paid): Version-control skills on eCan.ai's Git service and optionally commercialize them.
- Local Git: Skill files are plain JSON — just
git inityour skill directory.
Node Reference
Start emits the initial state values; End collects and displays the final workflow outputs.
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.
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.
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.
Routes execution to different branches based on predicates evaluated against the node state.
Iterates over an array in the node state, running the nested block for each element.
Visually groups related nodes for clarity. Does not affect execution.
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.
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.
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.
| Library | Best For | Integration |
|---|---|---|
| Browser-use | AI-driven browsing with natural language instructions | Available as a LangGraph node callable |
| Crawl4ai | Fast, AI-ready web scraping | Available as a LangGraph node callable |
| Playwright | Modern headless browser automation | In-browser MCP tools (click, type, scroll, wait, script) |
| Selenium / ChromeDriver | Fingerprint 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 monitoringOCR 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
- Image-to-text extraction with paragraph and line segmentation
- Icon recognition (when configured with icon templates)
- Anchor-based content extraction — define key landmarks on a page to locate dynamic content
- Table, calendar, and bounding-box region extraction
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 referenceMCP 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.
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.
* 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
- Message @BotFather on Telegram →
/newbot→ copy the bot token. - Add the token to
channels.jsonunder"telegram". - Restart eCan.ai — the bot is live immediately.
Slack Setup
- Create a Slack App at api.slack.com/apps.
- Enable Socket Mode and subscribe to
message.*events. - Add
bot_tokenandapp_tokentochannels.json. - Invite the bot:
/invite @YourBotNamein 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.
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
| Type | Formats | Display |
|---|---|---|
| Image | PNG, JPG, GIF, WebP | Static image |
| Video | WebM, MP4, MOV, AVI | Looping, 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.
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
| Resource | Commands |
|---|---|
| agents | list · get · add · update · remove · run · stop · monitor |
| tasks | list · get · add · remove |
| skills | list · get · add · remove |
| vehicles | list · get · add · remove |
| knowledge | list · get |
| prompts | list · get · add · remove |
| tools | list · get |
| settings | show · set · reset |
| server | start · 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
| Variable | Default | Description |
|---|---|---|
ECAN_MODE | web | Must be web for headless mode |
ECAN_WS_HOST | 0.0.0.0 | WebSocket bind address |
ECAN_WS_PORT | 8765 | WebSocket port |
ECAN_LOG_LEVEL | INFO | DEBUG / 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
| Feature | Desktop | Web / Headless |
|---|---|---|
| File dialogs | ✅ | ❌ (use file paths) |
| Screen capture | ✅ | ❌ |
| Desktop automation | ✅ | ❌ |
| Native notifications | ✅ | ❌ |
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 referenceSettings & 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).
| Provider | Environment 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
General App
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
- Verify
"enabled": trueis set inchannels.json. - Ensure at least one agent has a running task with a skill containing a chat or Pend For Event node.
- Check app logs for
[ChannelBridge]entries — look for "No agent available" or "dispatch_inbound error". - 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
- Verify your API key is set in
.env/.env.weband is valid. - Check token quota with your provider.
- For local Ollama: ensure the model is downloaded (
ollama pull <model>) and the base URL is correct in Settings.
Browser automation errors
- Run
playwright install chromium --with-depsto ensure the bundled browser is present. - For Selenium-based tools: ensure ChromeDriver matches the installed Chrome/Chromium version.
- On headless servers: screen capture and desktop automation tools are unavailable — use Playwright or Crawl4ai instead.
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: