Skip to content
Expo Development Foundation
Esc
navigateopen⌘Jpreview
On this page

Scripts

Catalog, installer, consumer guidance, and evaluation scripts.

./Scripts/generate-skill-catalog.py --check
./Scripts/validate-skill-evaluations.py
./Scripts/verify-skills.sh
./Scripts/test-install-skills.sh
./Scripts/test-consumer-guidance.sh
./Scripts/install-skills.sh --dry-run
./Scripts/install-skills.sh --tier all
./Scripts/install-skills.sh --status --tier all
./Scripts/install-skills.sh --uninstall   # safe: only matching installer symlinks in the target

The installer records only its own symlinks in .expo-development-foundation-links, preserves conflicts, and supports uninstall without touching unrelated files. The default remains ${CODEX_HOME:-$HOME/.codex}/skills with --tier all.

Installation strategies

Choose one strategy and use the same target and tier for installation and status checks.

A. Reproducible offline snapshot

Install every foundation-owned skill and each vendored Expo snapshot:

./Scripts/install-skills.sh --tier all
./Scripts/install-skills.sh --status --tier all

B. Foundation router with canonical upstream Expo skills

Install Expo’s skills from their canonical upstream source, then install only the foundation-owned routing and workflow layer:

npx skills@latest add expo/skills --skill '*'
./Scripts/install-skills.sh --tier foundation
./Scripts/install-skills.sh --status --tier foundation

This avoids installing the repository’s local vendored official snapshots and keeps upstream Expo skills canonical.

Use an explicit skills-directory target for another flat installation root:

./Scripts/install-skills.sh --target-dir "$HOME/.agents/skills" --tier all
./Scripts/install-skills.sh --target-dir "$HOME/.agents/skills" --status --tier all

Installing into a directory does not prove that an agent host discovers it. Host discovery requires separate documentation and testing.

Status mode

./Scripts/install-skills.sh --status --tier <foundation|all> performs a read-only comparison of the selected installable skill symlinks against .agents/skills/manifest.json. It prints the source, resolved target, and tier, then classifies each selected skill as:

Classification Meaning
ok: Symlink target matches the manifest
missing: No symlink exists at the expected path
dangling: Symlink points to a path that no longer exists
wrong-target: Symlink points elsewhere, or the path exists but is not a symlink
stale: Recorded in the state file but absent from the complete current manifest

It exits zero when every installable skill link is synced and one on any link-topology divergence. It does not inspect Git or verify skill contents against repository HEAD; use normal Git verification separately when checkout integrity matters. Malformed skill names or paths in the manifest are rejected and reported rather than trusted (fail closed). Intended role: in an unattended session, run --status before trusting installed copies of this foundation’s skills for routing, and re-sync with the same target and tier before acting when it reports link divergence.

Was this page helpful?