Borrowing it
Nothing to install: this file belongs to dev-lou/PixelPilot. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/dev-lou/PixelPilot/main/vscode/.github/instructions/uiux-a11y-ci.instructions.mdgit clone --depth 1 https://github.com/dev-lou/PixelPilotWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/dev-lou/pixelpilot/uiux-a11y-ci)<a href="https://agentmods.dev/instructions/dev-lou/pixelpilot/uiux-a11y-ci"><img src="https://agentmods.dev/badge/instructions/dev-lou/pixelpilot/uiux-a11y-ci/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/dev-lou/pixelpilot/uiux-a11y-ci"><img src="https://agentmods.dev/badge/instructions/dev-lou/pixelpilot/uiux-a11y-ci.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.02925 | $0.02925 |
| Opus 5.5 | $0.01170 | $0.01170 |
| Sonnet 5.5 | $0.00585 | $0.00585 |
| Haiku 4.5 | $0.00293 | $0.00293 |
Grade A, and why
PixelPilot uiux-a11y-ci.instructions.md scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Runs shell commandslowCapability
Expected in a hook, worth knowing in a rule or an instructions file.
const { execSync } = require('child_process'); How it starts
The opening of the file, as written. The whole thing — 463 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Accessibility CI Skill
Automated accessibility testing in CI/CD pipeline using axe-core.
CORE PRINCIPLE
Rule: Every PR must pass accessibility checks. Fail on any Critical or Serious violation. Warn on Moderate/Minor.
GITHUB ACTION WORKFLOW
Basic Setup
# .github/workflows/a11y.yml
name: Accessibility Tests
on:
pull_request:
branches: [main, develop]
push:
branches: [main]
# Manual trigger
workflow_dispatch:
inputs:
url:
description: 'URL to test'
required: true
type: string
jobs:
a11y:
runs-on: ubuntu-latest
name: axe-core accessibility scan
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build application
run: npm run build
- name: Start server
run: |
npm run preview &
sleep 5
env:
PORT: 3000
- name: Wait for server
run: npx wait-on http://localhost:3000 --timeout 60000
- name: Run axe-core tests
id: axe
run: |
npx @axe-core/cli http://localhost:3000 \
--exit \
--tags wcag2a,wcag2aa,wcag21a,wcag21aa \
--save results.json
continue-on-error: true
- name: Process results
id: results
run: |
node << 'EOF'
const fs = require('fs');
const results = JSON.parse(fs.readFileSync('results.json', 'utf8'));
let critical = 0, serious = 0, moderate = 0, minor = 0;
const violations = [];
results.forEach(page => {
page.violations?.forEach(v => {
const count = v.nodes.length;
switch(v.impact) {
case 'critical': critical += count; break;
case 'serious': serious += count; break;
case 'moderate': moderate += count; break;
case 'minor': minor += count; break;
}
violations.push({
impact: v.impact,
description: v.description,
help: v.help,
helpUrl: v.helpUrl,
count
});
});
});
// Generate summary
const summary = `
## Accessibility Report
| Severity | Count |
|----------|-------|
| 🔴 Critical | ${critical} |
| 🟠 Serious | ${serious} |
| 🟡 Moderate | ${moderate} |
| 🔵 Minor | ${minor} |
${critical + serious > 0 ? '### ❌ FAILED — Fix critical/serious issues before merging' : '### ✅ PASSED'}
${violations.length > 0 ? '### Violations\n' + violations.slice(0, 10).map(v =>
`- **[${v.impact.toUpperCase()}]** ${v.description} (${v.count} occurrences)\n - ${v.help}\n - [Learn more](${v.helpUrl})`
).join('\n') : ''}
`;
fs.writeFileSync('summary.md', summary);
// Set outputs
const core = require('@actions/core');
core.setOutput('critical', critical);
core.setOutput('serious', serious);
core.setOutput('passed', critical + serious === 0);
console.log(summary);
EOF
- name: Comment on PR
if: github.event_name == 'pull_request'
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const summary = fs.readFileSync('summary.md', 'utf8');
// Find existing comment
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const botComment = comments.find(c =>
c.user.type === 'Bot' && c.body.includes('Accessibility Report')
);
if (botComment) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: summary
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: summary
});
}
- name: Fail on critical/serious
if: steps.results.outputs.passed == 'false'
run: |
echo "❌ Accessibility check failed"
echo "Critical: ${{ steps.results.outputs.critical }}"
echo "Serious: ${{ steps.results.outputs.serious }}"
exit 1
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 463 lines · 2,925 tokens per session scan A 798014e29fea
PixelPilot uiux-a11y-ci.instructions.md is an instructions file published in the GitHub repository dev-lou/PixelPilot (2 stars, last pushed 7mo ago), licensed MIT. It adds 2,925 tokens to every session, about $0.0117 per session on Opus 5.5. A static security scan graded it A with 1 finding (runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
PixelPilot uiux-a11y-ci.instructions.md compared with instructions from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| PixelPilot uiux-a11y-ci.instructions.mddev-lou/PixelPilot | Instructions file | 2 | 7mo ago | MIT | A | 2,925 | GitHub Copilot |
| vscode buildNext.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 9,719 | GitHub Copilot |
| next.js AGENTS.mdvercel/next.js | Instructions file | 143k | today | MIT | A | 7,461 | Codex, OpenCode |
| langchain AGENTS.mdlangchain-ai/langchain | Instructions file | 149k | yesterday | MIT | A | 4,680 | Codex, OpenCode |
| vscode oss-third-party-notices.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 5,516 | GitHub Copilot |
| vscode copilot-instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 3,093 | GitHub Copilot |
| deepseek-harness AGENTS.mddeepseek-ai/deepseek-harness | Instructions file | 274k | 2d ago | MIT | A | 4,313 | Codex, OpenCode |