Skip to content
Report library
Purpose / Development

Safe Debug Skill Security Audit

What the author says it does (original text)

Rigor Debug / Rigor Audit skill for deep learning research work. Use when the user pastes a traceback, terminal error, CUDA OOM, checkpoint load failure, shape mismatch, NaN loss symptom, or training failure and wants conservative diagnosis before any patching, with debug fixes clearly separated from research contributions. Do not use for broad refactoring, speculative adaptation, automatic explor

Independent security check

Do not install or run it yet

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

With `--run-selected`, an automatically selected README command runs locally with the full environment

Source references: 5
What we found

The reproduction entry point extracts commands from the target README or linked documentation and selects a goal automatically. When execution is enabled, it hands that command to the persistent runner; unless a separate child environment is supplied, the process receives a copy of all controller environment variables. A malicious or compromised repository can therefore disguise a dangerous command as documentation.

Why this matters

The command can read or modify user-accessible files, use credentials present in the environment, and access the network. Timeout and cancellation terminate the process tree but cannot undo file, account, or network actions already performed.

This occurs only when the user enables `--run-selected`, but the script then automatically selects a command extracted from repository documentation and executes it in the target repository. When `child_env` is absent, the runtime copies the controller's full environment. A malicious documented command could therefore read files, use the network, or access environment variables. Direct mode reduces shell parsing risk but is not an OS sandbox. Users can require per-command confirmation and run in an isolated environment with a minimal environment.

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.")
Show 4 other places
ai-research-reproduction/scripts/orchestrate_repro.py:1272In the codeOpen original file
        )    elif args.run_selected:        if chosen["selected_goal"] == "training":            run_data = maybe_run_training(                repo_path=repo_path,                command=chosen["documented_command"],                train_script=train_execute_script,                lane=args.lane,                user_language=args.user_language,                full_training_authorized=args.full_training_authorized,                train_timeout=args.train_timeout,                dataset_hint=dataset_hint,                checkpoint_hint=checkpoint_hint,                resume_from=args.resume_from,                max_train_steps=args.max_train_steps,                shell_mode=args.shell_mode,                runtime_root=runtime_root,                model_profile_json=args.model_profile_json,                required_model_capabilities=args.require_model_capability,                gpu_monitor_enabled=not args.no_gpu_monitor,            )        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:1237In the codeOpen original file
    chosen = choose_goal(command_data.get("commands", []), repo_path)    dataset_hint = derive_dataset_hint(asset_data)
ai-research-reproduction/scripts/orchestrate_repro.py:1293In 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,            )
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: 3
Medium risk

The optional model runner sends read repository content to Anthropic or a configured HTTPS endpoint

Source references: 6
What we found

The model can read repository files from the initial inventory. Those read results are added to message history and passed to the provider. The endpoint may come from the model profile or `ANTHROPIC_BASE_URL`, so the recipient is not necessarily the official service.

Why this matters

Private source code, configuration contents, internal paths, or task details may leave the machine and become subject to the selected service or gateway's retention, access, and compliance policies. Excluding `.env` files does not protect secrets stored elsewhere.

This is an optional entry point driven by a user-supplied task and model profile, but the model can read files from the initial repository inventory. Read contents are saved as tool results and included in later model requests. The recipient is selected from the configured endpoint, `ANTHROPIC_BASE_URL`, or the official service, so private source may leave the machine for a custom service. Users should verify the endpoint and its data policy and restrict readable files or use only repositories approved for disclosure.

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:495In the codeOpen original file
                        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)                    tools_this_turn += 1                    save()                    if pause_after_tools and tools_this_turn >= pause_after_tools and state["status"] == "running":                        state["status"] = "paused"                        event("paused", reason="Explicit test/session checkpoint")                    continue                if state["tool_results"]:                    state["messages"].append({"role": "user", "content": state.pop("tool_results")})                    state["tool_results"] = []
ai-research-reproduction/scripts/run_agent.py:518In the codeOpen original file
                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:110In the instructionsOpen original file
`endpoint` optionally names the final HTTPS endpoint. Without it, the clientuses `ANTHROPIC_BASE_URL` or the official endpoint. For an already configuredBearer gateway, set `metadata.auth_scheme` to `bearer` and name its credentialenvironment variable. Redirects are refused so credentials are not forwarded.
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/scripts/run_agent.py:519In the codeOpen original file
                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):
Medium risk

Error text is written to diagnostics and stdout without redaction

Source references: 4
What we found

The script copies the first 12 error lines verbatim into `error_excerpt`, then writes that excerpt into `DIAGNOSIS.md` and prints the complete analysis object. It does not apply the secret filter found elsewhere in the package.

Why this matters

If a traceback includes tokens, credential-bearing URLs, personal directories, dataset paths, or private arguments, they are duplicated into persistent reports, terminal history, or CI logs that capture stdout.

The first 12 lines of the supplied error text enter `error_excerpt` without secret or personal-data redaction. Non-JSON mode writes it to `DIAGNOSIS.md`, and both modes print the complete analysis object to standard output. If a traceback contains tokens, private paths, request parameters, or personal data, those values can enter files, terminal logs, or captured output. Users can sanitize the input first and ask the author for robust redaction and sensitive-field exclusion.

scripts/safe_debug.py:75In the codeOpen original file
def analyze_error(text: str) -> Dict[str, object]:    category = classify_error(text)    needs_savepoint = category in {"checkpoint_mismatch", "distributed_issue", "shape_mismatch", "loss_nan"}    return {        "category": category,        "summary": f"Detected debug category: `{category}`.",        "needs_explicit_patch_approval": True,        "needs_savepoint_before_patch": needs_savepoint,        "actions": suggested_actions(category),        "error_excerpt": "\n".join(text.splitlines()[:12]) or text,    }
Show 3 other places
scripts/safe_debug.py:98In the codeOpen original file
        "",        "## Error excerpt",        "",        "```text",        data["error_excerpt"],        "```",        "",        "## Conservative analysis",        "",        data["summary"],        "",    ]    (output_dir / "DIAGNOSIS.md").write_text("\n".join(diagnosis), encoding="utf-8")
scripts/safe_debug.py:153In the codeOpen original file
    text = args.error_text or Path(args.error_file).read_text(encoding="utf-8", errors="ignore")    data = analyze_error(text)    if args.json:        print(json.dumps(data, indent=2, ensure_ascii=False))        return 0    write_outputs(Path(args.output_dir).resolve(), data)    print(json.dumps(data, indent=2, ensure_ascii=False))    return 0
scripts/safe_debug.py:84In the codeOpen original file
        "actions": suggested_actions(category),        "error_excerpt": "\n".join(text.splitlines()[:12]) or text,    }
Medium risk

Reproduction runs persist failure summaries and commands in the user's home directory by default

Source references: 5
What we found

When reproduction execution is enabled, partial or blocked outcomes automatically record the main blocker and documented command. Recording is enabled by default and appends data to `~/.rigorpilot/lessons.jsonl`; its keyword filter is explicitly described as best-effort only.

Why this matters

Private repository names, README fingerprints, internal paths, command arguments, or secrets missed by the filter may remain outside the repository for an extended period and may later be included in the personal overlay.

Only when execution was requested and the result is `partial` or `blocked`, the orchestrator automatically stores the blocker summary, documented command, and repository fingerprint. Recording is enabled by default and appends to `.rigorpilot/lessons.jsonl` under `RIGORPILOT_HOME` or the user's home directory. Length limits and a best-effort credential regex do not guarantee removal of private URLs, personal data, or unknown token formats. Users can set `RIGORPILOT_LESSONS=0` and review the file before logs or backups are shared.

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
Show 4 other places
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(
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"def lessons_path() -> Path:    return lessons_home() / "lessons.jsonl"def overlay_path() -> Path:    return lessons_home() / "PERSONAL_RIGOR.md"
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/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 delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.Risks found: 1
Medium risk

Existing diagnostic files in a custom output directory are overwritten directly

Source references: 4
What we found

`--output-dir` accepts an arbitrary directory. In non-JSON mode, `DIAGNOSIS.md`, `PATCH_PLAN.md`, and `status.json` are written with `write_text` without an ownership receipt, existence check, or backup.

Why this matters

If an existing project directory or another directory containing important files with those names is selected, their prior contents are replaced and may not be recoverable.

The caller can set `--output-dir`, which is resolved as a path, and the script then uses `write_text` for three fixed filenames without checking whether they already exist, belong to this tool, or have backups. If that directory contains matching files, running the script truncates and replaces them. The default directory reduces accidental scope but does not prevent collisions. Users should select a new dedicated directory and can ask the author to refuse overwrites or use ownership receipts and atomic backups.

scripts/safe_debug.py:109In the codeOpen original file
    ]    (output_dir / "DIAGNOSIS.md").write_text("\n".join(diagnosis), encoding="utf-8")
Show 3 other places
scripts/safe_debug.py:123In the codeOpen original file
    ]    (output_dir / "PATCH_PLAN.md").write_text("\n".join(patch_plan), encoding="utf-8")
scripts/safe_debug.py:139In the codeOpen original file
    }    (output_dir / "status.json").write_text(json.dumps(status, indent=2, ensure_ascii=False), encoding="utf-8")
scripts/safe_debug.py:146In the codeOpen original file
    parser.add_argument("--error-text", help="Inline error or symptom text.")    parser.add_argument("--output-dir", default="debug_outputs", help="Directory for debug outputs.")    parser.add_argument("--json", action="store_true", help="Emit JSON to stdout instead of writing files.")    args = parser.parse_args()    if not args.error_file and not args.error_text:        raise SystemExit("Provide --error-file or --error-text.")    text = args.error_text or Path(args.error_file).read_text(encoding="utf-8", errors="ignore")    data = analyze_error(text)    if args.json:        print(json.dumps(data, indent=2, ensure_ascii=False))        return 0    write_outputs(Path(args.output_dir).resolve(), data)    print(json.dumps(data, indent=2, ensure_ascii=False))
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

5 instruction sections

The direct `safe-debug` script classifies errors by keywords, captures the first 12 lines, and offers conservative suggestions; it contains no automatic patching logic.

View source
scripts/safe_debug.py:75In the codeOpen original file
def analyze_error(text: str) -> Dict[str, object]:    category = classify_error(text)    needs_savepoint = category in {"checkpoint_mismatch", "distributed_issue", "shape_mismatch", "loss_nan"}    return {        "category": category,        "summary": f"Detected debug category: `{category}`.",        "needs_explicit_patch_approval": True,        "needs_savepoint_before_patch": needs_savepoint,        "actions": suggested_actions(category),        "error_excerpt": "\n".join(text.splitlines()[:12]) or text,    }
references/debug-policy.md:5In the instructionsOpen original file
1. read the error or symptom carefully2. diagnose without editing repository code3. state the likely cause, evidence, and smallest safe fix4. require explicit approval before patching

In non-JSON mode, the script creates `debug_outputs` (or a user-selected directory) and writes diagnosis, patch-plan, and status files.

View source
scripts/safe_debug.py:88In the codeOpen original file
def write_outputs(output_dir: Path, data: Dict[str, object]) -> None:    output_dir.mkdir(parents=True, exist_ok=True)
scripts/safe_debug.py:133In the codeOpen original file
        "suggested_actions": data["actions"],        "outputs": {            "diagnosis": "debug_outputs/DIAGNOSIS.md",            "patch_plan": "debug_outputs/PATCH_PLAN.md",            "status": "debug_outputs/status.json",        },    }    (output_dir / "status.json").write_text(json.dumps(status, indent=2, ensure_ascii=False), encoding="utf-8")

The package also bundles a substantially broader research-reproduction system. Its deterministic entry point can extract and select commands from a target repository's README and launch the selected command when execution is enabled.

