officecli-accessibility/SKILL.md
Accessibility checks and remediation for Office documents. Alt-text validation, color contrast, reading order, heading hierarchy, and WCAG 2.1 AA compliance.
npx skillsauth add lidge-jun/cli-jaw-skills officecli-accessibilityInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Overlay skill for OfficeCLI that ensures documents meet accessibility standards. Use this skill for pre-delivery QA, compliance audits, or when creating documents for public distribution.
| Standard | Scope | Key Requirement | |----------|-------|-----------------| | WCAG 2.1 AA | Web + Docs | Perceivable, Operable, Understandable, Robust | | Section 508 | US Federal | Electronic docs must be accessible | | EN 301 549 | EU | ICT accessibility (includes Office docs) | | PDF/UA | PDF output | Tagged PDF structure |
Every image, chart, and non-text element needs alternative text for screen readers.
# PPTX: query for pictures, check alt attribute
officecli query slides.pptx 'picture' --json
# Look for entries where "alt" is empty or missing
# DOCX: find all pictures
officecli query report.docx 'picture' --json
# PPTX: filter to only pictures with alt-text present
officecli query slides.pptx 'picture[alt]' --json
# Compare count with total pictures to find gaps
# Add descriptive alt-text to a picture
officecli set slides.pptx '/slide[1]/picture[1]' \
--prop alt="Bar chart showing Q4 revenue by region: East $2.1M, West $1.8M, Central $1.5M"
# Add alt-text to a shape used as a visual element
officecli set slides.pptx '/slide[1]/shape[2]' \
--prop alt="Company logo - Acme Corp"
# Mark decorative images (empty alt = explicitly decorative)
officecli set slides.pptx '/slide[1]/picture[3]' --prop alt=""
| ✅ Good Alt-Text | ❌ Bad Alt-Text | |------------------|----------------| | "Bar chart showing Q4 revenue by region" | "chart" | | "Photo of team at 2026 annual meeting" | "image1.jpg" | | "Logo of Acme Corporation" | "logo" | | "" (empty — decorative only) | "decorative image" |
Rules:
"" only for truly decorative elementsWCAG 2.1 AA minimum contrast ratios:
| Text Type | Min Ratio | Example | |-----------|-----------|---------| | Normal text (< 18pt) | 4.5:1 | Body copy, captions | | Large text (≥ 18pt or ≥ 14pt bold) | 3:1 | Headings, titles | | Non-text UI elements | 3:1 | Icons, borders, charts |
# PPTX: get shape properties including colors
officecli get slides.pptx '/slide[1]' --depth 2 --json
# Check font.color and fill values for each shape
# DOCX: inspect run formatting
officecli get report.docx '/body/p[1]/r[1]' --json
# Look at font.color and background
# XLSX: inspect cell colors
officecli get data.xlsx '/Sheet1/A1' --json
# Check font.color and fill properties
| Foreground | Background | Ratio | Verdict |
|-----------|------------|-------|---------|
| #777777 (gray) | #FFFFFF (white) | 4.48:1 | ❌ Fail (normal text) |
| #767676 (gray) | #FFFFFF (white) | 4.54:1 | ✅ Pass (normal text) |
| #FF0000 (red) | #00FF00 (green) | 1.0:1 | ❌ Fail (all sizes) |
| #1A1A2E (navy) | #FFFFFF (white) | 16.8:1 | ✅ Pass |
| #FFFFFF (white) | #2C3E50 (dark) | 11.4:1 | ✅ Pass |
# Change low-contrast text to a darker color
officecli set slides.pptx '/slide[1]/shape[1]' --prop font.color=1A1A2E
# Change background to improve contrast
officecli set slides.pptx '/slide[1]/shape[1]' --prop fill=FFFFFF
# DOCX: fix light gray text
officecli set report.docx '/body/p[3]/r[1]' --prop font.color=333333
L = 0.2126 * R + 0.7152 * G + 0.0722 * B (relative luminance)
Ratio = (L_lighter + 0.05) / (L_darker + 0.05)
Use an external contrast checker tool (e.g., WebAIM) for precise calculations.
Use view issues and explicit queries for OfficeCLI-side accessibility scans.
Visual contrast still needs a renderer or contrast checker for final proof:
officecli view slides.pptx issues --json
officecli query slides.pptx 'shape[text]' --json
For screen readers, the reading order in PowerPoint = the shape order (z-order) on each slide.
# View shapes in reading order (output order = tab/read order)
officecli get slides.pptx '/slide[1]' --depth 1 --json
# Shapes are listed in their current reading order
# Quick text-order view
officecli view slides.pptx text
# Text appears in the order a screen reader would read it
# Move a shape to a specific reading-order position (1-based index)
officecli move slides.pptx '/slide[1]/shape[3]' --index 1
# Shape 3 is now read first
# Example: ensure title is read before body content
officecli move slides.pptx '/slide[1]/shape[2]' --index 1
Headings must follow a logical hierarchy. Never skip levels.
| ✅ Correct | ❌ Incorrect | |-----------|-------------| | H1 → H2 → H3 | H1 → H3 (skipped H2) | | H1 → H2 → H2 → H3 | H2 → H1 (inverted) | | H1 → H2 → H3 → H2 | H1 → H4 (skipped 2 levels) |
# Find all heading paragraphs
officecli query report.docx 'paragraph[style~=Heading]' --json
# View document outline (shows heading hierarchy)
officecli view report.docx outline
# Quick check: heading levels should increment by 1
officecli view report.docx outline | grep -E 'H[1-6]'
# Change a paragraph's heading style
officecli set report.docx '/body/p[5]' --prop style=Heading2
# Demote Heading1 to Heading2
officecli set report.docx '/body/p[3]' --prop style=Heading2
Tables must have a designated header row for screen readers.
# DOCX: check table structure
officecli get report.docx '/body/tbl[1]' --depth 2 --json
# Verify first row is marked as header
# XLSX: check if header row exists
officecli get data.xlsx '/Sheet1' --depth 1 --json
# PPTX: check table structure
officecli get slides.pptx '/slide[1]/table[1]' --depth 2 --json
# DOCX: find all hyperlinks
officecli query report.docx 'paragraph > run[link]' --json
# Verify link text is descriptive
# Check for generic link text
officecli view report.docx text | grep -iE 'click here|read more|learn more|here'
Links should describe their destination, not use generic phrases.
| ✅ Good | ❌ Bad | |---------|--------| | "View Q4 Revenue Report" | "Click here" | | "WCAG 2.1 Guidelines" | "Read more" | | "Download annual report (PDF, 2MB)" | "Link" |
| Element | Min Size | Recommended | |---------|----------|-------------| | Body text | 12pt | 12-14pt | | Captions | 10pt | 11-12pt | | Footnotes | 8pt | 9-10pt | | Slide body | 18pt | 20-24pt | | Slide titles | 24pt | 28-36pt |
# DOCX: find small text
officecli query report.docx 'paragraph > run[size<=10pt]' --json
# PPTX: check shape text sizes
officecli get slides.pptx '/slide[1]' --depth 2 --json
Run this checklist before delivering any document:
officecli query file 'picture' --jsonalt="")officecli view file.pptx issues --json, then verify final contrast with a renderer or contrast checkerofficecli view file.docx outlineofficecli view file.pptx textofficecli query file.docx 'paragraph > run[size<=10pt]'officecli validate file structural result is recordedofficecli view file.pptx issues --json reports no critical PowerPoint issuesFor bulk remediation across an entire presentation:
# Example: set alt-text for multiple pictures in one batch
officecli batch slides.pptx --commands '[
{"command":"set","path":"/slide[1]/picture[1]","props":{"alt":"Company revenue chart for Q4 2025"}},
{"command":"set","path":"/slide[2]/picture[1]","props":{"alt":"Team photo at annual meeting"}},
{"command":"set","path":"/slide[3]/picture[1]","props":{"alt":"Product roadmap timeline diagram"}},
{"command":"set","path":"/slide[4]/picture[1]","props":{"alt":""}}
]'
# Validate after fixes
officecli validate slides.pptx
| Task | Command |
|------|---------|
| Find all pictures | officecli query file 'picture' --json |
| Find pictures with alt | officecli query file 'picture[alt]' --json |
| Set alt-text | officecli set file '/slide[1]/picture[1]' --prop alt="description" |
| Check reading order | officecli view file.pptx text |
| Fix reading order | officecli move file.pptx '/slide[1]/shape[3]' --index 1 |
| Check heading hierarchy | officecli view file.docx outline |
| Fix heading level | officecli set file.docx '/body/p[5]' --prop style=Heading2 |
| Layout issues (PPTX) | officecli view file.pptx issues --json |
| Full validation | officecli validate file |
development
Goal execution guidelines with PABCD integration, verification tiers, documentation workflow, and AI-driven planning
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
development
Use this skill any time a spreadsheet file is the primary input or output (.xlsx, .xlsm, .csv, .tsv). This includes: creating, reading, editing, analyzing, or formatting spreadsheets; cleaning messy tabular data; converting between formats; and data visualization with charts. Also use for pandas-based data analysis when the deliverable is a spreadsheet. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration.
tools
Use this skill when the user wants to build a financial model, 3-statement model, DCF valuation, cap table, scenario analysis, or financial projections in Excel. Trigger on: 'financial model', '3-statement model', 'DCF', 'cap table', 'pro forma', 'projections', 'sensitivity analysis', 'waterfall', 'debt schedule', 'break-even', 'discounted cash flow', 'capitalization table', 'fundraising model', 'WACC calculation', 'scenario analysis model'. Input is a text prompt with assumptions. Output is a single .xlsx file with formula-driven, interconnected statement sheets.