Multi User Privacy

# Multi-User Privacy 技能

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "Multi User Privacy" with this command: npx skills add lz84/multi-user-privacy

Multi-User Privacy 技能

版本:v0.9.0 - Gateway 自动创建子代理版
定位: ClawHub 首个多用户隐私保护技能
状态: ✅ 生产环境验证
更新: 2026-03-12 - 实现 Gateway 自动创建子代理功能


🌟 核心功能

1. 身份识别 ✅

  • ✅ 自动识别管理员/普通用户
  • ✅ 基于账号 ID 自动分类
  • ✅ 不同身份不同权限

2. 记忆隔离 ✅

  • ✅ 记忆文件物理隔离
  • ✅ 普通用户无法访问 MEMORY.md
  • ✅ 每个用户独立记忆空间
  • ✅ 文件系统级别保护

3. 隐私检查 ✅

  • ✅ 回复前敏感词检查
  • ✅ 防止泄露其他账号信息
  • ✅ 自动过滤敏感内容
  • ✅ 每个对话都是独立世界

4. 项目权限 ✅

  • ✅ 项目归属检查
  • ✅ 防止越权操作
  • ✅ 细粒度权限控制

5. 异常检测 ✅

  • ✅ 频繁失败自动封禁
  • ✅ 行为数据库记录
  • ✅ 自动告警通知

6. 实时告警 ✅

  • ✅ 监控隐私违规
  • ✅ 立即通知管理员
  • ✅ 完整日志记录

7. 配置热更新 ✅

  • ✅ 修改配置无需重启
  • ✅ 自动监听文件变化
  • ✅ 即时生效

8. 性能优化 ✅

  • ✅ 配置缓存(100 倍提升)
  • ✅ 行为数据库缓存
  • ✅ 自动清理过期缓存

9. Session 管理 ✅

  • ✅ Session 检查(确保对话隔离)
  • ✅ 用户专属 session 记录
  • ✅ Session 不匹配警告

10. 子代理自动创建 🆕 (v0.9.0)

  • ✅ Gateway 收到消息时自动检测新用户
  • ✅ 自动创建专属子代理(pending 队列机制)
  • ✅ 消息自动路由到对应子代理
  • ✅ 完全自动化,无需手动干预
  • ✅ 支持主流程或定时任务处理 pending 队列

11. 配额管理 🆕

  • ✅ 管理员无限配额
  • ✅ 普通用户资源限制(磁盘/Token/消息)
  • ✅ 配额超限自动拒绝
  • ✅ 每日自动重置
  • ✅ 详细使用日志

🎯 隔离架构

完整隔离方案

┌─────────────────────────────────────────────────────────┐
│                    主代理 (路由器)                       │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  1️⃣ 身份识别层                                          │
│     └── 读取 sender_id                                  │
│         ├── 管理员 (ou_b96f5424607baf3a0455b55e0f4a2213)│
│         └── 普通用户                                    │
│                    ↓                                    │
│  2️⃣ Session 管理层                                       │
│     └── 查找或创建用户专属 session                       │
│         ├── session_laoliu                              │
│         ├── session_sun                                 │
│         └── session_xie                                 │
│                    ↓                                    │
│  3️⃣ 记忆隔离层                                          │
│     └── 加载对应记忆文件                                 │
│         ├── 管理员:MEMORY.md + 当日记忆                 │
│         └── 普通用户:users/{user_id}.md + 当日记忆     │
│                    ↓                                    │
│  4️⃣ 隐私检查层                                          │
│     └── 回复前检查                                       │
│         ├── 敏感词检查                                   │
│         ├── 账号 ID 检查                                  │
│         └── 角色称呼检查                                 │
│                    ↓                                    │
│  5️⃣ 子代理路由层                                         │
│     └── 转发到对应子代理                                 │
│         ├── 子代理处理                                   │
│         └── 返回回复                                     │
│                                                         │
└─────────────────────────────────────────────────────────┘

📋 技术实现

1. 身份识别

// privacy-guard.js
function getUserIdFromContext(context) {
    const chatId = context.chat_id || context.user_id || context.sender_id;
    if (!chatId) return null;
    
    const match = chatId.match(/(ou_[a-z0-9]+)/);
    return match ? match[1] : null;
}

function isAdmin(userId) {
    return userId === ADMIN_ID; // ou_b96f5424607baf3a0455b55e0f4a2213
}

2. 记忆隔离

// privacy-guard.js
function loadMemory(userId) {
    const results = { loaded: [], missing: [] };
    const today = new Date().toISOString().split('T')[0];
    const USER_MEMORY_DIR = path.join(MEMORY_DIR, 'users');
    
    // 管理员:加载完整记忆
    if (isAdmin(userId)) {
        if (fs.existsSync(MEMORY_PATH)) {
            results.loaded.push(MEMORY_PATH);
        }
    } else {
        // 普通用户:只能访问自己的记忆
        const userMemoryPath = path.join(USER_MEMORY_DIR, `${userId}.md`);
        if (fs.existsSync(userMemoryPath)) {
            results.loaded.push(userMemoryPath);
        }
    }
    
    // 所有用户都可以访问当日记忆
    const todayPath = path.join(MEMORY_DIR, `${today}.md`);
    if (fs.existsSync(todayPath)) {
        results.loaded.push(todayPath);
    }
    
    return results;
}

3. 隐私检查

