[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K2VYEEDXQMZ7VCS7BY58YR":3,"skill-same:01M6K2VYEEDXQMZ7VCS7BY58YR":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":47,"ownerHtmlUrl":48,"ownerBlogUrl":47,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6K2VYEEDXQMZ7VCS7BY58YR","qwenpaw-usage",null,"QwenPaw 命令行使用技巧：涵盖心跳（Heartbeat）配置、定时任务管理、Docker 打包部署、工作区导出迁移等操作。当用户要求添加心跳任务、配置定时自检、打包 QwenPaw 实例、部署到其他服务器、生成 Dockerfile 或 docker-compose 文件时使用本 skill。","agentic-os-org\u002FANOLISA","agentic-os-org","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F326861446?v=4","01M6K2QGJPXKNJFSPNB3FYW1R3","Agentic OS","01M6K2QGQ6W3S1A9J9DR1G88NZ",662,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fai\u002Fqwenpaw-usage\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34],"usage","qwenpaw usage","docker","dockerfile","生成","heartbeat","compose","docker-compose","定时","文件","qwenpaw","2026-11-10 10:12:30",false,"---\nname: qwenpaw-usage\ndescription: \"QwenPaw 命令行使用技巧：涵盖心跳（Heartbeat）配置、定时任务管理、Docker 打包部署、工作区导出迁移等操作。当用户要求添加心跳任务、配置定时自检、打包 QwenPaw 实例、部署到其他服务器、生成 Dockerfile 或 docker-compose 文件时使用本 skill。\"\nversion: 1.0.0\ntags: [\"qwenpaw\"]\n---\n# QwenPaw 命令行使用技巧\n\n本 Skill 覆盖两类高频场景：**心跳（Heartbeat）任务配置** 和 **打包部署 QwenPaw 实例到其他服务器**。\n\n---\n\n## 场景一：添加 \u002F 修改心跳（Heartbeat）任务\n\n### 什么是心跳\n\n心跳是 QwenPaw 的定时自检机制：按固定间隔读取 `HEARTBEAT.md` 的内容作为用户消息发给 QwenPaw，QwenPaw 执行后可选择将回复投递到上次对话的频道。适合做「定期自检、每日摘要、定时提醒」。\n\n### 操作步骤\n\n**1. 编写 HEARTBEAT.md**\n\n文件位于工作目录下，默认路径：`~\u002F.qwenpaw\u002FHEARTBEAT.md`。\n可通过环境变量 `QWENPAW_HEARTBEAT_FILE` 更改文件名。\n\n直接用文本编辑器或 `cat` \u002F `echo` 写入即可，内容是每次心跳要问 QwenPaw 的问题：\n\n```markdown\n# Heartbeat checklist\n\n- 扫描收件箱紧急邮件\n- 查看未来 2h 的日历\n- 检查待办是否卡住\n- 若安静超过 8h，轻量 check-in\n```\n\n> 文件为空则跳过心跳，不会触发任何操作。\n\n**2. 配置心跳参数**\n\n心跳参数有两层配置：\n\n- **全局默认**：`~\u002F.qwenpaw\u002Fconfig.json` → `agents.defaults.heartbeat`（对所有智能体生效）\n- **智能体独立**：`~\u002F.qwenpaw\u002Fworkspaces\u002F{agent_id}\u002Fagent.json` → `heartbeat`（覆盖全局默认）\n\n可用字段：\n\n| 字段                  | 类型        | 默认值      | 说明                                                        |\n| --------------------- | ----------- | ----------- | ----------------------------------------------------------- |\n| `every`             | string      | `\"30m\"`   | 间隔，支持 `Nh`、`Nm`、`Ns` 组合（如 `\"1h30m\"`）    |\n| `target`            | string      | `\"main\"`  | `\"main\"` 仅执行不投递；`\"last\"` 发到上次对话的频道\u002F用户 |\n| `activeHours`       | object\u002Fnull | `null`    | 可选活跃时段限制                                            |\n| `activeHours.start` | string      | `\"08:00\"` | 开始时间（HH:MM）                                           |\n| `activeHours.end`   | string      | `\"22:00\"` | 结束时间（HH:MM）                                           |\n\n配置示例（每 30 分钟自检，不发到频道，写在 config.json 中）：\n\n```json\n\"agents\": {\n  \"defaults\": {\n    \"heartbeat\": {\n      \"every\": \"30m\",\n      \"target\": \"main\"\n    }\n  }\n}\n```\n\n配置示例（每 1 小时，发到上次频道，限 08:00-22:00，写在 agent.json 中）：\n\n```json\n\"heartbeat\": {\n  \"every\": \"1h\",\n  \"target\": \"last\",\n  \"activeHours\": { \"start\": \"08:00\", \"end\": \"22:00\" }\n}\n```\n\n**3. 生效方式**\n\n保存文件后，若服务正在运行会自动加载新配置。也可通过以下命令手动重载：\n\n```bash\nqwenpaw daemon reload-config\n```\n\n> 注意：频道和 MCP 配置的变更需要在对话中执行 `\u002Fdaemon restart` 或重启进程后才能生效。\n\n### 心跳 vs 定时任务\n\n|      | 心跳                                       | 定时任务 (cron)              |\n| ---- | ------------------------------------------ | ---------------------------- |\n| 数量 | 每个智能体只有一份 HEARTBEAT.md            | 可创建多个                   |\n| 间隔 | 一个全局间隔                               | 每个任务独立 cron 表达式     |\n| 投递 | 仅 `main`（不发）或 `last`（上次频道） | 每个任务独立指定频道和用户   |\n| 适用 | 固定的一套自检\u002F摘要                        | 多条不同时间、不同内容的任务 |\n\n> 如果用户需要的是「每天 9 点发早安到钉钉」「每 2 小时检查待办发到飞书」这类多条独立任务，应引导使用 `qwenpaw cron create`（参见下方定时任务部分），而非心跳。\n\n### 完整操作示例\n\n用户说：「帮我添加一个 heartbeat 任务，每小时检查一下有没有新邮件，如果有就通知我」\n\n执行步骤：\n\n```bash\n# 1. 写入心跳内容\ncat > ~\u002F.qwenpaw\u002FHEARTBEAT.md \u003C\u003C 'EOF'\n# 心跳任务\n\n- 检查收件箱是否有新邮件\n- 如果有新的未读邮件，列出发件人和主题\n- 如果有紧急邮件，标注提醒\nEOF\n\n# 2. 编辑 agent.json 中的 heartbeat 配置\n# 将 heartbeat 设为：\n# {\n#   \"every\": \"1h\",\n#   \"target\": \"last\",\n#   \"activeHours\": { \"start\": \"08:00\", \"end\": \"22:00\" }\n# }\n\n# 3. 重载配置\nqwenpaw daemon reload-config\n```\n\n---\n\n## 补充：定时任务（Cron）快速参考\n\n当用户需要多条定时任务时，使用 `qwenpaw cron` 命令（需服务运行中）：\n\n```bash\n# 创建 agent 类型任务（向 QwenPaw 提问并发结果到频道）\nqwenpaw cron create \\\n  --type agent \\\n  --name \"检查邮件\" \\\n  --cron \"0 *\u002F1 * * *\" \\\n  --channel dingtalk \\\n  --target-user \"USER_ID\" \\\n  --target-session \"SESSION_ID\" \\\n  --text \"检查收件箱有没有新邮件，如果有列出来\"\n\n# 创建 text 类型任务（定时发固定文案）\nqwenpaw cron create \\\n  --type text \\\n  --name \"每日早安\" \\\n  --cron \"0 9 * * *\" \\\n  --channel dingtalk \\\n  --target-user \"USER_ID\" \\\n  --target-session \"SESSION_ID\" \\\n  --text \"早上好！新的一天开始了！\"\n\n# 常用管理命令\nqwenpaw cron list                  # 列出所有任务\nqwenpaw cron get \u003Cjob_id>          # 查看任务配置\nqwenpaw cron state \u003Cjob_id>        # 查看运行状态\nqwenpaw cron pause \u003Cjob_id>        # 暂停任务\nqwenpaw cron resume \u003Cjob_id>       # 恢复任务\nqwenpaw cron run \u003Cjob_id>          # 立刻执行一次\nqwenpaw cron delete \u003Cjob_id>       # 删除任务\n\n# 从 JSON 文件创建（复杂配置）\nqwenpaw cron create -f job_spec.json\n```\n\n可选参数：`--timezone`（默认用户时区）、`--enabled\u002F--no-enabled`、`--mode`（`stream`\u002F`final`）、`--base-url`、`--agent-id`。\n\nCron 表达式速查（五段式：分 时 日 月 周）：\n\n```\n0 9 * * *      每天 09:00\n0 *\u002F2 * * *    每 2 小时\n30 8 * * 1-5   工作日 08:30\n*\u002F15 * * * *   每 15 分钟\n0 0 * * 0      每周日零点\n```\n\n---\n\n## 场景二：打包 QwenPaw 实例部署到其他服务器\n\n### 方案概览\n\n| 方案                              | 适用场景                               | 复杂度 |\n| --------------------------------- | -------------------------------------- | ------ |\n| **工作区导出 + 官方镜像**   | 已有配置和记忆需迁移到新服务器（推荐） | 低     |\n| **docker-compose 快速部署** | 新服务器全新部署                       | 低     |\n| **自定义 Dockerfile**       | 需要定制镜像（加自定义依赖\u002F技能）      | 中     |\n\n### 方案 A：工作区导出 + 官方 Docker 镜像（推荐）\n\n最简单的方式：导出当前工作区，在新服务器上用官方镜像挂载。\n\n**步骤 1：导出当前工作区**\n\n通过控制台（智能体 -> 工作区 -> 下载）可将整个工作区下载为 `.zip` 文件。\n\n或手动打包：\n\n```bash\n# 打包工作目录（包含配置、对话、记忆、技能等）\ncd ~\u002F.qwenpaw\ntar czf qwenpaw-workspace.tar.gz \\\n  config.json \\\n  workspaces\u002F\n```\n\n**步骤 2：在新服务器创建 docker-compose.yml**\n\n```yaml\nversion: '3.8'\n\nvolumes:\n  qwenpaw-data:\n    name: qwenpaw-data\n  qwenpaw-secrets:\n    name: qwenpaw-secrets\n\nservices:\n  qwenpaw:\n    image: agentscope\u002Fqwenpaw:latest\n    container_name: qwenpaw\n    restart: always\n    ports:\n      - \"127.0.0.1:8088:8088\"\n    volumes:\n      - qwenpaw-data:\u002Fapp\u002Fworking\n      - qwenpaw-secrets:\u002Fapp\u002Fworking.secret\n    environment:\n      # 按需传入 API Key\n      - DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY}\n      # 如需连接宿主机的 Ollama\u002FLM Studio，取消下方注释\n      # - OLLAMA_BASE_URL=http:\u002F\u002Fhost.docker.internal:11434\n    # 如需连接宿主机服务，取消下方注释\n    # extra_hosts:\n    #   - \"host.docker.internal:host-gateway\"\n```\n\n> 国内用户可替换为 ACR 镜像：`agentscope-registry.ap-southeast-1.cr.aliyuncs.com\u002Fagentscope\u002Fqwenpaw:latest`\n\n**步骤 3：恢复工作区**\n\n```bash\n# 启动容器（会自动初始化默认配置）\ndocker compose up -d\n\n# 找到数据卷挂载点\nMOUNT_PATH=$(docker volume inspect qwenpaw-data --format '{{ .Mountpoint }}')\n\n# 将备份解压到数据卷\nsudo tar xzf qwenpaw-workspace.tar.gz -C \"$MOUNT_PATH\"\n\n# 重启使配置生效\ndocker compose restart\n```\n\n或在控制台中使用「上传工作区」功能恢复 `.zip` 文件（最大 100 MB）。\n\n**步骤 4：验证服务**\n\n```bash\ncurl -s http:\u002F\u002Flocalhost:8088\u002Fapi\u002Fagent\u002Fstatus | head -20\n```\n\n### 方案 B：docker-compose 全新部署\n\n适合不需要迁移旧数据的场景。\n\n```bash\n# 1. 创建 docker-compose.yml（同方案 A 的 step 2）\n\n# 2. 通过环境变量传入 API Key\necho \"DASHSCOPE_API_KEY=your-key-here\" > .env\n\n# 3. 启动\ndocker compose up -d\n\n# 4. 访问控制台完成初始化\n# 浏览器打开 http:\u002F\u002F\u003Cserver_ip>:8088\n```\n\n如需对外暴露，将 `127.0.0.1:8088:8088` 改为 `0.0.0.0:8088:8088`（注意安全风险，建议配合反向代理和认证）。\n\n### 方案 C：自定义 Dockerfile\n\n当需要在镜像中预装自定义技能、额外 Python 包或特殊系统依赖时使用。\n\n参考 Dockerfile：\n\n```dockerfile\n# 基于官方镜像\nFROM agentscope\u002Fqwenpaw:latest\n\n# 预装额外 Python 包\nRUN pip install --no-cache-dir some-package another-package\n\n# 复制自定义技能\nCOPY my_skills\u002F \u002Fapp\u002Fworking\u002Fcustomized_skills\u002F\n\n# 复制自定义配置（可选）\n# COPY config.json \u002Fapp\u002Fworking\u002Fconfig.json\n\n# 如需更改默认端口\n# ENV QWENPAW_PORT=3000\n# EXPOSE 3000\n```\n\n构建并运行：\n\n```bash\ndocker build -t my-qwenpaw .\ndocker run -d \\\n  --name qwenpaw \\\n  --restart always \\\n  -p 127.0.0.1:8088:8088 \\\n  -v qwenpaw-data:\u002Fapp\u002Fworking \\\n  -v qwenpaw-secrets:\u002Fapp\u002Fworking.secret \\\n  -e DASHSCOPE_API_KEY=\"your-key\" \\\n  my-qwenpaw\n```\n\n### Docker 部署关键参数\n\n| 环境变量                   | 默认值                                          | 说明               |\n| -------------------------- | ----------------------------------------------- | ------------------ |\n| `QWENPAW_WORKING_DIR`      | `\u002Fapp\u002Fworking`                                | 工作目录（容器内） |\n| `QWENPAW_SECRET_DIR`       | `\u002Fapp\u002Fworking.secret`                         | 敏感数据目录       |\n| `QWENPAW_PORT`             | `8088`                                        | 服务端口           |\n| `QWENPAW_ENABLED_CHANNELS` | `discord,telegram,dingtalk,feishu,qq,console` | 启用的频道         |\n\n### Docker 中连接本机模型服务\n\n容器内 `localhost` 指向容器自身，需使用 `host.docker.internal`：\n\n```bash\ndocker run ... \\\n  --add-host=host.docker.internal:host-gateway \\\n  -e OLLAMA_BASE_URL=http:\u002F\u002Fhost.docker.internal:11434 \\\n  agentscope\u002Fqwenpaw:latest\n```\n\n---\n\n## 使用建议\n\n- 用户描述模糊时，先询问确认：是要心跳（单一自检循环）还是定时任务（多条独立任务）？是要迁移现有实例还是全新部署？\n- 涉及 API Key 等敏感信息时，引导用户使用环境变量或 `qwenpaw env set` 命令，不要在配置文件中明文写入。\n- 多智能体场景下，几乎所有命令支持 `--agent-id` 参数，默认为 `default`。\n- 配置修改后可用 `qwenpaw daemon reload-config` 热加载，无需重启服务。\n","# QwenPaw 命令行使用技巧\n\n本 Skill 覆盖两类高频场景：**心跳（Heartbeat）任务配置** 和 **打包部署 QwenPaw 实例到其他服务器**。\n\n---\n\n## 场景一：添加 \u002F 修改心跳（Heartbeat）任务\n\n### 什么是心跳\n\n心跳是 QwenPaw 的定时自检机制：按固定间隔读取 `HEARTBEAT.md` 的内容作为用户消息发给 QwenPaw，QwenPaw 执行后可选择将回复投递到上次对话的频道。适合做「定期自检、每日摘要、定时提醒」。\n\n### 操作步骤\n\n**1. 编写 HEARTBEAT.md**\n\n文件位于工作目录下，默认路径：`~\u002F.qwenpaw\u002FHEARTBEAT.md`。\n可通过环境变量 `QWENPAW_HEARTBEAT_FILE` 更改文件名。\n\n直接用文本编辑器或 `cat` \u002F `echo` 写入即可，内容是每次心跳要问 QwenPaw 的问题：\n\n```markdown\n# Heartbeat checklist\n\n- 扫描收件箱紧急邮件\n- 查看未来 2h 的日历\n- 检查待办是否卡住\n- 若安静超过 8h，轻量 check-in\n```\n\n> 文件为空则跳过心跳，不会触发任何操作。\n\n**2. 配置心跳参数**\n\n心跳参数有两层配置：\n\n- **全局默认**：`~\u002F.qwenpaw\u002Fconfig.json` → `agents.defaults.heartbeat`（对所有智能体生效）\n- **智能体独立**：`~\u002F.qwenpaw\u002Fworkspaces\u002F{agent_id}\u002Fagent.json` → `heartbeat`（覆盖全局默认）\n\n可用字段：\n\n| 字段                  | 类型        | 默认值      | 说明                                                        |\n| --------------------- | ----------- | ----------- | ----------------------------------------------------------- |\n| `every`             | string      | `\"30m\"`   | 间隔，支持 `Nh`、`Nm`、`Ns` 组合（如 `\"1h30m\"`）    |\n| `target`            | string      | `\"main\"`  | `\"main\"` 仅执行不投递；`\"last\"` 发到上次对话的频道\u002F用户 |\n| `activeHours`       | object\u002Fnull | `null`    | 可选活跃时段限制                                            |\n| `activeHours.start` | string      | `\"08:00\"` | 开始时间（HH:MM）                                           |\n| `activeHours.end`   | string      | `\"22:00\"` | 结束时间（HH:MM）                                           |\n\n配置示例（每 30 分钟自检，不发到频道，写在 config.json 中）：\n\n```json\n\"agents\": {\n  \"defaults\": {\n    \"heartbeat\": {\n      \"every\": \"30m\",\n      \"target\": \"main\"\n    }\n  }\n}\n```\n\n配置示例（每 1 小时，发到上次频道，限 08:00-22:00，写在 agent.json 中）：\n\n```json\n\"heartbeat\": {\n  \"every\": \"1h\",\n  \"target\": \"last\",\n  \"activeHours\": { \"start\": \"08:00\", \"end\": \"22:00\" }\n}\n```\n\n**3. 生效方式**\n\n保存文件后，若服务正在运行会自动加载新配置。也可通过以下命令手动重载：\n\n```bash\nqwenpaw daemon reload-config\n```\n\n> 注意：频道和 MCP 配置的变更需要在对话中执行 `\u002Fdaemon restart` 或重启进程后才能生效。\n\n### 心跳 vs 定时任务\n\n|      | 心跳                                       | 定时任务 (cron)              |\n| ---- | ------------------------------------------ | ---------------------------- |\n| 数量 | 每个智能体只有一份 HEARTBEAT.md            | 可创建多个                   |\n| 间隔 | 一个全局间隔                               | 每个任务独立 cron 表达式     |\n| 投递 | 仅 `main`（不发）或 `last`（上次频道） | 每个任务独立指定频道和用户   |\n| 适用 | 固定的一套自检\u002F摘要                        | 多条不同时间、不同内容的任务 |\n\n> 如果用户需要的是「每天 9 点发早安到钉钉」「每 2 小时检查待办发到飞书」这类多条独立任务，应引导使用 `qwenpaw cron create`（参见下方定时任务部分），而非心跳。\n\n### 完整操作示例\n\n用户说：「帮我添加一个 heartbeat 任务，每小时检查一下有没有新邮件，如果有就通知我」\n\n执行步骤：\n\n```bash\n# 1. 写入心跳内容\ncat > ~\u002F.qwenpaw\u002FHEARTBEAT.md \u003C\u003C 'EOF'\n# 心跳任务\n\n- 检查收件箱是否有新邮件\n- 如果有新的未读邮件，列出发件人和主题\n- 如果有紧急邮件，标注提醒\nEOF\n\n# 2. 编辑 agent.json 中的 heartbeat 配置\n# 将 heartbeat 设为：\n# {\n#   \"every\": \"1h\",\n#   \"target\": \"last\",\n#   \"activeHours\": { \"start\": \"08:00\", \"end\": \"22:00\" }\n# }\n\n# 3. 重载配置\nqwenpaw daemon reload-config\n```\n\n---\n\n## 补充：定时任务（Cron）快速参考\n\n当用户需要多条定时任务时，使用 `qwenpaw cron` 命令（需服务运行中）：\n\n```bash\n# 创建 agent 类型任务（向 QwenPaw 提问并发结果到频道）\nqwenpaw cron create \\\n  --type agent \\\n  --name \"检查邮件\" \\\n  --cron \"0 *\u002F1 * * *\" \\\n  --channel dingtalk \\\n  --target-user \"USER_ID\" \\\n  --target-session \"SESSION_ID\" \\\n  --text \"检查收件箱有没有新邮件，如果有列出来\"\n\n# 创建 text 类型任务（定时发固定文案）\nqwenpaw cron create \\\n  --type text \\\n  --name \"每日早安\" \\\n  --cron \"0 9 * * *\" \\\n  --channel dingtalk \\\n  --target-user \"USER_ID\" \\\n  --target-session \"SESSION_ID\" \\\n  --text \"早上好！新的一天开始了！\"\n\n# 常用管理命令\nqwenpaw cron list                  # 列出所有任务\nqwenpaw cron get \u003Cjob_id>          # 查看任务配置\nqwenpaw cron state \u003Cjob_id>        # 查看运行状态\nqwenpaw cron pause \u003Cjob_id>        # 暂停任务\nqwenpaw cron resume \u003Cjob_id>       # 恢复任务\nqwenpaw cron run \u003Cjob_id>          # 立刻执行一次\nqwenpaw cron delete \u003Cjob_id>       # 删除任务\n\n# 从 JSON 文件创建（复杂配置）\nqwenpaw cron create -f job_spec.json\n```\n\n可选参数：`--timezone`（默认用户时区）、`--enabled\u002F--no-enabled`、`--mode`（`stream`\u002F`final`）、`--base-url`、`--agent-id`。\n\nCron 表达式速查（五段式：分 时 日 月 周）：\n\n```\n0 9 * * *      每天 09:00\n0 *\u002F2 * * *    每 2 小时\n30 8 * * 1-5   工作日 08:30\n*\u002F15 * * * *   每 15 分钟\n0 0 * * 0      每周日零点\n```\n\n---\n\n## 场景二：打包 QwenPaw 实例部署到其他服务器\n\n### 方案概览\n\n| 方案                              | 适用场景                               | 复杂度 |\n| --------------------------------- | -------------------------------------- | ------ |\n| **工作区导出 + 官方镜像**   | 已有配置和记忆需迁移到新服务器（推荐） | 低     |\n| **docker-compose 快速部署** | 新服务器全新部署                       | 低     |\n| **自定义 Dockerfile**       | 需要定制镜像（加自定义依赖\u002F技能）      | 中     |\n\n### 方案 A：工作区导出 + 官方 Docker 镜像（推荐）\n\n最简单的方式：导出当前工作区，在新服务器上用官方镜像挂载。\n\n**步骤 1：导出当前工作区**\n\n通过控制台（智能体 -> 工作区 -> 下载）可将整个工作区下载为 `.zip` 文件。\n\n或手动打包：\n\n```bash\n# 打包工作目录（包含配置、对话、记忆、技能等）\ncd ~\u002F.qwenpaw\ntar czf qwenpaw-workspace.tar.gz \\\n  config.json \\\n  workspaces\u002F\n```\n\n**步骤 2：在新服务器创建 docker-compose.yml**\n\n```yaml\nversion: '3.8'\n\nvolumes:\n  qwenpaw-data:\n    name: qwenpaw-data\n  qwenpaw-secrets:\n    name: qwenpaw-secrets\n\nservices:\n  qwenpaw:\n    image: agentscope\u002Fqwenpaw:latest\n    container_name: qwenpaw\n    restart: always\n    ports:\n      - \"127.0.0.1:8088:8088\"\n    volumes:\n      - qwenpaw-data:\u002Fapp\u002Fworking\n      - qwenpaw-secrets:\u002Fapp\u002Fworking.secret\n    environment:\n      # 按需传入 API Key\n      - DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY}\n      # 如需连接宿主机的 Ollama\u002FLM Studio，取消下方注释\n      # - OLLAMA_BASE_URL=http:\u002F\u002Fhost.docker.internal:11434\n    # 如需连接宿主机服务，取消下方注释\n    # extra_hosts:\n    #   - \"host.docker.internal:host-gateway\"\n```\n\n> 国内用户可替换为 ACR 镜像：`agentscope-registry.ap-southeast-1.cr.aliyuncs.com\u002Fagentscope\u002Fqwenpaw:latest`\n\n**步骤 3：恢复工作区**\n\n```bash\n# 启动容器（会自动初始化默认配置）\ndocker compose up -d\n\n# 找到数据卷挂载点\nMOUNT_PATH=$(docker volume inspect qwenpaw-data --format '{{ .Mountpoint }}')\n\n# 将备份解压到数据卷\nsudo tar xzf qwenpaw-workspace.tar.gz -C \"$MOUNT_PATH\"\n\n# 重启使配置生效\ndocker compose restart\n```\n\n或在控制台中使用「上传工作区」功能恢复 `.zip` 文件（最大 100 MB）。\n\n**步骤 4：验证服务**\n\n```bash\ncurl -s http:\u002F\u002Flocalhost:8088\u002Fapi\u002Fagent\u002Fstatus | head -20\n```\n\n### 方案 B：docker-compose 全新部署\n\n适合不需要迁移旧数据的场景。\n\n```bash\n# 1. 创建 docker-compose.yml（同方案 A 的 step 2）\n\n# 2. 通过环境变量传入 API Key\necho \"DASHSCOPE_API_KEY=your-key-here\" > .env\n\n# 3. 启动\ndocker compose up -d\n\n# 4. 访问控制台完成初始化\n# 浏览器打开 http:\u002F\u002F\u003Cserver_ip>:8088\n```\n\n如需对外暴露，将 `127.0.0.1:8088:8088` 改为 `0.0.0.0:8088:8088`（注意安全风险，建议配合反向代理和认证）。\n\n### 方案 C：自定义 Dockerfile\n\n当需要在镜像中预装自定义技能、额外 Python 包或特殊系统依赖时使用。\n\n参考 Dockerfile：\n\n```dockerfile\n# 基于官方镜像\nFROM agentscope\u002Fqwenpaw:latest\n\n# 预装额外 Python 包\nRUN pip install --no-cache-dir some-package another-package\n\n# 复制自定义技能\nCOPY my_skills\u002F \u002Fapp\u002Fworking\u002Fcustomized_skills\u002F\n\n# 复制自定义配置（可选）\n# COPY config.json \u002Fapp\u002Fworking\u002Fconfig.json\n\n# 如需更改默认端口\n# ENV QWENPAW_PORT=3000\n# EXPOSE 3000\n```\n\n构建并运行：\n\n```bash\ndocker build -t my-qwenpaw .\ndocker run -d \\\n  --name qwenpaw \\\n  --restart always \\\n  -p 127.0.0.1:8088:8088 \\\n  -v qwenpaw-data:\u002Fapp\u002Fworking \\\n  -v qwenpaw-secrets:\u002Fapp\u002Fworking.secret \\\n  -e DASHSCOPE_API_KEY=\"your-key\" \\\n  my-qwenpaw\n```\n\n### Docker 部署关键参数\n\n| 环境变量                   | 默认值                                          | 说明               |\n| -------------------------- | ----------------------------------------------- | ------------------ |\n| `QWENPAW_WORKING_DIR`      | `\u002Fapp\u002Fworking`                                | 工作目录（容器内） |\n| `QWENPAW_SECRET_DIR`       | `\u002Fapp\u002Fworking.secret`                         | 敏感数据目录       |\n| `QWENPAW_PORT`             | `8088`                                        | 服务端口           |\n| `QWENPAW_ENABLED_CHANNELS` | `discord,telegram,dingtalk,feishu,qq,console` | 启用的频道         |\n\n### Docker 中连接本机模型服务\n\n容器内 `localhost` 指向容器自身，需使用 `host.docker.internal`：\n\n```bash\ndocker run ... \\\n  --add-host=host.docker.internal:host-gateway \\\n  -e OLLAMA_BASE_URL=http:\u002F\u002Fhost.docker.internal:11434 \\\n  agentscope\u002Fqwenpaw:latest\n```\n\n---\n\n## 使用建议\n\n- 用户描述模糊时，先询问确认：是要心跳（单一自检循环）还是定时任务（多条独立任务）？是要迁移现有实例还是全新部署？\n- 涉及 API Key 等敏感信息时，引导用户使用环境变量或 `qwenpaw env set` 命令，不要在配置文件中明文写入。\n- 多智能体场景下，几乎所有命令支持 `--agent-id` 参数，默认为 `default`。\n- 配置修改后可用 `qwenpaw daemon reload-config` 热加载，无需重启服务。\n",{"name":5,"tags":40,"version":41,"description":7},[34],"1.0.0","main","d2c8a75e03a304c97d2b049d59f85c2ef0b08519","src\u002Fos-skills\u002Fai\u002Fqwenpaw-usage",193,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA","https:\u002F\u002Fagentic-os.sh\u002F","https:\u002F\u002Fgithub.com\u002Fagentic-os-org","2026-11-12 22:29:17",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add agentic-os-org\u002FANOLISA --skill qwenpaw-usage",{"tool":56,"command":57},"bunx","bunx skills add agentic-os-org\u002FANOLISA --skill qwenpaw-usage",{"tool":59,"command":60},"pnpm","pnpm dlx skills add agentic-os-org\u002FANOLISA --skill qwenpaw-usage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fai\u002Fqwenpaw-usage\u002FSKILL.md",true,[],[65,78,109,126,144,157],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":35},"01M6K30MJVPNFF4VA778AZC512","ws-ckpt","Linux 工作区快照(ws-ckpt)。用户想保存或备份工作区当前状态(\"保存一下\"、\"留个底\"、\"先备份\"), 想撤销或恢复文件改动(\"回滚\"、\"撤销\"、\"改回去\"、\"恢复到之前\"、\"刚才那版\"), 想查看、对比或删除历史版本,或要开启\u002F关闭每回合自动快照、定时快照、快照保留策略时使用。 用户没提\"快照\"、只表达保存或恢复工作区文件的意图时同样适用;用户点名 git 操作(commit、branch、reset 到某提交)时不适用。","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fws-ckpt\u002Fsrc\u002Fskills\u002Fws-ckpt\u002FSKILL.md",[],[72,73,74,75,76,77,32,33],"ws ckpt","linux","commit","git","branch","reset",{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":87,"publishedAt":35},"01M6K30G7BBZB1VCPE3NE08KZP","skillfs-mount","Help users configure, mount, and unmount a skillfs FUSE virtual filesystem on their local machine (e.g. for openclaw). Covers analyzing existing skill usage to suggest view configuration, generating skillfs-views.toml, mounting, and graceful unmount. Use this skill when the user asks to: set up skillfs, configure skill views, mount or unmount skillfs, check if skillfs is running, or get help organizing their skills directory (especially for openclaw users).","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fskillfs\u002Fdocs\u002Fskills\u002Fskillfs-mount\u002FSKILL.md",[84],{"categoryNo":85,"categoryName":86,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,24,105,106,107,108],"skillfs mount","mount","virtual","get","local","existing skill","up","use","view","filesystem","toml","configure","skill usage","SET","analyzing","openclaw","machine","for","when","running","directory",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":119,"publishedAt":35},"01M6K30CJW0X3V5PG4GP26TB63","test-skill","A test skill used in integration tests.","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fskillfs\u002Fcrates\u002Fskillfs-fuse\u002Ftests\u002Ffixtures\u002Ftest-skill\u002FSKILL.md",[115,118],{"categoryNo":116,"categoryName":117,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":85,"categoryName":86,"taxonomyType":21,"taxonomyTypeDesc":22},[120,121,122,123,124,125],"test","Test Skill","true","integration tests","integration","tests",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":35},"01M6K304VCM7N6AR4PMYNDP3A7","storage-resize","Linux 磁盘扩容技能（RPM 包管理系统），实现云盘扩容后自动完成分区调整和文件系统扩容。支持系统盘\u002F数据盘在线扩容，适配 XFS\u002FEXT4\u002FBtrfs 文件系统。适用于 RPM 包管理的 Linux 系统（如 Alibaba Cloud Linux）。","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fsystem-admin\u002Fstorage-resize\u002FSKILL.md",[],[133,134,135,73,136,137,138,139,140,33,141,142,143],"storage resize","storage","system","cloud","operations","btrfs","ecs","aliyun","rpm","alibaba","数据",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":35},"01M6K2ZJEGANYH9TGGG25H7WVF","ktuner","内核参数自动调优。分析系统配置，输出调优建议并可一键应用，支持自动回滚。使用场景：系统性能优化、安全加固、内核参数诊断。","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fsystem-admin\u002Fktuner\u002FSKILL.md",[],[146,151,152,153,154,155,156],"core","run","Production","shell","安全","command",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":163,"publishedAt":35},"01M6K2ZD5K40XCX8R1EA85MS7P","backup-restore","处理所有备份与恢复任务，覆盖四个层面：工作区（项目\u002F数据库\u002F代码）、用户数据（家目录\u002Fdotfiles\u002F密钥）、操作系统（全量系统\u002F磁盘镜像\u002FLVM 快照）、阿里云快照（云盘快照\u002F自动策略\u002F跨地域复制\u002F整机镜像）。适用于 RPM 包管理的 Linux 系统（如 Alibaba Cloud Linux）纯命令行环境，使用 yum 包管理器。当用户提到备份、恢复、快照、归档、回滚、克隆、迁移、容灾等任何涉及数据保存或恢复的请求时触发此技能，即使请求看起来很简单也应使用。","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fsystem-admin\u002Fbackup-restore\u002FSKILL.md",[],[164,165,166,136,167,168,169,141,142,170,143,171,172,73,140],"backup restore","backup","restore","beta","release","lvm","runtime","maintenance","dotfiles"]