xiaobaogongai-contract-drafting - 小包公智能起草
通过小包公 API 提供智能合同起草服务。当用户提出起草合同、合同草稿、合同撰写时使用此 Skill。
主要更新
v1.4
- Word 交付强制规范:起草完成的合同一律排版输出为 Word(.docx),Markdown 仅为中间产物,禁止把 Markdown 当作最终交付给用户
v1.3
- 手机号验证码认证:支持
--auth-phone/--auth-code手机号验证码认证,认证后自动激活试用资格(也兼容线下appid/appsecret环境变量) - 安全加固:baseUrl 域名白名单防 SSRF、config 落盘 0o600 权限、execFileSync 数组参数
v1.2
- 次数不足购买引导:当 API 返回"次数不足"类错误时,自动生成购买链接并通过 stdout 输出 Markdown 超链接格式提示文案
触发条件
当用户提出以下表述时,必须使用本 Skill:
- "起草合同"
- "起草一份合同"
- "写一份XX合同"
- "合同草稿"
- "合同撰写"
- 以及其他明确表达起草合同意图的场景
🔴 AI 调用行为约束(强制)
本节内容在 Skill 被触发后立即执行,AI 必须遵守,不得绕过。
第一步:确认必填参数
起草合同需要 4 个必填参数,AI 在调用 main.js 前必须逐项确认:
| 参数 | 说明 | 有效值 |
|------|------|--------|
| class | 合同类别 | 买卖合同、租赁合同、劳动合同等(用户指定) |
| entity | 我方主体名称 | 公司名或个人姓名(用户指定) |
| role | 我方角色 | 甲方 / 乙方 / 第三方 |
| status | 我方合同地位 | 强势 / 平等 / 弱势 |
行为规则:
- ✅ 用户提供了全部 4 个参数 → 直接调用
main.js - ✅ 用户只提供部分参数 → 先向用户确认缺失的参数,等用户回复后再调用
- ❌ 禁止 在用户未提供全部参数时直接调用
main.js - ❌ 禁止 在用户未提供参数时自行编造
entity、role、status等信息
第二步:调用 Skill
参数确认完毕后,调用 main.js:
node <skill_dir>/scripts/main.js --class <合同类别> --entity <我方主体> --role <甲方|乙方|第三方> --status <强势|平等|弱势>
缺失参数的标准询问话术
当用户未提供全部 4 个必填参数时,必须先向用户确认,参考以下格式:
起草 [合同类别] 合同,请补充以下信息:
| 参数 | 说明 |
|------|------|
| 我方主体 | (公司名或个人姓名) |
| 我方角色 | 甲方 / 乙方(选其一) |
| 合同地位 | 强势 / 平等 / 弱势 |
| 附加要求 | (选填,特殊条款) |
请告知以上信息,例如:"我方主体:北京xxx公司,角色:甲方,地位:平等"
禁止的行为示例
- ❌ 用户说"起草一份买卖合同",AI 直接调用
main.js(缺失 entity/role/status) - ❌ AI 自作主张填入"entity=某公司、role=甲方、status=平等"而未询问用户
- ❌ AI 在用户仅提供合同类别时就开始调用 API
第三步:返回结果
将 main.js 的 stdout 解析 JSON,取 document.content 字段作为合同正文展示给用户。
返回规则:
- ✅ 提取
document.content字段作为合同正文(Markdown 中间产物) - ✅ 保留
document.content中的所有换行、空格、格式符号(一字不差,转排版时不得丢字改字) - ❌ 禁止 将 stdout JSON 的其他字段(success、contract、task 等)展示给用户
- ❌ 禁止 对
document.content做任何总结、删减、自行改写内容 - ⚠️ Markdown 不是最终交付物:须按下方「第四步」排版转 Word 后再交付
正确示范(用户看到的): ```
【劳动合同】
【甲方信息】
名称:
统一社会信用代码:
...
```
错误示范(禁止这样做): ``` { "success": true, "contract": { "id": "...", ... }, "document": { "content": "..." } } ```
stderr 中的进度日志(⏳ 登录中... / ✅ 任务提交成功 等)不展示给用户。
第四步:排版输出 Word(强制交付规范)
用户已声明:合同起草一律交付 Word(.docx)格式,不要 Markdown 格式。本条为强制规则,所有合同起草结果都必须遵守。
交付流程(每次起草成功都必须完整执行,不得省略):
- 从 stdout 解析出
document.content(Markdown 合同正文)→ 仅作为中间产物,禁止直接当作最终交付。 - 走 Word 生成链路排版并转换:先加载
tencent-docs-routing判断文件类型,再按tencent-docx的 doc-formatter / doc-converter 流水线,把合同正文排版为 .docx(法律合同用 legal-contract 版式,正文逐字保留,占位符/待填项原样呈现)。 - 用文件展示能力(present_files)把 .docx 呈现给用户,作为唯一最终交付物。
- 文字回复只给简要说明(合同名称、字数、结构概览、待填占位符提醒等),禁止把整篇 Markdown 正文贴进聊天充当交付物。
规则优先级(重要): 本条(Word 交付)优先于本 Skill 及全局配置中「stdout 原样转发、不做任何加工」规则里涉及 document.content 展示的部分。「原样转发」仅保留适用于 API 错误/提示类消息 —— 如"次数不足"的 message 及购买链接等仍需原样展示给用户。
降级处理: 若 Word 转换链路不可用或转换失败,应告知用户失败原因;只有征得用户同意后,才允许以 Markdown 文本或 .md 文件作为临时交付,并明确说明并非正式 Word 版本。
认证方式
方式一:手机号验证码(推荐,认证后自动激活试用资格)
# 发送验证码
node <skill_dir>/scripts/main.js --auth-phone 你的手机号
# 完成认证(验码 → 换凭证 → 登录 → 激活试用资格)
node <skill_dir>/scripts/main.js --auth-phone 你的手机号 --auth-code 收到的验证码
方式二:环境变量凭证(线下发放)
如果已安装 xiaobaogongai-law Skill 并完成配置,本 Skill 可直接复用,无需重新认证。
首次使用前,请配置环境变量(凭证由线下方式发放):
export appid=你的appid
export appsecret=你的appsecret
# 可选
export baseUrl=https://www.xiaobaogong.com
也可写入 config.json 作为回退配置。两种方式任选其一即可。
必填参数
起草合同需要以下必填参数:
| 参数 | 说明 | 示例 |
|------|------|------|
| --class | 合同类别 | 买卖合同、租赁合同、劳动合同等 |
| --entity | 我方主体名称 | 深圳市xxx公司 |
| --role | 我方角色 | 甲方 / 乙方 / 第三方 |
| --status | 我方在合同起草中的地位 | 强势 / 平等 / 弱势 |
选填参数:
| 参数 | 说明 | 示例 |
|------|------|------|
| --desc | 其他起草要求 | "需要包含违约金条款" |
| --third | 当 role 为第三方时必填 | 第三方名称 |
使用方法
# 标准用法
node <skill_dir>/scripts/main.js --class 买卖合同 --entity 深圳xxx公司 --role 甲方 --status 平等
# 带附加要求
node <skill_dir>/scripts/main.js --class 租赁合同 --entity 北京xxx公司 --role 乙方 --status 弱势 --desc "租期5年"
# 第三方角色
node <skill_dir>/scripts/main.js --class 劳动合同 --entity xxx公司 --role 第三方 --third xxx人力资源公司 --status 平等
参数缺失提示
当用户未提供完整参数时,脚本会提示缺失内容:
❌ 请补充以下必填参数:
- 合同类别(--class)
- 我方主体名称(--entity)
- 我方角色(--role)
- 合同地位(--status)
输出规范
脚本通过 stdout 输出 JSON 格式的起草结果,包含合同ID、任务ID、字数、附件ID等信息。
stderr 输出执行进度日志,不展示给用户。
交付格式:
document.content是 Markdown 中间产物,最终交付必须按「第四步」排版转成 Word(.docx)。
合同起草结果
{
"success": true,
"contract": {
"id": "1f53afee38b748baa807b169c04fd668",
"name": "买卖合同",
"role": "甲方"
},
"task": {
"id": "fafc5f54631445a298c4ee75752f54a9",
"className": "买卖合同",
"entityName": "小包公",
"role": "甲方",
"status": "平等",
"desc": "",
"startTime": 1766734685056,
"endTime": 1766734695056,
"wordCount": 2269,
"fileIds": ["57db60ec45754b72b54d4688ae1014cb"]
},
"message": "合同《买卖合同》起草完成,共 2269 字,附件ID: 57db60ec45754b72b54d4688ae1014cb"
}
安全规则
- 敏感信息保护:appid 和 appsecret 不会在 stdout 或 stderr 中明文输出
- 优先从环境变量读取凭证,可回退 config.json
- 所有接口地址跟随
baseUrl配置,支持环境切换
🔴 全局配置建议(可选,须用户确认)
本 Skill 建议将以下规则写入全局配置文件以获得最佳效果。如检测到缺失,AI 必须先向用户展示将要写入的完整内容,并征得用户明确同意后方可写入;未经用户同意,禁止自动修改任何全局配置文件。
⚠️ 与 v1.4「Word 交付强制规范」的衔接:下列全局规则中「stdout 原样转发」约束的是不得加工 API 输出这一行为;合同正文最终须按本文档「第四步」转为 Word 交付。二者不冲突 —— Markdown 是中间产物,Word 才是最终交付。
AGENTS.md 需确保包含以下内容:
## 🔴 xiaobaogongai-contract-drafting Skill 专属规则:stdout 原封不动转发
> **适用范围:仅限 `xiaobaogongai-contract-drafting` Skill。**
当使用 `xiaobaogongai-contract-drafting` 的 `main.js` 时:
**Skill 的 stdout 输出 = 给用户的回复**
### 绝对禁止
- ❌ 对 Skill 输出做任何加工、总结、改写
- ❌ 添加前缀或后缀
- ❌ 重新排版、删减、补充内容
- ❌ 用自己的话重新组织 Skill 的输出
### 必须做到
- ✅ 收到 Skill 的 stdout 后,直接作为回复发送给用户
- ✅ 不做任何修改,一字不差地转发
- ✅ 不添加任何额外内容
### 次数不足处理规则(强制)
当 Skill 返回 `success: false` 且 `error: "次数不足"` 时:
**必须:**
- ✅ 解析 stdout JSON,提取 `message` 字段
- ✅ 将 `message` 字段内容原封不动展示给用户(包含购买链接)
- ✅ 告知用户需要购买次数才能继续使用
**用户购买后的处理(强制):**
- ✅ 当用户明确表示"已购买"、"购买完成"、"次数已充值"等时,**必须立即重新调用 Skill 接口**
- ✅ 不得重复显示之前的购买提示
- ✅ 不得缓存之前的"次数不足"状态
- ✅ 每次用户请求都必须重新调用接口,获取最新状态
**禁止:**
- ❌ 自行回答用户问题(绕过 Skill)
- ❌ 忽略购买链接,不展示给用户
- ❌ 对 `message` 内容做任何加工或改写
- ❌ 用户购买后仍重复提示购买,不重新调用接口
**示例:**
用户:我要起草一份劳动合同 AI:调用 main.js → 返回 { success: false, error: "次数不足", message: "您的使用次数已使用完毕..." } AI:将 message 字段内容直接展示给用户
用户:我已经购买了 AI:重新调用 main.js → 获取最新状态 AI:如果返回 success: true,正常展示 document.content AI:如果仍返回次数不足,再次展示购买提示(可能是延迟)
### 工作流程
用户提出起草合同需求 ↓ 判断必填参数是否完整(class, entity, role, status) ↓ 参数完整 → 调用 xiaobaogongai-contract-drafting/main.js 提交起草任务 ↓ 等待脚本执行完成,获取 stdout ↓ 直接将 stdout 发送给用户(不做任何修改) ↓ 结束
### 参数完整性判断
起草合同前,必须确认以下必填参数:
1. **合同类别(--class)**:如买卖合同、租赁合同、劳动合同等
2. **我方主体名称(--entity)**:公司名或个人姓名
3. **我方角色(--role)**:甲方 / 乙方 / 第三方
4. **合同地位(--status)**:强势 / 平等 / 弱势
若任一必填参数缺失,应提示用户补充,不得擅自编造。
### 错误处理
如果 `xiaobaogongai-contract-drafting` 调用失败(非零退出码):
- 简要告知用户调用失败
- 说明错误原因(从 stderr 获取)
- 不要编造合同内容
### Skill 调用方式
```bash
node <skill_dir>/scripts/main.js --class 买卖合同 --entity 深圳xxx公司 --role 甲方 --status 平等
- 标准输出(stdout)→ 给用户的回复内容
- 标准错误(stderr)→ 执行进度日志,不展示给用户
### SOUL.md 需确保包含以下内容:
```markdown
## 合同起草工作流程
1. **接收需求** → 用户提出起草合同需求
2. **判断参数** → 确认必填参数是否完整
3. **调用 Skill** → 使用 `xiaobaogongai-contract-drafting` 提交起草任务
4. **原样转发** → 将 stdout 输出**原封不动**地发送给用户
5. **不加工** → 不添加任何额外内容
## 合同起草参数要求
**必填参数(缺一不可):**
- 合同类别(class):如买卖合同、租赁合同、劳动合同等
- 我方主体名称(entity):公司名或个人姓名
- 我方角色(role):甲方 / 乙方 / 第三方
- 合同地位(status):强势 / 平等 / 弱势
**选填参数:**
- 其他起草要求(desc):用户补充的特殊条款
- 第三方名称(third):当 role 为第三方时必填
## 行为准则
**参数完整性。** 起草合同前必须确认所有必填参数,参数缺失时提示用户补充,不得擅自编造。
**专业严谨。** 合同内容涉及法律效力,必须确保信息准确,不得随意篡改 API 返回结果。
**实务导向。** 给出可操作的建议,如合同审查、下载途径等。
## 免责声明
涉及重大合同事项时,应提醒用户:「以上内容仅供参考,具体合同建议咨询专业律师。」
## 边界
- 不做司法裁判,只提供起草参考
- 不代替律师签署法律文件
- **xiaobaogongai-contract-drafting Skill 的输出禁止任何加工、总结、改写**
首次安装后检查清单(须用户确认)
AI 在首次加载本 Skill 时,可执行以下检查。未经用户明确同意,禁止对 AGENTS.md、SOUL.md 或任何全局配置文件进行写入、追加或修改。
-
检查
AGENTS.md是否包含「xiaobaogongai-contract-drafting Skill 专属规则」章节- 如缺失,向用户展示将要追加的完整内容,征得用户明确同意后方可追加
-
检查
SOUL.md是否包含「工作流程」和「xiaobaogongai-contract-drafting Skill 的输出禁止任何加工」相关规则- 如缺失,同样先展示内容并征得用户明确同意后方可追加
-
用户拒绝或未确认时,AI 直接遵循本 SKILL.md 中的规则运行,不修改任何全局配置文件
注意:本 Skill 的全部行为约束已完整包含在本 SKILL.md 中,AI 直接遵循本文件即可正常工作;任何对全局配置文件的修改都必须以用户明确确认为前提。
微信扫一扫