An open API service indexing awesome lists of open source software.

https://github.com/kevinluosl/deepbot

DeepBot is a system-level AI assistant built for both personal productivity and enterprise workflows — one-click setup, seamless experience, and native Feishu integration.
https://github.com/kevinluosl/deepbot

agent-skills agent-tools agentic-workflow agentos ai-agents harness harness-engineering openclaw

Last synced: 21 days ago
JSON representation

DeepBot is a system-level AI assistant built for both personal productivity and enterprise workflows — one-click setup, seamless experience, and native Feishu integration.

Awesome Lists containing this project

README

          

DeepBot Terminal

**Bring AI into your enterprise workflows — a real working partner, not just a chatbot**

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Node.js](https://img.shields.io/badge/Node.js-20+-green.svg)](https://nodejs.org/)
[![TypeScript](https://img.shields.io/badge/TypeScript-5.3+-blue.svg)](https://www.typescriptlang.org/)
[![Electron](https://img.shields.io/badge/Electron-28+-9feaf9.svg)](https://www.electronjs.org/)

[English](README.md) | [简体中文](README_ZH.md)


---

## 📖 Introduction

DeepBot is a system-level AI assistant focused on enterprise productivity. It integrates deeply with existing enterprise systems, enabling AI to participate in day-to-day operations across departments through multi-Agent collaboration — automating complex business workflows. Whether it's document processing, data analysis, system monitoring, or cross-department coordination, DeepBot handles it through AI Agent technology. It supports parallel task execution, scheduled tasks, and skill extensions, all protected by strict security controls.

### ✨ Core Features

- 🎯 **Parallel Task Processing** — Run multiple tasks simultaneously without interference
- 🔧 **14 Built-in Tools** — File operations, command execution, browser control, image generation, AI chat, cross-session messaging, web fetching, Feishu document operations, and more
- 🧠 **Memory System** — Long-term memory for user preferences and important context
- ⏰ **Scheduled Tasks** — Automate recurring work with cron-based scheduling
- 🎨 **Skill Extensions** — Compose tools into reusable Skills for complex workflows
- 🔒 **Security Controls** — Strict path whitelist to protect system access
- 🤖 **Multi-Model Support** — Qwen, OpenAI, Claude, and more
- 🌐 **External Integrations** — Connect with Feishu and other platforms for cross-platform interaction

---

## 🚀 Quick Start

### Requirements

- **Python**: 3.11+
- **Node.js**: 20.0.0+ (optional, for running JS scripts)
- **pnpm**: 10.23.0+ (optional, for running JS scripts)
- **OS**: macOS, Windows (desktop), Linux/Docker

### Installation

```bash
# Clone the repository
git clone https://github.com/kevinluosl/deepbot.git
cd deepbot

# Install dependencies
pnpm install

# Start in development mode
pnpm run dev
```

### Build Desktop App

```bash
# Build for all platforms
pnpm run dist

# macOS (with code signing + notarization, requires Apple Developer account)
pnpm run dist:mac

# macOS local build (no signing, no notarization — for development/testing)
pnpm run dist:mac:local

# Windows only
pnpm run dist:win
```

**`dist:mac` vs `dist:mac:local`**:

| | `dist:mac` | `dist:mac:local` |
|---|---|---|
| Code signing | ✅ Apple Developer ID | ❌ None |
| Notarization | ✅ Apple notarization | ❌ None |
| Gatekeeper | ✅ Passes verification | ❌ Triggers security warnings |
| Requirements | Apple Developer account + `.env` credentials | None |

To use `dist:mac`, configure the following in your `.env` file:

```bash
# Apple signing and notarization (macOS Electron builds only)
APPLE_ID=your-apple-id@example.com
APPLE_ID_PASSWORD=your-app-specific-password
APPLE_APP_SPECIFIC_PASSWORD=your-app-specific-password
APPLE_TEAM_ID=your-team-id
```

> You can generate an app-specific password at [appleid.apple.com](https://appleid.apple.com). The Team ID can be found in your [Apple Developer account](https://developer.apple.com/account).
| Use case | Production release | Local development / testing |

> **Note**: `dist:mac:local` builds will trigger macOS security warnings on first launch — see the section below for how to handle them.

### Docker Deployment

Docker deployment is available for Linux servers. If you need the Docker version, please contact the author.

**Note for macOS builds**: Signed builds (`dist:mac`) pass Gatekeeper verification and work without issues. Local builds (`dist:mac:local`) are unsigned and will trigger security warnings — see below for solutions.

### macOS Security Warnings (Local Builds)

When using `dist:mac:local` (unsigned builds), macOS may show security warnings on first launch:

#### "App is damaged"

Run this in Terminal, then reopen the app:

```bash
sudo xattr -rd com.apple.quarantine /Applications/DeepBot.app
```

#### "Cannot verify developer"

**Option 1: Right-click to open**

Right-click the app icon, select "Open", then click "Open" again in the dialog.

**Option 2: System Settings**

1. Try to open the app (you'll see a security warning — click "Cancel")
2. Go to "System Settings" → "Privacy & Security"
3. Scroll to the "Security" section
4. Click "Open Anyway"
5. Try opening the app again and click "Open" in the dialog

---

## 🏗️ Architecture

DeepBot uses a modular architecture with support for multi-Agent communication and collaboration:

```
┌─────────────────────────────────────────┐
│ User Interface (Electron) │
│ External Communication: Feishu │
└─────────────────┬───────────────────────┘
│ IPC / WebSocket
┌─────────────────▼───────────────────────┐
│ Gateway (Session Management) │
│ • Session per Tab │
│ • Message queue & routing │
│ • Connector management │
│ • Cross-Tab message routing 🆕 │
└─────────────────┬───────────────────────┘

┌─────────┼─────────┐
▼ ▼ ▼
Session 1 Session 2 Session N
(Tab 1) (Tab 2) (Tab N)
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────┐
│ Agent Runtime (one per Session) │
│ • Intelligent decision & orchestration│
│ • Auto-continue (up to 100 times) │
│ • Operation tracking (max 3 retries) │
│ • Independent memory & context │
│ • Cross-Tab calling tool 🆕 │
│ • Dynamic system prompt assembly 🆕 │
└─────────────────┬───────────────────────┘

┌─────────────────▼───────────────────────┐
│ System Prompt Assembly Layer 🆕 │
│ • Base Agent prompt (AGENT.md) │
│ • Tool instructions (TOOLS.md) │
│ • Custom tool instructions │
│ • Global memory (MEMORY.md) │
│ • Per-tab memory (memory-.md) │
│ • Skills instructions (SKILL.md) │
│ • Dynamic loading & live updates │
└─────────────────┬───────────────────────┘

┌─────────────────▼───────────────────────┐
│ 14 Tools + Security Check │
│ 🔒 Path whitelist • Workspace isolation│
│ 🔄 Cross-Tab messaging tool 🆕 │
└─────────────────┬───────────────────────┘

┌─────────┼─────────┐
▼ ▼ ▼
Skills Scheduled Data Storage
Tasks
```

### Multi-Agent Collaboration 🆕

```
┌─────────────────────────────────────────┐
│ Enterprise Multi-Agent System │
└─────────────────┬───────────────────────┘

┌─────────┼─────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Sales │ │ Gateway │ │Marketing│
│AI Agent │ │Message │ │AI Agent │
└────┬────┘ │Router │ └────┬────┘
│ └────┬────┘ │
└───────────┼───────────┘

┌───────────┼───────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│Solutions│ │Product │ │ R&D │
│AI Agent │ │AI Agent │ │AI Agent │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└───────────┼───────────┘


┌─────────┐
│Project │
│Manager │
│AI Agent │
└─────────┘
```

### Architecture Overview

- **Gateway**: Manages all Sessions. Each Tab maps to an independent Session with cross-Tab message routing.
- **Session**: An isolated conversation unit with its own Agent Runtime, memory, and context.
- **Agent Runtime**: Built on `@mariozechner/pi-agent-core`, handles intelligent decision-making and tool orchestration.
- **System Prompt Assembly Layer**: Dynamically assembles system prompts from base prompts, tool instructions, memory files, and Skills.
- **Tools**: 14 built-in tools including a cross-Tab messaging tool for inter-Agent communication.
- **Security Check**: All file and command operations are validated against a path whitelist.
- **Multi-Agent Collaboration**: Agents in different Tabs can message each other to collaborate on complex tasks.

#### System Prompt Assembly Flow 🆕

```
Agent starts → Load base Agent prompt (AGENT.md)

Load tool instructions (TOOLS.md + CUSTOM-TOOLS.md)

Load global memory (MEMORY.md)

Load per-tab memory (memory-.md)

Load Skills instructions (SKILL.md files)

Assemble complete system prompt

Send to AI model
```

**Dynamic Updates**:
- When memory files change, all Agent system prompts reload automatically
- Installing or uninstalling Skills updates tool instructions in real time
- Hot updates are supported — no app restart required

---

## 🌐 External Integrations (Connectors)

DeepBot connects to external platforms via the Connector system for cross-platform interaction.

### Supported Platforms

#### Feishu (Lark)

Interact with DeepBot through a Feishu bot, supporting both direct messages and group chats.

**Features**:
- ✅ Direct messages (requires pairing authorization)
- ✅ Group messages (supports @mention)
- ✅ Message deduplication (prevents duplicate responses)
- ✅ Independent session per conversation (each chat gets its own Tab)
- ✅ Send images and files to users
- ✅ Feishu document operations (create, read, edit, delete, comment)

**Setup**:

1. In DeepBot, go to "System Settings" → "External Connections" → "Feishu"
2. Enter your Feishu app credentials (App ID, App Secret, Bot Name)
3. Configure security policies (DM policy, group policy)
4. Click "Save" then "Start" the connector

**Detailed Configuration Guide**:

📖 [Feishu Bot Configuration Guide](docs/飞书机器人配置指南.md) (Chinese)

Covers the full Feishu Open Platform setup, permission configuration, and security policy details.

### Coming Soon

- 🔜 Discord
- 🔜 Slack
- 🔜 WeCom (WeChat Work)
- 🔜 DingTalk

---

## 🔧 14 Built-in Tools

| Tool | Function | Typical Use Cases |
|------|----------|-------------------|
| **File Tool** | File read/write | Read configs, save data, search files |
| **Exec Tool** | Run shell commands | Execute scripts, system operations, install packages |
| **Browser Tool** | Browser automation | Screenshots, web automation, content extraction |
| **Calendar Tool** | Calendar management | Check dates, calculate time, schedule reminders |
| **Environment Check** | System inspection | Detect system info, verify dependencies, diagnose issues |
| **Image Generation** | AI image generation | Create images, design assets, visual content |
| **Web Search** | Web search | Real-time queries, research, data collection |
| **Web Fetch** | Fetch web content | Extract articles, download page data |
| **Memory Tool** | Memory management | Store preferences, retrieve historical context |
| **Skill Manager** | Skill management | Install, uninstall, and list skill packages |
| **Scheduled Task** | Task scheduling | Create and manage cron-based tasks |
| **Chat Tool** | AI conversation | Internal AI calls, backend processing, isolated from main Agent context |
| **Cross Tab Call** 🆕 | Cross-Tab messaging | Inter-Agent communication for multi-Agent collaboration |
| **Feishu Doc Tool** | Feishu document ops | Create, read, append, update, delete blocks, add comments |

### Creating Custom Tools

All tools use the unified `ToolPlugin` interface and live in `src/main/tools/`.

#### Quick Start

1. **Create a tool file**

Create a new file in `src/main/tools/` (e.g., `my-tool.ts`):

```typescript
import { Type } from '@sinclair/typebox';
import type { ToolPlugin } from './registry/tool-interface';
import { TOOL_NAMES } from './tool-names';

export const myToolPlugin: ToolPlugin = {
// 工具元数据(用于 UI 展示和管理)
metadata: {
id: 'my-tool', // 唯一标识,kebab-case
name: 'My Tool', // 显示名称(给用户看)
description: 'My custom tool',
version: '1.0.0',
author: 'DeepBot',
category: 'custom', // 分类:file | network | system | ai | custom
tags: ['custom'],
},

// 创建工具实例,接收运行时上下文(工作目录、会话 ID、配置等)
create: (options) => ({
name: TOOL_NAMES.MY_TOOL, // AI 调用时使用的工具名(必须在 tool-names.ts 中注册)
label: 'My Tool', // 执行步骤中显示的标签
description: 'Execute custom operations', // 告诉 AI 这个工具做什么
// 参数定义(使用 TypeBox,AI 会根据 description 自动填充参数)
// 常见参数类型示例:
// Type.String({ description: '...' }) — 字符串
// Type.Number({ description: '...' }) — 数字
// Type.Boolean({ description: '...' }) — 布尔值
// Type.Optional(Type.String({ description: '...' })) — 可选参数
// Type.Union([Type.Literal('a'), Type.Literal('b')]) — 枚举(AI 只能选其中一个)
parameters: Type.Object({
action: Type.Union([
Type.Literal('search'),
Type.Literal('create'),
Type.Literal('delete'),
], { description: 'Operation type' }),
query: Type.String({ description: 'Search keyword or target name' }),
limit: Type.Optional(Type.Number({ description: 'Max results (default 10)' })),
force: Type.Optional(Type.Boolean({ description: 'Skip confirmation' })),
}),

execute: async (toolCallId, params, signal) => {
// signal: AbortSignal,用户停止时会触发
// params: 已经过 schema 验证的参数对象

return {
// content: 返回给 AI 的内容(AI 会基于此决定下一步)
content: [{ type: 'text', text: 'Success' }],
// details: 结构化数据,用于 UI 渲染或日志记录(AI 不可见)
details: { success: true },
};
},
}),
};
```

2. **Register in tool-loader.ts**

Edit `src/main/tools/registry/tool-loader.ts`:

```typescript
import { myToolPlugin } from '../my-tool';

// Inside loadTools(), add with other plugins:
tools.push(...await resolvePluginTools(myToolPlugin.create(pluginOpts)));
```

3. **Add tool name constant**

Edit `src/main/tools/tool-names.ts`:

```typescript
export const TOOL_NAMES = {
// ...existing tools
MY_TOOL: 'my_tool',
};
```

Then use `TOOL_NAMES.MY_TOOL` in your tool definition instead of the hardcoded string.

4. **Add tool instructions**

Edit `src/main/prompts/templates/CUSTOM-TOOLS.md` to document how the AI should use your tool.

Using the Email tool as an example:

````markdown
## Email (Email Sending Tool)

### Core Principles
1. SMTP must be configured before use
2. The config file path is fixed — don't give users incorrect paths
3. On failure, guide users to fix their config based on the error message
4. Don't retry repeatedly — report the failure reason after one attempt

### Prerequisites

**Config file path** (searched in priority order):
1. Project-level: `/.deepbot/tools/email-tool/config.json`
2. User-level: `~/.deepbot/tools/email-tool/config.json`

**Config file format**:
```json
{
"user": "your-email@example.com",
"password": "your-password-or-auth-code",
"smtpServer": "smtp.example.com",
"smtpPort": 465,
"useSsl": true,
"fromName": "Your Name"
}
```

**Common provider notes**:
- QQ Mail: Use authorization code, not your QQ password
- Gmail: Use an app-specific password
- 163 Mail: Enable SMTP service and use an authorization code

### Use Cases
- ✅ Notification emails, report emails
- ✅ Emails with attachments
- ✅ HTML-formatted emails
- ❌ Bulk marketing emails (risk of account suspension)
- ❌ Sensitive information (emails are not encrypted)

### Examples

1. Plain text email:
```json
{
"to": "recipient@example.com",
"subject": "Test Email",
"body": "This is a test email"
}
```

2. HTML email:
```json
{
"to": "team@company.com",
"subject": "Project Progress Report",
"body": "

Progress

  • Feature A: Done
",
"html": true
}
```

3. Email with attachment:
```json
{
"to": "client@example.com",
"subject": "Contract Documents",
"body": "Please find the contract attached",
"attachments": ["~/Documents/contract.pdf"]
}
```

### Error Handling

| Error | Cause | Fix |
|-------|-------|-----|
| "nodemailer not installed" | Missing dependency | Ask user to install nodemailer |
| "Email tool not configured" | Config file missing | Ask user to create the config file |
| "Authentication failed" | Wrong credentials | Check account and authorization code |
````

**Documentation structure**:
- **Core Principles**: Rules the AI must follow
- **Prerequisites**: Required setup (config files, dependencies)
- **Use Cases**: When to use or avoid this tool
- **Examples**: Real usage from simple to complex
- **Error Handling**: Common errors and how to resolve them

#### Advanced Features

- **Config files**: Read from `~/.deepbot/tools//config.json`
- **External dependencies**: Use dynamic `require()` to avoid bundling
- **Cancellation**: Support user cancellation via `AbortSignal`
- **Prompt management**: Document tool behavior in `CUSTOM-TOOLS.md` so the AI uses it correctly

#### References

- 📖 [Full Development Guide](src/main/tools/registry/TOOL-DEVELOPMENT-GUIDE.md)
- 📝 [Example Tool Template](src/main/tools/registry/example-tool.ts)
- 🔧 [Email Tool Example](src/main/tools/email-tool.ts) — complete example with config and external dependencies

---

## 🔒 Security

DeepBot enforces strict access controls so AI Agents can only reach directories you've explicitly authorized.

### Path Whitelist

Only the following directories (and their subdirectories) are accessible:

| Type | Default Path | Purpose | Configurable |
|------|-------------|---------|--------------|
| **Workspace** | `~` (home directory) | File read/write, command execution | ✅ |
| **Scripts** | `~/.deepbot/scripts` | Python script storage | ✅ |
| **Skills** | `~/.agents/skills` | Skill package installation | ✅ |
| **Images** | `~/.deepbot/generated-images` | AI-generated image storage | ✅ |

### Security Check Flow

```
Tool call → Path security check → Within whitelist?
├─ Yes → Allow execution
└─ No → Reject, return error
```

---

## 🧠 Memory System

DeepBot supports persistent long-term memory to retain user preferences and important context across sessions.

### Global Memory

- **Location**: `~/.deepbot/memory/MEMORY.md`
- **Format**: Structured Markdown
- **Auto-injection**: Loaded into every conversation's system prompt
- **Live updates**: Memory changes automatically reload all active Agents
- **Scope**: Shared across all Tabs — stores general preferences and shared context

### Per-Tab Memory (Multi-Agent Support)

Each Tab (Agent) can have its own independent memory file, enabling true multi-role collaboration:

- **Independent memory files**: Each Tab can have its own `memory-.md`
- **Independent role definitions**: Different Tabs can take on different roles (e.g., Product Manager, Developer, QA Engineer)
- **Independent work styles**: Each Agent can have its own domain expertise and preferences
- **Persistent storage**: Tab memory and role settings are saved across sessions

### Usage Examples

**Global memory**:
```
User: "Remember: I prefer concise code"
DeepBot: "Got it, I'll keep that in mind"
```

**Per-tab memory**:
```
User: "Create a Sales Analysis Agent"
DeepBot: "New Tab created. This Agent will focus on customer relationship management and sales data analysis"

User: "Remember: You are a Sales Expert responsible for customer follow-up and performance analysis"
Sales Agent: "Understood, I've saved my role and responsibilities"
```

### Multi-Agent Collaboration Example

1. **Sales Agent** — Customer relationship management and sales pipeline; stores customer info and sales strategies
2. **Marketing Agent** — Market analysis and campaigns; stores market data and promotion plans
3. **Solutions Agent** — Technical solution design and requirements analysis; stores solution templates and specs
4. **Product Agent** — Product planning and backlog management; stores roadmaps and user feedback
5. **R&D Agent** — Technical development and implementation; stores technical docs and coding standards
6. **Project Manager Agent** — Project coordination and progress tracking; stores project plans and resource allocation

Each Agent operates with independent memory and domain expertise, enabling efficient cross-department collaboration.

---

## ⏰ Scheduled Tasks

Create and manage scheduled tasks to automate recurring work:

### Features

- ✅ Cron expression support
- ✅ Dedicated Tab execution (locked, cannot be closed)
- ✅ Context reset between runs (retains last run's output as context)
- ✅ Execution history tracking

### Example

```
User: "Check desktop files every day at 9 AM"
DeepBot: "Scheduled task created — will run daily at 9:00"
```

---

## 🎨 Skill Extensions

The Skills system lets you compose multiple tools into reusable, complex workflows.

### Install an Existing Skill

```bash
# Use the Skill Manager tool in DeepBot
"Install weather skill"
```

### Create a Custom Skill

A Skill is a directory containing a `SKILL.md` file using YAML frontmatter + Markdown format.

#### 1. Create the Skill directory

```bash
mkdir -p ~/.agents/skills/my-skill
cd ~/.agents/skills/my-skill
```

#### 2. Create SKILL.md

````markdown
---
name: my-skill
description: My custom skill for handling specific tasks
version: 1.0.0
author: Your Name
---

# My Custom Skill

## When to use this skill

Use this skill when the user needs to:
- Operation 1
- Operation 2

## How to use

### Step 1: Read file

Use the file_read tool:

```json
{
"path": "~/example.txt"
}
```

### Step 2: Process data

Process the data as needed...

### Step 3: Save results

Use the file_write tool to save results...

## Notes

- Note 1
- Note 2
````

#### 3. Install the Skill

**Option 1: Direct placement** (recommended)

Place the Skill directory under `~/.agents/skills/` and restart DeepBot — it will be loaded automatically.

**Option 2: Use Skill Manager**

```bash
"Install local skill at path ~/.agents/skills/my-skill"
```

### Skill Directory

- **Default path**: `~/.agents/skills/`
- **Auto-discovery**: All installed Skills are loaded at startup
- **Dynamic management**: Install and uninstall at runtime

### Skill Capabilities

- 📖 Skills can call all 14 built-in tools
- 📝 Supports async operations and error handling
- 🔧 Compose multiple tools for complex multi-step workflows

---

## 🤖 Supported AI Models

- **Qwen** (Alibaba Cloud) — default model
- **OpenAI** (GPT-4, GPT-3.5)
- **Claude** (Anthropic)

Configure your API keys in System Settings to get started.

### ⚠️ Important: Avoid Reasoning Models

DeepBot is optimized for standard conversational models. Models with built-in thinking/reasoning modes can cause display issues with `...` tags, slower responses, and unnecessary overhead for simple tasks.

**Not recommended:**
- ❌ QwQ-32B-Preview
- ❌ OpenAI o1, o1-mini, o1-preview
- ❌ DeepSeek-R1
- ❌ Any model with explicit reasoning/thinking steps

---

## 📦 External Services

| Service | Purpose | Configuration |
|---------|---------|---------------|
| **Tavily API** | Web search | System Settings → Web Search |
| **Gemini** | Image generation (Imagen 3) | System Settings → Image Generation |

---

## 🛠️ Development Guide

### Project Structure

```
deepbot/
├── src/
│ ├── main/ # Main process
│ │ ├── gateway.ts # Session management
│ │ ├── agent-runtime/ # Agent runtime
│ │ ├── tools/ # Tool system
│ │ ├── scheduled-tasks/ # Scheduled tasks
│ │ ├── connectors/ # External connectors
│ │ └── database/ # Data storage
│ ├── renderer/ # Renderer process (React)
│ ├── shared/ # Shared utilities
│ └── types/ # Type definitions
├── docs/ # Documentation
└── scripts/ # Build scripts
```

---

## 📝 License

This project is licensed under the [MIT License](LICENSE).

---

## 🙏 Acknowledgments

DeepBot was inspired by:

- [Clawdbot](https://github.com/openclaw/openclaw) — architectural reference
- [@mariozechner/pi-agent-core](https://github.com/badlogic/pi-agent) — AI Agent Runtime

---

## 📧 Contact

- **Author**: Kevin Luo @ Deepglint
- **Issues**: [GitHub Issues](https://github.com/kevinluosl/deepbot/issues)

---

**⭐ If DeepBot is useful to you, a star goes a long way!**