Context
We need to get NRP and Claude model access working in the CryoCloud 2i2c-based JupyterHub config, similar to what's already working for NRP via opencode in the BIDS system, and eventually reaching parity in functionality with Scott Henderson's UW eScience CloudBank setup for Claude/Jupyter-AI, but ideally in a more user friendly way. We will also want to add more functionality and Carl's image below is a place where we can get an idea of how that works. We also need to figure out how we add agentic tooling on the fly and via the image in the best ways possible for developers and for users.
Current image: quay.io/cryointhecloud/cryo-python-ai:b5d1e91aaa4f
Reference image (Scott's, working): ghcr.io/uw-escience-cloudbank/hub-image-jupyterai:latest
Carl's Reference GeoAgent image for more advance things: ghcr.io/geojupyter/jupyter-geoagent:sha-301d9b1
NRP (mostly working pattern, but not yet installed on CryoCloud)
Claude (not working great yet)
- Logging into Claude via terminal needs to connect it to Jupyter-AI
- Workshop will need per-user CloudBank keys for Claude
- @scottyhq approach: each user manually drops a
~/.claude/settings.json file with their per-user, short-lived token (works locally, in Claude CLI, and in the VS Code Claude extension). Not a great UX but functional.
- Question for the group: is there a way to do this more like the NRP setup (baked into the 2i2c config / image) rather than each user manually creating
settings.json?
Scott's working ~/.claude/settings.json example
{
"env": {
"ANTHROPIC_BASE_URL": "https://cloudbank-litellm.westus2.cloudapp.azure.com",
"ANTHROPIC_API_KEY": "<per-user token>",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5",
"ANTHROPIC_MODEL": "haiku"
},
"availableModels": ["haiku", "sonnet", "opus"],
"enforceAvailableModels": true,
"theme": "auto"
}
Tasks
Open questions
- How do we add MCP, skills, etc. on the fly AND via the image?
- Can CloudBank key provisioning per user be automated the same way NRP's key is being added centrally, or does it inherently need to be per-user/short-lived (and therefore harder to bake into a shared image)?
Context
We need to get NRP and Claude model access working in the CryoCloud 2i2c-based JupyterHub config, similar to what's already working for NRP via
opencodein the BIDS system, and eventually reaching parity in functionality with Scott Henderson's UW eScience CloudBank setup for Claude/Jupyter-AI, but ideally in a more user friendly way. We will also want to add more functionality and Carl's image below is a place where we can get an idea of how that works. We also need to figure out how we add agentic tooling on the fly and via the image in the best ways possible for developers and for users.Current image:
quay.io/cryointhecloud/cryo-python-ai:b5d1e91aaa4fReference image (Scott's, working):
ghcr.io/uw-escience-cloudbank/hub-image-jupyterai:latestCarl's Reference GeoAgent image for more advance things:
ghcr.io/geojupyter/jupyter-geoagent:sha-301d9b1NRP (mostly working pattern, but not yet installed on CryoCloud)
Claude (not working great yet)
~/.claude/settings.jsonfile with their per-user, short-lived token (works locally, in Claude CLI, and in the VS Code Claude extension). Not a great UX but functional.settings.json?Scott's working
~/.claude/settings.jsonexample{ "env": { "ANTHROPIC_BASE_URL": "https://cloudbank-litellm.westus2.cloudapp.azure.com", "ANTHROPIC_API_KEY": "<per-user token>", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5", "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5", "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5", "ANTHROPIC_MODEL": "haiku" }, "availableModels": ["haiku", "sonnet", "opus"], "enforceAvailableModels": true, "theme": "auto" }Tasks
npm install -g @agentclientprotocol/claude-agent-acp?)~/.claude/settings.json(Scott's current approach) vs. baking config into the 2i2c hub config/image (like NRP/opencode)Open questions