CI SKIP works for all providers and event types with the exception of Stash push events. The problem is that Atlassian Stash (aka Bitbucket Server) does not include the commit message in the webhook payload, which results in an empty string being evaluated for the directive. You can see an example Stash webhook here that demonstrates the problem (notice lacking commit message). The other major providers (GitHub, GitLab, etc) include the commit message in the webhook, and therefore work as expected.
We have logic in Drone that fetches the missing data from Stash, however, this happens later in the process, after the system has already checked for the CI SKIP directive. It is possible we can re-arrange some things in the codebase to account for this deficiency in Stash webhooks.
The caveat is that the above change will impact merges:
bitbucket server includes commit messages of all commits from a branch when merging PR, so if the developer had added [CI SKIP] in the source branch those messages would cause the merge commit from skipping the build