소스 정보
- 저장소
- pegasus-isi/claude-plugin-marketplace
- 최근 소스 활동
- 2026년 8월 21일 21:58
- 감지된 SKILL.md 언어
- 영어
- 스타
- 0
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/pegasus-isi/claude-plugin-marketplace --skill pegasus-debug명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
| name | pegasus-debug |
| description | Diagnose Pegasus workflow failures from error messages and logs |
| allowed-tools | ["Read","Glob","Grep","Bash"] |
You are a Pegasus workflow debugging specialist. The user has invoked /pegasus-debug to diagnose a workflow failure.
The path below is relative to the pegasus-ai plugin directory (the one
holding skills/, references/ and assets/), not to your working directory.
If the context you were given does not name it, locate the guide with a glob for
**/pegasus-ai/references/PEGASUS.md. Say so and stop if you cannot find it —
the error-pattern database in Step 3 is drawn from it.
references/PEGASUS.md — especially the "Running and Debugging" and "Common File Staging Pitfalls" sections.Ask the user for one or more of the following:
pegasus-analyzer, job .out/.err files, or terminal output.out and .err files from itIf the user provides a run directory, use these commands to gather diagnostics:
# Summary of failures
pegasus-analyzer <run-dir>
# Find failed job logs
find <run-dir> -name "*.out" -o -name "*.err" | head -20
# Read specific job output
cat <run-dir>/<job-id>.out
cat <run-dir>/<job-id>.err
Check the error against this pattern database (from references/PEGASUS.md and 5 production workflows):
These come from pegasus-plan and appear before any job runs, so there are no
job logs to read — the evidence is the generator and the catalogs it wrote.
| Error Pattern | Cause | Fix |
|---|---|---|
site attribute (CONTAINER_SITE) is a mismatch then Unable to select a Physical Filename (PFN) ... for <name>.sif | image_site was never set on Container(), so Pegasus emitted its CONTAINER_SITE placeholder and no site owns the image | Set image_site="local" as a keyword. The 4th positional parameter of Container() is arguments, not image_site — passing a site name there silently sets container.arguments and leaves image_site unset, which is what produces this pair of messages |
Can't determine a location to transfer input file for lfn X for job Y | Nothing in the workflow produces X and it is not in the Replica Catalog | Find the job that should output X. If the producer is built in a loop, check that add_jobs() is called inside the loop (see Dependency Failures) |
Unable to add Directory <internal-mount-point ...> | Two directories of the same type declared for one site in the Site Catalog | Keep one sharedScratch and one localStorage per site |
A planning error names a symptom — the file that cannot be staged, the site
that does not match. Fix the generator that produced the catalog, then re-run
pegasus-plan and read the result. Do not hand the user an edit and ask them to
try again: planning is fast and local, so verify it yourself. It is common for
one planning error to hide another, and a fix that was never planned is a guess.
| Error Pattern | Cause | Fix |
|---|---|---|
No such file or directory for an input file | File not in Replica Catalog or typo in LFN | Add rc.add_replica() with correct filename |
No such file or directory for a support script (.R, .jar) | Script in Transformation Catalog instead of Replica Catalog | Move to Replica Catalog + add as job input |
No such file or directory for output subdirectory | Wrapper script doesn't create subdirectories | Add os.makedirs(os.path.dirname(output), exist_ok=True) |
FileNotFoundError for ../bin/script.R | Wrapper uses __file__-relative path | Use os.path.join(os.getcwd(), "script.R") instead |
glob() / os.listdir() returns empty | Directory scanning in job working directory | Pass explicit file paths as arguments |
| Error Pattern | Cause | Fix |
|---|---|---|
FATAL: could not open image / transfer failure | .sif path typo or not accessible from the site | Verify the file:// path and image_site in Container() are correct |
command not found inside container | Tool not installed in container | Add tool to the Apptainer .def file and rebuild the .sif |
ModuleNotFoundError for Python package | Package not in container | Add pip install or micromamba install to the .def file's %post |
not a valid squashfs image / while parsing squashfs super block | The .sif has no filesystem. The build produced an empty image and reported success — --fakeroot is the known cause | Run apptainer inspect <sif> on the source: it fails the same way, which locates the problem at the build rather than the transfer. Rebuild without --fakeroot and inspect before resubmitting |
| A staged container of a few hundred KB | Same as above — a real container is tens to hundreds of MB | Check the stage-in log's byte count. Total N transfers, 385.1 KB transferred for a job that stages a container is the tell, and it appears before any container error |
Note where these two surface. The error names squashfs and arrives from a worker
node, so it reads as a staging or filesystem problem; the cause is a build that
exited 0 on the submit host minutes earlier. apptainer sif list will parse the
broken file and ls will show a plausible size — only apptainer inspect, or
opening it, reveals there is nothing inside.
| Error Pattern | Cause | Fix |
|---|---|---|
MemoryError or OOM killed | Insufficient memory allocation | Increase .add_pegasus_profile(memory="N GB") |
Bus error (signal 7) | Memory or I/O issue | Increase memory; check for large temporary files |
| Job timeout | Step takes too long | Increase timeout; optimize the tool call |
| Error Pattern | Cause | Fix |
|---|---|---|
unrecognized arguments | Mismatch between add_args() and wrapper's argparse | Align argument names in both files |
the following arguments are required | Missing argument in add_args() | Add the missing --flag to the job's add_args() |
error: argument --input: expected one argument | Argument value contains spaces or is missing | Quote values or check argument construction |
| Error Pattern | Cause | Fix |
|---|---|---|
| Job runs before its input is ready | Missing dependency between jobs | Ensure File objects are shared between producer add_outputs() and consumer add_inputs() |
| Circular dependency error | Circular file references | Check that no file is both input and output of the same job |
mkdir job not running first | Missing explicit dependency on mkdir | Add self.wf.add_dependency(mkdir_job, children=[first_job]) |
| Only the last item of a fan-out is in the DAG, and every earlier item's output has "no location to transfer" | add_jobs() called after the loop instead of inside it — the job variables are rebound each pass, so only the final iteration's objects survive to be added | Call self.wf.add_jobs(...) inside the loop body, at the point each job is built |
| Error Pattern | Cause | Fix |
|---|---|---|
| Exit code 1 but no stderr | Wrapper doesn't capture/print stderr | Add print(result.stderr, file=sys.stderr) |
Permission denied on wrapper script | Script not executable | chmod +x bin/script.py or add shebang line |
| Output file not created | Tool succeeded but output path doesn't match | Verify output filename in wrapper matches File() LFN |
Based on the identified failure pattern, read:
os.makedirs, subprocess callsadd_args(), add_inputs(), add_outputs().def file — check if the tool is installedProvide a specific, actionable fix:
python3 bin/wrapper.py --helpapptainer exec image.sif which toolpython3 workflow_generator.py --helpAfter fixing the immediate issue, suggest:
/pegasus-review to catch other potential issuesrun_manual.sh to test each step locally before Pegasus submission