View source
ai-research-reproduction/SKILL.md:19In the instructionsOpen original file
The deterministic entrypoint is `scripts/orchestrate_repro.py`. It includes aself-contained `_bundled/` runtime, so this skill works when installed alone;separately installed companion skills remain optional reusable entrypoints.Executed commands persist lifecycle state, append-only events, and full streamedstdout/stderr under `repro_outputs/_runtime/<run_id>/`. A `CANCEL` file in theactive run directory requests process-tree cancellation.For recovery, queues or model gates, read `references/runtime-and-model-adapter.md`; for the optional model/tool loop, read `references/agent-runner.md` and use `scripts/run_agent.py`.
ai-research-reproduction/scripts/orchestrate_repro.py:1167In the codeOpen original file
    scan_data = run_json(scan_script, ["--repo", str(repo_path), "--json"])    readme_path = scan_data.get("readme_path")    command_data: Dict[str, Any] = {"commands": [], "counts": {}, "warnings": []}    if readme_path:        command_data = run_json(extract_script, ["--readme", readme_path, "--json"])        command_data = delegate_to_docs(readme_path, extract_script, command_data)
ai-research-reproduction/scripts/orchestrate_repro.py:1237In the codeOpen original file
    chosen = choose_goal(command_data.get("commands", []), repo_path)    dataset_hint = derive_dataset_hint(asset_data)    checkpoint_hint = derive_checkpoint_hint(asset_data)    run_data: Dict[str, Any] = {

The optional model-driven entry point requires a reviewed task JSON, but its documentation explicitly says commands execute locally, approved programs retain host and network access, and this is not an OS sandbox.

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 scientificconditions must be explicitly reviewed. P1 targets small evaluations, not full
Start here · InstructionsSKILL.md
safe-debug
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source.

File reference map

References: 20
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 records20 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/safe_debug.pyFull text included
  • references/debug-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/debug-policy.mdSupporting file
  • scripts/safe_debug.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

Change files
scripts/safe_debug.py:109In the codeOpen original file
    ]    (output_dir / "DIAGNOSIS.md").write_text("\n".join(diagnosis), encoding="utf-8")
scripts/safe_debug.py:123In the codeOpen original file
    ]    (output_dir / "PATCH_PLAN.md").write_text("\n".join(patch_plan), encoding="utf-8")
scripts/safe_debug.py:139In the codeOpen original file
    }    (output_dir / "status.json").write_text(json.dumps(status, indent=2, ensure_ascii=False), encoding="utf-8")
Read files
scripts/safe_debug.py:153In the codeOpen original file
    text = args.error_text or Path(args.error_file).read_text(encoding="utf-8", errors="ignore")    data = analyze_error(text)
ai-research-reproduction/scripts/orchestrate_repro.py:205In the codeOpen original file
        if config_path.exists() and config_path.suffix.lower() in {".yaml", ".yml", ".json", ".toml", ".py"}:            text_content = config_path.read_text(encoding="utf-8", errors="replace")            step_match = None
ai-research-reproduction/scripts/orchestrate_repro.py:352In the codeOpen original file
        return command_data    readme_file = Path(readme_path)    readme_text = readme_file.read_text(encoding="utf-8-sig", errors="replace")
Run commands
ai-research-reproduction/scripts/orchestrate_repro.py:12In the codeOpen original file
import shleximport subprocessimport sys
ai-research-reproduction/scripts/orchestrate_repro.py:103In the codeOpen original file
    child_env["PYTHONIOENCODING"] = "utf-8"    result = subprocess.run(        command,
ai-research-reproduction/scripts/orchestrate_repro.py:121In the codeOpen original file
    try:        subprocess.run(            [
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")
Install extra software packages
ai-research-reproduction/scripts/orchestrate_repro.py:252In the codeOpen original file
        score -= 10    if text_value.startswith(("pip install", "conda install", "conda env create", "conda activate", "git clone", "cd ")):        score -= 12
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
4,948
File checksum (to compare versions)
9a8b2aae6168732116d5c1cb9c2c889b07f9b0892c1fea74b3d6ccbd25a1693d