# Yee88

> 当用户说"提醒我"、"X分钟/小时后"、"定时"、"每天/每周"、"设置闹钟"、"注册项目"、"切换引擎"、"创建话题"时使用。yee88 Telegram 桥接工具，支持一次性提醒(+30m, +2h)、定时任务(cron)、项目管理、话题管理、多引擎切换。通过 yee88 CLI 命令直接操作。

- Skill: `yee94/yee88` (Agent Skill)
- Install (CLI): `npx skillmds@latest add yee94/yee88`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yee94/yee88/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: yee94 (https://skillmd.com/u/yee94)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/yee94/yee88

---


# yee88 CLI 工具

## ⚠️ 重要：必须执行真实命令

当用户请求以下功能时，**必须使用 Bash 执行对应的 yee88 命令**，不能只是口头回复！

## 💬 回复用户时保持简洁

**不要透露内部实现细节！** 用户不需要知道：
- "一次性任务"、"执行后自动清理"等技术细节
- 命令参数含义（如 `-o`、`--project`）
- 内部调度机制

| 用户说 | 正确回复 ✅ | 错误回复 ❌ |
|--------|-------------|-------------|
| "1分钟后提醒我喝水" | "好的，1分钟后提醒你喝水" | "已创建一次性定时任务，将在1分钟后触发，执行后自动清理..." |
| "每天9点提醒我站会" | "好的，每天早上9点提醒你站会" | "已添加 cron 任务，schedule 为 0 9 * * *，project 为..." |
| "取消那个提醒" | "已取消" | "已执行 yee88 cron remove xxx --force，任务已从列表中删除..." |

## 🚨 关键区分：设置提醒 vs 执行任务

**设置提醒时，你只需要创建定时任务，不要执行任务本身！**

| 场景 | 正确做法 | 错误做法 |
|------|----------|----------|
| "1分钟后提醒我查天气" | 只执行 `yee88 cron add ...` 创建提醒 | ❌ 立即查天气，把结果写进 message |
| "30分钟后提醒我开会" | 只执行 `yee88 cron add ...` 创建提醒 | ❌ 立即做任何与"开会"相关的操作 |
| "2小时后帮我发邮件" | 只执行 `yee88 cron add ...` 创建提醒 | ❌ 立即发邮件 |

**message 参数应该是用户的原话或简短描述，不是执行结果！**

## ⛔ 默认不传 --project！除非用户明确要求

### 🧠 COT：判断是否需要 --project

**收到定时任务请求时，先在脑中过一遍这个决策流程：**

```
1. 用户有没有提到具体项目名？
   - "在 takopi 项目下..."  → 需要 --project
   - "帮我在 work 项目..."  → 需要 --project
   - "提醒我喝水"          → 不需要 --project
   - "每天9点提醒站会"      → 不需要 --project

2. 用户有没有说"在某个项目下运行"？
   - "在 xxx 下执行..."    → 需要 --project
   - "切到 xxx 项目..."    → 需要 --project
   - 没有提到项目上下文    → 不需要 --project

3. 这个任务是通用提醒还是项目相关？
   - 喝水、休息、开会     → 通用，不需要 --project
   - 代码审查、部署、PR   → 可能需要，但除非用户说了项目名，否则不传
```

**结论：99% 的情况不需要 --project。只有用户明确说了项目名才传。**

### 决策表

| 用户说的话 | 需要 --project? | 命令 |
|-----------|----------------|------|
| "1分钟后提醒我喝水" | ❌ 不需要 | `yee88 cron add reminder "+1m" "喝水" -o` |
| "每天9点提醒我站会" | ❌ 不需要 | `yee88 cron add standup "0 9 * * *" "站会时间"` |
| "30分钟后提醒我休息" | ❌ 不需要 | `yee88 cron add break "+30m" "休息一下" -o` |
| "在 takopi 项目下每天9点跑测试" | ✅ 需要 | `yee88 cron add test "0 9 * * *" "跑测试" --project takopi` |
| "帮我在 work 项目设个提醒" | ✅ 需要 | `yee88 cron add reminder "+1h" "..." --project work -o` |

**⚠️ --project 只接受项目别名，不是路径！**

| 正确 ✅ | 错误 ❌ |
|---------|---------|
| 不传（默认） | `--project /Users/yee.wang/Code/github/takopi` |
| `--project takopi` | `--project ~/dev/work-project` |
| `--project work` | `--project /Users/yee.wang/.yee88` |
|  | `--project .` |

**如何获取项目别名（仅当用户要求时）：**
```bash
yee88 config list | grep projects
```

## 🎯 快速触发表（立即执行）

| 用户说 | 必须执行的命令 |
|--------|----------------|
| "5分钟后提醒我..." | `yee88 cron add reminder "+5m" "提醒内容" -o` |
| "30分钟后提醒我..." | `yee88 cron add reminder "+30m" "提醒内容" -o` |
| "2小时后提醒我..." | `yee88 cron add reminder "+2h" "提醒内容" -o` |
| "明天提醒我..." | `yee88 cron add reminder "+1d" "提醒内容" -o` |
| "每天早上9点提醒我..." | `yee88 cron add daily "0 9 * * *" "提醒内容"` |
| "每周一提醒我..." | `yee88 cron add weekly "0 9 * * 1" "提醒内容"` |
| "查看所有提醒" | `yee88 cron list` |
| "删除提醒 X" | `yee88 cron remove X --force` |
| "发送这个文件给我" | `yee88 send-file /path/to/file` |
| "把这张图发给我" | `yee88 send-file /path/to/image.png` |

### 一次性提醒命令格式

```bash
yee88 cron add <id> "<时间>" "<消息>" -o
```

**参数说明：**
- `<id>`: 任务ID（如 reminder, meeting, break）
- `<时间>`: 相对时间格式 `+5m`, `+30m`, `+1h`, `+2h`, `+1d`
- `<消息>`: **用户的原话或简短描述**（不是执行结果！）
- `--project <alias>`: 可选，项目别名（如 takopi, myproject），不指定则在默认上下文执行
- `-o`: 一次性任务（执行后自动删除）

**正确示例：**
```bash
# 用户说："5分钟后提醒我该健身了"
yee88 cron add reminder "+5m" "该健身了" -o

# 用户说："30分钟后提醒我开会"
yee88 cron add meeting "+30m" "开会时间到" -o

# 用户说："1分钟后提醒我查天气"
# ✅ 正确：只设置提醒，不查天气
yee88 cron add weather "+1m" "查天气" -o

# ❌ 错误：立即查天气并把结果写进 message
# yee88 cron add weather "+1m" "杭州今天晴，15度..." -o
```

---

## 完整能力参考

### 1. 定时任务 (Cron)

#### 注册项目
```bash
yee88 init <alias>
```

在指定目录注册项目：
```bash
cd ~/dev/my-project
yee88 init myproject
```

#### 查看项目配置
```bash
yee88 config list | grep projects
```

### 2. 配置管理

#### 查看配置路径
```bash
yee88 config path
```

#### 列出所有配置
```bash
yee88 config list
```

#### 获取配置项
```bash
yee88 config get <key>
```

示例：
```bash
yee88 config get default_engine
yee88 config get projects.myproject.path
```

#### 设置配置项
```bash
yee88 config set <key> <value>
```

示例：
```bash
# 设置默认引擎
yee88 config set default_engine "claude"

# 设置默认项目
yee88 config set default_project "myproject"

# 设置项目路径
yee88 config set projects.myproject.path "~/dev/my-project"

# 设置项目默认引擎
yee88 config set projects.myproject.default_engine "claude"

# Telegram 设置
yee88 config set transports.telegram.session_mode "chat"
yee88 config set transports.telegram.show_resume_line false

# 引擎特定配置
yee88 config set claude.model "claude-sonnet-4-5-20250929"
yee88 config set codex.profile "work"
```

#### 删除配置项
```bash
yee88 config unset <key>
```

### 3. 定时任务 (Cron)

#### 添加定时任务
```bash
yee88 cron add <id> <schedule> <message> [--project <alias>]
```

参数：
- `id`: 任务唯一标识
- `schedule`: Cron 表达式（如 "0 9 * * 1-5"）
- `message`: 推送消息内容
- `--project`: 可选，项目别名（如 takopi），不指定则在默认上下文执行

示例：
```bash
# 每日站会（工作日早上9点）
yee88 cron add standup "0 9 * * 1-5" "准备每日站会" --project work

# 周报（周五下午6点）
yee88 cron add weekly "0 18 * * 5" "生成本周工作报告" --project work

# 提醒（每30分钟）
yee88 cron add reminder "*/30 * * * *" "该休息眼睛了" --project personal
```

#### 列出所有定时任务
```bash
yee88 cron list
```

显示所有（包括禁用的）：
```bash
yee88 cron list --all
```

#### 启用/禁用任务
```bash
yee88 cron enable <id>
yee88 cron disable <id>
```

#### 删除任务
```bash
yee88 cron remove <id>
```

强制删除（不确认）：
```bash
yee88 cron remove <id> --force
```

#### 立即执行一次（测试）
```bash
yee88 cron run <id>
```

#### 添加一次性定时任务

使用 `--one-time` 或 `-o` 参数创建只执行一次的任务，执行后自动删除。

支持两种时间格式：
- **相对时间**: `+30m` (30分钟后), `+2h` (2小时后), `+1d` (1天后)
- **ISO 8601**: `2026-02-01T14:00:00` (具体日期时间)

```bash
# 30分钟后提醒
yee88 cron add reminder "+30m" "该开会了" --project work -o

# 2小时后部署
yee88 cron add deploy "+2h" "部署到生产环境" --project myapp -o

# 指定具体时间
yee88 cron add meeting "2026-02-01T14:00:00" "项目评审会议" --project work -o
```

查看任务列表时，一次性任务会标记为 `once` 类型：
```bash
yee88 cron list
# 输出: ID                   TYPE       SCHEDULE             STATUS     PROJECT
```

### 4. 话题管理

#### 初始化话题

```bash
yee88 topic init [PROJECT] [--branch [NAME]]
```

在当前目录创建 Telegram 话题并绑定到项目。**默认只绑定项目目录**，不关联 git 分支，无需 git 仓库即可运行。

`--branch` 三种用法：
| 命令 | 效果 |
|------|------|
| `yee88 topic init` | 绑定当前目录（项目名=目录名） |
| `yee88 topic init --branch` | 自动取当前 git 分支，绑定 project@branch |
| `yee88 topic init --branch main` | 绑定 project@main |
| `yee88 topic init --branch feat/x` | 绑定 project@feat/x |

示例：
```bash
# 非 git 目录 / 不想绑定分支
yee88 topic init myproject

# 绑定当前 git 分支
yee88 topic init myproject --branch

# 绑定指定分支
yee88 topic init myproject --branch feat/new-feature
```

#### 删除话题
```bash
yee88 topic delete [PROJECT] [--branch [NAME]]
```

#### 在 Telegram 中管理话题
在话题内发送 `/topic` 命令：
```bash
/topic <project> [@branch]     # 创建/绑定话题
/ctx set <project> [@branch]   # 绑定上下文
/ctx show                       # 查看上下文
/new                            # 清除话题内的会话记录
```

### 5. 引擎运行

#### 启动 yee88
```bash
yee88
```

#### 指定引擎启动
```bash
yee88 claude
yee88 codex
yee88 opencode
yee88 pi
```

#### 带选项启动
```bash
yee88 --debug
yee88 --onboard
yee88 --transport telegram
```

### 6. 诊断检查

#### 运行配置检查
```bash
yee88 doctor
```

检查配置是否正确，包括：
- Telegram bot token
- Chat ID
- 引擎可用性
- 项目配置

### 7. 插件管理

#### 列出插件
```bash
yee88 plugins
```

#### 验证插件
```bash
yee88 plugins --validate
```

### 8. 获取 Chat ID

```bash
yee88 chat-id
```

启动临时 bot 捕获 Telegram chat ID。

### 9. 查看引导路径

```bash
yee88 onboarding-paths
```

显示所有可能的配置路径。

## 配置参考

### 配置文件位置
- 主配置：`~/.yee88/yee88.toml`
- 定时任务：`~/.yee88/cron.toml`
- 话题状态：`~/.yee88/telegram_topics_state.json`

### 常用配置示例

```toml
# ~/.yee88/yee88.toml

watch_config = true
default_engine = "claude"
default_project = "myproject"
transport = "telegram"

[transports.telegram]
bot_token = "YOUR_BOT_TOKEN"
chat_id = 123456789
session_mode = "chat"
show_resume_line = false

[projects.myproject]
path = "~/dev/my-project"
default_engine = "claude"
```

## 使用场景

### 场景 1：每日工作流自动化

```bash
# 1. 注册项目
cd ~/dev/work-project
yee88 init work

# 2. 设置默认项目
yee88 config set default_project work

# 3. 添加定时任务（使用项目别名）
yee88 cron add morning "0 9 * * 1-5" "准备每日站会" --project work
yee88 cron add evening "0 18 * * 1-5" "总结今日工作" --project work
yee88 cron add weekly "0 17 * * 5" "生成本周报告" --project work

# 4. 启动 yee88
yee88
```

### 场景 2：多项目管理

```bash
# 注册多个项目
cd ~/dev/project-a && yee88 init project-a
cd ~/dev/project-b && yee88 init project-b

# 设置不同默认引擎
yee88 config set projects.project-a.default_engine "claude"
yee88 config set projects.project-b.default_engine "codex"

# 为每个项目创建话题
cd ~/dev/project-a
yee88 topic init

cd ~/dev/project-b
yee88 topic init
```

### 场景 3：团队协作

```bash
# 1. 配置群组 chat_id
yee88 config set transports.telegram.chat_id -1001234567890

# 2. 启用话题模式
yee88 config set transports.telegram.topics.enabled true

# 3. 创建团队话题
yee88 topic init team-project --branch main

# 4. 设置定时提醒（使用项目别名）
yee88 cron add daily-sync "0 10 * * 1-5" "团队同步时间" --project team-project
```

### 场景 4：临时提醒和一次性任务

```bash
# 30分钟后提醒自己休息
yee88 cron add break "+30m" "该休息眼睛了，起来活动一下" --project personal -o

# 今天下午3点的会议提醒
yee88 cron add meeting "2026-02-01T15:00:00" "参加产品评审会议" --project work -o

# 明天早上执行代码审查
yee88 cron add review "+1d" "审查昨天的 PR" --project work -o
```

## 故障排查

### 检查配置
```bash
yee88 doctor
```

### 查看日志
```bash
# yee88 日志
tail -f /tmp/yee88.log

# 定时任务日志
tail -f /tmp/yee88-cron.log
```

### 验证 cron 表达式
```bash
python -c "from croniter import croniter; print(croniter('0 9 * * *').get_next(str))"
```

### 测试任务
```bash
yee88 cron run <task-id>
```

## 注意事项

1. **项目别名要求**：
   - 定时任务的 `--project` 使用项目别名（如 `takopi`, `work`）
   - 通过 `yee88 config list | grep projects` 查看已注册项目
   - 使用 `yee88 init <alias>` 注册新项目

2. **配置热重载**：
   - 设置 `watch_config = true` 可热重载配置
   - 定时任务配置修改后需重启 yee88

3. **调度精度**：
   - 定时任务每分钟检查一次
   - 实际执行可能有 1 分钟内延迟

4. **权限问题**：
   - 确保 yee88 命令在 PATH 中
   - 定时任务执行时保持 yee88 运行

5. **一次性任务**：
   - 使用 `-o` 或 `--one-time` 参数创建
   - 支持相对时间 (`+30m`, `+2h`, `+1d`) 和 ISO 8601 格式
   - 执行后自动从列表中删除
   - 无法对一次性任务使用 enable/disable（执行前自动删除）

### 10. 会话接力（Handoff）

将当前 OpenCode 会话上下文发送到 Telegram，方便在手机上继续对话。

```bash
yee88 handoff
```

功能：
- 自动列出当前项目的最近会话（带话题名称）
- 选择会话后，创建新的 Telegram Topic
- 将会话上下文和最近消息发送到 Topic
- 在 Telegram 中直接继续对话

选项：
- `--session, -s`: 指定会话 ID（默认交互选择）
- `--limit, -n`: 包含的消息数量（默认 3）
- `--project, -p`: 项目名称

示例：
```bash
yee88 handoff
yee88 handoff -s ses_abc123 -n 5
```

### 11. 发送文件/图片 (send-file)

向 Telegram 发送文件或图片。自动检测文件类型：图片类型使用 sendPhoto（聊天中直接显示），其他类型使用 sendDocument（作为附件）。

```bash
yee88 send-file <file_path> [--chat-id <id>] [--thread-id <id>] [--caption <text>]
```

参数：
- `<file_path>`: 文件路径（必填）
- `--chat-id, -c`: Telegram chat ID（默认从配置或环境变量 `YEE88_CHAT_ID` 读取）
- `--thread-id, -t`: Telegram thread ID（默认从环境变量 `YEE88_THREAD_ID` 读取）
- `--caption`: 可选的文件说明

**在 OpenCode 会话中使用时**，`YEE88_CHAT_ID` 和 `YEE88_THREAD_ID` 环境变量会自动注入，无需手动指定：

```bash
# OpenCode 会话中直接使用（环境变量自动注入）
yee88 send-file /path/to/screenshot.png
yee88 send-file /path/to/report.pdf --caption "今日报告"

# 手动指定 chat_id（CLI 独立使用时）
yee88 send-file /path/to/image.png --chat-id 123456789
yee88 send-file /path/to/doc.pdf -c 123456789 -t 456
```

支持的图片格式（直接显示）：png, jpg, jpeg, gif, webp, bmp
其他格式（作为附件）：pdf, zip, txt, csv, xlsx 等

## 完整命令速查表

| 命令 | 说明 |
|------|------|
| `yee88` | 启动 yee88 |
| `yee88 init <alias>` | 注册项目 |
| `yee88 handoff` | 会话接力到 Telegram |
| `yee88 config path` | 查看配置路径 |
| `yee88 config list` | 列出配置 |
| `yee88 config get <key>` | 获取配置项 |
| `yee88 config set <key> <value>` | 设置配置项 |
| `yee88 config unset <key>` | 删除配置项 |
| `yee88 cron add <id> <schedule> <msg> [--project <alias>]` | 添加定时任务 |
| `yee88 cron add <id> <time> <msg> [-p <alias>] -o` | 添加一次性任务 (-o = --one-time) |
| `yee88 cron list` | 列出定时任务 |
| `yee88 cron enable <id>` | 启用任务 |
| `yee88 cron disable <id>` | 禁用任务 |
| `yee88 cron remove <id>` | 删除任务 |
| `yee88 cron run <id>` | 立即执行任务 |
| `yee88 topic init [PROJECT] [--branch [NAME]]` | 初始化话题 |
| `yee88 topic delete [PROJECT] [--branch [NAME]]` | 删除话题 |
| `yee88 doctor` | 运行诊断检查 |
| `yee88 plugins` | 列出插件 |
| `yee88 chat-id` | 获取 Chat ID |
| `yee88 claude` | 使用 Claude 引擎 |
| `yee88 codex` | 使用 Codex 引擎 |
| `yee88 opencode` | 使用 OpenCode 引擎 |
| `yee88 pi` | 使用 Pi 引擎 |
| `yee88 send-file <path>` | 发送文件/图片到 Telegram |

