From bohrium-skills
Manage Bohrium container images via bohr CLI or open.bohrium.com API. Use when: user asks about listing/pulling/creating/deleting Docker images on Bohrium, or finding available public images. NOT for: node management, job submission, or project management.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bohrium-skills:bohrium-imageThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manage container images on the Bohrium platform. **Prefer `bohr` CLI**; fall back to the API for Dockerfile builds and version search.
Manage container images on the Bohrium platform. Prefer bohr CLI; fall back to the API for Dockerfile builds and version search.
Since 2023, Bohrium no longer supports VM jobs — container images are required.
"bohrium-image": {
"enabled": true,
"apiKey": "YOUR_BOHR_ACCESS_KEY",
"env": { "BOHR_ACCESS_KEY": "YOUR_BOHR_ACCESS_KEY" }
}
Only configure BOHR_ACCESS_KEY for this skill. Helper scripts handle any legacy CLI compatibility internally.
# macOS
/bin/bash -c "$(curl -fsSL https://dp-public.oss-cn-beijing.aliyuncs.com/bohrctl/1.0.0/install_bohr_mac_curl.sh)"
# Linux
/bin/bash -c "$(curl -fsSL https://dp-public.oss-cn-beijing.aliyuncs.com/bohrctl/1.0.0/install_bohr_linux_curl.sh)"
source ~/.bashrc && export PATH="$HOME/.bohrium:$PATH"
bohr image list # Custom images (table)
bohr image list --json # JSON
# Public images by type
bohr image list -t "Basic Image"
bohr image list -t "DeePMD-kit"
bohr image list -t "LAMMPS"
bohr image list -t "ABACUS"
bohr image list -t "CP2K"
bohr image list -t "GROMACS"
bohr image list -t "Uni-Mol"
JSON fields: imageId, name, url, status (available/building), creatorName
| Scenario | Image |
|---|---|
| CPU | registry.dp.tech/dptech/ubuntu:20.04-py3.10 |
| CPU + Intel MPI | registry.dp.tech/dptech/ubuntu:20.04-py3.10-intel2022 |
| GPU | registry.dp.tech/dptech/ubuntu:20.04-py3.10-cuda11.6 |
| GPU + Intel MPI | registry.dp.tech/dptech/ubuntu:20.04-py3.10-intel2022-cuda11.6 |
| Software | Image |
|---|---|
| DeePMD-kit | registry.dp.tech/dptech/deepmd-kit:2.1.5-cuda11.6 |
| DPGEN | registry.dp.tech/dptech/dpgen:0.10.6 |
| LAMMPS | registry.dp.tech/dptech/lammps:29Sep2021 |
| GROMACS | registry.dp.tech/dptech/gromacs:2022.2 |
| Quantum-Espresso | registry.dp.tech/dptech/quantum-espresso:7.1 |
| CP2K | registry.dp.tech/dptech/cp2k:7.1 |
| ABACUS | registry.dp.tech/dptech/abacus:3.0.0 |
| Category | Software |
|---|---|
| Python | python3.10, pip, Anaconda, Jupyter Lab |
| File tools | wget, curl, unzip, rsync, tree, git |
| Editors | emacs, vim |
| Build tools | cmake, build-essential (GNU) |
| Monitoring | htop, ncdu, net-tools |
| DP tools | Bohrium CLI, DP-Dispatcher, dpdata |
| VM Image | Container Image |
|---|---|
LBG_DeePMD-kit_2.1.4_v1 | registry.dp.tech/dptech/deepmd-kit:2.1.5-cuda11.6 |
LBG_DP-GEN_0.10.6_v3 | registry.dp.tech/dptech/dpgen:0.10.6 |
LBG_LAMMPS_stable_23Jun2022_v1 | registry.dp.tech/dptech/lammps:29Sep2021 |
gromacs-dp:2020.2 | registry.dp.tech/dptech/gromacs:2022.2 |
LBG_Quantum-Espresso_7.1 | registry.dp.tech/dptech/quantum-espresso:7.1 |
LBG_Common_v1/v2 | registry.dp.tech/dptech/ubuntu:20.04-py3.10-cuda11.6 |
LBG_oneapi_2021_v1 | registry.dp.tech/dptech/ubuntu:20.04-py3.10-intel2022-cuda11.6 |
bohr image pull registry.dp.tech/dptech/deepmd-kit:3.0.0b3-cuda12.1
Requires Docker running locally. Only public and your own custom images are supported.
Replace domain with registry.bohrium.dp.tech (not registry.dp.tech):
docker login registry.bohrium.dp.tech
docker pull registry.bohrium.dp.tech/dptech/ubuntu:22.04-py3.10-intel2022
# Push is not supported
bohr image delete 121510
bohr image delete 121510 121395 # Batch
| Scenario | Details |
|---|---|
| Public images | Persistent cache; no extra pull time |
| New custom images | Cache builds in 10-30 min; wait before using |
| Unused 30 days | Cache expires; re-pull on next use |
| With cache | CPU ~20s boot, GPU ~40s boot |
| Without cache | +10-30 min for image pull |
import os, requests
AK = os.environ.get("BOHR_ACCESS_KEY", "")
HEADERS = {"Authorization": f"Bearer {AK}"}
r = requests.get("https://open.bohrium.com/openapi/v2/image/public/version/search",
headers=HEADERS, params={"keyword": "deepmd", "page": 1, "pageSize": 5})
# Returns: {items: [{version, resourceType, size, url, imageName}, ...]}
r = requests.get("https://open.bohrium.com/openapi/v2/image/public",
headers=HEADERS, params={"page": 1, "pageSize": 10})
r = requests.get(f"https://open.bohrium.com/openapi/v2/image/public/{image_id}/version",
headers=HEADERS, params={"page": 1, "pageSize": 10})
HEADERS_JSON = {**HEADERS, "Content-Type": "application/json"}
# Note: dockerfile field must be base64-encoded
import base64
dockerfile_content = "FROM ubuntu:22.04\nRUN apt-get update && apt-get install -y python3"
dockerfile_b64 = base64.b64encode(dockerfile_content.encode()).decode()
r = requests.post("https://open.bohrium.com/openapi/v2/image/private",
headers=HEADERS_JSON, json={
"name": "my-image", "projectId": 154, "device": "container",
"desc": "Custom training image", "buildType": 1,
"dockerfile": dockerfile_b64,
})
# Update image description
requests.put(f"https://open.bohrium.com/openapi/v2/image/private/{image_id}",
headers=HEADERS_JSON, json={"desc": "updated"})
# Validate Dockerfile (also requires base64)
check_b64 = base64.b64encode(b"FROM ubuntu:22.04\nRUN apt-get update").decode()
requests.post("https://open.bohrium.com/openapi/v2/image/dockerfile/check",
headers=HEADERS_JSON, json={"dockerfile": check_b64})
# Get the last used image
r = requests.get("https://open.bohrium.com/openapi/v2/image/last_used",
headers=HEADERS, params={"type": "public"})
# List (must include device and type parameters)
r = requests.get("https://open.bohrium.com/openapi/v2/image/private",
headers=HEADERS, params={"device": "container", "type": "private", "page": 1, "pageSize": 10})
# Returns: {items: [{id, name, url, status, buildType, creatorName, projectName, ...}]}
# Private image detail
r = requests.get(f"https://open.bohrium.com/openapi/v2/image/private/{image_id}",
headers=HEADERS)
# Share / unshare
requests.post(f"https://open.bohrium.com/openapi/v2/image/{image_id}/share", headers=HEADERS_JSON)
requests.delete(f"https://open.bohrium.com/openapi/v2/image/{image_id}/share?device=container", headers=HEADERS)
After installing software on a container node, save the environment as a custom image via the Bohrium web UI. Only the system disk is saved; /personal and /share are excluded.
| Resource | Limit |
|---|---|
| Custom images | 10 per project |
| Endpoint | Version | Reason |
|---|---|---|
GET v1/image/public | v1 | Caught by /:imageId route |
GET v1/image/private | v1 | Same |
POST v2/image/version/add | v2 | Not registered |
DELETE v2/image/version/{versionId} | v2 | Not registered |
| Problem | Cause | Solution |
|---|---|---|
bohr image pull fails | Docker not running | Start Docker Desktop |
| v2 private param error | Missing required params | Add device=container&type=private parameters |
no permission | Not image creator | Can only manage own images |
v1 /public parse error | Route conflict | Use v2 endpoints |
| Wrong image address | Used name, not full URL | Must use registry.dp.tech/dptech/xxx:tag |
| Slow custom image cache | Cache takes 10-30 min | Wait 30 min after build |
| No Docker in container | Security restriction | Use VM image LBG_Common_v2 |
| Create returns decode err | dockerfile not base64 encoded | Use base64.b64encode(content.encode()).decode() |
npx claudepluginhub dptech-corp/bohrium-skills --plugin bohrium-skillsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.