{"data":{"kind":"file","path":"README.md","version_id":"o3q8cl9f3sjhg5h0n2fhw2y1","entry":{"name":"README.md","path":"README.md","is_directory":false,"size":1652,"modified_at":"2026-05-29T16:51:27","content_hash":"0b82cd415f698b68abda7572c41ba19334bb185fab3709d3440efc75621882e3"},"entries":[],"content":"# termforge-env\r\n\r\nThe Verifiers environment package for TermForge. Loads YAML tasks from\r\n`tasks/train/` (under the termforge repo root), wraps them in a multi-turn tool-using harness with\r\neither a `MockSandbox` (for laptop testing) or a `DockerSandbox` (for real\r\ntraining), and exposes a 5-component reward function.\r\n\r\n## Install on Prime Intellect Lab\r\n\r\n```bash\r\n# Hub (hosted RL + eval from any machine):\r\nprime env install ibrahimdaud/termforge-env\r\n\r\n# Editable dev (from termforge repo root):\r\nuv pip install -e \"./environments/termforge_env[verifiers,docker]\"\r\nprime eval run ibrahimdaud/termforge-env -m poolside/Laguna-XS.2 -n 5\r\n```\r\n\r\n## Use directly (no Verifiers)\r\n\r\nThe package is also usable as a plain Python library — handy for the laptop\r\nmock test pipeline.\r\n\r\n```python\r\nfrom termforge_env import load_tasks, Harness, MockSandbox, MockAgent, compute_reward\r\n\r\ntasks = load_tasks(\"tasks/train\", difficulty=[\"hard\"])\r\nagent = MockAgent.from_canned_responses([\"bash> ls\\n\", \"bash> done\\n\"])\r\nharness = Harness(sandbox=MockSandbox(), max_turns=10)\r\n\r\nrollout = harness.run(task=tasks[0], agent=agent)\r\nreward, components = compute_reward(tasks[0], rollout, sandbox=MockSandbox({\"exit 0\": 0}))\r\nprint(f\"reward={reward:.3f}, components={components}\")\r\n```\r\n\r\n## Module layout\r\n\r\n```\r\ntermforge_env/\r\n├── __init__.py       public API\r\n├── taskset.py        load YAML tasks; TermForgeTaskset for Verifiers\r\n├── harness.py        multi-turn rollout loop; MockAgent for tests\r\n├── sandbox.py        Sandbox protocol; MockSandbox + DockerSandbox\r\n└── reward.py         5 reward functions; aggregator\r\n```\r\n","encoding":"utf-8","truncated":false,"total_bytes":1652},"status":null}