Build a reproducible test environment for one or more repositories. Successful
environments are written to environments.jsonl.
Add the model credential required by configs/default/build.yaml to .env:
OPENAI_API_KEY=your_key
# OPENAI_BASE_URL=https://your-relay.example/v1Build one repository:
fb build owner/repositoryBuild a specific branch, tag, or commit:
fb build owner/repository --ref mainBuild repositories produced by Discover:
fb build outputs/discover-YYYYMMDD-HHMMSS/repositories.jsonl --limit 10Use --output to choose the run directory and repeat --config to compose YAML
profiles:
fb build owner/repository \
--config configs/default/build.yaml \
--config configs/default/host.yaml \
--output outputs/my-buildContinue a run with its current configuration:
fb --resume outputs/build-YYYYMMDD-HHMMSSRetry failed, rejected, or interrupted repositories as well as new ones:
fb --resume outputs/build-YYYYMMDD-HHMMSS --select non-successSee Resume for selection options.
Remove the existing result before rebuilding it:
fb build remove outputs/build-YYYYMMDD-HHMMSS owner/repository
fb --resume outputs/build-YYYYMMDD-HHMMSS --select non-successThe removed record is archived under .featurebench/removals/. Its local Docker
image is deleted.
The default profile is configs/default/build.yaml.
It controls:
- repository checkout and Git behavior;
- Docker resources and timeouts;
- the environment-building model;
- accepted test coverage and retry limits;
- available language and runtime base images.
The YAML file is fully commented and is the configuration reference.
- The repository is pinned to an exact commit.
/testbedis the source of truth for project code.- Tests must consume Agent edits from the current
/testbedcheckout, not a stale installed copy. - Dependencies are installed while the image is built; runtime test execution is offline by default.
- Only environments that collect and pass enough real tests are written to
environments.jsonl.
See Data organization for the output fields.