Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
8881ccf
add SDK example environments
jdchawla29 Aug 17, 2026
a520fce
ci: exercise generated example environments
jdchawla29 Aug 18, 2026
6f7ce49
clarify task source and runtime selection
jdchawla29 Aug 18, 2026
694f59c
generalize coding tasks and fix graders
jdchawla29 Aug 19, 2026
8056a77
serialize fixed-runtime coding example
jdchawla29 Aug 19, 2026
3ccce53
Consolidate blank example environment (#604)
jdchawla29 Aug 21, 2026
29a3022
simplify coding example grading
jdchawla29 Aug 21, 2026
1583683
fix coding example CI sandbox
jdchawla29 Aug 21, 2026
549d517
allow coding CI user namespaces
jdchawla29 Aug 21, 2026
29de28d
fail on missing JUnit reports
jdchawla29 Aug 21, 2026
face81e
match coding CI to SDK sandbox
jdchawla29 Aug 21, 2026
bef47d8
reject negative CUA check weights
jdchawla29 Aug 21, 2026
8168733
handle coding task failures cleanly
jdchawla29 Aug 21, 2026
99d6cf7
tighten example task grading
jdchawla29 Aug 21, 2026
f5877a7
reject symlinked init destinations
jdchawla29 Aug 21, 2026
10ce902
isolate coding example grading
jdchawla29 Aug 21, 2026
13cc919
simplify example environment guidance
jdchawla29 Aug 21, 2026
472d7ad
protect example grading from pytest hooks
jdchawla29 Aug 21, 2026
31f536e
close example grading gaps
jdchawla29 Aug 21, 2026
4942652
address CodeQL findings
jdchawla29 Aug 21, 2026
6baa2a9
grade CUA navigation from browser state
jdchawla29 Aug 21, 2026
c35b5e8
tighten CUA example grading
jdchawla29 Aug 21, 2026
4c9bc0d
reject failed binary test commands
jdchawla29 Aug 21, 2026
c372788
add argument-hints example and platform arg hints
shfunc Aug 24, 2026
2cc9d1b
align argument-hints tooling
shfunc Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ on:
pull_request:
branches: [ "*" ]

permissions:
contents: read

jobs:
test:
runs-on: ubuntu-latest
Expand All @@ -26,6 +29,94 @@ jobs:
- name: Run tests
run: uv run --python ${{ matrix.python-version }} --all-extras pytest --cov --cov-report=''

templates:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
template: [blank, coding, cua, argument-hints]

steps:
- name: Check out code
uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v5

- name: Create example environment
run: uv run hud init "${{ runner.temp }}/${{ matrix.template }}" --template "${{ matrix.template }}"

- name: Install example with the SDK from this checkout
working-directory: ${{ runner.temp }}/${{ matrix.template }}
run: |
uv build --wheel --no-create-gitignore --out-dir .hud-sdk "$GITHUB_WORKSPACE"
uv add --no-sync .hud-sdk/hud-*.whl
uv sync --all-extras
sed -i '/^RUN .*uv sync/i COPY .hud-sdk .hud-sdk' Dockerfile.hud
echo '!.hud-sdk/' >> .dockerignore
echo '!.hud-sdk/**' >> .dockerignore

- name: Run example checks
working-directory: ${{ runner.temp }}/${{ matrix.template }}
run: |
uv run --no-sync hud task list --source .
if [ -d tests ]; then
uv run --no-sync ruff format . --check
uv run --no-sync ruff check .
uv run --no-sync pytest -q
fi

- name: Build example image
working-directory: ${{ runner.temp }}/${{ matrix.template }}
run: docker build --file Dockerfile.hud --tag "hud-example:${{ matrix.template }}" .

- name: Start example image
env:
TEMPLATE: ${{ matrix.template }}
run: |
docker_args=()
if [ "$TEMPLATE" = coding ]; then
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
docker_args+=(
--security-opt "seccomp=$GITHUB_WORKSPACE/hud/eval/docker-seccomp.json"
--security-opt systempaths=unconfined
--security-opt apparmor=unconfined
)
Comment thread
cursor[bot] marked this conversation as resolved.
fi
docker run --detach --name hud-example --publish 8765:8765 --shm-size 2g "${docker_args[@]}" \
"hud-example:${{ matrix.template }}"

- name: Inspect example image
working-directory: ${{ runner.temp }}/${{ matrix.template }}
run: |
for attempt in {1..60}; do
if (echo > /dev/tcp/127.0.0.1/8765) 2>/dev/null \
&& uv run --no-sync hud client info --url tcp://127.0.0.1:8765; then
exit 0
fi
sleep 1
done
docker logs hud-example
exit 1

- name: Run blank task lifecycle
if: matrix.template == 'blank'
working-directory: ${{ runner.temp }}/${{ matrix.template }}
run: |
uv run --no-sync hud task start 0 --source tasks.py --url tcp://127.0.0.1:8765
test "$(uv run --no-sync hud task grade 0 --source tasks.py --url tcp://127.0.0.1:8765 --answer 4)" = "1.0"

- name: Run coding task lifecycle
if: matrix.template == 'coding'
working-directory: ${{ runner.temp }}/${{ matrix.template }}
run: |
uv run --no-sync hud task start flask-4992 --source tasks.py --url tcp://127.0.0.1:8765
test "$(uv run --no-sync hud task grade flask-4992 --source tasks.py --url tcp://127.0.0.1:8765 --answer done)" = "0.0"

- name: Stop example image
if: always()
run: docker rm --force hud-example || true

lint-ruff:
runs-on: ubuntu-latest
steps:
Expand Down
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,6 @@ hud/rl/checkpoints_test/

docs/internal

environments/

experiments/
.memories/

Expand Down
14 changes: 3 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,12 @@ hud set HUD_API_KEY=your-key-here
# or: export HUD_API_KEY=your-key-here
```

Then scaffold your first environment:
Then start from the coding environment, or choose another example environment:

```bash
hud init my-env
Comment thread
jdchawla29 marked this conversation as resolved.
hud init my-desktop-env --template cua
hud init my-custom-env --template blank
```

![Agent running on SheetBench](docs/src/images/trace_sheet.gif)
Expand Down Expand Up @@ -80,16 +82,6 @@ hud sync tasks my-taskset
hud eval my-taskset --remote
```

For local iteration, the same protocol works against a container on your laptop:

```bash
docker build -f Dockerfile.hud -t my-env .
docker run -d --name run1 -p 8765:8765 my-env
hud task start fix_bug --url tcp://127.0.0.1:8765
hud task grade fix_bug --url tcp://127.0.0.1:8765 --answer "..."
docker rm -f run1
```

→ [Run & deploy](https://docs.hud.ai/v6/reference/runtime)

## Environments & templates
Expand Down
23 changes: 0 additions & 23 deletions cookbooks/codex-coding/README.md

This file was deleted.

180 changes: 0 additions & 180 deletions cookbooks/codex-coding/codex_agent.py

This file was deleted.

17 changes: 0 additions & 17 deletions cookbooks/codex-coding/pyproject.toml

This file was deleted.

17 changes: 7 additions & 10 deletions docs/skill.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,21 +130,18 @@ needed in the template. Cite [Capabilities](/v6/reference/capabilities).

---

## Start from a template
## Start from an example environment

`hud init` scaffolds a new environment. Pass `--preset <id>` to start from a
ready-made template instead of the blank scaffold (omit it for an interactive
picker):
`hud init` copies a complete environment project. Pass `--template <id>` to
choose one, or omit it for the interactive picker:

```bash
hud init my-env --preset browser
hud init my-env --template coding
```

Available presets: `blank`, `browser`, `cua` (computer-use desktop),
`deepresearch`, `coding`, `ml`, `ml-triage`, `verilog`, `autonomous-businesses`,
`gdpval`, `worldsim`, `robot`, `videogamebench`, and `arc-agi-3`. Each downloads
a complete, runnable starting point you adapt — prefer it over hand-writing an
environment from scratch. Cite [Quickstart](/v6/start/quickstart).
Available examples: `coding`, `cua` (computer-use desktop), and `blank`. Adapt
one of these projects instead of hand-writing an environment from scratch. Cite
[Quickstart](/v6/start/quickstart).

---

Expand Down
Loading
Loading