Atlas / Skills / cap-go / capgo-skills

capgo-skillsBLOCK

skills/cap-go/capgo-skills

Skills for AI coding agents working with Capacitor (formerly capacitor-skills)

Verdict
BLOCK
Grade
D
Trust score
69 /100
Version
—
Hosts
6 documented
License
—
Stars
72
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

➡️ Get Instant updates for your App with Capgo Missing a feature? We’ll build the plugin for you

Formerly @capgo/capacitor-skills (and Cap-go/capacitor-skills). Links and redirects should continue to work.

A collection of 55 skills for AI coding agents working with Capacitor, the cross-platform native runtime. Skills are packaged instructions that extend agent capabilities for mobile development.

Compatibility

Note: The major version of this plugin follows the major version of Capacitor. Use the version that matches your Capacitor installation (e.g., plugin v8 for Capacitor 8). Only the latest major version is actively maintained.

Installation

skills.sh

npx skills add Cap-go/capgo-skills

Claude Code Plugin Marketplace

Claude Code users can add this repository as a plugin marketplace and install focused plugin groups:

claude plugin marketplace add Cap-go/capgo-skills

Available plugins:

Read from source at commit 9b06718119fdOBSERVED · 2026-10-12
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

npx skills add Cap-go/capgo-skills
claude plugin install capgo-cloud@capgo-skills
npm install -g @capgo/cli
npm install @capgo/capacitor-updater
npm install @capacitor/core @capacitor/ios @capacitor/android
npm install -D @capacitor/cli
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
claude-desktopmentioned
codexmentioned
copilotmentioned
cursormentioned
gemini-climentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: capacitor-accessibility
description: Makes Capacitor apps work with VoiceOver, TalkBack, Dynamic Type / Android font scale, Switch Control, hardware keyboards, Reduce Motion and Increase Contrast. Covers Capacitor-specific gaps - WKWebView not following iOS Dynamic Type, Android WebView text zoom breaking layouts, zoomEnabled/user-scalable, SPA route changes not announced, native views under the WebView (maps, camera preview) being unreachable, @capacitor/screen-reader (isEnabled, speak, stateChange) and @capacitor/text-zoom (getPreferred, set) - plus testing with Accessibility Inspector, simctl content_size, adb font_scale, TalkBack and axe-core, mapped to WCAG 2.2. Do not use for Ionic component styling (use ionic-design), notch/home-indicator layout (use safe-area-handling), keyboard overlap bugs (use capacitor-keyboard), automated test framework setup (use capacitor-testing), or App Store metadata (use capacitor-app-store).
---

# Accessibility in Capacitor Apps

The UI is web content inside WKWebView / Android WebView, so standard semantic HTML and ARIA do most of the work. This skill covers where the WebView and native layers behave differently from a browser.

## When to Use

TRIGGER when:
- User asks for VoiceOver/TalkBack support, an accessibility audit, WCAG 2.2 / EAA / ADA compliance.
- Text does not grow with iOS Larger Text, or the layout breaks at large Android font sizes.
- Screen reader does not announce page changes, toasts, or loading states.
- A native view (map, camera preview, video player) cannot be reached by the screen reader.
- User wants `@capacitor/screen-reader` or `@capacitor/text-zoom`.

Do not use:
- Ionic component APIs/theming -> `ionic-design`; Konsta/Tailwind -> `konsta-ui`, `tailwind-capacitor`.
- Content under notch/home indicator -> `safe-area-handling`.
- Keyboard covering inputs -> `capacitor-keyboard`.
- E2E test infrastructure -> `capacitor-testing`.

## Procedure

1. **Inventory screens** into a TODO list (auth, main tabs, forms, modals, media, settings). Audit one at a time.
2. **Automated pass** on the web build: run axe (`@axe-core/playwright` in tests, or `npx @axe-core/cli@latest http://localhost:5173`) and fix violations first (names, roles, contrast, labels).
3. **Device pass** per screen with VoiceOver and TalkBack, largest text size, Reduce Motion, and a Bluetooth keyboard (iPad). Use the checks in `references/testing.md`.
4. **Fix Capacitor-specific traps** below.
5. **Report** findings per screen with WCAG criterion, severity, and fix before large refactors; ask before changing design tokens (colors, font sizes).

## Capacitor-Specific Traps

