From de7ea52b7d7c3f25d54fa2eafcda063aaff1250e Mon Sep 17 00:00:00 2001 From: factory-davidgu Date: Fri, 17 Apr 2026 16:33:21 -0700 Subject: [PATCH 1/2] feat: add top level skills folder with links to inner skills --- skills/agent-browser | 1 + skills/autoresearch | 1 + skills/browser-navigation | 1 + skills/capture | 1 + skills/commit-security-scan | 1 + skills/compose | 1 + skills/droid-cli | 1 + skills/droid-control | 1 + skills/frontend-design | 1 + skills/human-writing | 1 + skills/init | 1 + skills/pty-capture | 1 + skills/review | 1 + skills/security-review | 1 + skills/session-navigation | 1 + skills/showcase | 1 + skills/skill-creation | 1 + skills/threat-model-generation | 1 + skills/true-input | 1 + skills/tuistory | 1 + skills/verify | 1 + skills/visual-design | 1 + skills/vulnerability-validation | 1 + skills/wiki | 1 + 24 files changed, 24 insertions(+) create mode 120000 skills/agent-browser create mode 120000 skills/autoresearch create mode 120000 skills/browser-navigation create mode 120000 skills/capture create mode 120000 skills/commit-security-scan create mode 120000 skills/compose create mode 120000 skills/droid-cli create mode 120000 skills/droid-control create mode 120000 skills/frontend-design create mode 120000 skills/human-writing create mode 120000 skills/init create mode 120000 skills/pty-capture create mode 120000 skills/review create mode 120000 skills/security-review create mode 120000 skills/session-navigation create mode 120000 skills/showcase create mode 120000 skills/skill-creation create mode 120000 skills/threat-model-generation create mode 120000 skills/true-input create mode 120000 skills/tuistory create mode 120000 skills/verify create mode 120000 skills/visual-design create mode 120000 skills/vulnerability-validation create mode 120000 skills/wiki diff --git a/skills/agent-browser b/skills/agent-browser new file mode 120000 index 0000000..f213e0f --- /dev/null +++ b/skills/agent-browser @@ -0,0 +1 @@ +../plugins/droid-control/skills/agent-browser \ No newline at end of file diff --git a/skills/autoresearch b/skills/autoresearch new file mode 120000 index 0000000..3d3a693 --- /dev/null +++ b/skills/autoresearch @@ -0,0 +1 @@ +../plugins/autoresearch/skills/autoresearch \ No newline at end of file diff --git a/skills/browser-navigation b/skills/browser-navigation new file mode 120000 index 0000000..d06a07b --- /dev/null +++ b/skills/browser-navigation @@ -0,0 +1 @@ +../plugins/droid-evolved/skills/browser-navigation \ No newline at end of file diff --git a/skills/capture b/skills/capture new file mode 120000 index 0000000..bc680ce --- /dev/null +++ b/skills/capture @@ -0,0 +1 @@ +../plugins/droid-control/skills/capture \ No newline at end of file diff --git a/skills/commit-security-scan b/skills/commit-security-scan new file mode 120000 index 0000000..af31032 --- /dev/null +++ b/skills/commit-security-scan @@ -0,0 +1 @@ +../plugins/security-engineer/skills/commit-security-scan \ No newline at end of file diff --git a/skills/compose b/skills/compose new file mode 120000 index 0000000..9326f23 --- /dev/null +++ b/skills/compose @@ -0,0 +1 @@ +../plugins/droid-control/skills/compose \ No newline at end of file diff --git a/skills/droid-cli b/skills/droid-cli new file mode 120000 index 0000000..e094b8a --- /dev/null +++ b/skills/droid-cli @@ -0,0 +1 @@ +../plugins/droid-control/skills/droid-cli \ No newline at end of file diff --git a/skills/droid-control b/skills/droid-control new file mode 120000 index 0000000..ef9bd2a --- /dev/null +++ b/skills/droid-control @@ -0,0 +1 @@ +../plugins/droid-control/skills/droid-control \ No newline at end of file diff --git a/skills/frontend-design b/skills/frontend-design new file mode 120000 index 0000000..9e4c70d --- /dev/null +++ b/skills/frontend-design @@ -0,0 +1 @@ +../plugins/droid-evolved/skills/frontend-design \ No newline at end of file diff --git a/skills/human-writing b/skills/human-writing new file mode 120000 index 0000000..52bae7f --- /dev/null +++ b/skills/human-writing @@ -0,0 +1 @@ +../plugins/droid-evolved/skills/human-writing \ No newline at end of file diff --git a/skills/init b/skills/init new file mode 120000 index 0000000..0228cdc --- /dev/null +++ b/skills/init @@ -0,0 +1 @@ +../plugins/core/skills/init \ No newline at end of file diff --git a/skills/pty-capture b/skills/pty-capture new file mode 120000 index 0000000..b723fd3 --- /dev/null +++ b/skills/pty-capture @@ -0,0 +1 @@ +../plugins/droid-control/skills/pty-capture \ No newline at end of file diff --git a/skills/review b/skills/review new file mode 120000 index 0000000..a75dd38 --- /dev/null +++ b/skills/review @@ -0,0 +1 @@ +../plugins/core/skills/review \ No newline at end of file diff --git a/skills/security-review b/skills/security-review new file mode 120000 index 0000000..0c1ff95 --- /dev/null +++ b/skills/security-review @@ -0,0 +1 @@ +../plugins/security-engineer/skills/security-review \ No newline at end of file diff --git a/skills/session-navigation b/skills/session-navigation new file mode 120000 index 0000000..814b9b8 --- /dev/null +++ b/skills/session-navigation @@ -0,0 +1 @@ +../plugins/core/skills/session-navigation \ No newline at end of file diff --git a/skills/showcase b/skills/showcase new file mode 120000 index 0000000..7debfaf --- /dev/null +++ b/skills/showcase @@ -0,0 +1 @@ +../plugins/droid-control/skills/showcase \ No newline at end of file diff --git a/skills/skill-creation b/skills/skill-creation new file mode 120000 index 0000000..442729d --- /dev/null +++ b/skills/skill-creation @@ -0,0 +1 @@ +../plugins/droid-evolved/skills/skill-creation \ No newline at end of file diff --git a/skills/threat-model-generation b/skills/threat-model-generation new file mode 120000 index 0000000..5bf981a --- /dev/null +++ b/skills/threat-model-generation @@ -0,0 +1 @@ +../plugins/security-engineer/skills/threat-model-generation \ No newline at end of file diff --git a/skills/true-input b/skills/true-input new file mode 120000 index 0000000..568c425 --- /dev/null +++ b/skills/true-input @@ -0,0 +1 @@ +../plugins/droid-control/skills/true-input \ No newline at end of file diff --git a/skills/tuistory b/skills/tuistory new file mode 120000 index 0000000..3883e01 --- /dev/null +++ b/skills/tuistory @@ -0,0 +1 @@ +../plugins/droid-control/skills/tuistory \ No newline at end of file diff --git a/skills/verify b/skills/verify new file mode 120000 index 0000000..e0509de --- /dev/null +++ b/skills/verify @@ -0,0 +1 @@ +../plugins/droid-control/skills/verify \ No newline at end of file diff --git a/skills/visual-design b/skills/visual-design new file mode 120000 index 0000000..7d24fbd --- /dev/null +++ b/skills/visual-design @@ -0,0 +1 @@ +../plugins/droid-evolved/skills/visual-design \ No newline at end of file diff --git a/skills/vulnerability-validation b/skills/vulnerability-validation new file mode 120000 index 0000000..215090e --- /dev/null +++ b/skills/vulnerability-validation @@ -0,0 +1 @@ +../plugins/security-engineer/skills/vulnerability-validation \ No newline at end of file diff --git a/skills/wiki b/skills/wiki new file mode 120000 index 0000000..eba347d --- /dev/null +++ b/skills/wiki @@ -0,0 +1 @@ +../plugins/droid-evolved/skills/wiki \ No newline at end of file From fdf2230247310754f9c483a5af48047b21720758 Mon Sep 17 00:00:00 2001 From: factory-davidgu Date: Fri, 17 Apr 2026 17:35:14 -0700 Subject: [PATCH 2/2] add ci job and ignore some skills --- .github/workflows/check-skills.yml | 85 ++++++++++++++++++++++++++++++ .skillsrc | 13 +++++ skills/agent-browser | 1 - skills/capture | 1 - skills/compose | 1 - skills/droid-cli | 1 - skills/droid-control | 1 - skills/pty-capture | 1 - skills/showcase | 1 - skills/true-input | 1 - skills/tuistory | 1 - skills/verify | 1 - 12 files changed, 98 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/check-skills.yml create mode 100644 .skillsrc delete mode 120000 skills/agent-browser delete mode 120000 skills/capture delete mode 120000 skills/compose delete mode 120000 skills/droid-cli delete mode 120000 skills/droid-control delete mode 120000 skills/pty-capture delete mode 120000 skills/showcase delete mode 120000 skills/true-input delete mode 120000 skills/tuistory delete mode 120000 skills/verify diff --git a/.github/workflows/check-skills.yml b/.github/workflows/check-skills.yml new file mode 100644 index 0000000..8ecf718 --- /dev/null +++ b/.github/workflows/check-skills.yml @@ -0,0 +1,85 @@ +name: Check skills directory + +on: + pull_request: + push: + branches: [master] + +jobs: + check-skills: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Verify all skills are exposed or explicitly skipped + run: | + set -euo pipefail + + # Collect skipped skills from .skillsrc + skipped=() + if [[ -f .skillsrc ]]; then + while IFS= read -r line; do + line="${line%%#*}" # strip inline comments + line="${line// /}" # trim whitespace + [[ -z "$line" ]] && continue + skipped+=("$line") + done < .skillsrc + fi + + is_skipped() { + local skill="$1" + for s in "${skipped[@]+"${skipped[@]}"}"; do + [[ "$s" == "$skill" ]] && return 0 + done + return 1 + } + + errors=() + + # Find every skill directory (contains a SKILL.md) + while IFS= read -r skill_md; do + skill_dir="$(dirname "$skill_md")" + # e.g. plugins/core/skills/init -> extract plugin-relative path: core/skills/init + rel="${skill_dir#plugins/}" + skill_name="$(basename "$skill_dir")" + + if is_skipped "$rel"; then + # Ensure skipped skills do NOT have a symlink + if [[ -L "skills/$skill_name" ]]; then + errors+=("Skill '$skill_name' is in .skillsrc but also symlinked in skills/") + fi + continue + fi + + # Non-skipped skills MUST have a symlink + if [[ ! -L "skills/$skill_name" ]]; then + errors+=("Skill '$skill_name' ($rel) is not symlinked in skills/ and not listed in .skillsrc") + else + # Verify the symlink target resolves correctly + if [[ ! -d "skills/$skill_name" ]]; then + errors+=("Symlink skills/$skill_name is broken (target does not exist)") + fi + fi + done < <(find plugins -name SKILL.md -type f | sort) + + # Check for symlinks pointing to non-existent skills + if [[ -d skills ]]; then + for link in skills/*; do + [[ -L "$link" ]] || continue + if [[ ! -d "$link" ]]; then + errors+=("Symlink $link is broken") + fi + done + fi + + if [[ ${#errors[@]} -gt 0 ]]; then + echo "::error::Skills directory check failed:" + for err in "${errors[@]}"; do + echo " - $err" + done + echo "" + echo "To fix: add a symlink in skills/ or add the skill to .skillsrc" + exit 1 + fi + + echo "All skills are accounted for." diff --git a/.skillsrc b/.skillsrc new file mode 100644 index 0000000..3e16873 --- /dev/null +++ b/.skillsrc @@ -0,0 +1,13 @@ +# Skills listed here are excluded from the top-level skills/ directory. +# One skill path per line, relative to the repo root (plugin/skills/skill-name). +# Lines starting with # are comments. Blank lines are ignored. +droid-control/skills/agent-browser +droid-control/skills/capture +droid-control/skills/compose +droid-control/skills/droid-cli +droid-control/skills/droid-control +droid-control/skills/pty-capture +droid-control/skills/showcase +droid-control/skills/true-input +droid-control/skills/tuistory +droid-control/skills/verify diff --git a/skills/agent-browser b/skills/agent-browser deleted file mode 120000 index f213e0f..0000000 --- a/skills/agent-browser +++ /dev/null @@ -1 +0,0 @@ -../plugins/droid-control/skills/agent-browser \ No newline at end of file diff --git a/skills/capture b/skills/capture deleted file mode 120000 index bc680ce..0000000 --- a/skills/capture +++ /dev/null @@ -1 +0,0 @@ -../plugins/droid-control/skills/capture \ No newline at end of file diff --git a/skills/compose b/skills/compose deleted file mode 120000 index 9326f23..0000000 --- a/skills/compose +++ /dev/null @@ -1 +0,0 @@ -../plugins/droid-control/skills/compose \ No newline at end of file diff --git a/skills/droid-cli b/skills/droid-cli deleted file mode 120000 index e094b8a..0000000 --- a/skills/droid-cli +++ /dev/null @@ -1 +0,0 @@ -../plugins/droid-control/skills/droid-cli \ No newline at end of file diff --git a/skills/droid-control b/skills/droid-control deleted file mode 120000 index ef9bd2a..0000000 --- a/skills/droid-control +++ /dev/null @@ -1 +0,0 @@ -../plugins/droid-control/skills/droid-control \ No newline at end of file diff --git a/skills/pty-capture b/skills/pty-capture deleted file mode 120000 index b723fd3..0000000 --- a/skills/pty-capture +++ /dev/null @@ -1 +0,0 @@ -../plugins/droid-control/skills/pty-capture \ No newline at end of file diff --git a/skills/showcase b/skills/showcase deleted file mode 120000 index 7debfaf..0000000 --- a/skills/showcase +++ /dev/null @@ -1 +0,0 @@ -../plugins/droid-control/skills/showcase \ No newline at end of file diff --git a/skills/true-input b/skills/true-input deleted file mode 120000 index 568c425..0000000 --- a/skills/true-input +++ /dev/null @@ -1 +0,0 @@ -../plugins/droid-control/skills/true-input \ No newline at end of file diff --git a/skills/tuistory b/skills/tuistory deleted file mode 120000 index 3883e01..0000000 --- a/skills/tuistory +++ /dev/null @@ -1 +0,0 @@ -../plugins/droid-control/skills/tuistory \ No newline at end of file diff --git a/skills/verify b/skills/verify deleted file mode 120000 index e0509de..0000000 --- a/skills/verify +++ /dev/null @@ -1 +0,0 @@ -../plugins/droid-control/skills/verify \ No newline at end of file