{
  "schema_version": "1",
  "hub_commit": "01b4b20f7ea55d9e9395915aed4e82c890c4c1c4",
  "catalog_url": "https://hub.superfastrobotics.com/catalog/v1/index.json",
  "records": [
    {
      "schema_version": "1",
      "id": "maniskill-panda-lift-peg-upright",
      "name": "ManiSkill panda LiftPegUpright-v1 motion planner",
      "summary": "Grasp a peg and lift it upright with the official Panda planner.",
      "capabilities": [
        "grasping",
        "lifting",
        "reorientation",
        "motion-planning"
      ],
      "aliases": [
        "LiftPegUpright-v1",
        "panda",
        "panda_lift_peg_upright",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/lift_peg_upright.py",
          "mani_skill/envs/tasks/tabletop/lift_peg_upright.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.lift_peg_upright:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "LiftPegUpright-v1",
          "seed": 0,
          "robot": "panda",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-lift-peg-upright --project ./experiment --json"
      },
      "completion": {
        "success_condition": "LiftPegUpright-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-lift-peg-upright",
        "requirements_file": "recipes/maniskill-panda-lift-peg-upright/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official LiftPegUpright-v1 / panda motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.panda.solutions.lift_peg_upright import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"LiftPegUpright-v1\", robot_uids=\"panda\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"LiftPegUpright-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-lift-peg-upright.json",
          "docs/recipes/maniskill-panda-lift-peg-upright.md",
          "recipes/maniskill-panda-lift-peg-upright/requirements.txt",
          "recipes/maniskill-panda-lift-peg-upright/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-peg-insertion-side",
      "name": "ManiSkill panda_wristcam PegInsertionSide-v1 motion planner",
      "summary": "Align a peg with a side-facing hole and insert it using Panda WristCam.",
      "capabilities": [
        "peg-in-hole",
        "insertion",
        "assembly",
        "motion-planning"
      ],
      "aliases": [
        "PegInsertionSide-v1",
        "panda_wristcam",
        "panda",
        "panda_peg_insertion_side",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/peg_insertion_side.py",
          "mani_skill/envs/tasks/tabletop/peg_insertion_side.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda_wristcam",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.peg_insertion_side:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PegInsertionSide-v1",
          "seed": 0,
          "robot": "panda_wristcam",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-peg-insertion-side --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PegInsertionSide-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-peg-insertion-side",
        "requirements_file": "recipes/maniskill-panda-peg-insertion-side/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official PegInsertionSide-v1 / panda_wristcam motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.panda.solutions.peg_insertion_side import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"PegInsertionSide-v1\", robot_uids=\"panda_wristcam\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PegInsertionSide-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda_wristcam\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-peg-insertion-side.json",
          "docs/recipes/maniskill-panda-peg-insertion-side.md",
          "recipes/maniskill-panda-peg-insertion-side/requirements.txt",
          "recipes/maniskill-panda-peg-insertion-side/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-pick-cube",
      "name": "ManiSkill Panda PickCube Python recipe",
      "summary": "Grasp a cube and move it to a target with the official Panda motion planner.",
      "capabilities": [
        "grasping",
        "pick",
        "pick-and-place",
        "motion-planning"
      ],
      "aliases": [
        "PickCube-v1",
        "Panda",
        "Franka",
        "robot manipulation",
        "reusable Python code",
        "pick_cube",
        "object manipulation"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/pick_cube.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "contributor_reported"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.pick_cube:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PickCube-v1",
          "seed": 0,
          "robot": "panda",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-pick-cube --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PickCube-v1 env info.success is true after upstream solver finishes; adapter exit 0 only when success is true.",
        "timeout_seconds": 180,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no retries to conceal failures. Use an external 180-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-pick-cube",
        "requirements_file": "recipes/maniskill-panda-pick-cube/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"CPU/state adapter around the pinned upstream ManiSkill PickCube solver.\n\nThe solver is authored by ManiSkill contributors (Apache-2.0); this hub wrapper\ndoes not contain upstream solver code. It never renders or controls hardware.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs  # registers simulation tasks\n    from mani_skill.examples.motionplanning.panda.solutions.pick_cube import solve\n\n    env = gym.make(\"PickCube-v1\", robot_uids=\"panda\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None)\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PickCube-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        # Keep the invocation contract even if an optional dependency is absent\n        # or the simulator cannot initialize. Do not report this as task success.\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "not_run",
        "verified_by": "Robot Skill Hub API structural intake",
        "date": "2026-10-17",
        "environment": {
          "runtime": "not_run"
        },
        "commands": [
          "API schema, exact base/source pin, allowlist and strict unified diff checks"
        ],
        "result": "Intake structure checks only. Changed recipe runtime, dependency installation, imports and robot tasks were not run by the hub.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": {
          "command": "rsh.py prepare maniskill-panda-pick-cube --project CLEAN_PROJECT --download-only --json",
          "level": "contributor_reported",
          "reported_by": "submitter",
          "result": "Pinned 243636110-byte upstream archive SHA-256 and extracted paths verified in two clean Windows projects; corrected render_backend=none adapter preserved. Source-only preparation reports needs_configuration with no venv or dependency install. ManiSkill imports and robot task execution: not_run."
        },
        "hub_verification": {
          "level": "structure_checked",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "contrib-a5dd78ad4e1d4e3d",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-pick-cube.json",
          "docs/recipes/maniskill-panda-pick-cube.md",
          "recipes/maniskill-panda-pick-cube/requirements.txt",
          "recipes/maniskill-panda-pick-cube/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-place-sphere",
      "name": "ManiSkill panda PlaceSphere-v1 motion planner",
      "summary": "Pick up a sphere and place it into a bin with the official Panda planner.",
      "capabilities": [
        "pick-and-place",
        "grasping",
        "placing",
        "motion-planning"
      ],
      "aliases": [
        "PlaceSphere-v1",
        "panda",
        "panda_place_sphere",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/place_sphere.py",
          "mani_skill/envs/tasks/tabletop/place_sphere.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.place_sphere:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PlaceSphere-v1",
          "seed": 0,
          "robot": "panda",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-place-sphere --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PlaceSphere-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-place-sphere",
        "requirements_file": "recipes/maniskill-panda-place-sphere/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official PlaceSphere-v1 / panda motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.panda.solutions.place_sphere import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"PlaceSphere-v1\", robot_uids=\"panda\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PlaceSphere-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-place-sphere.json",
          "docs/recipes/maniskill-panda-place-sphere.md",
          "recipes/maniskill-panda-place-sphere/requirements.txt",
          "recipes/maniskill-panda-place-sphere/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-plug-charger",
      "name": "ManiSkill panda_wristcam PlugCharger-v1 motion planner",
      "summary": "Grasp a charger, align its pins, and plug it into a receptacle.",
      "capabilities": [
        "insertion",
        "assembly",
        "grasping",
        "motion-planning"
      ],
      "aliases": [
        "PlugCharger-v1",
        "panda_wristcam",
        "panda",
        "panda_plug_charger",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/plug_charger.py",
          "mani_skill/envs/tasks/tabletop/plug_charger.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda_wristcam",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.plug_charger:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PlugCharger-v1",
          "seed": 0,
          "robot": "panda_wristcam",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-plug-charger --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PlugCharger-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-plug-charger",
        "requirements_file": "recipes/maniskill-panda-plug-charger/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official PlugCharger-v1 / panda_wristcam motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.panda.solutions.plug_charger import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"PlugCharger-v1\", robot_uids=\"panda_wristcam\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PlugCharger-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda_wristcam\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-plug-charger.json",
          "docs/recipes/maniskill-panda-plug-charger.md",
          "recipes/maniskill-panda-plug-charger/requirements.txt",
          "recipes/maniskill-panda-plug-charger/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-pull-cube-tool",
      "name": "ManiSkill panda PullCubeTool-v1 motion planner",
      "summary": "Use an L-shaped tool to pull a cube toward a goal.",
      "capabilities": [
        "tool-use",
        "pulling",
        "grasping",
        "motion-planning"
      ],
      "aliases": [
        "PullCubeTool-v1",
        "panda",
        "panda_pull_cube_tool",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/pull_cube_tool.py",
          "mani_skill/envs/tasks/tabletop/pull_cube_tool.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.pull_cube_tool:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PullCubeTool-v1",
          "seed": 0,
          "robot": "panda",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-pull-cube-tool --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PullCubeTool-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-pull-cube-tool",
        "requirements_file": "recipes/maniskill-panda-pull-cube-tool/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official PullCubeTool-v1 / panda motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.panda.solutions.pull_cube_tool import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"PullCubeTool-v1\", robot_uids=\"panda\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PullCubeTool-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-pull-cube-tool.json",
          "docs/recipes/maniskill-panda-pull-cube-tool.md",
          "recipes/maniskill-panda-pull-cube-tool/requirements.txt",
          "recipes/maniskill-panda-pull-cube-tool/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-pull-cube",
      "name": "ManiSkill panda PullCube-v1 motion planner",
      "summary": "Pull a cube to its goal with the official Panda motion planner.",
      "capabilities": [
        "pulling",
        "object-manipulation",
        "motion-planning"
      ],
      "aliases": [
        "PullCube-v1",
        "panda",
        "panda_pull_cube",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/pull_cube.py",
          "mani_skill/envs/tasks/tabletop/pull_cube.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.pull_cube:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PullCube-v1",
          "seed": 0,
          "robot": "panda",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-pull-cube --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PullCube-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-pull-cube",
        "requirements_file": "recipes/maniskill-panda-pull-cube/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official PullCube-v1 / panda motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.panda.solutions.pull_cube import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"PullCube-v1\", robot_uids=\"panda\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PullCube-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-pull-cube.json",
          "docs/recipes/maniskill-panda-pull-cube.md",
          "recipes/maniskill-panda-pull-cube/requirements.txt",
          "recipes/maniskill-panda-pull-cube/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-push-cube",
      "name": "ManiSkill panda PushCube-v1 motion planner",
      "summary": "Push a cube to a goal region with the official Panda motion planner.",
      "capabilities": [
        "pushing",
        "object-manipulation",
        "motion-planning"
      ],
      "aliases": [
        "PushCube-v1",
        "panda",
        "panda_push_cube",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/push_cube.py",
          "mani_skill/envs/tasks/tabletop/push_cube.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.push_cube:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PushCube-v1",
          "seed": 0,
          "robot": "panda",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-push-cube --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PushCube-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-push-cube",
        "requirements_file": "recipes/maniskill-panda-push-cube/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official PushCube-v1 / panda motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.panda.solutions.push_cube import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"PushCube-v1\", robot_uids=\"panda\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PushCube-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-push-cube.json",
          "docs/recipes/maniskill-panda-push-cube.md",
          "recipes/maniskill-panda-push-cube/requirements.txt",
          "recipes/maniskill-panda-push-cube/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-stack-cube",
      "name": "ManiSkill Panda StackCube Python recipe",
      "summary": "Grasp one cube and stack it on another with the official Panda motion planner.",
      "capabilities": [
        "grasping",
        "stacking",
        "pick-and-place",
        "motion-planning"
      ],
      "aliases": [
        "StackCube-v1",
        "Panda",
        "Franka",
        "robot manipulation",
        "reusable Python code",
        "stack_cube",
        "object manipulation"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/stack_cube.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.stack_cube:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "StackCube-v1",
          "seed": 0,
          "robot": "panda",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-stack-cube --project ./experiment --json"
      },
      "completion": {
        "success_condition": "StackCube-v1 env info.success is true after upstream solver finishes; adapter exit 0 only when success is true.",
        "timeout_seconds": 180,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no retries to conceal failures. Use an external 180-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-stack-cube",
        "requirements_file": "recipes/maniskill-panda-stack-cube/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"CPU/state adapter around the pinned upstream ManiSkill StackCube solver.\n\nThe solver is authored by ManiSkill contributors (Apache-2.0); this hub wrapper\ndoes not contain upstream solver code. It never renders or controls hardware.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs  # registers simulation tasks\n    from mani_skill.examples.motionplanning.panda.solutions.stack_cube import solve\n\n    env = gym.make(\"StackCube-v1\", robot_uids=\"panda\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None)\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"StackCube-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        # Keep the invocation contract even if an optional dependency is absent\n        # or the simulator cannot initialize. Do not report this as task success.\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "host_os": "windows",
          "python": "3.10.11",
          "runtime": "not_installed"
        },
        "commands": [
          "git ls-remote https://github.com/haosulab/ManiSkill.git refs/tags/v3.0.0b22",
          "Download exact commit archive; SHA256 checked",
          "Review pinned setup.py, LICENSE, upstream run.py and task solver"
        ],
        "result": "Source and license verified. Linux execution, dependency installation, imports and task completion have NOT been run by the hub (not_run).",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-stack-cube.json",
          "docs/recipes/maniskill-panda-stack-cube.md",
          "recipes/maniskill-panda-stack-cube/requirements.txt",
          "recipes/maniskill-panda-stack-cube/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-stack-pyramid",
      "name": "ManiSkill panda StackPyramid-v1 motion planner",
      "summary": "Arrange three cubes into a pyramid using the official Panda planner.",
      "capabilities": [
        "stacking",
        "pick-and-place",
        "multi-object",
        "motion-planning"
      ],
      "aliases": [
        "StackPyramid-v1",
        "panda",
        "panda_stack_pyramid",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/stack_pyramid.py",
          "mani_skill/envs/tasks/tabletop/stack_pyramid.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.stack_pyramid:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "StackPyramid-v1",
          "seed": 0,
          "robot": "panda",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-stack-pyramid --project ./experiment --json"
      },
      "completion": {
        "success_condition": "StackPyramid-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-stack-pyramid",
        "requirements_file": "recipes/maniskill-panda-stack-pyramid/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official StackPyramid-v1 / panda motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.panda.solutions.stack_pyramid import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"StackPyramid-v1\", robot_uids=\"panda\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"StackPyramid-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-stack-pyramid.json",
          "docs/recipes/maniskill-panda-stack-pyramid.md",
          "recipes/maniskill-panda-stack-pyramid/requirements.txt",
          "recipes/maniskill-panda-stack-pyramid/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-stick-draw-svg",
      "name": "ManiSkill panda_stick DrawSVG-v1 motion planner",
      "summary": "Trace the environment's default SVG outline with the Panda Stick planner.",
      "capabilities": [
        "drawing",
        "trajectory-following",
        "svg",
        "motion-planning"
      ],
      "aliases": [
        "DrawSVG-v1",
        "panda_stick",
        "panda",
        "panda_stick_draw_svg",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/draw_svg.py",
          "mani_skill/envs/tasks/drawing/draw_svg.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda_stick",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2",
          "svgpathtools==1.6.1"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.draw_svg:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "DrawSVG-v1",
          "seed": 0,
          "robot": "panda_stick",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-stick-draw-svg --project ./experiment --json"
      },
      "completion": {
        "success_condition": "DrawSVG-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-stick-draw-svg",
        "requirements_file": "recipes/maniskill-panda-stick-draw-svg/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official DrawSVG-v1 / panda_stick motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.panda.solutions.draw_svg import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"DrawSVG-v1\", robot_uids=\"panda_stick\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"DrawSVG-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda_stick\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n# Optional drawing task parser required by DrawSVGEnv.\nsvgpathtools==1.6.1\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-stick-draw-svg.json",
          "docs/recipes/maniskill-panda-stick-draw-svg.md",
          "recipes/maniskill-panda-stick-draw-svg/requirements.txt",
          "recipes/maniskill-panda-stick-draw-svg/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-panda-stick-draw-triangle",
      "name": "ManiSkill panda_stick DrawTriangle-v1 motion planner",
      "summary": "Trace a triangle with the Panda Stick motion planner.",
      "capabilities": [
        "drawing",
        "trajectory-following",
        "motion-planning"
      ],
      "aliases": [
        "DrawTriangle-v1",
        "panda_stick",
        "panda",
        "panda_stick_draw_triangle",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/panda/run.py",
          "mani_skill/examples/motionplanning/panda/solutions/draw_triangle.py",
          "mani_skill/envs/tasks/drawing/draw_triangle.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "panda_stick",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.panda.solutions.draw_triangle:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "DrawTriangle-v1",
          "seed": 0,
          "robot": "panda_stick",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-panda-stick-draw-triangle --project ./experiment --json"
      },
      "completion": {
        "success_condition": "DrawTriangle-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-panda-stick-draw-triangle",
        "requirements_file": "recipes/maniskill-panda-stick-draw-triangle/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official DrawTriangle-v1 / panda_stick motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.panda.solutions.draw_triangle import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"DrawTriangle-v1\", robot_uids=\"panda_stick\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"DrawTriangle-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"panda_stick\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-panda-stick-draw-triangle.json",
          "docs/recipes/maniskill-panda-stick-draw-triangle.md",
          "recipes/maniskill-panda-stick-draw-triangle/requirements.txt",
          "recipes/maniskill-panda-stick-draw-triangle/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-so100-pick-cube",
      "name": "ManiSkill so100 PickCubeSO100-v1 motion planner",
      "summary": "Pick up a cube and move it to a goal with the official SO100 planner.",
      "capabilities": [
        "grasping",
        "pick-and-place",
        "motion-planning"
      ],
      "aliases": [
        "PickCubeSO100-v1",
        "so100",
        "so100_pick_cube",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/so100/run.py",
          "mani_skill/examples/motionplanning/so100/solutions/pick_cube.py",
          "mani_skill/envs/tasks/tabletop/pick_cube.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "so100",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.so100.solutions.pick_cube:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PickCubeSO100-v1",
          "seed": 0,
          "robot": "so100",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-so100-pick-cube --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PickCubeSO100-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-so100-pick-cube",
        "requirements_file": "recipes/maniskill-so100-pick-cube/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official PickCubeSO100-v1 / so100 motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.so100.solutions.pick_cube import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"PickCubeSO100-v1\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PickCubeSO100-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"so100\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-so100-pick-cube.json",
          "docs/recipes/maniskill-so100-pick-cube.md",
          "recipes/maniskill-so100-pick-cube/requirements.txt",
          "recipes/maniskill-so100-pick-cube/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-xarm6-pick-cube",
      "name": "ManiSkill xarm6_robotiq PickCube-v1 motion planner",
      "summary": "Grasp a cube and move it to a goal with the official xArm6 Robotiq solver.",
      "capabilities": [
        "grasping",
        "pick-and-place",
        "motion-planning"
      ],
      "aliases": [
        "PickCube-v1",
        "xarm6_robotiq",
        "xarm6",
        "xarm6_pick_cube",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/xarm6/run.py",
          "mani_skill/examples/motionplanning/xarm6/solutions/pick_cube.py",
          "mani_skill/envs/tasks/tabletop/pick_cube.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "xarm6_robotiq",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.xarm6.solutions.pick_cube:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PickCube-v1",
          "seed": 0,
          "robot": "xarm6_robotiq",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-xarm6-pick-cube --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PickCube-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-xarm6-pick-cube",
        "requirements_file": "recipes/maniskill-xarm6-pick-cube/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official PickCube-v1 / xarm6_robotiq motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.xarm6.solutions.pick_cube import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"PickCube-v1\", robot_uids=\"xarm6_robotiq\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PickCube-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"xarm6_robotiq\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-xarm6-pick-cube.json",
          "docs/recipes/maniskill-xarm6-pick-cube.md",
          "recipes/maniskill-xarm6-pick-cube/requirements.txt",
          "recipes/maniskill-xarm6-pick-cube/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-xarm6-plug-charger",
      "name": "ManiSkill xarm6_robotiq PlugCharger-v1 motion planner",
      "summary": "Insert a charger using the official xArm6 Robotiq motion planner.",
      "capabilities": [
        "insertion",
        "assembly",
        "grasping",
        "motion-planning"
      ],
      "aliases": [
        "PlugCharger-v1",
        "xarm6_robotiq",
        "xarm6",
        "xarm6_plug_charger",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/xarm6/run.py",
          "mani_skill/examples/motionplanning/xarm6/solutions/plug_charger.py",
          "mani_skill/envs/tasks/tabletop/plug_charger.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "xarm6_robotiq",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.xarm6.solutions.plug_charger:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PlugCharger-v1",
          "seed": 0,
          "robot": "xarm6_robotiq",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-xarm6-plug-charger --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PlugCharger-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-xarm6-plug-charger",
        "requirements_file": "recipes/maniskill-xarm6-plug-charger/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official PlugCharger-v1 / xarm6_robotiq motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.xarm6.solutions.plug_charger import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"PlugCharger-v1\", robot_uids=\"xarm6_robotiq\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PlugCharger-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"xarm6_robotiq\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-xarm6-plug-charger.json",
          "docs/recipes/maniskill-xarm6-plug-charger.md",
          "recipes/maniskill-xarm6-plug-charger/requirements.txt",
          "recipes/maniskill-xarm6-plug-charger/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-xarm6-push-cube",
      "name": "ManiSkill xarm6_robotiq PushCube-v1 motion planner",
      "summary": "Push a cube to a goal with the official xArm6 Robotiq solver.",
      "capabilities": [
        "pushing",
        "object-manipulation",
        "motion-planning"
      ],
      "aliases": [
        "PushCube-v1",
        "xarm6_robotiq",
        "xarm6",
        "xarm6_push_cube",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/xarm6/run.py",
          "mani_skill/examples/motionplanning/xarm6/solutions/push_cube.py",
          "mani_skill/envs/tasks/tabletop/push_cube.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "xarm6_robotiq",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.xarm6.solutions.push_cube:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "PushCube-v1",
          "seed": 0,
          "robot": "xarm6_robotiq",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-xarm6-push-cube --project ./experiment --json"
      },
      "completion": {
        "success_condition": "PushCube-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-xarm6-push-cube",
        "requirements_file": "recipes/maniskill-xarm6-push-cube/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official PushCube-v1 / xarm6_robotiq motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.xarm6.solutions.push_cube import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"PushCube-v1\", robot_uids=\"xarm6_robotiq\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"PushCube-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"xarm6_robotiq\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-xarm6-push-cube.json",
          "docs/recipes/maniskill-xarm6-push-cube.md",
          "recipes/maniskill-xarm6-push-cube/requirements.txt",
          "recipes/maniskill-xarm6-push-cube/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    },
    {
      "schema_version": "1",
      "id": "maniskill-xarm6-stack-cube",
      "name": "ManiSkill xarm6_robotiq StackCube-v1 motion planner",
      "summary": "Stack one cube on another with the official xArm6 Robotiq solver.",
      "capabilities": [
        "stacking",
        "pick-and-place",
        "motion-planning"
      ],
      "aliases": [
        "StackCube-v1",
        "xarm6_robotiq",
        "xarm6",
        "xarm6_stack_cube",
        "robot manipulation",
        "reusable Python code"
      ],
      "source": {
        "repository": "https://github.com/haosulab/ManiSkill",
        "commit": "33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "tag": "v3.0.0b22",
        "paths": [
          "mani_skill/examples/motionplanning/xarm6/run.py",
          "mani_skill/examples/motionplanning/xarm6/solutions/stack_cube.py",
          "mani_skill/envs/tasks/tabletop/stack_cube.py",
          "setup.py",
          "LICENSE"
        ],
        "archive_url": "https://codeload.github.com/haosulab/ManiSkill/tar.gz/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907",
        "archive_sha256": "d194e39e4f86063f7ea49f25c918ca7474d088ad8d5abdc37573daf4672f86d4",
        "archive_bytes": 243636110,
        "authors": [
          "ManiSkill contributors"
        ],
        "contributing_url": "https://github.com/haosulab/ManiSkill/tree/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907"
      },
      "license": {
        "spdx": "Apache-2.0",
        "url": "https://github.com/haosulab/ManiSkill/blob/33967b9e3ead1f841eec57cc9f31d0d8b8cf0907/LICENSE",
        "verified": true,
        "scope": "Upstream ManiSkill code; hub wrapper and metadata use the hub LICENSE."
      },
      "compatibility": [
        {
          "runtime": "maniskill",
          "runtime_version": "3.0.0b22",
          "robot": "xarm6_robotiq",
          "controller": "pd_joint_pos",
          "observation": "state",
          "os": "linux",
          "architecture": "x86_64",
          "python": "3.10",
          "status": "source_reviewed"
        }
      ],
      "observation": {
        "required": [
          "simulator_state"
        ],
        "privileged_state": true,
        "description": "Reads ground-truth object poses, collision geometry and robot state directly from the simulator. Not an RGB-only policy."
      },
      "requirements": {
        "python": ">=3.10,<3.11",
        "packages": [
          "torch==2.5.1",
          "numpy==1.26.4",
          "sapien==3.0.0",
          "mplib==0.1.1",
          "fast_kinematics==0.2.2"
        ],
        "hardware": [
          "Linux x86_64 CPU; SAPIEN wheel needs glibc >=2.28"
        ],
        "rendering": "disabled explicitly: render_backend=none, render_mode=None, state observations and CPU simulation; graphics paths require separate Vulkan setup",
        "api_keys": [],
        "network": [
          "GitHub source archive (~233 MiB)",
          "PyPI and dependency distributions; source package build hooks may execute"
        ],
        "dependency_lock": "Direct dependencies pinned; transitive dependencies resolved by pip and captured in the prepared project. No bit-for-bit environment guarantee."
      },
      "invocation": {
        "entrypoint": "mani_skill.examples.motionplanning.xarm6.solutions.stack_cube:solve",
        "argv": [
          "{python}",
          "{recipe_dir}/run.py",
          "--seed",
          "0"
        ],
        "inputs": {
          "task": "StackCube-v1",
          "seed": 0,
          "robot": "xarm6_robotiq",
          "controller": "pd_joint_pos",
          "obs_mode": "state",
          "sim_backend": "cpu",
          "render_backend": "none",
          "reward_mode": "sparse"
        },
        "outputs": {
          "format": "last stdout line JSON",
          "fields": [
            "status",
            "success",
            "elapsed_steps",
            "task",
            "seed",
            "runtime",
            "robot",
            "controller",
            "observation",
            "sim_backend",
            "render_backend"
          ],
          "error_fields": [
            "status",
            "reason_code",
            "error_type",
            "message"
          ]
        },
        "example": "python skills/find-robot-skills/scripts/rsh.py prepare maniskill-xarm6-stack-cube --project ./experiment --json"
      },
      "completion": {
        "success_condition": "StackCube-v1 env info.success is true after the upstream solver finishes; exit 0 requires success.",
        "timeout_seconds": 300,
        "failure_modes": [
          "Dependency installation unavailable or incompatible",
          "Required Linux mplib wheels unavailable on host OS",
          "Motion planning reports failure or env info.success is false",
          "Runtime exception or asset download failure"
        ],
        "stop_condition": "Stop after one seed; no automatic retries. Use an external 300-second process timeout."
      },
      "preparation": {
        "recipe_path": "recipes/maniskill-xarm6-stack-cube",
        "requirements_file": "recipes/maniskill-xarm6-stack-cube/requirements.txt",
        "install_argv": [
          "{python}",
          "-m",
          "pip",
          "install",
          "-r",
          "{recipe_dir}/requirements.txt",
          "{source_dir}"
        ],
        "execution_separate": true,
        "files": {
          "run.py": "\"\"\"Hub adapter for the pinned official StackCube-v1 / xarm6_robotiq motion planner.\n\nUpstream solver: ManiSkill contributors, Apache-2.0. This wrapper contains no\nupstream solver implementation. Simulation execution is a separate explicit step.\n\"\"\"\nimport argparse\nimport importlib.metadata\nimport json\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\"--seed\", type=int, default=0)\n    args = parser.parse_args()\n    actual = importlib.metadata.version(\"mani_skill\")\n    if actual != \"3.0.0b22\":\n        raise RuntimeError(f\"Expected mani_skill 3.0.0b22, found {actual}\")\n    import gymnasium as gym\n    import mani_skill.envs\n    from mani_skill.examples.motionplanning.xarm6.solutions.stack_cube import solve\n\n    # Sparse reward avoids robot-specific dense reward helpers in upstream variants.\n    env = gym.make(\"StackCube-v1\", robot_uids=\"xarm6_robotiq\", obs_mode=\"state\",\n                   control_mode=\"pd_joint_pos\", sim_backend=\"cpu\",\n                   render_backend=\"none\", render_mode=None, reward_mode=\"sparse\")\n    try:\n        result = solve(env, seed=args.seed, debug=False, vis=False)\n        if isinstance(result, int) and result == -1:\n            report = {\"status\": \"failed\", \"reason_code\": \"motion_plan_failed\"}\n        else:\n            info = result[-1]\n            success = bool(info[\"success\"].item())\n            report = {\"status\": \"task_complete\" if success else \"failed\",\n                      \"success\": success, \"elapsed_steps\": int(info[\"elapsed_steps\"].item())}\n        report.update(task=\"StackCube-v1\", seed=args.seed, runtime=\"3.0.0b22\",\n                      robot=\"xarm6_robotiq\", controller=\"pd_joint_pos\", observation=\"state\",\n                      sim_backend=\"cpu\", render_backend=\"none\")\n        print(json.dumps(report))\n        return 0 if report.get(\"success\") else 1\n    finally:\n        env.close()\n\n\nif __name__ == \"__main__\":\n    try:\n        exit_code = main()\n    except Exception as error:\n        print(json.dumps({\"status\": \"failed\", \"reason_code\": \"runtime_error\",\n                          \"error_type\": type(error).__name__, \"message\": str(error)}))\n        exit_code = 1\n    raise SystemExit(exit_code)\n",
          "requirements.txt": "# Direct dependencies pinned for the initial Linux / Python 3.10 recipe.\n# Install the SHA256-checked upstream source separately as documented.\ntorch==2.5.1\nnumpy==1.26.4\nsapien==3.0.0\nmplib==0.1.1\nfast_kinematics==0.2.2\n# Transitive dependencies are resolved by pip; this is not a full lockfile.\n"
        }
      },
      "evidence": {
        "level": "source_reviewed",
        "verified_by": "Robot Skill Hub source review",
        "date": "2026-10-17",
        "environment": {
          "source": "pinned upstream release",
          "host": "Windows source inspection"
        },
        "commands": [
          "python tools/import_official_samples.py --archive .local/upstream/maniskill-33967b9.tar.gz --check",
          "python -m unittest discover -s tests/python -p test_bulk_catalog.py"
        ],
        "result": "Inspected the pinned solver signature, task registration, source license and wrapper contract. No simulator invocation evidence is attached.",
        "artifacts": [],
        "runtime_verification": "not_run",
        "contributor_reported": null,
        "hub_verification": {
          "level": "source_reviewed",
          "runtime": "not_run"
        }
      },
      "maintenance": {
        "record_version": "1.0.0",
        "last_checked": "2026-10-17",
        "upstream_status": "pinned_release; no automatic update"
      },
      "contribution": {
        "allowed_paths": [
          "catalog/records/maniskill-xarm6-stack-cube.json",
          "docs/recipes/maniskill-xarm6-stack-cube.md",
          "recipes/maniskill-xarm6-stack-cube/requirements.txt",
          "recipes/maniskill-xarm6-stack-cube/run.py"
        ],
        "instructions": "Only actual reusable fixes. Public submission permission and a scoped pilot token are separate requirements. Submission opens a public internal draft PR; it is not publication."
      }
    }
  ]
}
