Instructions to use jpanasuk/basecamp with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- HERMES
How to use jpanasuk/basecamp with HERMES:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
ποΈ Basecamp β The First Portable AI Agent Container with Network Auto-Discovery
v1.0.2 β the stack-gauntlet release (tested against a live 6-service AI stack):
- TabbyAPI + SillyTavern now discovered β auth-gated services (401/403)
are fingerprinted and listed as
[needs auth]so the connect screen can prompt for keys (previously invisible) - Fixed hermes v0.20 wiring β named custom provider (
providers.basecamp) with inline API key, sidestepping the #28660 security gate that blocks env keys for LAN endpoints; reasoning-effort turned off (local engines reject thinking params with HTTP 400); stale context probes cleared - Ollama preferred for auto-select β hermes hard-requires β₯64K context, so headless mode picks an Ollama endpoint; OpenAI-compatible engines (TabbyAPI, vLLM) are still listed for interactive choice
- SearXNG probed via its fast static page β no more slow search-query probe losing the boot race
v1.0.1 β rebuilt on the official Hermes installer (the old pip3 install hermes-cli stub is gone), leaked-key fallback removed from tavern.sh, and
the git history scrubbed of both. Build from source below.
One image. One command. It finds your AI stack and just works.
Basecamp bundles Hermes Agent (the full agent β tools, skills, memory,
gateway) + Ollama (a brain it always has in its backpack), then does
something nobody else's container does: it sniffs your network on first
boot and auto-discovers your entire local AI stack β Ollama, TabbyAPI,
vLLM, LiteLLM, LocalAI, llama.cpp, SearXNG, MCPO, Open WebUI, SillyTavern β
and connects Hermes to the best brain it finds. No hardcoded URLs. No config
files to hand-edit. Just docker run.
Why this is different
| Everyone else | Basecamp |
|---|---|
| Manual compose file, hand-wired URLs | Auto-discovers your stack on first boot |
| One hardcoded provider | Picks the best brain it finds, falls back to its own Ollama |
| Agent config touches your host install | Container-only, env-scoped, cannot clobber a host Hermes |
| Separate agent + separate model server | One image, both inside, batteries included |
Safety model (read this first)
Basecamp is container-only and is designed so it can never damage a Hermes install on the host that runs it:
- No writes into any Hermes home it doesn't own. Hermes runtime config
(provider URL, key, model) is passed as environment variables, sourced
from
basecamp.env(chmod 600) atexectime. Basecamp never overwritesconfig.yamlor.envfiles β not in the container, and certainly not on the host. - State lives in named volumes only.
basecamp-hermesβ/root/.hermesandbasecamp-ollamaβ/root/.ollamainside the container. Nothing on the host is modified by running basecamp. - No secrets in the image. API keys are collected at the connect screen,
saved chmod 600 inside the volume, and injected into the dynamically
generated
tavernCLI. The static fallbacktavern.shships with empty key placeholders. - Hermes is installed with the official installer, never
pip install hermes-cli(that PyPI package is an unrelated stub, not Hermes Agent).
Quick start
# Option A: pull the prebuilt image (Docker Hub)
docker pull jpanasuk/basecamp:1.0.2
# Option B: build from source
docker build -t local/basecamp:latest .
# Run against your AI docker network (named volumes keep state across runs)
docker run -it --rm \
--name basecamp \
--network your-ai-network \
--gpus all \
-p 11436:11434 \
-v basecamp-ollama:/root/.ollama \
-v basecamp-hermes:/root/.hermes \
jpanasuk/basecamp:1.0.2
Or use the convenience launcher (auto-detects network + GPU, TTY-safe):
./basecamp.sh
First run shows the connect screen: pick your inference engine, enter API keys when prompted. Later runs skip it β config is saved in the volume.
What it discovers
| Service | What Basecamp does with it |
|---|---|
| Ollama | Primary/secondary brain, lists available models |
| TabbyAPI / vLLM / LiteLLM / LocalAI / llama.cpp | Primary inference engine (OpenAI-compatible) |
| SearXNG | Wires search into the agent + tavern CLI |
| MCPO | Exposes MCP tools to the agent |
| Open WebUI / SillyTavern | Detects your chat UIs, reports them |
Inside the container
| Command | What it does |
|---|---|
tavern status |
Show connected services |
tavern chat "hi" |
Chat with your primary inference (streaming) |
tavern models |
List available models |
tavern search "q" |
Search via discovered SearXNG |
tavern mcp |
List/call discovered MCP tools |
tavern rediscover |
Re-scan for services |
hermes |
The Hermes Agent CLI, pointed at your stack |
ollama |
Manage basecamp's bundled Ollama |
Layout
basecamp/
βββ Dockerfile # ubuntu:22.04 + Ollama + Hermes (official installer)
βββ discover.py # network scan, connect screen, tavern generator
βββ tavern.sh # static fallback CLI (no secrets)
βββ entrypoint.sh # first-run connect screen, env-scoped hermes config
βββ basecamp.sh # host-side launcher (docker only β never touches host config)
βββ supervisord.conf # Ollama only (hermes is exec'd, not supervised)
Development notes
- Test discovery locally without touching anything:
BASECAMP_CONFIG=/tmp/bc.json BASECAMP_DISCOVERY=/tmp/bc-disc.json BASECAMP_ENV_FILE=/tmp/bc.env python3 discover.py serve discover.pyis container-only by design. It writes only to paths given byBASECAMP_CONFIG/BASECAMP_DISCOVERY/BASECAMP_ENV_FILE(defaults are under/root/.hermes//opt/basecampinside the container).- If a secret ever leaks into this repo: rotate it, then scrub git history before publishing.