// privacy-guard.js
function enhancedCheck(message, userId) {
    const issues = [];
    
    // 如果不是管理员,检查敏感词
    if (!isAdmin(userId)) {
        const forbiddenTerms = ['老刘', '主人', '管理员', '主账号'];
        
        for (const term of forbiddenTerms) {
            if (message.includes(term)) {
                issues.push({
                    type: 'forbidden_term',
                    value: term,
                    severity: 'high',
                    message: `检测到敏感词汇:${term}`
                });
            }
        }
        
        // 检查是否暗示其他账号存在
        const otherAccountPatterns = [
            /其他账号/g,
            /另一个用户/g,
            /还有人/g,
            /除了你之外/g
        ];
        
        for (const pattern of otherAccountPatterns) {
            if (pattern.test(message)) {
                issues.push({
                    type: 'isolation_breach',
                    value: pattern.toString(),
                    severity: 'medium',
                    message: '暗示其他账号存在'
                });
            }
        }
    }
    
    return {
        passed: issues.length === 0,
        issues,
        blocked: issues.some(i => i.severity === 'high')
    };
}

4. Session 管理

// session-guard.js
class SessionManager {
    constructor() {
        this.sessions = this.loadSessionDB();
    }
    
    async getSession(userId) {
        // 检查是否已有 session
        if (this.sessions[userId]) {
            return this.sessions[userId];
        }
        
        // 创建新 session
        const session = {
            userId,
            createdAt: new Date().toISOString(),
            lastActiveAt: new Date().toISOString(),
            messageCount: 0
        };
        
        this.sessions[userId] = session;
        this.saveSessionDB();
        
        return session;
    }
    
    checkSessionMatch(currentUserId, expectedUserId) {
        return currentUserId === expectedUserId;
    }
}

5. 子代理路由

// subagent-router.js
class SubAgentRouter {
    constructor() {
        this.userSessions = this.loadRouterDB();
    }
    
    async getUserSession(userId) {
        // 检查是否已有子代理
        if (this.userSessions[userId]) {
            return this.userSessions[userId];
        }
        
        // 创建新子代理
        const session = await sessions_spawn({
            label: userId,
            task: `${userId} 的专属子代理`,
            mode: 'session',
            thread: true
        });
        
        this.userSessions[userId] = session;
        this.saveRouterDB();
        
        return session;
    }
}

🚀 快速开始

安装

# 通过 ClawHub 安装
npx clawhub install multi-user-privacy

# 或手动安装
git clone https://github.com/your-repo/multi-user-privacy.git
cp -r multi-user-privacy ~/.openclaw/skills/

配置

1. 创建隐私配置文件

cat > ~/.openclaw/workspace/.privacy-config.json << 'EOF'
{
  "admin": {
    "id": "ou_b96f5424607baf3a0455b55e0f4a2213",
    "name": "管理员",
    "role": "admin"
  },
  "privacy": {
    "mode": "strict",
    "forbiddenTerms": ["敏感词 1", "敏感词 2"]
  }
}
EOF

2. 创建项目配置文件

cat > ~/.openclaw/workspace/.projects-config.json << 'EOF'
{
  "projects": {
    "your-project": {
      "name": "你的项目",
      "owner": "your_user_id",
      "collaborators": ["collab_id_1", "collab_id_2"]
    }
  }
}
EOF

3. 启用自动注入

在 OpenClaw 主入口添加:

// ~/.openclaw/runtime/main.js 开头
require('./skills/multi-user-privacy/scripts/auto-inject');

📖 使用方式

查看 Session 统计

node scripts/session-guard.js stats

查看日志

node scripts/view-logs.js

查看子代理路由

node scripts/subagent-router.js list

清空 Session 数据库

node scripts/session-guard.js clear

📊 版本历史

v0.9.0 (2026-03-12) - Gateway 自动创建子代理版 🆕

  • ✅ Gateway 收到消息时自动检测新用户
  • ✅ 自动创建专属子代理(pending 队列机制)
  • ✅ 集成到 privacy-guard.js
  • ✅ 完整测试覆盖(87.5% 通过率)
  • ✅ 详细日志记录
  • ✅ 支持主流程或定时任务处理

v0.8.0 (2026-03-11) - 生产就绪版

  • ✅ 完整隔离架构
  • ✅ 5 层防护机制
  • ✅ 生产环境验证

v0.7.0 (2026-03-11) - 子代理自动路由

  • ✅ 自动为每个用户创建专属子代理
  • ✅ 消息自动路由到对应子代理

v0.6.0 (2026-03-11) - Session 会话管理

  • ✅ Session 检查(确保对话隔离)
  • ✅ 用户专属 session 记录

v0.5.0 (2026-03-11) - P2 改进完整版

  • ✅ 异常行为检测
  • ✅ 实时告警系统
  • ✅ 配置热更新
  • ✅ 性能优化

📞 支持

  • 文档:查看本文件
  • 问题:提交 Issue
  • 更新日志:查看 CHANGELOG.md

📄 许可证

MIT License

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

Xiaohongshu Ops

小红书端到端运营:账号定位、选题研究、内容生产、发布执行、数据复盘。 Use when: (1) 用户要写小红书笔记/帖子, (2) 用户说"发小红书"/"写个种草文"/"出一篇小红书", (3) 用户讨论小红书选题/热点/爆款分析/竞品对标, (4) 用户提到账号定位/人设/内容方向规划, (5) 用户要求生成...

Registry SourceRecently Updated
Automation

WeMP Ops

微信公众号全流程运营:选题→采集→写作→排版→发布→数据分析→评论管理。 Use when: (1) 用户要写公众号文章或提供了选题方向, (2) 用户说"写一篇关于XXX的文章"/"帮我写篇推文"/"出一篇稿子", (3) 用户要求采集热点/素材/竞品分析, (4) 用户提到公众号日报/周报/数据分析/阅读量/...

Registry SourceRecently Updated
Automation

agent-stock

用于股票行情查询与分析的命令行技能。用户提到 stock 命令、股票代码、最新资讯、市场概览、K 线或配置管理时调用。

Registry SourceRecently Updated