[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PSFY19RV426EB0QEMDY70M":3,"skill-same:01M6PSFY19RV426EB0QEMDY70M":125},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":14,"repositoryHtmlUrl":59,"repositoryHomepageUrl":6,"ownerHtmlUrl":60,"ownerBlogUrl":61,"ownerDescription":6,"updatedAt":62,"install":63,"resources":76},"01M6PSFY19RV426EB0QEMDY70M","tao-run-platform",null,"TAO Execution SDK for submitting and monitoring GPU training jobs on supported platforms (Lepton, Brev, SLURM, local Docker, Kubernetes). Use when the user wants to run TAO jobs through the SDK, get job tracking, S3 I\u002FO wrapping, multi-node distributed training, or platform-specific features that docker-run can't provide. Trigger phrases include \"use the TAO SDK\", \"call tao_sdk\", \"AutoMLRunner\", \"ActionWorkflow\", \"Job handles\", \"S3 I\u002FO wrapping\", \"TAO platform run\".","headmktlucca-ui\u002Fneuroads-lp","headmktlucca-ui","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F247379838?v=4","01M6PDVAV6M1W96D1SR1PDF8CS","NeuroAds","01M6PDVAZ4P281GNDKD45CYTF5",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"run","tao run platform","tao","platform","NVIDIA","Bash","node","read","install","local","get","Distributed Training","Multi-Node","for","features","monitoring","nvidia-tao","brev","lepton","training","2026-11-10 10:12:30",false,"---\nname: tao-run-platform\ndescription: TAO Execution SDK for submitting and monitoring GPU training jobs on supported platforms (Lepton, Brev, SLURM,\n  local Docker, Kubernetes). Use when the user wants to run TAO jobs through the SDK, get job tracking, S3 I\u002FO wrapping,\n  multi-node distributed training, or platform-specific features that docker-run can't provide. Trigger phrases include\n  \"use the TAO SDK\", \"call tao_sdk\", \"AutoMLRunner\", \"ActionWorkflow\", \"Job handles\", \"S3 I\u002FO wrapping\", \"TAO platform run\".\nlicense: Apache-2.0\ncompatibility: Requires Python 3.10+ and the nvidia-tao-sdk package (pip install nvidia-tao-sdk[all]).\nmetadata:\n  author: NVIDIA Corporation\n  version: \"0.2.0\"\nallowed-tools: Read Bash\ntags:\n- platform\n- tao\n- sdk\n---\n\n# TAO Execution SDK\n\nThe SDK is the **optional** Python layer for users who need job handles, S3 I\u002FO wrapping, or platform-specific features (Lepton multi-node, SLURM\u002FLustre queues, Kubernetes Jobs, local Docker debugging, Brev instance reuse). Most TAO skills run with just `docker run` and don't need it. Reach for the SDK when:\n\n- You want a `Job` handle to poll status and stream logs over time.\n- The platform is API-only (Lepton has no docker-run equivalent).\n- You need S3-aware input download \u002F output upload baked into the entrypoint.\n- You're chaining multiple jobs and want persisted state.\n\n## Preflight\n\nInstall `nvidia-tao-sdk[all]` before using this platform — the `[all]` extra pulls in every platform-specific dependency (Lepton, Brev, S3 utilities, etc.):\n\n```bash\npython -c \"import tao_sdk\" 2>\u002Fdev\u002Fnull || {\n  echo \"MISSING: nvidia-tao-sdk not installed. Run:\"\n  echo \"  pip install nvidia-tao-sdk[all]\"\n  exit 1\n}\n```\n\nThe package index is environment-specific — the runner\u002Fcontainer is expected to have a working `pip` configuration (e.g. `~\u002F.pip\u002Fpip.conf`, `PIP_INDEX_URL`, `PIP_EXTRA_INDEX_URL`, or proxy). If the install fails for index\u002Fnetwork reasons, that's a runner setup issue; this skill stays agnostic to the registry.\n\nIf missing, the agent prompts the user to authorize the install via Bash, then re-runs the preflight. Never auto-install silently.\n\n## Setup\n\nCredentials come from **environment variables** — sourced from `~\u002F.config\u002Ftao\u002F.env` (auto-loaded by the skill bank's SessionStart hook).\n\n```python\nfrom tao_sdk.platforms.lepton import LeptonSDK   # DGX Cloud\nfrom tao_sdk.platforms.brev   import BrevSDK     # Brev GPU instances\n\nsdk = LeptonSDK()    # reads LEPTON_WORKSPACE_ID, LEPTON_AUTH_TOKEN\n# or\nsdk = BrevSDK()      # reads BREV_API_TOKEN (optional — falls back to brev login)\n```\n\nBoth SDKs validate credentials lazily on first use and raise `CredentialError` with a clear message if a required env var is missing. Required env vars:\n\n| Platform | Required | Optional |\n|---|---|---|\n| Lepton | `LEPTON_WORKSPACE_ID`, `LEPTON_AUTH_TOKEN` | — |\n| Brev | — (manual `brev login` works) | `BREV_API_TOKEN` |\n| S3 I\u002FO (any platform) | `S3_BUCKET_NAME`, `ACCESS_KEY`, `SECRET_KEY` | `S3_ENDPOINT_URL`, `CLOUD_REGION` |\n| Container env | `NGC_KEY` | `HF_TOKEN` |\n\nThe agent never reads credential values — it only checks presence with `[ -n \"$VAR_NAME\" ]`.\n\n## Workflow Launch Intake\n\nFor any TAO workflow or action launch, first confirm the user goal. Then ask\nfor platform and monitoring preferences before credentials or launch details.\nGenerate the supported platform choices from the packaged helper, not by\nscanning platform docs or folders:\n\n```bash\n${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external}\u002Fscripts\u002Flist_tao_platforms.py \\\n  --skill-bank ${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external} --format text\n```\n\nAsk:\n\n1. Which supported platform should run this workflow?\n2. Should long-running monitoring stay enabled? Default: enabled. This means\n   the agent remains attached and posts status until terminal state, including\n   long `PENDING` queue waits.\n3. How many minutes between status updates? Default: 5 minutes.\n\nAfter the model\u002Faction are known, resolve the default container image from the\npackaged metadata and ask the user to confirm it or provide `image=\u003Coverride>`\nbefore creating runner files:\n\n```bash\n${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external}\u002Fscripts\u002Fresolve_tao_image.py \\\n  --skill-bank ${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external} \\\n  --model \u003Cnetwork_arch> --action \u003Caction> --format text\n```\n\nFor train-capable model workflows, inspect model-level AutoML metadata before\ncreating a plain training job:\n\n```bash\n${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external}\u002Fscripts\u002Flist_tao_models.py \\\n  --skill-bank ${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external} \\\n  --scope automl --format json\n```\n\nIf the selected model has `automl_enabled: true` and a valid train schema,\nroute training through `skills\u002Fapplications\u002Ftao-run-automl` by default. A workflow should\nonly bypass AutoML when its run settings include `automl_policy: off`, the user\nexplicitly asks for a plain run, or the model metadata says AutoML is enabled\nbut the train schema is not packaged yet.\n\nAfter the platform is selected, get the credential filter:\n\n```bash\n${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external}\u002Fscripts\u002Flist_tao_platforms.py \\\n  --skill-bank ${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external} \\\n  --platform \u003Cplatform> --format text\n```\n\nAsk only for credentials returned for the selected platform. For example, SLURM\nneeds `SLURM_USER` and `SLURM_HOSTNAME`; it does not need Lepton credentials.\nKubernetes and local Docker do not need Lepton or SLURM credentials. Ask storage\ncredentials such as S3 keys only when the selected platform and the data\u002Fresult\nURIs require them.\n\n## Core API\n\nAll platform SDKs implement the same core shape:\n\n```python\nsdk.create_job(image, command, gpu_count=1, env_vars=None, inputs=None, outputs=None, **kwargs) -> Job\nsdk.get_job_status(job_id) -> JobStatus\nsdk.get_job_logs(job_id, tail=None) -> str\nsdk.cancel_job(job_id) -> bool\nsdk.get_failure_analysis(job_id) -> dict | None\nsdk.get_job_results_dir(job_id) -> str\nsdk.check_path(remote_path) -> bool\nsdk.list_path(remote_path) -> list[str]\n```\n\nLepton-only:\n- `sdk.get_job_replicas(job_id)` — replica-level diagnostics for stuck-pending jobs.\n\nBrev-only:\n- `sdk.delete_instance(instance_id)` — clean up an ephemeral instance.\n- `sdk.list_instances()` — list active instances.\n\n## Submitting a Job\n\nThe agent always **constructs the container command via `build_entrypoint`** before calling `create_job`. The agent reads the action's schema from `skill_info.yaml` (`command`, `config_format`, `inputs`, `outputs`, `upload_excludes`) and passes those fields as kwargs. `build_entrypoint` bakes the in-container `script_runner` runtime (inlined as a base64 heredoc) and the CLI invocation that, at runtime, downloads declared inputs, writes the spec file at `{config_path}` with remote URIs rewritten to local paths, runs the user command, and uploads outputs. The platform SDK's `create_job` runs the resulting command **as-is** — no implicit wrapping.\n\n`build_entrypoint` infers the mode (`config` \u002F `args` \u002F `passthrough`) from what you pass — you never pass `mode` explicitly. See [`references\u002Fjob-construction.md`](references\u002Fjob-construction.md) for the full entrypoint contract, the spec\u002Fargs construction strategy per action `mode`, the mode-inference table, and `resolve_container_image()`. See [`references\u002Foutputs.md`](references\u002Foutputs.md) for where outputs land (the runtime destination tables and per-platform injection policy) and the critical \"spec is nested dicts, not flat dotted keys\" rule. See [`references\u002Fexamples.md`](references\u002Fexamples.md) for complete spec-driven and path-keyed `build_entrypoint` + `create_job` examples.\n\n## Monitoring\n\n```python\nstatus = sdk.get_job_status(job.id)\nprint(status.status)   # Pending, Running, Complete, Error, Canceled\nprint(status.message)  # platform-specific detail\n\nlogs = sdk.get_job_logs(job.id, tail=200)\nprint(logs)\n```\n\nFor stuck-Pending Lepton jobs, replica diagnostics reveal the cause (image pull, scheduling, mount errors):\n\n```python\nfor r in sdk.get_job_replicas(job.id):\n    issue = r[\"status\"].get(\"readiness_issue\")\n    if issue:\n        print(issue[\"reason\"], issue[\"message\"])\n        # e.g. \"InProgress\" \u002F \"Pulling image\"  (normal for big images)\n        #      \"Failed\"     \u002F \"ImagePullBackOff\" (NGC_KEY problem)\n        #      \"ConfigError\" \u002F \"Mount point not found\" (bad node)\n```\n\nOn failure, `get_failure_analysis()` classifies the root cause:\n\n```python\nanalysis = sdk.get_failure_analysis(job.id)\nif analysis:\n    print(analysis[\"err_class\"])   # ERR_PROGRAM, ERR_INFRA, etc.\n    print(analysis[\"suggestion\"])  # human-readable fix\n    for event in analysis.get(\"job_failure_by_node_event\", []):\n        print(event[\"node_event_name\"], event[\"message\"])  # OOM, GPU error, etc.\n```\n\n## Polling pattern\n\nFor interactive runs where the user wants to watch:\n\n```python\nimport time\nstatus_interval_minutes = status_interval_minutes or 5\nwhile True:\n    status = sdk.get_job_status(job.id)\n    if status.status in (\"Complete\", \"Error\", \"Canceled\"):\n        break\n    print(f\"  {status.status}\")\n    time.sleep(status_interval_minutes * 60)\n\nif status.status == \"Error\":\n    print(sdk.get_job_logs(job.id, tail=100))\n    print(sdk.get_failure_analysis(job.id))\n```\n\nWith long-running monitoring enabled, do not stop after 30 minutes or after a\nfew unchanged polls. Keep emitting updates every `status_interval_minutes`\nuntil the job finishes, fails, is canceled, or the user asks to detach\u002Fstop.\nIf the chat\u002Fruntime cannot remain open that long, say so explicitly and provide\nthe durable workflow\u002Flog path for manual status refresh.\n\nDo not use a final response for non-terminal monitored jobs. Finalizing the\nturn detaches the chat watcher. Keep non-terminal status messages in progress\nupdates and continue polling; only finalize at terminal state, explicit user\ndetach\u002Fstop, or a real runtime limit that prevents further polling.\n\nFor background runs, persist `job.id` and the `state_file` path, then re-attach later by constructing the same SDK and calling `get_job_status(job_id)` — job state is read from the on-disk store.\n\n## Orchestration patterns\n\nMulti-step workflows, parallel sweeps, and run-folder durability via\n`ActionWorkflow` live in\n[`references\u002Forchestration-patterns.md`](references\u002Forchestration-patterns.md).\nRead it before chaining `create_job` calls, sweeping a parameter, or\npersisting run state across context breaks.\n\n## Dataset utilities\n\nWhen the skill's documented filenames don't match the user's layout, list the dataset to confirm:\n\n```python\nassert sdk.check_path(\"s3:\u002F\u002Fmy-bucket\u002Fcoco\u002F\")\nfiles = sdk.list_path(\"s3:\u002F\u002Fmy-bucket\u002Fcoco\u002Ftrain\u002F\")\n# Use the actual paths to set spec fields.\n```\n\nFor S3 paths, strip trailing slashes when concatenating to avoid `\u002F\u002F`:\n\n```python\nbase = dataset_uri.rstrip(\"\u002F\")\nspecs[\"dataset\"][\"train_csv\"] = f\"{base}\u002Ftrain.csv\"   # nested — see \"spec is nested dicts\"\n```\n\n## Platform-specific notes\n\nEach backend (Lepton, Brev, SLURM, Kubernetes, local Docker) has its own import\npath, storage model, distributed-training options, credential scope, and\n`create_job` kwargs. See\n[`references\u002Fplatform-notes.md`](references\u002Fplatform-notes.md) for the\nper-platform details before generating or launching runner artifacts for a\ngiven backend.\n\n## Error patterns\n\nSDK error → root cause → fix mappings are in\n[`references\u002Ferror-patterns.md`](references\u002Ferror-patterns.md). Read when\nyou hit a `CredentialError`, image-pull failure, stuck-Pending job, or\nsimilar — the entries map exception text to the underlying cause.\n\n## What the SDK does NOT do\n\nScope guardrails (no skill-reading, no HPO, no spec opinions, no\nauto-platform-selection, no workflow orchestration) live in\n[`references\u002Fscope.md`](references\u002Fscope.md).\n","# TAO Execution SDK\n\nThe SDK is the **optional** Python layer for users who need job handles, S3 I\u002FO wrapping, or platform-specific features (Lepton multi-node, SLURM\u002FLustre queues, Kubernetes Jobs, local Docker debugging, Brev instance reuse). Most TAO skills run with just `docker run` and don't need it. Reach for the SDK when:\n\n- You want a `Job` handle to poll status and stream logs over time.\n- The platform is API-only (Lepton has no docker-run equivalent).\n- You need S3-aware input download \u002F output upload baked into the entrypoint.\n- You're chaining multiple jobs and want persisted state.\n\n## Preflight\n\nInstall `nvidia-tao-sdk[all]` before using this platform — the `[all]` extra pulls in every platform-specific dependency (Lepton, Brev, S3 utilities, etc.):\n\n```bash\npython -c \"import tao_sdk\" 2>\u002Fdev\u002Fnull || {\n  echo \"MISSING: nvidia-tao-sdk not installed. Run:\"\n  echo \"  pip install nvidia-tao-sdk[all]\"\n  exit 1\n}\n```\n\nThe package index is environment-specific — the runner\u002Fcontainer is expected to have a working `pip` configuration (e.g. `~\u002F.pip\u002Fpip.conf`, `PIP_INDEX_URL`, `PIP_EXTRA_INDEX_URL`, or proxy). If the install fails for index\u002Fnetwork reasons, that's a runner setup issue; this skill stays agnostic to the registry.\n\nIf missing, the agent prompts the user to authorize the install via Bash, then re-runs the preflight. Never auto-install silently.\n\n## Setup\n\nCredentials come from **environment variables** — sourced from `~\u002F.config\u002Ftao\u002F.env` (auto-loaded by the skill bank's SessionStart hook).\n\n```python\nfrom tao_sdk.platforms.lepton import LeptonSDK   # DGX Cloud\nfrom tao_sdk.platforms.brev   import BrevSDK     # Brev GPU instances\n\nsdk = LeptonSDK()    # reads LEPTON_WORKSPACE_ID, LEPTON_AUTH_TOKEN\n# or\nsdk = BrevSDK()      # reads BREV_API_TOKEN (optional — falls back to brev login)\n```\n\nBoth SDKs validate credentials lazily on first use and raise `CredentialError` with a clear message if a required env var is missing. Required env vars:\n\n| Platform | Required | Optional |\n|---|---|---|\n| Lepton | `LEPTON_WORKSPACE_ID`, `LEPTON_AUTH_TOKEN` | — |\n| Brev | — (manual `brev login` works) | `BREV_API_TOKEN` |\n| S3 I\u002FO (any platform) | `S3_BUCKET_NAME`, `ACCESS_KEY`, `SECRET_KEY` | `S3_ENDPOINT_URL`, `CLOUD_REGION` |\n| Container env | `NGC_KEY` | `HF_TOKEN` |\n\nThe agent never reads credential values — it only checks presence with `[ -n \"$VAR_NAME\" ]`.\n\n## Workflow Launch Intake\n\nFor any TAO workflow or action launch, first confirm the user goal. Then ask\nfor platform and monitoring preferences before credentials or launch details.\nGenerate the supported platform choices from the packaged helper, not by\nscanning platform docs or folders:\n\n```bash\n${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external}\u002Fscripts\u002Flist_tao_platforms.py \\\n  --skill-bank ${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external} --format text\n```\n\nAsk:\n\n1. Which supported platform should run this workflow?\n2. Should long-running monitoring stay enabled? Default: enabled. This means\n   the agent remains attached and posts status until terminal state, including\n   long `PENDING` queue waits.\n3. How many minutes between status updates? Default: 5 minutes.\n\nAfter the model\u002Faction are known, resolve the default container image from the\npackaged metadata and ask the user to confirm it or provide `image=\u003Coverride>`\nbefore creating runner files:\n\n```bash\n${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external}\u002Fscripts\u002Fresolve_tao_image.py \\\n  --skill-bank ${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external} \\\n  --model \u003Cnetwork_arch> --action \u003Caction> --format text\n```\n\nFor train-capable model workflows, inspect model-level AutoML metadata before\ncreating a plain training job:\n\n```bash\n${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external}\u002Fscripts\u002Flist_tao_models.py \\\n  --skill-bank ${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external} \\\n  --scope automl --format json\n```\n\nIf the selected model has `automl_enabled: true` and a valid train schema,\nroute training through `skills\u002Fapplications\u002Ftao-run-automl` by default. A workflow should\nonly bypass AutoML when its run settings include `automl_policy: off`, the user\nexplicitly asks for a plain run, or the model metadata says AutoML is enabled\nbut the train schema is not packaged yet.\n\nAfter the platform is selected, get the credential filter:\n\n```bash\n${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external}\u002Fscripts\u002Flist_tao_platforms.py \\\n  --skill-bank ${TAO_SKILL_BANK_PATH:-~\u002Ftao-skills-external} \\\n  --platform \u003Cplatform> --format text\n```\n\nAsk only for credentials returned for the selected platform. For example, SLURM\nneeds `SLURM_USER` and `SLURM_HOSTNAME`; it does not need Lepton credentials.\nKubernetes and local Docker do not need Lepton or SLURM credentials. Ask storage\ncredentials such as S3 keys only when the selected platform and the data\u002Fresult\nURIs require them.\n\n## Core API\n\nAll platform SDKs implement the same core shape:\n\n```python\nsdk.create_job(image, command, gpu_count=1, env_vars=None, inputs=None, outputs=None, **kwargs) -> Job\nsdk.get_job_status(job_id) -> JobStatus\nsdk.get_job_logs(job_id, tail=None) -> str\nsdk.cancel_job(job_id) -> bool\nsdk.get_failure_analysis(job_id) -> dict | None\nsdk.get_job_results_dir(job_id) -> str\nsdk.check_path(remote_path) -> bool\nsdk.list_path(remote_path) -> list[str]\n```\n\nLepton-only:\n- `sdk.get_job_replicas(job_id)` — replica-level diagnostics for stuck-pending jobs.\n\nBrev-only:\n- `sdk.delete_instance(instance_id)` — clean up an ephemeral instance.\n- `sdk.list_instances()` — list active instances.\n\n## Submitting a Job\n\nThe agent always **constructs the container command via `build_entrypoint`** before calling `create_job`. The agent reads the action's schema from `skill_info.yaml` (`command`, `config_format`, `inputs`, `outputs`, `upload_excludes`) and passes those fields as kwargs. `build_entrypoint` bakes the in-container `script_runner` runtime (inlined as a base64 heredoc) and the CLI invocation that, at runtime, downloads declared inputs, writes the spec file at `{config_path}` with remote URIs rewritten to local paths, runs the user command, and uploads outputs. The platform SDK's `create_job` runs the resulting command **as-is** — no implicit wrapping.\n\n`build_entrypoint` infers the mode (`config` \u002F `args` \u002F `passthrough`) from what you pass — you never pass `mode` explicitly. See [`references\u002Fjob-construction.md`](references\u002Fjob-construction.md) for the full entrypoint contract, the spec\u002Fargs construction strategy per action `mode`, the mode-inference table, and `resolve_container_image()`. See [`references\u002Foutputs.md`](references\u002Foutputs.md) for where outputs land (the runtime destination tables and per-platform injection policy) and the critical \"spec is nested dicts, not flat dotted keys\" rule. See [`references\u002Fexamples.md`](references\u002Fexamples.md) for complete spec-driven and path-keyed `build_entrypoint` + `create_job` examples.\n\n## Monitoring\n\n```python\nstatus = sdk.get_job_status(job.id)\nprint(status.status)   # Pending, Running, Complete, Error, Canceled\nprint(status.message)  # platform-specific detail\n\nlogs = sdk.get_job_logs(job.id, tail=200)\nprint(logs)\n```\n\nFor stuck-Pending Lepton jobs, replica diagnostics reveal the cause (image pull, scheduling, mount errors):\n\n```python\nfor r in sdk.get_job_replicas(job.id):\n    issue = r[\"status\"].get(\"readiness_issue\")\n    if issue:\n        print(issue[\"reason\"], issue[\"message\"])\n        # e.g. \"InProgress\" \u002F \"Pulling image\"  (normal for big images)\n        #      \"Failed\"     \u002F \"ImagePullBackOff\" (NGC_KEY problem)\n        #      \"ConfigError\" \u002F \"Mount point not found\" (bad node)\n```\n\nOn failure, `get_failure_analysis()` classifies the root cause:\n\n```python\nanalysis = sdk.get_failure_analysis(job.id)\nif analysis:\n    print(analysis[\"err_class\"])   # ERR_PROGRAM, ERR_INFRA, etc.\n    print(analysis[\"suggestion\"])  # human-readable fix\n    for event in analysis.get(\"job_failure_by_node_event\", []):\n        print(event[\"node_event_name\"], event[\"message\"])  # OOM, GPU error, etc.\n```\n\n## Polling pattern\n\nFor interactive runs where the user wants to watch:\n\n```python\nimport time\nstatus_interval_minutes = status_interval_minutes or 5\nwhile True:\n    status = sdk.get_job_status(job.id)\n    if status.status in (\"Complete\", \"Error\", \"Canceled\"):\n        break\n    print(f\"  {status.status}\")\n    time.sleep(status_interval_minutes * 60)\n\nif status.status == \"Error\":\n    print(sdk.get_job_logs(job.id, tail=100))\n    print(sdk.get_failure_analysis(job.id))\n```\n\nWith long-running monitoring enabled, do not stop after 30 minutes or after a\nfew unchanged polls. Keep emitting updates every `status_interval_minutes`\nuntil the job finishes, fails, is canceled, or the user asks to detach\u002Fstop.\nIf the chat\u002Fruntime cannot remain open that long, say so explicitly and provide\nthe durable workflow\u002Flog path for manual status refresh.\n\nDo not use a final response for non-terminal monitored jobs. Finalizing the\nturn detaches the chat watcher. Keep non-terminal status messages in progress\nupdates and continue polling; only finalize at terminal state, explicit user\ndetach\u002Fstop, or a real runtime limit that prevents further polling.\n\nFor background runs, persist `job.id` and the `state_file` path, then re-attach later by constructing the same SDK and calling `get_job_status(job_id)` — job state is read from the on-disk store.\n\n## Orchestration patterns\n\nMulti-step workflows, parallel sweeps, and run-folder durability via\n`ActionWorkflow` live in\n[`references\u002Forchestration-patterns.md`](references\u002Forchestration-patterns.md).\nRead it before chaining `create_job` calls, sweeping a parameter, or\npersisting run state across context breaks.\n\n## Dataset utilities\n\nWhen the skill's documented filenames don't match the user's layout, list the dataset to confirm:\n\n```python\nassert sdk.check_path(\"s3:\u002F\u002Fmy-bucket\u002Fcoco\u002F\")\nfiles = sdk.list_path(\"s3:\u002F\u002Fmy-bucket\u002Fcoco\u002Ftrain\u002F\")\n# Use the actual paths to set spec fields.\n```\n\nFor S3 paths, strip trailing slashes when concatenating to avoid `\u002F\u002F`:\n\n```python\nbase = dataset_uri.rstrip(\"\u002F\")\nspecs[\"dataset\"][\"train_csv\"] = f\"{base}\u002Ftrain.csv\"   # nested — see \"spec is nested dicts\"\n```\n\n## Platform-specific notes\n\nEach backend (Lepton, Brev, SLURM, Kubernetes, local Docker) has its own import\npath, storage model, distributed-training options, credential scope, and\n`create_job` kwargs. See\n[`references\u002Fplatform-notes.md`](references\u002Fplatform-notes.md) for the\nper-platform details before generating or launching runner artifacts for a\ngiven backend.\n\n## Error patterns\n\nSDK error → root cause → fix mappings are in\n[`references\u002Ferror-patterns.md`](references\u002Ferror-patterns.md). Read when\nyou hit a `CredentialError`, image-pull failure, stuck-Pending job, or\nsimilar — the entries map exception text to the underlying cause.\n\n## What the SDK does NOT do\n\nScope guardrails (no skill-reading, no HPO, no spec opinions, no\nauto-platform-selection, no workflow orchestration) live in\n[`references\u002Fscope.md`](references\u002Fscope.md).\n",{"name":5,"tags":49,"license":15,"metadata":51,"description":7,"allowed-tools":54,"compatibility":55},[27,26,50],"sdk",{"author":52,"version":53},"NVIDIA Corporation","0.2.0","Read Bash","Requires Python 3.10+ and the nvidia-tao-sdk package (pip install nvidia-tao-sdk[all]).","main","7a940b8e5af16c95e5c190a524421d32fc7445a9",".claude\u002Fskills\u002Ftao-run-platform","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui","https:\u002F\u002Fneuroads.com.br","2026-08-12 00:42:44",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add headmktlucca-ui\u002Fneuroads-lp --skill tao-run-platform",{"tool":69,"command":70},"bunx","bunx skills add headmktlucca-ui\u002Fneuroads-lp --skill tao-run-platform",{"tool":72,"command":73},"pnpm","pnpm dlx skills add headmktlucca-ui\u002Fneuroads-lp --skill tao-run-platform","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002FSKILL.md",true,[77,83,87,91,95,99,103,107,111,115,119],{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"BENCHMARK.md","REFERENCE","参考文档",4260,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002FBENCHMARK.md",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},"evals\u002Fevals.json",792,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002Fevals\u002Fevals.json",{"path":88,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Ferror-patterns.md",1590,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002Freferences\u002Ferror-patterns.md",{"path":92,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Fexamples.md",3779,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002Freferences\u002Fexamples.md",{"path":96,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Fjob-construction.md",4542,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002Freferences\u002Fjob-construction.md",{"path":100,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":101,"sourceHtmlUrl":102},"references\u002Forchestration-patterns.md",2666,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002Freferences\u002Forchestration-patterns.md",{"path":104,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":105,"sourceHtmlUrl":106},"references\u002Foutputs.md",2656,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002Freferences\u002Foutputs.md",{"path":108,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":109,"sourceHtmlUrl":110},"references\u002Fplatform-notes.md",2751,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002Freferences\u002Fplatform-notes.md",{"path":112,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":113,"sourceHtmlUrl":114},"references\u002Fscope.md",1300,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002Freferences\u002Fscope.md",{"path":116,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":117,"sourceHtmlUrl":118},"skill-card.md",4007,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002Fskill-card.md",{"path":120,"resourceType":121,"resourceTypeDesc":122,"sizeBytes":123,"sourceHtmlUrl":124},"skill.oms.sig","OTHER","其他",6257,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftao-run-platform\u002Fskill.oms.sig",[126,151,174,200,218,252],{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":139,"publishedAt":44},"01M6PTDCZTXTGSTX4RFK901YSZ","xunit-skill","Generates xUnit.net tests in C#. Covers Fact\u002FTheory, constructor injection, IClassFixture, and FluentAssertions. Use when user mentions \"xUnit\", \"[Fact]\", \"[Theory]\", \"Assert.Equal\", \"C# xUnit\". Triggers on: \"xUnit\", \"[Fact]\", \"[Theory]\", \"Assert.Equal C#\", \"xUnit.net\".","MIT","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fxunit-skill\u002FSKILL.md",[133,136],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[140,141,142,143,144,145,146,147,148,149,150],"xunit","xunit skill","testing","injection","user","use","tests","triggers","unit","unit-testing","C#",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":159,"publishedAt":44},"01M6PTCB59ZTG5FTMWGPYEMMBP","xcuitest-skill","Generates XCUITest UI tests for iOS\u002FiPadOS apps in Swift. Apple's native testing framework for reliable, fast UI automation. Supports local simulators and TestMu AI cloud real devices. Use when user mentions \"XCUITest\", \"XCTest\", \"iOS UI test\", \"Swift test\", \"XCUIApplication\". Triggers on: \"XCUITest\", \"XCTest UI\", \"iOS UI test\", \"Swift UI test\", \"XCUIApplication\", \"TestMu\".","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fxcuitest-skill\u002FSKILL.md",[157,158],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},[160,161,142,162,163,164,165,166,145,167,168,169,33,170,146,147,171,172,37,173],"xcuitest","xcuitest skill","automation","test","testing framework","ios","devices","mobile","mobile-testing","ui test","apple","apps","native","objective",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":184,"publishedAt":44},"01M6PTATMNTY9NF4J7KSR76YK6","world-builder","Create and manage generative game zones for Dorothy's Pokemon-style world. Use this skill when creating, updating, or designing game worlds via MCP tools.","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fworld-builder\u002FSKILL.md",[180,183],{"categoryNo":181,"categoryName":182,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},[185,186,187,188,189,190,191,192,145,193,194,195,196,197,198,37,199],"builder","world","world builder","MCP","create","mcp tools","Tools","game","pokemon","manage","style","via","theme","zone","generative",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":204,"categories":205,"keywords":208,"publishedAt":44},"01M6PT9Z92JTSQEHE1QR0NNW5F","webdriverio-skill","Generates WebdriverIO (WDIO) automation tests in JavaScript or TypeScript. Supports local and TestMu AI cloud. Use when user mentions \"WebdriverIO\", \"WDIO\", \"wdio.conf\", \"browser.url\", \"$\", \"$$\". Triggers on: \"WebdriverIO\", \"WDIO\", \"wdio\", \"browser.$\".","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fwebdriverio-skill\u002FSKILL.md",[206,207],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},[209,142,210,162,211,212,213,214,144,145,215,33,146,147,216,217],"webdriverio skill","typescript","javascript","browser","cloud","e2e","e2e-testing","URL","conf",{"skillNo":219,"name":220,"nameZh":6,"description":221,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":222,"categories":223,"keywords":233,"publishedAt":44},"01M6PT9NVK36ZWCQ69YXK3FR4K","web-design-guidelines","Web platform design and accessibility guidelines. Use when building web interfaces, auditing accessibility, implementing responsive layouts, or reviewing web UI code. Triggers on tasks involving HTML, CSS, web components, WCAG compliance, responsive design, or web performance.","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fweb\u002FSKILL.md",[224,227,228],{"categoryNo":225,"categoryName":226,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":181,"categoryName":182,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":229,"categoryName":230,"taxonomyType":231,"taxonomyTypeDesc":232},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,27,147,251],"design","web","guidelines","web design guidelines","web design","css","performance","components","web components","tasks","code","web performance","ui","platform design","html","responsive design","responsive","implementing",{"skillNo":253,"name":254,"nameZh":6,"description":255,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":130,"licenseFileUrl":6,"sourceHtmlUrl":256,"categories":257,"keywords":260,"publishedAt":44},"01M6PT9A3JKRE3X34276F2FW5R","watchos-design-guidelines","Apple Human Interface Guidelines for Apple Watch. Use when building watchOS apps, complications, or workout features. Triggers on tasks involving Watch UI, Digital Crown, glanceable interfaces, or wrist-based interactions.","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fwatchos\u002FSKILL.md",[258,259],{"categoryNo":181,"categoryName":182,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":229,"categoryName":230,"taxonomyType":231,"taxonomyTypeDesc":232},[234,236,261,243,246,145,262,263,170,27,264,147,171,265,37,266,38],"watchos design guidelines","workout","human","watch","interface","platform-design"]