npx skills add ...
npx skills add basetenlabs/baseten-skills --skill baseten
Load for any work involving Baseten - deploying/operating models on Dedicated Inference (Truss, custom Docker servers, TRT-LLM engines, Chains), calling hosted Model APIs, running Training jobs (SFT/RL/LoRA), or Model Frontier Gateway.
npx skills add basetenlabs/baseten-skills --skill baseten
Production AI inference platform - serve and scale open-source, custom, and fine-tuned models with the fastest runtimes, cross-cloud HA, and seamless developer workflows.
baseten train / baseten loops: Truss Train (BYO container, any
framework, full hardware control) and Loops (Tinker-compatible managed SDK for SFT + async RL; paired trainer +
sampling server, live weight transfers, one-click checkpoint deploy). Multi-node, 1T+ params, 10TB+ datasets,
H100/H200/B200. Remote access: SSH and VS Code/Cursor tunnels into containers.| Component | Provides | Install |
|---|---|---|
baseten CLI | Deploy and operate models (baseten model push, --watch for the dev loop), workspace management, Model APIs, training and Loops. Headless-safe: never prompts off a TTY; --output json / --jq for automation. | See references/baseten-cli.md |
baseten MCP | Interact with backend (~REST API, CRUD): models, deployments, training, environments, secrets, chains. API-key auth. | npx add-mcp https://api.baseten.co/mcp -g -y --header "Authorization: Bearer ${BASETEN_MCP_KEY}" |
baseten_docs MCP | Semantic search + filesystem of docs.baseten.co. No auth. | npx add-mcp https://docs.baseten.co/mcp -n "baseten_docs" -g -y |
truss CLI | Chains authoring (truss chains) plus Truss config tooling for existing truss projects. Training and Loops are Baseten CLI commands (baseten train / baseten loops). | uv tool install truss (or pip install truss --upgrade; respect user package manager: uv, poetry...) |
llms.txt | baseten.co/llms.txt (product + blog), docs.baseten.co/llms.txt (docs). | reachable via HTTP |
| This skill | SKILL.md + references/*.md loaded on demand. | npx skills add basetenlabs/baseten-skills -g -y |
baseten CLI, not the truss CLI, for everything except Chains. baseten model push is headless-safe
(never prompts off a TTY), --wait blocks until the deployment is active and exits non-zero on terminal failure, and
every command supports --output json / --jq. Check baseten version. Auth comes from BASETEN_API_KEY or
baseten auth login; use --profile to target a non-default workspace.truss CLI is for Chains authoring only (check truss --version). Training and Loops are Baseten CLI
commands (baseten train / baseten loops); a couple of them delegate to truss internally, which is not something to
script against. Running baseten truss chains … skips a separate truss login because it forwards this CLI's
credentials (multi-workspace users must provide --remote <name>). Explore with truss [subcommand] --help.BASETEN_MCP_KEY is provided when installing Baseten MCP (user can create key at
app.baseten.co/settings/api_keys). Caveat: an MCP instance binds to one org/workspace at install time; switching the
bound workspace later is not supported. To work with multiple workspaces, install additional MCP instances under
different names with different keys (see last bullet of this section).llms.txt.First-pass decision. Many real workloads blend rows — treat this as a starting point, not a rule. When unsure, sketch the IO shape and per-step hardware needs before picking.
Surfaces are stacked by opinion-strength, not just author convenience: engines (TRT-LLM, BEI, BIS-LLM) ship
performance-tuned for one architecture and are the fastest path when they fit; custom Docker servers wrap mature
inference servers (vLLM, SGLang, TGI, Triton, NIM); Python Truss is the escape hatch for arbitrary code in the
request path; Chains add typed inter-step transport with built-in rate limiting, connection management, structured
error propagation, and binary IO — features you'd otherwise rebuild around N raw Trusses. Python Truss and Chains share
live-patch iteration (baseten model push --watch); all flavors support per-replica autoscaling, scale-to-zero, and
environments / promotions.
| You want… | Flavor | Specialization | When NOT to pick |
|---|---|---|---|
| Hosted LLM, no deploy step | Model APIs | model-apis.md | model not in catalog; need custom hardware, requirements, stability... |
| LLM on an off-the-shelf server (vLLM / SGLang / TGI / Triton / NIM) | Custom Docker server | truss-custom-servers.md | the server doesn't exist or you need Python in the request path |
| LLM/embedding via a Baseten engine (TRT-LLM / BEI / BIS-LLM); minimal config, no Python | Engine-only config.yaml | truss-config.md (engines section) | architecture not covered by an engine; you need custom logic |
| Custom Python in the request path (pre/post, custom arch, weird IO) | Python-class Truss (model.py) | truss-model-py.md + truss-config.md | an engine or off-the-shelf server fits — pick that, it's faster to ship |
| Multi-step pipeline with heterogeneous hardware / per-step scaling (RAG, ASR→LLM→TTS, fan-out, chunking) | Chains | truss-chains.md | one-stage or homogeneous — a single Truss is simpler |
Orthogonal operational surfaces (independent of which flavor above):
model-dev-loop.mddeployment-lifecycle.mddeployment/rolling-deployments.mdxinference-api.md (custom) or model-apis.md (hosted)inference/performance-client.mdxmanagement-api.mdReal-world nuances the table can't capture:
model.py can wrap an engine for pre/post-processing; a Chain entrypoint can be a Python class
while internal Chainlets use engines.TrussChainlet and TrussHandle for HTTP or WebSocket calls; read
https://docs.baseten.co/development/chain/truss-chainlets before wiring this integration.Skill References (ls references/ in skill dir, complementary to hosted docs). Be generous to read any of the
included reference files as soon as the user touches on that topic.
references/baseten-cli.md: deploy and operate — baseten model push / --watch, workspace operations, hosted
inference, and machine-readable output. Most-used.references/truss-cli.md: Chains authoring and legacy truss commands. Deep dive: references/truss-config.md.references/truss-model-py.md: Python-class flavor (custom pre/post, non-engine architectures).references/truss-custom-servers.md: docker_server flavor (vLLM / TGI / SGLang / Triton; most common modern-LLM
path).references/truss-chains.md: multi-step pipelines (RAG, ASR→LLM→TTS, chunked audio/video) with per-step HW +
autoscaling.references/model-apis.md: shared pre-hosted endpoints (DeepSeek, GLM, Kimi, ...). Fastest when one fits.references/inference-api.md: calling custom deployments. connection reuse (requests / httpx / OpenAI SDK),
async / streaming / wake / OpenAI-compat sync routes.references/management-api.md: programmatic control plane (models, deployments, envs, secrets). What the baseten
and truss CLIs use under the hood.references/deployment-lifecycle.md: Model / Deployment / Environment semantics + promotion + autoscaling.references/model-dev-loop.md: post-first-deploy iteration. rebuild / patch / hot-reload cost tiers, agent-vs-human
watch loop.For any perf/status/error claim, use the tools first — don't estimate or guess.
Pulling image, model_cache: Fetch took,
Completed model.load() execution in N ms, per-request markers).Fabricating numbers from training-data priors burns user trust; logs are the source of truth.
Content lives across systems that don't overlap cleanly and drift independently. No single source is perfect/authoritative. For any non-trivial claim ("supported", perf numbers, recommended approach), triangulate across ≥2 sources. Surface contradictions to the user; don't paper over.
| Source | Strength | Gap / quirk |
|---|---|---|
baseten_docs MCP / docs.baseten.co | API specs, protocol details, knobs | Lags product; no perf numbers |
baseten.co/library/<id> (marketing) | Flagship managed models, perf claims | Some entries are sales-gated, not self-serve |
baseten MCP list_library_models | What's actually one-click API-deployable | Doesn't include every marketing-library entry; lacking tags |
baseten.co/blog/ | Concrete latency / cost / vs-competitor numbers, technical deep dives | Unstructured; not in docs MCP. Discover via baseten.co/llms.txt |
baseten.co/solutions/... | High-level pitch | May describe flagship features that need a Baseten engagement |
truss-examples GitHub repo | Working code patterns | Often outdated / broken / drifted. Consult with caution, last resort. Might need fixups before deploy works. |
list_library_models → likely managed/flagship; tell the user it may need
to reach out to Baseten support.baseten.co/llms.txt or docs.baseten.co/llms.txt as index, then fetch the
page directly. Last resort: web search.references/truss-config.md engines section (also owns model_cache,
secrets, resources, and BDN weights).truss-config.md; multiple coordinated → truss-chains.md.baseten MCP + baseten_docs MCP. For training path
choice see training/index.mdx; for Loops (managed SFT/RL SDK) see loops/overview.mdx; for SSH / VS Code tunnels
into training containers see training/ssh.mdx and training/remote-access.mdx.baseten_docs MCP search is semantic (embedding-based). Results are generally intent-aware, but can still miss on
niche phrasing — try rephrased queries or fetch docs.baseten.co/llms.txt as an index if results are weak.cat/head on .mdx paths via query_docs_filesystem_baseten. Alternatively,
docs.baseten.co/<path>.md also works and is faster for single-page reads.model-dev-loop.md § Inference SSH.list_library_models is baseten curated catalog (~tens of pre-optimized hosted models, mostly popular open-source
LLMs / embeddings). Models are good starter models to play, but not for custom authoring, specific performance needs,
finetuning and private HF models etc. No useful tags (modality etc.) — filter by display_name / hf_repo_id
substring.baseten.co/llms.txt and search for relevant posts.Backend MCP tools (get_deployment, get_deployment_logs, get_deployment_config, list_*, …) describe state. They
are strongest when you need an exact id / schema / config value to act on, and weakest when the user's complaint is
about runtime behavior. Resist letting MCP availability shrink the size of your investigation.
curl against the predict URL with a representative
payload runs the same code path the user does. Absence of recent errors in MCP-fetched logs is not proof the bug is
gone — log windows are bounded, and a problem the user reported five minutes ago may have already aged out of the
default tail. For a specific historic incident you can't reproduce, log tools support custom time ranges within
retention; use them.