Open-source desktop AI agent that gets work done — plans & self-corrects, agentic visual workflows, generative UI, and 100+ offline tools in one self-hostable stack.
$ npx -y skills add vixues/LeAgent --agent claude-code
Repo: vixues/LeAgent
What's inside
LeAgent is an open-source desktop AI agent that doesn't just chat — it gets work done. Unlike cloud chatbots and code-only CLIs, LeAgent fuses three capabilities most agents keep apart: a streaming agent runtime that plans, calls tools, and self-corrects in one think-act loop; agentic visual workflows where the agent designs, runs, and refines ReactFlow DAGs (and every one of its tools is automatically a typed node); and a generative UI layer that streams live, interactive interfaces — KPI boards, slide decks, galleries — right into the chat. It ships 100+ built-in offline tools (documents, web, data, code, databases, media, game-art generation) plus a declarative rule engine, Agent Skills, and the Model Context Protocol — all running locally with zero external dependencies by default (SQLite, single process). Bring your own model keys, or run fully offline against a local Ollama / vLLM endpoint.
It is built for people who want a private, hackable, self-hosted alternative to closed agent products: your documents, sessions, and credentials never leave the machine unless you point a provider at a remote API.
QueryEngine session orchestrator drives both chat and background paths through one think-act loop, with durable checkpoints for pausing and resuming turns.SKILL.md bundles with progressive disclosure and on-demand loading. Ship built-in skills, install from links or archives, or plug in an HTTP skill registry.LeAgent is a complete agent platform, not a starter kit — the building blocks below are wired together and work out of the box, fully offline by default.
LeAgent is an async Python (FastAPI) backend plus a React 19 single-page app, packaged as a modular monolith. The backend uses a strict, downward-only layered domain model — File → Code → Project — over a single persistence layer, and every agent turn (chat, SDK, background task, sub-agent, workflow node) converges on one think-act kernel.
LeAgent/
├── backend/ # FastAPI backend (Python 3.11+, uv-managed)
│ └── leagent/
│ ├── agent/ # QueryEngine orchestrator, planner, subagents
│ ├── sdk/ # Versioned public Agent SDK (runtime, kernel, protocols)
│ ├── api/ # FastAPI routers (v1 + incubating v2)
│ ├── llm/ # LLM service, providers, transport, streaming, generation
│ ├── tools/ # 100+ tools across 13 categories
│ ├── workflow/ # Workflow engine, nodes, art-asset pipeline, templates
│ ├── context/ # Source-driven, relevance-gated prompt assembly
│ ├── prompts/ # Layered PromptBuilder, registry, templates
│ ├── memory/ # Episodic / semantic / procedural agent memory
│ ├── skills/ # Agent Skills v1.0 loader + registry
│ ├── rules/ # Declarative YAML rule engine
│ ├── mcp/ # Model Context Protocol
│ ├── file/ code/ project/ # Layered file → code → project domain model
│ ├── db/ # Persistence: engine, SQLModel models, repositories
│ └── services/ # DB, auth, chat, session, gen-ui, cron, ...
├── frontend/ # React 19 + TypeScript SPA (Vite, Zustand, React Query)
├── desktop/ # Electron shell (bundled Python runtime)
├── deploy/ # Dockerfile + SQLite-only Compose
├── config/ # Demo workflows + workflow templates
├── docs/ # Architecture, guides, deployment docs
└── start.sh / start.ps1 # Dev orchestrator (uv + npm)
Regardless of where a request enters, it flows through one set of well-defined boundaries. Each ingress mints a single ExecutionRun (with a run_id and, for child scopes, a parent_run_id), goes through a thin facade, runs on the shared kernel, and persists to durable state with one owner per state class:
Ingress HTTP/SSE · WebSocket · Cron · Background task · GenUI
│
▼
Facade ServiceManager.runtime_context · AgentRuntime · WorkflowService
│
▼
Kernel run_loop → QueryEngine → tool executor (single think-act loop)
│
▼
State TieredSessionStore · CheckpointStore · WorkflowStateStore
│
▼
Observe EventManager (FLOW_*/TASK_*/AGENT_*) · OpenTelemetry
leagent.sdk.kernel.run_loop. Turns pause to a durable checkpoint when they await user input, then resume exactly where they left off.WorkflowExecutor, which stages ready batches, runs independent branches concurrently, and applies centralized retry/backoff and timeouts.TieredSessionStore, paused turns in CheckpointStore (agent_checkpoints), and workflow runs in WorkflowStateStore — no shared mutable state across subsystems.See AGENTS.md for the full subsystem map and docs/technical/execution-topology.md for the authoritative agent-loop / workflow-engine state contract.
Every tool is auto-exposed as a typed workflow node, so anything the agent can call can also be wired into a visual flow.
| Category | What it covers |
|---|---|
| Documents | Read/write Word, Excel, PPTX, PDF; OCR; classification; archives; text processing |
| Web | Search (DuckDuckGo / SearXNG / Bing), scraping, image & native media download |
| Data | Clean, merge, validate, transform, aggregate, SQL & vector search |
| Code | Sandboxed in-process scripts and a subprocess code-execution agent |
| Database | Schema-aware querying over the managed database |
| Generate | Word / Excel / PPTX / PDF / report / checklist / template-fill generators |
| Canvas / GenUI | Stream and patch declarative UI trees; publish canvases |
| Charts & Images | Chart generation and image processing |
| Media | Image / video / 3D / audio generation backends |
| Skills | Discover, install, and invoke Agent Skills |
| Workflow | Save, run, and inspect workflows from inside an agent turn |
| Integration | MCP, webhooks, channels, and external service calls |
| Utilities | Cron, tasks, rule matching, folders, text splitting, pet bubbles, and more |
Showing a partial view of a very large repo.
FAQ
leagent is a Claude Code plugin with 7 hand-picked skills for automation work, indexed on Flowy. Install it with the command on its page. It includes attendance-signin-sheet, data-analyzer, document-processor. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it