1,002 small, verifiable software-engineering tasks in the Harbor format, for training and evaluating small coding agents. templated. About a fifth are search tasks: find the right place in a larger repository with distractor files, then act.
Dataset Card
By Edoardo Federici, published under apache-2.0, revision 3ff4d6517d31.
1,002 small, verifiable software-engineering tasks in the Harbor format, for training and evaluating small coding agents.
- Codebases: 576 distinct hand-written mini-codebases with at most 2 tasks each, so the set is varied rather than templated.
- Languages: 12 programming languages (Python first) and instructions in 5 languages.
- Reward: 1 only when the hidden tests, the visible project tests and collateral-damage checks all pass.
- Size: most tasks are small. The agent reads 1–3 files, edits 1–2 and runs the tests, in about 3–10 tool calls. About a fifth are search tasks: find the right place in a larger repository with distractor files, then act.
Contents
| count | |
|---|---|
| tasks | 1,002 |
| codebases | 576 |
| programming languages | python 534, javascript 127, shell 79, c 56, ruby 46, sql 46, rust 39, go 23, lua 17, perl 17, java 9, php 9 |
| instruction languages | en 685, es 83, de 82, fr 77, it 75 |
| difficulty (1–3) | 1: 421, 2: 507, 3: 74 |
| search tasks | 225 |
Task types (26): fix_bug, add_feature, locate_fix, edge_case, implement_stub, search_answer, add_validation, find_and_change, add_test, read_answer, fix_shell_script, add_cli_flag, fix_sql_query, rename_symbol, handle_missing_file, traceback_fix, config_change, update_call_sites, write_transform_script, fix_build, refactor_extract, add_make_target, fix_regex, remove_dead_code, bump_version, and more.
Splits (manifest.jsonl, field split)
| split | tasks | notes |
|---|---|---|
| train | 228 | wave 1 |
| test_seen_types | 28 | wave 1: task types seen in train, new codebases |
| test_ood | 27 | wave 1: held-out task types |
| new_train | 599 | wave 2: small tasks, 31% search, 60% Python |
| new_test | 120 | wave 2: codebases disjoint from every train codebase |
Splits are made by codebase, never by task.
Layout
tasks/<codebase>--<slug>/
instruction.md the request (en / it / fr / de / es)
task.toml Harbor task config; metadata: language, task_type, difficulty, split, search, ...
environment/workdir/ the starting codebase (copied to /workdir)
solution/solve.sh the oracle
tests/ test.sh + check.json + the verifier (python3 only)
manifest.jsonl one row per task (id, codebase, language, domain, task_type, instruction_language,
difficulty, split, files_touched, oracle_steps, n_attacks, search, ...)
registry.json, build_report.json the index, plus build hashes (deterministic builds)
base_image/Dockerfile the shared offline image
generators/ the hand-written codebase and task specs and the builders / self-checks
Task names. task.toml names are small-software-harbor/<id> (the build name of this set).
Images. Wave-1 tasks use harbor-swe-base:1. Wave-2 tasks use harbor-swe-base:2, which is :1 plus perl
(with prove) and lua 5.4. The image is offline: python 3.11 with pytest, node 18, go 1.19, gcc 12 and make,
ruby 3.1 with minitest, php 8.2, OpenJDK 17, rust 1.63, sqlite3, git, jq and ripgrep. Nothing is downloaded at task
time.
Verification. Each task's checker enforces: - protected files keep their recorded hashes; - no stray source files; - text checks; - an answer file for search / answer tasks; - the visible project tests; - hidden checks run in a copy of the working directory.
Validation
- Every task: the oracle scores 1, doing nothing scores 0, and every documented attack scores 0. The attacks include editing or deleting tests, hardcoding outputs, and blind edits that skip the search.
- Wave 1: checked in Docker on its image.
- Wave 2: checked with the real toolchains and in Docker on
harbor-swe-base:2. In the Docker check, 1,002 of 1,003 built tasks passed every mode. The failing task (a shell task whose reference output depended on the awk implementation) is not included. - Determinism: builds are byte-for-byte reproducible (
build_report.json).
Limitations:
- Attacks reduce reward hacking but cannot rule it out.
- The tasks are deliberately small: they teach and measure basic agentic coding habits (read, locate, edit, test,
stop), not large-repository engineering.
- Tasks use two palingenesis HarborEnv extensions, environment/workdir/ and setup.sh. Under the plain Harbor CLI
these need the same conversion as other HarborEnv task sets.
Structure
default 1,002 rows
| Split | Rows | Size |
|---|---|---|
| test | 1,002 | 1.9 MB |
Details
- Repository
- efederici/smol-software-harbor
- Publisher
- Edoardo Federici
- Task category
- Text generation
- Tags
- harbor, agents, software-engineering
- Size category
- 1K<n<10K
- Languages
- en, it, fr, de, es
- Revision
- 3ff4d6517d31386bd291eef5f80869bca79101d4
- Last updated
- 2026-10-24
License and Download
- License
- apache-2.0
- Access
- No access gate
Released by Edoardo Federici through its official repository on Hugging Face. Read the license.