ZCode Direct-Child Skill Discovery Fix
Rewrote docs/README.zcode.md to document the direct-child skill-directory install (depth-1 discovery, mirroring CC GUI and Windsurf) as the primary path. The prior v2.1.4 plugin-marketplace-only guide could cause silent zero-skill discovery because ZCode's scanner does not read umbrella skill directories.
Root cause
ZCode's skill scanner reads each root's direct subdirectories and expects <root>/<skill-name>/SKILL.md (depth-1). The Codex-style umbrella symlink ~/.agents/skills/aegis/ -> ~/.codex/aegis/skills/ does not work for ZCode, because aegis/ does not itself contain SKILL.md. This is the same shape CC GUI and Windsurf require — the repo already had the direct-child discovery-shape mechanism; ZCode just needed to be wired into it.
What changed
docs/README.zcode.md— direct-child symlink/junction (macOS/Linuxln -sfnloop, Windowsmklink /Jloop) as primary install; Claude-Code-compatible plugin marketplace retained as secondary with a fallback pointer; explicit umbrella-symlink pitfall warning in Troubleshooting.- Host compatibility matrix — ZCode row and section 4 now record the depth-1 direct-child discovery shape.
- Known limitations section 2.22 — Retention Reason now explains the depth-1 constraint and why the umbrella symlink fails.
tests/e2e/zcode-host-boundary-check.sh— +7 discovery-shape assertions (32 total): direct-child path,--discovery-root,--discovery-shape direct-child, install shape, umbrella pitfall.- Version bump 2.1.4 -> 2.1.5 across all 8 declared files.
Install (ZCode) — the universal prompt still works
The existing README.en.md Quick Install prompt routes ZCode to the correct depth-1 steps with no ZCode-specific prompt needed. ZCode reads docs/README.zcode.md and runs the direct-child symlink install:
macOS / Linux:
git clone https://github.com/GanyuanRan/Aegis.git ~/.codex/aegis
mkdir -p ~/.agents/skills
for skill_dir in ~/.codex/aegis/skills/*; do
[ -d "$skill_dir" ] || continue
ln -sfn "$skill_dir" "$HOME/.agents/skills/$(basename "$skill_dir")"
done
Verification
layer1-fast-check.sh --host-profile none passes 25/25; zcode-host-boundary-check.sh passes 32/32.
Full Changelog: v2.1.4...v2.1.5