1. **iOS Dynamic Type is ignored by default.** WKWebView renders `px`/`rem` text at fixed size regardless of Settings > Accessibility > Larger Text. Options:
   - CSS: `html { font: -apple-system-body; }` and size everything else in `rem`/`em` (WebKit maps this to the user's content size category; updates live).
   - Or `TextZoom.getPreferred()` then `TextZoom.set({ value })` from `@capacitor/text-zoom` on launch and on `resume`. On iPad this requires `ios.preferredContentMode: 'mobile'` in `capacitor.config.*`.
   Pick one, not both, or text scales twice.
2. **Android font scale applies automatically.** Android WebView scales text with the system font size, so fixed-height containers, `line-clamp`, and absolute layouts overflow at 200%. Test with `adb shell settings put system font_scale 2.0` and design for reflow (WCAG 1.4.4, 1.4.10).
3. **Pinch zoom.** `zoomEnabled` defaults to `false` and many templates ship `user-scalable=no`. Users can still scale text via traps 1/2; if you rely on zoom instead, set `zoomEnabled: true` and drop `user-scalable=no`.
4. **SPA navigation is silent.** Route changes do not trigger a page-load announcement. After navigation set `document.title`, move focus to the main heading (`<h1 tabindex="-1">`), or update a polite live region. Do not use `ScreenReader.speak` as the primary mechanism: it only speaks when a screen reader is active and bypasses the user's verbosity settings.
5. **Native views under or over the WebView.** `@capacitor/google-maps` renders a native map behind a transparent WebView region; camera preview plugins do the same. The screen reader sees the WebView, not the native view. Provide an accessible alternative (list of markers, text summary, capture button with label) in HTML.
6. **Native plugin UI.** Dialogs, action sheets, share sheets, pickers from official plugins are native and accessible by default; custom native screens in your own plugins need `accessibilityLabel`/`contentDescription` (see `references/native.md`).
7. **Touch targets.** Apple HIG minimum 44x44 pt; Material 48x48 dp; WCAG 2.2 2.5.8 minimum 24x24 CSS px. Icon buttons need padding, not just a small SVG.
8. **Motion and contrast.** `prefers-reduced-motion` and `prefers-contrast` media queries work in both WebViews. Disable parallax/auto-playing transitions under reduce motion; test Increase Contrast.
9. **Status changes.** Toasts (`@capacitor/toast` is native and announced), inline errors, spinners: use `role="status"` / `aria-live="polite"` for web toasts and `aria-busy` on loading regions; use `role="alert"` only for errors.
10. **Focus after native round-trips.** After a native modal (camera, share, auth browser) closes, focus may land on `<body>`. Restore focus to the triggering control on `appStateChange`/promise resolution.

## Verification

- axe: zero critical/serious violations on each audited route.
- VoiceOver (iOS) and TalkBack (Android): every control has a spoken name, role, and state; swipe order follows visual order; route change is announced or focus moves to heading.
- Largest text: `xcrun simctl ui booted content_size accessibility-extra-extra-extra-large` and `adb shell settings put system font_scale 2.0`; no clipped or overlapping text, no horizontal scroll on body.
- Grep: `grep -rnE "user-scalable=no|maximum-scale=1" index.html src/` and `grep 
05

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (3 observation(s))
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
none-found

Findings (24)

CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
plugins/capacitor-features/skills/capacitor-push-notifications/SKILL.md:77
- Tokens rotate. Send every `registration` value to the server and upsert by user + device.
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/capacitor-push-notifications/SKILL.md:77
- Tokens rotate. Send every `registration` value to the server and upsert by user + device.
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
plugins/capacitor-app-migrations/skills/ionic-enterprise-sdk-migration/SKILL.md:39
| Identity Vault | `@capgo/capacitor-native-biometric` | Save/read/delete credentials in Keychain/Keystore; `accessControl: BIOMETRY_CURRENT_SET` or `BIOMETRY_ANY` makes reads require biometrics; `ver
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
plugins/capacitor-app-migrations/skills/webapp-to-capacitor/SKILL.md:103
- Google Play: from Aug 31, 2026 new apps and updates must target API 36 (Capacitor 8 templates target 36). Complete Data safety, content rating, and app access (demo credentials). Personal developer
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.hide_from_user · CWE-94, CWE-1427
AGENTS.md:93
- Do not tell the user to rotate secrets unless they explicitly ask for rotation guidance.
Why it matters. asks the agent to act without the user's knowledge
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
plugins/capacitor-core/skills/capacitor-plugins/references/capgo-plugin-catalog.md:82
| Is Root | `@capgo/capacitor-is-root` | Jailbreak/Root Detection Plugin for Capacitor | [source](https://github.com/Cap-go/capacitor-is-root) |
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
plugins/capacitor-core/skills/capacitor-plugins/references/capgo-plugin-index.md:1070
- **Purpose**: Jailbreak/Root Detection Plugin for Capacitor
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
plugins/capacitor-quality/skills/capacitor-security/SKILL.md:3
description: App-level security audit and hardening for Capacitor apps. Use when the user wants a security review, OWASP MASVS check, or pentest fixes; runs the Capgo scanner (`npx @capgo/capgo-sec sc
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
plugins/capacitor-quality/skills/capacitor-security/SKILL.md:19
- The user needs certificate pinning, a Content Security Policy, screenshot protection, or root/jailbreak detection.
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
plugins/capacitor-quality/skills/capacitor-security/SKILL.md:63
| [references/platform-hardening.md](references/platform-hardening.md) | AndroidManifest flags, R8, iOS Info.plist/entitlements, screenshot protection, root/jailbreak detection, live update encryption
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
plugins/capacitor-quality/skills/debugging-capacitor/SKILL.md:62
- Capacitor 9 (`@next`): `npx cap run ios --url http://192.168.1.68:5173`. The old `-l/--live-reload`, `--host`, `--port`, `--https` flags are removed.
LOWInventory / provenance · inv.no_license · CWE-1104
Why it matters. no LICENSE file and no repo licence
Fix. add a licence
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
plugins/capacitor-app-upgrades/skills/capacitor-app-upgrade-v8-to-v9/references/plugins-and-cli.md:51
npx cap run android --url http://192.168.1.181:5173
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
plugins/capacitor-quality/skills/capacitor-testing/references/device-verification-loop.md:36
npx cap run ios --url http://192.168.1.20:5173
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
skills/capacitor-app-upgrade-v8-to-v9/references/plugins-and-cli.md:51
npx cap run android --url http://192.168.1.181:5173
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
skills/capacitor-testing/references/device-verification-loop.md:36
npx cap run ios --url http://192.168.1.20:5173
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
plugins/capacitor-features/skills/capacitor-push-notifications/references/sending.md:22
- Legacy FCM server-key API (`https://fcm.googleapis.com/fcm/send`, `"to": ...`) is shut down; use HTTP v1 (`/v1/projects/<id>/messages:send`) with an OAuth access token from a service account.
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
plugins/capacitor-quality/skills/capacitor-security/references/network.md:127
- Send auth in the `Authorization` header. If using cookies on native, `plugins.CapacitorCookies.enabled` patches `document.cookie`; mark cookies `Secure` and `HttpOnly` server-side.
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/capacitor-push-notifications/references/sending.md:22
- Legacy FCM server-key API (`https://fcm.googleapis.com/fcm/send`, `"to": ...`) is shut down; use HTTP v1 (`/v1/projects/<id>/messages:send`) with an OAuth access token from a service account.
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
plugins/capacitor-core/skills/capacitor-plugins/references/capacitor-calendar.md:52
- `writeCalendar` is satisfied by iOS write-only access; `readCalendar` needs full access.
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
skills/capacitor-plugins/references/capacitor-calendar.md:52
- `writeCalendar` is satisfied by iOS write-only access; `readCalendar` needs full access.
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
plugins/capacitor-deployment/skills/capacitor-app-store/references/android-submission.md:71
- App content: privacy policy URL, ads declaration, app access (demo credentials for login-gated apps), content rating (IARC), target audience, Data safety form, account deletion URL if the app has ac
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
plugins/capacitor-quality/skills/capacitor-security/references/network.md:91
Never respond `Access-Control-Allow-Origin: *` together with credentials, and do not add wildcard CORS to an authenticated API to "fix" the app.
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
skills/capacitor-app-store/references/android-submission.md:71
- App content: privacy policy URL, ads declaration, app access (demo credentials for login-gated apps), content rating (IARC), target audience, Data safety form, account deletion URL if the app has ac
Why it matters. asks the agent to read credentials

Gates applied: critical_finding, instruction_override, no_behavioural_pass, no_license, undeclared_transfer.

Audited 2026-10-12 · audit v0.4.1 · source sha 9b06718119fdfull audit observations/trust-audit/skill/cap-go__capgo-skills.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-129b06718119fdBLOCKD69first audit
07

Questions

What does the capgo-skills skill do?

Skills for AI coding agents working with Capacitor (formerly capacitor-skills)

Is capgo-skills safe to install?

No — not without reading the findings first. The audit graded it D (69/100) and found 10 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can capgo-skills access on my machine?

The audit observed that it reaches the network and runs shell commands. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does capgo-skills work with?

Its documentation mentions claude-code, claude-desktop, codex, copilot, cursor and gemini-cli. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (9b06718119fd), read on 2026-10-12. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement