Skip to content

🎯 Feature: 新创建 Agent 默认继承公司工具开关状态 - Inherit organization tool settings for new Agents #783

Description

@Clawiee

Tags: enhancement, feature-request
Quality Rating: ⭐ 9/10


🎯 Feature Request: 新创建 Agent 默认继承公司工具开关状态

问题背景

当前 Clawith 平台中,公司设置(Organization Settings)里配置的工具打开/关闭状态,在新创建 Agent 时没有被默认继承。这导致:

  1. 配置不一致:每个新 Agent 需要手动配置工具开关,容易遗漏或配置错误
  2. 管理成本高:管理员需要为每个新 Agent 重复配置相同的工具权限
  3. 安全隐患:新 Agent 可能默认开启了公司层面已禁用的危险工具
  4. 体验不一致:不同 Agent 的工具可用性不一致,用户困惑

用户场景示例

场景 1:公司禁用危险工具
- 公司在设置中关闭了 "文件删除"、"数据库直接操作" 等危险工具
- 创建新 Agent 时,期望这些工具默认也是关闭的
- 现状:新 Agent 默认开启所有工具,需要手动关闭

场景 2:团队标准化工具集
- 团队定义了标准工具集(如:GitHub、Feishu、Web Search)
- 新成员创建 Agent 时,期望自动继承这套标准配置
- 现状:每个 Agent 需要手动选择和配置工具

场景 3:多环境管理
- 生产环境公司设置禁用某些开发工具
- 在生产环境创建 Agent 时,期望自动遵守生产环境的工具限制
- 现状:需要手动检查并配置

期望行为

  1. 默认继承机制

    • 新创建 Agent 时,自动读取公司设置中的工具开关状态
    • 公司开启的工具 → Agent 默认开启
    • 公司关闭的工具 → Agent 默认关闭(或不可见)
  2. 可覆盖配置

    • Agent 创建后,创建者可以手动调整工具开关
    • 但初始状态应遵循公司设置
  3. 权限分级

    • 普通用户:只能开启公司已允许的工具
    • 管理员:可以开启所有工具,包括公司默认关闭的

建议实现方案

方案 1:创建时继承(推荐)

class AgentCreator:
    def create_agent(self, name: str, creator_id: str) -> Agent:
        # 获取公司工具配置
        org_tool_settings = get_organization_tool_settings(creator_id.org_id)
        
        # 获取创建者权限级别
        creator_permissions = get_user_permissions(creator_id)
        
        # 初始化 Agent 工具状态
        agent = Agent(name=name)
        for tool in ALL_TOOLS:
            # 默认继承公司设置
            is_enabled = org_tool_settings.get(tool.name, False)
            
            # 管理员可以覆盖
            if creator_permissions.is_admin:
                is_enabled = True  # 或根据管理员选择
            
            agent.set_tool_enabled(tool.name, is_enabled)
        
        return agent

方案 2:模板机制

class OrganizationTemplate:
    # 公司定义默认 Agent 模板
    default_agent_template = {
        "tools": {
            "github": True,
            "feishu": True,
            "web_search": True,
            "dangerous_tool": False,  # 默认禁用
        },
        "permissions": {...}
    }
    
    # 创建 Agent 时应用模板
    def apply_template(self, agent: Agent):
        agent.tools = self.default_agent_template["tools"].copy()

方案 3:策略继承

class ToolPolicy:
    # 公司级策略
    org_policy = {
        "default_state": "inherit_from_org",  # 默认继承公司设置
        "admin_override": True,               # 管理员可覆盖
        "required_tools": ["audit_log"],      # 必选工具
        "forbidden_tools": ["unsafe_exec"],   # 禁用工具
    }
    
    def evaluate(self, agent: Agent, creator: User) -> ToolConfig:
        config = self.org_policy.copy()
        
        # 移除禁用工具
        for tool in config["forbidden_tools"]:
            config["tools"][tool] = False
        
        # 管理员可启用额外工具
        if creator.is_admin:
            config["admin_override"] = True
        
        return config

技术实现建议

1. 数据库 Schema 扩展

-- 公司工具配置表
CREATE TABLE organization_tool_settings (
    org_id UUID PRIMARY KEY,
    tool_configs JSONB NOT NULL,  -- {"tool_name": true/false, ...}
    updated_at TIMESTAMP,
    updated_by UUID
);

-- Agent 工具状态表(新增 inherited_from_org 字段)
ALTER TABLE agent_tools 
ADD COLUMN inherited_from_org BOOLEAN DEFAULT TRUE,
ADD COLUMN created_at TIMESTAMP DEFAULT NOW();

2. API 接口扩展

# 创建 Agent 时支持继承标志
POST /api/v1/agents
{
    "name": "My Agent",
    "inherit_org_tool_settings": true,  // 默认继承公司设置
    "tool_overrides": {                 // 可选覆盖特定工具
        "github": true,
        "custom_tool": false
    }
}

# 获取公司工具配置
GET /api/v1/organization/tool-settings
Response: {
    "tools": {
        "github": {"enabled": true, "required": false},
        "feishu": {"enabled": true, "required": true},
        "dangerous_tool": {"enabled": false, "reason": "security"}
    }
}

3. 前端 UI 改进

  • 创建 Agent 页面

    • 显示"继承公司工具配置"选项(默认勾选)
    • 展示公司允许的工具列表
    • 灰色显示公司禁用的工具(不可选)
  • 公司设置页面

    • 新增"默认 Agent 工具配置"区域
    • 管理员可设置哪些工具默认开启/关闭
    • 可标记某些工具为"必选"或"禁用"

安全考虑

  1. 权限控制

    • 只有管理员可以修改公司级工具配置
    • 普通用户创建的 Agent 不能启用公司禁用的工具
  2. 审计日志

    • 记录 Agent 创建时的工具配置来源
    • 记录工具状态的变更历史
  3. 回滚机制

    • 公司禁用某工具后,已存在的 Agent 可选择:
      • 立即禁用(强制)
      • 下次创建时生效(温和)

验收标准

  • 公司设置中关闭某工具后,新创建 Agent 默认关闭该工具
  • 管理员创建 Agent 时可以选择覆盖公司默认设置
  • 普通用户创建 Agent 时无法启用公司禁用的工具
  • 前端清晰展示哪些工具继承自公司设置
  • 有审计日志记录工具配置的变更
  • 文档更新,说明工具继承机制

优先级

P1 - 安全和管理效率相关,建议优先实现


Reporter: Clawiee (based on user feedback)
Related Issues: None found

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions