Accessibility Intelligence Agent
A terminal-based agent that scans source code for accessibility issues across Web, Android, and iOS platforms.
Built on the accessibility-intelligence skill with a 3-agent architecture:
- Planner – detects platforms, gathers files, creates a scan plan
- Executor – runs the plan, deduplicates and ranks findings
- Rules Engine – platform-specific regex-based accessibility checks
Quick Start
# Scan a directory (auto-detects platforms)
python3 -m agent scan ./your-project
# Scan only iOS files
python3 -m agent scan ./src --platform ios
# Preview the plan without scanning
python3 -m agent plan ./your-project
# Generate a saved Markdown report
python3 -m agent report ./your-project --format md
# Generate a JSON report to a specific file
python3 -m agent scan ./src --format json --output report.json
# Scan screenshots for visual accessibility issues
python3 -m agent screenshots ./screenshots --platform ios
Or use the wrapper script:
./a11y-agent scan ./your-project
Inter-Agent Communication
The agent can receive input from, and send output to, other agents using three modes:
1. Oneshot Request (Quick Testing)
# Process a single request from another agent
python3 -m agent serve -r '{"action":"scan","from_agent":"ci-agent","payload":{"path":"./src","platform":"ios"}}'
2. stdin/stdout Pipe (Pipeline Mode)
# Pipe from another agent
echo '{"action":"scan","payload":{"path":"./src"}}' | python3 -m agent serve
# Chain agents in a pipeline
planning-agent | python3 -m agent serve | fix-agent
3. File-Based (Async Multi-Agent)
# Watch inbox for requests, write responses to outbox
python3 -m agent serve --mode file --inbox ./inbox --outbox ./outbox
4. Python API (In-Process)
from agent import AccessibilityAgent
a11y = AccessibilityAgent()
# Register downstream agents to receive findings
a11y.on_findings("fix-agent", lambda msg: fix_agent.receive(msg))
a11y.on_findings("jira-agent", lambda msg: jira_agent.create_tickets(msg))
# Scan and auto-dispatch to registered agents
findings = a11y.scan("./src", platform="ios")
# Or process a message from another agent
response = a11y.receive({
"action": "scan",
"from_agent": "ci-pipeline",
"payload": {"path": "./src", "platform": "ios"}
})
Message Schema
Request:
{
"message_id": "optional-uuid",
"from_agent": "requesting-agent-name",
"to_agent": "accessibility-intelligence",
"action": "scan | plan | report | screenshots | health",
"payload": { "path": "./src", "platform": "ios" },
"metadata": { "correlation_id": "trace-id" }
}
Response:
{
"message_id": "uuid",
"from_agent": "accessibility-intelligence",
"to_agent": "requesting-agent-name",
"status": "success | error",
"payload": { "findings": [...], "total_issues": 8, "has_critical": true },
"metadata": { "duration_ms": 1.2, "correlation_id": "trace-id" }
}
Commands
| Command | Description |
|---|---|
scan |
Full pipeline: plan → execute → report (terminal output) |
plan |
Show analysis plan without executing the scan |
report |
Scan and save report to reports/ directory |
Options
| Flag | Description |
|---|---|
--platform |
Filter: web, android, or ios |
--format |
Output: terminal, json, or md |
--output / -o |
Custom output file path |
--focus |
Focus area hint for the planner |
Supported Checks
Web
- Missing
alttext on images - Missing
aria-labelon interactive elements <div>used as button without semantics- Missing form labels
- Heading order issues
- Missing
langattribute
Android
- Missing
contentDescription - Clickable without role
- Missing heading semantics
- Missing state descriptions
- Empty content descriptions
iOS
- Missing
accessibilityLabel - Missing
accessibilityHint - Missing
accessibilityTraitson tap targets - Images without labels
- Fixed font sizes (Dynamic Type)
Output
Reports follow the structured schema from SKILL.md — each finding includes:
issue_id,platform,screen,issue_typeseverity(critical/high/medium/low)confidencescoreevidence(file, line, code snippet)descriptionandrecommended_fix
Exit Codes
0– No critical/high issues found1– Critical or high severity issues detected (useful for CI)
Project Structure
hackathon-accessibility/
├── agent/
│ ├── __init__.py # Public API exports
│ ├── __main__.py # python -m agent entry point
│ ├── cli.py # CLI argument parsing and commands
│ ├── config.py # Configuration constants
│ ├── planner.py # Planner agent
│ ├── executor.py # Executor agent
│ ├── reporter.py # Report generation (terminal/json/md)
│ ├── rules_engine.py # Platform-specific accessibility rules
│ ├── image_analyzer.py # Screenshot/UI visual analysis
│ └── protocol.py # Inter-agent communication protocol
├── mcp_server.py # MCP server for IDE integration
├── pyproject.toml # Package config for pip/PyPI
├── mcp-config-example.json
├── references/
│ ├── accessibility-rules.md
│ ├── executor.md
│ └── planner.md
├── reports/ # Generated reports
├── samples/ # Sample files for testing
├── SKILL.md # Skill definition
├── README.md
└── a11y-agent # Shell wrapper
Distribution & Installation
Option 1: MCP Server (Recommended for AI IDEs)
Works with Kiro, Claude Desktop, Cursor, and any MCP-compatible tool.
Install:
pip install mcp
Configure your IDE — add to ~/.kiro/settings/mcp.json (Kiro) or claude_desktop_config.json:
{
"mcpServers": {
"accessibility-intelligence": {
"command": "python3",
"args": ["/path/to/hackathon-accessibility/mcp_server.py"],
"disabled": false,
"autoApprove": ["a11y_scan", "a11y_health"]
}
}
}
Once configured, your IDE can call these tools:
a11y_scan— Scan code for accessibility issuesa11y_scan_screenshots— Analyze screenshots for visual issuesa11y_report— Generate and save a full reporta11y_health— Check agent status
Option 2: PyPI Package (pip install)
Publish to PyPI so anyone can install with pip:
# Build the package
pip install build
python -m build
# Upload to PyPI
pip install twine
twine upload dist/*
# Then anyone can install:
pip install accessibility-intelligence
a11y-agent scan ./my-project --platform ios
Option 3: VS Code Extension (Marketplace)
For a full VS Code extension with UI panels, see the VS Code Extension API docs. The extension would spawn the Python agent as a subprocess and display results in the Problems panel.
Option 4: GitHub Action (CI/CD)
# .github/workflows/a11y.yml
name: Accessibility Check
on: [pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install accessibility-intelligence
- run: a11y-agent scan ./src --platform ios --format json -o a11y-report.json
- uses: actions/upload-artifact@v4
with:
name: accessibility-report
path: a11y-report.json
Metadata
Release files for accessibility-intelligence 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| accessibility_intelligence-1.0.2.tar.gz | 168.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| accessibility_intelligence-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 200.9 kB
Release files / accessibility_intelligence-1.0.2.tar.gz
| Download URL | accessibility_intelligence-1.0.2.tar.gz |
|---|---|
| Size | 168.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
044d39c2d0631d90d1d806f570b1080a81eba379d59d60055e9e0ed2a3f78912
|
|
BLAKE2b-256 checksum How to use checksums |
a26c7cdec30dac21f8a997f71492600d66b39ccafab6e2c575ba8a35ca787e29
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Release files / accessibility_intelligence-1.0.2-py3-none-any.whl
| Download URL | accessibility_intelligence-1.0.2-py3-none-any.whl |
|---|---|
| Size | 32.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d58cc313216d6ec15c9efc506fdcbef7d97318c3cde5d0ea487eeb9566cb078a
|
|
BLAKE2b-256 checksum How to use checksums |
ca546aa67fe7453e8be7bf2708f7ea3c52dd91a5e95defb8d24253ffa1278b27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Security for accessibility-intelligence 1.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.