opc-cli · OPC AI 统一总 CLI(唯一命令行入口)
> 把 CRM/内容/资产/产品等所有子产品的操作收敛成一个命令 opc-cli,按域分层。
> 核心设计:Agent 是语义路由器,CLI 是执行器 —— Agent 判断用户意图归属哪个域后,用带域前缀的命令调用;CLI 不猜语义,只按域前缀执行。
为什么是"总 CLI"
狼哥顶层定调:
- 账号密码是用户唯一身份(官网注册,全产品通用)
- 只做一个总 CLI,不管买几个产品都能用,不用记每个产品的 CLI
- key 统一:CLI 只认一套 OPC_API_KEY/OPC_TENANT
- 域前缀显式:命令归属由子命令名(client/content/...)决定,不靠模糊语义路由 → 天然不歧义、不冲突
- 架构预留:未设计完的域/命令先立好位置(走"待接入"提示),将来补实现即可
安装
> ⚠️ 前置:先装 SkillHub(很多 Agent 没装)——opc-cli 通过 skillhub 安装/更新。若 command -v skillhub 无输出,先装:
> bash
> curl -fsSL https://skillhub-1388575217.cos.ap-guangzhou.myqcloud.com/install/install.sh | bash
> command -v skillhub && skillhub --version # 验证
>
> 装 SkillHub 时若需确认"是否设优先源":选是(CN 更快)。
# 方式1(推荐,其他 Agent 均适用):经 SkillHub 安装 opc-cli 技能
skillhub install opc-ai-dashboard-cli --dir <你的skills目录> # 装完后在会话中读取技能使用
# 方式2:公网 wheel 直装(已装 skillhub 或想跳过技能时用)
pip install https://app.link-ai.pro/1mi26klb/tools/opc-cli/opc_ai_dashboard_cli-1.0.0-py3-none-any.whl
# 方式3:从本目录(仅韩老魔本地)
./install.sh # 或 pip install -e .
配置(key 必须由工作台后台签发,不能让 Agent 自己猜)
Agent 装 cli 不能自己造 key——API Key 由管理员在工作台 → 人力资源 → 🔑 Agent 密钥管理给该 Agent 签发(专属 key,可区分身份/按岗位控权/单独吊销)。签发后把 key 给对应 Agent 配置:
export OPC_API_BASE="https://www.wolfmanai.com/products/dashboard/api/wb"
export OPC_TENANT="<你的账号手机号,如 18655448032>"
export OPC_API_KEY="<后台签发给你的专属 key,形如 sk_xxx,不是自己编的>"
> 签发配置包模板(前端 akIssue 生成,直接复制给 Agent):
> > 请帮我配置 opc-cli,用以下专属 API Key(我是「<Agent名>」,岗位:<岗位>):
> 1️⃣ 安装 opc-cli(SkillHub):skillhub install opc-ai-dashboard-cli
> 2️⃣ 配置环境变量:
> export OPC_TENANT="<手机号>"
> export OPC_API_KEY="<签发key>"
> 3️⃣ 验证:opc-cli content task list
>
> 修复记录(2026-08-31):opc-cli memory 之前打 usage 是 --domain 与顶层 dest 冲突,已改名 --mem-domain(memory add/search 用)。content task 502 是后端缺 content_task 方法 + auth._touch_last_seen,后端已部署修复。
> 修复记录(2026-09-03):安装段补「先装 SkillHub + key 由后台签发」——纠正此前漏 skillhub 前置、让 Agent 自造 key 的错误说法。
> 更新记录(2026-09-04 v1.1.0):新增 project 域(opc-cli project list / project material list <项目> / project material download <项目> <素材名> [--out])——狼哥把项目原始素材(图片/PDF等)通过工作台项目档案「📎素材」上传后,项目负责人 Agent 用 project 域即可自助列出并下载取用。升级:skillhub install 后 opc-cli --version 应显示 1.1.0。
> 更新记录(2026-09-05 v1.2.0):project 域新增 archive(建档/收尾归档):project archive save <项目> 建档/更新档案(置 status/category/owner/stage)、project archive log <项目> <version|daily|stage|block> 收尾补录版本/过程日志/推进阶段/卡点。负责人(owner白名单)可给自己负责的项目补录归档;新建档案壳仍须管理员/域主管。opc-cli --version 应显示 1.2.0。
> 更新记录(2026-09-06 v1.2.1):多域权限模型修正——修复"多域岗位(如生产调度主管 langzai-prod-lead 的 asset/governance/project/smm)签发后被压成单值 domain、导致 project 等域被误拦"的 bug。改动:①后端 key 存完整域列表 domains ②key-identity 返回 domains ③opc-cli 按多域列表 + 别名映射(content↔smm、client↔crm)判断放行。opc-cli --version 应显示 1.2.1。升级:skillhub install opc-ai-dashboard-cli 或 skillhub upgrade。
> 更新记录(2026-09-09 v1.3.0):补 intel(情报)命令域——opc-cli intel list + opc-cli intel stats。补岗位"情报域"在 CLI 的落地。
> 更新记录(2026-09-09 v1.4.0):补 project material upload + archive recognize——opc-cli project material upload <项目> <本地文件>(上传文件到项目档案) + opc-cli project archive recognize <项目>(AI识别归档:读已上传素材→看图/视频/音频→归纳归类→写档案)。这是竹间宁等客户"整理电脑文件归类成项目"的完整链路:建档(archive save)→上传(material upload)→AI归类(archive recognize)。配套后端修复外接岗 owner 匹配(tenant 纳入候选集)。
> ⚠️ 负责人取素材协议:狼哥上传素材到某项目档案后,会@通知负责人。负责人取用 = opc-cli project material list <项目名>(看清单/文件名)→ opc-cli project material download <项目名> <文件名>(拉回本地)。素材存私有桶(签名下载),CLI 自动带 key 鉴权。
域权限校验(权限红线,v1.0.1+)
> 岗位/角色的 Agent key 只能执行它所属域的命令;越权执行会被拒绝并引导去工作台调权限。
- 带岗位的 key:签发时选了「岗位模板」的 key,
opc-cli会在执行命令前调用/api/auth/key-identity获取你的岗位域,只允许执行该域命令。 - 通用域放行:
memory(共享记忆)与run(通用任务)是所有岗位都可用的公共底座,不限制。 - 未配岗位的 key(旧 key / 租户主 key / 登录 token):完全放行,不受限制(平滑兼容)。
- 越权提示:执行非本岗位域命令会提示,例如:
> ⚠️ 你的岗位(内容·内容量产主理人)不能执行 client 域命令,已拒绝本次操作。如需调整权限,请管理员去工作台「设置→Agent 密钥管理」调整你的岗位/角色。
命令结构(按域分层)
opc-cli
├── client 客户/CRM 域(已接通真实 CRM)
│ ├── customers [query] [--due] # 列客户
│ ├── customer get <name|id> # 查客户详情
│ ├── customer update <name|id> <field> <value> # 改客户字段
│ ├── customer followup <name|id> <text> # 录跟进
│ ├── customer material <name|id> <type> <url> ... # 存素材链接
│ ├── customer raw-save / raw-get # 原话稿存档/检索
│ ├── customer add / del # 增删客户
│ ├── business list|add|del # 业务线
│ ├── product add <bid> <key> <name> # 产品线下加产品
│ ├── knowledge <query> # 查销售知识库
│ └── analyze <text> # AI 分析客户
├── content 内容生产域
│ ├── task list|create|advance|update|stats # 生产任务状态机 ✅
│ ├── topic 选题(待接入)
│ ├── template 生产模板(待接入)
│ ├── account 账号运营(待接入)
│ └── material 内容素材(待接入)
├── asset 资产域
│ ├── search <query> # 资产检索 ✅
│ ├── list 资产列表(待接入)
│ └── add 资产入库(待接入)
├── intel 情报域 ✅ v1.3.0
│ ├── list [--date --kind --category --q --source --limit] # 查情报(自有库) ✅
│ └── stats # 情报总览(总条数/最近日期/来源Top) ✅
├── memory 共享记忆(横切能力)
│ ├── add <text> [--domain --source --agent --tags]
│ ├── search <query> [--domain --top-k]
│ └── stats
├── project 项目域(档案/素材)✅ v1.1.0
│ ├── list # 列全部项目档案
│ ├── archive save <项目> [--code --category --owner --status --stage --note] # 建档/更新档案(收尾归档置status/stage)
│ ├── archive log <项目> <version|daily|stage|block> [--note --version --date --stage] # 收尾补录:版本/过程日志/推进阶段/卡点
│ └── material list <项目名>|download <项目> <素材名> [--out 路径] # 项目素材:列清单 / 下载到本地
├── product 产品管理域(架构预留,待设计)
│ ├── list 产品清单(待接入)
│ ├── add 新品登记(待接入)
│ └── update 产品更新(待接入)
└── run "<任务描述>" [--force] # 通用任务入口(带信号检测补认知)
使用示例
# client 域(连真实 CRM)
opc-cli client customers
opc-cli client customer get 郑晓鹏
opc-cli client customer followup 郑晓鹏 "今天谈了AI上架方案"
# content 域
opc-cli content task list --stage 待派发
opc-cli content task advance <id> 认领 --owner 文刀
# project 域(项目档案 / 素材 · 狼哥把原始素材传项目后负责人取用)
opc-cli project list # 列全部项目档案
opc-cli project material list 狼哥官网 # 看狼哥官网上传了哪些素材(含file_path)
opc-cli project material download 狼哥官网 工作台.png # 下载素材到当前目录
opc-cli project material download 狼哥官网 x.png --out /opt/mat/x.png # 下载到指定路径
# project archive:项目档案建档/收尾归档(负责人给自己负责的项目补录;新建壳须管理员/域主管)
opc-cli project archive save 娜娜婚礼MV --status 已归档 --stage 已交付归档 --owner 狼崽 # 收尾归档置状态
opc-cli project archive log 娜娜婚礼MV version --version 1.0.0 --note "婚礼MV成品交付" # 记版本
opc-cli project archive log 娜娜婚礼MV daily --note "确认基准图,完成MV制作交付" # 补过程日志
opc-cli project archive log 娜娜婚礼MV stage --stage 已交付归档 # 推进到终态
# asset / memory / run
opc-cli asset search 入库规范
opc-cli memory search 入库规范
opc-cli run "把这篇内容入库" # 自动信号检测+补认知
# 待接入的命令(架构已预留位置)
opc-cli content topic # → ⏳ 待接入
opc-cli product list # → ⏳ 待接入
📦 每日项目产物归档(项目负责人必读 · 每天收工做一次)
每个项目负责人 Agent,每天收工前把当天在负责项目里产出的可沉淀东西报一次,系统自动归档进全公司资产库。这是甲级责任,别攒。
一条命令上报(你只管"发现",A/B 交给系统 AI 判)
opc-cli asset report \
--project 拼多多AI上架工具 \
--name "通用CTA按钮组件css" \
--desc "所有落地页都能复用的按钮样式,改一处全局生效" \
--category 代码组件 \
--file asset_pool/projects/拼多多/1.0.0-dev/btn.css \
--owner 银月
> --desc 是关键:别只写"今天做了个按钮",要写清它是什么 + 以后哪能复用。AI 靠它判断值不值得进资产库。
系统怎么回(三种结果,不用你操心口径)
- 【A·可复用】 → 自动判类 + 打分 + 打全公司资产库(项目仅标签,全公司可检索)
- 【B·项目材料】 → 只留本项目台账(过程稿/一次性料,不进资产库)
- 【待人工复核】 → AI 拿不准,挂了台账等人工最后拍板
> 你不用学 A/B 规则、不用标 kind。只要做到:今天有"以后可能再用的东西"就如实报一条。
版本管理
有正式可复用产物想记版本:走 archive/log kind=version。认 SemVer:0.x=研发中、1.0.0+=正式可用。
每天自动同步
每天定时汇总各负责人当天上报,生成《今日归档报告》核对,漏报会 @ 提醒。
环境变量
| 变量 | 说明 | 默认 |
|---|---|---|
OPC_API_BASE |
工作台 API 地址 | https://www.wolfmanai.com/products/dashboard/api/wb |
OPC_TENANT |
账号(手机号) | 18655448032 |
OPC_API_KEY |
Agent key / 登录 token | 必填 |
OPC_AI_BASE |
AI 网关(可选,自动推导) | 由 API_BASE 推导 |
兼容读取:WB_API_BASE/WB_TENANT/WB_API_KEY、CRM_TENANT_ID/CRM_API_KEY。
架构说明
- client 域:经工作台
/api/wb/crm/forward转发到 CRM 后端(9000),CLI 只认工作台凭证,转发模块负责补 CRM 租户凭证。 - content/asset/memory:直接调工作台后端(9001)。
- 待接入域(content 的子域 / asset / product):命令名已注册、走
_todo()统一提示,将来补cmd_*+ 在main()对应分支接上即可,不改框架。 - 新增一个命令:①
main()里加add_parser② 写cmd_xxx函数 ③ 分派分支接上。三处即可,高度解耦。
员工/角色查询(先查后台,别问用户)
当用户提到某个员工/角色/Agent(如"让阿布去发""交给皮特")而你本地记忆检索不到这个人时:
1. 先查工作台「驾驶舱后台 → 👥人力资源」员工列表(这是员工/角色的唯一事实源,含姓名/岗位/域/层级/平台/主管/AppID/OpenID/ChatID/工作台连接状态)。
2. 员工列表里有该角色 → 用它的 AppID/OpenID 触达,别再问用户"这人是谁"。
3. 只有确实查不到(数据库里真没有)时才问用户,并说明你已在后台查过、查不到具体哪项。
教训(2026-09-02):"阿布"是发布专员(content域、ArkClaw、已连接工作台),本地记忆没有但后台员工列表有。反复问用户"阿布是谁"被狼哥点名批评("工作台设置了员工列表,你为啥还要问我")。员工身份/角色的事实源=驾驶舱后台员工列表,不是本地记忆,也不是问用户。
人员变更广播(改名/转岗/新人 → 进共享记忆,别让协作断链)
员工/角色发生改名、转岗、职责变更、新人加入、key 作废时,除了在人力资源后台改登记,必须立即用 memory 域写一条广播进共享记忆(domain=组织人员),否则其它 Agent 仍按旧名字/旧角色找人,协作就断了(如"皮特"改"啼魂"没人知道)。
opc-cli memory add "【人员变更公告·日期】原「旧名」(旧身份)已改名/转岗为「新名」(新身份+职责)。协作对接认新名,不再认旧名。旧key已作废。" --mem-domain 组织人员 --source 决策 --tags "人员变更,改名,新名,旧名"
- 唯一事实源 = 工作台人力资源后台:改身份只改这一处,别各处各记。
- 广播是增量:共享记忆里存"变更公告",各 Agent 开工前 search 一次即可感知最新人员现状(比各自本地记忆准)。
- 示范(2026-09-03):皮特→啼魂改名广播已写入共享记忆 id=7(domain=组织人员),搜"啼魂"即可命中。
共享记忆默认动作(把"库"变成每个 Agent 的动作)
共享记忆不是个没人看的数据库,而是每个 Agent 开工/完工的默认动作。凡有跨会话接续价值的信息,一律走 memory:
- 开工前:涉及人员/协作/引用别人经验 → 先
opc-cli memory search "<话题>"补认知(特别是组织人员有没有变动)。 - 完工后:沉淀值得复用的结论/踩坑/决策/人员变更 → 立即
opc-cli memory add,domain 按 客户/项目/内容/情报/资产/制度/组织人员/通用 归位。 - 这样共享记忆靠所有 Agent 的共同动作长出来,谁都能在需要时查到,而不是只有韩老魔一个人在写(现状=仅韩老魔沉淀,其它 Agent 从不写也不查)。
交互原则(让 Agent 消化歧义)
用户说模糊的话时(如"记录一下这个内容"),Agent 负责结合上下文判断归属哪个域,并显式带上域前缀调用,而不是让 CLI 从语义猜:
# 用户在跟客户聊天 → Agent 判断是客户记录
opc-cli client customer followup 张三 "客户说要考虑预算"
# 用户在整理资产 → Agent 判断是资产
opc-cli asset add "这个模板" # (待接入后生效)
真无法判断时,Agent 应先反问,不赌一个域。