ProgramSmith
Convert GitHub repos into Harbor tasks automatically.
Overview
Automates task creation from real open-source repos. Input any GitHub repo, and it produces a long-horizon ProgramBench-style reverse engineering task.
Every task is difficulty-calibrated and audited before export. If reward-hacking, task environment problems, or verifier design issues are found, the pipeline continues iterating through a loop until all QA and difficulty calibration is met. Task execution and grading are containerized, with required dependencies installed when each task image is built.
Quick Start
# Install
uv pip install programsmith
# Generate a task from a repo
programsmith create --repo d5/tengo
# Or farm multiple tasks at once
programsmith farm repos.txt
Installation
uv pip install programsmith
Ensure Docker is running and at least one model credential is set:
export CLAUDE_CODE_OAUTH_TOKEN=<token> # (run `claude setup-token` in your CLI)
# or
export ANTHROPIC_API_KEY=<api-key>
Trials can run on any provider:
export OPENAI_API_KEY=<api-key> # codex CLI + any openai/* model
export GEMINI_API_KEY=<api-key> # gemini CLI + any gemini/* model
export ZAI_API_KEY=<api-key> # GLM models via the mini-SWE-agent harness
Usage
Alias: psmith <cmd> is automatically installed
Commands:
programsmith create— Generate a task from a repoprogramsmith farm— Farm a list of repos into multiple tasksprogramsmith serve— Start the browser dashboard in the backgroundprogramsmith stop— Stop the background dashboardprogramsmith doctor— Preflight checks (Docker, credentials, disk)programsmith status— Pipeline status
Generate a Task
programsmith create --repo <owner/repo>
Runs the full pipeline (see below). Accepted tasks are exported to out/tasks/, tasks that fail
calibration but are sound are exported to out/easy/.
Re-running the same command resumes the run from wherever it parked. Ctrl-C stops active model trials, keeps completed trials, and leaves unfinished work ready to resume.
Options
--sha SHA— Pin a commit (default: resolve HEAD)--slug NAME— Run key (default: repo name)--smoke [HARNESS:]PROVIDER/MODEL— Initial smoke sweep agent (default:anthropic/claude-haiku-4-5on the credential-aware harness)--frontier [HARNESS:]PROVIDER/MODEL— Difficulty calibration agent (default:anthropic/claude-opus-4-8; e.g.codex:openai/gpt-5.5,gemini-cli:gemini/gemini-3.1-pro-preview,mini-swe:zai/glm-5.2)--config FILE.json/--preset NAME— Full RunConfig (agents + per-model bands)--brief TEXT— Steer the task generation scope (eg "port the FFT subsystem...")--review— Pause at the two human gates (scope pick, final QA) instead of auto--yes— Skip the cost preview confirmation--runs-dir PATH— Choose the directory for runs (default:.programsmith/runs)--allow-copyleft— Allow copyleft-licensed sources
Farm Multiple Repositories
programsmith farm repos.txt
Streams through a repo list (one owner/name[@sha] per line) and drives every run to
completion in the foreground. Re-running the command picks
up existing runs where they stopped. A curated starter list of known-good repos is included
(pb10-repos.txt).
Options
- All flags from
create:--smoke,--frontier,--config,--preset,--review,--yes,--runs-dir, shared for all runs --no-drive— Only create + ingest the runs (drive them later withserve)--no-prune— Skip thedocker image prunehygiene between completed runs
Dashboard
programsmith serve
# The dashboard runs in the background and survives Ctrl-C / closing this shell.
programsmith stop
Serves the local dashboard at http://localhost:8765: live pipeline DAG for each run, agent
output, sweep results, file explorer, and optional review gates. Evaluation sweeps remain parked
unless serve --spend is used.
programsmith serve returns after the dashboard is healthy; programsmith stop is the explicit
shutdown command.
Task Requirements
What repos work well
Best sources: small-to-medium CLI tools with deterministic stdin/stdout behavior (formatters, converters, parsers, interpreters, compression tools, query tools).
A good source repo:
- Builds cleanly in a container (Go, Rust, C, C++, etc)
- Has a CLI surface with deterministic, byte-reproducible output
- Is permissively licensed (verified in pipeline)
- Is not already saturated by frontier models
The pipeline also auto-rejects repos already used by public ProgramBench-style datasets.
Pipeline
Pipeline details
ProgramSmith runs a fixed DAG of deterministic gates. LLM work is quarantined to synthesis cells whose JSON output is schema-validated before passing any gate. The orchestrator routes only on gate verdicts.
- Ingest + Lock — clone, pin SHA, check license and overlap
- Task Matrix — pick the task scope
- Oracle + Goldens — build the reference oracle and generate public + held-out golden I/O cases (including adversarial cases)
- Create — make the task: repo, instruction, verifier, Dockerfile
- Sanity Check — check oracle scores 1, nop (empty solution) scores 0
- Static Checks — anti-cheat check suite (closed internet, asset encryption, no reviewer-visible goldens, reward format, etc)
- Smoke Sweep — N smoke-model trials; 100% pass ⇒ saturated ⇒ ease or drop
- Calibrate — band check; out-of-band tasks are hardened/eased via patches
- Audit Probe — adversarial agent looks for reward hacks, exploits are fixed
- Frontier Sweep — N frontier-model trials; target pass@1 in [1/3, 2/3] or whatever is specified
- QA Gate — good-failure analysis on 0-pass tasks, accepted tasks are exported
License
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 programsmith-0.1.0.tar.gz.
File metadata
- Download URL: programsmith-0.1.0.tar.gz
- Upload date:
- Size: 2.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5904603326d489e66577d49819bce040383092a10bceff0a920f57d31a3cbc2c
|
|
| MD5 |
a7edb409541426d30f0cb561aa2a19a7
|
|
| BLAKE2b-256 |
0cc4837c06eb64c5a63cf0ca1ec5ad63644cf7238c37718cb5202b59282c680e
|
Provenance
The following attestation bundles were made for programsmith-0.1.0.tar.gz:
Publisher:
release.yml on abundant-ai/ProgramSmith
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
programsmith-0.1.0.tar.gz -
Subject digest:
5904603326d489e66577d49819bce040383092a10bceff0a920f57d31a3cbc2c - Sigstore transparency entry: 2371204168
- Sigstore integration time:
-
Permalink:
abundant-ai/ProgramSmith@9fd0fb54b37d26c680c59b095e5fa8d376694cef -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/abundant-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9fd0fb54b37d26c680c59b095e5fa8d376694cef -
Trigger Event:
push
-
Statement type:
File details
Details for the file programsmith-0.1.0-py3-none-any.whl.
File metadata
- Download URL: programsmith-0.1.0-py3-none-any.whl
- Upload date:
- Size: 757.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e42b16abd6a9611da52f01a0eb8495b9194483f25b3a88174419ee79cef13d3
|
|
| MD5 |
ae3c25b56e05d8da3a10c16d7e5efaa3
|
|
| BLAKE2b-256 |
f33140ae84e4550b9195a1a3e9527670f57b47df0ceef7afe35c7f876215489f
|
Provenance
The following attestation bundles were made for programsmith-0.1.0-py3-none-any.whl:
Publisher:
release.yml on abundant-ai/ProgramSmith
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
programsmith-0.1.0-py3-none-any.whl -
Subject digest:
2e42b16abd6a9611da52f01a0eb8495b9194483f25b3a88174419ee79cef13d3 - Sigstore transparency entry: 2371204175
- Sigstore integration time:
-
Permalink:
abundant-ai/ProgramSmith@9fd0fb54b37d26c680c59b095e5fa8d376694cef -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/abundant-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9fd0fb54b37d26c680c59b095e5fa8d376694cef -
Trigger Event:
push
-
Statement type: