Harbor environment adapter backed by the Ascii Box public API
Project description
harbor-box
A Harbor environment adapter backed by the Ascii Box public API.
BoxEnvironment runs Harbor agent trials and evals inside an Ascii Box instead
of a local Docker container, E2B, or Modal. It implements Harbor's
BaseEnvironment surface — lifecycle, command execution, environment variables,
and file/dir upload + download — on top of Box's public HTTP API.
Some Harbor features aren't available on Box today: network policies, Docker image builds / Compose, and GPUs / TPUs / Windows.
Layout
| Path | What |
|---|---|
sdks/harbor_box_environment.py |
BoxEnvironment — the Harbor adapter plus a small async Box API client |
sdks/harbor-box-evals/ |
End-to-end evals: a from-scratch Claude Agent SDK coding agent solving tasks inside a Box |
Install
pip install harbor-box # imports as: harbor_box_environment
Or from a clone of this repo:
pip install -r requirements.txt # harbor>=0.14.0, httpx, tenacity
Configure
cp .env.example .env
# fill in BOX_API_KEY
BOX_API_KEY is required — get one at https://box.ascii.dev. Your .env is
gitignored; never commit secrets.
Use it with Harbor
export BOX_API_KEY=...
harbor task run path/to/task.yaml \
--environment-import-path harbor_box_environment:BoxEnvironment
Preparing the environment
Box runs a ready Ubuntu image — it doesn't build Docker images. The adapter prepares each box from your Harbor environment directory instead:
- Files in the environment directory are uploaded into the box's working directory at start, so fixtures, configs, and scripts are in place before the agent runs.
- The
Dockerfileis read only for itsWORKDIR; build steps (RUN/COPY/ …) are not executed. Install dependencies from a setup command (await env.exec(...)) or your agent, not the image. - Environment variables come from the Harbor environment config and are
forwarded into the box; per-command env is passed through
exec.
task_env_config = EnvironmentConfig(
workdir="/workspace",
env={"DATABASE_URL": "postgres://..."},
)
Have a Dockerfile? Reproduce its RUN / COPY / WORKDIR steps on Box as a
runtime setup (outbound network works, so apt/pip/npm installs run). A complete,
runnable example is in
examples/dockerfile_to_box.py.
Cleanup & billing
Harbor stops a trial's box as soon as the trial finishes — including when it
errors — so a box only costs you while a trial is actually running. By default
stop() removes the box (delete=True, matching Harbor); pass delete=False to
keep a resumable snapshot instead. Either way compute billing stops. The
ttl_seconds you set is just a safety backstop for an abandoned box.
Isolation
Boxes are no-env by default: a trial gets none of your Box account's secrets,
credentials, or cloned repos and can't act on your account or other boxes. Pass
no_env=False to use your account's environment instead, configured in the
Box dashboard. See
Secrets & Setup.
Verify the adapter
A self-contained end-to-end self-test exercises start → persistent/per-command env vars → binary upload/download → nested directory upload/download → stop:
export BOX_API_KEY=...
python sdks/harbor_box_environment.py
# -> Box Harbor adapter e2e self-test PASSED
CI runs this self-test on every push.
Evals
A from-scratch Claude Agent SDK
coding agent solving tasks inside a Box, scored by inspecting the result. See
sdks/harbor-box-evals/README.md.
Releasing
Maintainers publish harbor-box to PyPI from a local checkout — see
docs/release.md. CI never publishes.
License
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file harbor_box-0.1.1.tar.gz.
File metadata
- Download URL: harbor_box-0.1.1.tar.gz
- Upload date:
- Size: 11.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3cf31205c161fafb6c5a4977bdd4d8ad4eef7c8ff68997156b26712b6a33a247
|
|
| MD5 |
6cd685116f2ded30bb8236d2e5e140b7
|
|
| BLAKE2b-256 |
538324452e64026b0a401cfd66bac780bf856dd331fb43e2ad583f418b0f3a3a
|
File details
Details for the file harbor_box-0.1.1-py3-none-any.whl.
File metadata
- Download URL: harbor_box-0.1.1-py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48011d3098ac11118e56170e1f29a7e5c5d937d46459a05897cfa257a5dd9f6b
|
|
| MD5 |
e5debf3c243e2ed61f0e3a9229e9fa75
|
|
| BLAKE2b-256 |
6ffe5cbdbbba083973f7ae739d475b00d4e2a225ac1d00fc47ffdded11ccaccd
|