Skip to content
timon0305Public

About

Convert GitHub PRs into Harbor tasks

Resources

Stars

0 stars

Watchers

0 watching

Forks

Β 
Β 

Latest commit

Β 

History

105 Commits

Folders and files

Repository files navigation

SWE-gen llama genie

Python License PyPI

SWE-gen

Convert merged GitHub PRs into Harbor tasks automatically.

Overview

Automates task creation from real bug fixes in open-source GitHub repos. Works with any programming language: Claude Code analyzes the repo to detect language, build system, and test framework.

Each task reverses a merged PR to recreate the buggy state, verifies tests fail on baseline, and pass after applying the fix. Fully containerized with all dependencies installed at build time.

News

  • [01/2026] πŸ”₯ SWE-gen-JS released: 1,000 JS/TS task dataset generated with SWE-gen

Quick Start

# Install
uv pip install swegen

# Generate a task from a merged PR
swegen create --repo axios/axios --pr 7150

# Or farm all PRs from a repo
swegen farm fastapi/fastapi

Installation

uv pip install swegen

Ensure these environment variables are set:

export GITHUB_TOKEN=<gh-token>
export OPENAI_API_KEY=<api-key>
export ANTHROPIC_API_KEY=<api-key>  # or CLAUDE_CODE_OAUTH_TOKEN

Note: Cloud sandbox environments (Daytona, E2B, Modal, etc.) require additional API keys.

Usage

Commands:

  • swegen create β€” Generate a task from a merged PR
  • swegen farm β€” Continuously process PRs from a repository
  • swegen validate β€” Validate existing task (NOP + Oracle)
  • swegen analyze β€” Deep analysis with agent trials to verify task quality

Generate a Task

swegen create --repo <owner/repo> --pr <num>
Options
  • --output PATH β€” Output directory for generated tasks (default: tasks)
  • --state-dir PATH β€” State directory for cache/logs (default: .swegen)
  • --cc-timeout N β€” Claude Code session timeout in seconds (default: 3200)
  • --env, -e TYPE β€” Environment type: docker, daytona, e2b, modal, runloop, gke (default: docker)
  • --no-validate β€” Skip Harbor validations
  • --force β€” Bypass local dedupe and regenerate
  • --no-cache β€” Disable cached artifacts from previous tasks
  • --no-require-minimum-difficulty β€” Skip 3+ file and LLM substantiality checks
  • --min-source-files N β€” Minimum number of source files required (default: 3, tests excluded)
  • --max-source-files N β€” Maximum number of source files to avoid large refactors (default: 10, tests excluded)
  • --no-require-issue β€” Allow PRs without linked issues (uses PR body/title for instructions)
  • -v, --verbose / -q, --quiet

Continuous PR Farming

Stream through entire PR history, process each sequentially with state persistence.

swegen farm fastapi/fastapi
swegen farm fastapi/fastapi --resume-from 2024-01-15
Options
  • --output PATH β€” Output directory for generated tasks (default: tasks)
  • --state-dir PATH β€” State directory for cache/logs (default: .swegen)
  • --timeout N β€” Timeout per PR in seconds (default: 300)
  • --cc-timeout N β€” Claude Code session timeout (default: 3200)
  • --task-delay N β€” Delay between tasks in seconds (default: 60)
  • --api-delay N β€” Delay between GitHub API calls in seconds (default: 0.5)
  • --env, -e TYPE β€” Environment type: docker, daytona, e2b, modal, runloop, gke (default: docker)
  • --resume-from DATE β€” Resume from date or timestamp
  • --reset β€” Reset state and start from beginning
  • --dry-run β€” Preview without generation
  • --force β€” Regenerate even if task already exists (default: true)
  • --no-validate β€” Skip Harbor validation step
  • --require-issue / --no-require-issue β€” Require PRs to have linked issues (default: True)
  • --no-require-minimum-difficulty β€” Skip 3+ file and LLM checks
  • --min-source-files N β€” Minimum number of source files required (default: 3, tests excluded)
  • --max-source-files N β€” Maximum number of source files to avoid large refactors (default: 10, tests excluded)
  • --no-cache β€” Disable cached artifacts
  • --docker-prune-batch N β€” Run docker cleanup after every N PRs (default: 5, 0 to disable)
  • --skip-list PATH β€” Path to file with task IDs to skip (one per line)
  • -v, --verbose

Validate Existing Tasks

Verify that a task passes NOP (baseline fails) and Oracle (solution succeeds) agents:

