Self-hosted personal AI assistant with Feishu integration, a built-in web console, and LiteLLM multi-model support.
Project description
Self-hosted personal AI assistant
Feishu channel · Built-in Web console · LiteLLM multi-model
What it is
OpenFox runs on your own machine: it brings LLM chat, scheduled jobs, Feishu bot, browser tools, MCP, and local skills together in one HTTP service. It ships with an embedded Web UI at /web, and you can also talk to the assistant from Feishu.
| Path | Description |
|---|---|
~/.openfox/config.json |
LLM, Feishu, cors_origin_list, MCP, and related settings |
~/.openfox/storage.db |
SQLite storage for sessions and scheduling |
~/.openfox/skills |
Local Skills root (SKILLS_PATH in openfox/utils/const.py); on first run, if missing, copied from packaged openfox/skills (see openfox/core/skills.py) |
Features
| Capability | Description |
|---|---|
| Web console | Chat, session list, usage metrics, skill upload/management, Cron scheduling, JSON config editor (login required; use os_security_key from config) |
| Feishu | Event and message intake; DM and group chat (mention the bot) |
| Scheduled jobs | Built-in scheduler; enable with tools.scheduler (SchedulerConfig). Agent toolkit SchedulerTools creates recurring tasks (cron → POST Agent run endpoint) |
| Tools | See “Built-in Agent tools” below; you can also attach MCP via config.mcps. JSON config editing in the Web console uses ConfigTools (not an Agent chat tool). |
| Skills | SKILL.md under SKILLS_PATH (~/.openfox/skills, LocalSkills); upload skill packs from the Web UI |
| Models | LiteLLM for OpenAI-compatible APIs (see “Models” below) |
Built-in Agent tools
| Tool class | What it does |
|---|---|
| ShellTools | Run shell commands on the host where OpenFox runs (Agno) |
| SchedulerTools | Registered when tools.scheduler.activate is true. Create / list / get / delete / disable jobs; cron expressions invoke this Agent's run endpoint |
| FeishuTools | Feishu-related actions (e.g. messaging with the channel) |
| MCPConfigTools | Add / remove / update MCP-related config in chat to extend tools dynamically |
| WebSearchTools | Search the web |
| ArxivTools | Search arXiv papers and metadata |
| HackerNewsTools | Read Hacker News stories and discussions |
| PubmedTools | Search PubMed biomedical literature |
| WikipediaTools | Look up Wikipedia articles and summaries |
| Crawl4aiTools | Fetch and parse page content with Crawl4AI (suited to structured extraction) |
| CalculatorTools | Evaluate math expressions |
| DockerTools | Manage local Docker: containers, images, volumes, networks (Docker must be available) |
| YouTubeTools | YouTube: metadata, captions, timestamps, etc. (requires youtube_transcript_api) |
| WebBrowserTools | Open a URL in the system default browser on this machine (new tab or new window) |
Quick start
Environment: Python 3.12+. Install from PyPI:
pip install openfox
First run: If ~/.openfox/config.json is missing, an interactive setup runs (API docs toggle, auth, os_security_key, timezone, LLM, Feishu, etc.), then the server starts.
python -m openfox
# Binds to 0.0.0.0:7777 by default
For custom --host / --port, run python -m openfox --help for CLI subcommands and flags.
- Web UI: Open
http://127.0.0.1:7777/web(adjust port as needed). - Auth token: The
os_security_keyvalue from config; enter it on the Web login page. - Non-7777 ports: Default CORS includes
/webon:7777. If you change the port, add e.g.http://127.0.0.1:<port>andhttp://localhost:<port>tocors_origin_list, or the frontend may fail API calls.
To re-run setup only, delete ~/.openfox/config.json and run python -m openfox again. Existing config skips the wizard and starts directly.
Feishu integration
Request path prefix is /feishu.
- Event / webhook example:
http://<your-host-or-domain>/feishu/event(match whatever Feishu Open Platform expects and your routes).
Steps in brief:
- Create an app on Feishu Open Platform and obtain App ID and App Secret.
- Configure event subscription and message permissions; set the request URL to your service (public URL or tunnel); fill Encrypt Key and Verification Token.
- Write these into
channels.feishuin~/.openfox/config.json, then restartpython -m openfox. - In Feishu DM or group chat, use the app (e.g. @ bot) to talk to OpenFox.
Models (LiteLLM)
OpenFox uses LiteLLM. For any provider in LiteLLM’s supported list that exposes an OpenAI-style Chat Completions API, you usually only need llm.model_name, llm.api_base, and llm.api_key.
Example model strings (see official docs for the full list):
openai/gpt-4o-mini
deepseek/deepseek-chat
dashscope/qwen-max
ollama/llama3.1
...
Screenshots
Feishu
Web UI
Chat
Sessions
Usage
Skills
Scheduled jobs
Config
Intranet tunnel (optional)
Brief comparison with OpenClaw
| Aspect | OpenClaw | OpenFox |
|---|---|---|
| Stack | Node / TypeScript | Python, Agno, FastAPI |
| Channels | Many IM platforms | Feishu-first (extensible) |
| Extensions | Browser, Canvas, Cron, etc. | Cron, Shell, browser (Playwright), MCP, local Skills |
| Focus | Cross-platform personal assistant | Self-hosted, bilingual-friendly, lightweight control plane with integrated Web UI |
Thanks & community
Stars help us keep improving.
Community chat
When joining, say you’re here for openfox:
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 openfox-2026.4.16.post5.tar.gz.
File metadata
- Download URL: openfox-2026.4.16.post5.tar.gz
- Upload date:
- Size: 29.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
763a4f775dc8e24107f40fa062a8e5f536cad193c9cd2ebec3252ea4685b5d5b
|
|
| MD5 |
8568b7f34dd4061373509111623656be
|
|
| BLAKE2b-256 |
48a845774c5d01fca65e50575791bb40560cd0eaa7f6fe879fb7fd395ee4a1ac
|
File details
Details for the file openfox-2026.4.16.post5-py3-none-any.whl.
File metadata
- Download URL: openfox-2026.4.16.post5-py3-none-any.whl
- Upload date:
- Size: 3.8 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c89781fed70266b5d926b11a89ada41911a4d82710fbbf03f57540c4f93d510b
|
|
| MD5 |
fddfcdcf20e0c4c01c0c21aded0d75de
|
|
| BLAKE2b-256 |
0eb4fd9b931c865e3f8659f3d3d2b2d9de78b17854e837abaf3c79eb761e81c6
|