К основному содержанию
скилл CX Codex

bazel — скилл для Claude Code: BUILD-файлы и C/C++ сборка

Ведёт агента по Bazel в C/C++ проектах: BUILD-файлы, правила cc_library и cc_binary, тулчейны, запросы к графу зависимостей.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill bazel -a claude-code
Открыть на GitHub

Что делает bazel

Скилл подключается, когда вы пишете BUILD-файлы или разбираетесь, почему сборка падает. Внутри — рабочий процесс из семи шагов: структура воркспейса с MODULE.bazel и BUILD, примеры правил cc_library, cc_binary и cc_test, управление зависимостями через Bzlmod, регистрация тулчейна, удалённое исполнение и отладка песочницы.

Отдельный блок про запросы: bazel query для прямых и обратных зависимостей, bazel cquery с учётом конфигурации, bazel aquery для графа действий с флагами компилятора. Есть разбор типичных ошибок песочницы — от «No such file or directory» до записи за её пределами, с указанием, куда смотреть в выводе. Для тонкой настройки C++ тулчейна скилл ссылается на references/bazel-cpp-toolchain.md.

Скилл опирается на Bazel 6 и новее — в примерах MODULE.bazel помечен как файл Bzlmod, а WORKSPACE оставлен для функций, которые его ещё требуют. Если проект живёт на старой версии без Bzlmod, часть примеров придётся переписать под WORKSPACE.

Какие задачи решает

  • написать BUILD-файл для C++ библиотеки с внешними зависимостями
  • разобраться, почему сборка падает из-за песочницы
  • найти, кто зависит от конкретной цели
  • зарегистрировать свой C++ тулчейн под нужную платформу
  • перевести проект с CMake на Bazel

Примеры запросов агенту

  • Напиши BUILD-файл для библиотеки mylib с зависимостями от abseil и googletest
  • Почему сборка //src:main падает с ошибкой песочницы? Включи --sandbox_debug и объясни вывод
  • Покажи, какие цели зависят от //lib:mylib, через bazel query

Как установить bazel

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill bazel -a claude-code

2Вручную: положить файлы

~/.claude/skills/bazel/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/bazel/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о bazel

Как установить скилл bazel в Claude Code?

Выполните npx skills add mohitmishra786/low-level-dev-skills --skill bazel -a claude-code. Файл скилла окажется в ~/.claude/skills/bazel/SKILL.md.

Что делает скилл bazel?

Проводит агента через работу с Bazel в C/C++ проектах: написание BUILD-файлов, правила cc_library и cc_binary, Bzlmod, запросы к графу зависимостей, удалённое исполнение и отладка песочницы.

С какими версиями Bazel работает скилл?

Примеры рассчитаны на Bazel 6 и новее: зависимости описаны в MODULE.bazel через Bzlmod, а WORKSPACE оставлен для функций, которые его ещё требуют.

Исходный текст

SKILL.md · MIT
---
name: bazel
description: Bazel build system skill for C/C++ projects. Use when writing BUILD files with cc_library and cc_binary rules, registering toolchains, configuring remote execution, debugging sandbox issues, using query and cquery for dependency graphs, or migrating from CMake to Bazel. Activates on queries about Bazel, BUILD files, cc_library, cc_binary, Bzlmod, bazel query, remote execution, or Bazel toolchain registration.
---

# Bazel

## Purpose

Guide agents through Bazel for C/C++ projects: writing BUILD files, cc_library/cc_binary rules, toolchain registration, remote execution, dependency graph queries, Bzlmod dependency management, and sandbox debugging.

## Triggers

- "How do I write a Bazel BUILD file for a C++ library?"
- "How do I add external dependencies with Bzlmod?"
- "How do I debug Bazel sandbox errors?"
- "How do I query the Bazel dependency graph?"
- "How do I set up remote execution with Bazel?"
- "How do I register a custom C++ toolchain?"

## Workflow

### 1. Workspace structure

```
my-project/
├── MODULE.bazel         # Bzlmod dependency file (Bazel ≥6)
├── WORKSPACE            # legacy (still needed for some features)
├── BUILD                # root build file
├── src/
│   ├── BUILD
│   └── main.cc
└── lib/
    ├── BUILD
    ├── mylib.cc
    └── mylib.h
```

### 2. Basic BUILD file — cc_library / cc_binary

```python
# lib/BUILD
cc_library(
    name = "mylib",
    srcs = ["mylib.cc"],
    hdrs = ["mylib.h"],
    copts = ["-Wall", "-Wextra", "-std=c++17"],
    visibility = ["//visibility:public"],
    deps = [
        "@com_google_absl//absl/strings",     # external dep
        "//util:helpers",                      # internal dep
    ],
)

cc_test(
    name = "mylib_test",
    srcs = ["mylib_test.cc"],
    deps = [
        ":mylib",
        "@com_google_googletest//:gtest_main",
    ],
)
```

```python
# src/BUILD
cc_binary(
    name = "main",
    srcs = ["main.cc"],
    deps = ["//lib:mylib"],
    linkopts = ["-lpthread"],
)
```

```bash
# Build
bazel build //src:main
bazel build //...           # build everything

# Test
bazel test //lib:mylib_test
bazel test //...            # run all tests

# Run
bazel run //src:main -- arg1 arg2

# Output path
bazel-bin/src/main
```

### 3. Bzlmod — modern dependency management

```python
# MODULE.bazel
module(
    name = "my_project",
    version = "1.0",
)

bazel_dep(name = "abseil-cpp", version = "20240116.2")
bazel_dep(name = "googletest", version = "1.14.0")
bazel_dep(name = "rules_cc", version = "0.0.9")
bazel_dep(name = "platforms", version = "0.0.8")

# For http_archive deps not yet in BCR (Bazel Central Registry)
# Use module extensions
```

```bash
# Check available versions
bazel mod graph | head -30

# Show dependency tree
bazel mod deps --depth=2
```

### 4. Dependency graph queries

```bash
# Show all dependencies of a target
bazel query "deps(//src:main)"

# Find reverse dependencies (who depends on this?)
bazel query "rdeps(//..., //lib:mylib)"

# Find what changed between builds
bazel query "filter('//lib', deps(//src:main))"

# cquery — configuration-aware query
bazel cquery "deps(//src:main)" --output=files

# Show include paths for a target
bazel cquery "//lib:mylib" --output=build

# Find cycles in the build graph
bazel query --nohost_deps --noimplicit_deps \
  "somepath(//src:main, //lib:mylib)"

# aquery — action graph (shows compiler flags, inputs, outputs)
bazel aquery "//src:main"
bazel aquery "//src:main" --output=jsonproto | jq '.actions[0].arguments'
```

### 5. Toolchain registration

```python
# platforms/BUILD
platform(
    name = "linux_x86_64",
    constraint_values = [
        "@platforms//os:linux",
        "@platforms//cpu:x86_64",
    ],
)

# toolchains/BUILD
cc_toolchain_suite(
    name = "my_toolchain",
    toolchains = {
        "k8": ":my_k8_toolchain",
    },
)

cc_toolchain(
    name = "my_k8_toolchain",
    all_files = ":empty",
    compiler_files = ":compiler_wrapper",
    # ... other file groups
)

toolchain(
    name = "my_cc_toolchain",
    toolchain = ":my_k8_toolchain",
    toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
    target_compatible_with = ["@platforms//os:linux"],
)
```

```python
# MODULE.bazel — register toolchain
register_toolchains("//toolchains:my_cc_toolchain")
```

### 6. Remote execution

```bash
# Use --remote_executor flag
bazel build //... \
  --remote_executor=grpc://buildgrid.example.com:50051 \
  --remote_instance_name=main

# Google Cloud Build Remote Execution
bazel build //... \
  --remote_executor=remotebuildexecution.googleapis.com \
  --remote_instance_name=projects/my-project/instances/default \
  --google_default_credentials

# Caching (without remote execution)
bazel build //... \
  --remote_cache=grpc://cache.example.com:9092

# Show what's cached
bazel build //... --remote_upload_local_results=true
```

### 7. Sandbox debugging

```bash
# Show sandbox inputs and outputs
bazel build //src:main --sandbox_debug

# Run build with verbose sandboxing
bazel build //src:main --verbose_failures --sandbox_debug

# Disable sandbox entirely (for debugging)
bazel build //src:main --spawn_strategy=local

# Common sandbox errors
# "No such file or directory" → missing data dependency
#   Fix: add file to `data = [...]` attribute
# "Permission denied" → trying to write outside sandbox
#   Fix: use genrule output paths instead of hardcoded paths
# "FAILED: Build did NOT complete successfully" → check verbose output

# See the exact command Bazel ran
bazel build //src:main --subcommands
```

For Bazel C++ toolchain configuration, see [references/bazel-cpp-toolchain.md](references/bazel-cpp-toolchain.md).

## Related skills

- Use `skills/build-systems/cmake` for CMake as an alternative build system
- Use `skills/build-systems/build-acceleration` for sccache integration with Bazel remote cache
- Use `skills/compilers/gcc` or `skills/compilers/clang` for compiler flags used in Bazel `copts`

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Похожие скиллы

Все скиллы по теме «DevOps и инфраструктура» →
wizard Matt Pocock Скилл создаёт интерактивный bash-скрипт для ручных шагов: настройки сервисов, секретов CI и разовых миграций. 553 369установок hyperframes-cli heygen-com Управляет проектами HyperFrames через терминал: собирает таймлайн, проверяет контраст кадров, запускает предпросмотр и рендерит видео локально или в облаке. CX Codex +1 1 300 000установок setup-pre-commit Matt Pocock Скилл настраивает pre-commit для JavaScript-репозитория: Husky запускает форматирование, проверку типов и тесты перед коммитом. 489 289установок using-git-worktrees Jesse Vincent Готовит изолированное рабочее дерево перед доработкой или выполнением плана. Проверяет текущий репозиторий, выбирает нативные средства платформы либо Git. CX Codex 217 153установок finishing-a-development-branch Jesse Vincent Скилл проверяет тесты и помогает выбрать, как завершить работу в ветке: слить её, открыть Pull Request или оставить как есть. CX Codex 214 439установок orca-cli stablyai Скилл даёт агенту доступ к worktree, терминалам, артефактам и встроенному браузеру Orca через CLI. Пригодится, когда работа идёт в окружении Orca. CX Codex +1 353 600установок

Из того же набора90

zig-compiler Ведёт агента по вызову компилятора Zig: режимы оптимизации, типы сборки, zig cc вместо C-компилятора и разбор сообщений об ошибках. CX Codex +1 450установок zig-comptime Скилл для агентов, который помогает писать обобщённые функции, рефлексию типов и код, вычисляемый на этапе компиляции в Zig. CX Codex +1 443установок zig-testing Скилл ведёт агента по тестовой системе Zig: zig build test, фильтры, comptime-проверки, тестовый аллокатор и встроенный фаззер. CX Codex +1 440установок ebpf-rust Руководство по разработке eBPF-программ на Rust с фреймворком Aya. Помогает писать код ядра, передавать события через Tokio и разбирать ошибки верификатора. CX Codex +1 438установок stm32-baremetal Ведёт агента по сборке прошивки STM32 на одних заголовках CMSIS: тактовые частоты, RCC, линкерный скрипт, сборка через arm-none-eabi-gcc. CX Codex +1 360установок device-drivers Скилл ведёт агента по разработке драйверов ядра Linux: platform/i2c/spi, символьные устройства, IRQ, DMA, regmap и runtime PM. CX Codex +1 358установок reverse-engineering Скилл для разбора скомпилированных бинарей: подсказывает агенту порядок работы с Ghidra, radare2 и Binary Ninja. Пригодится, когда исходников нет, а логику восстановить надо. CX Codex +1 350установок abi-and-calling-conventions Скилл для ИИ-агента, который разбирает правила ABI: какие регистры держат аргументы, как выравнивается стек, что ломается в FFI. CX Codex +1 342установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой