Files
clawpal/design.md
zhixian 700c5e9ab2 feat: ClawPal v0.1 — Tauri desktop GUI for OpenClaw
4-page layout (Home, Recipes, Settings, Doctor) with sidebar nav
and integrated Chat panel powered by OpenClaw agent (--local).

- Home: status, agents overview, recommended recipes, recent activity
- Recipes: browse, preview diff, apply with params
- Settings: model profiles CRUD, chat model selection, provider catalog
- Doctor: diagnostics with auto-fix
- Chat: OpenClaw agent integration with session persistence,
  agent selector, read-only advisory context injection
- Progressive data loading to avoid UI blocking
- API key resolution from OpenClaw agent auth-profiles
- Model catalog from openclaw CLI with cache

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 01:16:38 +09:00

22 KiB
Raw Blame History

ClawPal Design Document

OpenClaw 配置助手 — 让普通用户也能玩转高级配置

1. 产品定位

问题

  • OpenClaw 配置功能强大但复杂
  • 官方 Web UI 是"配置项罗列",用户看晕
  • 用户让 Agent 自己配置,经常出错
  • 配置出错时 Gateway 起不来,陷入死循环

解决方案

场景驱动的配置助手

  • 不是"列出所有配置项",而是"你想实现什么场景?"
  • 用户选场景 → 填几个参数 → 一键应用
  • 独立运行,不依赖 Gateway配置坏了也能修

核心价值

  1. 降低门槛 — 普通用户也能用上高级功能
  2. 最佳实践 — 社区沉淀的配置方案,一键安装
  3. 急救工具 — 配置出问题时的救命稻草
  4. 版本控制 — 改坏了一键回滚

2. 产品架构

┌─────────────────────────────────────────────────────────┐
│                    clawpal.dev (官网)                    │
│                                                         │
│   ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐   │
│   │ Recipe  │  │ Recipe  │  │ Recipe  │  │ Recipe  │   │
│   │  Card   │  │  Card   │  │  Card   │  │  Card   │   │
│   └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘   │
│        │            │            │            │         │
│        └────────────┴─────┬──────┴────────────┘         │
│                           │                             │
│                    [一键安装按钮]                         │
│                           │                             │
└───────────────────────────┼─────────────────────────────┘
                            │
                            │ clawpal://install/recipe-id
                            ▼
┌─────────────────────────────────────────────────────────┐
│                 ClawPal App (本地)                       │
│                                                         │
│   ┌──────────────────────────────────────────────────┐  │
│   │                   首页                            │  │
│   │  ┌─────────┐  当前配置健康状态: ✅ 正常           │  │
│   │  │  状态   │  OpenClaw 版本: 2026.2.13           │  │
│   │  │  卡片   │  活跃 Agents: 4                     │  │
│   │  └─────────┘                                     │  │
│   └──────────────────────────────────────────────────┘  │
│                                                         │
│   ┌──────────────────────────────────────────────────┐  │
│   │                  场景库                           │  │
│   │  ┌─────────┐  ┌─────────┐  ┌─────────┐          │  │
│   │  │ Discord │  │ Telegram│  │  模型   │          │  │
│   │  │ 人设    │  │ 配置    │  │  切换   │          │  │
│   │  └─────────┘  └─────────┘  └─────────┘          │  │
│   └──────────────────────────────────────────────────┘  │
│                                                         │
│   ┌──────────────────────────────────────────────────┐  │
│   │                 历史记录                          │  │
│   │  ● 2026-02-15 21:30 应用了 "Discord 人设"        │  │
│   │  ● 2026-02-15 20:00 手动编辑                     │  │
│   │  ● 2026-02-14 15:00 应用了 "性能优化"            │  │
│   │                              [回滚到此版本]        │  │
│   └──────────────────────────────────────────────────┘  │
│                                                         │
└──────────────────────────┬──────────────────────────────┘
                           │
                           │ 直接读写(不依赖 Gateway
                           ▼
                 ~/.openclaw/openclaw.json

3. 核心功能

3.1 场景库 (Recipes)

每个 Recipe 是一个"配置方案",包含:

  • 标题、描述、标签
  • 需要用户填的参数
  • 配置补丁模板

示例 RecipeDiscord 频道专属人设

id: discord-channel-persona
name: "Discord 频道专属人设"
description: "给特定 Discord 频道注入专属 system prompt让 Agent 在不同频道表现不同"
author: "zhixian"
version: "1.0.0"
tags: ["discord", "persona", "beginner"]
difficulty: "easy"

# 用户需要填的参数
params:
  - id: guild_id
    label: "服务器 ID"
    type: string
    placeholder: "右键服务器 → 复制服务器 ID"
    
  - id: channel_id
    label: "频道 ID"
    type: string
    placeholder: "右键频道 → 复制频道 ID"
    
  - id: persona
    label: "人设描述"
    type: textarea
    placeholder: "在这个频道里,你是一个..."

# 配置补丁JSON Merge Patch 格式)
patch: |
  {
    "channels": {
      "discord": {
        "guilds": {
          "{{guild_id}}": {
            "channels": {
              "{{channel_id}}": {
                "systemPrompt": "{{persona}}"
              }
            }
          }
        }
      }
    }
  }

3.2 引导式安装流程

[选择场景] → [填写参数] → [预览变更] → [确认应用] → [完成]
     │            │            │            │
     │            │            │            └── 自动备份当前配置
     │            │            └── Diff 视图,清晰展示改了什么
     │            └── 表单 + 实时校验
     └── 卡片式浏览,带搜索/筛选

3.3 版本控制 & 回滚

~/.openclaw/
├── openclaw.json              # 当前配置
└── .clawpal/
    ├── history/
    │   ├── 2026-02-15T21-30-00_discord-persona.json
    │   ├── 2026-02-15T20-00-00_manual-edit.json
    │   └── 2026-02-14T15-00-00_performance-tuning.json
    └── metadata.json          # 历史记录元数据

回滚流程

  1. 选择历史版本
  2. 展示 Diff当前 vs 目标版本)
  3. 确认回滚
  4. 当前版本也存入历史(防止误操作)

3.4 配置诊断 (Doctor)

当 Gateway 起不来时ClawPal 可以独立运行诊断:

检查项

  • JSON 语法是否正确
  • 必填字段是否存在
  • 字段类型是否正确
  • 端口是否被占用
  • 文件权限是否正确
  • Token/密钥格式是否正确

自动修复

  • 语法错误:尝试修复常见问题(尾逗号、引号)
  • 缺失字段:填充默认值
  • 格式错误:自动转换

4. 官网设计

4.1 首页

┌─────────────────────────────────────────────────────────┐
│                      ClawPal                            │
│         让 OpenClaw 配置变得简单                         │
│                                                         │
│              [下载 App]  [浏览 Recipes]                  │
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │            热门 Recipes                          │   │
│  │  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐   │   │
│  │  │ 🎭  │  │ ⚡  │  │ 🔔  │  │ 🤖  │  │ 📝  │   │   │
│  │  │人设 │  │性能 │  │提醒 │  │模型 │  │日记 │   │   │
│  │  └─────┘  └─────┘  └─────┘  └─────┘  └─────┘   │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │            提交你的 Recipe                       │   │
│  │  分享你的最佳实践,帮助更多人                      │   │
│  │                    [提交]                        │   │
│  └─────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘

4.2 Recipe 详情页

┌─────────────────────────────────────────────────────────┐
│  ← 返回                                                 │
│                                                         │
│  Discord 频道专属人设                           v1.0.0  │
│  by zhixian                                             │
│                                                         │
│  ⬇️ 1,234 安装   ⭐ 4.8 (56 评价)                       │
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │  给特定 Discord 频道注入专属 system prompt     │   │
│  │  让 Agent 在不同频道表现不同。                   │   │
│  │                                                  │   │
│  │  适用场景:                                      │   │
│  │  • 工作频道严肃,闲聊频道轻松                    │   │
│  │  • 不同频道不同语言                              │   │
│  │  • 特定频道禁用某些功能                          │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  需要填写的参数:                                       │
│  • 服务器 ID                                           │
│  • 频道 ID                                             │
│  • 人设描述                                            │
│                                                         │
│              [在 ClawPal 中安装]                        │
│                                                         │
│  ─────────────────────────────────────────────────     │
│                                                         │
│  配置预览                                               │
│  ┌─────────────────────────────────────────────────┐   │
│  │ channels:                                        │   │
│  │   discord:                                       │   │
│  │     guilds:                                      │   │
│  │       "{{guild_id}}":                           │   │
│  │         channels:                                │   │
│  │           "{{channel_id}}":                     │   │
│  │             systemPrompt: "{{persona}}"         │   │
│  └─────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘
clawpal://install/{recipe-id}
clawpal://install/{recipe-id}?source=web&version=1.0.0

App 收到 deep link 后:

  1. 下载 recipe 元数据
  2. 打开安装向导
  3. 引导用户填写参数
  4. 应用配置

5. 技术栈

5.1 本地 App

ClawPal App (Tauri)
├── src-tauri/           # Rust 后端(轻量,主要用 Tauri API
│   ├── src/
│   │   └── main.rs      # 入口 + 少量原生逻辑
│   └── tauri.conf.json  # Tauri 配置
│
└── src/                 # Web 前端
    ├── App.tsx
    ├── pages/
    │   ├── Home.tsx         # 首页 + 状态
    │   ├── Recipes.tsx      # 场景库
    │   ├── Install.tsx      # 安装向导
    │   ├── History.tsx      # 历史记录
    │   └── Doctor.tsx       # 诊断修复
    ├── components/
    │   ├── RecipeCard.tsx
    │   ├── ParamForm.tsx
    │   ├── DiffViewer.tsx
    │   └── ...
    └── lib/
        ├── config.ts        # 配置读写(用 Tauri fs API
        ├── recipe.ts        # Recipe 解析/应用
        ├── backup.ts        # 版本控制
        └── doctor.ts        # 诊断逻辑

5.2 技术选型

组件 选型 理由
App 框架 Tauri 2.0 轻量(5-10MB)JS 为主
前端框架 React + TypeScript 生态成熟
UI 组件 shadcn/ui 好看,可定制
状态管理 React Context + useReducer 先用原生,后续再引入 Zustand
配置解析 json5 支持注释
Diff 展示 monaco-editor diff 可控性强,定制成本低

5.3 RecipeEngine 核心接口

interface RecipeEngine {
  // 校验 recipe 定义 + 用户参数
  validate(recipe: Recipe, params: Record<string, unknown>): ValidationResult;
  
  // 预览变更(不实际修改)
  preview(recipe: Recipe, params: Record<string, unknown>): PreviewResult;
  
  // 应用配置(自动备份)
  apply(recipe: Recipe, params: Record<string, unknown>): ApplyResult;
  
  // 回滚到指定快照
  rollback(snapshotId: string): RollbackResult;
  
  // 从损坏状态恢复
  recover(): RecoverResult;
}

interface PreviewResult {
  diff: string;                    // 配置 Diff
  impactLevel: 'low' | 'medium' | 'high';  // 影响级别
  affectedPaths: string[];         // 受影响的配置路径
  canRollback: boolean;            // 是否可回滚
  overwritesExisting: boolean;     // 是否覆盖现有配置
  warnings: string[];              // 警告信息
}

5.3 官网

组件 选型 理由
框架 Next.js SSR/SSGSEO 友好
部署 Vercel / Cloudflare Pages 免费CDN
数据库 Supabase / PlanetScale Recipe 存储
认证 GitHub OAuth 用户提交 recipe

6. MVP 范围(精简版)

先做 3 个高价值核心功能,离线可用,快速验证

MVP 核心功能

1. 安装向导

  • 参数校验schema 验证)
  • 变更预览Diff 视图)
  • 应用配置
  • 自动备份

2. 版本快照与回滚

  • 每次修改前自动快照
  • 历史记录列表
  • 一键回滚
  • 回滚前预览 Diff

3. 配置诊断

  • JSON 语法检查
  • 必填字段验证
  • 端口占用检测
  • 文件权限检查
  • 一键修复 + 显示变更原因

MVP 不做的事

  • 官网
  • 用户系统 / OAuth
  • 评分/评论体系
  • 在线 Recipe 仓库

后续阶段

  • Phase 2: 官网 + Recipe 在线分发
  • Phase 3: 社区功能(评分、评论、用户提交)

7. 初始 Recipe 列表

MVP 内置的 Recipes

  1. Discord 频道专属人设 — 不同频道不同性格
  2. Telegram 群组配置 — 群聊 mention 规则
  3. 定时任务配置 — Heartbeat + Cron 基础设置
  4. 模型切换 — 快速切换默认模型
  5. 性能优化 — contextPruning + compaction 最佳实践

8. 风险点 & 注意事项

8.1 Schema 版本兼容

  • OpenClaw 配置 schema 会随版本变化
  • 需要锁定版本兼容层v1/v2 schema migration
  • Recipe 需标注兼容的 OpenClaw 版本范围

8.2 安全性

  • 深度链接可信源校验:防止恶意 recipe 写入本地配置
  • 敏感路径白名单:限制 recipe 可修改的配置路径
  • 危险操作提醒:涉及 token、密钥、敏感路径时 must-have 确认

8.3 平台兼容

  • Tauri 2.0 在 Windows/macOS 路径权限表现有差异
  • 需要测试不同平台的文件读写行为
  • 路径处理使用 Tauri 的跨平台 API

8.4 WSL2 支持Windows 重点)

很多 Windows 用户通过 WSL2 安装 OpenClaw配置文件在 Linux 文件系统里。

检测逻辑

  1. 检查 Windows 原生路径 %USERPROFILE%\.openclaw\
  2. 如果不存在,扫描 \\wsl$\*\home\*\.openclaw\
  3. 找到多个时让用户选择

路径映射

WSL2 路径:     /home/user/.openclaw/openclaw.json
Windows 访问:  \\wsl$\Ubuntu\home\user\.openclaw\openclaw.json

UI 处理

  • 首次启动检测安装方式
  • 设置页可手动切换/指定路径
  • 显示当前使用的路径来源Windows / WSL2-Ubuntu / 自定义)

8.5 JSON5 风格保持

  • 用户手写的注释和缩进不能被破坏
  • 写回时需保持原有格式风格
  • 考虑使用 AST 级别的修改而非 stringify

9. Recipe 校验规则

9.1 参数 Schema

params:
  - id: guild_id
    type: string
    required: true
    pattern: "^[0-9]+$"           # 正则校验
    minLength: 17
    maxLength: 20

9.2 路径白名单

# 只允许修改这些路径
allowedPaths:
  - "channels.*"
  - "agents.defaults.*"
  - "agents.list[*].identity"
  
# 禁止修改
forbiddenPaths:
  - "gateway.auth.*"              # 认证相关
  - "*.token"                     # 所有 token
  - "*.apiKey"                    # 所有 API key

9.3 危险操作标记

dangerousOperations:
  - path: "gateway.port"
    reason: "修改端口可能导致连接中断"
    requireConfirm: true
  - path: "channels.*.enabled"
    reason: "禁用频道会影响消息收发"
    requireConfirm: true

10. 体验细节

10.1 影响级别展示

安装按钮显示"预估影响级别"

级别 条件 展示
🟢 只添加新配置,不修改现有 "添加新配置"
🟡 修改现有配置,可回滚 "修改配置(可回滚)"
🔴 涉及敏感路径或大范围修改 "重要变更(请仔细检查)"

10.2 可回滚提示

每个 Recipe 显示:

  • 可回滚 / ⚠️ 部分可回滚 / 不可回滚
  • 是否会覆盖现有配置(高亮显示冲突项)

10.3 历史记录增强

  • 关键词筛选
  • 仅显示可回滚节点
  • 按 Recipe 类型分组

10.4 Doctor 一键修复

发现 2 个问题:

1. ❌ JSON 语法错误(第 42 行)
   → 多余的逗号
   [一键修复] 删除第 42 行末尾的逗号

2. ❌ 必填字段缺失
   → agents.defaults.workspace 未设置
   [一键修复] 设置为默认值 "~/.openclaw/workspace"

[全部修复] [仅修复语法] [查看变更详情]

11. 落地步骤(推荐顺序)

Step 1: RecipeEngine 核心

  1. 定义 RecipeEngine 接口
  2. 实现 validatepreviewapplyrollbackrecover
  3. 编写单元测试

Step 2: 端到端流程验证

  1. 实现一个真实 RecipeDiscord 人设)
  2. 完整走通:选择 → 填参数 → 预览 → 应用 → 回滚
  3. 验证 JSON5 风格保持

Step 3: 损坏恢复演练

  1. 模拟配置损坏场景
  2. 测试 Doctor 诊断流程
  3. 验证一键修复功能

Step 4: 扩展 & 发布

  1. 添加 2-3 个 Recipe
  2. 完善 UI 细节
  3. 打包发布macOS / Windows / Linux

附录

A. 隐藏但有用的配置能力

这些是 OpenClaw 支持但用户不一定知道的功能:

功能 配置路径 说明
Channel 级 systemPrompt channels.*.guilds.*.channels.*.systemPrompt 频道专属人设
Context Pruning agents.defaults.contextPruning 上下文裁剪策略
Compaction agents.defaults.compaction Session 压缩
Bindings bindings[] 按条件路由到不同 Agent
Media Audio tools.media.audio 语音转录配置
Memory Search agents.defaults.memorySearch 记忆搜索配置

B. 文件路径

文件 路径
OpenClaw 配置 ~/.openclaw/openclaw.json
ClawPal 历史 ~/.openclaw/.clawpal/history/
ClawPal 元数据 ~/.openclaw/.clawpal/metadata.json

Last updated: 2026-02-15