원클릭으로
document-gen-resilient-workflow
Robust document generation with engine fallback chain, error diagnostics, and Python alternatives
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Robust document generation with engine fallback chain, error diagnostics, and Python alternatives
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Delegate tasks to OpenSpace — a full-stack autonomous worker for coding, DevOps, web research, and desktop automation, backed by an extensive MCP tool and skill library. Skills auto-improve through use, reducing token consumption over time. A cloud community lets agents share and collectively evolve reusable skills.
Incremental audio production with duration mismatch handling, adaptive stem extension, and pre-mix alignment verification
Audio production with diagnostic analysis, timecode parsing from documents, and verified export workflow
Incremental audio production with duration alignment handling, per-stem verification, and adaptive extension strategies
Step-by-step audio production with per-stem verification, timing alignment, and incremental quality gates
End-to-end audio production workflow with stems, effects, archiving, and verification
| name | document-gen-resilient-workflow |
| description | Robust document generation with engine fallback chain, error diagnostics, and Python alternatives |
Use this skill when document generation tasks encounter tool errors or failures, especially:
run_shell commands return 'unknown error' without diagnostic detailsshell_agent has failed multiple times on similar tasksSplit document generation into observable, verifiable steps with explicit error capture and progressive fallback:
write_file for source Markdown with full visibility'unknown error' from run_shell: This typically indicates:
Solution: Use explicit error capture with 2>&1 and verify tool availability first:
run_shell
command: pandoc --version 2>&1 || echo "PANDOC NOT AVAILABLE"
Before starting conversion, verify your environment:
## Pre-Flight Checks
### Check 1: Verify working directory
run_shell
command: pwd && ls -la
### Check 2: Verify pandoc availability
run_shell
command: pandoc --version 2>&1 | head -3 || echo "PANDOC MISSING"
### Check 3: Check LaTeX engines
run_shell
command: which pdflatex xelatex wkhtmltopdf 2>&1 || echo "Some engines missing"
### Check 4: Check Python libraries (fallback option)
run_shell
command: python3 -c "import fpdf; print('fpdf OK')" 2>&1 || echo "fpdf missing"
run_shell
command: python3 -c "import docx; print('python-docx OK')" 2>&1 || echo "python-docx missing"
Confirm you're in the correct directory and can write files:
run_shell
command: pwd && echo "Test write" > /tmp/workspace_test_$$.txt && ls -la /tmp/workspace_test_$$.txt && rm /tmp/workspace_test_$$.txt
If this fails, you may have directory permission issues. Use absolute paths for all files.
Write document content as Markdown to a source file:
write_file
path: /tmp/document_source.md
content: |
# Document Title
## Section 1
Content here...
Only needed for PDF conversion via LaTeX engines. DOCX and HTML handle Unicode natively.
Create a sanitized version replacing LaTeX-problematic characters:
write_file
path: /tmp/document_source_sanitized.md
content: |
# Document Title
[Same content with: em-dash → --, curly quotes → straight, → arrows → text, etc.]
Common replacements (see full table below):
| Original | Replace With |
|---|---|
— (em dash) | -- |
" " (curly quotes) | " " (straight) |
… (ellipsis) | ... |
→ ← (arrows) | -> <- |
✓ ✗ | [x] [ ] |
© ® ™ | (c) (r) (tm) |
Alternative: Use sanitization script (see Scripts section below).
Try multiple methods in order of preference. Capture stderr explicitly for diagnosis.
run_shell
command: pandoc /tmp/document_source.md -o output.docx 2>&1 && echo "SUCCESS" || echo "FAILED: $?"
If this fails, try with explicit UTF-8 flag:
run_shell
command: pandoc /tmp/document_source.md -f markdown+utf8 -o output.docx 2>&1
Try engines in this order until one succeeds:
run_shell
command: pandoc /tmp/document_source_sanitized.md -o output.pdf 2>&1 | tee /tmp/pdf_error.log && echo "PDF SUCCESS"
If Method B fails, check error log and try next engine:
run_shell
command: pandoc /tmp/document_source_sanitized.md --pdf-engine=xelatex -o output.pdf 2>&1 | tee /tmp/pdf_error.log && echo "PDF SUCCESS"
If xelatex fails:
run_shell
command: pandoc /tmp/document_source_sanitized.md --pdf-engine=wkhtmltopdf -o output.pdf 2>&1 | tee /tmp/pdf_error.log && echo "PDF SUCCESS"
If all pandoc methods fail, use Python libraries:
Option C1: FPDF2 for PDF
execute_code_sandbox
language: python
code: |
from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Document Title')
pdf.ln(20)
pdf.set_font('Arial', '', 12)
pdf.multi_cell(0, 10, 'Your content here...')
pdf.output('output.pdf')
print('PDF created successfully')
Option C2: python-docx for DOCX
execute_code_sandbox
language: python
code: |
from docx import Document
doc = Document()
doc.add_heading('Document Title', 0)
doc.add_paragraph('Your content here...')
doc.save('output.docx')
print('DOCX created successfully')
Don't just check existence—verify files are valid:
run_shell
command: ls -lh output.* 2>&1
run_shell
command: file output.docx output.pdf 2>&1
For DOCX, verify content:
run_shell
command: unzip -p output.docx word/document.xml 2>&1 | head -50 || echo "Cannot read DOCX"
For PDF, check page count:
run_shell
command: pdfinfo output.pdf 2>&1 | grep Pages || echo "pdfinfo not available"
Alternative verification via Python:
execute_code_sandbox
code: |
import os
for f in ['output.docx', 'output.pdf', 'output.html']:
if os.path.exists(f):
size = os.path.getsize(f)
print(f'{f}: {size} bytes')
else:
print(f'{f}: NOT FOUND')
# Generate Quarterly Report (DOCX + PDF)
## Step 1: Pre-flight checks
run_shell
command: pandoc --version 2>&1 | head -1
## Step 2: Write Markdown source
write_file
path: /tmp/quarterly_report.md
content: |
# Quarterly Business Report
## Executive Summary
Q4 performance exceeded expectations...
## Key Metrics
- Revenue: $1.2M
- Growth: 15%
## Recommendations
Continue current strategy...
## Step 3: Create sanitized version for PDF
write_file
path: /tmp/quarterly_report_sanitized.md
content: |
# Quarterly Business Report
## Executive Summary
Q4 performance exceeded expectations...
[Rest of content with special chars replaced]
## Step 4: Generate DOCX
run_shell
command: pandoc /tmp/quarterly_report.md -o quarterly_report.docx 2>&1 && echo "DOCX OK"
## Step 5: Generate PDF (try xelatex for Unicode safety)
run_shell
command: pandoc /tmp/quarterly_report_sanitized.md --pdf-engine=xelatex -o quarterly_report.pdf 2>&1 && echo "PDF OK"
## Step 6: Verify outputs
run_shell
command: ls -lh quarterly_report.* && file quarterly_report.*
| Character | Unicode | Issue | Safe Replacement |
|---|---|---|---|
— | U+2014 | LaTeX incompatible | -- |
– | U+2013 | LaTeX incompatible | - |
" " | U+201C/U+201D | Encoding errors | " (straight) |
' ' | U+2018/U+2019 | Encoding errors | ' (straight) |
… | U+2026 | May not render | ... |
→ | U+2192 | LaTeX incompatible | -> or to |
← | U+2190 | LaTeX incompatible | <- |
↑ ↓ | U+2191/U+2193 | LaTeX incompatible | ^ v |
• | U+2022 | Font-dependent | - or * |
✓ | U+2713 | May not render | [x] |
✗ | U+2717 | May not render | [ ] |
★ ● | U+2605/U+25CF | May not render | * - |
© | U+00A9 | May require packages | (c) |
® | U+00AE | May require packages | (r) |
™ | U+2122 | May require packages | (tm) |
é ñ ü | Various | Font-dependent | Use xelatex or replace |
Save this script for repeated use:
#!/bin/bash
# sanitize_for_pdf.sh - Replace problematic unicode chars for LaTeX/PDF
set -e
if [ -z "$1" ]; then
echo "Usage: $0 <input.md> [output.md]"
exit 1
fi
INPUT="$1"
OUTPUT="${2:-${1%.md}_sanitized.md}"
sed -e 's/—/--/g' \
-e 's/–/-/g' \
-e 's/"\([^"]*\)"/"\1"/g' \
-e "s/'\([^']*\)'/\'\1\'/g" \
-e 's/…/.../g' \
-e 's/→/->/g' \
-e 's/←/<-/g' \
-e 's/↑/^/g' \
-e 's/↓/v/g' \
-e 's/•/-/g' \
-e 's/✓/[x]/g' \
-e 's/✗/[ ]/g' \
-e 's/★/*/g' \
-e 's/©/(c)/g' \
-e 's/®/(r)/g' \
-e 's/™/(tm)/g' \
"$INPUT" > "$OUTPUT"
echo "Sanitized: $INPUT -> $OUTPUT"
Usage:
run_shell
command: chmod +x sanitize_for_pdf.sh && ./sanitize_for_pdf.sh /tmp/document_source.md /tmp/document_source_sanitized.md
Diagnosis:
run_shell
command: pandoc --version 2>&1
run_shell
command: echo "test" | pandoc -f markdown -t plain 2>&1
If pandoc works in isolation, the issue is likely:
Solutions in order:
--pdf-engine=xelatex--pdf-engine=wkhtmltopdfapt-get install texlive-latex-recommended texlive-fonts-recommendedSolutions:
pandoc -f markdown+utf8file -i source.mdrun_shell
command: iconv -f UTF-8 -t UTF-8 source.md -o source_utf8.md
Diagnosis:
run_shell
command: pdfinfo output.pdf 2>&1
execute_code_sandbox
code: |
import fitz # PyMuPDF
doc = fitz.open('output.pdf')
print(f'Pages: {doc.page_count}')
if doc.page_count > 0:
page = doc[0]
print(f'Text: {page.get_text()[:200]}')
Solutions:
Diagnosis:
run_shell
command: unzip -l output.docx 2>&1 | head -10
Solutions:
--reference-doc with valid templatepandoc -v input.md -o output.docx 2>&1Diagnosis:
run_shell
command: pwd && find /tmp -name "*.docx" -o -name "*.pdf" 2>/dev/null | head -10
Solutions:
cd /path/to/workspace && ...run_shell
command: cp /tmp/output.docx ./output.docx
Solutions:
df -h .| Situation | Recommended Approach |
|---|---|
| Simple DOCX generation, no special chars | shell_agent (faster) |
| PDF with Unicode/symbols | Manual workflow with sanitization |
| Multiple 'unknown error' failures | Manual workflow with error capture |
| Need to debug conversion issues | Manual workflow (visible steps) |
| Time-critical, simple format | shell_agent |
| Critical document, must succeed | Manual workflow with fallbacks |
For reliability with less manual effort:
## Hybrid Workflow
1. **First attempt**: `shell_agent` with clear task description
2. **On first error**: Switch to manual workflow:
- `write_file` for source
- `run_shell` with error capture (2>&1)
- Verify with explicit checks
3. **On repeated errors**: Use Python library fallback (execute_code_sandbox)
This balances speed with reliability.
workspace-path-troubleshooting: For diagnosing file location issuespdf-verification-cli: For validating generated PDFswrite-file-fallback-report: For content-first document creation when web sources failQUICK START: Generate Document in 3 Formats
1. Write source: write_file → /tmp/doc.md
2. Sanitize (PDF only):
Replace: — → --, "" → "", … → ...
3. Convert with error capture:
DOCX: pandoc /tmp/doc.md -o out.docx 2>&1
PDF: pandoc /tmp/doc_sanitized.md --pdf-engine=xelatex -o out.pdf 2>&1
HTML: pandoc /tmp/doc.md -o out.html 2>&1
4. Verify: ls -lh out.* && file out.*
5. If pandoc fails: Use execute_code_sandbox with fpdf2 or python-docx