Skywork Document — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Skywork Document (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Generate professional, beautifully formatted documents by calling the Skywork Office Doc API.
This skill requires a SKYWORK_API_KEY to be configured in OpenClaw.
If you don't have an API key yet, please visit: https://skywork.ai
For detailed setup instructions, see: references/apikey-fetch.md
Before calling any script, analyze the user's request and determine:
--language parameter: English, 中文简体, etc.Englishdocx, "PDF" → pdf, "HTML" → html, "Markdown" → mddocxdocx, pdf, html, md--content parameter is like a rewrite queryIMPORTANT:
parse_file.py processes one file at a time. For multiple files, call it multiple times.file_id.Single file:
python3 <skill-dir>/scripts/parse_file.py /path/to/reference.pdfMultiple files (call the script once for each file; you can run these in parallel to speed things up):
# Parse file 1
python3 <skill-dir>/scripts/parse_file.py /path/to/file1.pdf
# Parse file 2
python3 <skill-dir>/scripts/parse_file.py /path/to/file2.xlsx
# Parse file 3
python3 <skill-dir>/scripts/parse_file.py "/path/to/file3 with blank in it.docx"Each script call outputs:
[parse] File: reference.pdf (2,458,123 bytes)
...
[success] File parsed!
File ID: 2032146192467681280
...
PARSED_FILE: {"file_id":"2032146192467681280","filename":"reference.pdf","url":""}Extract all `PARSED_FILE` outputs and collect them into a JSON array:
[
{"file_id":"2032146192467681280","filename":"file1.pdf","url":""},
{"file_id":"2032146192467681281","filename":"file2.xlsx","url":""},
{"file_id":"2032146192467681282","filename":"file3.docx","url":""}
]This array will be passed to create_doc.py via the --files parameter below.
Without reference files:
python3 <skill-dir>/scripts/create_doc.py \
--title "Document_Title" \
--content "Detailed content prompt based on user requirements..." \
--language English \
--format docxWith reference files (use the collected file_ids from Step 1):
python3 <skill-dir>/scripts/create_doc.py \
--title "Analysis_Report" \
--content "Based on the uploaded reference files, create a comprehensive analysis report..." \
--files '[{"file_id":"id1","filename":"file1.pdf","url":""},{"file_id":"id2","filename":"file2.xlsx","url":""}]' \
--language English \
--format docxThe title field should not contain spaces.Output:
[doc] Creating document: "Analysis Report"
...
[success] Document created!
File ID: abc-123
Path: /output/doc/some_file.html
URL: https://...
Time: 15.2sAfter create_doc.py finishes, parse the final JSON output. It contains two ways for the user to access the document — always provide both:
Example reply (adapt wording to user's language):
The document is ready! - Download link: 巴西电网行业及充电桩市场调研报告.docx - Local file: /Users/alice/Downloads/巴西电网行业及充电桩市场调研报告.docxIf file_path is empty (download failed), still provide file_url and inform the user they can download manually.
file - Path to the reference file (required)--json - Output full result as JSON (optional)Key Output: PARSED_FILE: <json> — extract this for Step 2
--title - Document title (required)--content - Content prompt describing what to write (required)--files - JSON array of file objects from parse_file.py (optional)[{"file_id":"xxx","filename":"yyy","url":""}]--language - Output language (optional, default: English)English, 中文简体, 中文繁體, 日本語, 한국어, Français, Deutsch, Español, ...--format - Output format (optional, default: docx)docx, pdf, html, mdparse_file.py outputs file_id → pass to create_doc.py via --files.parsed_content manually; the server retrieves it using file_id.create_doc.py uses SSE (Server-Sent Events) to maintain a long connection and receives real-time progress updates. The script will automatically wait up to 3~10 minutes for completion. No manual polling needed - just wait for the script to finish and it will output the result.create_doc.py, the output JSON contains both file_url (remote download link) and file_path (local path where the file was automatically saved). You MUST proactively return both to the user: the clickable file_url so they can share or open it online, and the file_path so they can locate it immediately on their machine. If file_path is empty, notify the user and provide file_url for manual download.| Error | Solution |
|---|---|
NO_TOKEN / INVALID_TOKEN / 401 | Authentication failed (keep the error code / raw message in the reply). Verify `SKYWORK_API_KEY` is set in OpenClaw or rotate a valid key (see references/apikey-fetch.md). Do not suggest upgrading membership. |
Cannot reach server | Check network connection |
JSON parse error | Use double quotes in --files JSON |
| Insufficient benefit | Script or log may show e.g. Insufficient benefit. Please upgrade your account at {url} — see below |
When you detect the above, reply in the user's current language — do not echo the English message. Use this pattern:
[Upgrade now →](url) or the equivalent in their language.at https://... part).create_doc.py may run for a long time. As SSE events arrive, display each stage to the user. This keeps them informed during the generation.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.