Monorepo for installable Copilot skills.
npx skills add discovers skills recursively from the repository root by SKILL.md plus frontmatter name, so skills can live at any depth.
Install from GitHub by skill name:
npx skills add AntonPieper/ai-skills --skill android-developmentList all skills in the repository:
npx skills add AntonPieper/ai-skills --listInstall from a local clone:
npx skills add "$PWD" --skill android-development -g -a github-copilot -yList from a local clone:
npx skills add "$PWD" --listskills/
android/
android-development/
SKILL.md
references/
validation/
android-development/
smoke.sh
scripts/
build-pages-site.mjs
process-android-scenario-artifacts.mjs
validate-skills-catalog.sh
Rules:
- Only files under
skills/.../<skill>/are installable payload. - Keep validation, smoke tests, and contributor docs outside
skills/. - Group skills by topic or platform, but keep each leaf skill directory named after the skill when practical.
Authoring guidance:
- Write
descriptionin imperative trigger form: tell the agent when to use the skill, using user intent rather than internal implementation details. - Keep
SKILL.mdfocused on the reusable workflow and move heavier detail to targeted reference files. - Prefer defaults and small, task-scoped procedures over menus of equal options.
- Keep evals and trigger-query sets under
validation/<skill>/evals/so they do not ship as installable payload.
Catalog validation:
./scripts/validate-skills-catalog.sh
./scripts/validate-validation-assets.shScenario-based Android validation:
npm ci
./validation/android-development/smoke.shThe Android scenario harness now relies on full toolchain runs instead of read-only smoke prompts. Each scenario writes its own files under RUN_ROOT/scenarios/<scenario>/:
result.jsonwritten by the agent for structured status, checks, commands, and findings.report.mdwritten by the agent for the user-facing narrative and embedded media.raw/for screenshots and recordings captured during the scenario.media/for optimized web output produced bynode ./scripts/process-android-scenario-artifacts.mjs <scenario-dir>.
The current scenario mix includes:
- Toolchain validation against
architecture-samplesusing real Gradle build, unit-test, and connected-test commands. - Manual visual task creation in
architecture-sampleson the emulator. - Manual visual named-session creation in
termux-appon the emulator. - Manual visual first-run secure setup in
Aegison the emulator. - Modernization triage in
Android-CleanArchitecturegrounded in real Gradle metadata.
Useful overrides:
RUN_ROOT="$PWD/tmp/android-scenarios" ./validation/android-development/smoke.sh
FAIL_ON_SCENARIO_ERROR=1 ./validation/android-development/smoke.sh
TIMEOUT_SECONDS=1800 ./validation/android-development/smoke.shSkill eval assets for android-development live in validation/android-development/evals/:
evals.jsonfor output-quality eval cases and assertions.trigger-queries.train.jsonandtrigger-queries.validation.jsonfor description-trigger tuning.
The scheduled scenario workflow writes a GitHub Actions job summary and uploads the full site bundle plus the underlying scenario files, including JSON, markdown, optimized screenshots, short recordings, and the raw capture directory when a scenario produced one.
The GitHub Pages workflow publishes the generated static site from dist/site/, built by node ./scripts/build-pages-site.mjs ./dist/site in GitHub Actions.
When build-pages-site.mjs runs without a fresh RUN_ROOT, it now preserves the latest published scenario payload from GitHub Pages so content-only site deploys do not blank the dynamic example section.
For local preview, build the generated bundle first and then serve dist/site/ over HTTP. Serving raw site/ will skip the generated data/latest.json payload and bundled reports that the page expects.
npm run build:site
python3 -m http.server 4173 -d ./dist/siteThe site build is now centered on one content model: scenario directories. The website reads structured scenario results from data/latest.json, renders the static product sections from the repository source, and embeds the scenario markdown reports after converting them through the unified, remark, and rehype stack with sanitization.