LegoFlow Curator

Advanced Guides

Configuration Guide

Curator config controls task discovery and task generation. This is where users choose repository collection scope, PR filters, LLM endpoints, and per-language generation limits.

Common edits

FieldWhen to edit
runtime_info.input.pr_collection.*Change collection scale, languages, output directory, or repository/PR filters.
runtime_info.input.llm_api.*Point Curator at the right model endpoint and Claude Code proxy mode.
runtime_info.input.languages.<lang>Enable languages and tune timeout, concurrency, and task caps.
runtime_info.input.github_tokenUsually leave empty and supply tokens through env or token files.

Complete config.yaml

blocks/curator/config.yaml
meta_info:  name: curator  label: "Curator"  description: Converts GitHub PRs into verified SWE-Bench tasks across 8 programming languages (Python, JavaScript, TypeScript, Go, C, C++, Java, Rust).  parent: legoflow  blocks: {}  dependencies:    from: {}   # task source block; no upstream    to:      merged_tasks_dir:        to: tracer.input.task_source.dataset_name        when: {tracer.input.task_source.provider: local}  repos:    legoflow-curator:      name: legoflow-curator      commit_id: 3ba57a1d07ac277d72546d705bf2de6f82ca373e      role: core pipeline - CLI, task generation, validation, scoring  environment:    venv_name: legoflow-curator-env    venv_path: artifacts/envs/legoflow-curator-env    requirements: repos/legoflow-curator/pyproject.toml    python_version: "3.12+"    description: Virtual environment for legoflow-curator CLI and dependencies  resources:    ip: local        # CPU-only; runs on any node with Docker available    # user / pwd / directory apply only when ip is a remote IP (SSH target).    # They are ignored for local execution — the block runs from its own dir.    user: null    pwd: null    directory: null    description: CPU node with Docker; runs locally by default.    public_storage: nullruntime_info:  input:    pr_collection:      enabled: true      languages: [c, cpp, go, java, javascript, typescript, python, rust]      repo_num: 100                   # repos WITH qualifying PRs per language      max_prs_per_repo: 50      output_dir: artifacts/collected_prs      token_limit: 32                 # first N combined file + env tokens (0 = all)      filters:        min_stars: 30        min_merged_prs: 5        min_language_percentage: 0.4        max_days_since_push: 1095        min_issue_body_length: 10        min_files_changed: 1        max_files_changed: 25        max_lines_changed: 1500    # Private values are read from environment variables when possible:    #   OPENAI_API_KEY / ANTHROPIC_API_KEY / CLAUDE_CODE_OAUTH_TOKEN    #   OPENAI_API_BASE_URL / ANTHROPIC_BASE_URL    # Keep tracked config.yaml free of real keys and private endpoints.    llm_api:      api_key: human                          # never commit a real key; prefer env/.env      api_base_url: human                     # OpenAI-compatible endpoint (PR eval + instruction gen)      pr_model: Qwen3.6-35B-A3B               # model for PR filtering/instruction generation      task_model: claude-sonnet-4-6           # Claude Code-visible alias for task creation      cc_provider_mode: openai_proxy          # native | openai_proxy      anthropic_base_url: http://127.0.0.1:4010      cc_proxy_port: 4010    github_token: ""    # supplied via GITHUB_TOKENS/GITHUB_TOKEN or gh_token.txt; never commit a token    # max_verified_tasks: N = stop after N verified tasks; "all" = no cap, consume all collected PRs.    languages:      py:   { enabled: true,  params: { timeout: 3200, cc_timeout: 2400, n_concurrent: 24, max_verified_tasks: 256 } }      js:   { enabled: true,  params: { timeout: 3200, cc_timeout: 2400, n_concurrent: 16, max_verified_tasks: 128 } }      ts:   { enabled: true,  params: { timeout: 3600, cc_timeout: 3000, n_concurrent: 16, max_verified_tasks: 128 } }      go:   { enabled: true,  params: { timeout: 3200, cc_timeout: 2400, n_concurrent: 16, max_verified_tasks: 128 } }      c:    { enabled: true,  params: { timeout: 3200, cc_timeout: 2400, n_concurrent: 16, max_verified_tasks: 128 } }      cpp:  { enabled: true,  params: { timeout: 3200, cc_timeout: 2400, n_concurrent: 16, max_verified_tasks: 128 } }      java: { enabled: true,  params: { timeout: 3200, cc_timeout: 2400, n_concurrent: 16, max_verified_tasks: 128 } }      rust: { enabled: true,  params: { timeout: 3600, cc_timeout: 3000, n_concurrent: 16, max_verified_tasks: 128 } }  output:    swe_tasks_dir:      path: artifacts/swe_tasks      description: Per-language task directories ({lang}-cc/), each with verifiable_tasks.txt listing verified task IDs      structure: "artifacts/swe_tasks/{lang}-cc/{task_id}/ with instruction.md, environment/, solution/, tests/"    merged_tasks_dir:      path: artifacts/merged_swe_tasks      description: Optional flattened directory containing all verified tasks from all languages (populated by scripts/extract_verified_tasks.py)      structure: "artifacts/merged_swe_tasks/{task_id}/ with instruction.md, environment/, solution/, tests/"      extract_command: python scripts/extract_verified_tasks.py    logs:      path: artifacts/logs/legoflow-curator-create      description: "Per-language create logs: cc_<lang>_March.txt"

Field guide

FieldMeaningUser actionExamples
meta_info.name, label, description, parentCurator identity and parent block.Do not edit for normal runs.Default block identity.
meta_info.dependencies.fromCurator has no upstream task source.Do not edit.Keep default unless changing handoffs.
meta_info.dependencies.to.merged_tasks_dirWires curated tasks to Tracer when Tracer uses a local task source.Do not edit unless rewiring pipeline outputs.Keep default unless changing handoffs.
meta_info.repos.legoflow-curatorPinned task-generation repository.Do not edit unless intentionally updating implementation code.Pinned commits in repos/.
meta_info.environment.*Python environment and dependency metadata for legoflow-curator.Read during setup; normally do not edit.artifacts/env/..., Python 3.12 / 3.13.
meta_info.resources.*Host where Curator runs.Keep local unless moving work to a remote node.local; remote IP only for SSH runs.
runtime_info.input.pr_collection.enabledWhether PR collection is active.Disable only if using already collected inputs.true, false.
runtime_info.input.pr_collection.languagesLanguages to collect from GitHub.Edit to narrow or expand task sources.[python, rust], [c, cpp, go, java].
runtime_info.input.pr_collection.repo_numTarget number of qualifying repositories per language.Lower for smoke runs, raise for data production.10 smoke, 100 production.
runtime_info.input.pr_collection.max_prs_per_repoMaximum candidate PRs per repository.Tune for scale and cost.10, 50.
runtime_info.input.pr_collection.output_dirWhere collected PR metadata is written.Usually keep default.artifacts/... paths written by runs.
runtime_info.input.pr_collection.token_limitFirst N combined file/env tokens used during collection.Tune only when collection is too broad or too expensive.0 all, 32 first tokens.
runtime_info.input.pr_collection.filters.*Repository and PR quality filters.Tune to control difficulty, recency, size, and quality.min_stars: 30, max_files_changed: 25.
runtime_info.input.llm_api.api_keyLLM API key marker.Replace via setup/env; do not commit real keys.""; use env/private local config.
runtime_info.input.llm_api.api_base_urlLLM API endpoint marker.Fill with the endpoint used for Curator models.""; private OpenAI-compatible endpoint.
runtime_info.input.llm_api.pr_modelModel for PR analysis.Change when using a different PR filtering model.Qwen3.6-35B-A3B, claude-opus-4-6.
runtime_info.input.llm_api.task_modelModel for task generation.Change when using a different task-writing model.claude-sonnet-4-6, proxy alias.
runtime_info.input.llm_api.cc_provider_modeClaude Code provider mode.Keep aligned with your proxy/native setup.openai_proxy, native.
runtime_info.input.llm_api.anthropic_base_urlAnthropic-compatible proxy endpoint.Edit when your local proxy port changes.http://127.0.0.1:4010, provider Anthropic URL.
runtime_info.input.llm_api.cc_proxy_portLocal Claude Code proxy port.Edit only when the proxy uses another port.4010, 4011.
runtime_info.input.github_tokenFallback GitHub token field.Prefer env variables or gh_token.txt; keep tracked config empty.""; GITHUB_TOKENS or gh_token.txt.
runtime_info.input.languages.<lang>.enabledWhether to generate tasks for a language.Toggle per run.true, false.
runtime_info.input.languages.<lang>.params.timeoutEnd-to-end generation timeout.Raise for slow ecosystems.2400, 3200, 3600 seconds.
runtime_info.input.languages.<lang>.params.cc_timeoutClaude Code task-generation timeout.Raise when generation times out.2400, 3200, 3600 seconds.
runtime_info.input.languages.<lang>.params.n_concurrentPer-language concurrency.Tune for machine capacity and API limits.4, 8, 16, 24.
runtime_info.input.languages.<lang>.params.max_verified_tasksVerified task cap per language.Use small values for smoke runs.10 smoke, 128, 256, all.
runtime_info.output.swe_tasks_dirPer-language verified task output.Read downstream; usually do not edit.artifacts/... paths written by runs.
runtime_info.output.merged_tasks_dirFlattened verified task output for Tracer.Usually keep default.artifacts/... paths written by runs.
runtime_info.output.logsPer-language generation logs.Use for debugging.artifacts/... paths written by runs.

On this page