Robust PowerPoint generation with shell_agent primary approach and python-pptx fallback, including working directory verification and inline error debugging
56
63%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./benchmarks/gdpval/skills/ppt-workflow-location-enhanced-877e03/SKILL.mdUse this workflow when:
This workflow provides a resilient approach with two tiers:
Before starting, establish your working directory context:
# Capture current working directory
pwd
# Store for later reference
WORK_DIR=$(pwd)
echo "Working directory: $WORK_DIR"Delegate the PowerPoint creation task to shell_agent with explicit specifications:
Use shell_agent to create a PowerPoint presentation with:
- Specify the exact number of slides needed
- Define the content/topic for each slide
- Request the file be saved with a clear filename (e.g., presentation.pptx)
- Ask the agent to confirm the file path after creation using: echo "FILE_PATH: $(pwd)/presentation.pptx"
- Request that any errors be printed to stderr with full tracebacksExample task description:
Create a PowerPoint presentation with 10 slides covering [topic]. Each slide should have a title and bullet points. Save it as presentation.pptx in the current working directory. After creation, run: echo "FILE_PATH: $(pwd)/presentation.pptx" and report any errors with full tracebacks.Wait for shell_agent response. If successful with file path confirmed, proceed to Step 4. If shell_agent fails or returns opaque errors, proceed to Step 2.
When shell_agent fails, create and execute a Python script directly:
Write the PowerPoint generation script to a .py file first:
# save as generate_pptx.py
from pptx import Presentation
from pptx.util import Inches, Pt
import os
# Verify working directory
print(f"Working directory: {os.getcwd()}")
# Create presentation
prs = Presentation()
# Slide 1: Title slide
slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Your Title"
subtitle.text = "Your Subtitle"
# Additional slides (add as needed)
for i in range(2, 11):
slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
content = slide.placeholders[1]
title.text = f"Slide {i} Title"
content.text = f"• Bullet point 1\n• Bullet point 2\n• Bullet point 3"
# Save with full path verification
output_path = os.path.join(os.getcwd(), "presentation.pptx")
prs.save(output_path)
print(f"FILE_PATH: {output_path}")
print(f"File size: {os.path.getsize(output_path)} bytes")Run the script with stderr redirected to capture actual errors:
# Execute with full error output capture
python generate_pptx.py 2>&1 | tee execution_log.txt
# Or if using run_shell tool, ensure 2>&1 is included
python generate_pptx.py 2>&1Critical: The 2>&1 redirect ensures Python exceptions are captured, not masked as "unknown error".
Check the execution log for:
FILE_PATH: confirmation lineexecution_log.txtPowerPoint files may be in nested workspace directories. Use find to locate them:
# Find all .pptx files in the workspace
find . -name "*.pptx" -type f 2>&1
# Or search for a specific filename
find . -name "presentation.pptx" -type f 2>&1
# If not found, search broader (may require elevated permissions)
find /workspace -name "*.pptx" -type f 2>/dev/nullExpected output format:
./presentation.pptx
or
./workspace/task_123/output/presentation.pptxOnce located, copy the file to your working directory:
# Copy the found file to current directory
cp /path/to/found/presentation.pptx .
# Or move it if you prefer
mv /path/to/found/presentation.pptx .
# Verify copy succeeded
ls -la presentation.pptxConfirm the file exists and is valid:
# List the file with details
ls -la presentation.pptx
# Check file size to ensure it's not empty (should be > 0 bytes)
FILE_SIZE=$(stat -f%z presentation.pptx 2>/dev/null || stat -c%s presentation.pptx 2>/dev/null)
echo "File size: $FILE_SIZE bytes"
# Verify it's a valid PowerPoint file
file presentation.pptx
# Expected: "Microsoft PowerPoint 2007+"
# If python-pptx was used, verify slide count
python -c "from pptx import Presentation; prs=Presentation('presentation.pptx'); print(f'Slide count: {len(prs.slides)}')" 2>&1When errors occur, use these commands to diagnose:
# Check if python-pptx is available
python -c "import pptx; print(pptx.__version__)" 2>&1
# Check current directory permissions
ls -la .
ls -la ..
# Test write permissions
touch test_write.txt && rm test_write.txt && echo "Write permissions OK"
# Check Python path
which python
python --version
# Verify no stale files interfering
find . -name "*.pptx" -type f -mtime -1 2>&1# Step 0: Verify working directory
pwd
# Output: /workspace/task_abc
# Step 1: shell_agent attempt (via task delegation)
# If shell_agent fails with opaque errors...
# Step 2: Fallback to direct Python
cat > generate_pptx.py << 'EOF'
from pptx import Presentation
import os
print(f"Working directory: {os.getcwd()}")
prs = Presentation()
slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(slide_layout)
slide.shapes.title.text = "Title Slide"
output_path = os.path.join(os.getcwd(), "presentation.pptx")
prs.save(output_path)
print(f"FILE_PATH: {output_path}")
EOF
python generate_pptx.py 2>&1 | tee execution_log.txt
# Output: Working directory: /workspace/task_abc
# Output: FILE_PATH: /workspace/task_abc/presentation.pptx
# Step 3: Locate (if needed)
find . -name "*.pptx" -type f
# Output: ./presentation.pptx
# Step 4: Copy (if in nested directory)
# (skip if already in working directory)
# Step 5: Verify
ls -la presentation.pptx
# Output: -rw-r--r-- 1 user user 45632 Jan 15 10:30 presentation.pptx
python -c "from pptx import Presentation; prs=Presentation('presentation.pptx'); print(f'Slide count: {len(prs.slides)}')" 2>&1
# Output: Slide count: 1| Problem | Solution |
|---|---|
| shell_agent returns "unknown error" | Immediately fall back to Step 2; add 2>&1 to capture actual exceptions |
| File not found with find | Search broader: find /workspace -name "*.pptx" 2>/dev/null; check if script executed at all |
| File is 0 bytes | Re-run Python script; check for exceptions in execution_log.txt |
| Permission denied | Check directory permissions with ls -la; try creating in /tmp first |
| Multiple .pptx files found | Use more specific search: find . -name "*presentation*.pptx" -type f |
| python-pptx not installed | Try pip install python-pptx or use alternative library |
| Script executes but no file created | Check working directory mismatch; add explicit os.chdir() in script |
The workflow is complete when:
file command identifies it as Microsoft PowerPoint formatc5a9c4b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.