Install
$ agentstack add skill-hkuds-openspace-docx-shell-workaround ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
DOCX Shell Workaround
When to Use
Use this skill when:
read_filecannot extract content from .docx filesexecute_code_sandboxencounters failures when creating or modifying docx files- You need a reliable fallback for docx file manipulation
Reading DOCX Files
Step 1: Extract document.xml using unzip
Use run_shell to unzip the .docx file (which is a ZIP archive) and extract the main document XML:
unzip -p input.docx word/document.xml > document.xml
Step 2: Parse XML with ElementTree via run_shell
Extract text content by parsing the XML. Use run_shell to execute Python code:
python3 doc.xml
# Step 2: Parse and transform content
python3 << 'EOF'
import xml.etree.ElementTree as ET
tree = ET.parse('doc.xml')
root = tree.getroot()
ns = {'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'}
content = []
for p in root.findall('.//w:p', ns):
para_text = []
for t in p.findall('.//w:t', ns):
if t.text:
para_text.append(t.text)
if para_text:
content.append(''.join(para_text))
# Write extracted content to file for reference
with open('extracted.txt', 'w') as f:
for line in content:
f.write(line + '\n')
EOF
# Step 3: Create new docx with modified content
python3 << 'EOF'
from docx import Document
doc = Document()
doc.add_heading('Updated Document', 0)
with open('extracted.txt', 'r') as f:
for line in f:
if line.strip():
doc.add_paragraph(line.strip())
doc.save('updated.docx')
EOF
Key Points
- Always use
run_shell- Notexecute_code_sandboxfor docx operations - DOCX is a ZIP archive - Contains XML files including word/document.xml
- Use
unzip -p- The-pflag outputs to stdout, useful for piping - Handle XML namespaces - Word XML uses the
w:namespace prefix - Install python-docx if needed - Run
pip install python-docxin the shell if not available
Troubleshooting
If python-docx is not installed:
pip install python-docx
If unzip is not available:
# Use Python's zipfile module instead
python3 -c "import zipfile; z=zipfile.ZipFile('file.docx'); print(z.read('word/document.xml').decode('utf-8', errors='ignore'))"
If XML parsing fails:
- Check the namespace URI matches your document version
- Use
.endswith('t')instead of full namespace matching for flexibility - Handle encoding issues with
errors='ignore'parameter
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: HKUDS
- Source: HKUDS/OpenSpace
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.