swegen validate <task_id>
Options
  • --task, -t ID β€” Task ID when path points to dataset root
  • --agent TYPE β€” both, nop, or oracle (default: both)
  • --jobs-dir PATH β€” Directory to store Harbor job artifacts (default: .swegen/harbor-jobs)
  • --env, -e TYPE β€” Environment type: docker, daytona, e2b, modal, runloop, gke (default: docker)
  • --timeout-multiplier N β€” Multiply default timeouts
  • --max-parallel N β€” Max parallel validations (default: 8)
  • --show-passed β€” Show passed tasks in batch mode
  • --output, -o PATH β€” Write results to file as they complete (batch mode only)
  • --docker-prune-batch N β€” Run docker cleanup after every N tasks (default: 5, 0 to disable)
  • -v, --verbose / -q, --quiet

Analyze Task Quality

Run agent trials to verify a task is well-specified and solvable:

swegen analyze <task_id>
swegen analyze <task_id> -k 5 -a claude-code
What analyze does
  1. Static quality check (harbor tasks check)
  2. Baseline validation (nop fails, oracle passes)
  3. Run N agent trials
  4. Trial classification (identifies TASK vs AGENT problems)
  5. Task verdict synthesis with actionable recommendations

Classification categories:

  • GOOD_SUCCESS β€” Agent solved it correctly
  • BAD_SUCCESS β€” Agent cheated or tests too permissive
  • GOOD_FAILURE β€” Agent failed due to its own limitations
  • BAD_FAILURE β€” Agent failed due to task issues (underspecified, brittle tests, etc.)
  • HARNESS_ERROR β€” Infrastructure problem
Options
  • -a, --agent TYPE β€” Agent to run trials (default: claude-code)
  • -m, --model MODEL β€” Model for agent trials (default: anthropic/claude-sonnet-4-5)
  • -k, --n-trials N β€” Number of trials (default: 3)
  • -n, --n-concurrent N β€” Number of concurrent trials (default: 3, 1=sequential)
  • --jobs-dir PATH β€” Directory to store job artifacts (default: .swegen/analyze-jobs)
  • --analysis-model MODEL β€” Model for Claude Code classification (default: claude-sonnet-4-5)
  • --env, -e TYPE β€” Environment type: docker, daytona, e2b, modal, runloop, gke (default: docker)
  • --skip-quality-check β€” Skip static quality check
  • --skip-baseline β€” Skip baseline validation (nop/oracle)
  • --skip-classify β€” Skip AI-powered classification
  • --save-to-dir β€” Write trajectory-analysis.{md,json} to each trial directory (for CI integration)
  • --classification-timeout N β€” Timeout per trial classification in seconds (default: 300)
  • --verdict-timeout N β€” Timeout for verdict synthesis in seconds (default: 180)
  • --timeout-multiplier N β€” Multiply default timeouts
  • -v, --verbose

Task Requirements

Valid PR criteria

Languages: Any (Python, JavaScript, TypeScript, Go, Rust, Ruby, Java, etc.)

Valid PRs must:

  • Be merged to primary branch with accessible fork
  • Include test changes and corresponding fix
  • Have a linked issue for high-quality instructions (bypass with --no-require-issue)
  • Modify 3-10 source files (configurable with --min-source-files and --max-source-files, bypass with --no-require-minimum-difficulty)
  • Pass LLM substantiality evaluation (bypass with --no-require-minimum-difficulty)
  • Fail tests on reversed baseline, pass after applying fix
  • Exclude documentation-only, formatting-only, or version-bump-only changes

How It Works

Pipeline details

The pipeline uses a language-agnostic approach:

  1. Fetch & Analyze β€” Get PR metadata via GitHub API, clone repo, identify test files
  2. Evaluate β€” LLM evaluates PR substantiality and generates task instructions
  3. Generate Skeleton β€” Create Dockerfile and test.sh with TODOs for Claude Code
  4. Claude Code Completion β€” CC analyzes repo, detects language/runtime/build system, fills in skeleton
  5. Validation β€” Run NOP (reward=0) and Oracle (reward=1) agents
  6. Iteration β€” CC iterates until both agents pass

Key Details:

  • Dockerfile clones at HEAD, then applies bug.patch to revert to buggy BASE state
  • Test files stored in task/tests/ and copied at runtime (prevents agent tampering)
  • fix.patch (solution) excludes tests/CI, contains all other PR changes
  • Dependencies installed at build time; runtime doesn't require internet access
  • Successful tasks are cached as references to speed up future tasks from the same repo
  • PR evaluation uses LLM to check substantiality and generate instructions

License

Apache License 2.0

About

Convert GitHub PRs into Harbor tasks

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages