Skip to content
Report library
Purpose / Documents

Env And Assets Bootstrap Skill Security Audit

What the author says it does (original text)

Rigor Setup skill for README-first deep learning repo reproduction. Use when the task is specifically to prepare a conservative conda-first environment, checkpoint and dataset path assumptions, cache location hints, and setup notes before any run on a README-documented repository. Do not use for repo scanning, full orchestration, paper interpretation, final run reporting, or generic environment se

Independent security check

Do not install or run it yet

Files checked
24
Risks found
4
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.Risks found: 2
High risk

`--run-selected` executes an automatically selected, untrusted README command on the host

Source references: 5
What we found

The orchestrator extracts commands from repository documentation and chooses one heuristically. With `--run-selected`, that command string reaches the persistent runner and is launched through `subprocess.Popen`. Presence in a README is not the same as per-command user review.

Why this matters

A malicious or compromised repository can disguise a Python script or other program as an inference, evaluation, or training example and run with the user's permissions, allowing file access or modification, network activity, resource consumption, or use of logged-in tools.

The risk is supported, but execution occurs only when the user explicitly passes `--run-selected`. The orchestrator extracts candidates from README-linked documentation, selects one by category and score, and passes it to a runner that launches it with `subprocess.Popen` in the target repository. Repository-controlled README content is not necessarily individually reviewed. A user can omit the flag and require the final argv, source location, and working directory to be shown before approval.

ai-research-reproduction/scripts/orchestrate_repro.py:303In the codeOpen original file
    for category in ["inference", "evaluation", "training", "other"]:        candidates = [item for item in commands if item.get("category") == category]        if not candidates:            continue        runnable = [            item            for item in candidates            if not item.get("needs_substitution") and command_feasibility(item, repo_path)[0]        ]        if not runnable:            continue        best = max(runnable, key=lambda item: command_score(item, produced_out_dirs))        return {            "selected_goal": category,            "goal_priority": category,            "documented_command": best.get("command", ""),            "command_source": best.get("source", "readme"),
Show 4 other places
ai-research-reproduction/scripts/orchestrate_repro.py:1292In the codeOpen original file
            )        else:            run_data = maybe_run_command(                repo_path,                chosen["documented_command"],                args.timeout,                args.user_language,                args.shell_mode,                runtime_root,                model_adapter,                args.monitor_gpu,            )
ai-research-reproduction/_bundled/shared/scripts/runtime_runner.py:487In the codeOpen original file
    try:        argv = build_command(command, shell_mode)        environment = dict(os.environ if child_env is None else child_env)        spec["requested_argv"] = list(argv)        atomic_write_json(run_dir / "spec.json", spec)        if shell_mode == "direct":            argv = resolve_direct_argv(argv, repo, environment)        spec["argv"] = list(argv)        atomic_write_json(run_dir / "spec.json", spec)        creationflags = subprocess.CREATE_NEW_PROCESS_GROUP if os.name == "nt" else 0        process = subprocess.Popen(            argv,            env=environment,            cwd=repo,            stdout=subprocess.PIPE,            stderr=subprocess.PIPE,            text=True,            encoding="utf-8",            errors="replace",            bufsize=1,            creationflags=creationflags,            start_new_session=os.name != "nt",        )    except (FileNotFoundError, ShellSyntaxRequired, OSError, ValueError) as exc:
ai-research-reproduction/scripts/orchestrate_repro.py:1107In the codeOpen original file
    parser.add_argument("--user-language", default="en", help="Language tag for human-readable reports.")    parser.add_argument("--run-selected", action="store_true", help="Execute the selected documented command.")    parser.add_argument("--include-analysis-pass", action="store_true", help="Run analyze-project and record its outputs in the stage ledger.")
ai-research-reproduction/_bundled/shared/scripts/runtime_runner.py:497In the codeOpen original file
        creationflags = subprocess.CREATE_NEW_PROCESS_GROUP if os.name == "nt" else 0        process = subprocess.Popen(            argv,            env=environment,            cwd=repo,            stdout=subprocess.PIPE,            stderr=subprocess.PIPE,            text=True,            encoding="utf-8",            errors="replace",            bufsize=1,            creationflags=creationflags,            start_new_session=os.name != "nt",        )    except (FileNotFoundError, ShellSyntaxRequired, OSError, ValueError) as exc:
High risk

The environment bootstrap executes repository-controlled dependency and build code

Source references: 5
What we found

Unless `--dry-run` is supplied, the bootstrap directly invokes conda/mamba or pip. It performs an editable install for `pyproject.toml` or `setup.py`, and installs packages listed by `requirements.txt`; these inputs come from the target repository.

Why this matters

A malicious build backend, setup script, or dependency package can execute with the user's permissions during installation, exposing accessible data or credentials, modifying user files, or installing persistent components. A Python environment does not isolate host privileges.

The bootstrap is executable by default rather than dry-run. Based on a target repository's top-level environment file, it invokes pip for `requirements.txt` or an editable install for `pyproject.toml`/`setup.py`. Such installs may run build code supplied by the repository or dependencies, modify the environment, download packages, and access the network. A user can require `--dry-run` first, review and pin dependency sources, and perform installation in an isolated environment.

scripts/bootstrap_env.py:23In the codeOpen original file
def run_command(command: List[str], *, cwd: Path, dry_run: bool) -> None:    print(f"+ {format_command(command)}")    if dry_run:        return    subprocess.run(command, cwd=cwd, check=True)
Show 4 other places
scripts/bootstrap_env.py:60In the codeOpen original file
def install_with_manager(manager: str, env_name: str, repo_path: Path, rel_env_file: Optional[str], *, dry_run: bool) -> None:    if rel_env_file == "requirements.txt":        run_command(            [manager, "run", "-n", env_name, "python", "-m", "pip", "install", "-r", rel_env_file],            cwd=repo_path,            dry_run=dry_run,        )    elif rel_env_file in {"pyproject.toml", "setup.py"}:        run_command(            [manager, "run", "-n", env_name, "python", "-m", "pip", "install", "-e", "."],            cwd=repo_path,            dry_run=dry_run,        )
scripts/bootstrap_env.py:114In the codeOpen original file
    if env_file and env_file.name in CONDA_ENV_FILES:        if manager is None:            raise SystemExit("A conda-compatible manager is required for environment.yml-based setup. Install conda or mamba first.")        create_command = [manager, "env", "create", "-f", rel_env_file]        if not declared_env_name:            create_command.extend(["-n", resolved_env_name])        run_command(create_command, cwd=repo_path, dry_run=args.dry_run)        print_activation_instructions(declared_env_name or resolved_env_name, using_conda=True)
scripts/bootstrap_env.py:75In the codeOpen original file
def install_with_venv(env_python: Path, repo_path: Path, rel_env_file: Optional[str], *, dry_run: bool) -> None:    if rel_env_file == "requirements.txt":        run_command(            [str(env_python), "-m", "pip", "install", "-r", rel_env_file],            cwd=repo_path,            dry_run=dry_run,        )    elif rel_env_file in {"pyproject.toml", "setup.py"}:        run_command(            [str(env_python), "-m", "pip", "install", "-e", "."],            cwd=repo_path,            dry_run=dry_run,        )
scripts/bootstrap_env.py:101In the codeOpen original file
    )    parser.add_argument("--dry-run", action="store_true", help="Print commands without executing them.")    args = parser.parse_args()
Could it expose your files or keys?Looks for uploads of files containing passwords or keys, and keys written directly in the code.Risks found: 1
Medium risk

The optional model runner sends repository excerpts, task content, and command results to the configured endpoint

Source references: 6
What we found

The model may request files from the initial repository inventory, and up to 12,000 characters are returned as a tool result in later messages. Command results include stdout/stderr and enter the same message history before `provider.complete` is called. Environment-variable-name filtering does not sanitize file contents or secrets printed by programs.

Why this matters

Private source, data paths, logs, tokens, or other sensitive output may leave the host for the official API or a configured gateway. Full messages and responses are also persisted in state and trajectory files, creating another disclosure risk if the output directory is shared.

The optional model runner places task data in messages, lets the model read files from the initial repository inventory, and adds up to 12,000 characters as tool results for later model calls. Command results containing stdout/stderr enter the same record, after which the message set is sent to the configured provider. Filtering child environment-variable names does not redact secrets in files or program output. Users should enable this only for trusted repositories, restrict readable files and approved commands, and verify the endpoint and retention policy.

ai-research-reproduction/scripts/run_agent.py:440In the codeOpen original file
                            value = {"files": sorted(files)}                        elif name == "read_file":                            if args["path"] not in files:                                raise ValueError("File was not in the permitted initial inventory")                            offset = max(0, int(args.get("offset", 0)))                            with safe_file(repo, args["path"]).open("r", encoding="utf-8") as handle:                                handle.seek(offset)                                value = {"path": args["path"], "text": handle.read(12000), "next_offset": handle.tell()}                        elif name == "update_plan":
Show 5 other places
ai-research-reproduction/scripts/run_agent.py:478In the codeOpen original file
                                    capture_limit=16000, model_adapter=profile)                            value["checks"] = command_checks(repo, command, value)                            value["verified"] = value["checks"]["passed"]                            state.setdefault("attempts", []).append({"command_id": command_id, "runtime_id": call["runtime_id"], "verified": value["verified"]})                            state["results"][command_id] = value                            state["last_command"] = command_id                        elif name == "finish":                            checks = verify_task(repo, output, task, state, files)                            state["verification"] = checks                            state["summary"] = args["summary"]                            state["status"] = "success" if all(checks["commands"].values()) and checks["source_unchanged"] else "blocked"                            if state["status"] == "blocked":                                state["blocker"] = "Independent verification failed"                            value = {"status": state["status"], "checks": checks}                        else:                            raise ValueError("Unknown tool")                    except (ValueError, KeyError, OSError) as exc:                        value = {"error": str(exc)}                    event("tool_result", tool=name, result=value)                    state["tool_results"].append({"type": "tool_result", "tool_use_id": call["id"],                        "content": json.dumps(value, ensure_ascii=False), "is_error": "error" in value})                    state["pending"].pop(0)
ai-research-reproduction/scripts/run_agent.py:505In the codeOpen original file
                    continue                if state["tool_results"]:                    state["messages"].append({"role": "user", "content": state.pop("tool_results")})                    state["tool_results"] = []                request_bytes = len(json.dumps([SYSTEM, TOOLS, state["messages"]]).encode())                used = sum(state["usage"].values())                reserve = request_bytes + budget["max_output_tokens"] + 1024                if state["model_calls"] >= budget["max_model_calls"] or used + reserve > budget["max_total_tokens"]:                    block("Model call/token reservation budget reached")                    break                state["model_calls"] += 1                state["model_pending"] = True                state["usage_complete"] = False                save()                event("model_request", call=state["model_calls"], reserved_tokens=reserve)                response = provider.complete(state["messages"], SYSTEM, TOOLS, budget["max_output_tokens"], min(60, remaining))                if not isinstance(response, dict):
ai-research-reproduction/references/agent-runner.md:157In the instructionsOpen original file
Usage and elapsed execution time accumulate across resumes (offline pause timeis excluded). Before each model request, UTF-8 request bytes plus output tokensand overhead provide a conservative token reservation. Reported usage is stored;gateway token accounting may differ. Output size is checked between actions,not an OS disk quota. `CANCEL` is checked between actions; use the runtime CANCELfile to stop an active process. Credentials are not included in provider errors.Do not publish traces from private repositories without reviewing their contents.
ai-research-reproduction/scripts/run_agent.py:388In the codeOpen original file
                "model_profile": profile, "endpoint_identity": endpoint_identity, "harness_identity": harness_identity, "files": files, "created_at": utc_now(), "elapsed_seconds": 0.0,                "messages": [{"role": "user", "content": json.dumps({"goal": task["goal"], "readme": task.get("readme", "README.md"),                    "commands": task["commands"], "required_commands": task["required_commands"]})}],                "plan": [], "results": {}, "pending": [], "tool_results": [], "model_calls": 0, "tool_calls": 0,                "usage": {"input_tokens": 0, "output_tokens": 0}, "usage_complete": True, "verification": {}}
ai-research-reproduction/scripts/run_agent.py:469In the codeOpen original file
                                command_text = subprocess.list2cmdline(argv) if os.name == "nt" else shlex.join(argv)                                clean_env = {k: v for k, v in os.environ.items() if not re.search(r"KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|AUTH", k, re.I)}                                credential_name = profile.get("credential_env")                                if credential_name:                                    clean_env.pop(credential_name, None)                                clean_env["PYTHONIOENCODING"] = "utf-8"                                value = run_persistent_command(repo=safe_file(repo, command.get("cwd", ".")), command=command_text,                                    timeout=max(1, min(command.get("timeout_seconds", 30), int(remaining))),                                    runtime_root=output / "_runtime", run_id=call["runtime_id"], child_env=clean_env,                                    capture_limit=16000, model_adapter=profile)                            value["checks"] = command_checks(repo, command, value)                            value["verified"] = value["checks"]["passed"]                            state.setdefault("attempts", []).append({"command_id": command_id, "runtime_id": call["runtime_id"], "verified": value["verified"]})                            state["results"][command_id] = value                            state["last_command"] = command_id                        elif name == "finish":                            checks = verify_task(repo, output, task, state, files)                            state["verification"] = checks                            state["summary"] = args["summary"]                            state["status"] = "success" if all(checks["commands"].values()) and checks["source_unchanged"] else "blocked"                            if state["status"] == "blocked":                                state["blocker"] = "Independent verification failed"                            value = {"status": state["status"], "checks": checks}                        else:                            raise ValueError("Unknown tool")                    except (ValueError, KeyError, OSError) as exc:                        value = {"error": str(exc)}                    event("tool_result", tool=name, result=value)                    state["tool_results"].append({"type": "tool_result", "tool_use_id": call["id"],                        "content": json.dumps(value, ensure_ascii=False), "is_error": "error" in value})                    state["pending"].pop(0)
Could it delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.Risks found: 1
Medium risk

Reproduction runs automatically append long-lived lesson records outside the project by default

Source references: 6
What we found

Lesson recording is enabled by default and stored under `~/.rigorpilot` or `RIGORPILOT_HOME`. For partial/blocked runs, the orchestrator automatically records the blocker, documented command, and repository fingerprint using append mode. The secret regex is explicitly best-effort, not comprehensive classification or redaction.

Why this matters

The user's home directory is persistently modified, and private repository names, README fingerprints, paths, commands, or error context may survive across runs and later appear in the personal overlay.

The risk is supported, though recording occurs only after execution is requested and the result meets a recording condition. Lessons are enabled by default and stored under `.rigorpilot` in the user's home directory unless `RIGORPILOT_HOME` overrides it. Partial/blocked runs record a blocker summary, documented command, and repository fingerprint in append-only JSONL. The source says secret detection is best-effort. Users can set `RIGORPILOT_LESSONS=0` before running or require explicit opt-in and a preview of stored content.

ai-research-reproduction/_bundled/shared/scripts/lessons_store.py:41In the codeOpen original file
def lessons_home() -> Path:    root = os.environ.get("RIGORPILOT_HOME")    return Path(root).expanduser() if root else Path.home() / ".rigorpilot"def lessons_enabled() -> bool:    return os.environ.get("RIGORPILOT_LESSONS", "1") != "0"
Show 5 other places
ai-research-reproduction/scripts/orchestrate_repro.py:54In the codeOpen original file
def maybe_record_lesson(repo_path: Path, context: Dict[str, Any]) -> Optional[str]:    """Record failure blockers and later resolutions per the continuous-learning policy."""    store = load_lessons_store()    if store is None or not store.lessons_enabled():        return None    fingerprint = store.repo_fingerprint(repo_path)    status = context.get("status")    try:        if status in {"partial", "blocked"}:            path = store.record_lesson(                kind="failure-fix",                skill="ai-research-reproduction",                summary=f"[{status}] {context.get('main_blocker', 'unrecorded blocker')}",                detail=str(context.get("documented_command") or ""),                fingerprint=fingerprint,            )            return str(path) if path else None        if status == "success":
ai-research-reproduction/_bundled/shared/scripts/lessons_store.py:125In the codeOpen original file
    }    path = lessons_path()    path.parent.mkdir(parents=True, exist_ok=True)    with path.open("a", encoding="utf-8") as handle:        handle.write(json.dumps(entry, ensure_ascii=False) + "\n")    return path
ai-research-reproduction/_bundled/shared/scripts/lessons_store.py:21In the codeOpen original file
VALID_KINDS = {"failure-fix", "user-correction", "preference", "generalization"}# Best-effort blocklist: keyword shapes plus common bare-credential formats.# This is a guardrail, not a guarantee — callers still must not pass secrets.SECRET_RE = re.compile(    r"(api[_-]?key|secret|token|password|passwd|authorization|bearer\s+\S|-----BEGIN"    r"|AKIA[0-9A-Z]{16}|ghp_[A-Za-z0-9]{20,}|gho_[A-Za-z0-9]{20,}|sk-[A-Za-z0-9_-]{16,}"    r"|xox[a-z]-[A-Za-z0-9-]{10,}|AIza[0-9A-Za-z_-]{30,})",    re.IGNORECASE,)MAX_FIELD_CHARS = 300
ai-research-reproduction/scripts/orchestrate_repro.py:62In the codeOpen original file
    try:        if status in {"partial", "blocked"}:            path = store.record_lesson(                kind="failure-fix",                skill="ai-research-reproduction",                summary=f"[{status}] {context.get('main_blocker', 'unrecorded blocker')}",                detail=str(context.get("documented_command") or ""),                fingerprint=fingerprint,            )            return str(path) if path else None
ai-research-reproduction/scripts/orchestrate_repro.py:1391In the codeOpen original file
    context["lesson_recorded"] = maybe_record_lesson(repo_path, context) if args.run_selected else None
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.No risks found
Could it mislead the AI or hide text?Checks the skill instructions for requests to ignore you, influence the report, or hide text in invisible characters.No risks found
Could it change links or payment recipients without asking?Looks for forced referral or payment changes combined with instructions to hide the change.No risks found

Inside this skill

6 instruction sections

The main skill prepares environment, dataset, checkpoint, and cache assumptions, and explicitly references a bootstrap script that can create an environment and install dependencies.

View source
SKILL.md:43In the instructionsOpen original file
## Output expectations- conservative environment setup notes- candidate conda commands- asset path plan- checkpoint and dataset source hints- unresolved dependency or asset risks
SKILL.md:53In the instructionsOpen original file
Use `references/env-policy.md`, `references/assets-policy.md`, `scripts/bootstrap_env.py`, `scripts/plan_setup.py`, and `scripts/prepare_assets.py`.Use `scripts/bootstrap_env.sh` only as a POSIX wrapper around the Python bootstrapper when a shell entrypoint is more convenient.

The asset-preparation script scans README/configuration files and common asset directories, then writes a JSON manifest to a caller-selected output location.

View source
scripts/prepare_assets.py:27In the codeOpen original file
def collect_text_hints(repo: Path) -> List[Dict[str, str]]:    hints: List[Dict[str, str]] = []    readme = first_existing(repo, ["README.md", "README"])    if readme:        text = readme.read_text(encoding="utf-8", errors="replace")        for line in text.splitlines():            lowered = line.lower()            if not any(keyword in lowered for keyword in KEYWORDS):                continue            urls = URL_RE.findall(line)            paths = PATH_RE.findall(line)            if not urls and not paths:
scripts/prepare_assets.py:108In the codeOpen original file
    repo = Path(args.repo).resolve()    assets_root = Path(args.assets_root).resolve()    output_json = Path(args.output_json).resolve()    output_json.parent.mkdir(parents=True, exist_ok=True)    data = prepare_assets(repo, assets_root)    output_json.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8")    print(json.dumps(data, indent=2, ensure_ascii=False))    return 0

The bundled full-reproduction component extracts commands from README and linked local documentation, automatically selects an inference/evaluation/training target, and runs it when the user enables `--run-selected`.

View source
ai-research-reproduction/scripts/orchestrate_repro.py:303In the codeOpen original file
    for category in ["inference", "evaluation", "training", "other"]:        candidates = [item for item in commands if item.get("category") == category]        if not candidates:            continue        runnable = [            item            for item in candidates            if not item.get("needs_substitution") and command_feasibility(item, repo_path)[0]        ]        if not runnable:            continue        best = max(runnable, key=lambda item: command_score(item, produced_out_dirs))        return {            "selected_goal": category,            "goal_priority": category,            "documented_command": best.get("command", ""),            "command_source": best.get("source", "readme"),            "documented_command_kind": best.get("kind", "run"),            "documented_command_section": best.get("section"),            "documented_command_source_file": best.get("source_file"),            "requires_substitution": bool(best.get("needs_substitution")),            "goal_candidates": goal_candidates,        }
ai-research-reproduction/scripts/orchestrate_repro.py:1107In the codeOpen original file
    parser.add_argument("--user-language", default="en", help="Language tag for human-readable reports.")    parser.add_argument("--run-selected", action="store_true", help="Execute the selected documented command.")    parser.add_argument("--include-analysis-pass", action="store_true", help="Run analyze-project and record its outputs in the stage ledger.")    parser.add_argument(

The optional model-driven entry point limits the model to pre-reviewed command IDs, but execution still occurs on the local host rather than in an OS sandbox, with output, state, and trajectory persisted.

View source
ai-research-reproduction/references/agent-runner.md:10In the instructionsOpen original file
The researcher supplies a repository, a reviewed task JSON, and a model profile.The agent reads files, records a plan, chooses reviewed command IDs, observesruntime results, and requests final verification. It cannot invent command argvor edit source through its tools. Every command cites an exact source snippet;argv changes require a recorded `adaptation`. Read task argv before approving it.This is local execution with credential environment filtering, not an OS sandbox.Approved programs can access the host and network; use only trusted repositoriesuntil an isolated executor is configured. Commands that change scientific
ai-research-reproduction/references/agent-runner.md:125In the instructionsOpen original file
The standard README bundle is accompanied by `agent_state.json` (task/modelidentity, messages, plan, pending calls, results), `trajectory.jsonl` (requests,responses, public reasons, tools and usage), and `_runtime/` process evidence.The verifier requires all `required_commands` to pass their exit/stdout and any
Start here · InstructionsSKILL.md
env-and-assets-bootstrap
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source.

File reference map

References: 25
Files making referencesReferenced content
Lines show actual file references, not execution order. Select a node to highlight its connections and inspect the files and source locations. Dashed lines include files that still need locating.
Files and check records24 files

Coverage and gaps

Content covered in each file

These are the source ranges included in this check, not a guarantee that every issue has been resolved.

  • SKILL.mdFull text included
  • ai-research-reproduction/_bundled/shared/scripts/lessons_store.pyFull text included
  • ai-research-reproduction/_bundled/shared/scripts/runtime_runner.pyFull text included
  • ai-research-reproduction/_bundled/shared/scripts/task_queue.pyFull text included
  • ai-research-reproduction/scripts/orchestrate_repro.pyFull text included
  • ai-research-reproduction/scripts/run_agent.pyFull text included
  • scripts/bootstrap_env.pyFull text included
  • scripts/bootstrap_env.shFull text included
  • scripts/plan_setup.pyFull text included
  • scripts/prepare_assets.pyFull text included
  • references/assets-policy.mdFull text included
  • references/env-policy.mdFull text included
  • ai-research-reproduction/references/agent-operating-principles.mdFull text included
  • ai-research-reproduction/references/agent-runner.mdFull text included
  • ai-research-reproduction/references/continuous-learning-policy.mdFull text included
  • ai-research-reproduction/references/deep-learning-experiment-principles.mdFull text included
  • ai-research-reproduction/references/language-policy.mdFull text included
  • ai-research-reproduction/references/output-spec.mdFull text included
  • ai-research-reproduction/references/patch-policy.mdFull text included
  • ai-research-reproduction/references/research-rigor-principles.mdFull text included
  • ai-research-reproduction/references/research-safety-principles.mdFull text included
  • ai-research-reproduction/references/runtime-and-model-adapter.mdFull text included
  • ai-research-reproduction/SKILL.mdFull text included
  • agents/openai.yamlFull text included

This report is for the version above. We read the available code and instructions without running the skill or checking extra packages it installs. This is not a promise of safety: a different version or setup may behave differently.

  • SKILL.mdInstructions
  • agents/openai.yamlSupporting file
  • references/assets-policy.mdSupporting file
  • references/env-policy.mdSupporting file
  • scripts/bootstrap_env.pyScript
  • scripts/bootstrap_env.shScript
  • scripts/plan_setup.pyScript
  • scripts/prepare_assets.pyScript
  • ai-research-reproduction/SKILL.mdSupporting file
  • ai-research-reproduction/references/agent-operating-principles.mdSupporting file
  • ai-research-reproduction/references/research-rigor-principles.mdSupporting file
  • ai-research-reproduction/references/deep-learning-experiment-principles.mdSupporting file
  • ai-research-reproduction/scripts/orchestrate_repro.pyScript
  • ai-research-reproduction/references/runtime-and-model-adapter.mdSupporting file
  • ai-research-reproduction/references/agent-runner.mdSupporting file
  • ai-research-reproduction/scripts/run_agent.pyScript
  • ai-research-reproduction/references/patch-policy.mdSupporting file
  • ai-research-reproduction/references/output-spec.mdSupporting file
  • ai-research-reproduction/references/language-policy.mdSupporting file
  • ai-research-reproduction/references/continuous-learning-policy.mdSupporting file
  • ai-research-reproduction/_bundled/shared/scripts/lessons_store.pyScript
  • ai-research-reproduction/references/research-safety-principles.mdSupporting file
  • ai-research-reproduction/_bundled/shared/scripts/runtime_runner.pyScript
  • ai-research-reproduction/_bundled/shared/scripts/task_queue.pyScript

Operations mentioned in code and instructions

Run commands
scripts/bootstrap_env.py:8In the codeOpen original file
import shutilimport subprocessimport sys
scripts/bootstrap_env.py:27In the codeOpen original file
        return    subprocess.run(command, cwd=cwd, check=True)
scripts/bootstrap_env.sh:1In the codeOpen original file
#!/usr/bin/env bashset -euo pipefail
Read files
scripts/plan_setup.py:35In the codeOpen original file
        return None    text = path.read_text(encoding="utf-8", errors="replace")    match = re.search(r"^\s*name:\s*([A-Za-z0-9._-]+)\s*$", text, flags=re.MULTILINE)
scripts/prepare_assets.py:31In the codeOpen original file
    if readme:        text = readme.read_text(encoding="utf-8", errors="replace")        for line in text.splitlines():
scripts/prepare_assets.py:56In the codeOpen original file
                continue            text = path.read_text(encoding="utf-8", errors="replace")            if not any(keyword in text.lower() for keyword in KEYWORDS):
Install extra software packages
scripts/plan_setup.py:99In the codeOpen original file
    elif env_file.name == "requirements.txt":        append_venv_flow(setup_commands, f"python -m pip install -r {rel_env_file}")        notes.append("Fell back to a virtualenv plus requirements installation plan.")
scripts/plan_setup.py:102In the codeOpen original file
    elif env_file.name == "pyproject.toml":        append_venv_flow(setup_commands, "python -m pip install -e .")        notes.append("Detected a pyproject-based installation flow.")
scripts/plan_setup.py:105In the codeOpen original file
    elif env_file.name == "setup.py":        append_venv_flow(setup_commands, "python -m pip install -e .")        notes.append("Detected a setup.py-based editable install flow.")
Change files
scripts/prepare_assets.py:114In the codeOpen original file
    data = prepare_assets(repo, assets_root)    output_json.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8")    print(json.dumps(data, indent=2, ensure_ascii=False))
ai-research-reproduction/scripts/orchestrate_repro.py:118In the codeOpen original file
        context_path = Path(handle.name)        handle.write(json.dumps(context, indent=2, ensure_ascii=False))
ai-research-reproduction/scripts/run_agent.py:328In the codeOpen original file
        with (output / "SUMMARY.md").open("a", encoding="utf-8") as handle:            handle.write("\n" + explanation + "\n")
Read keys or account settings
ai-research-reproduction/scripts/orchestrate_repro.py:101In the codeOpen original file
    command = [sys.executable, str(script), *args]    child_env = os.environ.copy()    child_env["PYTHONIOENCODING"] = "utf-8"
ai-research-reproduction/scripts/run_agent.py:65In the codeOpen original file
    path = (repo / name).resolve()    if (not path.is_relative_to(repo) or any(p == ".git" or p.startswith(".env") for p in Path(name).parts)            or any(p == ".git" or p.startswith(".env") for p in path.relative_to(repo).parts)):
ai-research-reproduction/scripts/run_agent.py:66In the codeOpen original file
    if (not path.is_relative_to(repo) or any(p == ".git" or p.startswith(".env") for p in Path(name).parts)            or any(p == ".git" or p.startswith(".env") for p in path.relative_to(repo).parts)):        raise ValueError("File path is outside the permitted repository scope")
Connect to websites
ai-research-reproduction/scripts/orchestrate_repro.py:357In the codeOpen original file
        rel = match.group(1)        if rel.startswith(("http://", "https://")):            continue
ai-research-reproduction/scripts/run_agent.py:343In the codeOpen original file
        raise ValueError("All budget limits must be positive integers")    endpoint_identity = fingerprint(profile.get("endpoint") or os.getenv("ANTHROPIC_BASE_URL") or "https://api.anthropic.com")    harness_identity = fingerprint([Path(__file__).read_bytes().replace(b"\r\n", b"\n").hex(), SYSTEM, TOOLS,
ai-research-reproduction/references/runtime-and-model-adapter.md:65In the instructionsOpen original file
  "capabilities": ["text", "tool_calling", "structured_output"],  "endpoint": "https://gateway.example/v1",  "credential_env": "LAB_MODEL_API_KEY",
Lines read
5,249
File checksum (to compare versions)
014ea02cb83c8891be3bce2d185da8e4dd443bc826b05423e4536efda51ed25f