Skip to content
Back to skills

lemonclaw-workbuddy

ASecurity

柠檬云业务技能。用户询问个税、个人所得税或自然人电子税务局的申报情况时也必须使用,以便直接说明该场景不支持并引导官方客服,不执行业务查询。其他场景通过 lemonclaw-cli 与内置独立开票工作流查询或操作柠檬云多产品业务数据,覆盖认证和账套、代账机构客户业务进度、进销存 SCM、业财 ERP、财务 ACC、发票查询及独立开票;适用于代账客户概况、记账/报税进度、客户、供应商、商品、采购、销售、库存、收付款、往来、凭证、账簿、资金与经营报表、进销项发票、立即开票、批量开票和开票反馈等场景。用户提到柠檬云、云代账、Lemon Cloud、LemonSCM、LemonERP、进销存、业财、财务或开票时使用。

  • 417 stars
  • 0 votes
  • 0 copies
  • 19 views
  • Added September 8, 2026
developmentpythongoshellbashapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned November 8, 2026

npx -y skills add infometa/workbuddyskills --skill skills --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of lemonclaw-workbuddy?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for lemonclaw-workbuddy
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/infometa-lemonclaw-workbuddy/badge)](https://www.skillsdirectory.com/skills/infometa-lemonclaw-workbuddy)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: lemonclaw-workbuddy
description: "柠檬云业务技能。用户询问个税、个人所得税或自然人电子税务局的申报情况时也必须使用,以便直接说明该场景不支持并引导官方客服,不执行业务查询。其他场景通过 lemonclaw-cli 与内置独立开票工作流查询或操作柠檬云多产品业务数据,覆盖认证和账套、代账机构客户业务进度、进销存 SCM、业财 ERP、财务 ACC、发票查询及独立开票;适用于代账客户概况、记账/报税进度、客户、供应商、商品、采购、销售、库存、收付款、往来、凭证、账簿、资金与经营报表、进销项发票、立即开票、批量开票和开票反馈等场景。用户提到柠檬云、云代账、Lemon Cloud、LemonSCM、LemonERP、进销存、业财、财务或开票时使用。"
metadata:
  version: "1.0.9"
  author: "Ningmengyun"
---

# LemonClaw WorkBuddy Skill

## 使用边界

### 个税查询边界(最高优先级)

当用户请求的业务对象明确是“个税”“个人所得税”或“自然人电子税务局”的申报状态、申报结果、申报记录或办理情况,且没有同时要求本 Skill 支持的其他业务查询时,当前 Skill 不支持该场景。必须在读取账套、机构、客户或业务 action 之前直接结束,不得执行 `lemonclaw-cli`、PowerShell、浏览器或其他工具,也不得把“个税申报”误判为下文的代账机构报税进度。

固定回复为:“当前技能暂不支持查询个人所得税(个税)的申报情况。请前往[柠檬云官网](https://www.ningmengyun.com/),联系在线客服协助确认。”

用户只说“报税进度”“纳税申报进度”而没有明确指向个人所得税时,仍按下文的代账机构客户业务进度处理;不要扩大本边界。

本连接器有两条执行路径:

- 公共认证、账套以及 ACC、SCM、ERP 业务通过 `lemonclaw-cli` 执行。不要直接执行 bundled skill 中的 `action.py`,不要手写 HTTP 请求、URL、headers、认证信息或账套上下文。
- 独立开票 `invoice` 使用 `direct-script` 模式,不使用通用 `action search/show/run`,也不通过其他 `lemonclaw-cli` 命令包装开票脚本;读取当前 runtime 中的 `invoice/SKILL.md`,按其立即开票、批量开票或反馈提交流程直接执行脚本。

WorkBuddy skill 负责产品路由、账套选择、action 选择、输入输出纪律和最终回复。`lemonclaw-cli action show <product> <action>` 返回公开 `contract` 和实际存在的 `docs` 文档入口;具体 action 的字段、参数位置、返回结构和展示口径,必须通过对应节点的 `readCommand` 读取后确定。

不要把 action 清单、接口路径、字段全集或运行时内部细节写进最终回复。不要向用户展示完整 CLI JSON,除非用户明确要求排查 CLI 协议。

本通用 Skill 已包含完整的柠檬云代账入口,连接器不再发布或依赖额外的代账 Skill。命中代账机构、代账客户、记账/报税进度或为代账客户办理财务、进销存、云发票业务时,直接遵循本 Skill 内的“代账机构与客户上下文”“代账业务路由”“代账回复与安全规则”以及“代账版进销存多模块汇总”,只执行目标业务对应的小节。

以上代账规则仅覆盖 `accountSource=aa` 的上下文和 AA 机构级能力;普通 ACC、SCM、ERP 与独立开票继续遵循本 Skill 的通用规则。

## 产品介绍与选择

用户说“访问柠檬云产品”“柠檬云有哪些产品”或询问整体能力时,按以下目录介绍产品,将“柠檬云代账”作为独立入口展示。用户说“云代账”时对应“柠檬云代账”;产品名称不追加“(记账)”“(财务)”等后缀。

| 产品 | 可办理业务 |
|---|---|
| 柠檬云代账 | 查询代账机构的记账、报税进度;查询代账客户凭证、报表等财务数据;为代账客户开票;查询代账客户进销存业务数据。 |
| 柠檬云财务 | 查询普通财务账套的凭证、账簿、报表、资金及财务发票等数据。 |
| 柠檬云进销存 | 查询商品、采购、销售、库存、收付款及经营报表等业务数据。 |
| 柠檬云业财 | 办理业财账套中的进销存业务与财务业务。 |
| 云发票 | 办理普通云发票企业查询、立即或批量开票、预览、认证、额度查询及反馈。 |

目录介绍支持的能力,具体可用机构、客户和账套在用户选择后按原流程查询与校验。已保存的账套可单独说明,但 `account current` 的历史上下文不是产品目录,不能据此遗漏产品入口或自动进入某个代账客户。仅介绍产品不切换上下文、不发起机构发现;用户已明确要办理的业务时,直接处理该业务,不重复列出全部产品目录。

### 云代账与普通业务的选择边界

- 用户明确选择“云代账/柠檬云代账”、代账机构或代账客户,或当前已核验的有效业务上下文为 `accountSource=aa` 时,才按相应 AA 流程处理。代账机构记账、报税进度继续走机构级流程,不要求先选择某个客户账套。
- “开票”“给客户开票”“进销存”“记账”“凭证”“报表”等业务词本身不表示代账。普通开票、普通进销存、普通财务记账仍按其原产品流程办理;不能因为目录新增云代账、账号存在代账权限或其他产品保存过 AA 上下文,就自动查询机构或切入代账。
- 用户明确选择普通云发票、普通进销存或普通财务时,按原账套选择流程进入对应普通产品,不沿用代账机构或客户。未明确切换时继承当前已确认的产品和业务主体;缺少必要上下文且无法判断普通业务或代账业务时,只确认本次所需的产品或业务主体,不默认代账,也不跨产品试探。
- 云代账是机构与客户业务入口,不新增 `activeProduct=aa`。用户确认代账机构和客户后,记账、进销存、开票分别沿用 `acc`、`scm`、`invoice` 的既有能力及绑定校验;普通业务的产品路由、认证、开票确认和权限规则继续生效。

## 认证规则

连接器负责执行 `lemonclaw-cli auth status/login/logout`。ACC、SCM、ERP 业务处理中不要要求用户提供 API Key、access token、Authorization header、cookie 或本地凭据路径,也不要在回复中展示这些信息。

初次连接与常规认证由 WorkBuddy 连接器统一编排。连接器已发起认证时,不要重复执行登录或另开浏览器;当连接器主动要求重新认证,或命中下述“API Key 已过期”恢复条件时,按对应认证流程处理。

### API Key 过期后的重新授权(仅 WorkBuddy)

当且仅当已执行的 ACC、SCM 或 ERP CLI 业务命令失败,且错误信息同时明确表达“对象是 API Key”和“状态是已过期”时,执行以下固定流程。`API Key 已过期`、大小写差异或空格差异可视为同一语义;只出现泛化的“认证失败”或“过期”不满足条件。

1. 保留原业务命令及其标准输入 JSON,不要改变产品、action、账套或查询条件。
2. Windows 执行 `lemonclaw-cli.cmd auth login --browser`;macOS/Linux 执行 `lemonclaw-cli auth login --browser`。
3. CLI 会先输出完整授权 URL,再尝试打开系统浏览器并继续轮询;浏览器未能自动打开时,把已输出的 URL 提供给用户手动打开,不要终止授权流程。
4. 只有授权命令返回 `authenticated` 且退出码为 `0` 后,才原样重试先前业务命令,最多重试一次。
5. 重试仍失败时原样说明错误,不得再次循环登录。

普通 access token 过期由现有认证 helper 使用本地 API Key 静默换取新 token,不调用 `--browser`。API Key 缺失、被删除、被禁用,普通 token 错误,HTTP 401/403,网络、权限及业务错误也不得仅凭“认证失败”或“过期”等宽泛字样自动打开浏览器;按原错误提示用户处理。

独立开票是 API Key 规则的唯一例外:是否需要收集 API Key、如何保存和验证,严格按 `invoice/SKILL.md` 及当前开票流程模板执行。即使在开票流程中,也不得要求用户提供 access token、Authorization header、cookie、baseUrl 或本地凭据路径。

## 账套上下文

ACC、SCM、ERP 业务请求前先执行:

```text
lemonclaw-cli account current
```

当前账套满足用户请求时直接继续业务 action。没有当前账套、已根据产品路由确认需要切换产品,或用户明确要求切换账套时,优先执行:

```text
lemonclaw-cli account switch "<产品或账套线索>"
```

代账场景使用分层发现,不执行普通账套的模糊切换:

```text
1. lemonclaw-cli account list --aa-only
2. lemonclaw-cli account list --aa-company-index <用户确认的机构序号>
3. lemonclaw-cli account select --index <用户确认的已绑定客户候选序号>
4. lemonclaw-cli account current
```

- 第一步必须使用 `--aa-only`,只请求 AA 机构发现;只向用户展示 `aaCompanies` 中的机构序号和名称,不展示或要求用户提供 `aaCompanyId`,也不要混入普通 ACC、SCM、ERP 的发现错误。
- 机构不超过 10 家时全部展示;超过 10 家时缓存本次完整 `aaCompanies`,按原始序号每页展示 10 家并标注“第 X-Y/N 家”。用户翻页时只切换缓存区间,不重新请求、不重排或重新编号;用户点名时优先在缓存中匹配。
- 用户确认机构后,第二步展示该机构下的 `aaCustomers` 及接口真实返回的可用产品;每个客户候选必须同时展示 `customerCode` 对应的客户编码和客户名称,编码为空时显示“未设置”。重名客户不得合并,必须用客户编码消歧。客户可能同时具有记账和进销存候选,没有任何产品绑定的客户只作为客户信息对象展示。
- 用户明确要求列出可办理某一产品的客户时,只展示具有该产品绑定的候选,不额外点名未绑定客户或罗列其他产品状态。
- 客户候选表格后不主动比较客户主体关系、标记哪些名称“易混淆”或解释重名原因;即使用户提示名称可能重复,也只请用户按客户编码或名称选择。
- 客户较多时使用 `--page-index`、`--page-size` 或 `--keyword` 继续查询;不得自行切换机构或跨机构合并客户。
- 代账版记账选择 `bindings.acc` 对应的 `product=acc` 并复用 ACC action;代账版进销存选择 `bindings.scm` 对应的 `product=scm` 并复用 SCM action。不得把 AA 服务号当作任一产品的普通 `serviceid` 展示或传入。
- 上一条中的“代账版记账”是内部路由名称。对用户展示 `accountSource=aa` 的 `product=acc` 时,产品名称必须完整、准确地写为“柠檬云代账”,不得显示旧名称,也不得追加“(财务)”“(记账)”或其他括号后缀;需要说明业务时另写“记账业务”。普通独立 ACC 仍展示“柠檬云财务”。
- 当前客户发现契约支持 `bindings.acc`、`bindings.scm` 和 `bindings.invoice`。字段明确返回 `null` 表示该客户没有对应产品绑定;云发票候选同时以 `invoiceBindingKnown` 区分新旧接口:`false` 表示当前接口没有提供云发票开通状态,只能回答“暂时无法判断”,不得回答“尚未开通”或“尚未关联”,也不得要求用户重复开通。不同产品绑定相互独立,不得把进销存或云发票字段塞入 ACC 上下文,也不得用其他产品绑定补造缺失绑定。
- 用户已经明确客户和目标业务,接口明确表明该客户缺少目标产品绑定时,只说明当前业务无法办理的直接原因,并给出一条必要的处理建议。云发票状态已知且没有可用绑定时,直接回复:“开票操作需要先完成云发票产品的开通。辛苦您先前往我们的代办系统([https://dz.ningmengyun.com/](https://dz.ningmengyun.com/))为该客户开通云发票服务,开通成功后我这边就能继续办理开票了。”不得写“尚未关联云发票(开票)产品”“未绑定云发票”或其他关联/绑定措辞,也不得在固定回复前后补充该客户的记账、进销存状态或推荐其他客户。记账和进销存仍按实际绑定关系说明。除非用户主动询问可办理产品或要求更换客户,不得列举该客户的其他产品状态、相近名称客户、其他客户候选或替代账套,也不得主动询问、推荐或提示可以改查其他客户。
- 用户已点名机构且唯一匹配,并同时明确要查询的业务时,内部直接进入该机构并继续执行;不要向用户播报机构总数、候选序号、唯一匹配过程、读取路由文档或选择命令的过程。

### 代账版进销存多模块汇总

`account current` 已确认 `accountSource=aa`、`activeProduct=scm`,且用户同一轮要求查询库存余额、采购入库、销售出库、应收、应付中的两个或更多模块时,严格执行本节下方的固定流程。该流程只在这一组合场景覆盖下文的通用 Action 选择、展示和报表规则;普通 SCM、ERP、ACC 请求仍完整遵循原流程。

该流程只编排既有 SCM 只读 action,不修改或替代底层产品能力。用户增加本节未定义的筛选、明细、导出或其他业务要求时,仅对超出部分回到通用 `action show` 契约处理,不把组合流程扩展成新的通用规则。

#### 适用范围

仅在以下条件同时满足时使用本流程:

- `account current` 已确认 `accountSource=aa`、`activeProduct=scm`,产品为代账版进销存。
- 用户同一轮要求库存余额、采购入库、销售出库、应收、应付中的两个或更多模块,或明确要求这些模块的整体汇总。
- 请求是只读查询;写入、审核、删除、导出、单据明细或其他未列出的能力不属于本流程。

只问单个模块、普通 SCM/ERP/ACC 账套,或请求包含下文未固定的额外筛选时,继续使用根 Skill 的通用 Action 流程。供应商名称筛选按本节的固定解析流程处理。本流程不得改变其他产品和普通进销存的 action 选择或展示规则。

#### 执行流程

1. 仍按根 Skill 的 AA 分层发现流程选择机构、客户和 `bindings.scm`,然后执行 `account current` 核验。
2. 只执行用户实际要求的模块。不要为了补齐固定清单额外查询其他模块。
3. 对下方已固定模块直接执行 `lemonclaw-cli action run scm <action> --json-stdin`;不要先执行 `action search` 或 `action show`。
4. 使用 Bash heredoc 把 JSON 交给 stdin;只读流程不得调用 `Write` 创建临时请求文件,也不得写入记忆。
5. 用户指定供应商名称时,严格执行下文“供应商筛选”;该流程已经固定,不执行 `action search` 或 `action show`。其他未固定筛选只对对应业务 action 执行一次 `action show` 后修正;不要重新搜索其他 action,不要切换产品或账套。
6. action 返回参数校验错误时,只允许对失败的 action 执行一次 `action show` 并重试一次。再次失败即保留真实错误并停止该模块,不得用不同参数反复试探。

以下 JSON 是本流程唯一的固定路由和最小请求模板。把 `${inventoryDate}`、`${startDate}`、`${endDate}` 替换为用户确认的日期;不要自行增加 `Checked`、状态、客户、供应商、仓库、商品或其他筛选条件。

<!-- route-manifest:start -->
```json
{
  "inventory": {
    "action": "inventory-balance-report",
    "outputMode": "full",
    "bodyTemplate": {
      "StockDate": "${inventoryDate}",
      "LoadPrice": true,
      "UsePager": false
    }
  },
  "purchaseInbound": {
    "action": "purchase-warehousing-list",
    "outputMode": "full",
    "bodyTemplate": {
      "Start": "${startDate}",
      "End": "${endDate}",
      "PageIndex": 0,
      "PageSize": 1000
    }
  },
  "salesOutbound": {
    "action": "sales-delivery-list",
    "outputMode": "full",
    "bodyTemplate": {
      "Start": "${startDate}",
      "End": "${endDate}",
      "PageIndex": 0,
      "PageSize": 1000
    }
  },
  "receivable": {
    "action": "reciprocating-list-report-customer",
    "outputMode": "full",
    "bodyTemplate": {
      "StartDate": "${startDate}",
      "EndDate": "${endDate}",
      "UsePager": true,
      "PageIndex": 0,
      "PageSize": 1000
    }
  },
  "payable": {
    "action": "reciprocating-list-report-vendor",
    "outputMode": "full",
    "bodyTemplate": {
      "StartDate": "${startDate}",
      "EndDate": "${endDate}",
      "UsePager": true,
      "PageIndex": 0,
      "PageSize": 1000
    }
  }
}
```
<!-- route-manifest:end -->

#### 供应商筛选

本节只处理用户在 AA 多模块组合查询中明确给出的供应商名称,且只影响采购入库和应付模块。不得把供应商条件应用到库存、销售出库或应收模块;组合中包含这些模块时,必须向用户说明它们仍按原日期范围查询。

1. 使用下方固定模板执行一次供应商候选解析;不要先执行 `action search` 或 `action show`,也不要改用 `Name`、空关键词、全量列表或其他参数再次请求。
2. 在返回的完整候选中按供应商名称做去空格后的精确匹配。唯一命中时只在内部读取其供应商 ID;不得向用户展示该 ID 或供应商编码。
3. 精确命中为零或多条时停止业务查询,请用户补充或确认供应商;不得猜 ID、模糊选择第一条或重复调用供应商列表。
4. 唯一命中后,采购入库请求只追加 `OriginalVendorIds: [<供应商 ID>]`,应付请求只追加 `VendIds: [<供应商 ID>]`。不得追加 `Checked`、`Status`、`WhsStatus` 或其他未请求条件。
5. 同一轮的两个模块复用同一次解析结果;供应商列表最多调用一次。

<!-- vendor-resolver-manifest:start -->
```json
{
  "action": "vendor-list",
  "outputMode": "full",
  "maxCalls": 1,
  "bodyTemplate": {
    "SearchText": "${vendorName}",
    "PageIndex": 0,
    "PageSize": 20,
    "UsePager": true
  },
  "targetFields": {
    "purchaseInbound": "OriginalVendorIds",
    "payable": "VendIds"
  }
}
```
<!-- vendor-resolver-manifest:end -->

每个 action 的 stdin 信封保持:

```json
{
  "query": {},
  "body": {},
  "_outputMode": "full"
}
```

其中 `body` 使用对应 `bodyTemplate`。不得把模板中的日期占位符原样发送。

#### 结果检查

- 每个模块分别检查返回成功状态、`总数`、实际数据列表长度及分页/截断标记。
- 实际长度小于总数或存在不完整提示时,只说明当前返回范围,不得声称覆盖全部数据。
- 五个模块是独立口径。不得用应收金额补造销售金额,不得用应付金额补造采购金额,也不得根据未收款、未付款或余额反推接口未返回的单据金额、数量或其他字段。即使两个模块的数值相等,也不得声称“一致”“完全对应”“相互印证”“来源于”或据此建立任何关系。
- 不得擅自增加“已审核”“未审核”“已收款”“未收款”等条件。只有用户明确要求且对应 action 契约允许时才增加筛选;最终回复也不得把响应中的审核人、付款金额或余额改写成用户未要求的“已审核口径”“尚未付款”“至今未付款”等状态结论。
- 不在模型侧求和、相减、计算总额或生成接口未返回的汇总字段。只能使用接口明确返回的 `总数` 和业务字段;用户明确要求计算时退出本固定流程,按完整性规则单独处理。
- 一个模块失败不改用其他模块的数据代替。保留该模块真实错误,其余成功模块可以继续汇总。

#### 最终回复

- 默认按模块给出简短汇总,不原样展示各 action 的 `displayMarkdown`,也不输出 action 名称、CLI 命令、接口名称或完整 JSON。本条是本组合场景对根 Skill 原样展示规则的窄范围例外。
- 只使用 action 实际返回且语义明确的业务字段。字段缺失时写“接口未返回”,不要显示 `-` 后再猜测原因或金额。
- SCM 业务结果不展示 `aaCompanyId`、客户/供应商/商品编码、客户/供应商/商品 ID、`asid`、`serviceid`、单据内部 ID或其他技术字段。此处“客户编码”指 SCM 业务资料编码,不包括进入账套前 AA 客户候选列表中的 `customerCode`;AA 候选仍必须用该业务编码区分重名客户。用户未明确要求查看业务单据编号时,禁止展示单据编号;不得以“便于追溯”“自然业务标识”或其他理由主动输出。
- 先说明代账机构、客户、产品版本和查询日期范围,再按用户请求顺序汇总各模块;没有数据的模块明确写“当前条件下未查询到数据”。
- 各模块分别陈述,不写跨模块小结,不评价数据是否一致、对应或合理。日期范围结束于过去或当天时,只写该查询期间,不使用“至今”等扩大时间范围的措辞。
- 最后只追加 `账套名称:<名称>`,不追加任何内部 ID。

## 代账机构客户业务进度

用户询问“客户业务进度”“本月记账/报税完成情况”“我或某员工/部门负责的未完成客户”“一般纳税人/小规模客户进度”或要求导出这些结果时,进入 AA 机构级进度流程。此流程不属于 ACC 客户账套 action,不执行客户 `account select`,也不受当前 `activeProduct` 影响。

```text
1. lemonclaw-cli aa progress options --aa-company-index <机构序号>
2. 员工候选:lemonclaw-cli aa progress options --aa-company-index <机构序号> --subject-type employee --keyword "<姓名>" --page-index 0 --page-size 20
3. 部门候选:lemonclaw-cli aa progress options --aa-company-index <机构序号> --subject-type department --keyword "<部门名>" --page-index 0 --page-size 20
4. 默认汇总:lemonclaw-cli aa progress query --period <yyyy-MM> --scope-type permission_scope --metric customer_overview --metric accounting --metric tax;只有用户明确询问客户名单、哪些客户、未完成明细或逐户状态时才追加 --metric detail
5. 指定员工或部门:在上一步基础上使用 --scope-type employee|department --subject-id <options 返回的 ID>
6. lemonclaw-cli aa progress export --format excel|pdf
```

以上命令、参数名、指标名、参考文档和执行步骤仅用于内部执行。该限制适用于整个执行期间的所有用户可见消息,不只是最终回复;不要在工具调用前后播报“查看业务路由”“确认查询命令”“查看范围选项”等过程。需要提示后续能力时使用业务语言,例如“如需,我可以继续查看客户明细”,不得复述 `--metric detail` 或其他 CLI 参数。

机构选择规则:

- 未知机构时,先执行 `lemonclaw-cli account list --aa-only`。没有机构则停止;仅一家机构可自动使用;多家机构只展示序号和名称,等待用户选择。用户已点名且唯一匹配时可以直接使用对应序号。
- 不跨机构合计,不向用户展示或要求其提供 `aaCompanyId`。确认后的机构由 Runtime 写入公共 AA 上下文,进度与该机构下的客户账套发现共用;切换或选择普通 ACC/SCM/ERP/invoice 时清除当前机构及其进度条件。重新进入代账业务时必须重新发现并确认机构、客户和账套,禁止从历史账套保存的 `aaCompanyId` 自动恢复机构;完成本次 `accountSource=aa` 账套选择后才同步所属机构。切换机构会同时作废旧机构的进度条件和所有已保存的 AA 客户账套,必须在新机构下重新选择客户和账套,并重新读取范围选项,不能复用上一机构的员工、部门或查询条件。
- 查询机构进度不展示客户账套候选、不选择客户账套、不追加 ACC/SCM/ERP 账套尾注。只有用户进一步要求进入某个客户查看凭证、账簿等具体记账业务时,才回到前述代账客户绑定账套流程。

月份与统计范围规则:

- 用户未给月份时查询当前自然月,并在结果中明确实际月份;CLI 入参只传 `yyyy-MM`。
- 未明确指定员工或部门时一律使用 `PERMISSION_SCOPE`,返回当前用户权限范围内可见的全部客户;“我负责的”“统计我2026-06负责客户的做账和报税进度”“某代账机构本月进度”等日常说法都属于默认权限范围,不能自动收窄为 `SELF`。只有用户明确说“仅看我本人/只统计本人”时才使用 `SELF`;明确指定其他员工或部门时才使用对应范围。对用户只能表述为“权限范围内全部客户”,不能宣称覆盖公司无权限数据。
- 指定员工或部门时,先用 options 的 `subjectType` 和 `keyword` 检索。只使用返回候选的真实对象;重名员工通过部门名称让用户消歧,不从姓名猜内部 ID。
- 默认及“我负责的”映射 `PERMISSION_SCOPE`;“仅看我本人/只统计本人”映射 `SELF`;明确指定员工映射 `EMPLOYEE`;明确指定部门映射 `DEPARTMENT`。一般纳税人和小规模分别映射 `GENERAL`、`SMALL_SCALE`。

查询与展示规则:

- “全部情况”查询客户概况、记账、报税和明细;只问记账或报税时只请求对应指标及必要明细。连续追问继承已确认的机构、月份、统计范围和纳税人类型,只替换用户明确改变的条件。
- 除下述报税口径转换外,数量、分类、状态和完成率使用服务端返回值,不在模型侧自行推导。报税状态缺失按“未申报/未完成”处理:报税展示未完成数为 `incomplete + missing`,报税完成率按 `completed / (completed + incomplete + missing)` 计算;分母为 0 时显示“暂无可统计客户”,不得沿用只基于有效状态的完成率。
- 验收示例:报税 `completed=3`、`incomplete=0`、`missing=3` 时,对用户显示“报税已完成 3、未完成 3、完成率 50%”,不能显示 100%。
- 用户可见的记账/报税进度表只展示“项目、已完成、未完成、完成率”,进度表不得展示“数据缺失”列。记账状态缺失不能并入未完成;如记账 `missing > 0`,在表格外说明“另有 N 家记账状态暂无法判断”。
- 用户要求逐户明细时,报税状态 `MISSING` 显示为“未申报/未完成”,记账状态 `MISSING` 显示为“暂无法判断”;不得向用户展示英文枚举原文。完成率只代表业务状态,不用于评价人员绩效。
- 记账和报税是两个独立统计口径;服务端未明确返回交集时,分别陈述各自状态,不得声称“其余 N 家两项均缺失”、两组是同一批客户,或自行推导交集。
- 默认进度回复只展示汇总,不列出全部客户;只有用户明确询问名单、哪些客户、未完成明细或逐户状态时才展示对应明细。不得为重复客户、排除记录等现象猜测原因,也不得把它们与 `dataWarnings` 建立服务端未说明的联系。
- 返回的 `dataWarnings` 非空时,必须在统计结果前准确告诉用户被排除数据的对象、原因和数量;例如“3 家客户的纳税人类型无法识别,已从本次统计中排除”。不得把它改写成“数据缺失客户”“两类数据”,不得忽略告警、把被排除客户重新计入统计,或把无法识别的数据解释为 0、未完成或无权限。
- 最终先写明机构、月份、统计范围和纳税人类型,再给核心结论、客户概况、记账/报税进度与用户要求的授权明细。不得展示内部公司、客户、员工、部门、服务 ID、JWT、接口地址或完整 CLI JSON。
- 机构级进度回复不得提及命令、参数、指标名、执行步骤或“尾注”等内部编排概念;无需追加的内容直接省略,不要向用户解释省略规则。
- 不展示 `requiresScopeSelection`、`dataWarnings` 等字段名、`MISSING` 等枚举值或原始 `null`;没有可用完成率时用“服务端未提供可用完成率”或“暂无法计算”表达,不根据空值补充原因。
- 用户要求“直接执行并给结果”且现有条件足够时,第一条用户可见回复就是业务结果或服务端数据告警,不发送机构发现、读取文档、选择范围、无需选客户等过程说明。
- 导出默认继承最近一次确认查询;Excel/PDF 必须包含当前授权范围内的完整分页结果。成功后只告知文件名、格式、明细数量和可下载路径。
- 指定对象不可见、来源失败或结果被截断时,保持服务端错误和范围含义;不得换机构、换账套、换接口或补造数据。

按 `account switch` 的结果继续处理:

- 唯一命中并切换成功:执行 `lemonclaw-cli account current` 核验后继续业务 action。
- 返回多个候选:直接展示本次 `switch` 返回的候选并让用户确认;不要再次执行 `account list`,避免刷新候选缓存和序号。用户确认后执行 `account select`,再执行 `account current`。
- 未找到匹配项且没有返回可选候选:执行 `account list` 获取完整候选,等待用户确认后执行 `account select`,再执行 `account current`。
- 认证、网络、权限或服务异常:保持原错误含义处理,不要改用 `account list` 掩盖异常。

候选确认后优先使用最近一次 `switch` 或 `list` 返回的序号:

```text
lemonclaw-cli account select --index <index>
lemonclaw-cli account current
```

名称在最近候选中唯一时,也可以使用:

```text
lemonclaw-cli account select --product <product> --name "<账套名称>"
```

已取得准确 `asid` 时可以使用 `--product <product> --asid <asid>`;专业版同名账套需要同时使用 `--product <product> --serviceid <serviceid> --name "<账套名称>"` 限定。

账套规则:

- `account switch` 可以按产品、账套名、asid、serviceid、版本等线索匹配;账套名、产品或版本存在歧义时先让用户确认。
- `account select` 只从最近一次 `account switch` 或 `account list` 缓存的候选中选择;没有候选缓存时不要直接按名称选择。
- `account select --index` 的序号必须来自最近一次候选结果,不要固定传 `1`;名称重复时不得自行选择。
- 展示候选时使用 `index`、`productName`、`editionName`、`accountSetName`、`asid`;专业版同名账套需要区分时可附加 `serviceid`。
- 不展示或要求用户提供 `candidateId`、`appasid`、`appAsId`、`accAppId`。
- 每个产品独立保存自己的账套上下文。切换当前产品或账套不应删除其他产品的上下文。
- `account clear` 只清理账套上下文,不清理认证。
- 独立开票所需的销方、购方、认证和公司选择以 `invoice/SKILL.md` 为准;除非开票流程明确要求,否则不要把本节的普通业务账套流程强行套用到 invoice。

## 代账机构与客户上下文

本节适用于进入柠檬云代账机构、检索客户或切换代账上下文的场景。

### 客户检索

确定机构后执行:

```text
lemonclaw-cli account list --aa-company-index <本次机构序号>
```

客户较多或用户给出名称线索时,使用 `--keyword`、`--page-index`、`--page-size` 缩小结果。关键词只在当前机构内检索。

- 无结果:说明当前机构下未找到匹配客户,允许用户更换关键词;不得换机构或扫描普通账套。
- 唯一结果:自动选定客户,并复述客户名称和客户编码。
- 多个结果:每个候选固定展示客户序号、客户编码、客户名称或公司全称和可用产品名称,等待用户确认;记账或进销存版本可在接口返回时展示。客户编码为空时明确显示“未设置”,不得改用内部 ID。重名客户保留为不同候选并按客户编码区分,不得按名称去重、合并或猜测为同一客户。
- 只展示当前用户有权查看的候选。不要使用内部 `customerId`、`aaServiceId`、`asid`、`appasid` 做用户消歧。

推荐候选表格列为“序号|客户编码|客户名称|可用产品/版本”。`customerCode` 是代账系统面向用户的业务编码,允许展示;它与内部 `customerId` 不同。

客户成立日期读取 `aaCustomers[].foundDate`,格式为 `yyyy-MM-dd`。用户询问成立日期或要求客户资料时,以“成立日期”展示该字段;默认候选表不增加此列。日期为 `null`、空字符串或旧接口未返回该字段时显示“未提供”,不得用客户创建日期、建账日期或其他日期代替。仅查询成立日期无需选择产品账套,没有产品绑定的客户也可查询;仍须先确认机构,并用客户编码区分重名客户。

用户明确要求“可办理某产品业务的客户”时,只展示具有该产品绑定的客户候选;不要在表格后追加未绑定该产品的客户名称、数量或其他产品状态,除非用户另行询问。

候选表格后只需请用户选择,不主动比较客户之间的名称、公司全称或主体关系;即使两个候选的公司全称相同,也只把它们作为不同编码的候选展示,除非用户明确要求分析关系。

客户没有记账账套仍可以成为“客户信息”查询对象,但不能进入财务账套业务。可办理产品完全以本次客户发现接口返回的 `bindings.acc`、`bindings.scm`、`bindings.invoice` 为准;缺少某一绑定不影响该客户其他产品。云发票还要读取客户摘要的 `invoiceBindingKnown`:值为 `false` 时说明当前接口没有提供开通状态,只能告诉用户暂时无法判断,不得据此判断未开通;值为 `true` 且 `hasInvoiceBinding=false` 时才可判断当前尚未开通云发票。此时使用通用 Skill 中规定的固定开通引导文案,不得使用“尚未关联”“未绑定”等关联关系措辞,也不得展开该客户的其他产品状态。

用户已明确客户和目标业务,但该客户缺少目标产品绑定时,只回答当前业务结论和必要的处理建议。例如查询财务数据时说“该客户尚未绑定记账账套,暂时无法查询;请先完成记账账套绑定”。除非用户主动询问可办理产品或要求更换客户,不要列举其他产品绑定、相近名称客户或其他客户候选,不主动推荐改查其他客户,也不要解释内部匹配、替代和防误选规则。

### 选择客户业务绑定

需要进入已绑定产品时,只使用最近一次客户列表返回的候选序号:

```text
lemonclaw-cli account select --index <候选序号>
lemonclaw-cli account current
```

同一客户只有一个符合目标业务的绑定时可以直接选择;同时存在多个产品且用户尚未说明业务时,先请用户选择财务、进销存或云发票。选择后必须核验当前上下文仍属于已确认的机构、客户和目标产品。代账版记账使用 `product=acc`,代账版进销存使用 `product=scm`,云发票使用 `product=invoice`,三者均保持 `accountSource=aa`;不要把 AA 服务号当成任何产品的普通 `serviceid`。

如果目标产品绑定尚未由客户列表返回,停止并说明当前接口暂未提供该客户的对应产品上下文,不得手填内部 ID 或改走普通产品账套。对于云发票,必须按 `invoiceBindingKnown` 区分“接口无法判断”和“明确尚未开通”。

### 对话内记忆

只在当前对话中记住:

- 已确认的机构名称和本次机构序号;
- 已确认的客户名称、客户编码和本次候选序号;
- 当前办理的业务类型及用户明确给出的查询条件。

用户说“这个客户”“刚才那家”时可以复用当前对话上下文。用户改选机构时先清除客户;用户改选客户时清除旧客户的产品账套和业务条件。

新对话中,即使 `account current` 或 CLI 缓存仍有旧值,也必须重新执行机构发现,不能把旧值当作用户本次选择。

## 代账业务路由

根据已经识别的用户意图,只执行一个对应流程。业务不明确时先追问,不跨产品试探。

### 客户信息

在当前机构中检索并选定客户。客户候选列表必须展示候选序号、客户编码、客户名称或公司全称;接口返回时还可展示是否关联记账账套、记账版本名称和账套名称。重名客户必须分别保留并用客户编码区分,不能只展示名称。

税号、当前记账月份、当前报税月份、云发票开通状态和进销存关联状态等字段,只有接口真实返回时才能展示,不能从名称、账套版本或其他产品状态推断。只问单个字段时给简洁结果,不强制输出全部信息。

### 客户业务进度

进度属于机构级能力,不进入某个客户账套:

```text
1. lemonclaw-cli aa progress options --aa-company-index <机构序号>
2. 如需员工候选:lemonclaw-cli aa progress options --aa-company-index <机构序号> --subject-type employee --keyword "<姓名>" --page-index 0 --page-size 20
3. 如需部门候选:lemonclaw-cli aa progress options --aa-company-index <机构序号> --subject-type department --keyword "<部门名>" --page-index 0 --page-size 20
4. 默认汇总:lemonclaw-cli aa progress query --period <yyyy-MM> --scope-type permission_scope --metric customer_overview --metric accounting --metric tax
5. 用户明确询问客户名单、哪些客户、未完成明细或逐户状态时,在上一步追加 --metric detail
6. 指定员工或部门:在查询命令中使用 --scope-type employee|department --subject-id <options 返回的 ID>
7. 用户要求导出时:lemonclaw-cli aa progress export --format excel|pdf
```

以上命令、参数和本节仅供内部执行。整个执行期间都不得向用户播报读取本文、确认命令或选择范围的过程,也不得在任何用户可见消息中出现 `--metric detail`、`--scope-type`、`--subject-id` 等参数;需要引导下一步时只说“如需,我可以继续查看客户明细”等业务语言。

- 未明确指定员工或部门时使用 `PERMISSION_SCOPE`,包括“我负责的”“统计我2026-06负责客户的做账和报税进度”“某代账机构本月进度”等日常说法;对用户表述为“权限范围内全部客户”。只有用户明确说“仅看我本人/只统计本人”时才使用 `SELF`,明确指定其他员工或部门时才使用对应范围。
- 默认范围不因返回 `requiresScopeSelection=true` 而反问用户,直接选择服务端提供的 `PERMISSION_SCOPE`;只有用户明确要求员工或部门范围但对象不明确时,才请用户从真实候选中选择。不得向用户展示内部字段名或字段值。
- 未给月份时使用当前自然月,并展示实际月份。
- 只筛一般纳税人或小规模时,分别追加 `--taxpayer-type general` 或 `--taxpayer-type small_scale`;两者都要时重复传入该参数。
- `subject-id` 仅使用 options 的返回值发起请求,不能要求用户提供或在回复中展示。
- 报税状态缺失按“未申报/未完成”处理:报税未完成数固定使用 `incomplete + missing`,报税完成率按 `completed / (completed + incomplete + missing)` 计算;分母为 0 时显示“暂无可统计客户”,不得沿用只基于有效状态的完成率。逐户明细中的报税 `MISSING` 同样显示为“未申报/未完成”。
- 记账与报税是两个独立统计口径。用户可见的进度表只展示“项目、已完成、未完成、完成率”,进度表不得展示“数据缺失”列;记账 `missing` 不并入未完成,非零时在表格外说明“另有 N 家记账状态暂无法判断”。接口未显式返回两者交集时,不得使用“同一批客户”或其他交集结论,也不得用两个汇总数自行推导交集。
- 默认进度查询只展示汇总,不列出全部客户。只有用户明确询问客户名单、哪些客户、未完成明细或逐户状态时,才请求并展示 `detail`;即使响应中已有明细,也不能因数量较少而自动展开。
- 返回的 `dataWarnings` 非空时,必须在统计结果前准确说明服务端排除的对象、原因和数量;不得把“3 家客户的纳税人类型无法识别”改写成“两类数据缺失客户”,也不得忽略告警、重新计入被排除客户,或把无法识别的数据解释为 0、未完成或无权限。
- 不输出原始 `null`、字段名或枚举值;对应数值不可用时只说明“服务端未提供可用值”或“暂无法计算”,不推测原因。

### 客户财务数据

先按客户上下文选择其 `bindings.acc`,核验 `accountSource=aa` 后,复用现有 ACC 流程:

```text
lemonclaw-cli action search "<用户财务需求>"
lemonclaw-cli action show acc <action>
lemonclaw-cli action run acc <action> --json-stdin
```

目标 action、参数、展示和导出以 `action show` 返回的契约为准。客户没有记账绑定、记账产品未开通或财务 AI Skill 未启用时停止,不切换普通 ACC 账套。用户当前只要求财务业务时,仅简洁说明该客户尚未绑定记账账套、暂时无法办理当前业务;除非用户主动询问,不列举该客户的其他产品绑定、相近客户或其他可选客户,也不主动推荐改查其他客户。

### 客户进销存数据

仅当客户列表真实返回可进入的 `bindings.scm` 时选择该绑定,并复用现有 SCM 流程:

```text
lemonclaw-cli action search "<用户进销存需求>"
lemonclaw-cli action show scm <action>
lemonclaw-cli action run scm <action> --json-stdin
```

客户未关联进销存、进销存 AI Skill 未启用或当前版本没有返回 `bindings.scm` 时停止并说明原因,不改用普通 SCM 或 ERP 账套。

### 为客户开票

仅当用户明确要求开票时进入云发票流程。客户必须已选定,且客户列表真实返回可用的 `bindings.invoice`;不得根据记账版本或开通状态文字推断云发票绑定。`invoiceBindingKnown=false` 只表示当前接口暂时无法判断,不能回复客户未开通或未关联。`invoiceBindingKnown=true` 且没有可用云发票绑定时,只输出通用 Skill 规定的固定开通引导文案,不得写成“尚未关联云发票(开票)产品”或“未绑定云发票”,也不得附带其他产品状态或替代客户建议。

执行 `lemonclaw-cli skill-root --check`,读取运行时 `invoice/SKILL.md`,再严格按立即开票、批量开票或反馈流程办理。进入流程前确认当前保存的是所选客户的 `product=invoice`、`accountSource=aa` 上下文;运行时会据此切换到 AA 云发票域名并为每个请求附加机构参数,不得让用户手工提供。接口明确返回云发票未开通、AI Skill 未启用或没有可用发票绑定时停止,不使用财务发票查询 action 代替开票;接口没有提供绑定状态时,如实说明暂时无法判断。

## 产品路由

同一时间只有一个 `activeProduct`。如果 `activeProduct` 存在,默认只在当前产品中搜索和执行 action。除非用户明确点名另一个产品、明确要求切换产品、明确要求跨产品汇总,或明确进入独立开票流程,否则不要切换产品。

如果没有 `activeProduct`,且用户没有说明产品,按上文“产品介绍与选择”确认用户要使用柠檬云代账、柠檬云财务、柠檬云进销存、柠檬云业财还是云发票。已有明确普通开票、进销存或记账需求时,沿用对应产品的必要确认流程,不为新增的代账入口额外反问或改道;确认前不要默认切到代账、SCM 或跨产品试探。

产品边界:

- 柠檬云代账:机构进度走 AA 机构级流程;代账客户业务按已确认的 `accountSource=aa` 上下文和客户绑定进入下列产品能力。入口选择遵循上文“云代账与普通业务的选择边界”。
- `acc`:普通独立财务账套或已确认的代账客户记账账套,包括凭证、账簿、资金、基础资料、财务发票查询、财务报表等;普通财务与代账记账分别保持各自的账套来源。
- `scm`:进销存账套,包括商品、客户、供应商、采购、销售、库存、收付款、经营报表等。
- `erp`:业财账套,包括进销存业务和 ERP 财务侧能力。ERP 财务侧的凭证、账簿、资金、基础资料和财务发票能力应在 ERP 产品内处理,不要为了这些词切到 ACC。
- `invoice`:云发票产品、独立开票、税票平台、开票助手或开票助理,包括云发票企业与客户查询、立即或批量开票、预览、认证、额度和反馈。

容易误判的业务词:客户、供应商、商品、库存、采购、销售、收款、付款、往来、资金、报表、明细、汇总、对账、欠款、利润、发票等在多个产品中都可能存在。不能仅凭这些词切换产品;先在当前 `activeProduct` 范围内搜索候选。

发票业务也必须遵循上述产品路由规则:

- 用户明确提到“云发票”“云发票产品”“独立开票”“税票平台”“开票助手/开票助理”,或询问云发票下的企业、公司、账号、账套、销方、可开票主体时,进入 `invoice` 流程。
- 查询云发票企业、公司、账套、销方或可开票主体时,先读取开票文档,再按文档调用 `CompanyFullList`;不要使用普通业务账套列表代替。
- 云发票企业详情、购方客户、登录状态、税局或数电认证、剩余额度、税编解析、立即或批量开票、预览、确认、提交、客服和问题反馈,也进入 `invoice` 流程。
- 普通进项发票、销项发票、发票详情、导出或统计只在已确认的 ACC 或 ERP 产品范围内选择 action;没有当前产品且用户未指定产品或账套时,先请用户确认,不得默认选择 ACC。
- 用户只说“发票”且无法判断是财务发票查询还是云发票操作时,先澄清,不要默认进入任一流程。

其他产品已经保存账套上下文,不构成切换产品的依据。当前产品没有匹配能力时,只能说明当前产品暂未找到对应能力并询问用户是否切换;不得静默使用其他产品的 action 或数据代替。

## 云发票与独立开票工作流

明确进入云发票产品,或命中云发票企业查询、独立开票、立即开票、批量开票、确认开票、开票预览、提交开票或开票问题反馈时:

1. `lemonclaw-cli skill-root --check` 仅用于发现并校验当前 runtime 的 bundled skill 根目录;不得通过该命令传递或执行任何开票业务参数。
2. 根据返回路径建立并校验以下直接脚本运行上下文:

   ```text
   <runtime-root>   = 规范化后的 <skill-root>/../../..
   Windows Python  = <runtime-root>/python/python.exe
   macOS/Linux     = <runtime-root>/python/bin/python3
   cwd             = <runtime-root>
   PYTHONPATH      = <runtime-root>/app
   SSL_CERT_FILE   = <runtime-root>/app/certifi/cacert.pem
   PYTHONUTF8      = 1
   PYTHONIOENCODING= utf-8
   PYTHONNOUSERSITE= 1
   PYTHONDONTWRITEBYTECODE=1
   LEMONCLAW_RUNTIME_ROOT=<runtime-root>
   ```

   执行前确认 `<runtime-root>/runtime.json`、对应平台的 runtime Python 以及 `<runtime-root>/app` 都存在;这里的 runtime Python 即 WorkBuddy 内置 Python。以上环境变量只覆盖当前开票脚本进程,不修改用户的全局环境。
3. 完整读取 `<skill-root>/invoice/SKILL.md`,并以 `<skill-root>/invoice/` 作为所有相对路径的基准。runtime 文档中的 <SkillsRoot> 即 <skill-root>/invoice/,二者同指 invoice 目录的绝对路径。
4. 开票文档中的 `python`、`python3` 或 `<Python>` 解释器标记统一替换为上述 runtime Python;将脚本相对路径解析为 `<skill-root>/invoice/` 下的绝对路径,然后由 runtime Python 直接执行脚本。不要替换或包装成 `lemonclaw-cli` 命令,也不要使用系统 Python。
5. 路径按当前平台解析,新版文档统一使用 `/` 表示目录层级。若已安装 runtime 的旧版文档仍含 PowerShell 反引号续行或 Windows 反斜杠,只保留原参数及其顺序,按当前平台重新解析路径和参数,不要原样交给 macOS/Linux shell。macOS/Linux 不执行 `.ps1`,预览服务启停直接调用对应 Python 脚本,临时目录清理由当前平台的文件操作完成。
6. 立即开票只按 `references/immediate/flow.md` 执行;批量开票只按 `references/batch/flow.md` 执行;反馈提交只按 `invoice/SKILL.md` 指定的 shared 文档执行。
7. 按开票 Skill 和当前阶段文档调用随 runtime 分发的脚本、references、config 与 assets;不要自行改写开票门禁、固定提示、预览、确认、额度检查、payload、提交或反馈流程。
8. 云发票业务不使用通用 `action search/show/run`,也不要用 ACC 或 ERP 的发票查询 action 代替云发票流程。普通进项、销项发票查询仍按当前 ACC 或 ERP 产品执行。
9. `invoice/SKILL.md`、当前流程文档和共享输出协议决定业务流程与输出;本节决定标准版的 Python、目录和进程环境。二者发生执行方式冲突时,以本节的标准版直接脚本运行上下文为准。

## Action 选择流程

处理 ACC、ERP、SCM 业务请求时严格按顺序执行:

```text
1. lemonclaw-cli account current
2. lemonclaw-cli action search "用户需求"
3. lemonclaw-cli action show <product> <action>
4. 必要时读取合理候选的 docs.action,确定唯一 action
5. 读取最终 action 的全部现有 docs 节点
6. lemonclaw-cli action run <product> <action> --json-stdin
```

选择规则:

- `search` 只用于找候选,不生成参数、不执行业务请求。
- `search` 结果不是最终 action,第一名或 `ambiguous=false` 都不表示已经选定。先 `show` 最合理候选;仍有合理候选时最多深入比较两个,无法排除时向用户澄清。
- 第一次 `search` 没有候选时,不得直接判断当前产品不支持。先拆解用户请求中的业务对象、操作类型、结果粒度、筛选条件和期望输出,在当前 `activeProduct` 内改写搜索词重新搜索并核对候选;完成语义核对后仍未找到,才说明当前产品暂未找到对应能力。
- `show` 只返回当前 action 的公开 `contract` 和实际存在的 `docs` 节点,不代表该 action 已经成为唯一选择。文档只能执行对应节点的 `readCommand` 读取,不要根据 `path` 猜命令,也不要猜不存在的文档。
- 比较候选时只在需要业务边界时读取候选的 `docs.action`。确定唯一 action 后,读取最终 action 的全部现有文档;如果此前读取过多个候选的 `ACTION.md`,先重新读取最终 action 的 `docs.action`,再读取 `docs.input` 和 `docs.output`。
- `ACTION.md` 用于确认使用边界、前置步骤和依赖;`input.md` 用于构造请求;`output.md` 用于理解预期结果和展示约定。缺少 `input.md` 且 `contract` 不足以确定参数时,不得执行 `run`。
- 不要根据 action 名称、响应字段、页面列名、旧记忆或相邻 action 臆造入参。
- 不要为了找到更像的 action 自动跨产品搜索。跨产品前必须满足产品路由规则。
- `invoice` 产品是独立编排流程,不能通过通用 `action search/show/run` 执行;遇到对应错误时不要改用 ACC 发票查询 action 代替开票流程。

## Action 输入规则

本节只适用于 ACC、SCM、ERP 的 CLI action。`action run` 的 stdin 必须保持嵌套结构:

```json
{
  "query": {},
  "body": {},
  "_outputMode": "full"
}
```

硬规则:

- 顶层只允许 `query`、`body`、`_outputMode`、`_extraDisplayFields`;普通请求不要传 `_extraDisplayFields`。
- 不要拍平 `query/body`,也不要让 CLI 根据字段名重新分流。
- 不传 `context`、`_context`、headers、token、cookie、appasid、appAsId、accAppId 等运行时字段;CLI 从已选择账套加载上下文。
- `bodyMode:none` 的 action 可省略 `body` 或传 `{}`,业务字段按 `contract.requestParamSchema` 和实际存在的 `docs.input` 放入 `query`。
- `bodyMode:list` 的 action,`body` 必须是数组;其他公开 action 的 `body` 必须是对象。
- 参数是否必填、字段类型、枚举值、日期格式、ID 串格式,以最终 action 的 `docs.input` 文档和 `contract.requestParamSchema` 为准。
- 普通查看省略 `_outputMode`;也可显式传 `basic`。
- 只有统计、分析、二次筛选、Top、核对、下游交接、需要完整结构化数据,或用户点名默认列之外的展示字段时才传 `_outputMode:"full"`。
- `_extraDisplayFields` 只能和 `_outputMode:"full"` 一起使用,只传用户明确要求展示且 action 契约已定义的字段名或业务标签。未点名的完整字段只用于分析,不得自动铺开显示。
- `internal`、`raw-internal`、`system` 是内部编排模式,禁止从 WorkBuddy 传入。
- ACC、SCM、ERP 当前没有业务写 Action,不要追加 CLI 参数 `--user-confirmed`,也不要根据 Action 名称或 HTTP 方法推断写能力。

用户明确要求展示非默认字段时,使用:

```json
{
  "query": {},
  "body": {},
  "_outputMode": "full",
  "_extraDisplayFields": ["商品条码"]
}
```

调用时把 JSON 作为命令 stdin 直接提交,不使用 shell `echo` 拼接 JSON。

## 输出展示规则

本节只适用于 ACC、SCM、ERP 的 CLI action。CLI stdout 是 action 完成取数、展示塑形后的最终 JSON,不是原始业务接口响应。不要再次按接口 `rows/raw/data` 自行拼接展示。

普通查看:

- 在返回结果对象中读取 `mustDisplayVerbatim` 和 `primaryDisplayField`。
- 当 `mustDisplayVerbatim=true` 时,按 `primaryDisplayField` 指定的字段原样展示;常见字段是 `displayMarkdown`、`reportMarkdown`、`markdown` 或 `content`。
- 原样展示时不要改写 Markdown 表头、章节顺序、表格列、排序、金额格式、提示语或文件路径。
- 最终回复直接输出 `primaryDisplayField` 的 Markdown 原文,让表格在消息中渲染;不得用三反引号代码块包裹、不得转义管道符 `|`、不得缩进或改成纯文本。
- `primaryDisplayField` 不存在时,再依据已读取的 `docs.output` 文档解释结构化结果。
- 面向用户优先输出中文业务结果和必要结论,不要直接贴完整 JSON、字段名清单、错误码堆栈或 CLI 调试过程。

结构化读取:

- 常见结构为 `data.数据`、`data.数据列表`、`data.总数`;具体以已读取的 `docs.output` 文档为准。
- `action run` 的实际返回是本次数据事实;`docs.output` 只解释实际存在字段的含义和展示约定,不覆盖真实响应。不要根据内部 `fieldMap` 路径直接访问 runtime 文件,也不要把内部 ID 当作普通展示列输出。
- 如果结果包含文件路径、下载路径或导出信息,只在 action 成功且字段真实存在时告知用户。

`basic` 和 `full` 返回的 `displayMarkdown` 都只代表默认展示列,不代表 action 的全部返回字段;`full` 的完整结构化字段可用于分析,但不得自动全部展示。用户点名筛选、排序、统计或交接默认表格未展示的字段时,先检查实际存在的 `docs.output`;字段已经定义则使用 `_outputMode:"full"` 重新取数。用户还明确要求展示该字段时,通过 `_extraDisplayFields` 追加;确认未定义后才能说明当前 action 不支持该字段。

## full 模式规则

本节只适用于 ACC、SCM、ERP 的 CLI action。`full` 用于统计分析、二次筛选、Top、核对、下游交接和完整结构化读取;`full` 不等于自动导出 Excel,也不代表可以把全量结构化行直接贴给用户。

使用 `full` 后必须检查数据完整性:

- 比较 `数据列表` 实际长度与 `总数`。
- 如果长度小于总数、存在 `complete=false`、存在分页/截断提示,或 `output.md` 明确说明可能不是全量,不得声称分析覆盖全部数据。
- 数据不完整时,说明当前结果范围和限制,并建议缩小筛选条件、补充期间/账户/类别等条件,或使用系统导出能力。
- 统计金额、数量、Top、占比、异常分析时,如果数据不完整,结论必须标注“基于当前返回数据”。

## 报表规则

本节只适用于 ACC、SCM、ERP 的 CLI action。模板报表和已塑形报表必须优先使用 action 返回的最终正文。只要返回包含 `displayPolicy=verbatim_markdown`、`mustDisplayVerbatim=true` 或明确指定 `primaryDisplayField`,最终回复必须原样展示指定字段。

报表规则:

- 资金日报、资金周报、资金月报等模板报表,最终正文必须来自对应 action 的 `displayMarkdown` 或文档指定字段。
- 不得手写、摘要化、删章节、改标题、改顺序、改表格列、合并表格或只展示局部指标。
- 报表正文(`displayMarkdown` 等)同样直接渲染为 Markdown 输出,不得用代码块包裹。
- 展示前确认正文包含模板要求的固定章节;如果 action 返回显示正文不完整,应按错误或不完整结果处理。
- 对应模板或 `output.md` 明确要求包含 `报告结束` 时,展示前必须核验;ACC/ERP 财务侧 statement query 不强制追加该标记,仍按其 `primaryDisplayField` 和输出契约原样展示。
- ACC 的 `cashier-daily-report`、`cashier-weekly-report`、`cashier-monthly-report` 是 ACC 资金报表入口。
- ERP 中同名资金报表是 ERP 财务侧入口。不要跨产品混用报表入口。
- SCM/ERP 销售经营报表和 ACC/ERP 资金报表都应通过正式报表 action 生成,不要只查底层列表后自行拼报表。

## 业务只读与云发票写操作

ACC、SCM、ERP 当前不修改柠檬云业务数据,仅支持查询、明细、报表、统计和导出。部分查询使用 HTTP POST,仍属于业务只读;导出 Action 可能生成本地文件,但不得据此推断新增、修改、提交、删除或状态变更能力。

- 不得为 ACC、SCM、ERP 编造业务写 Action,也不要追加 `--user-confirmed`。
- 支持 dry-run 的命令可用 `--dry-run` 查看计划或校验结果,但 dry-run 结果不能当作真实业务结果。
- 正式开票必须按 `invoice/SKILL.md` 完成当前预览、有效用户确认、认证、额度、payload 和提交门禁;一次确认只允许提交一次,失败后不自动重试。
- 反馈提交只在用户明确要求代提交并按反馈文档补齐反馈内容与附件后执行;不套用正式开票的票据预览门禁。

## 错误处理

ACC、SCM、ERP 的 CLI 与账套错误按错误类型处理,不要把所有错误都改写成“CLI 执行失败”。独立开票错误按本节最后一条执行。

- `source:"cli"`:CLI 参数、索引、进程或协议错误。按错误码修正命令、产品、action 或输入信封。
- `active_product_mismatch`:当前产品与请求产品不一致。先确认用户是否要切换产品或账套。
- 缺少账套上下文:执行 `account switch`;唯一命中后执行 `account current` 核验。
- 候选账套歧义:直接展示 `account switch` 返回的候选,用户确认后执行 `account select`;不要在二者之间重新执行 `account list`。
- `account switch` 未找到匹配项且没有返回候选:执行 `account list`,用户确认候选后再执行 `account select`。
- 账套命令返回认证、网络、权限或服务异常:按原错误处理,不要通过刷新候选规避错误。
- 明确的登录超时或 HTTP 401 由 CLI 自动刷新认证并重试一次;CLI 仍返回认证失败时提示用户重新登录,不要重复执行相同业务命令。
- 不得仅凭 HTTP 410 推断接口下线、地址变更、账号失效或机构不存在;只保留 CLI 返回的业务错误含义。
- launcher 或 CLI 启动失败:只依据命令返回的原始错误说明问题,最多原命令重试一次;不得猜测 `safe-delete`、回收站或锁文件根因。
- 不得创建、删除、覆盖或伪造 `~/.lemonclaw-cli/install.lock`、`current.json`、runtime 目录等 launcher 内部状态,也不得建议用户在每次命令前创建空锁。锁恢复由 launcher 自身负责。
- action 未找到:在当前产品重新 `action search`。不要直接跨产品乱搜。
- payload 或 request 参数校验失败:重新执行最终 action 的 `show` 和 `docs.input.readCommand`,按 `input.md` 与 `contract` 修正 `query/body`。
- 权限、业务规则、数据不存在、期间未启用等结构化业务错误:保持原业务含义,用中文说明下一步可操作建议。
- 文件导出失败或返回错误文件:不要把错误文件当成 Excel 成果。
- 不得因为接口报错、空数据、无权限、认证失效或服务不可用而自动切换产品、账套、服务或接口域名。先按当前上下文说明问题,只有用户明确要求后才能切换。
- 独立开票的错误、失败反馈和最终措辞按 `invoice/SKILL.md`、当前流程模板和共享输出协议处理,不要改写成通用 CLI 错误。

## 代账回复与安全规则

在开始组织任何代账场景的用户可见消息前遵循本节。本节约束工具调用前后的中间消息和最终回复;内部查询步骤应静默执行,除非确实需要用户补充信息。

### 正常结果

- 开头用业务名称说明当前上下文,例如“代账机构:甲公司”“当前客户:乙公司”。
- AA 记账产品的正式展示名称固定为“柠檬云代账”。不得展示后端兼容名称“代账版记账”,不得写成“代账版记账(财务)”,也不得在“柠檬云代账”后追加“(财务)”“(记账)”或其他括号后缀;需要说明业务时另写“记账业务”。“代账版记账”仅可用于内部路由说明。
- 客户候选固定包含序号、客户编码和客户名称,再按需要展示可用产品或版本;客户编码为空时显示“未设置”。同名客户不得合并。客户详情只给用户询问的字段。
- 用户按某一产品筛选可办理客户时,只返回符合该产品条件的候选,不在结尾补充未绑定客户或其他产品情况。
- 候选列表不追加客户之间“同一主体”“关联企业”“名称易混淆”或重复原因等比较结论;即使用户提示名称可能重复,表格后也只需请其按客户编码或名称选择。
- 财务、进销存和云发票结果沿用各自产品已有的正式输出格式,不自行改写报表或重新统计。
- 云发票开通状态已知且没有可用绑定时,只回复:“开票操作需要先完成云发票产品的开通。辛苦您先前往我们的代办系统([https://dz.ningmengyun.com/](https://dz.ningmengyun.com/))为该客户开通云发票服务,开通成功后我这边就能继续办理开票了。”不得写“尚未关联云发票(开票)产品”“未绑定云发票”或其他关联/绑定措辞,不得追加该客户的记账、进销存状态,也不得推荐其他客户;开通状态未知时只能说明“暂时无法判断”,不能表述为未开通。
- 机构级进度先展示机构、月份、统计范围,再展示核心结论、客户概况和记账/报税汇总。默认不展示逐户明细;只有用户明确询问名单、哪些客户、未完成明细或逐户状态时才展示相应客户。
- 机构级进度返回 `dataWarnings` 时,先用业务语言准确展示被排除对象、原因和数量,再展示基于过滤后数据生成的统计结果;不要改变告警对象或把“纳税人类型无法识别”改写成“数据缺失”。
- 记账与报税的状态数量按两个独立口径分别表达。报税状态缺失按“未申报/未完成”处理:报税未完成数为 `incomplete + missing`,报税完成率按 `completed / (completed + incomplete + missing)` 计算,分母为 0 时显示“暂无可统计客户”;不得沿用只基于有效状态的完成率。
- 验收示例:报税 `completed=3`、`incomplete=0`、`missing=3` 时,对用户显示“报税已完成 3、未完成 3、完成率 50%”,不能显示 100%。
- 用户可见的进度表只展示“项目、已完成、未完成、完成率”,进度表不得展示“数据缺失”列。记账状态缺失不能并入未完成;如记账 `missing > 0`,在表格外说明“另有 N 家记账状态暂无法判断”。逐户明细中的报税 `MISSING` 显示为“未申报/未完成”,记账 `MISSING` 显示为“暂无法判断”。
- 服务端未返回明确交集时,不得把记账与报税的状态客户合并为同一批,也不得自行计算或暗示两组客户相同。
- 只陈述接口能够直接支持的事实。不得使用“可能因为”“疑似”“推测”等措辞给重复客户、排除记录或其他数据现象补充原因;`dataWarnings` 没有说明关联关系时,不得声称重复记录与告警中的排除记录有关。
- 代账账套业务如需尾注,只使用“账套名称:<名称>”;不展示 `aaCompanyId` 或 `serviceid`。机构/客户候选和进度结果不追加账套尾注。
- 命令、参数、指标名和输出控制规则只用于内部执行。任何用户可见消息都不得出现 `--metric detail`、`requiresScopeSelection`、`dataWarnings`、`MISSING`、原始 `null` 等内部表示,也不得播报读取路由、确认命令、选择范围或无需选择客户的过程;需要引导后续操作时改用“如需,我可以继续查看客户明细”等业务语言。
- 所有用户可见网页链接必须使用 Markdown 显式链接,不得输出裸地址。官网固定写为 `[柠檬云官网](https://www.ningmengyun.com/)`;结束括号后用标点或空格与后续中文分隔,不得把右括号或说明文字拼入链接目标。
- 不得向用户提及“尾注”“无需尾注”“不追加尾注”等编排概念;不需要的内容直接省略。
- 用户要求直接执行且条件充足时,直接从查询上下文、数据告警或业务结论开始,不输出机构发现数量、候选序号和匹配过程。

### 异常与空结果

- 认证、权限、网络、产品未开通、AI Skill 未启用、数据为空必须保留原始业务含义。
- 不因失败自动重试其他机构、客户、产品、域名或接口;最多按连接器既有规则重试原请求。
- 连接器会在明确的登录超时或 HTTP 401 时自动刷新认证并重试一次;仍失败时如实提示重新登录,不要再次重复同一业务命令。
- 不根据 HTTP 410 单独推断接口下线、地址变更、机构不存在或账号无效;只有 CLI 返回的业务错误正文能够支持时,才说明具体原因。
- 无权限时不透露客户是否存在、是否建账、业务期间或产品状态。
- 除机构级进度中“报税状态缺失按未申报/未完成处理”的明确业务口径外,其他空值不能显示为 0、否或未完成;记账状态缺失仍须如实说明为“暂无法判断”。
- 已明确客户和目标业务,但客户缺少目标产品绑定时,只说明当前业务无法办理的直接原因和必要建议。云发票按上文使用“尚未开通”口径;除非用户主动询问,不展开其他产品绑定、相近客户或替代客户,也不主动推荐改查其他客户。

### 禁止展示

不要展示 API Key、JWT、headers、cookie、接口地址、完整 CLI JSON,以及 `aaCompanyId`、`customerId`、`aaServiceId`、`asid`、`appasid`、员工/部门 ID 等内部标识。代账客户的 `customerCode` 是允许展示的业务编码,不属于本条禁止范围。代账账套尾注也不得例外展示内部 ID。

## 最终回复规则

最终回复使用中文业务语言,优先回答用户问题本身。不要输出 action.py 路径、HTTP 路径、headers、token、appasid、candidateId、完整 CLI JSON、调试日志或不必要的字段名。除普通账套候选确认确有必要展示的 `asid`、`serviceid` 外,不要向用户展示业务单据 ID、客户 ID、供应商 ID、商品 ID 或其他系统内部 ID。代账机构、客户、账套和业务结果一律不展示 `aaCompanyId`、`customerId`、`aaServiceId`、`asid`、`appasid` 或 `serviceid`;但代账客户列表中的 `customerCode` 是业务编码,必须与客户名称一起展示以区分重名客户。AA 机构级客户业务进度以“代账机构:<名称> | 月份:<yyyy-MM> | 统计范围:<名称>”说明查询上下文。

不得把内部规则本身写给用户,例如“无需尾注”“不追加尾注”“按规则不展示”或具体 CLI 参数。需要表达下一步时只说明用户能继续办理的业务。

如果 ACC、SCM、ERP 请求发起或依赖了真实业务数据查询,回复末尾追加一行简短账套尾注。普通账套使用“账套名称:<名称> | serviceid:<serviceid>”;`accountSource=aa` 的代账账套只使用“账套名称:<名称>”,不得展示 `aaCompanyId` 或 `serviceid`。机构列表、客户列表、绑定账套候选列表等账套发现结果不追加尾注。当前上下文缺少尾注所需字段时先执行 `account current` 核验,不要把代账机构名称冒充账套名称,也不要输出“serviceid:未获取”或任何内部 ID。

独立开票最终回复必须按当前开票流程的固定模板和共享输出协议收口;当开票文档要求只输出固定成功或失败文案时,不追加通用账套尾注或其他说明。

当数据为空、被截断、权限不足或筛选条件不完整时,要明确说明范围和限制。不要为了让结果看起来完整而补造数据、猜测金额、猜测期间或猜测业务对象。

用户反馈数据异常、结果不对、不会操作,或明确要求人工、客服、官方帮助时,提示可以前往[柠檬云官网](https://www.ningmengyun.com/),联系在线客服。所有用户可见的网页链接都必须使用 `[链接名称](https://...)` 形式,不得输出裸地址;Markdown 链接结束后用标点或空格与后续中文分隔,不能把右括号或说明文字并入链接目标。独立开票客服入口和二维码优先使用开票流程规定的 `customer_service_link` 与固定模板。

## CLI 快速参考

```text
lemonclaw-cli auth status
lemonclaw-cli skill-root --check
lemonclaw-cli account current
lemonclaw-cli account switch "<产品或账套线索>"
lemonclaw-cli account list
lemonclaw-cli account list --aa-only
lemonclaw-cli aa progress options --aa-company-index <index>
lemonclaw-cli aa progress query --period <yyyy-MM> --scope-type permission_scope --metric customer_overview --metric accounting --metric tax
lemonclaw-cli aa progress export --format excel|pdf
lemonclaw-cli account select --index <index>
lemonclaw-cli account select --product <product> --name "<账套名称>"
lemonclaw-cli account select --product <product> --asid <asid>
lemonclaw-cli account select --product <product> --serviceid <serviceid> --name "<账套名称>"
lemonclaw-cli action search "用户需求"
lemonclaw-cli action show <product> <action>
lemonclaw-cli action doc <product> <action> --doc action
lemonclaw-cli action doc <product> <action> --doc input
lemonclaw-cli action doc <product> <action> --doc output
lemonclaw-cli action run <product> <action> --json-stdin
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.