{"id":44085498,"url":"https://github.com/zhangzhengeric/sage","last_synced_at":"2026-04-26T18:01:18.175Z","repository":{"id":295375316,"uuid":"989917360","full_name":"ZHangZHengEric/Sage","owner":"ZHangZHengEric","description":"Multi-Agent System Framework For Complex Tasks","archived":false,"fork":false,"pushed_at":"2026-04-21T05:37:25.000Z","size":70002,"stargazers_count":1243,"open_issues_count":2,"forks_count":94,"subscribers_count":38,"default_branch":"main","last_synced_at":"2026-04-21T06:41:44.614Z","etag":null,"topics":["agents","ai","llm","manus","muilt-agents","workflow"],"latest_commit_sha":null,"homepage":"https://zhangzhengeric.github.io/Sage/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZHangZHengEric.png","metadata":{"files":{"readme":"README.md","changelog":"change_log.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-25T05:33:11.000Z","updated_at":"2026-04-21T05:37:30.000Z","dependencies_parsed_at":"2025-05-25T08:18:38.514Z","dependency_job_id":"fc554e9e-976b-4f89-ad0d-30bf74bb36e5","html_url":"https://github.com/ZHangZHengEric/Sage","commit_stats":null,"previous_names":["zhangzhengeric/sage"],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/ZHangZHengEric/Sage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZHangZHengEric%2FSage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZHangZHengEric%2FSage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZHangZHengEric%2FSage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZHangZHengEric%2FSage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZHangZHengEric","download_url":"https://codeload.github.com/ZHangZHengEric/Sage/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZHangZHengEric%2FSage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32307015,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T17:23:19.671Z","status":"ssl_error","status_checked_at":"2026-04-26T17:23:19.195Z","response_time":129,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","ai","llm","manus","muilt-agents","workflow"],"created_at":"2026-02-08T10:02:48.343Z","updated_at":"2026-04-26T18:01:18.160Z","avatar_url":"https://github.com/ZHangZHengEric.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🌟 **Experience Sage's Power**\n\n![cover](assets/cover.png)\n\n[![English](https://img.shields.io/badge/Language-English-blue.svg)](README.md)\n[![简体中文](https://img.shields.io/badge/语言-简体中文-red.svg)](README_CN.md)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?logo=opensourceinitiative)](LICENSE)\n[![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue.svg?logo=python)](https://python.org)\n[![Version](https://img.shields.io/badge/Version-1.1.0-green.svg)](https://github.com/ZHangZHengEric/Sage)\n[![DeepWiki](https://img.shields.io/badge/DeepWiki-Learn%20More-purple.svg)](https://deepwiki.com/ZHangZHengEric/Sage)\n[![Slack](https://img.shields.io/badge/Slack-Join%20Community-4A154B?logo=slack)](https://join.slack.com/t/sage-b021145/shared_invite/zt-3t8nabs6c-qCEDzNUYtMblPshQTKSWOA)\n\n# 🧠 **Sage Agent Platform**\n\n### 🎯 **From Complex Work to Reliable Delivery**\n\n\u003e 🌟 **A production-ready agent platform for task execution, automation, browser workflows, IM delivery, and enterprise deployment.**\n\n\u003c/div\u003e\n\n---\n\n## 📸 **Product Screenshots**\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n      \u003cimg src=\"assets/screenshots/workbench.png\" width=\"100%\" alt=\"Workbench\"/\u003e\n      \u003cbr/\u003e\u003cstrong\u003eVisual Workbench\u003c/strong\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n      \u003cimg src=\"assets/screenshots/chat.png\" width=\"100%\" alt=\"Chat\"/\u003e\n      \u003cbr/\u003e\u003cstrong\u003eReal-time Collaboration\u003c/strong\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n      \u003cimg src=\"assets/screenshots/preview.png\" width=\"100%\" alt=\"Preview\"/\u003e\n      \u003cbr/\u003e\u003cstrong\u003eMulti-format Support\u003c/strong\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n\u003e 📖 **Detailed Documentation**: [https://wiki.sage.zavixai.com/](https://wiki.sage.zavixai.com/)\n\n---\n\n## ✨ **Key Features**\n\n- 🤖 **Planning to Delivery**: Built-in planning, execution, self-check, memory recall, and tool suggestion agents for complex task completion.\n- 🌐 **Multi-Entry Product Surface**: Use Sage from desktop, web, CLI, and Chrome extension depending on the workflow.\n- 🔁 **Automation \u0026 Recurring Tasks**: Run scheduled jobs, questionnaire-driven collection flows, and long-running operational tasks with progress visibility.\n- 💬 **Omnichannel IM Integration**: Connect WeChat Personal (iLink), WeCom, Feishu, and DingTalk with message and file delivery support.\n- 🧰 **Unified Tooling System**: Combine built-in tools, Skills, MCP servers, browser automation, search, and image generation in one execution stack.\n- 🛡️ **Sandboxed Execution**: Local, passthrough, and remote sandbox options for safer agent runtime isolation.\n- 🛠️ **Visual Workbench**: Inspect files, tool outputs, code, charts, Mermaid, Draw.io, audio, video, and remote previews in one workspace.\n- 🏢 **Enterprise-Ready Foundation**: OAuth2, configurable auth and CORS, shared service architecture, CI coverage, and deployable multi-platform packaging.\n\n---\n\n## 🚀 **Quick Start**\n\n### Installation\n\n```bash\ngit clone https://github.com/ZHangZHengEric/Sage.git\ncd Sage\n```\n\n### Running Sage\n\n**Option 1: One-Command Startup (Recommended for Development)**\n\n```bash\n# 1. Optional: activate your environment first\n# conda activate your-env\n\n# 2. Set your LLM API Key\nexport SAGE_DEFAULT_LLM_API_KEY=\"your-api-key\"\nexport SAGE_DEFAULT_LLM_API_BASE_URL=\"https://api.deepseek.com/v1\"\nexport SAGE_DEFAULT_LLM_MODEL_NAME=\"deepseek-chat\"\n\n# 3. Run the startup script\n./scripts/dev-up.sh\n```\n\nThe script will automatically:\n- Check Python (\u003e= 3.10) and Node.js (\u003e= 18) versions\n- Create configuration files (minimal mode: SQLite, no external dependencies)\n- Install dependencies and start both backend and frontend services\n- Create `logs/server.log` automatically\n- Honor `SAGE_PORT` from `.env` for backend startup and health checks\n\nOptional overrides:\n\n```bash\n# Explicitly choose a Python executable\nPYTHON_BIN=/path/to/python ./scripts/dev-up.sh\n\n# Use uv instead of python -m pip / python -m ...\nUSE_UV=1 ./scripts/dev-up.sh\n```\n\n**First time?** The script will prompt you to choose between:\n- **Minimal mode**: SQLite, no external dependencies (recommended for quick start)\n- **Full mode**: MySQL + Elasticsearch + RustFS (for production-like environment)\n\nAfter starting, open: http://localhost:5173\n\n**Option 2: Desktop Application (Recommended for Users)**\n\nDownload the latest desktop package from [GitHub Releases](https://github.com/ZHangZHengEric/Sage/releases):\n- **macOS**: `.dmg` (Intel \u0026 Apple Silicon)\n- **Windows**: `.exe` / `.msi`\n- **Linux**: `.deb` (x86_64 / arm64)\n\n#### Desktop Installation Guide\n\n**macOS**\n\n1. Download the `.dmg` for your CPU architecture and open it.\n2. Drag `Sage.app` into the `Applications` folder.\n3. The current macOS build is not yet signed/notarized by Apple. If you see a warning that the developer cannot be verified or Apple cannot check the app for malicious software, open `Applications`, right-click `Sage.app`, choose `Open`, and then click `Open` again in the dialog.\n4. If macOS still blocks the app, go to `System Settings -\u003e Privacy \u0026 Security`, find the Sage warning near the bottom, and click `Open Anyway`.\n5. If macOS says the app is damaged or still refuses to launch, run the following command and try again:\n\n```bash\nxattr -dr com.apple.quarantine /Applications/Sage.app\n```\n\n**Windows**\n\n1. Download the `.exe` installer and run it.\n2. Follow the setup wizard to finish installation.\n3. If Windows SmartScreen shows a warning, click `More info` -\u003e `Run anyway`.\n\n**Linux**\n\n1. Download the `.deb` package for your architecture from [GitHub Releases](https://github.com/ZHangZHengEric/Sage/releases).\n2. On Debian/Ubuntu, you can install it directly by double-clicking it, or by running:\n\n```bash\nsudo apt install ./Sage-\u003cversion\u003e-\u003carch\u003e.deb\n```\n\nIf you prefer to build the desktop app from source, use the commands below.\n\n```bash\n# macOS/Linux\napp/desktop/scripts/build.sh release\n\n# Windows\n./app/desktop/scripts/build_windows.ps1 release\n```\n\n**Command Line Interface (CLI)**:\n```bash\n# Install editable package\npip install -e .\n\n# Configure the minimum runtime variables\nexport SAGE_DEFAULT_LLM_API_KEY=\"your-api-key\"\nexport SAGE_DEFAULT_LLM_API_BASE_URL=\"https://api.deepseek.com/v1\"\nexport SAGE_DEFAULT_LLM_MODEL_NAME=\"deepseek-chat\"\nexport SAGE_DB_TYPE=\"file\"\n\n# Diagnose local runtime config\nsage doctor\n\n# Create a shared local CLI/Desktop config in ~/.sage/.sage_env if needed\nsage config init\n\n# Run a quick task\nsage run --stats \"Say hello briefly.\"\n\n# Start an interactive chat session\nsage chat\n```\n\nDetailed CLI usage is documented here:\n- English: [docs/en/CLI.md](docs/en/CLI.md)\n- 中文: [docs/zh/CLI.md](docs/zh/CLI.md)\n\nThe CLI now defaults to the same local data root as desktop: `~/.sage/`.\nBy default it reads `~/.sage/.sage_env` first, and then lets a repository-local `.env` override it for development.\nWhen `--json` is enabled, the CLI emits stream events and appends a final `cli_stats` event for structured post-run inspection.\n\n**Web Application (FastAPI + Vue3)**:\n\n```bash\n# Start backend\npython -m app.server.main\n\n# Start frontend (in another terminal)\ncd app/server/web\nnpm install\nnpm run dev\n```\n\n---\n\n## 🏗️ **System Architecture**\n\n```mermaid\ngraph TD\n    User[User] --\u003e Desktop[💻 Desktop App]\n    User --\u003e Web[🌐 Web App]\n    User --\u003e CLI[⌨️ CLI]\n    User --\u003e Ext[🧩 Chrome Extension]\n    User --\u003e IM[💬 IM Channels]\n\n    Desktop --\u003e AppLayer[🧭 App Service Layer]\n    Web --\u003e AppLayer\n    CLI --\u003e AppLayer\n    Ext --\u003e AppLayer\n    IM --\u003e AppLayer\n\n    subgraph App[Product Layer]\n        AppLayer --\u003e Chat[💬 Chat \u0026 Sessions]\n        AppLayer --\u003e AgentsUI[🤖 Agent Management]\n        AppLayer --\u003e Tasks[⏰ Tasks \u0026 Automations]\n        AppLayer --\u003e Browser[🌐 Browser Bridge]\n        AppLayer --\u003e Workbench[🛠️ Visual Workbench]\n    end\n\n    subgraph Core[SAgents Core]\n        AppLayer --\u003e Runtime[🧠 Session Runtime]\n        Runtime --\u003e Flow[📋 AgentFlow]\n        Flow --\u003e Agents[\"🤖 Agents\u003cbr/\u003ePlan / Simple / Fibre / Self-Check\"]\n        Agents --\u003e Memory[🧠 Memory Recall]\n        Agents --\u003e Skills[🧩 Skills]\n        Agents --\u003e ToolMgr[🛠️ Tool Manager]\n    end\n\n    subgraph Tools[Execution \u0026 Integration]\n        ToolMgr --\u003e MCP[🔌 MCP Servers]\n        ToolMgr --\u003e BrowserTools[🌍 Browser Automation]\n        ToolMgr --\u003e Search[🔎 Unified Search]\n        ToolMgr --\u003e ImageGen[🎨 Image Generation]\n        ToolMgr --\u003e Questionnaire[📝 Questionnaire]\n        ToolMgr --\u003e IMTools[📨 IM Delivery]\n    end\n\n    subgraph RuntimeEnv[Runtime \u0026 Infrastructure]\n        Agents --\u003e Sandbox[📦 Sandbox Runtime]\n        Sandbox --\u003e Local[Local]\n        Sandbox --\u003e Pass[Passthrough]\n        Sandbox --\u003e Remote[Remote]\n        AppLayer \u003c--\u003e Common[🧱 Shared Common Services]\n        Common \u003c--\u003e DB[(SQL Database)]\n        Memory \u003c--\u003e ES[(Elasticsearch)]\n        Workbench \u003c--\u003e FS[(RustFS / Local Files)]\n        Runtime -.-\u003e Obs[\"👁️ Observability\u003cbr/\u003eOpenTelemetry\"]\n    end\n```\n\n---\n\n## 📅 **What's New in v1.1.0**\n\n### 🤖 **SAgents Kernel Updates**\n\n- **Execution Chain Enhancements**: Added `PlanAgent`, `SelfCheckAgent`, `MemoryRecallAgent`, and `ToolSuggestionAgent`\n- **Context Efficiency**: Improved user input optimization and conversation history compression for long-running tasks\n- **Session \u0026 Messaging**: Added edit-and-rerun support, richer progress feedback, and better session inspection workflows\n- **Tooling Expansion**: Added questionnaire collection workflows and improved tool-call rendering, truncation, and observability\n\n### 💻 **Product Layer Updates**\n\n- **New Entry Points**: Added Sage CLI, Chrome extension, and browser automation tooling\n- **Workbench Upgrades**: Expanded support for audio, video, Mermaid, Draw.io, remote file preview, and richer tool cards\n- **Chat Experience**: Improved progress messages, delivery flow display, reasoning content presentation, and workspace interactions\n- **IM Integrations**: Expanded WeChat Personal (iLink), WeCom, Feishu, and DingTalk support with stronger file messaging flows\n\n### 🛡️ **Platform \u0026 Infrastructure**\n\n- **Enterprise Readiness**: Added OAuth2, email verification, and stronger auth/CORS/security controls\n- **Sandbox \u0026 Runtime**: Refactored local/passthrough/remote sandbox support and improved Node runtime/sidecar packaging\n- **Shared Architecture**: Extracted reusable `common/` services, models, and schemas across desktop and server\n- **Documentation \u0026 CI**: Rebuilt the docs structure, added CLI guides, and expanded CI/test coverage\n\n**[View Full Release Notes](release_notes/v1.1.0.md)**\n\n---\n\n## 📚 **Documentation**\n\n- 📖 **Full Documentation**: [https://wiki.sage.zavixai.com/](https://wiki.sage.zavixai.com/)\n- 📝 **Release Notes**: [release_notes/](release_notes/)\n- 🏗️ **Architecture**: See `sagents/`, `common/`, and `app/` for the core runtime and product layers\n- 🔧 **Configuration**: Environment variables and config files in `app/desktop/`\n\n---\n\n## 🛠️ **Development**\n\n### Project Structure\n\n```\nSage/\n├── sagents/                    # SAgents core runtime, flow, context, tools, sandbox\n├── common/                     # Shared models, schemas, services, core clients\n├── app/\n│   ├── desktop/                # Desktop app (Python backend + Vue UI + Tauri shell)\n│   ├── server/                 # Server app and web frontend\n│   ├── cli/                    # Sage CLI entrypoint and services\n│   └── chrome-extension/       # Browser extension and sidepanel\n├── mcp_servers/                # IM, search, scheduler, image generation and more\n├── docs/                       # English and Chinese documentation\n└── release_notes/              # Version release notes\n```\n\n### Contributing\n\nWe welcome contributions! Please see our [GitHub Issues](https://github.com/ZHangZHengEric/Sage/issues) for tasks and discussions.\n\n---\n\n## 💖 **Sponsors**\n\n\u003cdiv align=\"center\"\u003e\n\nWe are grateful to our sponsors for their support in making Sage better:\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n      \u003ca href=\"#\" target=\"_blank\"\u003e\n        \u003cimg src=\"assets/sponsors/dudubashi_logo.png\" height=\"50\" alt=\"Dudu Bus\"/\u003e\n      \u003c/a\u003e\n      \u003cbr/\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n      \u003ca href=\"#\" target=\"_blank\"\u003e\n        \u003cimg src=\"assets/sponsors/xunhuanzhineng_logo.svg\" height=\"50\" alt=\"RcrAI\"/\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n      \u003ca href=\"#\" target=\"_blank\"\u003e\n        \u003cimg src=\"assets/sponsors/idata_logo.png\" height=\"50\" alt=\"Data\"/\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n---\n\n## 🦌 **Join Our Community**\n\n\u003cdiv align=\"center\"\u003e\n\n### 💬 Connect with us\n\n[![Slack](https://img.shields.io/badge/Slack-Join%20Community-4A154B?logo=slack\u0026style=for-the-badge)](https://join.slack.com/t/sage-b021145/shared_invite/zt-3t8nabs6c-qCEDzNUYtMblPshQTKSWOA)\n\n### 📱 WeChat Group\n\n\u003cimg src=\"assets/WeChatGroup.jpg\" width=\"300\" alt=\"WeChat Group QR Code\"/\u003e\n\n*Scan to join our WeChat community 🦌*\n\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\nBuilt with ❤️ by the Sage Team 🦌\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhangzhengeric%2Fsage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhangzhengeric%2Fsage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhangzhengeric%2Fsage/lists"}