npx claudepluginhub gkastanis/drupal-workflow --plugin drupal-workflowDefined in hooks/hooks.json
${CLAUDE_PLUGIN_ROOT}/scripts/stop-verification-gate.sh5000msRead|Grep|Edit|Write${CLAUDE_PLUGIN_ROOT}/scripts/block-sensitive-files.sh5000msEnterPlanMode${CLAUDE_PLUGIN_ROOT}/scripts/plan-mode-inject.sh3000msEdit|Write${CLAUDE_PLUGIN_ROOT}/scripts/php-lint-on-save.sh10000msEdit|Write${CLAUDE_PLUGIN_ROOT}/scripts/staleness-check.sh5000ms.*${CLAUDE_PLUGIN_ROOT}/scripts/autopilot-monitor.sh3000msecho 'DRUPAL WORKFLOW PLUGIN ACTIVE | Start: /drupal-bootstrap | Prime: /drupal-prime | Status: /drupal-status | Semantic: /drupal-semantic | Test: /drupal-test | Verify: /drupal-verify'3000msstartupPROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"; TIMESTAMP="$PROJECT_DIR/docs/semantic/structural/.generated-at"; if [ -f "$TIMESTAMP" ]; then STALE=$(find "$PROJECT_DIR" -newer "$TIMESTAMP" \( -name '*.services.yml' -o -name '*.routing.yml' -o -name '*.module' -o -name '*.permissions.yml' -o -name '*.install' -o -name '*.profile' -o -name '*.links.menu.yml' -o -name '*.links.task.yml' \) -path '*/modules/*' 2>/dev/null | head -1); if [ -n "$STALE" ]; then bash "${CLAUDE_PLUGIN_ROOT}/skills/structural-index/scripts/generate-all.sh" "$PROJECT_DIR" >/dev/null 2>&1 && echo 'STRUCTURAL INDEX: Auto-regenerated (source files changed since last generation).' || echo 'STRUCTURAL INDEX: Auto-regeneration failed (non-critical).'; fi; fi; exit 015000ms${CLAUDE_PLUGIN_ROOT}/scripts/workflow-reset.sh3000ms${CLAUDE_PLUGIN_ROOT}/scripts/task-classifier.sh3000msecho 'Hook registry: OK (all SessionStart hooks passed)'3000ms.*${CLAUDE_PLUGIN_ROOT}/scripts/subagent-context-inject.sh5000ms.*${CLAUDE_PLUGIN_ROOT}/scripts/teammate-quality-gate.sh10000msDrupal workflow automation: PHP lint on Edit/Write, blocks sensitive files on Read/Grep/Edit/Write, staleness checks and structural index regen on SessionStart, verification gate on Stop. Runs shell commands, enables file writes.
Share bugs, ideas, or general feedback.