🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Hummingbot Developer

by @fengtality

Developer skill for running Hummingbot and Gateway from source, building wheel and Docker images, and testing against Hummingbot API running from source. Use...

Versionv1.0.0
Downloads1,203
TERMINAL
clawhub install hummingbot-developer

πŸ“– About This Skill


name: hummingbot-developer description: Developer skill for running Hummingbot and Gateway from source, building wheel and Docker images, and testing against Hummingbot API running from source. Use this skill when a developer wants to build, run, or test Hummingbot components locally. metadata: author: hummingbot commands: start: description: Check dev environment β€” repo branches, prereqs, running services install-deps: description: Auto-install missing dev dependencies (conda, node, pnpm, docker, git) select-branches: description: Interactively pick branches for hummingbot, gateway, and hummingbot-api install-all: description: Install all three repos in order (hummingbot β†’ gateway β†’ hummingbot-api) build-all: description: Build hummingbot wheel + all Docker images in order verify-build: description: Verify all builds are correct and in sync across repos run-dev-stack: description: Start the full dev stack from source (infra + gateway + API) setup-hummingbot: description: Install Hummingbot from source (branch, conda env, solders fix) run-hummingbot: description: Run Hummingbot CLI from source build-hummingbot: description: Build Hummingbot wheel and Docker image from source setup-gateway: description: Install and configure Gateway from source (pnpm install/build/setup) run-gateway: description: Run Gateway from source in dev mode build-gateway: description: Build Gateway Docker image from source setup-api-dev: description: Configure Hummingbot API to use local Hummingbot source (pip install -e) run-api-dev: description: Run Hummingbot API from source with hot-reload against local Hummingbot test-integration: description: Smoke test the full stack β€” API, Gateway, and Hummingbot connectivity

hummingbot-developer

Developer workflow skill for building and running the full Hummingbot stack from source.

Commands (run as /hummingbot-developer ):

| Command | Description | |---------|-------------| | start | Check dev environment status | | select-branches | Pick branches for all 3 repos | | install-all | Install all 3 repos in order | | build-all | Build wheel + all Docker images | | verify-build | Verify builds are correct + in sync | | run-dev-stack | Start full stack from source | | setup-hummingbot | Install Hummingbot from source | | run-hummingbot | Run Hummingbot CLI from source | | build-hummingbot | Build wheel + Docker image | | setup-gateway | Install Gateway from source | | run-gateway | Run Gateway in dev mode | | build-gateway | Build Gateway Docker image | | setup-api-dev | Wire API to local Hummingbot source | | run-api-dev | Run API from source with hot-reload | | test-integration | Smoke test the full stack |

Typical dev workflow:

install-deps β†’ select-branches β†’ install-all β†’ build-all β†’ verify-build β†’ run-dev-stack β†’ test-integration

Repo locations (all in workspace):

| Repo | Path | |------|------| | hummingbot | ~/.openclaw/workspace/hummingbot | | gateway | ~/.openclaw/workspace/hummingbot-gateway | | hummingbot-api | ~/.openclaw/workspace/hummingbot-api |

Override with env vars: HUMMINGBOT_DIR, GATEWAY_DIR, HUMMINGBOT_API_DIR, or WORKSPACE.


Command: install-deps

Auto-install all missing dev dependencies. Safe to re-run β€” skips anything already installed.

bash scripts/install_deps.sh

Installs (only if missing):

  • Homebrew (macOS)
  • Xcode Command Line Tools (macOS β€” needed for Cython build_ext)
  • Miniconda (conda)
  • Node.js v22 (via nvm, Homebrew, or installs nvm)
  • pnpm (via npm or Homebrew)
  • Git
  • Docker Desktop (macOS β€” via Homebrew cask or opens download page)
  • Options:

    --check         # check only, don't install anything
    --conda         # only install conda
    --node          # only install node + nvm
    --pnpm          # only install pnpm
    

    After installing, restart your terminal (or source ~/.zshrc) to apply PATH changes, then run check_env.sh to confirm.


    Command: select-branches

    Interactively pick a branch for each repo, checkout, and save to .dev-branches.

    bash scripts/select_branches.sh
    

    Non-interactive options:

    # Use development for all
    bash scripts/select_branches.sh --defaults

    Specify each branch

    bash scripts/select_branches.sh \ --hummingbot development \ --gateway core-2.7 \ --api development

    Branch selections are saved to $WORKSPACE/.dev-branches and automatically loaded by install_all.sh, build_all.sh, and verify_build.sh.


    Command: install-all

    Install all three repos in the correct order. Requires select-branches first (or pass --defaults).

    bash scripts/install_all.sh
    

    What it does (in order): 1. Removes solders from environment.yml (pip-only) 2. make install in hummingbot β†’ conda env hummingbot 3. pip install solders>=0.19.0 into hummingbot env 4. pnpm install && pnpm build && pnpm run setup:with-defaults for gateway 5. conda env create for hummingbot-api 6. pip install -e --no-deps β†’ wires local source into API env

    Options:

    --skip-hbot      # skip hummingbot conda install
    --skip-gateway   # skip gateway pnpm install
    --skip-api       # skip hummingbot-api install
    --no-local-hbot  # use PyPI hummingbot in API env instead of local source
    


    Command: build-all

    Build hummingbot wheel and all Docker images in the correct order.

    bash scripts/build_all.sh
    

    Build order: 1. hummingbot wheel (dist/*.whl) via python setup.py bdist_wheel 2. hummingbot/hummingbot:dev Docker image 3. hummingbot/gateway:dev Docker image (also rebuilds dist/) 4. hummingbot/hummingbot-api:dev Docker image

    Each image is also tagged with the branch name (e.g., hummingbot/gateway:core-2.7).

    Options:

    --wheel-only     # only build hummingbot wheel, no Docker
    --no-docker      # skip all Docker builds
    --no-hbot        # skip hummingbot builds
    --no-gateway     # skip gateway builds
    --no-api         # skip hummingbot-api builds
    --tag      # Docker tag (default: dev)
    


    Command: verify-build

    Verify that all builds are correct and in sync.

    bash scripts/verify_build.sh
    

    Checks: 1. Each repo is on the expected branch (from .dev-branches) 2. Hummingbot wheel exists in dist/ 3. Gateway dist/ is built and not stale vs source 4. Local hummingbot source is active in hummingbot-api env 5. Docker images exist with correct branch labels 6. Running services (API + Gateway) are reachable 7. API β†’ Gateway connectivity

    bash scripts/verify_build.sh --no-docker   # skip Docker checks
    bash scripts/verify_build.sh --no-running  # skip service checks
    bash scripts/verify_build.sh --json        # JSON output
    


    Command: run-dev-stack

    Start the full dev stack from source.

    bash scripts/run_dev_stack.sh
    

    Start order: 1. Docker infra (postgres + EMQX) via docker compose up emqx postgres -d 2. Gateway from source in background (node dist/index.js --passphrase=hummingbot --dev) 3. Hummingbot API from source in foreground (uvicorn main:app --reload)

    Options:

    --no-gateway           # skip gateway start
    --passphrase     # gateway passphrase (default: hummingbot)
    --stop                 # stop everything
    --status               # show running status
    

    Logs:

  • Gateway logs: tail -f ~/.openclaw/workspace/.gateway.log
  • API logs: printed to terminal (foreground)

  • Command: start

    Check the full dev environment and show a status summary.

    Step 1: Run environment check

    bash scripts/check_env.sh --json
    

    Step 2: Check repo branches

    bash scripts/check_repos.sh --json
    

    Step 3: Check running services

    bash scripts/check_api.sh --json
    bash scripts/check_gateway.sh --json
    

    Step 4: Show status checklist

    Present a checklist like:

    Dev Environment Status
    ======================
      [x] Prerequisites     β€” conda, node, pnpm, docker, git OK
      [x] Hummingbot repo   β€” branch: development, env: hummingbot (installed)
      [x] Gateway repo      β€” branch: development, built: yes
      [x] Hummingbot API    β€” running at http://localhost:8000
      [x] Gateway           β€” running at http://localhost:15888
      [ ] Local hummingbot  β€” hummingbot-api NOT using local source

    Next: run /hummingbot-developer setup-api-dev to wire API to local source

    Adapt to actual state. If all good, show the test command.


    Command: setup-hummingbot

    Install Hummingbot from source on the development branch.

    Step 1: Check prereqs

    bash scripts/check_env.sh
    

    Step 2: Checkout development branch

    cd 
    git fetch origin
    git checkout development
    git pull origin development
    

    Step 3: Remove solders from environment.yml (pip-only package)

    sed -i '' '/solders/d' setup/environment.yml 2>/dev/null || sed -i '/solders/d' setup/environment.yml
    

    Step 4: Install conda environment

    make install
    

    This creates the hummingbot conda env. Takes 3-10 minutes on first run.

    Step 5: Install solders via pip (not on conda)

    conda run -n hummingbot pip install "solders>=0.19.0"
    

    Interpreting output

    | Output | Meaning | Next step | |--------|---------|-----------| | conda develop . succeeds | Dev install registered | Proceed | | PackagesNotFoundError: solders | Forgot step 3 | Run sed + reinstall | | Error: Conda is not found | conda not in PATH | source ~/.zshrc or install Anaconda | | build_ext errors | Missing build tools | Install Xcode CLT: xcode-select --install |

    After setup

      [x] conda env "hummingbot" created
      [x] solders installed via pip
      Run hummingbot: /hummingbot-developer run-hummingbot
      Build image:    /hummingbot-developer build-hummingbot
    


    Command: run-hummingbot

    Run the Hummingbot CLI from source.

    cd 
    conda activate hummingbot
    ./bin/hummingbot_quickstart.py
    

    Or via make:

    cd 
    make run
    

    Note: This opens the interactive Hummingbot CLI. Use exit to quit.

    To run with a specific config:

    make run ARGS="--config-file-name conf_pure_mm_1.yml"
    


    Command: build-hummingbot

    Build a Hummingbot wheel and/or Docker image from source.

    Build wheel (for local pip installs)

    cd 
    conda activate hummingbot
    pip install build wheel  # if not already installed
    python -m build --wheel --no-isolation
    

    Wheel is output to dist/hummingbot-*.whl.

    Important: The wheel must be built with Python 3.12 to match hummingbot-api's environment.

    Use this wheel to install into other envs:

    pip install dist/hummingbot-*.whl --force-reinstall --no-deps
    

    Build Linux wheel for Docker

    When building hummingbot-api Docker images, you need a Linux wheel (not macOS/Windows). Build inside Docker to ensure compatibility:

    cd 

    Build Linux wheel using Docker (Python 3.12 to match hummingbot-api)

    docker run --rm -v $(pwd):/hummingbot -w /hummingbot continuumio/miniconda3 bash -c " apt-get update -qq && apt-get install -y -qq gcc g++ build-essential > /dev/null 2>&1 && conda create -n build python=3.12 cython numpy -y -q && conda run -n build pip install -q build wheel && conda run -n build python -m build --wheel "

    Verify the Linux wheel was created

    ls dist/*linux*.whl

    Example: hummingbot-20260126-cp312-cp312-linux_aarch64.whl

    Platform wheel suffixes:

  • linux_x86_64 β€” Linux AMD/Intel 64-bit
  • linux_aarch64 β€” Linux ARM64 (Apple Silicon Docker, AWS Graviton)
  • macosx_11_0_arm64 β€” macOS Apple Silicon (native only, NOT for Docker)
  • macosx_10_9_x86_64 β€” macOS Intel (native only, NOT for Docker)
  • Build Docker image

    cd 
    docker build -t hummingbot/hummingbot:dev -f Dockerfile .
    

    Or with make (also cleans first):

    make build TAG=:dev
    

    Tag for use with hummingbot-api:

    docker build -t hummingbot/hummingbot:development -f Dockerfile .
    

    Interpreting output

    | Output | Meaning | |--------|---------| | Successfully built + wheel path | Wheel ready in dist/ | | Successfully tagged hummingbot/hummingbot:dev | Docker image ready | | build_ext error | Cython compile issue β€” check conda env is active | | OOM during Docker build | Add --memory 4g flag |


    Command: setup-gateway

    Install and configure Gateway from source.

    Step 1: Check prereqs

    Requires Node.js 20+, pnpm, and git.

    bash scripts/check_env.sh
    

    Step 2: Checkout development branch

    cd 
    git fetch origin
    git checkout development
    git pull origin development
    

    Step 3: Install dependencies

    cd 
    pnpm install
    

    If you see USB HID errors on macOS:

    pnpm install --force
    

    Step 4: Build TypeScript

    pnpm build
    

    Step 5: Run setup

    # Non-interactive with defaults (recommended for dev)
    pnpm run setup:with-defaults

    Interactive (choose which configs to update)

    pnpm run setup

    Setup creates:

  • conf/ β€” chain, connector, token, and RPC configs
  • certs/ β€” TLS certificates (self-signed for dev)
  • Interpreting output

    | Output | Meaning | Next step | |--------|---------|-----------| | Gateway setup complete | Ready to start | run-gateway | | tsc errors | TypeScript compile error | Check Node version (node --version β‰₯ 20) | | pnpm: command not found | pnpm not installed | npm install -g pnpm | | ENOSPC | Disk space | Free up space |


    Command: run-gateway

    Run Gateway from source in dev mode (HTTP, no TLS).

    cd 
    pnpm start --passphrase= --dev
    

    Default passphrase matches hummingbot-api setup: hummingbot

    pnpm start --passphrase=hummingbot --dev
    

    What --dev does:

  • Runs in HTTP mode (no TLS) on port 15888
  • Enables verbose logging
  • Hummingbot API auto-connects at http://localhost:15888
  • Verify it's running:

    curl http://localhost:15888/
    

    Watch logs for startup sequence:

    Gateway listening on port 15888
    Solana mainnet-beta initialized
    ...
    

    Configure custom RPC (recommended to avoid rate limits):

    # After gateway is running, update RPC via API
    curl -X POST http://localhost:15888/network/config \
      -H "Content-Type: application/json" \
      -d '{"chain": "solana", "network": "mainnet-beta", "nodeURL": "https://your-rpc.com"}'
    


    Command: build-gateway

    Build a Gateway Docker image from source.

    cd 
    docker build \
      --build-arg BRANCH=$(git rev-parse --abbrev-ref HEAD) \
      --build-arg COMMIT=$(git rev-parse HEAD) \
      --build-arg BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) \
      -t hummingbot/gateway:dev \
      -f Dockerfile .
    

    Tag as development for use with hummingbot-api:

    docker tag hummingbot/gateway:dev hummingbot/gateway:development
    

    Verify image:

    docker run --rm hummingbot/gateway:dev node -e "console.log('OK')"
    


    Command: setup-api-dev

    Configure Hummingbot API to use a local Hummingbot source build instead of the PyPI package.

    This lets you make changes to Hummingbot and immediately test them via the API without rebuilding Docker images.

    Step 1: Install hummingbot-api conda environment

    cd 
    make install
    

    This creates the hummingbot-api conda env with the PyPI version of hummingbot.

    Step 2: Install local Hummingbot into hummingbot-api env

    Option A β€” Editable install (recommended for active development):

    conda run -n hummingbot-api pip install -e  --no-deps
    

    Changes to hummingbot source are reflected immediately (no reinstall needed).

    Option B β€” Wheel install (for testing a specific build):

    # First build the wheel
    cd  && conda run -n hummingbot python setup.py bdist_wheel

    Install into hummingbot-api env

    conda run -n hummingbot-api pip install /dist/hummingbot-*.whl --force-reinstall --no-deps

    Step 3: Verify local version is active

    conda run -n hummingbot-api python -c "import hummingbot; print(hummingbot.__file__)"
    

    Should print a path inside , not site-packages.

    Step 4: Install solders

    conda run -n hummingbot-api pip install "solders>=0.19.0"
    

    Interpreting output

    | Output | Meaning | |--------|---------| | Path inside your hummingbot dir | βœ… Local source active | | Path inside anaconda3/.../site-packages | ❌ Still using PyPI version | | ImportError: No module named hummingbot | pip install failed β€” retry |


    Command: run-api-dev

    Run Hummingbot API from source with hot-reload, using local Hummingbot.

    Step 1: Start infrastructure (postgres + EMQX via Docker)

    cd 
    docker compose up emqx postgres -d
    

    Verify they're healthy:

    docker compose ps
    

    Step 2: Run the API with uvicorn hot-reload

    cd 
    conda run --no-capture-output -n hummingbot-api uvicorn main:app --reload
    

    Or via make:

    make run
    

    API is available at http://localhost:8000 Swagger UI at http://localhost:8000/docs

    What hot-reload means: Changes to *.py files in hummingbot-api are applied immediately. Changes to hummingbot source (editable install) are also picked up on reload.

    Step 3: Confirm local hummingbot is in use

    curl -s http://localhost:8000/health | python3 -m json.tool
    

    Check API logs for hummingbot version on startup.

    Useful dev commands

    # Watch logs
    conda run -n hummingbot-api uvicorn main:app --reload --log-level debug

    Run on different port

    conda run -n hummingbot-api uvicorn main:app --reload --port 8001

    Check what's running

    docker compose ps curl http://localhost:8000/health


    Command: test-integration

    Smoke test the full dev stack β€” API, Gateway, and Hummingbot connectivity.

    bash scripts/check_api.sh
    bash scripts/check_gateway.sh
    python scripts/test_integration.py
    

    What gets tested

    | Test | Checks | |------|--------| | API health | GET /health returns 200 | | API version | Confirms hummingbot source path (not PyPI) | | Gateway health | GET / on port 15888 returns 200 | | API→Gateway | API can reach Gateway (/gateway/status) | | Connectors | At least one connector visible via API | | Wallets | Gateway wallet list accessible |

    Interpreting results

    | Output | Meaning | Fix | |--------|---------|-----| | βœ“ API running | API up | β€” | | βœ“ Gateway running | Gateway up | β€” | | βœ“ APIβ†’Gateway connected | Full stack wired | β€” | | βœ— API not running | Start with run-api-dev | β€” | | βœ— Gateway not running | Start with run-gateway | β€” | | βœ— APIβ†’Gateway: connection refused | Gateway URL mismatch | Check .env GATEWAY_URL=http://localhost:15888 | | βœ— Local hummingbot not active | Using PyPI version | Run setup-api-dev |


    Docker-Based API Development

    For testing with Docker containers (instead of source), build a custom hummingbot-api image with your hummingbot wheel.

    Step 1: Build Linux wheel for Docker

    cd 

    Build Linux wheel using Docker (Python 3.12)

    docker run --rm -v $(pwd):/hummingbot -w /hummingbot continuumio/miniconda3 bash -c " apt-get update -qq && apt-get install -y -qq gcc g++ build-essential > /dev/null 2>&1 && conda create -n build python=3.12 cython numpy -y -q && conda run -n build pip install -q build wheel && conda run -n build python -m build --wheel "

    ls dist/*linux*.whl

    Step 2: Build hummingbot-api Docker image

    cd 

    Copy wheel to API directory

    cp /dist/hummingbot-*-cp312-*-linux_*.whl .

    Update environment.docker.yml with wheel filename

    Then build using Dockerfile.dev

    docker build -f Dockerfile.dev -t hummingbot/hummingbot-api:dev .

    Step 3: Deploy with docker-compose.dev.yml

    cd 
    docker compose -f docker-compose.dev.yml up -d
    

    Step 4: Verify development features

    # Check lp_executor is available (only in development hummingbot)
    curl -s -u admin:admin http://localhost:8000/executors/types/available | grep lp_executor
    


    Deploying Bots with Custom Images

    When deploying bots via the API, specify which hummingbot Docker image to use.

    Deploy with development image

    curl -X POST http://localhost:8000/bot-orchestration/deploy-v2-controllers \
      -u admin:admin \
      -H "Content-Type: application/json" \
      -d '{
        "instance_name": "my-bot",
        "credentials_profile": "master_account",
        "controllers_config": ["my_controller.yml"],
        "image": "hummingbot/hummingbot:development"
      }'
    

    Available hummingbot images

    | Image | Description | |-------|-------------| | hummingbot/hummingbot:latest | Stable PyPI release (default) | | hummingbot/hummingbot:development | Development branch from Docker Hub | | hummingbot/hummingbot:dev | Locally built image |

    DEX connectors require Gateway

    For connectors like meteora/clmm, Gateway must be running:

    docker run -d --name gateway -p 15888:15888 \
      -e GATEWAY_PASSPHRASE=admin \
      hummingbot/gateway:development
    


    Quick Reference

    Full Dev Setup (first time)

    # 1. Setup repos
    cd ~/Documents/hummingbot && git checkout development && git pull
    cd ~/.openclaw/workspace/hummingbot-gateway && git checkout development && git pull

    2. Install hummingbot

    cd ~/Documents/hummingbot sed -i '' '/solders/d' setup/environment.yml make install conda run -n hummingbot pip install "solders>=0.19.0"

    3. Install gateway

    cd ~/.openclaw/workspace/hummingbot-gateway pnpm install && pnpm build && pnpm run setup:with-defaults

    4. Wire hummingbot-api to local source

    cd ~/.openclaw/workspace/hummingbot-api make install conda run -n hummingbot-api pip install -e ~/Documents/hummingbot --no-deps conda run -n hummingbot-api pip install "solders>=0.19.0"

    5. Start everything

    cd ~/.openclaw/workspace/hummingbot-gateway pnpm start --passphrase=hummingbot --dev &

    cd ~/.openclaw/workspace/hummingbot-api docker compose up emqx postgres -d make run

    Testing a Hummingbot Change

    # 1. Make changes in hummingbot source
    

    2. If editable install: just save the file (hot-reload picks it up)

    3. If wheel install: rebuild and reinstall

    cd ~/Documents/hummingbot conda run -n hummingbot python setup.py bdist_wheel conda run -n hummingbot-api pip install dist/hummingbot-*.whl --force-reinstall --no-deps

    4. Restart API

    5. Run tests

    python scripts/test_integration.py

    Repo Paths (defaults)

    | Component | Default path | |-----------|-------------| | Hummingbot | ~/Documents/hummingbot | | Gateway | ~/.openclaw/workspace/hummingbot-gateway | | Hummingbot API | ~/.openclaw/workspace/hummingbot-api |

    Override by setting env vars:

    export HUMMINGBOT_DIR=~/code/hummingbot
    export GATEWAY_DIR=~/code/gateway
    export HUMMINGBOT_API_DIR=~/code/hummingbot-api
    

    Scripts Reference

    | Script | Purpose | |--------|---------| | check_env.sh | Verify prereqs (conda, node, pnpm, docker, git) | | check_repos.sh | Show branch + build status for each repo | | check_api.sh | Check if Hummingbot API is running | | check_gateway.sh | Check if Gateway is running | | test_integration.py | End-to-end smoke tests |