Shared runtime for the HPC MCP agent family: SSH middleware, PSI/J-style job models, scheduler backends, docs RAG, doctor, and serving, reused across per-machine plugins (Rikyu, HOKUSAI, Octopus, ...).
Project description
hpc-agent-core
Shared runtime for the HPC MCP agent family — the Claude Code / Codex plugins that let an agent submit and monitor Slurm/Grid Engine jobs, manage files, and search documentation on a supercomputer (Rikyu, HOKUSAI BigWaterfall2, Octopus, R-CCS Cloud, TSUBAME4, and others).
Each of those plugins used to be a full copy-pasted fork of the same
template. This package extracts the parts that were already generic in
practice — SSH middleware, PSI/J-style job models, scheduler backends, the
docs RAG pipeline, health checks (doctor), and the MCP serving glue — so a
machine repo becomes a thin "skin": its own <machine>_config.json, a
hand-written guide, skills, and packaging, depending on this package for
everything else.
See PLAN.md in the merge_computers workspace for the full
design rationale and migration plan. This repo implements that plan's Phase
1 (extract the generic modules) — it is not yet a drop-in replacement
for any machine repo's server code; nothing currently depends on it yet.
What's here (Phase 1)
config.py— generic env/file/default settings resolution. A machine's ownconfig.pycallshpc_agent_core.config.configure(...)once to register its SSH default, embedding endpoint, docs source, and (optionally) anyremotemanager.Computeroption it needs to differ from the shared defaults (computer_defaults={...}— seeCOMPUTER_OPTION_NAMESfor the full supported set: shell, timeout, keyfile, landing_dir, transport, ...). A machine sets these once in its own repo; the end user never has to.middleware.py— the SSH execution layer (base64 payloads, login shell, clean error surfacing). Never touches config or the network above module scope — the MCP server must never fail to start just because config is missing (see PORTING.md's invariant in every machine repo).models.py— PSI/J-styleJobSpec/ResourceSpec/JobAttributes/Job/JobState, with no per-machine defaults baked in. AlsoScheduler(an optional hint field for a machine that composes more than oneSchedulerBackend) andmap_ge_statefor Grid Engine.compute/base.py— theSchedulerBackendABC and scheduler-neutral script-body rendering (env vars, container wrapping, launcher prefix).compute/slurm.py— a config-driven Slurm backend:has_accounting(sacct vs. squeue+scontrol),gpu_request_style("gpus_total"vs."gres") and the independentnodes_always_explicit(whether Slurm derives node count from the GPU count, or--nodesis always emitted — these two don't always move together, seePHASE4_AUDIT.md§1.1),no_gpu_flag_prefixes(partitions needing no GPU flag at all, e.g. a unified CPU+GPU superchip), andgpu_vendor_map(container GPU flag by partition prefix). Verified against Rikyu's, Octopus's, and RCCS-Cloud's actual rendered scripts. Thehas_accounting=Falsepath (Banyan/Dgx1-style) is implemented from the porting knowledge-transfer reports and passes a mocked end-to-end test, but is not yet verified against a real no-accounting cluster — see the module docstring before trusting it on a live machine. Also providesget_live_resources()/get_drained_nodes()(live per-partition occupancy viasinfo) — a machine'sget_resourcestool should call this rather than returning static config data, a real gap the first clean-room port using this guide found in practice.compute/gridengine.py— a Grid Engine backend (qsub/qstat/qacct/qdel), promoted from shinobulab-cell-cluster-mcp (the only GE machine so far) and verified to reproduce its exact rendered scripts.host_pins/queue_aliases/default_queuegeneralize its host-pinning quirk into config, since it's a plausible shape for other small GE clusters, not a one-off. Live-tested as part of shinobulab-cell-cluster-mcp; not yet re-verified from this promoted copy against a real cluster.rag/— embedding client, BM25 + vector docs index, and an ingest pipeline that only ever chunks a bundled local guide (never clones a remote docs site — see the module docstring for why).docs_server.py,doctor.py,serving.py— generic MCP docs server, health checks, and CLI entry point.
What's deliberately not here yet
hpc_server.py(the IRI-grouped Slurm/filesystem tool surface) and amachine_profile.pythat turns<machine>_config.jsoninto config-driven scheduler dispatch — a machine currently wires aSlurmBackend/GridEngineBackendby hand in its owncompute.py; that's a deliberate choice (PLAN.md §2a/§2b), not a placeholder for a missing feature.- Repointing any machine repo at this package as a dependency.
Development
python3 -m venv .venv && .venv/bin/pip install -e .
No machine repo depends on this yet, so there isn't a meaningful smoke test to run standalone — validate changes against a machine repo once one is repointed here.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hpc_agent_core-0.4.5.tar.gz.
File metadata
- Download URL: hpc_agent_core-0.4.5.tar.gz
- Upload date:
- Size: 37.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b44760d130fbfa8760df3b44ef0f5fda8ecaa3397a3be4ffd1b1c531ec417a5
|
|
| MD5 |
848a4191b76c6a10217e6fe7e3384da3
|
|
| BLAKE2b-256 |
24c1f1bc04c155e78ddb43b9cce41222606d4db9b4813699d5c90fd03ea64712
|
Provenance
The following attestation bundles were made for hpc_agent_core-0.4.5.tar.gz:
Publisher:
publish.yml on william-dawson/hpc-agent-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hpc_agent_core-0.4.5.tar.gz -
Subject digest:
5b44760d130fbfa8760df3b44ef0f5fda8ecaa3397a3be4ffd1b1c531ec417a5 - Sigstore transparency entry: 2280185850
- Sigstore integration time:
-
Permalink:
william-dawson/hpc-agent-core@1e69e55559bb91dd377b55fd8923692a4b4a6135 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/william-dawson
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1e69e55559bb91dd377b55fd8923692a4b4a6135 -
Trigger Event:
release
-
Statement type:
File details
Details for the file hpc_agent_core-0.4.5-py3-none-any.whl.
File metadata
- Download URL: hpc_agent_core-0.4.5-py3-none-any.whl
- Upload date:
- Size: 41.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f125f5cf245e9edb47cdd9a18c0e35ebb4001df869a83d7ade8d6f2a0ee6a324
|
|
| MD5 |
f87ee5ee9cc268449013d8165dabc9a8
|
|
| BLAKE2b-256 |
2bdefdb0409b805084c783fd4546f1184d1f706ab06f33b5ef8054c1b14821a9
|
Provenance
The following attestation bundles were made for hpc_agent_core-0.4.5-py3-none-any.whl:
Publisher:
publish.yml on william-dawson/hpc-agent-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hpc_agent_core-0.4.5-py3-none-any.whl -
Subject digest:
f125f5cf245e9edb47cdd9a18c0e35ebb4001df869a83d7ade8d6f2a0ee6a324 - Sigstore transparency entry: 2280185886
- Sigstore integration time:
-
Permalink:
william-dawson/hpc-agent-core@1e69e55559bb91dd377b55fd8923692a4b4a6135 -
Branch / Tag:
refs/tags/v0.4.5 - Owner: https://github.com/william-dawson
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1e69e55559bb91dd377b55fd8923692a4b4a6135 -
Trigger Event:
release
-
Statement type: