936 lines
26 KiB
Markdown
936 lines
26 KiB
Markdown
# 使用指南
|
||
|
||
cc-connect 完整功能使用指南。
|
||
|
||
## 目录
|
||
|
||
- [会话管理](#会话管理)
|
||
- [权限模式](#权限模式)
|
||
- [API Provider 管理](#api-provider-管理)
|
||
- [模型选择](#模型选择)
|
||
- [工作目录切换(`/dir`、`/cd`)](#工作目录切换dircd)
|
||
- [引用查看(`/show`)](#引用查看show)
|
||
- [飞书配置 CLI](#飞书配置-cli)
|
||
- [微信个人号配置 CLI](#微信个人号配置-cli)
|
||
- [Claude Code Router 集成](#claude-code-router-集成)
|
||
- [语音消息(语音转文字)](#语音消息语音转文字)
|
||
- [语音回复(文字转语音)](#语音回复文字转语音)
|
||
- [图片与文件回传](#图片与文件回传)
|
||
- [定时任务 (Cron)](#定时任务-cron)
|
||
- [多机器人中继](#多机器人中继)
|
||
- [守护进程模式](#守护进程模式)
|
||
- [多工作区模式](#多工作区模式)
|
||
- [Web 管理后台(Beta)](#web-管理后台beta)
|
||
- [Bridge — 外部适配器接入(Beta)](#bridge--外部适配器接入beta)
|
||
- [配置参考](#配置参考)
|
||
|
||
---
|
||
|
||
## 会话管理
|
||
|
||
每个用户拥有独立的会话和完整的对话上下文。通过斜杠命令管理:
|
||
|
||
| 命令 | 说明 |
|
||
|------|------|
|
||
| `/new [名称]` | 创建新会话 |
|
||
| `/list` | 列出当前项目的会话 |
|
||
| `/switch <id>` | 切换到指定会话 |
|
||
| `/current` | 查看当前会话 |
|
||
| `/history [n]` | 查看最近 n 条消息 |
|
||
| `/usage` | 查看账号/模型限额使用情况 |
|
||
| `/provider [...]` | 管理 API Provider |
|
||
| `/model [switch <alias>]` | 列出可用模型或按别名切换 |
|
||
| `/dir [路径]` | 查看或切换 Agent 工作目录 |
|
||
| `/show <引用>` | 按引用查看文件、目录或代码片段 |
|
||
| `/allow <工具名>` | 预授权工具 |
|
||
| `/reasoning [等级]` | 查看或切换推理强度(Codex)|
|
||
| `/mode [名称]` | 查看或切换权限模式 |
|
||
| `/stop` | 停止当前执行 |
|
||
| `/help` | 显示可用命令 |
|
||
|
||
会话中 Agent 请求工具权限时,回复 **允许** / **拒绝** / **允许所有**。
|
||
|
||
也可以为项目开启“空闲后自动切换新会话”:
|
||
|
||
```toml
|
||
[[projects]]
|
||
name = "demo"
|
||
reset_on_idle_mins = 60
|
||
```
|
||
|
||
开启后,如果用户长时间未发消息,下一条普通消息会自动进入一个新的会话;旧会话仍会保留在 `/list` 中,不会被删除。
|
||
|
||
### 切换模型时保留历史
|
||
|
||
`/model` 切换模型时保留当前会话——agent 会在新模型下继续对话(不额外消耗 token)。注意模型切换作用于共享的 agent 实例——如果多个平台使用同一个 project,模型变更会影响所有平台。
|
||
|
||
---
|
||
|
||
## 权限模式
|
||
|
||
所有 Agent 支持运行时切换权限模式,通过 `/mode` 命令。
|
||
|
||
### Claude Code 模式
|
||
|
||
| 模式 | 配置值 | 行为 |
|
||
|------|--------|------|
|
||
| 默认 | `default` | 每次工具调用需确认 |
|
||
| 接受编辑 | `acceptEdits` / `edit` | 文件编辑自动通过 |
|
||
| 自动模式 | `auto` | 由 Claude 自动判断何时需要确认 |
|
||
| 计划模式 | `plan` | 只规划不执行 |
|
||
| YOLO | `bypassPermissions` / `yolo` | 全部自动通过 |
|
||
|
||
### Codex 模式
|
||
|
||
| 模式 | 配置值 | 行为 |
|
||
|------|--------|------|
|
||
| 建议 | `suggest` | 仅受信命令自动执行 |
|
||
| 自动编辑 | `auto-edit` | 模型自行决定 |
|
||
| 全自动 | `full-auto` | 自动通过 + 沙箱保护 |
|
||
| YOLO | `yolo` | 跳过所有审批 |
|
||
|
||
### Cursor Agent 模式
|
||
|
||
| 模式 | 配置值 | 行为 |
|
||
|------|--------|------|
|
||
| 默认 | `default` | 工具调用前询问 |
|
||
| 强制执行 | `force` / `yolo` | 自动批准所有 |
|
||
| 规划模式 | `plan` | 只读分析 |
|
||
| 问答模式 | `ask` | 问答风格,只读 |
|
||
|
||
### Gemini CLI 模式
|
||
|
||
| 模式 | 配置值 | 行为 |
|
||
|------|--------|------|
|
||
| 默认 | `default` | 每次需确认 |
|
||
| 自动编辑 | `auto_edit` / `edit` | 编辑自动通过 |
|
||
| 全自动 | `yolo` | 自动批准所有 |
|
||
| 规划模式 | `plan` | 只读规划 |
|
||
|
||
### Qoder CLI / OpenCode / iFlow CLI
|
||
|
||
| 模式 | 配置值 | 行为 |
|
||
|------|--------|------|
|
||
| 默认 | `default` | 标准权限 |
|
||
| YOLO | `yolo` | 跳过所有检查 |
|
||
|
||
### 配置示例
|
||
|
||
```toml
|
||
[projects.agent.options]
|
||
mode = "default"
|
||
# allowed_tools = ["Read", "Grep", "Glob"]
|
||
```
|
||
|
||
运行时切换:
|
||
```
|
||
/mode # 查看当前和可用模式
|
||
/mode yolo # 切换到 YOLO 模式
|
||
/mode default # 切回默认
|
||
```
|
||
|
||
---
|
||
|
||
## API Provider 管理
|
||
|
||
运行时切换 API Provider,无需重启。
|
||
|
||
### 配置 Provider
|
||
|
||
```toml
|
||
[projects.agent.options]
|
||
work_dir = "/path/to/project"
|
||
provider = "anthropic"
|
||
|
||
[[projects.agent.providers]]
|
||
name = "anthropic"
|
||
api_key = "sk-ant-xxx"
|
||
|
||
[[projects.agent.providers]]
|
||
name = "relay"
|
||
api_key = "sk-xxx"
|
||
base_url = "https://api.relay-service.com"
|
||
model = "claude-sonnet-4-20250514"
|
||
|
||
[[projects.agent.providers.models]]
|
||
model = "claude-sonnet-4-20250514"
|
||
alias = "sonnet"
|
||
|
||
[[projects.agent.providers.models]]
|
||
model = "claude-opus-4-20250514"
|
||
alias = "opus"
|
||
|
||
[[projects.agent.providers.models]]
|
||
model = "claude-haiku-3-5-20241022"
|
||
alias = "haiku"
|
||
|
||
# MiniMax — 兼容 OpenAI 接口,1M 超长上下文
|
||
[[projects.agent.providers]]
|
||
name = "minimax"
|
||
api_key = "your-minimax-api-key"
|
||
base_url = "https://api.minimax.io/v1"
|
||
model = "MiniMax-M2.7"
|
||
|
||
# Bedrock、Vertex 等
|
||
[[projects.agent.providers]]
|
||
name = "bedrock"
|
||
env = { CLAUDE_CODE_USE_BEDROCK = "1", AWS_PROFILE = "bedrock" }
|
||
```
|
||
|
||
### CLI 命令
|
||
|
||
```bash
|
||
cc-connect provider add --project my-backend --name relay --api-key sk-xxx --base-url https://api.relay.com
|
||
cc-connect provider list --project my-backend
|
||
cc-connect provider remove --project my-backend --name relay
|
||
cc-connect provider import --project my-backend # 从 cc-switch 导入
|
||
```
|
||
|
||
### 聊天命令
|
||
|
||
```
|
||
/provider 查看当前 Provider
|
||
/provider list 列出所有
|
||
/provider add <名称> <key> [url] [model]
|
||
/provider remove <名称>
|
||
/provider switch <名称>
|
||
/provider <名称> 切换快捷方式
|
||
```
|
||
|
||
### 环境变量映射
|
||
|
||
| Agent | api_key → | base_url → |
|
||
|-------|-----------|------------|
|
||
| Claude Code | `ANTHROPIC_API_KEY` | `ANTHROPIC_BASE_URL` |
|
||
| Codex | `OPENAI_API_KEY` | `OPENAI_BASE_URL` |
|
||
| Gemini CLI | `GEMINI_API_KEY` | 使用 `env` 字段 |
|
||
| OpenCode | `ANTHROPIC_API_KEY` | 使用 `env` 字段 |
|
||
| iFlow CLI | `IFLOW_API_KEY` | `IFLOW_BASE_URL` |
|
||
|
||
---
|
||
|
||
## 模型选择
|
||
|
||
通过 `[[providers.models]]` 为每个 Provider 预配置可选模型列表。每个条目包含 `model`(模型标识符)和可选的 `alias`(别名,显示在 `/model` 中)。
|
||
|
||
### 配置模型
|
||
|
||
```toml
|
||
[[projects.agent.providers]]
|
||
name = "openai"
|
||
api_key = "sk-xxx"
|
||
|
||
[[projects.agent.providers.models]]
|
||
model = "gpt-5.3-codex"
|
||
alias = "codex"
|
||
|
||
[[projects.agent.providers.models]]
|
||
model = "gpt-5.4"
|
||
alias = "gpt"
|
||
|
||
[[projects.agent.providers.models]]
|
||
model = "gpt-5.3-codex-spark"
|
||
alias = "spark"
|
||
```
|
||
|
||
### 聊天命令
|
||
|
||
```
|
||
/model 列出可用模型(格式:alias - model)
|
||
/model switch <alias> 按别名切换模型
|
||
/model switch <name> 按完整名称切换模型
|
||
/model <alias> 兼容旧写法,仍然可用
|
||
```
|
||
|
||
配置了 `models` 时,`/model` 直接显示该列表,不发起 API 请求。未配置时,自动从 Provider API 获取或使用内置备选列表。
|
||
|
||
---
|
||
|
||
## 工作目录切换(`/dir`、`/cd`)
|
||
|
||
可直接在聊天中切换 Agent 下一次会话的工作目录。
|
||
|
||
### 聊天命令
|
||
|
||
```
|
||
/dir 查看当前工作目录和最近历史
|
||
/dir <路径> 切换到指定路径(相对或绝对)
|
||
/dir <序号> 按历史序号切换目录
|
||
/dir - 返回上一个目录
|
||
/dir help 查看命令用法
|
||
/cd <路径> `/dir <路径>` 的兼容别名
|
||
```
|
||
|
||
### 行为说明
|
||
|
||
- 目录切换会作用于当前项目的下一次会话。
|
||
- 相对路径基于当前 Agent 工作目录解析。
|
||
- 目录历史按项目隔离,可通过序号快速切换。
|
||
- `/cd` 为兼容保留,建议优先使用 `/dir`。
|
||
|
||
示例:
|
||
|
||
```text
|
||
/dir ../another-repo
|
||
/dir 2
|
||
/dir -
|
||
```
|
||
|
||
---
|
||
|
||
## 本地引用展示配置(`[projects.references]`)
|
||
|
||
可选启用对 Agent 输出中的本地文件 / 目录 / 代码位置引用进行标准化与重渲染,提升在 IM 平台中的可读性。
|
||
|
||
这是一个 **opt-in** 功能:
|
||
|
||
- 未配置 `[projects.references]` 时,现有行为保持不变
|
||
- 只有命中 `normalize_agents` 和 `render_platforms` 时,才会启用
|
||
|
||
### 推荐配置
|
||
|
||
```toml
|
||
[projects.references]
|
||
normalize_agents = ["all"]
|
||
render_platforms = ["all"]
|
||
display_path = "relative"
|
||
marker_style = "emoji"
|
||
enclosure_style = "code"
|
||
```
|
||
|
||
### 字段说明
|
||
|
||
- `normalize_agents`
|
||
- 控制哪些 Agent 输出参与这套引用处理
|
||
- 当前初始支持:`codex`、`claudecode`、`all`
|
||
|
||
- `render_platforms`
|
||
- 控制在哪些平台发送前应用展示重写
|
||
- 当前初始支持:`feishu`、`weixin`、`all`
|
||
|
||
- `display_path`
|
||
- 控制路径主体的显示层级
|
||
- 可选值:`absolute`、`relative`、`basename`、`dirname_basename`、`smart`
|
||
|
||
- `marker_style`
|
||
- 控制前缀标记样式
|
||
- 可选值:`none`、`ascii`、`emoji`
|
||
|
||
- `enclosure_style`
|
||
- 控制路径主体的包裹样式
|
||
- 可选值:`none`、`bracket`、`angle`、`fullwidth`、`code`
|
||
|
||
### 支持的引用输入
|
||
|
||
当前初始支持识别这些常见形式:
|
||
|
||
- 绝对路径
|
||
- 相对路径
|
||
- 文件 / 目录引用
|
||
- `path:line`
|
||
- `path:line:col`
|
||
- `path:start-end`
|
||
- `path#L42`
|
||
- Markdown 本地文件链接
|
||
- Claude 风格的反引号绝对路径引用
|
||
|
||
### 行为说明
|
||
|
||
- 只处理 Agent 输出:
|
||
- thinking
|
||
- final response
|
||
- stream preview
|
||
- progress / card 中的 Agent 文本
|
||
|
||
- 不处理:
|
||
- 系统消息
|
||
- `/workspace`、`/dir`、`/status` 等命令回复
|
||
- raw tool result
|
||
|
||
- 网页链接会保持原样,不会被本地引用重写逻辑污染
|
||
|
||
### 推荐默认值说明
|
||
|
||
当前最推荐的组合是:
|
||
|
||
- `display_path = "relative"`
|
||
- `marker_style = "emoji"`
|
||
- `enclosure_style = "code"`
|
||
|
||
这样通常会得到类似:
|
||
|
||
- `📄 ui/recovery_contact_form.tsx:11`
|
||
- `📁 docs/spec.v1/`
|
||
|
||
如果不希望使用 emoji,更推荐:
|
||
|
||
- `display_path = "dirname_basename"`
|
||
- `marker_style = "ascii"`
|
||
- `enclosure_style = "code"`
|
||
|
||
---
|
||
|
||
## 引用查看(`/show`)
|
||
|
||
可直接基于一个文件 / 目录 / 代码位置引用查看内容,而不必手写 `/shell sed ...`。
|
||
|
||
### 聊天命令
|
||
|
||
```text
|
||
/show <路径> 查看文件前 80 行
|
||
/show <路径:行号> 查看该行附近上下文
|
||
/show <路径:起止行> 查看指定 range
|
||
/show <目录路径/> 查看一级目录列表
|
||
```
|
||
|
||
支持的输入形式包括:
|
||
|
||
- 绝对路径
|
||
- 相对路径(相对当前 Agent 工作目录)
|
||
- `path:line`
|
||
- `path:line:col`
|
||
- `path:start-end`
|
||
- `path#L42`
|
||
- Markdown 本地文件链接,如:
|
||
- `[file.ts](/abs/path/file.ts#L42)`
|
||
|
||
### 行为说明
|
||
|
||
- 文件,无位置:
|
||
- 默认显示文件前 80 行
|
||
- `path:line` / `path#L42`:
|
||
- 默认显示该位置附近上下文
|
||
- `path:start-end`:
|
||
- 默认显示该 range
|
||
- 目录:
|
||
- 默认显示一级目录内容
|
||
|
||
说明:
|
||
|
||
- `/show` 只解析“纯引用文本”,不解析前端展示层包装后的 `📄 ...` / `[FILE] ...` 这类样式
|
||
- `/show` 属于本地文件系统查看命令,与 `/shell`、`/dir` 类似,默认受 `admin_from` 权限控制
|
||
- 执行 Shell 命令支持 `!` 快捷前缀:`!ls -la` 等同于 `/shell ls -la`,`! --timeout 300 npm install` 可指定超时时间
|
||
|
||
示例:
|
||
|
||
```text
|
||
/show ui/recovery_contact_form.tsx
|
||
/show svc/recovery_session_reconciler.go:12
|
||
/show svc/recovery_session_reconciler_test.go:8-17
|
||
/show docs/spec.v1/
|
||
```
|
||
|
||
---
|
||
|
||
## 飞书配置 CLI
|
||
|
||
可以直接通过 CLI 完成飞书/Lark 机器人创建或关联,并自动写回 `config.toml`:
|
||
|
||
```bash
|
||
# 推荐:统一入口
|
||
cc-connect feishu setup --project my-project
|
||
cc-connect feishu setup --project my-project --app cli_xxx:sec_xxx
|
||
|
||
# 强制模式(一般不需要)
|
||
cc-connect feishu new --project my-project
|
||
cc-connect feishu bind --project my-project --app cli_xxx:sec_xxx
|
||
```
|
||
|
||
区别说明:
|
||
- `setup`:统一入口。没传凭证时等价 `new`,传了 `--app` 时等价 `bind`。
|
||
- `new`:强制二维码新建,不接受 `--app`。
|
||
- `bind`:强制关联已有机器人,必须提供凭证。
|
||
|
||
行为说明(通用):
|
||
- `setup` 默认走二维码新建;传入 `--app` 时自动切换到关联已有机器人。
|
||
- `--project` 不存在会自动创建。
|
||
- 项目存在但没有 `feishu/lark` 平台时会自动补一个平台配置。
|
||
- 命令会回填凭证(`app_id` / `app_secret`);扫码新建场景下飞书通常会预配权限和事件订阅。
|
||
- 建议在飞书开放平台再核验一次发布状态与可用范围。
|
||
- 运行时平台配置还支持可选 `domain` 覆盖 Feishu/Lark API 域名;这不会改变 `setup/new/bind` 的引导地址。
|
||
|
||
---
|
||
|
||
## 微信个人号配置 CLI
|
||
|
||
个人微信走 **ilink 机器人网关**(HTTP 长轮询,与 OpenClaw `openclaw-weixin` 同类)。可直接用 CLI 扫码登录或绑定已有 Token,并写回 `config.toml`。
|
||
|
||
**完整图文流程与配置项说明见:[docs/weixin.md](./weixin.md)。**
|
||
|
||
```bash
|
||
# 推荐:终端展示二维码 + URL,微信扫码确认后自动写配置
|
||
cc-connect weixin setup --project my-project
|
||
|
||
# 已有 Bearer Token(例如从 OpenClaw 导出)
|
||
cc-connect weixin bind --project my-project --token '<token>'
|
||
cc-connect weixin setup --project my-project --token '<token>'
|
||
|
||
# 强制只走扫码(不接受 --token)
|
||
cc-connect weixin new --project my-project
|
||
```
|
||
|
||
区别说明:
|
||
|
||
- `setup`:未传 `--token` 时走扫码;传了 `--token` 时等同绑定并可选校验。
|
||
- `new`:强制扫码。
|
||
- `bind`:强制绑定,必须 `--token`。
|
||
|
||
行为说明:
|
||
|
||
- `--project` 不存在时会自动创建项目;项目里没有 `weixin` 平台时会自动追加一块 `[[projects.platforms]]`。
|
||
- 扫码成功后会写入 `token`,以及网关返回的 `base_url`(若有)、`ilink_bot_id` → `account_id` 等。
|
||
- 默认 `--set-allow-from-empty=true`:若 `allow_from` 为空,会用扫码用户的 ilink ID 预填,便于收紧权限。
|
||
- 绑定时默认调用 `getUpdates` 校验 Token;可用 `--skip-verify` 跳过。
|
||
- 首次使用后请在微信里 **先发一条消息**,以便缓存 `context_token`,否则可能无法回复。
|
||
|
||
常用参数:`--api-url`、`--cdn-url`、`--timeout`、`--qr-image`、`--route-tag`、`--bot-type`、`--debug`(详见 `cc-connect weixin help` 或 [weixin.md](./weixin.md))。
|
||
|
||
---
|
||
|
||
## Claude Code Router 集成
|
||
|
||
[Claude Code Router](https://github.com/musistudio/claude-code-router) 可将请求路由到不同模型提供商。
|
||
|
||
### 安装配置
|
||
|
||
1. 安装:`npm install -g @musistudio/claude-code-router`
|
||
|
||
2. 配置 `~/.claude-code-router/config.json`:
|
||
```json
|
||
{
|
||
"APIKEY": "your-secret-key",
|
||
"Providers": [
|
||
{
|
||
"name": "deepseek",
|
||
"api_base_url": "https://api.deepseek.com/chat/completions",
|
||
"api_key": "sk-xxx",
|
||
"models": ["deepseek-chat", "deepseek-reasoner"],
|
||
"transformer": { "use": ["deepseek"] }
|
||
}
|
||
],
|
||
"Router": {
|
||
"default": "deepseek,deepseek-chat",
|
||
"think": "deepseek,deepseek-reasoner"
|
||
}
|
||
}
|
||
```
|
||
|
||
3. 启动:`ccr start`
|
||
|
||
4. 配置 cc-connect:
|
||
```toml
|
||
[projects.agent.options]
|
||
router_url = "http://127.0.0.1:3456"
|
||
router_api_key = "your-secret-key"
|
||
```
|
||
|
||
---
|
||
|
||
## 语音消息(语音转文字)
|
||
|
||
发送语音消息,自动转文字。
|
||
|
||
**支持平台:** 飞书、企业微信、Telegram、LINE、Discord、Slack
|
||
|
||
**前置条件:** OpenAI/Groq API Key,`ffmpeg`
|
||
|
||
### 配置
|
||
|
||
```toml
|
||
[speech]
|
||
enabled = true
|
||
provider = "openai" # 或 "groq"
|
||
language = "" # "zh"、"en" 或留空自动检测
|
||
|
||
[speech.openai]
|
||
api_key = "sk-xxx"
|
||
|
||
# [speech.groq]
|
||
# api_key = "gsk_xxx"
|
||
# model = "whisper-large-v3-turbo"
|
||
```
|
||
|
||
### 安装 ffmpeg
|
||
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt install ffmpeg
|
||
|
||
# macOS
|
||
brew install ffmpeg
|
||
```
|
||
|
||
---
|
||
|
||
## 语音回复(文字转语音)
|
||
|
||
将 AI 回复合成语音发送。
|
||
|
||
**支持平台:** 飞书
|
||
|
||
### 配置
|
||
|
||
```toml
|
||
[tts]
|
||
enabled = true
|
||
provider = "qwen" # 或 "openai"
|
||
voice = "Cherry"
|
||
tts_mode = "voice_only" # "voice_only" | "always"
|
||
max_text_len = 0
|
||
|
||
[tts.qwen]
|
||
api_key = "sk-xxx"
|
||
```
|
||
|
||
### TTS 模式
|
||
|
||
| 模式 | 行为 |
|
||
|------|------|
|
||
| `voice_only` | 仅当用户发语音时才语音回复 |
|
||
| `always` | 始终语音回复 |
|
||
|
||
切换:`/tts always` 或 `/tts voice_only`
|
||
|
||
---
|
||
|
||
## 图片与文件回传
|
||
|
||
当 Agent 在本地生成了图片、PDF、日志包、报表等文件,需要把结果直接发回当前聊天时,可以使用 `cc-connect send` 的附件模式。
|
||
|
||
**当前支持平台:**
|
||
- 飞书
|
||
- Telegram
|
||
|
||
### 什么时候需要先执行 setup
|
||
|
||
如果当前 Agent 不是“原生 system prompt 注入”类型,升级到包含该功能的版本后,建议先在聊天里执行一次:
|
||
|
||
```text
|
||
/bind setup
|
||
```
|
||
|
||
或者:
|
||
|
||
```text
|
||
/cron setup
|
||
```
|
||
|
||
这两个命令写入的是同一份 cc-connect 指令。执行任意一个即可。这样 Agent 才会知道:
|
||
- 普通文本回复直接正常输出
|
||
- 生成附件后用 `cc-connect send --image/--file` 回传
|
||
|
||
如果你以前已经执行过 setup,也建议升级后重新执行一次,以刷新到最新指令。
|
||
|
||
### 配置开关
|
||
|
||
如果你想禁用 agent 主动回传附件,可以在 `config.toml` 里加入:
|
||
|
||
```toml
|
||
attachment_send = "off"
|
||
```
|
||
|
||
默认值是 `on`。这个开关与 agent 的 `/mode` 独立,只影响 `cc-connect send --image/--file` 这条图片/文件回传路径。
|
||
|
||
### CLI 用法
|
||
|
||
```bash
|
||
cc-connect send --image /absolute/path/to/chart.png
|
||
cc-connect send --file /absolute/path/to/report.pdf
|
||
cc-connect send --file /absolute/path/to/report.pdf --image /absolute/path/to/chart.png
|
||
```
|
||
|
||
说明:
|
||
- `--image` 用于图片附件。
|
||
- `--file` 用于任意文件附件。
|
||
- `--message` 可选,用于先发一段说明文字,再发附件。
|
||
- `--image` 和 `--file` 都可以重复多次。
|
||
- 建议使用绝对路径,避免 Agent 当前工作目录变化导致找不到文件。
|
||
- 如果设置了 `attachment_send = "off"`,图片/文件回传会被拒绝,但普通文本回复仍然正常。
|
||
|
||
### 典型场景
|
||
|
||
1. Agent 生成了截图或图表,需要直接发给用户。
|
||
2. Agent 生成了 PDF、Markdown 导出、日志包或补丁文件,需要作为附件交付。
|
||
3. Agent 想告诉用户“结果已生成”,同时附上一个或多个文件。
|
||
|
||
### 注意事项
|
||
|
||
- 这个命令是给“附件回传”用的,不要拿它代替普通文本回复。
|
||
- 只能发送本机上 Agent 可访问到的文件。
|
||
- 必须存在活跃会话;如果当前项目没有活动聊天上下文,命令会失败。
|
||
- 平台本身仍可能有文件大小或文件类型限制。
|
||
|
||
---
|
||
|
||
## 定时任务 (Cron)
|
||
|
||
创建自动执行的定时任务。
|
||
|
||
### 聊天命令
|
||
|
||
```
|
||
/cron 列出所有任务
|
||
/cron add <分> <时> <日> <月> <周> <任务描述> 创建任务
|
||
/cron del <id> 删除任务
|
||
/cron enable <id> 启用
|
||
/cron disable <id> 禁用
|
||
```
|
||
|
||
示例:
|
||
```
|
||
/cron add 0 6 * * * 帮我收集 GitHub trending 并总结
|
||
```
|
||
|
||
### CLI 命令
|
||
|
||
```bash
|
||
cc-connect cron add --cron "0 6 * * *" --prompt "总结 GitHub trending" --desc "每日趋势"
|
||
cc-connect cron list
|
||
cc-connect cron edit <job-id> <field> <value> # 可改 cron_expr / prompt / enabled / mute / timeout_mins 等
|
||
cc-connect cron del <job-id>
|
||
```
|
||
|
||
可选:`--session-mode new-per-run` 每次触发使用新的 agent 会话(默认 `reuse` 与旧行为一致)。`--timeout-mins N` 设置单次调度最长等待分钟数(`0` 表示不限制;省略为 30 分钟)。
|
||
|
||
### 自然语言(Claude Code)
|
||
|
||
> "每天早上6点帮我总结 GitHub trending"
|
||
|
||
Claude Code 会自动创建定时任务。对依赖记忆文件的其他 Agent,先执行一次 `/cron setup` 或 `/bind setup`,效果相同。
|
||
|
||
---
|
||
|
||
## 多机器人中继
|
||
|
||
跨平台机器人通信,群聊多机器人协作。
|
||
|
||
### 群聊绑定
|
||
|
||
```
|
||
/bind 查看绑定
|
||
/bind claudecode 添加 claudecode 项目
|
||
/bind gemini 添加 gemini 项目
|
||
/bind -claudecode 移除 claudecode
|
||
```
|
||
|
||
### 机器人间通信
|
||
|
||
```bash
|
||
cc-connect relay send --to gemini "你觉得这个架构怎么样?"
|
||
```
|
||
|
||
---
|
||
|
||
## 守护进程模式
|
||
|
||
后台服务运行。
|
||
|
||
```bash
|
||
cc-connect daemon install --config ~/.cc-connect/config.toml
|
||
cc-connect daemon start
|
||
cc-connect daemon stop
|
||
cc-connect daemon restart
|
||
cc-connect daemon status
|
||
cc-connect daemon logs [-f]
|
||
cc-connect daemon uninstall
|
||
```
|
||
|
||
---
|
||
|
||
## 多工作区模式
|
||
|
||
一个 bot 服务多个工作区,每个频道一个独立工作目录。
|
||
|
||
### 配置
|
||
|
||
```toml
|
||
[[projects]]
|
||
name = "my-project"
|
||
mode = "multi-workspace"
|
||
base_dir = "~/workspaces"
|
||
|
||
[projects.agent]
|
||
type = "claudecode"
|
||
```
|
||
|
||
### 命令
|
||
|
||
```
|
||
/workspace 查看当前绑定
|
||
/workspace bind <名称> 绑定本地文件夹
|
||
/workspace init <git-url> 克隆仓库并绑定
|
||
/workspace unbind 解除绑定
|
||
/workspace list 列出所有绑定
|
||
```
|
||
|
||
### 工作原理
|
||
|
||
- 频道名 `#project-a` → 自动绑定 `base_dir/project-a/`
|
||
- 每个频道有独立的会话和 Agent 状态
|
||
|
||
---
|
||
|
||
## Web 管理后台(Beta)
|
||
|
||
> **状态:Beta。** 此功能自 v1.2.2-beta.5 起可用,UI 和 API 在后续版本中可能调整。
|
||
|
||
内嵌在二进制中的全功能管理界面,支持项目管理、会话管理、定时任务编辑、全局设置、聊天界面、多语言等。
|
||
|
||
### 快速启用(聊天命令)
|
||
|
||
最简单的方式,在聊天中发送:
|
||
|
||
```
|
||
/web setup
|
||
```
|
||
|
||
该命令会自动在 `config.toml` 中启用 **Management API** 和 **Bridge**,生成 token,并返回访问地址。首次启用后需要执行 `/restart` 使配置生效。
|
||
|
||
启用后,打开返回的地址(默认 `http://localhost:9820`),用显示的 token 登录即可。
|
||
|
||
### 查看状态
|
||
|
||
```
|
||
/web # 或 /web status — 查看 Web 管理后台的地址和启用状态
|
||
```
|
||
|
||
### 手动配置
|
||
|
||
在 `config.toml` 中添加:
|
||
|
||
```toml
|
||
[management]
|
||
enabled = true
|
||
port = 9820 # 管理后台监听端口
|
||
token = "your-secret-token" # 登录 token;/web setup 会自动生成
|
||
cors_origins = ["*"] # 允许的 CORS 来源;留空则不设置 CORS 头
|
||
```
|
||
|
||
然后重启 cc-connect。
|
||
|
||
### 构建选项
|
||
|
||
Web 前端资源默认编译进二进制。如果想排除(减小约 1MB):
|
||
|
||
```bash
|
||
make build-noweb
|
||
# 或
|
||
go build -tags 'no_web' ./cmd/cc-connect
|
||
```
|
||
|
||
使用 `no_web` 构建时,`/web` 命令会提示 Web 管理后台不可用。
|
||
|
||
### Management API
|
||
|
||
API 与 Web UI 共用同一端口。基础 URL:`http://<host>:<port>/api/v1`
|
||
|
||
所有 API 请求需要 `Authorization: Bearer <token>` 请求头。
|
||
|
||
主要接口:
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| `GET` | `/api/v1/status` | 系统状态(版本、运行时间、已连接平台) |
|
||
| `POST` | `/api/v1/restart` | 重启 cc-connect |
|
||
| `POST` | `/api/v1/reload` | 重新加载配置 |
|
||
| `GET` | `/api/v1/projects` | 项目列表 |
|
||
| `GET` | `/api/v1/sessions?project=<name>` | 查询项目的会话列表 |
|
||
| `GET` | `/api/v1/cron` | 定时任务列表 |
|
||
| `GET` | `/api/v1/settings` | 获取全局设置 |
|
||
| `PATCH` | `/api/v1/settings` | 更新全局设置 |
|
||
|
||
完整 API 参考:[management-api.md](./management-api.md)([中文版](./management-api.zh-CN.md))
|
||
|
||
---
|
||
|
||
## Bridge — 外部适配器接入(Beta)
|
||
|
||
> **状态:Beta。** 此功能自 v1.2.2-beta.5 起可用,协议在后续版本中可能调整。
|
||
|
||
Bridge 提供 WebSocket + REST 服务,让外部适配器(自定义 UI、机器人、脚本等)可以接入 cc-connect —— 发送消息、接收 Agent 事件、管理会话。
|
||
|
||
### 通过聊天启用
|
||
|
||
`/web setup` 命令会同时启用 Bridge 和管理后台,无需额外操作。
|
||
|
||
### 手动配置
|
||
|
||
在 `config.toml` 中添加:
|
||
|
||
```toml
|
||
[bridge]
|
||
enabled = true
|
||
port = 9810 # Bridge 监听端口(与管理后台分开)
|
||
token = "your-bridge-secret" # WebSocket 和 REST 的认证 token
|
||
path = "/bridge/ws" # WebSocket 端点路径
|
||
cors_origins = ["*"] # 允许的 CORS 来源;留空则不设置 CORS
|
||
```
|
||
|
||
然后重启 cc-connect。
|
||
|
||
### 认证方式
|
||
|
||
所有 Bridge 连接需要 token 认证,支持三种方式:
|
||
|
||
- URL 参数:`?token=<bridge-token>`
|
||
- 请求头:`Authorization: Bearer <bridge-token>`
|
||
- 请求头:`X-Bridge-Token: <bridge-token>`
|
||
|
||
### WebSocket 接入
|
||
|
||
连接地址:
|
||
|
||
```
|
||
ws://<host>:<bridge-port>/bridge/ws?token=<bridge-token>
|
||
```
|
||
|
||
WebSocket 支持双向通信 —— 向 Agent 发送消息,并实时接收 Agent 的文本回复、工具调用、权限请求等事件。
|
||
|
||
### REST API
|
||
|
||
与 WebSocket 共用同一端口。
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| `GET` | `/bridge/sessions?session_key=...&project=...` | 查询会话列表 |
|
||
| `POST` | `/bridge/sessions` | 创建新会话 |
|
||
| `GET` | `/bridge/sessions/{id}?session_key=...&project=...` | 获取会话详情及历史 |
|
||
| `DELETE` | `/bridge/sessions/{id}?session_key=...&project=...` | 删除会话 |
|
||
| `POST` | `/bridge/sessions/switch` | 切换当前活跃会话 |
|
||
|
||
完整协议参考:[bridge-protocol.md](./bridge-protocol.md)([中文版](./bridge-protocol.zh-CN.md))
|
||
|
||
### 端口汇总
|
||
|
||
| 服务 | 默认端口 | 配置块 |
|
||
|------|---------|--------|
|
||
| 管理后台(Web UI + API) | 9820 | `[management]` |
|
||
| Bridge(WebSocket + REST) | 9810 | `[bridge]` |
|
||
|
||
---
|
||
|
||
## 配置参考
|
||
|
||
完整配置示例见 [config.example.toml](../config.example.toml)。
|
||
|
||
### 项目结构
|
||
|
||
```toml
|
||
[[projects]]
|
||
name = "my-project"
|
||
|
||
[projects.agent]
|
||
type = "claudecode" # 或 codex, cursor, gemini, qoder, opencode, iflow
|
||
|
||
[projects.agent.options]
|
||
work_dir = "/path/to/project"
|
||
mode = "default"
|
||
provider = "anthropic"
|
||
|
||
[[projects.platforms]]
|
||
type = "feishu" # 或 wps-xiezuo, dingtalk, telegram, slack, discord, wecom, weixin, line, qq, qqbot
|
||
|
||
[projects.platforms.options]
|
||
# 平台特定配置
|
||
```
|