项目介绍
Agent 配套工具 · 2026-11-09 更新 · 本站尚未实测
Dorothy 是一个基于 Electron 的桌面应用,用于编排多种 AI 命令行代理(README 中列出 Claude Code、Codex、Gemini、Grok CLI 以及本地代理)。README 将其定位为“一键部署、监控、调试”的统一界面,并声明为免费开源。
它与常见“单一终端里跑一个代理”的方式不同:Dorothy 通过 node-pty 为每个代理创建独立终端会话,从而在同一界面中同时运行多个代理,并把结果汇总回看板、聊天工具或代码平台。仓库当前未归档,README 未提及停止维护或转向其他产品。
核心能力
点击能力名称查看输入、输出和原文依据。
- 并行代理管理:README 声称可同时运行多个代理,每个代理拥有隔离的 PTY 终端,支持分配技能、选择模型(sonnet、opus、haiku)与项目上下文,实时向运行中的代理发送输入并流式查看输出。
- Super Agent 编排:一个元代理通过 MCP 工具创建、启动、停止其他代理,分配任务并监控状态。
- 自动化(Automations):按 cron 或间隔轮询外部来源;README 中 GitHub(经
ghCLI)与 JIRA(REST API v3)标注为 Active,Pipedrive、Twitter、RSS、Custom 标注为 Planned。 - 看板任务管理:任务列包括 Backlog → Planned → Ongoing → Done,可按技能匹配自动分配代理。
- 定时任务:以 cron 表达式周期性运行代理;README 说明 macOS 使用 launchd、Linux 使用 cron。
- 远程控制:Telegram 与 Slack 机器人可查看状态、启动或停止代理、向 Super Agent 委派任务。
- Vault 文档库:基于 SQLite FTS5 的全文检索文档存储,通过 MCP 工具供代理读写。
- 内置 MCP 服务:README 列出 mcp-orchestrator、mcp-telegram、mcp-kanban、mcp-vault、mcp-socialdata 五个服务,经 stdio 通信。
- Google Workspace 与 SocialData 集成:分别通过
gwsCLI 与 SocialData API 提供工具能力。
实际应用场景
适用场景
- 需要同时推进多个代码仓库或多项编码任务的开发者;
- 希望把 PR/Issue 处理、JIRA 工单流转做成半自动流水线的团队;
- 需要通过手机端(Telegram/Slack)查看与干预代理运行状态的用户;
- 想要在多个代理之间共享研究笔记、报告等文档的场景(Vault)。
不适用:希望纯浏览器内使用、无需本地安装终端的用户;以及不打算配置任何命令行代理与 API 凭据的用户。
安装与接入
README 列出的前置条件包括 Node.js 18+、npm 或 yarn、Claude Code CLI(npm install -g @anthropic-ai/claude-code),以及用于 GitHub 自动化的 GitHub CLI(gh)。
获取方式有两种:从 GitHub Releases 下载最新版本,或从源码构建。macOS 安装与应用安全提示处理请参考官方文档,先确认下载来源与签名。
源码构建步骤(原文提供):
git clone https://github.com/Charlie85270/Dorothy.git
cd Dorothy/app/dorothy
npm install
npx @electron/rebuild # Rebuild native modules for Electron
npm run electron:dev # Development mode
npm run electron:build # Production build (DMG)
README 还提供浏览器开发模式(npm install 后 npm run dev,访问 localhost:3000),但注明代理管理与终端功能需要 Electron 应用。Telegram、Slack、Google Workspace、SocialData 均在应用设置中填写凭据或按引导授权;README 未提供可复制的 MCP 客户端配置片段,相关配置文件细节待核验。
使用条件与限制
- 是否需要部署
- 需自行准备运行环境,具体要求见正文
- 是否需要注册
- 账号和认证要求见正文;未明确说明的项目仍待核验
- 是否需要 API Key
- 待核验
- 费用与额度
- 费用边界见正文,项目许可不代表模型或托管服务免费
- 所需权限
- 待核验
- 许可证与服务条款
- 待核验
权限费用与限制
- 权限:代理运行在独立 PTY(终端会话独立不代表安全沙箱) 中,README 提到可启用
--dangerously-skip-permissions进行无人值守执行,这属于高风险操作,需自行评估。Telegram/Slack 机器人需要创建应用并授权相应用户;Google Workspace 需创建 OAuth 客户端并授予 Gmail、Drive、Sheets、Calendar、Docs 等读写范围。 - 费用:README 称应用本身免费开源,但底层模型调用(Claude Code、Codex、Gemini、Grok)由各自服务商计费,SocialData API 也需自备密钥,具体价格待向各官方核验。
- 平台:README 主要描述 macOS 构建产物(DMG、Apple Silicon/Intel),定时任务章节列出 macOS 与 Linux;Windows 支持情况资料未说明,待核验。
- 依赖:整套流程依赖境外模型服务与 API,国内网络可达性、延迟与合规性未在资料中说明。
国内使用情况
网友核验 用户经验分享
与站长实测独立,不代表官方认证或本站已实测。
最近核验:暂无有效核验。参与人数按当前项目有效身份去重;不同核验项分别统计,不合并成用户总结果。仅统计审核通过且未过期的记录。
分项统计、有效期与样本量
| 核验项目 | 有效人数 | 成功 / 部分 / 失败 / 无法判断 | 成功率 | 最近核验 / 有效期 |
|---|---|---|---|---|
| 官方网站访问 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 7 天 |
| GitHub 仓库访问 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 7 天 |
| 安装与运行 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 官方服务国内连接 / MCP 连接 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 国内网络情况 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 7 天 |
| 国内模型兼容性 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 自定义 API | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 海外服务依赖 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 海外账号要求 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 中文界面 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 客户端兼容性 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 账号及费用信息 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
成功率 = 成功 ÷(成功 + 部分成功 + 失败);无法判断不计入分母。至少 5 份可判断结果才显示成功率。账号、费用、海外依赖与语言等事实项,成功表示核查结论与资料吻合,具体观察另行统计;不表示免费或没有海外依赖。不同网络、客户端和版本的结果不能直接等同。
最近有效核验
暂无审核通过且未过期的网友核验。欢迎提交真实使用记录。
查看全部有效核验 →国内实测状态:国内可用性待核验。协议兼容和官方资料说明不等于国内网络可用。
- 官方网站访问
- 尚未实测 待核验
- GitHub 仓库访问
- 尚未实测 待核验
- 官方服务国内连接
- 尚未实测 待核验
- 国内网络情况
- 尚未实测 待核验
- 国内模型兼容性
- 尚未实测 待核验
- 自定义 API
- 尚未实测 待核验
- 海外服务依赖
- 尚未实测 待核验
- 海外账号要求
- 尚未实测 待核验
- 中文界面
- 尚未实测 待核验
- 国内最后核验时间
- 尚未实测
许可与国内使用
仓库 LICENSE 为 MIT 许可证(版权声明为 2025 Claude Manager Contributors),可据此使用、修改与分发代码,但该许可不覆盖第三方模型服务、SocialData、Google Workspace 或任何托管服务。公开仓库不等于相关模型服务免费或可商用。
国内使用方面,README 未说明国内模型支持或国内镜像,也未说明服务部署地域;是否可稳定访问各 CLI 与 API 待核验。
项目资料与来源
字段依据与待核验事项
access:来源确认 · Download the latest release from [GitHub Releases](https://github.com/Charlie85270/Dorothy/releases).
project_type:来源确认 · Deploy, monitor, and debug — all from one delightful interface.
原始 README(折叠技术参考)
# Dorothy

A beautiful desktop app to orchestrate your [Claude Code](https://claude.ai/code) ,[Codex](https://chatgpt.com/codex), [Gemini](https://geminicli.com/), [Grok](https://x.ai/cli) and local agents. Deploy, monitor, and debug — all from one delightful interface. Free and open source.

## Table of Contents
- [Why Dorothy](#why-dorothy)
- [Core Features](#core-features)
- [Automations](#automations)
- [Kanban Task Management](#kanban-task-management)
- [Scheduled Tasks](#scheduled-tasks)
- [Remote Control](#remote-control)
- [Vault](#vault)
- [SocialData (Twitter/X)](#socialdata-twitterx)
- [Google Workspace](#google-workspace)
- [MCP Servers & Tools](#mcp-servers--tools)
- [Installation](#installation)
- [Architecture](#architecture)
- [Project Structure](#project-structure)
- [Tech Stack](#tech-stack)
- [Configuration & Storage](#configuration--storage)
- [Development](#development)
- [Contributing](#contributing)
- [License](#license)
---
## Why Dorothy
AI CLI tools are powerful — but it runs one agent at a time, in one terminal. Dorothy removes that limitation:
- **Run 10+ agents simultaneously** across different projects and codebases
- **Automate agent workflows** — trigger agents on GitHub PRs, issues, and external events
- **Delegate and coordinate** — a Super Agent orchestrates other agents via MCP tools
- **Manage tasks visually** — Kanban board with automatic agent assignment
- **Schedule recurring work** — cron-based tasks that run autonomously
- **Control from anywhere** — Telegram and Slack integration for remote management
---
## Core Features
### Parallel Agent Management
Run multiple agents simultaneously, each in its own isolated PTY terminal session. Agents operate independently across different projects, codebases, and tasks.

**Capabilities:**
- Spawn unlimited concurrent agents across multiple projects
- Each agent runs in an isolated terminal with full PTY support
- Assign skills, model selection (sonnet, opus, haiku), and project context per agent
- Send interactive input to any running agent in real-time
- Real-time terminal output streaming per agent
- Agent lifecycle management: `idle` → `running` → `completed` / `error` / `waiting`
- Secondary project paths via `--add-dir` for multi-repo context
- Git worktree support for branch-isolated development
- Persistent agent state across app restarts
- Autonomous execution mode (`--dangerously-skip-permissions`) for unattended operation
### Super Agent (Orchestrator)
A meta-agent that programmatically controls all other agents. Give it a high-level task and it delegates, monitors, and coordinates the work across your agent pool.

- Creates, starts, and stops agents programmatically via MCP tools
- Delegates tasks based on agent capabilities and assigned skills
- Monitors progress, captures output, and handles errors
- Responds to Telegram and Slack messages for remote orchestration
- Can spin up temporary agents for one-off tasks and clean them up after
### Usage Tracking
Monitor Claude Code API usage across all agents — token consumption, conversation history, cost tracking, and activity patterns.

### Skills & Plugin System
Extend agent capabilities with skills from [skills.sh](https://skills.sh) and the built-in plugin marketplace.

- **Code Intelligence**: LSP plugins for TypeScript, Python, Rust, Go, and more
- **External Integrations**: GitHub, GitLab, Jira, Figma, Slack, Vercel
- **Development Workflows**: Commit commands, PR review tools
- Install skills per-agent for specialized task handling
### Settings Management
Configure Claude Code settings directly — permissions, environment variables, hooks, and model defaults.
---
## Automations
Automations poll external sources, detect new or updated items, and spawn Claude agents to process each item autonomously. This enables fully automated CI/CD-like workflows powered by AI.
### Supported Sources
| Source | Status | Polling Method |
|--------|--------|---------------|
| **GitHub** | Active | `gh` CLI — pull requests, issues, releases |
| **JIRA** | Active | REST API v3 — issues, bugs, stories, tasks |
| **Pipedrive** | Planned | — |
| **Twitter** | Planned | — |
| **RSS** | Planned | — |
| **Custom** | Planned | Webhook support |
### Execution Pipeline
1. **Scheduler** triggers the automation on its cron schedule or interval
2. **Poller** fetches items from the source (e.g., GitHub PRs via `gh` CLI)
3. **Filter** applies trigger conditions (event type, new vs. updated)
4. **Deduplication** skips already-processed items using content hashing
5. **Agent spawning** — a temporary agent is created for each item
6. **Prompt injection** — item data injected via template variables
7. **Autonomous execution** — agent runs with full MCP tool access
8. **Output delivery** — agent posts results to Telegram, Slack, or GitHub comments
9. **Cleanup** — temporary agent is deleted after completion
### Template Variables
Use these in your `agentPrompt` and `outputTemplate`:
#### GitHub Variables
| Variable | Description |
|----------|-------------|
| `{{title}}` | Item title (PR title, issue title, etc.) |
| `{{url}}` | Item URL |
| `{{author}}` | Item author |
| `{{body}}` | Item body/description |
| `{{labels}}` | Item labels |
| `{{repo}}` | Repository name |
| `{{number}}` | Item number (PR #, issue #) |
| `{{type}}` | Item type (pull_request, issue, etc.) |
#### JIRA Variables
| Variable | Description |
|----------|-------------|
| `{{key}}` | Issue key (e.g., `PROJ-123`) |
| `{{summary}}` | Issue summary |
| `{{status}}` | Current issue status |
| `{{issueType}}` | Issue type (Task, Bug, Story, etc.) |
| `{{priority}}` | Issue priority |
| `{{assignee}}` | Assigned user |
| `{{reporter}}` | Reporter name |
| `{{url}}` | Issue URL |
| `{{body}}` | Issue description |
### Example: Automated PR Review Bot
```javascript
create_automation({
name: "PR Code Reviewer",
sourceType: "github",
sourceConfig: '{"repos": ["myorg/myrepo"], "pollFor": ["pull_requests"]}',
scheduleMinutes: 15,
agentEnabled: true,
agentPrompt: "Review this PR for code quality, security issues, and performance. PR: {{title}} ({{url}}). Description: {{body}}",
agentProjectPath: "/path/to/myrepo",
outputGitHubComment: true,
outputSlack: true
})
```
### Example: JIRA Issue Processor
```javascript
create_automation({
name: "JIRA Task Agent",
sourceType: "jira",
sourceConfig: '{"projectKeys": ["PROJ"], "jql": "status = Open"}',
scheduleMinutes: 5,
agentEnabled: true,
agentPrompt: "Work on JIRA issue {{key}}: {{summary}}. Description: {{body}}. Priority: {{priority}}.",
agentProjectPath: "/path/to/project",
outputJiraComment: true,
outputJiraTransition: true,
outputTelegram: true
})
```
JIRA automations also create Kanban tasks automatically in the backlog, allowing agents to pick them up via the auto-assignment system.
---
## Kanban Task Management
A task board integrated with the agent system. Tasks flow through columns and can be automatically assigned to agents based on skill matching.

### Workflow
```
Backlog → Planned → Ongoing → Done
```
- **Priority levels**: Low, Medium, High
- **Progress tracking**: 0-100% per task
- **Agent assignment**: Assign tasks to specific agents or let the system auto-assign
- **Labels and tags**: Organize and filter tasks
- **Skill requirements**: Define required skills — the system matches tasks to capable agents
### Automatic Agent Assignment
The `kanban-automation` service continuously watches for new tasks and:
1. Matches task skill requirements against available agents
2. Creates new agents if no matching agent exists
3. Assigns the task and moves it to `ongoing`
4. Tracks progress as the agent works
5. Marks the task `done` when the agent completes
This enables a **self-managing task pipeline** — add tasks to the backlog and agents automatically pick them up.
---
## Scheduled Tasks
Run Claude Code autonomously on a cron schedule. Useful for recurring maintenance, reporting, monitoring, or any periodic task.
### Cron Format
```
┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-7, 0 and 7 = Sunday)
│ │ │ │ │
* * * * *
```
| Expression | Schedule |
|-----------|----------|
| `0 9 * * *` | Daily at 9:00 AM |
| `0 9 * * 1-5` | Weekdays at 9:00 AM |
| `*/15 * * * *` | Every 15 minutes |
| `0 */2 * * *` | Every 2 hours |
| `30 14 * * 1` | Mondays at 2:30 PM |
### Platform Support
- **macOS**: Uses `launchd` (launchctl) for reliable background execution
- **Linux**: Uses `cron` (crontab)
### Storage
- Task definitions: `~/.claude/schedules.json`
- Generated scripts: `~/.dorothy/scripts/`
- Execution logs: `~/.claude/logs/`
---
## Remote Control
### Telegram Integration
Control your entire agent fleet from Telegram. Start agents, check status, delegate tasks to the Super Agent — all from your phone.
| Command | Description |
|---------|-------------|
| `/status` | Overview of all agents and their states |
| `/agents` | Detailed agent list with current tasks |
| `/projects` | List all projects with their agents |
| `/start_agent <name> <task>` | Spawn and start an agent with a task |
| `/stop_agent <name>` | Stop a running agent |
| `/ask <message>` | Delegate a task to the Super Agent |
| `/usage` | API usage and cost statistics |
| `/help` | Command reference |
Send any message without a command to talk directly to the Super Agent.
**Media support** via the `mcp-telegram` server: send photos, videos, and documents.
**Setup:**
1. Create a bot via [@BotFather](https://t.me/botfather) and copy the token
2. Paste the bot token in **Settings**
3. Send `/start` to your bot to register your chat ID
4. Multiple users can authorize by sending `/start`
### Slack Integration
Same capabilities as Telegram, accessible via @mentions or direct messages.
| Command | Description |
|---------|-------------|
| `status` | Overview of all agents |
| `agents` | Detailed agent list |
| `projects` | List projects with agents |
| `start <name> <task>` | Spawn and start an agent |
| `stop <name>` | Stop a running agent |
| `usage` | API usage and cost statistics |
| `help` | Command reference |
**Features:** @mentions in channels, DMs, Socket Mode (no public URL), thread-aware responses.
**Setup:**
1. Go to [api.slack.com/apps](https://api.slack.com/apps) → **Create New App** → **From scratch**
2. Name it "Dorothy" and select your workspace
3. **Socket Mode** → Enable → Generate App Token with scope `connections:write` (`xapp-...`)
4. **OAuth & Permissions** → Add scopes: `app_mentions:read`, `chat:write`, `im:history`, `im:read`, `im:write`
5. **Install to Workspace** → Copy Bot Token (`xoxb-...`)
6. **Event Subscriptions** → Enable → Subscribe to: `app_mention`, `message.im`
7. **App Home** → Enable "Messages Tab"
8. Paste both tokens in **Settings → Slack** and enable
---
## Vault
A persistent document storage system that agents can read, write, and search across sessions. Use it as a shared knowledge base — agents store reports, analyses, research findings, and structured notes that any other agent can access later.

### Features
- **Markdown documents** with title, content, tags, and file attachments
- **Folder organization** with nested hierarchies (auto-created on document creation)
- **Full-text search** powered by SQLite FTS5 — search across titles, content, and tags
- **Cross-agent access** — any agent can read documents created by another
- **File attachments** — attach files to documents for reference
### MCP Tools
| Tool | Parameters | Description |
|------|-----------|-------------|
| `vault_create_document` | `title`, `content`, `folder`, `tags?` | Create a document (auto-creates folder if needed) |
| `vault_update_document` | `document_id`, `title?`, `content?`, `tags?`, `folder_id?` | Update an existing document |
| `vault_get_document` | `document_id` | Read a document with full content and metadata |
| `vault_list_documents` | `folder_id?`, `tags?` | List documents, optionally filtered by folder or tags |
| `vault_delete_document` | `document_id` | Delete a document |
| `vault_attach_file` | `document_id`, `file_path` | Attach a file to a document |
| `vault_search` | `query`, `limit?` | Full-text search (supports AND, OR, NOT, phrase matching) |
| `vault_create_folder` | `name`, `parent_id?` | Create a folder (supports nesting) |
| `vault_list_folders` | — | List all folders as a tree |
| `vault_delete_folder` | `folder_id`, `recursive?` | Delete a folder (optionally with all contents) |
---
## SocialData (Twitter/X)
Search tweets, get user profiles, and retrieve engagement data via the [SocialData API](https://socialdata.tools). Useful for social media research, monitoring, and analysis tasks.
### Setup
1. Get an API key from [socialdata.tools](https://socialdata.tools)
2. Paste it in **Settings → SocialData API Key**
### MCP Tools
| Tool | Parameters | Description |
|------|-----------|-------------|
| `twitter_search` | `query`, `type?`, `cursor?` | Search tweets with advanced operators (`from:`, `min_faves:`, `filter:images`, etc.) |
| `twitter_get_tweet` | `tweet_id` | Get full tweet details with engagement metrics |
| `twitter_get_tweet_comments` | `tweet_id`, `cursor?` | Get replies/comments on a tweet |
| `twitter_get_user` | `username` | Get a user's profile (bio, followers, stats) |
| `twitter_get_user_tweets` | `user_id`, `include_replies?`, `cursor?` | Get recent tweets from a user |
All tools support cursor-based pagination for large result sets.
---
## Google Workspace
Access Gmail, Drive, Sheets, Docs, Calendar, and more directly from your agents via the [Google Workspace CLI](https://github.com/googleworkspace/cli) (`gws`). Dorothy integrates `gws` as an MCP server so agents can read emails, manage files, create documents, and interact with Google APIs.
### Setup
1. Install **gcloud CLI** — required for OAuth setup (`brew install google-cloud-sdk`)
2. Install **gws CLI** — `npm install -g @googleworkspace/cli`
3. Open **Settings → Google Workspace** and follow the guided setup:
- Click **Auth Setup** to create a Google Cloud project and OAuth client
- Click **Auth Login** to authenticate with your Google account
- Enable the toggle to register the MCP server with your agents
4. Optionally install **Agent Skills** for 100+ specialized Google Workspace skills
### Features
- **MCP server**: Runs `gws mcp` over stdio, exposing Google APIs as tools (10-80 tools per service)
- **Multi-provider**: MCP server registered with all configured providers (Claude, Codex, Gemini, Grok)
- **Service badges**: Settings page shows connected services with per-service access levels (READ / R/W)
- **Agent skills**: Detects and lists installed `gws-*` skills (e.g., `gws-gmail`, `gws-drive`, `gws-calendar`)
- **Update Access**: Re-run `gws auth login` to add or change OAuth scopes without re-running setup
### Default Services
| Service | Scope | Description |
|---------|-------|-------------|
| **Gmail** | Read/Write | Send, read, and manage email |
| **Drive** | Read/Write | Manage files, folders, and shared drives |
| **Sheets** | Read/Write | Read and write spreadsheets |
| **Calendar** | Read/Write | Manage calendars and events |
| **Docs** | Read/Write | Read and write documents |
Additional services (Slides, Tasks, Chat, People, Forms, Keep) are available based on OAuth scopes.
---
## MCP Servers & Tools
Dorothy exposes **five MCP (Model Context Protocol) servers** with **40+ tools** for programmatic agent control. These are used internally by the Super Agent and can be registered in any Claude Code session via `~/.claude/settings.json`.
### mcp-orchestrator
The main orchestration server — agent management, messaging, scheduling, and automations.
#### Agent Management Tools
| Tool | Parameters | Description |
|------|-----------|-------------|
| `list_agents` | — | List all agents with status, ID, name, project, and current task |
| `get_agent` | `id` | Get detailed info about a specific agent including output history |
| `get_agent_output` | `id`, `lines?` (default: 100) | Read an agent's recent terminal output |
| `create_agent` | `projectPath`, `name?`, `skills?`, `character?`, `skipPermissions?` (default: true), `secondaryProjectPath?` | Create a new agent in idle state |
| `start_agent` | `id`, `prompt`, `model?` | Start an agent with a task (or send message if already running) |
| `send_message` | `id`, `message` | Send input to a running agent (auto-starts idle agents) |
| `stop_agent` | `id` | Terminate a running agent (returns to idle) |
| `remove_agent` | `id` | Permanently delete an agent |
| `wait_for_agent` | `id`, `timeoutSeconds?` (300), `pollIntervalSeconds?` (5) | Poll agent until completion, error, or waiting state |
#### Messaging Tools
| Tool | Parameters | Description |
|------|-----------|-------------|
| `send_telegram` | `message` | Send a text message to Telegram (truncates at 4096 chars) |
| `send_slack` | `message` | Send a text message to Slack (truncates at 4000 chars) |
#### Scheduler Tools
| Tool | Parameters | Description |
|------|-----------|-------------|
| `list_scheduled_tasks` | — | List all recurring tasks with schedule and next run time |
| `create_scheduled_task` | `prompt`, `schedule` (cron), `projectPath`, `autonomous?` (true) | Create a recurring task |
| `delete_scheduled_task` | `taskId` | Remove a scheduled task |
| `run_scheduled_task` | `taskId` | Execute a task immediately |
| `get_scheduled_task_logs` | `taskId`, `lines?` (50) | Get execution logs |
#### Automation Tools
| Tool | Parameters | Description |
|------|-----------|-------------|
| `list_automations` | — | List all automations with status, source, schedule |
| `get_automation` | `id` | Get details including recent runs |
| `create_automation` | `name`, `sourceType`, `sourceConfig`, + [options](#automation-create-options) | Create a new automation |
| `update_automation` | `id`, + optional fields | Update configuration |
| `delete_automation` | `id` | Remove an automation |
| `run_automation` | `id` | Trigger immediately |
| `pause_automation` | `id` | Pause scheduled execution |
| `resume_automation` | `id` | Resume a paused automation |
| `run_due_automations` | — | Check and run all due automations |
| `get_automation_logs` | `id`, `limit?` (10) | Get execution history |
| `update_jira_issue` | `issueKey`, `transitionName?`, `comment?` | Update JIRA issue status and/or add a comment |
##### Automation Create Options
| Parameter | Type | Description |
|-----------|------|-------------|
| `sourceType` | enum | `github`, `jira`, `pipedrive`, `twitter`, `rss`, `custom` |
| `sourceConfig` | JSON string | Source config (e.g., `{"repos": ["owner/repo"], "pollFor": ["pull_requests"]}`) |
| `scheduleMinutes` | number | Poll interval in minutes (default: 30) |
| `scheduleCron` | string | Cron expression (alternative to interval) |
| `eventTypes` | string[] | Filter by event type (e.g., `["pr", "issue"]`) |
| `onNewItem` | boolean | Trigger on new items (default: true) |
| `onUpdatedItem` | boolean | Trigger on updated items |
| `agentEnabled` | boolean | Enable agent processing (default: true) |
| `agentPrompt` | string | Prompt template with `{{variables}}` |
| `agentProjectPath` | string | Project path for the agent |
| `agentModel` | enum | `sonnet`, `opus`, or `haiku` |
| `outputTelegram` | boolean | Post output to Telegram |
| `outputSlack` | boolean | Post output to Slack |
| `outputGitHubComment` | boolean | Post output as GitHub comment |
| `outputJiraComment` | boolean | Post a comment on the JIRA issue |
| `outputJiraTransition` | boolean | Transition the JIRA issue status |
| `outputTemplate` | string | Custom output message template |
---
### mcp-telegram
Standalone MCP server for Telegram messaging with media support.
| Tool | Parameters | Description |
|------|-----------|-------------|
| `send_telegram` | `message`, `chat_id?` | Send a text message |
| `send_telegram_photo` | `photo_path`, `chat_id?`, `caption?` | Send a photo/image |
| `send_telegram_video` | `video_path`, `chat_id?`, `caption?` | Send a video |
| `send_telegram_document` | `document_path`, `chat_id?`, `caption?` | Send a document/file |
Direct HTTPS API calls. File uploads via multipart form data. Markdown formatting support.
---
### mcp-kanban
MCP server for programmatic Kanban task management.
| Tool | Parameters | Description |
|------|-----------|-------------|
| `list_tasks` | `column?`, `assigned_to_me?` | List tasks, filter by column or assignment |
| `get_task` | `task_id` (prefix matching) | Get full task details |
| `create_task` | `title`, `description`, `project_path?`, `priority?`, `labels?` | Create a task in backlog |
| `move_task` | `task_id`, `column` | Move task between columns |
| `update_task_progress` | `task_id`, `progress` (0-100) | Update progress |
| `mark_task_done` | `task_id`, `summary` | Complete a task with summary |
| `assign_task` | `task_id`, `agent_id?` | Assign task to an agent |
| `delete_task` | `task_id` | Remove a task |
**Columns:** `backlog` → `planned` → `ongoing` → `done`
---
### mcp-vault
MCP server for persistent document management. See [Vault](#vault) for full tool reference.
---
### mcp-socialdata
MCP server for Twitter/X data via the SocialData API. See [SocialData (Twitter/X)](#socialdata-twitterx) for full tool reference.
---
## Installation
### Prerequisites
- **Node.js** 18+
- **npm** or yarn
- **Claude Code CLI**: `npm install -g @anthropic-ai/claude-code`
- **GitHub CLI** (`gh`) — required for GitHub automations
### Download
Download the latest release from [GitHub Releases](https://github.com/Charlie85270/Dorothy/releases).
> **macOS:** If "app is damaged", run `xattr -cr /Applications/Dorothy.app`
### Build from Source
```bash
git clone https://github.com/Charlie85270/Dorothy.git
cd Dorothy/app/dorothy
npm install
npx @electron/rebuild # Rebuild native modules for Electron
npm run electron:dev # Development mode
npm run electron:build # Production build (DMG)
```
Output in `release/`:
- **macOS**: `release/mac-arm64/Dorothy.app` (Apple Silicon) or `release/mac/Dorothy.app` (Intel)
- DMG installer included
### Web Browser (Development)
```bash
npm install
npm run dev
```
Open [http://localhost:3000](http://localhost:3000). Agent management and terminal features require the Electron app.
---
## Architecture
### System Overview
```
┌──────────────────────────────────────────────────────────┐
│ Electron App │
│ │
│ ┌───────────────────┐ ┌──────────────────────────────┐ │
│ │ React / Next.js │ │ Electron Main Process │ │
│ │ (Renderer) │←→│ │ │
│ │ │ │ ┌──────────────────────────┐ │ │
│ │ - Agent Dashboard │ │ │ Agent Manager │ │ │
│ │ - Kanban Board │ │ │ (node-pty, N parallel) │ │ │
│ │ - Automations │ │ ├──────────────────────────┤ │ │
│ │ - Scheduled Tasks │ │ │ PTY Manager │ │ │
│ │ - Usage Stats │ │ │ (terminal multiplexing) │ │ │
│ │ - Skills/Plugins │ │ ├──────────────────────────┤ │ │
│ │ - Settings │ │ │ Services: │ │ │
│ │ │ │ │ - Telegram Bot │ │ │
│ └───────────────────┘ │ │ - Slack Bot │ │ │
│ ↕ IPC │ │ - Kanban Automation │ │ │
│ ┌───────────────────┐ │ │ - MCP Server Launcher │ │ │
│ │ API Routes │ │ │ - API Server │ │ │
│ │ (Next.js) │←→│ └──────────────────────────┘ │ │
│ └───────────────────┘ └──────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
↕ stdio ↕ stdio
┌──────────────────┐ ┌──────────────┐ ┌──────────────┐
│ mcp-orchestrator │ │ mcp-telegram │ │ mcp-kanban │
│ (26+ tools) │ │ (4 tools) │ │ (8 tools) │
└──────────────────┘ └──────────────┘ └──────────────┘
┌──────────────────┐ ┌──────────────┐
│ mcp-vault │ │mcp-socialdata│
│ (10 tools) │ │ (5 tools) │
└──────────────────┘ └──────────────┘
```
### Data Flow: Parallel Agent Execution
1. User (or Super Agent) creates agent → API route → Agent Manager
2. Agent Manager spawns `claude` CLI process via node-pty (one per agent)
3. Multiple agents run concurrently, each in an isolated PTY session
4. Output streamed in real-time to the renderer via IPC
5. Status detected by parsing output patterns (running/waiting/completed/error)
6. Services notified (Telegram, Slack, Kanban) on status changes
7. Agent state persisted to `~/.dorothy/agents.json`
### Data Flow: Automation Pipeline
1. Scheduler triggers automation on cron schedule
2. Poller fetches items from source (GitHub via `gh` CLI, JIRA via REST API)
3. Filter applies trigger conditions, deduplicates via content hashing
4. Temporary agent spawned for each new/updated item
5. Prompt injected with item data via template variables
6. Agent executes autonomously with full MCP tool access
7. Agent delivers output via MCP tools (Telegram, Slack, GitHub comments, JIRA comments/transitions)
8. For JIRA automations, Kanban tasks are auto-created in the backlog
9. Temporary agent deleted, item marked as processed
### MCP Communication
All MCP servers communicate via **stdio** (standard input/output):
```
Claude Code ←→ stdio ←→ MCP Server
├── Tool handlers (Zod-validated schemas)
└── @modelcontextprotocol/sdk
```
---
## Project Structure
```
dorothy/
├── src/ # Next.js frontend (React)
│ ├── app/ # Page routes
│ │ ├── agents/ # Agent management UI
│ │ ├── kanban/ # Kanban board UI
│ │ ├── automations/ # Automation management UI
│ │ ├── recurring-tasks/ # Scheduled tasks UI
│ │ ├── settings/ # Settings page
│ │ ├── skills/ # Skills management
│ │ ├── usage/ # Usage statistics
│ │ ├── projects/ # Projects overview
│ │ ├── plugins/ # Plugin marketplace
│ │ └── api/ # Backend API routes
│ ├── components/ # React components
│ ├── hooks/ # Custom React hooks
│ ├── lib/ # Utility functions
│ ├── store/ # Zustand state management
│ └── types/ # TypeScript type definitions
├── electron/ # Electron main process
│ ├── main.ts # Entry point
│ ├── preload.ts # Preload script
│ ├── core/
│ │ ├── agent-manager.ts # Agent lifecycle & parallel execution
│ │ ├── pty-manager.ts # Terminal session multiplexing
│ │ └── window-manager.ts # Window management
│ ├── services/
│ │ ├── telegram-bot.ts # Telegram bot integration
│ │ ├── slack-bot.ts # Slack bot integration
│ │ ├── api-server.ts # HTTP API server
│ │ ├── mcp-orchestrator.ts # MCP server launcher
│ │ ├── claude-service.ts # Claude Code CLI integration
│ │ ├── hooks-manager.ts # Git hooks management
│ │ └── kanban-automation.ts # Task → Agent auto-assignment
│ ├── handlers/ # IPC handlers
│ │ ├── ipc-handlers.ts # Agent, skill, plugin IPC
│ │ └── gws-handlers.ts # Google Workspace integration
├── mcp-orchestrator/ # MCP server (orchestration)
│ └── src/tools/
│ ├── agents.ts # Agent management tools (9)
│ ├── messaging.ts # Telegram/Slack tools (2)
│ ├── scheduler.ts # Scheduled task tools (5)
│ └── automations.ts # Automation tools (10+)
├── mcp-telegram/ # MCP server (Telegram media)
│ └── src/index.ts # Text, photo, video, document (4)
├── mcp-kanban/ # MCP server (task management)
│ └── src/index.ts # Kanban CRUD tools (8)
├── mcp-vault/ # MCP server (document management)
│ └── src/index.ts # Vault CRUD + search tools (10)
├── mcp-socialdata/ # MCP server (Twitter/X data)
│ └── src/index.ts # Twitter search + user tools (5)
└── landing/ # Marketing landing page
```
---
## Tech Stack
| Category | Technology | Version |
|----------|-----------|---------|
| **Framework** | Next.js (App Router) | 16 |
| **Frontend** | React | 19 |
| **Desktop** | Electron | 33 |
| **Styling** | Tailwind CSS | 4 |
| **State** | Zustand | 5 |
| **Animations** | Framer Motion | 12 |
| **Terminal** | xterm.js + node-pty | 5 / 1.1 |
| **Database** | better-sqlite3 | 11 |
| **MCP** | @modelcontextprotocol/sdk | 1.0 |
| **Telegram** | node-telegram-bot-api | 0.67 |
| **Slack** | @slack/bolt | 4.0 |
| **Validation** | Zod | 3.22 |
| **Language** | TypeScript | 5 |
---
## Configuration & Storage
### Configuration Files
| File | Description |
|------|-------------|
| `~/.dorothy/app-settings.json` | App settings (Telegram token, Slack tokens, preferences) |
| `~/.dorothy/cli-paths.json` | CLI tool paths for automations |
| `~/.claude/settings.json` | Claude Code user settings |
### Data Files
| File | Description |
|------|-------------|
| `~/.dorothy/agents.json` | Persisted agent state (all agents, all sessions) |
| `~/.dorothy/kanban-tasks.json` | Kanban board tasks |
| `~/.dorothy/automations.json` | Automation definitions and state |
| `~/.dorothy/processed-items.json` | Automation deduplication tracking |
| `~/.dorothy/vault.db` | Vault documents, folders, and FTS index (SQLite) |
| `~/.claude/schedules.json` | Scheduled task definitions |
### Generated Files
| Location | Description |
|----------|-------------|
| `~/.dorothy/scripts/` | Generated task runner scripts |
| `~/.claude/logs/` | Task execution logs |
---
## Development
### Scripts
```bash
npm run dev # Next.js dev server
npm run electron:dev # Electron + Next.js concurrent dev mode
npm run build # Next.js production build
npm run electron:build # Distributable Electron app (DMG)
npm run electron:pack # Electron directory package
npm run lint # ESLint
```
### Build Pipeline
1. Next.js production build
2. TypeScript compilation (Electron + MCP servers)
3. MCP servers built independently
4. `electron-builder` packages into distributable
### Environment
The app reads Claude Code configuration from:
- `~/.claude/settings.json` — User settings
- `~/.claude/statsig_metadata.json` — Usage statistics
- `~/.claude/projects/` — Project-specific data
---
## Contributing
Contributions are welcome. Please submit a Pull Request.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/my-feature`)
3. Commit your changes
4. Push to the branch
5. Open a Pull Request
## License
This project is open source and available under the [MIT License](LICENSE).
## Acknowledgments
- [Anthropic](https://anthropic.com) for Claude Code
- [skills.sh](https://skills.sh) for the skills ecosystem
历史前置条件说明(补充参考)
Node.js 18+;npm 或 yarn;Claude Code CLI(npm install -g @anthropic-ai/claude-code);GitHub CLI(gh,GitHub 自动化所需);各模型/CLI 自身的账号与 API 凭据;Telegram/Slack 机器人令牌;Google Workspace 需 gcloud CLI 与 gws CLI 及 OAuth 授权;SocialData API Key。费用、Windows 支持情况待核验。
项目来源与清单版权许可
https://github.com/Charlie85270/Dorothy
整理来源:https://github.com/slavakurilyak/awesome-ai-agents
清单版权与许可:
MIT License
Copyright (c) 2024 Slava Kurilyak
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.