remote-compute
Runs heavy computational tasks on remote clusters instead of locally.
Install
mkdir -p .claude/skills/remote-compute && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/17383" && unzip -o skill.zip -d .claude/skills/remote-compute && rm skill.zipInstalls to .claude/skills/remote-compute
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Run arbitrary scripts on KBase compute nodes via the CDM Task Service (CTS). Use when the user needs to move compute off their notebook or local machine — e.g., running bioinformatics tools, heavy data processing, or anything that benefits from dedicated CPU/memory on a remote node.Key capabilities
- →Run arbitrary scripts on KBase compute nodes
- →Dispatch containerized jobs using pre-built tool images
- →Dispatch containerized jobs using generic Ubuntu scripts
- →Stage input files to MinIO
- →Monitor job status and retrieve results
How it works
The skill runs containerized jobs on remote KBase compute nodes via the CDM Task Service (CTS), supporting both pre-built tool images and custom Ubuntu scripts, with input files staged in MinIO.
Inputs & outputs
When to use remote-compute
- →Run heavy bioinformatics tool
- →Batch process data
- →Execute long-running job
About this skill
Remote Compute Skill
Run containerized jobs on KBase compute nodes via the CDM Task Service (CTS).
Overview
CTS runs containerized jobs on remote compute clusters. Two execution paths are available:
| Path | When to use |
|---|---|
| Pre-built tool image | The tool you need is already in the registry (CheckM2, Bakta, GTDB-Tk, etc.) — just pass args |
| Generic ubuntu script | Tool not in registry, or you need custom logic — write a bash script, install deps at runtime |
Always discover the live image registry first before deciding which path to take:
# JupyterHub
tscli = get_task_service_client()
tscli.get_images() # returns list of registered images
# curl (any environment)
AUTH_TOKEN=$(grep "KBASE_AUTH_TOKEN" .env | cut -d'"' -f2)
curl -s -H "Authorization: Bearer $AUTH_TOKEN" \
https://berdl.kbase.us/apis/cts/images | python3 -m json.tool
The registry grows over time — always check live rather than relying on any static list in this document.
When to use remote compute vs JupyterHub:
- JupyterHub: Interactive analysis, Spark SQL queries, exploratory work
- Remote compute: Batch processing, CPU/memory-intensive tools (CheckM2, Bakta, GTDB-Tk), long-running jobs, anything that would block your notebook
Preconditions
KBASE_AUTH_TOKENset in environment or.env- MinIO client (
mc) installed — see berdl-minio skill for installation - Proxy running (when off-cluster) — MinIO is not directly reachable from external networks. See the berdl-query skill's
references/proxy-setup.md. The CTS API itself (https://berdl.kbase.us/apis/cts) does NOT require a proxy — only MinIO data staging does. - CTS access and your S3 paths — run
whoamibefore staging any files. It confirms your role and tells you the exact S3 path prefixes you are allowed to use forinput_filesandoutput_dir. Every example in this skill usescts/io/<username>/...as a placeholder —whoamitells you what to substitute.
# JupyterHub
tscli = get_task_service_client()
tscli.whoami()
# Returns, e.g.:
# {
# "user": "mcashman", ← your username; use this in place of <username>
# "roles": ["cts_user"], ← confirms CTS access; must include "cts_user" or "full_admin"
# "allowed_paths": [
# {"path": "cts/io/mcashman", "perm": "write"}, ← you can read and write here
# {"path": "cts/io/mcashman", "perm": "read"}
# ]
# }
# The "path" values are the S3 prefixes you use for input_files and output_dir.
# Example: input_files=["cts/io/mcashman/input/genome.fna.gz"]
# output_dir="cts/io/mcashman/output/bakta_run"
# curl equivalent
curl -s -H "Authorization: Bearer $AUTH_TOKEN" \
https://berdl.kbase.us/apis/cts/whoami | python3 -m json.tool
If roles is empty or does not include cts_user or full_admin, you do not have CTS access —
ask a CTS admin to grant the cts_user role.
Two Interfaces
Python client — JupyterHub only
tscli = get_task_service_client() # CTS client
minio = get_minio_client() # MinIO client for file staging
REST API (curl) — any environment
All endpoints at https://berdl.kbase.us/apis/cts. Auth via Bearer token:
AUTH_TOKEN=$(grep "KBASE_AUTH_TOKEN" .env | cut -d'"' -f2)
Stage Input Files to MinIO
This step is required for both Path A and Path B. CTS does not read files from your local machine or from the BERDL Lakehouse directly — all input files must be pre-uploaded to MinIO before job submission. Every file must carry a CRC64NVME checksum or the submission will be rejected.
Find your MinIO path prefix
Run tscli.whoami() (see Preconditions) to find your allowed_paths. Your input and output
directories should be nested under the writable path — typically cts/io/<username>/.
Upload with the MinIO CLI (mc)
# Off-cluster only: set proxy so mc can reach MinIO
export https_proxy=http://127.0.0.1:8123
export no_proxy=localhost,127.0.0.1
# Upload a single file with a CRC64NVME checksum
mc cp --checksum crc64nvme genome.fna.gz berdl-minio/cts/io/<username>/input/
# Upload a directory of files (e.g. all .fna.gz in a folder)
mc cp --checksum crc64nvme --recursive ./input_genomes/ berdl-minio/cts/io/<username>/input/
# Verify what was staged
mc ls berdl-minio/cts/io/<username>/input/
The berdl-minio alias must be configured. See the berdl-minio skill for setup instructions.
Upload from Python (JupyterHub)
minio = get_minio_client()
import os
local_file = "genome.fna.gz"
minio_path = f"io/<username>/input/{local_file}" # path within the "cts" bucket
# Upload a file — the MinIO client handles checksums automatically on JupyterHub
minio.fput_object("cts", minio_path, local_file)
print(f"Staged: cts/{minio_path}")
# List staged files to confirm
for obj in minio.list_objects("cts", prefix="io/<username>/input/", recursive=True):
print(obj.object_name, obj.size)
Build your input_files list
After staging, construct the input_files list for submit_job from the staged paths:
# Option 1: list them explicitly
input_files = [
"cts/io/<username>/input/genome1.fna.gz",
"cts/io/<username>/input/genome2.fna.gz",
]
# Option 2: discover from MinIO (useful for large batches)
minio = get_minio_client()
objs = list(minio.list_objects("cts", prefix="io/<username>/input/", recursive=True))
input_files = [f"cts/{o.object_name}" for o in objs]
print(f"{len(input_files)} files staged and ready")
Path A: Pre-built Tool Images
Pre-built images have the tool already installed and set as the container entrypoint. You do not write a bash script — you pass arguments directly to the tool. Some images include large reference databases (refdata) that CTS mounts automatically.
What is refdata?
Some tools require large reference databases (e.g., CheckM2's marker gene sets, GTDB-Tk's genome sketches, Bakta's annotation database). These are pre-staged by the CTS admins and mounted read-only into the container at a fixed path. The image registration records which refdata bundle it needs and where to mount it (default_refdata_mount_point).
You do not pass a refdata_id to submit_job — it is determined by the image. You only need to know the mount path so you can reference it in your args if needed (e.g., --db /ref_data). Most images bake the path into the tool config or environment variables so you do not need to reference it at all — see the per-tool notes below.
If you want to override the default mount point, pass refdata_mount_point="/your/path" inside the params via the Python client's submit_job call. This is rarely needed.
General pattern — pre-built image
tscli = get_task_service_client()
job = tscli.submit_job(
"<image>:<tag>", # full image name from the registry
input_files, # list of MinIO paths: ["cts/io/<user>/input/file1.fna.gz", ...]
"cts/io/<user>/output/run_name", # MinIO output directory (bucket/prefix)
cluster="kbase", # compute site — "kbase" for on-prem KBase hardware
output_mount_point="/out", # path inside the container where the tool must write output;
# CTS copies everything under this path to S3 after the job finishes
args=[...], # arguments appended after the image entrypoint command
num_containers=1, # how many parallel containers to run (see per-tool guidance)
cpus=4, # CPU cores per container
memory="8GB", # RAM per container
runtime="PT30M", # ISO 8601 duration: PT5M=5min, PT1H=1hour, PT2H30M=2.5hours
)
print(f"Job ID: {job.id}") # save this — needed to check status or retrieve results later
Available pre-built images
| Tool | Image name pattern | Refdata | One container per file? | Special notes |
|---|---|---|---|---|
| CheckM2 | cdm_checkm2 | Yes (/ref_data) | No — batch | Auto-imports to Spark table; use declobber=True |
| MMseqs2 | cdm_mmseqs2 | No | No — all-at-once for clustering | Subcommand is first arg |
| KofamScan | cdm_kofamscan | Yes (/ref_data/profiles, /ref_data/ko_list) | No — batch | Must pass profile/ko_list paths explicitly |
| PSORTb | cdm_psortb | No | Yes | num_containers=len(input_files) |
| Bakta | cdm_bakta | Yes (/ref_data/db) | Yes | --force REQUIRED; BAKTA_DB auto-set |
| Bakta proteins | cdm_bakta_proteins | Yes (/ref_data/db) | Yes | --force REQUIRED; BAKTA_DB auto-set |
| GTDB-Tk | cdm_gtdbtk | Yes (/ref_data/release232) | No — always 1 | memory="128GB" minimum; num_containers=1 always |
| Skani | cdm_skani | No | No | Subcommand is first arg |
| Skani GTDB | cdm_skani_gtdb | Yes (/ref_data/release232/skani/database/) | No — batch | Must pass -d path explicitly |
| IQ-TREE 2 | cdm_iqtree | No | No — 1 per alignment | --prefix /out/tree; --redo recommended |
Full per-tool examples, resource guidance, and special notes are in individual reference files under references/. Each tool has its own file named after the image pattern without the cdm_ prefix:
| Tool | Reference file |
|---|---|
| CheckM2 | references/checkm2.md |
| MMseqs2 | references/mmseqs2.md |
| KofamScan | references/kofamscan.md |
| PSORTb | references/psortb.md |
| Bakta | references/bakta.md |
| Bakta proteins | references/bakta_proteins.md |
| GTDB-Tk | references/gtdbtk.md |
| Skani | references/skani.md |
| Skani GTDB | references/skani_gtdb.md |
| IQ-TREE 2 | references/iqtree.md |
Claude should Read only the specific tool's reference file after identifying the user's tool from get_images().
Path B: Generic Ubuntu Script
Use this path wh
Content truncated.
When not to use it
- →When performing interactive analysis or exploratory work on JupyterHub
- →When the `KBASE_AUTH_TOKEN` is not set
- →When the MinIO client (`mc`) is not installed
Prerequisites
Limitations
- →All input files must be pre-uploaded to MinIO before job submission
- →Every file must carry a CRC64NVME checksum
- →MinIO is not directly reachable from external networks without a proxy
How it compares
This skill offloads CPU/memory-intensive tasks to remote compute nodes, providing dedicated resources and batch processing capabilities, unlike running them locally on a notebook.
Compared to similar skills
remote-compute side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| remote-compute (this skill) | 0 | 19d | Caution | Advanced |
| azure-functions | 10 | 4mo | Review | Intermediate |
| bouffalo-sdk | 1 | 4mo | Review | Intermediate |
| domain-iot | 1 | 6mo | No flags | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
azure-functions
aj-geddes
Create serverless functions on Azure with triggers, bindings, authentication, and monitoring. Use for event-driven computing without managing infrastructure.
bouffalo-sdk
bouffalolab
Bouffalo SDK开发指南,提供完整的Bouffalo芯片系列开发文档和参考资料。当需要使用bouffalo_sdk开发IoT/MCU应用、了解SDK架构、配置构建系统、使用外设驱动、开发无线功能、管理电源、调试固件时使用此skill。
domain-iot
actionbook
Use when building IoT apps. Keywords: IoT, Internet of Things, sensor, MQTT, device, edge computing, telemetry, actuator, smart home, gateway, protocol, 物联网, 传感器, 边缘计算, 智能家居
rsyslog-module
rsyslog
Encodes technical requirements for rsyslog modules, including concurrency, metadata, and initialization.
azure-eventhub-py
microsoft
Azure Event Hubs SDK for Python streaming. Use for high-throughput event ingestion, producers, consumers, and checkpointing. Triggers: "event hubs", "EventHubProducerClient", "EventHubConsumerClient", "streaming", "partitions".
go-agent-development
TencentBlueKing
Go Agent 开发指南,涵盖 Agent 架构设计、心跳机制、任务执行、日志上报、升级流程、与 Dispatch 模块交互。当用户开发构建机 Agent、实现任务执行逻辑、处理 Agent 通信或进行 Go 语言开发时使用。