Pathways Workload
GoogleOfficialPublished by Google
- Skill
- Review and audit
- Software development
- Apache-2.0
- Low risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a structured approach to diagnosing issues with Pathways on Cloud workloads, such as JAX training or inference running on Cloud TPUs in GKE. It utilizes a provided script to aggregate and analyze logs from various components, including the IFRT proxy, resource manager, workers, and sidecars. The workflow emphasizes identifying the earliest error in the system to determine the root cause, distinguishing it from downstream symptoms like connection failures or SIGTERMs. It includes specific playbooks for different container types and common failure scenarios.
What it does
- Automates log collection and analysis across multiple Pathways components.
- Identifies the root cause by pinpointing the earliest error in a distributed system.
- Provides specific debugging playbooks for user workloads, proxies, resource managers, and workers.
- Diagnoses GKE scheduling issues, infrastructure interruptions, and OOM kills.
- Offers guidance on handling common failure patterns like version mismatches and connectivity errors.
When to use it
- When a Pathways workload fails to start, crashes, or stops making progress.
- When encountering errors like IFRT proxy connection failures, DEADLINE_EXCEEDED, or host OOM kills.
- When investigating unexpected restarts or SIGTERM events in a JobSet or LeaderWorkerSet.
- When JAX and Pathways version mismatches are suspected.
Advantages
- Reduces manual log searching by centralizing queries across distributed containers.
- Prevents chasing downstream symptoms by enforcing an 'earliest error' debugging methodology.
- Provides clear, actionable steps for complex distributed system failures.
- Includes built-in support for common GKE and TPU-specific failure modes.
Usage examples
- “My Pathways JobSet is stuck in a suspended state, how do I debug it?”
- The agent will guide you to check the JobSet controller manager logs in the jobset-system namespace and use the debug_workload script with the --action=summary flag to identify configuration or validation errors.
- “My JAX training job crashed with a connection error to the IFRT proxy.”
- The agent will instruct you to verify if the proxy server started successfully using the debug_workload script, then check the resource manager and worker logs to find the root cause of the connection termination.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/google/pathways-workload/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip pathways-workload.zip -d .agents/skills
Documentation by Google
Pathways on Cloud Workload Debugging Skill
This skill provides comprehensive instructions, debugging playbooks, and helper utilities to troubleshoot Pathways on Cloud GKE workloads.
Usage Attribution
MUST READ: Before executing any gcloud, REST API, or MCP command, you
MUST read and follow the instructions in
Usage Attribution.
Overview
Pathways: Pathways on Cloud Introduction
Understanding Initial Setup for JAX+Pathways on Cloud
A GKE cluster is required to use Pathways. We have instructions to create one which utilize either 1) a one click setup like XPK or 2) a series of gcloud commands here: https://docs.cloud.google.com/ai-hypercomputer/docs/workloads/pathways-on-cloud/create-gke-cluster
Advanced customers have built custom infrastructure which rolls Pathways based JobSets and cluster creation commands. To debug their infra issues, we may want to ask them to share their jobset YAMLs with us (redacting their main container definition is fine).
Parsing Important Logs
How to determine if various Pathways components have started successfully
IFRT Proxy Server (a.k.a Pathways Client) Ready
IFRT proxy server started with status OK
Pathways worker Ready: Pathways Server serving on [::]:29001RM (Resource Manager) Ready and eventually all TPU slices are ready
Pathways Server serving on [::]:29001
...
...
***<num slices>/<num slices> Pathways Slices Now Ready ***Individual Pathways worker (on a TPU host) Ready
Pathways Server serving on [::]:29001Step 1: Metadata & Configuration Gathering
Before initiating debugging, gather critical parameters to construct accurate
queries: 1. project 2. cluster_name 3. location 4. the workload name and
kind (see Identifying the Workload) 5. namespace
(default: default) 6. issue_time (UTC, when the failure was first noticed)
Always bound log queries in time. Use the window
[issue_time - 30m, issue_time + 30m], i.e. pass
--start_time="{start_time}" --duration=1h to the debug_workload script, where
{start_time} is issue_time - 30m in RFC 3339 (e.g. 2026-10-22T11:10:00Z).
Unbounded queries are slow and get truncated by --limit. Widen the window only
if the first error is not in it.
If the window contains more than one failure, report each with timestamps and say which one matches the user's symptom.
Report the root cause and the workaround separately. The root cause is the component that logged the earliest stall or error (for example the proxy, the RM or a worker). A configuration change that avoids that code path (a different checkpoint handler, flag or topology) is a workaround or a contributing factor: list it under the fix, not as the root cause.
When you compare with other runs (an earlier attempt, a sibling test that passed, or the same test on other days), use the comparison to narrow down which code path is affected, not as proof of the cause. A setting that differs in a passing run does not explain the failure if a Pathways component logged the stall or error.
End the report with the checks you ran and their result, so the user can repeat them: preflight, the actions or
gcloud logging readqueries you used (with their time window), pod events, and node OOMs. Include checks that failed or could not run (e.g. no log access) and say what to run instead.
[!TIP]
Always check the recent chat context or shared log queries from the user. Often, all five fields can be directly scraped from their console links or queries!
Identifying the Workload
The debug_workload script finds the workload's logs by the object that created
its pods. Use the matching flag (the examples in this skill use
--jobset_name):
| Workload kind | Flag | Find it with |
|---|---|---|
| JobSet (most training workloads, XPK) | --jobset_name=<name> | kubectl get jobsets -n {namespace} |
| LeaderWorkerSet (e.g. Pathways inference) | --lws_name=<name> | kubectl get leaderworkersets -n {namespace} |
| Plain Job (not created by a JobSet) | --job_name=<name> | kubectl get jobs -n {namespace} -l '!jobset.sigs.k8s.io/jobset-name' |
| Anything else (bare pods, custom controllers) | --pod_prefix=<prefix> | kubectl get pods -n {namespace} |
For past incidents, list the pods that logged in the window and their owner labels instead:
gcloud logging read 'resource.type="k8s_container"
resource.labels.cluster_name="{cluster_name}"
resource.labels.namespace_name="{namespace}"
timestamp>="{start_time}" timestamp<="{end_time}"' \
--project="{project}" --limit=10000 \
--format='value(resource.labels.pod_name,labels."k8s-pod/jobset_sigs_k8s_io/jobset-name",labels."k8s-pod/leaderworkerset_sigs_k8s_io/name",labels."k8s-pod/batch_kubernetes_io/job-name")' \
| sort -uIf parts of the workload run in different objects, query them together by
repeating --workload=<kind>:<name> (kinds: jobset, lws, job, pod).
For example, if the JAX client or the proxy runs in its own Job next to the
Pathways JobSet, debug both: --workload=jobset:{jobset_name} --workload=job:{client_job_name}.
To see what else ran on the same nodes, run scripts/debug_workload.py with
--action=neighbors --execute. It lists every namespace/pod/container that
logged on the workload's nodes and marks the ones that are not part of the
workload. Use it to spot another workload sharing the hosts (e.g. a second
resource manager or proxy on the same host and port when host exclusivity is not
set) and to find the real container names of the workload's pods (e.g. a
custom-named colocated Python sidecar).
Retrieving Active YAML Configuration
If the workload is still active/alive, run the following command to inspect how
it is structured and identify misconfigurations (use leaderworkerset or job
instead of jobset for those kinds):
kubectl get jobset {jobset_name} -n {namespace} -o yamlIf the workload has been deleted but you suspect misconfiguration, request the user to paste or share the workload YAML in the chat.
Recording Versions
Before reading errors, record each component's image tag (from the YAML or the
pod spec) and Build label (logged at startup by pathways-rm, pathways-proxy
and pathways-worker), plus the client's JAX, jaxlib and pathwaysutils versions.
Check that they are from matching releases and that the flags passed to each
component exist in its image.
Step 1.5: Quick Triage - Preflight, Then Crash Sweep
First run the preflight check. It verifies that you can read the project's logs and that the workload logged in the time window. An empty result from any other action is not a clean result until preflight passes. If you cannot run commands yourself (for example no log access) and give the user a plan or a list of commands instead, start that plan with the preflight command:
python3 scripts/debug_workload.py \
--project="{project}" \
--cluster_name="{cluster_name}" \
--location="{location}" \
--jobset_name="{jobset_name}" \
--start_time="{start_time}" --duration=1h \
--action=preflightThen, before reading containers one by one, run the crash and fatal-error sweep
across all containers of the workload. It looks for segfaults, Check failed,
Python tracebacks, OOM kills, unknown flags, permission errors, etc., and
returns the earliest hits first:
python3 scripts/debug_workload.py \
--project="{project}" \
--cluster_name="{cluster_name}" \
--location="{location}" \
--jobset_name="{jobset_name}" \
--start_time="{start_time}" --duration=1h \
--action=errors \
--executeThe container of the earliest hit is usually where the root cause is; then use
the container-specific playbook in Step 3 for that container. If the sweep is
empty, also run --action=node-ooms (OOM kills often do not appear in container
logs) and --action=pod-events.
If a cascade fills the output (hundreds of pods logging the same error), you
may add --first_per_pod=N to keep only the first N matching log lines of each
pod/container plus its last matching line, e.g. --first_per_pod=1 to see
which pod failed first and how the failure spread, or --first_per_pod=3 to
also see each pod's next few lines. Use it at your discretion: it fetches up to
--fetch_limit lines (default 1000) before grouping, so it is slower than a
plain query and can be slow or time out when the workload has many pods. Narrow
the time window first, and prefer a plain query when only a few pods are
involved. Never conclude "no crash" from a --first_per_pod sweep alone: it
skips lines in the middle of each pod's log, and the fetch limit can cut off
later pods. Confirm with a plain query on the suspect container.
Step 2: GKE JobSet Lifecycle Verification
If the workload has not started or failed immediately at scheduling time:
1. Verify Webhook & Scheduling Status
Identify if scheduling blocks are occurring due to insufficient cluster resources or webhook failures.
Check for webhook mutating errors, OOMKilled controller managers, or
Unschedulable conditions:
# Check controller manager pods in the JobSet system namespace
kubectl get pods -n jobset-system2. Symptom: Forever Suspended JobSet
If a JobSet is created but remains in a permanently Suspended state and never
spawns child pods:
Potential Root Causes:
The JobSet name is too long. Because JobSet appends replicated job names and index numbers to child resources, long prefixes fail standard Kubernetes resource name validation (max 63/253 chars).
The JobSet YAML is malformed (e.g. invalid or missing fields, wrong resource requests or node selectors), so the workload is never admitted to the queue and stays suspended. Ask the user for the YAML (see Retrieving Active YAML Configuration) and check it for errors.
Diagnosis: Check the JobSet controller manager logs in
jobset-systemnamespace to find truncation, length limit, name-generation, or validation errors. You can use the debug_workload script to quickly query the logs:
python3 scripts/debug_workload.py \
--project="{project}" \
--cluster_name="{cluster_name}" \
--location="{location}" \
--jobset_name="{jobset_name}" \
--start_time="{start_time}" --duration=1h \
--action=summary \
--execute3. SIGTERM and Pre-emption Diagnosis
SIGTERMs are the most common mechanism for GKE to stop/restart workloads. A SIGTERM is a symptom; find out who sent it.
Common senders: Spot VM preemption, Compute Engine host maintenance, host errors, node auto-repair, or a JobSet restart triggered by another failed container. Check infrastructure interruptions and pod events for the time window:
python3 scripts/debug_workload.py \ --project="{project}" \ --cluster_name="{cluster_name}" \ --location="{location}" \ --jobset_name="{jobset_name}" \ --start_time="{start_time}" --duration=1h \ --action=interruptions \ --execute # then the same command with --action=pod-eventsIf no infrastructure event explains the SIGTERM, trace the failure back from the user workload to the TPU that failed first:
In the user workload logs (
--action=user-workload), find the time of the first error or the last completed step.In the RM logs (
--action=pathways-rm) around that time, find when the first failure occurred or the first TPU slice/worker stopped responding (e.g. a slice leaving the ready state orJob cancelled due to ...), and which slice/worker it was.Inspect that worker's logs (
--action=workers, adding--min_severity=WARNINGif needed) and its node's events (--action=pod-events,--action=node-ooms,--action=interruptions) to find out what happened there.The cause can be a user code error (unlikely) or another fault, such as a hardware failure, an OOM, a crash in the worker, or a node interruption.
kubectl get events -n {namespace} --field-selector involvedObject.name={jobset_name}only works for live incidents: Kubernetes keeps events for a certain time only. For past incidents use--action=pod-events/--action=summary, which read the events from Cloud Logging.For deeper analysis of restarts and interruptions, follow the public gke-ai-troubleshooting-jobset-interruption skill; for host maintenance, follow gke-ai-troubleshooting-handle-disruption-gpu-tpu.
Step 3: Container-Specific Debugging Playbook
Because Pathways is distributed, inspect logs container-by-container in logical
order to avoid cascade noise, and always chase the earliest error. Before you
query a container, read its section in
Container Playbooks: it has the log
signals, the debug_workload.py command and the gotchas for that container.
| Order | Container | Action | Look for | Playbook |
|---|---|---|---|---|
| 1 | User workload (user-workload, main, jax-tpu) | --action=user-workload | The last completed step, then the first exception | A |
| 2 | IFRT proxy | --action=proxy | Connection refused to the RM port (:29001), Socket closed | B |
| 3 | Resource manager (pathways-rm) | --action=pathways-rm | Slice ready transitions, placement, a repeated Build label (restarts) | C |
| 4 | Pathways workers (pathways-worker) | --action=workers | The first worker that failed, Megascale stall detectors (HANG_DETECTED) | D |
| 5 | Colocated Python sidecar | --action=colocated-python-sidecar | Workers waiting for a sidecar that died | E |
Rules that apply to every container:
A client-side
Unable to initialize backend 'proxy': UNAVAILABLE: Unable to establish connectionis a symptom. Check whether the proxy, RM and workers started (see Parsing Important Logs) and find their earliest error before you suspect the user's code.IFRT proxy server was terminated: UNAVAILABLE: Socket closedandSLICE_FAILURE_CHIP_DRIVER_ERRORare downstream errors: go to the RM and worker logs.When one worker fails, the other workers of the slice fail shortly after. The root cause is in the logs of the first worker that failed.
The built-in search terms only cover known failures. If an action returns nothing useful, re-run it with
--min_severity=WARNING(DEFAULTfor the user workload) and add the workload's own strings with--extra_terms.If the logs still don't explain the failure, read all logs of the container (F), then ask for more verbose proxy logs or XProfs (G).
Step 4: Special Scenarios
These known failures have a specific cause and fix. When an error or symptom matches a row, read that scenario in Special Scenarios before you conclude:
| Error or symptom | Scenario |
|---|---|
JaxRuntimeError with DATA_LOSS during scale changes; elastic recovery or checkpoint restore fails | 1. Elastic training and checkpoint restore |
Container restarts or exit code 137 without OOMKilled; Memory cgroup out of memory, oom-kill, OOMKilling | 2. Host OOM kills on the head pod or TPU hosts |
Unable to initialize backend 'proxy': Backend 'proxy' is not in the list of known backends | 3. Backend proxy is not in the list of known backends |
SIGTERM received by PID 1; containers stop without a clear error | 4. SIGTERM received by PID 1 |
FAILED_PRECONDITION: The newly added instance does not match with the expected instances | 5. Newly added instance does not match the expected instances |
Connection to IFRT proxy server was terminated: FAILED_PRECONDITION: GrpcClientSession: writes no longer allowed | 6. Connection to the IFRT proxy server was terminated |
XlaRuntimeError: ABORTED: ... The metadata for object was edited during the operation | 7. Cached executable metadata was edited during the operation |
DEADLINE_EXCEEDED: lost connection to peer or DATA_LOSS: Pipe from scheduler to aggregator | 8. Lost connection to peer |
Status 11 from handshaker service: Input frame length is out of range | 9. ALTS handshake error from a client outside Google Cloud |
Lifecycle matches_prefix cannot specify more than 50 prefixes per config | 10. Cloud Storage lifecycle prefix limit |
IFRT Proxy client and server failed to agree on the protocol version, or Failed to deserialize the Mosaic module: ... Unsupported version | 11. JAX and Pathways version mismatch: compare the client's JAX, jaxlib and pathwaysutils versions with the Pathways image tags and Build labels |
Pods in ImagePullBackOff or ErrImagePull | 12. Pods stuck in ImagePullBackOff or ErrImagePull: read the pull error in the pod events, then list the registry's tags (gcloud artifacts docker tags list) |
Address already in use, Init:Error, or didn't have free ports | 13. Port collisions with hostNetwork |
| No error anywhere, but the job stops making progress | 14. The job hangs without failing |
Still waiting to acquire semaphore, Recv completion error, GOAWAY | 15. Proxy-to-worker transfers stall |
Related Public Skills and Writing Your Own Queries
These public skills from github.com/google/skills complement this skill. If they are installed, use them by name; otherwise read them from the links.
| Symptom | Public skill |
|---|---|
| Writing a custom Cloud Logging query | cloud-logging-query-generation (GKE examples: query_gke.md) |
| JobSet restarts, Spot preemption, maintenance, host termination | gke-ai-troubleshooting-jobset-interruption |
| Compute Engine host maintenance on TPU/GPU nodes | gke-ai-troubleshooting-handle-disruption-gpu-tpu |
Multi-slice job stops responding (HANG_DETECTED) | gke-ai-troubleshooting-tpu-mxla-hang |
| Node NotReady, unresponsive node, auto-repair | gke-ai-troubleshooting-node-unresponsive-timeout |
When you write your own queries:
Always use double quotes for strings, uppercase
AND/OR/NOT, and parentheses to group terms.Restrict
resource.type(k8s_container,k8s_pod,k8s_node,gke_nodepool,gce_instance) and uselog_id("events"),log_id("stdout")orlog_id("stderr")where possible.Always add a time window (
timestamp>="..."andtimestamp<="...").Pathways components log glog lines into
jsonPayload.message(some containers) ortextPayload(others); bare quoted terms orSEARCH()match both.Pod label keys are stored with
.replaced by_, e.g.labels."k8s-pod/batch_kubernetes_io/job-completion-index"andlabels."k8s-pod/jobset_sigs_k8s_io/jobset-name". Some public examples spell the Job label with dots (batch.kubernetes.io/job-name); that form does not match Pathways logs.
Files
- ATTRIBUTION.mdAdded by AutoGineer852 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md23.5 KiB
- references/attribution.md1.8 KiB
- references/container-playbooks.md11.4 KiB
- references/special-scenarios.md14.1 KiB
- scripts/debug_workload.pyScript45.9 KiB
LICENSE
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs a command-line tool, Needs Python, Needs Node.js
Security
What our scanner noticed· Low risk
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Publisher
- Google (Official)
- Source
- google/skills · skills/cloud/pathways-workload · commit 2194d3b
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Google.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download pathways-workload.zip