A lightweight personal AI assistant framework
Project description
Flowly is a personal AI assistant that lives on your machine. Connect it to Telegram, WhatsApp, Discord, or Slack — then talk to it from anywhere. It can browse the web, manage files, run shell commands, take screenshots, schedule tasks, make phone calls, and more.
You (Telegram) → Flowly (your Mac/PC) → tools, files, APIs → response
Why Flowly?
- Runs on your machine — your data stays local, your tools stay private
- Always on — install as a background service, survives terminal close and reboot
- Multi-agent — create custom agents backed by Claude Code or Codex, build teams, delegate tasks
- Multi-channel — one agent, reachable from Telegram, WhatsApp, Discord, Slack
- Voice calls — answer phone calls with Twilio, talk with real-time STT/TTS
- Extensible — add tools, skills, personas, or entire channel adapters
- Cross-platform — macOS (launchd), Linux (systemd), Windows (Task Scheduler)
- Multi-provider — OpenRouter, Anthropic, OpenAI, xAI/Grok, Gemini, and more via LiteLLM
Quick Start
1. Install
With uv (recommended)
uv tool install flowly-ai
From PyPI
pip install flowly-ai
From source (development)
git clone https://github.com/hakansoren/flowlyai.git && cd flowlyai
pip install -e .
2. Setup
flowly onboard # Initialize config & workspace
flowly setup # Interactive setup wizard (API keys, channels, tools)
3. Run
flowly agent -m "What can you do?" # Single message
flowly agent # Interactive chat
flowly gateway # Start all channels
API keys: Get your OpenRouter key, then run
flowly setupor edit~/.flowly/config.jsondirectly. Optional: Groq (voice), Brave Search (web search).
Architecture
┌─────────────────────────────────────────────┐
│ Gateway │
│ │
│ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
│ │ Telegram │ │ WhatsApp │ │ Discord │ │
│ │ Slack │ │ Voice │ │ CLI │ │
│ └────┬─────┘ └────┬─────┘ └─────┬─────┘ │
│ └──────────────┼──────────────┘ │
│ ▼ │
│ ┌──────────────┐ │
│ │ Agent Loop │ │
│ │ (LiteLLM) │ │
│ └──────┬───────┘ │
│ ▼ │
│ ┌─────┐ ┌──────┐ ┌─────┐ ┌──────┐ ┌─────┐ │
│ │Shell│ │ Web │ │File │ │ Cron │ │ ... │ │
│ └─────┘ └──────┘ └─────┘ └──────┘ └─────┘ │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ Skills · Personas · Hub · Memory │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
Multi-Agent
Flowly can delegate tasks to external AI agents like Claude Code, Codex, Gemini CLI, OpenCode, or Droid. Each agent runs as a CLI subprocess in the background — Flowly sends the task, responds to you immediately, and delivers the result when the agent finishes.
Setup
flowly setup agents # Interactive wizard — add agents, create teams
Or edit ~/.flowly/config.json directly:
{
"agents": {
"defaults": { "model": "anthropic/claude-sonnet-4-5" },
"agents": {
"coder": {
"name": "Code Assistant",
"provider": "anthropic",
"model": "sonnet"
},
"reviewer": {
"name": "Code Reviewer",
"provider": "openai",
"model": "gpt-5.3-codex"
}
},
"teams": {
"dev": {
"name": "Development Team",
"agents": ["coder", "reviewer"],
"leaderAgent": "coder"
}
}
}
}
Requirements: Install the CLI tool for each provider:
| Provider | CLI Required | Model names |
|---|---|---|
anthropic |
Claude Code (claude) |
sonnet, opus, haiku |
openai |
Codex (codex) |
gpt-5.3-codex, gpt-5.2 |
gemini |
Gemini CLI (gemini) |
gemini-3-pro, gemini-3-flash, gemini-2.5-pro, gemini-2.5-flash |
opencode |
OpenCode (opencode) |
anthropic/claude-sonnet-4-5, openai/gpt-4o, ... |
droid |
Droid (droid) |
opus, sonnet, gpt-5 |
Usage
@mention — prefix your message with @agent_id to talk to a specific agent:
@coder fix the login bug in auth.py
@reviewer review the last PR
@team — mention a team name to reach its leader agent:
@dev fix the auth bug → routes to "coder" (team leader)
Natural language — or just ask Flowly, and it decides whether to delegate:
You: build me a todo app with Flask
Flowly: I'll delegate this to @coder...
[coder works in the background — you can keep chatting]
Flowly: @coder finished! Here's what was built: ...
How It Works
- Routing:
@mentionmessages are rewritten so the main Flowly agent calls thedelegate_totool. Messages without@go to the default Flowly agent, which can also choose to delegate on its own. - Fire-and-forget: The
delegate_totool starts a CLI subprocess in the background and returns immediately — you can keep chatting while the agent works. - Result delivery: When the subprocess finishes, the result is sent back through the main agent (via the message bus), which summarizes it for you.
- Loop prevention: Delegate results are marked with
[DELEGATE_RESULT:]— when processing these, thedelegate_totool is temporarily removed to prevent infinite re-delegation. - Working directory: Agents run in your home directory by default (or a custom
workingDirectoryfrom config), with teammate info injected via--append-system-prompt.
Built-in Tools
| Tool | What it does |
|---|---|
| Shell | Run commands on your machine (sandboxed) |
| Filesystem | Read, write, edit, list files and directories |
| Web Search | Search the web with Brave Search API |
| Web Fetch | Fetch and extract content from URLs |
| Screenshot | Capture your screen |
| Cron | Schedule recurring or one-time tasks |
| Docker | Manage containers and images |
| Trello | Create and manage boards, lists, cards |
| X (Twitter) | Post tweets, search, read timelines, get profiles |
| System | CPU, memory, disk, process monitoring |
| Voice | Make and receive phone calls via Twilio |
| Message | Send messages across channels |
| Delegate | Delegate tasks to other agents (Claude Code, Codex, etc.) |
| Spawn | Run background sub-agents |
Channels
Connect Flowly to your favorite chat apps. Each channel runs simultaneously through the gateway.
Telegram — easiest setup
- Create a bot via
@BotFatheron Telegram - Add to config:
{
"channels": {
"telegram": {
"enabled": true,
"token": "YOUR_BOT_TOKEN",
"allowFrom": ["YOUR_USER_ID"]
}
}
}
flowly gateway
Get your user ID from
@userinfobot.
WhatsApp — scan QR
flowly channels login # Scan QR code
flowly gateway # Start (in another terminal)
{
"channels": {
"whatsapp": {
"enabled": true,
"allowFrom": ["+1234567890"]
}
}
}
Requires Node.js ≥18.
Discord
- Create app at Discord Developer Portal
- Enable Message Content Intent under Privileged Gateway Intents
- Generate invite URL with
botscope +Send Messages+Read Message History
{
"channels": {
"discord": {
"enabled": true,
"token": "YOUR_BOT_TOKEN",
"allowFrom": ["YOUR_USER_ID"]
}
}
}
Slack
- Create app at api.slack.com/apps
- Enable Socket Mode, add bot scopes:
chat:write,app_mentions:read,im:history - Subscribe to events:
message.im,app_mention
{
"channels": {
"slack": {
"enabled": true,
"botToken": "xoxb-...",
"appToken": "xapp-...",
"groupPolicy": "mention"
}
}
}
No public URL needed — Socket Mode connects outbound.
Providers
Flowly uses LiteLLM under the hood, giving you access to 100+ LLM models. Configure your preferred provider:
| Provider | Model prefix | Config key |
|---|---|---|
| OpenRouter | anthropic/claude-*, openai/gpt-*, ... |
providers.openrouter.apiKey |
| Anthropic | claude-* |
providers.anthropic.apiKey |
| OpenAI | gpt-*, o1-* |
providers.openai.apiKey |
| xAI | xai/grok-* |
providers.xai.apiKey |
| Google Gemini | gemini/* |
providers.gemini.apiKey |
| Zhipu | zhipu/* |
providers.zhipu.apiKey |
| vLLM (self-hosted) | any | providers.vllm.apiBase |
| Groq (voice STT) | — | providers.groq.apiKey |
Example: Switch to Grok
{
"providers": {
"xai": { "apiKey": "xai-..." }
},
"agents": {
"defaults": { "model": "xai/grok-4" }
}
}
Skills
Skills are plug-and-play capability packs. Install from the hub or create your own:
flowly skills list # List installed
flowly skills search weather # Search hub
flowly skills install weather # Install
| Skill | What it does |
|---|---|
| github | Interact with GitHub via gh CLI |
| weather | Weather forecasts (wttr.in + Open-Meteo) |
| summarize | Summarize URLs, files, YouTube videos |
| tmux | Remote control tmux sessions |
| skill-creator | Generate new skills from description |
Create your own: drop a SKILL.md file in ~/.flowly/workspace/skills/your-skill/.
Security
Command Execution Sandbox
Flowly's shell tool uses a configurable security sandbox:
| Mode | Behavior |
|---|---|
deny |
All commands blocked (default) |
allowlist |
Only approved patterns run; unknown commands are asked or denied |
full |
All commands allowed (use with caution) |
Ask modes (for allowlist):
on-miss— ask the user via chat when a command isn't in the allowlist (recommended)always— ask for every commandoff— silently deny unknown commands
flowly setup # Configure via wizard
flowly approvals status # View current config
flowly approvals list # View allowlist
Device Pairing
Channels use a pairing system to authorize users:
flowly pairing list # Pending requests
flowly pairing approve telegram CODE # Approve
flowly pairing revoke telegram USER # Revoke
flowly pairing allowed telegram # List allowed
Background Service
Run Flowly as a persistent service — survives terminal close and auto-starts on boot:
flowly service install --start # Install and start
flowly service status # Health check
flowly service logs -f # Follow logs
flowly service restart # Restart
flowly service stop # Stop
flowly service uninstall # Remove
| Platform | Backend |
|---|---|
| macOS | launchd (LaunchAgents) |
| Linux | systemd (user service) |
| Windows | Task Scheduler |
Personas
Switch how Flowly talks without changing functionality:
flowly persona list # See all
flowly persona set jarvis # Switch persona
flowly service restart # Apply
| Persona | Style |
|---|---|
default |
Helpful and friendly |
jarvis |
J.A.R.V.I.S. — British AI, dry wit |
friday |
F.R.I.D.A.Y. — warm, professional |
pirate |
"Aye aye, Captain!" |
samurai |
Brief and wise |
casual |
Your best buddy |
professor |
Step-by-step explanations |
butler |
Distinguished, ultra-polite |
Create your own: drop a .md file in ~/.flowly/workspace/personas/.
Voice Calls
Flowly can answer and make phone calls with real-time speech:
flowly setup # Configure Twilio + STT/TTS
flowly gateway # Start with voice enabled
Supported providers:
- STT: Groq Whisper, Deepgram, OpenAI, ElevenLabs
- TTS: ElevenLabs, Deepgram, OpenAI
- Telephony: Twilio
CLI Reference
Setup & Config
flowly onboard Initialize config & workspace
flowly setup Interactive setup wizard
flowly setup agents Configure multi-agent (add agents, teams)
flowly status Overall system status
Agent
flowly agent -m "..." Send a single message
flowly agent Interactive chat mode
flowly gateway Start gateway (all channels)
flowly gateway --persona jarvis Start with a persona
Service
flowly service install --start Install and start background service
flowly service status Health check
flowly service logs -f Follow logs
flowly service restart Restart service
flowly service stop / uninstall Stop or remove
Channels
flowly channels login Link WhatsApp (QR code)
flowly channels status Channel connection status
Personas
flowly persona list List all personas
flowly persona set <name> Switch active persona
flowly persona show <name> View persona details
Skills
flowly skills list List installed skills
flowly skills search <query> Search skill hub
flowly skills install <name> Install a skill
flowly skills remove <name> Remove a skill
Scheduling
flowly cron list List scheduled jobs
flowly cron add Add a new job
flowly cron remove <id> Remove a job
flowly cron run <id> Manually run a job
Security
flowly approvals status Exec sandbox config
flowly approvals list View allowlist
flowly approvals add <pattern> Add allowlist pattern
flowly approvals remove <id> Remove allowlist entry
flowly pairing list Pending pairing requests
flowly pairing approve <ch> <code> Approve user
flowly pairing revoke <ch> <user> Revoke access
Configuration
All config lives in ~/.flowly/config.json (camelCase keys):
{
"providers": {
"openrouter": { "apiKey": "sk-or-v1-..." },
"xai": { "apiKey": "xai-..." },
"groq": { "apiKey": "gsk_..." }
},
"agents": {
"defaults": {
"model": "anthropic/claude-sonnet-4-5",
"maxTokens": 16384,
"temperature": 0.7,
"persona": "default"
},
"agents": {
"coder": { "provider": "anthropic", "model": "sonnet" },
"reviewer": { "provider": "openai", "model": "gpt-5.3-codex" }
},
"teams": {
"dev": { "agents": ["coder", "reviewer"], "leaderAgent": "coder" }
}
},
"channels": {
"telegram": { "enabled": true, "token": "...", "dmPolicy": "pairing" },
"discord": { "enabled": true, "token": "..." },
"slack": { "enabled": true, "botToken": "xoxb-...", "appToken": "xapp-..." },
"whatsapp": { "enabled": true }
},
"tools": {
"web": { "search": { "braveApiKey": "..." } },
"exec": {
"enabled": true,
"security": "allowlist",
"ask": "on-miss"
}
},
"integrations": {
"trello": { "apiKey": "...", "token": "..." },
"x": {
"bearerToken": "...",
"apiKey": "...", "apiSecret": "...",
"accessToken": "...", "accessTokenSecret": "..."
},
"voice": { "enabled": true, "twilioAccountSid": "...", "twilioAuthToken": "..." }
},
"gateway": {
"host": "0.0.0.0",
"port": 18790
}
}
Project Structure
flowly/
├── agent/ # Core agent loop, context, memory
│ └── tools/ # Built-in tools (shell, web, file, cron, delegate, ...)
├── multiagent/ # Multi-agent orchestration (router, invoker, orchestrator)
├── channels/ # Chat platform adapters (Telegram, Discord, ...)
├── providers/ # LLM provider abstraction (LiteLLM)
├── cli/ # CLI commands and setup wizard
├── config/ # Configuration schema and loader
├── cron/ # Task scheduling service
├── session/ # Conversation session management
├── bus/ # Event bus for message routing
├── heartbeat/ # Periodic wake-up service
└── utils/ # Cross-platform utilities
Requirements
| Minimum | |
|---|---|
| Python | ≥ 3.11 |
| Node.js | ≥ 18 (only for WhatsApp bridge) |
| OS | macOS, Linux, or Windows |
Desktop App
Flowly Desktop — Electron app with guided setup, one-click install, and visual management.
Contributing
Contributions are welcome! Flowly is designed to be readable and extensible:
- Add a tool: Create a class extending
Toolinflowly/agent/tools/, register it inloop.py - Add a channel: Implement
BaseChannelinflowly/channels/ - Add a provider: Add detection logic in
flowly/providers/litellm_provider.py - Add a skill: Drop a
SKILL.mdin a new folder under~/.flowly/workspace/skills/
Please open an issue first for large changes.
Changelog
2026-03-12 — Memory search, reliability features (v1.5.0)
- Memory search system: hybrid BM25 keyword + vector (OpenAI/Gemini) search over
memory/*.mdfiles viamemory_searchandmemory_gettools — scales beyond single-prompt injection - API key rotation: automatic failover across
fallback_keyson auth/rate-limit/overload errors with per-key cooldown - Context overflow recovery: detects context-length errors, trims history to last 20 messages, retries once automatically
- Audit trail: daily JSONL logs at
~/.flowly/audit/YYYY-MM-DD.jsonlfor all tool calls, LLM calls, and key rotations - Stronger memory instructions: agent now proactively writes to memory on user preferences, decisions, and key facts
2026-02-11 — Multi-agent, X API, command execution (v1.0.0)
- Multi-agent delegation: send tasks to Claude Code, Codex, Gemini CLI, OpenCode, or Droid via
@mentionordelegate_totool - Fire-and-forget execution — agents run in background, results delivered asynchronously
- Interactive agent setup wizard:
flowly setup agents - X (Twitter) API integration (post, search, timeline, profiles)
- xAI/Grok as LiteLLM provider
- Command execution setup wizard
- Cron job results injected into user session
- License changed to Apache 2.0
2026-02-10 — Discord & Slack channels, setup wizard
- Discord and Slack channel implementations
- Interactive CLI setup wizard (
flowly setup) - Multi-channel manager support
2026-02-09 — Service mode, personas, screenshot delegation
- Background service mode (launchd/systemd/schtasks)
- 8 built-in personas (Jarvis, Friday, Pirate, etc.)
- Electron-delegated screenshot system
- Voice call improvements
2026-02-06 — Integrated voice system, new tools
- Twilio voice bridge with real-time audio streaming
- ElevenLabs, Deepgram, Groq Whisper STT/TTS providers
- Agentic voice call state machine
- System monitoring, Docker, Trello integration tools
- Cross-platform support (Windows/macOS/Linux)
2026-02-04 — Secure execution, pairing system
- Secure command execution sandbox
- Device pairing system
- Interactive setup CLI wizard
2026-02-03 — Initial release
- Core agent loop with LiteLLM provider
- Telegram and WhatsApp channels
- Cron scheduling, context compaction
- Groq Whisper voice transcription
- Flowly Hub skill management
Apache License 2.0 · Copyright 2025-2026 Nocetic Limited
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flowly_ai-1.5.6.tar.gz.
File metadata
- Download URL: flowly_ai-1.5.6.tar.gz
- Upload date:
- Size: 670.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34edff0aa3e5e9dc24c4519e696f39e1b4e824e3827e8e88ea2aa59134bf90aa
|
|
| MD5 |
6ddb8551ccf6b6e1ea54b30e220083b2
|
|
| BLAKE2b-256 |
6045c9460af91d82cd915fcc7611e1fa4cbda76d73f9dc28aaa9d2be08dd3212
|
File details
Details for the file flowly_ai-1.5.6-py3-none-any.whl.
File metadata
- Download URL: flowly_ai-1.5.6-py3-none-any.whl
- Upload date:
- Size: 277.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09eebc92226f238bd22dbdb89c3f02c45a1cbb07dd3d8af74a3d7d940a049192
|
|
| MD5 |
a457c72910e5889a8603208ad5f4c267
|
|
| BLAKE2b-256 |
7df942ad322d27120376400be77b5e962acbad6a824dd70433ea579e6d4a49af
|