Install
openclaw skills install @soul-code/contract-reviewerReview contracts and legal agreements (PDF, Word, images) for risks, unfair clauses, missing provisions, and key obligations using SoMark for accurate document parsing. Provides structured risk analysis with severity ratings. Requires SoMark API Key (SOMARK_API_KEY).
openclaw skills install @soul-code/contract-reviewerReview any contract or legal agreement for risks, obligations, and red flags. SoMark first parses the contract into high-fidelity Markdown, preserving clause structure, headings, and formatting. The AI then systematically analyzes the content for risk clauses, imbalanced terms, missing provisions, and key obligations.
Contracts often come as scanned PDFs, multi-column layouts, or image files. SoMark recovers the complete text with structural fidelity — ensuring no clause is missed due to poor text extraction.
In short: parse with SoMark first, then analyze for risks.
Example requests:
Important — API quota notice: Each parse consumes one API call from the user's SoMark quota.
Before running the parser, ask the user:
Wait for the user to confirm before proceeding. Do not run the parser without explicit user confirmation.
Important: Before starting, tell the user that SoMark will parse the contract to preserve its full clause structure, enabling a thorough review that won't miss buried terms due to formatting issues.
API concurrency limit: For the same SOMARK_API_KEY, do not run multiple parsing script invocations concurrently. Wait until the current invocation finishes and the parsed outputs are available before starting another invocation that uses the same API key.
python contract_reviewer.py \
-f <contract_file> \
-o <output_dir> \
--output-formats '["markdown", "json"]' \
--element-formats '{"image": "url", "formula": "latex", "table": "html", "cs": "image"}' \
--feature-config '{"enable_text_cross_page": false, "enable_table_cross_page": false, "enable_title_level_recognition": false, "enable_inline_image": true, "enable_table_image": true, "enable_image_understanding": true, "keep_header_footer": false}'
Script location: contract_reviewer.py in the same directory as this SKILL.md
Supported formats: .pdf .png .jpg .jpeg .bmp .tiff .webp .heic .heif .gif .doc .docx
--output-formats (Optional)This argument is optional in the current script. Pass a JSON array of one or more output formats.
If omitted, the default value is:
["markdown", "json"]
Supported values:
| Value | Description |
|---|---|
markdown | Save the parsed contract as a Markdown file |
json | Save the parsed contract as a JSON output |
Example:
--output-formats '["markdown", "json"]'
--element-formats (Optional)This argument controls how specific element types are rendered in the parser output.
If omitted, the default value is:
{
"image": "url",
"formula": "latex",
"table": "html",
"cs": "image"
}
If you provide this argument, pass the full JSON object.
Supported keys, allowed values, and defaults:
| Key | Allowed values | Default |
|---|---|---|
| image | url, base64, none | url |
| formula | latex, mathml, ascii | latex |
| table | html, image, markdown | html |
| cs | image | image |
Example:
--element-formats '{"image": "url", "formula": "latex", "table": "html", "cs": "image"}'
--feature-config (Optional)This argument controls parser feature switches.
If omitted, the default value is:
{
"enable_text_cross_page": false,
"enable_table_cross_page": false,
"enable_title_level_recognition": false,
"enable_inline_image": true,
"enable_table_image": true,
"enable_image_understanding": true,
"keep_header_footer": false
}
If you provide this argument, pass the full JSON object. All values must be boolean (true or false).
Supported keys and defaults:
| Key | Default | Description |
|---|---|---|
enable_text_cross_page | false | Merge text content across page boundaries |
enable_table_cross_page | false | Merge tables across page boundaries |
enable_title_level_recognition | false | Recognize heading and title levels |
enable_inline_image | true | Include inline image output |
enable_table_image | true | Include table image output |
enable_image_understanding | true | Enable image understanding features |
keep_header_footer | false | Preserve header and footer content |
Example:
--feature-config '{"enable_text_cross_page": false, "enable_table_cross_page": false, "enable_title_level_recognition": false, "enable_inline_image": true, "enable_table_image": true, "enable_image_understanding": true, "keep_header_footer": false}'
--base-url (Optional)This argument overrides the SoMark API base URL. Use it to switch between regional endpoints.
If omitted, the SOMARK_BASE_URL environment variable is used. If that is also unset, the default is https://somark.cn/api/v1 (mainland China).
| Region | URL |
|---|---|
| Mainland China (中国大陆) | https://somark.cn/api/v1 |
| Outside mainland China | https://somark.ai/api/v1 |
Example:
# Mainland China (default)
--base-url "https://somark.cn/api/v1"
# Outside mainland China
--base-url "https://somark.ai/api/v1"
<filename>.md — full contract in Markdown (preserves clause structure)<filename>.json — parsed contract in JSON format (blocks with positions)parse_summary.json — metadata (file path, elapsed time)After the script finishes, read the generated Markdown and perform a structured risk review across these dimensions:
List the primary obligations for each party:
Review each of the following clause types and rate risk as 高 / 中 / 低 / 不存在:
| 条款类型 | 风险等级 | 说明 |
|---|---|---|
| 责任限制 (Limitation of Liability) | ||
| 赔偿条款 (Indemnification) | ||
| 知识产权归属 (IP Ownership) | ||
| 保密义务 (Confidentiality) | ||
| 终止条款 (Termination) | ||
| 违约救济 (Breach & Remedies) | ||
| 自动续约 (Auto-renewal) | ||
| 单方修改权 (Unilateral Amendment) | ||
| 排他性条款 (Exclusivity) | ||
| 竞业禁止 (Non-compete) | ||
| 仲裁/争议解决 (Dispute Resolution) | ||
| 不可抗力 (Force Majeure) |
List any clauses that are:
Identify important clauses that are absent but typically expected for this contract type.
Rate the contract overall: 高风险 / 中等风险 / 低风险
Provide a 2–3 sentence executive summary of the overall risk posture.
Structure the output as:
## 合同审查报告
### 合同概览
[type, parties, term, governing law]
### 核心义务
[table or bullet list by party]
### 风险条款分析
[filled risk table above]
### 重点风险提示
[numbered list of red flags with specific clause references]
### 缺失条款
[list of missing standard provisions]
### 总体风险评级
[rating + executive summary]
### 建议
[actionable next steps: negotiate X, add Y clause, clarify Z language]
If the user has not configured an API key:
Step 1: Ask whether SOMARK_API_KEY is already set — do not ask for the key in chat.
Step 2: Direct them to:
Open "API Workbench" → "APIKey", and create a key in the format sk-******.
Step 3: Ask them to run:
export SOMARK_API_KEY=your_key_here
Step 4: Mention free quota is available:
--output-formats, --element-formats, or --feature-config: ask the user to provide valid JSON syntax.markdown, json.image, formula, table, and cs.feature-config values must be booleans.1107 / Invalid API Key: ask the user to verify SOMARK_API_KEY.2000 / Invalid parameters: check file path and format.