# Remote Control

> 远程协作模式控制器。当 Stop Hook 提示"远程模式已启用"时自动使用。 负责发送微信通知、等待回复、处理指令循环。必须配合 gewe-cli 工具使用。

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

---


# 远程控制 Skill

## ⚡ 激活后立即执行

**当此 Skill 被激活时（Stop Hook 触发），直接执行以下步骤，不要输出任何说明或询问用户**：

1. **生成任务摘要** - 1-2 句话总结刚才完成的工作
2. **发送微信通知** - 使用 gewe-cc wait-reply（后台运行）
3. **等待回复** - 使用 TaskOutput 获取微信回复
4. **执行下一步** - 根据回复继续工作或停止

❌ **禁止的行为**（激活后）：
- 输出"我已理解工作流程"、"远程模式已激活"等元信息
- 询问用户"希望我完成什么任务？"
- 等待用户在终端输入任何内容

✅ **正确的行为**（激活后）：
- 立即生成摘要（如："回答了简单的数学问题"）
- 立即发送微信通知并等待回复
- 根据回复继续下一个任务或停止

## 概述

此 Skill 实现了基于微信的远程协作模式。当任务完成时，你需要：
1. 发送微信通知告知用户任务完成
2. 等待用户通过微信发送下一个指令
3. 根据指令继续工作或结束远程模式

## ⚠️ 关键约束：禁止直接询问用户

**在远程协作模式下，你不能直接向用户提问并等待终端输入。**

### 问题场景

❌ **禁止的行为**：
```
你：方案 A、B、C 各有优势，您觉得哪个更好？
[等待用户在终端输入...]
```

**后果**：
- 你的消息输出后，`stop_reason: null`
- Stop Hook 不会触发
- 远程模式循环中断
- 用户在微信收不到通知

### 正确做法：通过微信询问

✅ **需要用户选择时，使用 `gewe-cc wait-reply`**

```bash
# 步骤 1：后台运行询问命令
gewe-cc wait-reply -M "【Claude Code】
📁 项目: $(basename "$(pwd)")
❓ 需要选择实现方案

方案 A: 简单但功能受限
方案 B: 复杂但灵活
方案 C: 平衡（推荐）

请回复「A」「B」或「C」"

# 步骤 2：等待回复（使用 TaskOutput）
# 步骤 3：根据回复执行对应方案
```

**为什么可行**：
- `gewe-cc wait-reply` 阻塞运行直到收到微信回复
- 回复后你的输出完整，`stop_reason` 正常
- Stop Hook 正常触发，远程模式继续循环

### 设计原则

**该问就问**：需要用户输入时，通过 `gewe-cc wait-reply` 获取微信回复，永远不要直接向用户提问并等待终端输入。

## 配置信息

配置会自动从 `~/.gewe-cc/config.toml` 读取：
- **目标微信 ID**: 配置文件中的 `notification.wxid`
- **监听地址**: 配置文件中的 `notification.listen`
- **命令工具**: `gewe-cc`（封装了 gewe-cli）

## 工作流程

### 步骤 1：生成任务摘要

根据本次会话完成的工作，生成**简洁的 1-2 句话摘要**。

**好的示例**：
- "创建了用户认证模块，添加了 JWT 支持"
- "修复了数据库连接池泄漏问题"
- "重构了配置系统，支持环境变量覆盖"

**避免**：
- ❌ "完成了任务"（太笼统）
- ❌ "修改了 3 个文件，添加了 150 行代码"（太技术细节）

### 步骤 2：发送微信通知并等待回复

有两种发送方式：**文本消息**（简短摘要）或 **链接卡片**（完整 transcript）

#### 方式 A：发送文本消息（简短摘要）

适用于摘要简短（< 200 字符）的情况。

```bash
gewe-cc wait-reply -M "【Claude Code】
📁 项目: $(basename "$(pwd)")
✅ 任务完成
📝 摘要: <你生成的摘要>

回复任何内容继续，回复「停止」结束远程模式。"
```

**必须使用 `run_in_background=true` 参数**！

#### 方式 B：发送链接卡片（完整 transcript）

适用于摘要较长或需要查看完整对话历史的情况。

**前置检查**：

在发送链接卡片前，必须先检查 HTTP 服务器是否运行：

```bash
# 检查 HTTP 服务器进程
if ! pgrep -f "gewe-cc serve" > /dev/null; then
    echo "⚠️ HTTP 服务器未运行，正在启动..."
    gewe-cc serve &
    sleep 2
fi
```

**前置要求**：
1. 确保配置文件中已设置 `transcript_domain`
   ```bash
   gewe-cc config --transcript-domain "https://transcript.example.com"
   ```

2. 确保 `~/.gewe-cc/assets/thumb.png` 存在且小于 50KB

**使用方法**：

```bash
# 从 Stop Hook 提示中提取 session_id
# 例如："会话: 75f2b194-4b91-4c19-8e97-4ff5fe562ece"

SESSION_ID="<从提示中获取的 session_id>"

# 发送链接卡片并等待回复（一条命令完成）
gewe-cc send-link \
  --session-id "${SESSION_ID}" \
  --summary "<你生成的摘要>"
```

**该命令会自动**：
- 从配置读取 wxid 和 transcript_domain
- 构建完整的 transcript URL
- 发送链接卡片到微信
- 等待用户回复
- 返回用户的回复内容

**必须使用 `run_in_background=true` 参数**！

**链接卡片优势**：
- 展示完整对话历史（包括 tool use、tool result）
- 支持 Markdown 渲染和代码高亮
- 响应式设计，移动端友好
- 提供"跳到底部"按钮快速查看最新内容

**选择建议**：
- 摘要 < 200 字符 → 使用文本消息
- 摘要 ≥ 200 字符 → 使用链接卡片
- 需要查看详细 tool 调用 → 使用链接卡片

### 步骤 3：等待并获取回复

使用 `TaskOutput` 工具等待后台命令完成：

```
1. 从步骤 2 的返回中获取任务 ID
2. 使用 TaskOutput(task_id=<id>, block=true, timeout=300000) 阻塞等待
```

**超时设置**：
- 默认超时 300000 毫秒（5 分钟）
- 如果超时，询问用户是否继续等待

### 步骤 4：解析回复内容

从 TaskOutput 的输出中直接获取用户的回复内容。

**gewe-cc wait-reply 输出格式**：
```
<用户的回复内容>
```

直接获取输出即为用户回复。

### 步骤 5：根据回复决定下一步

检查回复内容（不区分大小写）：

#### 情况 A：用户回复"停止"

如果回复是以下任意一个（不区分大小写）：
- `停止`
- `stop`
- `Stop`
- `STOP`

**执行操作**：

```bash
# 关闭当前会话的远程模式（保持全局远程模式启用）
gewe-cc off --session-id <会话ID>
```

然后告知用户当前会话已结束，正常结束（不要继续循环）。

**会话 ID 说明**：从 Stop Hook 的提示中获取，格式为：`5e64d0b7` 等

#### 情况 B：用户回复其他内容

将回复内容作为新的用户指令执行：

```
1. 将回复作为新任务
2. 执行该任务
3. 任务完成后回到步骤 1（重新循环）
```

**示例**：

```
用户回复："添加单元测试"
  ↓
你应该：
1. 理解这是要添加单元测试的任务
2. 执行添加单元测试
3. 完成后再次生成摘要
4. 再次发送微信通知
5. 等待下一个指令
```

## 错误处理

### gewe-cc 命令失败

如果 `gewe-cc wait-reply` 命令失败：

```
1. 显示错误信息给用户
2. 询问用户是否退出远程模式
3. 如果用户确认，执行 gewe-cc off
```

### TaskOutput 超时

如果等待超过 5 分钟没有回复：

```
询问用户：
"等待微信回复已超时（5 分钟）。是否继续等待？
1. 继续等待（再等 5 分钟）
2. 退出远程模式"
```

## 完整示例

### 成功流程示例

```
[Claude 完成任务：重构配置系统]
  ↓
Stop Hook 检测到远程模式
  ↓
remote-control Skill 激活
  ↓
生成摘要："重构了配置系统，支持环境变量覆盖"
  ↓
发送微信（后台运行）：
  gewe-cc wait-reply -M "【Claude Code】..."
  [返回任务 ID: abc123]
  ↓
使用 TaskOutput 等待：
  TaskOutput(task_id="abc123", block=true, timeout=300000)
  ↓
收到回复："添加配置文档"
  ↓
执行新任务：添加配置文档
  ↓
[任务完成，回到开始循环]
```

### 停止流程示例

```
[Claude 完成任务]
  ↓
发送微信通知
  ↓
等待回复
  ↓
收到回复："停止"
  ↓
执行命令：
  gewe-cc off
  ↓
告知用户："✅ 远程模式已结束"
  ↓
正常结束（不再循环）
```

## 注意事项

1. **必须使用 run_in_background**
   - `gewe-cc wait-reply` 会阻塞等待回复
   - 必须后台运行，否则会卡住

2. **摘要要有意义**
   - 用户通过微信查看，需要快速理解完成了什么
   - 避免技术术语过多

3. **循环条件**
   - 只有收到"停止"指令才退出
   - 其他任何回复都继续执行

4. **配置自动读取**
   - gewe-cc 会自动从 ~/.gewe-cc/config.toml 读取配置
   - 无需手动解析配置文件

5. **退出方式**
   - 使用 `gewe-cc off` 命令禁用远程模式
   - 不要手动删除文件

