From drover
Register a Drupal/DDEV project with drover so it begins monitoring watchdog and web-container logs. On macOS opens a native folder picker; accepts a path argument on other platforms. Reads .ddev/config.yaml, drush aliases, and git remote automatically. Idempotent. Trigger phrases - "add a project to drover", "drover should watch this project", "register a new site with drover", "onboard a project to drover".
How this skill is triggered — by the user, by Claude, or both
Slash command
/drover:add-projectThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Adds one Drupal/DDEV project to the list of projects drover monitors.
Adds one Drupal/DDEV project to the list of projects drover monitors.
Once added, the umbrella monitor starts tailing drush watchdog:tail
and ddev logs --service web for that project on the next poll — no
/reload-plugins required.
Idempotent: re-adding the same path is a no-op.
On macOS:
PATH_ARG="$(osascript -e 'POSIX path of (choose folder with prompt "Pick the main folder of the project to add to drover")')"
If the user already passed an explicit path as argument, use that instead of invoking the picker.
If the user cancels the picker (osascript exits non-zero), stop and
report that nothing was added.
"${CLAUDE_PLUGIN_ROOT}/scripts/add-project.sh" "$PATH_ARG"
The script emits one JSON object on stdout. Parse it and report:
"status":"added" → "Added {name} at {path}. Drover will start watching within 30s.""status":"exists" → "{name} is already registered.""status":"error" → show the message field to the user and stop.List the currently-registered projects so the user sees the new state:
python3 <<'PY'
import json, os, pathlib
candidates = [
os.environ.get("DROVER_PROJECTS_FILE", ""),
os.path.join(os.environ.get("CLAUDE_PLUGIN_DATA", ""), "projects.json"),
os.path.expanduser("~/.claude/plugins/data/drover/projects.json"),
]
for f in candidates:
if f and pathlib.Path(f).exists():
for e in json.load(open(f)):
print(f"- {e['name']} ({e['path']})")
break
else:
print("No projects registered yet.")
PY
${CLAUDE_PLUGIN_DATA}/projects.json — survives
plugin updates.DROVER_UMBRELLA_POLL env var.drover:remove-project once that skill exists..ddev/config.yaml.
Drush aliases and git remote are optional enrichments.npx claudepluginhub cosmicdreams/claude-plugins --plugin droverProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.