Install
openclaw skills install @snowsand-enterprises/snowsand-bitbucketInteract with Bitbucket Cloud via REST API. Use for repository management, pull request operations (list, view, create, comment, approve, merge), branch management, commit history, pipeline status, and workspace/team queries. Triggers on Bitbucket operations, PR reviews, branch management, pipeline checks, or any Atlassian Bitbucket Cloud task.
openclaw skills install @snowsand-enterprises/snowsand-bitbucketBitbucket Cloud REST API v2 integration for repository management, pull requests, branches, commits, and pipelines.
Bitbucket Cloud REST v2 uses HTTP Basic auth. Required environment variables:
BITBUCKET_WORKSPACE - Default workspace slug (e.g., myteam)BITBUCKET_USERNAME - Identity for Basic auth (see pairing below)BITBUCKET_APP_PASSWORD - Secret for Basic auth (see pairing below)Two credential types work. Use the matching username for each:
| Credential type | BITBUCKET_USERNAME | BITBUCKET_APP_PASSWORD |
|---|---|---|
| Atlassian API token (recommended) | your Atlassian account email | the API token |
| App Password (legacy) | your Bitbucket username (not email) | the app password |
Note: despite the variable name,
BITBUCKET_APP_PASSWORDaccepts an Atlassian API token. For SnowSand'sAtlassian - <user>@snowsand.comvault items, thebitbucket-tokenfield is an Atlassian API token, so pair it with the account email as the username.
Atlassian API tokens: https://id.atlassian.com/manage-profile/security/api-tokens App Passwords (legacy): https://bitbucket.org/account/settings/app-passwords/
Required scopes/permissions:
Test connection:
curl -s -u "$BITBUCKET_USERNAME:$BITBUCKET_APP_PASSWORD" \
"https://api.bitbucket.org/2.0/user" | jq .
Cross-workspace listing note: Bitbucket CHANGE-2770 removed the old
GET /2.0/workspacesandGET /2.0/user/permissions/workspacesendpoints (they now return HTTP 410).bitbucket.py workspacesuses the supported replacementGET /2.0/user/workspaces. All other commands are workspace-scoped and unaffected.
All operations use the {baseDir}/scripts/bitbucket.py script:
| Operation | Command |
|---|---|
| Repositories | |
| List repos | {baseDir}/scripts/bitbucket.py repos |
| View repo | {baseDir}/scripts/bitbucket.py repo my-repo |
| Create repo | {baseDir}/scripts/bitbucket.py create-repo my-new-repo --private |
| Pull Requests | |
| List PRs | {baseDir}/scripts/bitbucket.py prs my-repo |
| View PR | {baseDir}/scripts/bitbucket.py pr my-repo 42 |
| Create PR | {baseDir}/scripts/bitbucket.py create-pr my-repo --title "Feature" --source feature-branch |
| Comment on PR | {baseDir}/scripts/bitbucket.py pr-comment my-repo 42 "LGTM!" |
| Approve PR | {baseDir}/scripts/bitbucket.py approve my-repo 42 |
| Merge PR | {baseDir}/scripts/bitbucket.py merge my-repo 42 |
| Decline PR | {baseDir}/scripts/bitbucket.py decline my-repo 42 |
| Branches | |
| List branches | {baseDir}/scripts/bitbucket.py branches my-repo |
| View branch | {baseDir}/scripts/bitbucket.py branch my-repo main |
| Create branch | {baseDir}/scripts/bitbucket.py create-branch my-repo feature-x --from main |
| Delete branch | {baseDir}/scripts/bitbucket.py delete-branch my-repo old-feature |
| Commits | |
| List commits | {baseDir}/scripts/bitbucket.py commits my-repo |
| View commit | {baseDir}/scripts/bitbucket.py commit my-repo abc123 |
| Pipelines | |
| List pipelines | {baseDir}/scripts/bitbucket.py pipelines my-repo |
| View pipeline | {baseDir}/scripts/bitbucket.py pipeline my-repo {uuid} |
| Pipeline steps | {baseDir}/scripts/bitbucket.py pipeline-steps my-repo {uuid} |
| Workspace | |
| List workspaces | {baseDir}/scripts/bitbucket.py workspaces |
| Workspace members | {baseDir}/scripts/bitbucket.py members |
| Current user | {baseDir}/scripts/bitbucket.py me |
# List all repositories in workspace
{baseDir}/scripts/bitbucket.py repos
# List with pagination
{baseDir}/scripts/bitbucket.py repos --page 2 --pagelen 25
# View specific repository details
{baseDir}/scripts/bitbucket.py repo my-repo
# Create a new private repository
{baseDir}/scripts/bitbucket.py create-repo my-new-repo --private --description "Project description"
# Create public repository with specific project
{baseDir}/scripts/bitbucket.py create-repo my-public-repo --project PROJ
# List open pull requests
{baseDir}/scripts/bitbucket.py prs my-repo
# List all PRs (including merged/declined)
{baseDir}/scripts/bitbucket.py prs my-repo --state all
# View PR details
{baseDir}/scripts/bitbucket.py pr my-repo 42
# Create a pull request
{baseDir}/scripts/bitbucket.py create-pr my-repo \
--title "Add new feature" \
--source feature-branch \
--destination main \
--description "This PR adds..."
# Add a comment
{baseDir}/scripts/bitbucket.py pr-comment my-repo 42 "Looks good, just one question..."
# Approve the PR
{baseDir}/scripts/bitbucket.py approve my-repo 42
# Unapprove (remove approval)
{baseDir}/scripts/bitbucket.py unapprove my-repo 42
# Request changes
{baseDir}/scripts/bitbucket.py request-changes my-repo 42
# Merge with default strategy
{baseDir}/scripts/bitbucket.py merge my-repo 42
# Merge with specific strategy
{baseDir}/scripts/bitbucket.py merge my-repo 42 --strategy squash
# Decline a PR
{baseDir}/scripts/bitbucket.py decline my-repo 42
# List all branches
{baseDir}/scripts/bitbucket.py branches my-repo
# View branch details
{baseDir}/scripts/bitbucket.py branch my-repo feature-x
# Create branch from main
{baseDir}/scripts/bitbucket.py create-branch my-repo feature-y --from main
# Create branch from specific commit
{baseDir}/scripts/bitbucket.py create-branch my-repo hotfix-1 --from abc123def
# Delete a branch (cannot delete main branch)
{baseDir}/scripts/bitbucket.py delete-branch my-repo old-feature
# List recent commits (default branch)
{baseDir}/scripts/bitbucket.py commits my-repo
# Commits on specific branch
{baseDir}/scripts/bitbucket.py commits my-repo --branch feature-x
# Limit results
{baseDir}/scripts/bitbucket.py commits my-repo --pagelen 10
# View specific commit
{baseDir}/scripts/bitbucket.py commit my-repo abc123def456
# List recent pipelines
{baseDir}/scripts/bitbucket.py pipelines my-repo
# Filter by status
{baseDir}/scripts/bitbucket.py pipelines my-repo --status SUCCESSFUL
{baseDir}/scripts/bitbucket.py pipelines my-repo --status FAILED
# View pipeline details
{baseDir}/scripts/bitbucket.py pipeline my-repo '{pipeline-uuid}'
# View pipeline steps
{baseDir}/scripts/bitbucket.py pipeline-steps my-repo '{pipeline-uuid}'
# Trigger a pipeline
{baseDir}/scripts/bitbucket.py run-pipeline my-repo --branch main
# List accessible workspaces
{baseDir}/scripts/bitbucket.py workspaces
# List workspace members
{baseDir}/scripts/bitbucket.py members
# Get current user info
{baseDir}/scripts/bitbucket.py me
When merging PRs, available strategies are:
| Strategy | Description |
|---|---|
merge_commit | Create a merge commit (default) |
squash | Squash all commits into one |
fast_forward | Fast-forward if possible |
| State | Description |
|---|---|
PENDING | Waiting to start |
IN_PROGRESS | Currently running |
SUCCESSFUL | Completed successfully |
FAILED | Completed with failures |
STOPPED | Manually stopped |
Common errors:
For operations not covered by the script:
# GET request
curl -s -u "$BITBUCKET_USERNAME:$BITBUCKET_APP_PASSWORD" \
"https://api.bitbucket.org/2.0/repositories/$BITBUCKET_WORKSPACE/my-repo" | jq .
# POST request
curl -s -X POST -u "$BITBUCKET_USERNAME:$BITBUCKET_APP_PASSWORD" \
-H "Content-Type: application/json" \
-d '{"content": {"raw": "Comment text"}}' \
"https://api.bitbucket.org/2.0/repositories/$BITBUCKET_WORKSPACE/my-repo/pullrequests/42/comments" | jq .
API docs: https://developer.atlassian.com/cloud/bitbucket/rest/