agentleFS
brevdevbrevdev/workshop-build-an-agent/.agents/skills/setup-workshop/SKILL.md

setup-workshop

Skill156 starsChanged 6 days agoApache-2.0View on GitHub

This skill should be used when the user wants to set up, install, deploy, bootstrap, or "spin up" the Build-an-Agent workshop (a.k.a. the DevX / DevX-Lab workshop) on local hardware, or says things like "run the workshop locally", "get DevX-Lab running in my browser", "install the workshop on my GPU box", "set up the build-an-agent workshop", or "reproduce the Brev workshop deployment locally". It installs NVIDIA AI Workbench (if needed), clones and builds the project, supplies API keys, configures the GPU/host mounts, starts the DevX-Lab JupyterLab app, and hands back a browser URL. For a local Linux NVIDIA GPU machine — not for provisioning Brev cloud instances, and NOT for locked-down OpenShell/NemoClaw sandboxes (no sudo/Docker/GPU there — use setup-workshop-nemoclaw inside the sandbox, or setup-workshop-nemoclaw-operator on its host).

  • Reads credentials

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 1 is distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use on a local Linux host with an NVIDIA GPU (x86_64 or aarch64).

    line 26
  2. Very specific:

    Run scripts/preflight.sh. It is read-only and prints PASS/WARN/FAIL with a verdict (exit 1 if blocking).

    line 56
  3. Very specific:

    If no secrets.env exists for the project yet, ask the user for their NVIDIA API key (and optionally Tavily/LangSmith).

    line 64
  4. Very specific:

    If a valid secrets.env already exists, no key is needed.

    line 76
  5. Very specific:

    Only if the user wants Brev-style behavior, offer the extras in references/persistence.md: a systemd unit that auto-starts DevX-Lab on …

    line 127

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Set Up & Run the Build-an-Agent Workshop Locally

Bring a local Linux NVIDIA GPU machine from bare to a browser-accessible DevX-Lab — the workshop's JupyterLab environment for all seven modules. This reproduces the Brev cloud deployment minus its cloud-only plumbing: no cloud-user detection, and the nginx single-port router + systemd auto-start are optional rather than default (local users reach the app directly via the Workbench proxy URL).

Outcome

A running DevX-Lab reachable at http://localhost:<proxyPort>/projects/<name>/applications/DevX-Lab/ (proxyPort defaults to 10000). On a desktop it can auto-open; on a headless box it is reached via SSH port-forward.

When to use / not use

Use on a local Linux host with an NVIDIA GPU (x86_64 or aarch64). Trigger on requests to set up / install / deploy / spin up / run the workshop or DevX-Lab locally. Do not use this to provision a Brev cloud instance — that is the brev-cli / nvwb Brev path; this skill is the local analog of the Brev startup script.

Running in an OpenShell/NemoClaw sandbox? This installer needs sudo, Docker, and the Workbench download host — all unavailable there; it fails by design, not by bug. Use the sandbox-native pair instead: setup-workshop-nemoclaw (agent inside the sandbox) + setup-workshop-nemoclaw-operator (host side: policy, secrets, port-forward).

Required input

  • NVIDIA API key (mandatory). Free at https://build.nvidia.com (log in → "Get API Key"). Every module calls NVIDIA NIM/Nemotron with it. The build succeeds without it, but every model call then returns 401.
  • Optional: TAVILY_API_KEY (Module 1 web search), LANGSMITH_API_KEY (Module 3 tracing).
  • Note: secrets.env is gitignored, so a fresh clone never contains keys — they must be supplied. Prompt the user for the NVIDIA key if it is not already provided or present in an existing secrets.env.

Procedure

Drive these steps in order. Each script lives in scripts/. Report progress and the final URL to the user.

1. Preflight

Run scripts/preflight.sh. It is read-only and prints PASS/WARN/FAIL with a verdict (exit 1 if blocking). Resolve any FAIL (disk < 40 GB, no sudo, wrong OS/arch). GPU/docker/Workbench/network WARNs are expected on a fresh box and are handled by setup. If sudo is not passwordless, run sudo -v now — the background setup cannot answer a password prompt.

2. Obtain the NVIDIA API key (and any optional keys)

If no secrets.env exists for the project yet, ask the user for their NVIDIA API key (and optionally Tavily/LangSmith). There are two ways to get it in place — pick based on whether the project is already cloned:

  • Not cloned yet (typical): pass the key to setup.sh via its environment so it writes secrets.env after cloning (avoids the chicken-and-egg of the file living inside the not-yet-cloned project). See step 3.
  • Already cloned, or the user prefers to manage the file: copy assets/secrets.env.template to <project>/secrets.env, fill in the key with the Write tool (never echo a key in a shell command — it leaks into history and process listings), then chmod 600 it.

If a valid secrets.env already exists, no key is needed.

3. Run setup in the background, then wait

The first build downloads CUDA 12.8 and compiles mamba-ssm/causal-conv1d from source — 20-45 minutes, far beyond the foreground command limit. Launch scripts/setup.sh as a background command, passing keys via the environment:

NVIDIA_API_KEY='nvapi-…' bash .agents/skills/setup-workshop/scripts/setup.sh
# optionally also: TAVILY_API_KEY='…' LANGSMITH_API_KEY='…'
# Not in the repo? Use the symlinked path: ~/.codex/skills/setup-workshop/scripts/setup.sh

setup.sh is idempotent: it starts docker, installs Workbench (if absent), activates the local context, clones (if absent), writes secrets.env, generates the GPU CDI spec, configures the /run/cdi/ and /var/host-run/ mounts, builds, and starts DevX-Lab. It streams to ~/.workshop-setup.log and ends with exactly one sentinel:

  • === WORKSHOP SETUP COMPLETE ===
  • === WORKSHOP SETUP FAILED: <reason> ===

While it runs, check progress with tail -n 30 ~/.workshop-setup.log. The harness re-invokes when the background command exits — then read the log tail to find the sentinel.

4. On completion

  • COMPLETE → read ~/.workshop-app-url for the URL and surface it with the right access instructions for the user's situation (see step 5).
  • FAILED → read the reason plus the log tail, consult references/troubleshooting.md, fix the root cause, and re-run setup.sh (it resumes idempotently). The most common failures: missing/placeholder secrets.env (401s), a network drop mid-build, or a missing /run/cdi source.

5. Tell the user how to open it

Determine the box type and give matching instructions (full detail in references/access.md):

  • Desktop with a browser: open the URL (or re-run start-app.sh without --no-browser to auto-open).
  • Headless GPU box (most common): the proxy binds to localhost, so forward it — ssh -N -L 10000:localhost:10000 <user>@<host> — then open the URL on the laptop.
  • Need a shareable link: nvwb activate local --external-access then nvwb create share-url DevX-Lab (≈48-hour public URL).

6. Offer optional persistence

Only if the user wants Brev-style behavior, offer the extras in references/persistence.md: a systemd unit that auto-starts DevX-Lab on reboot, and/or an nginx router that serves a clean single port (:8888) with the Host-header rewrite. Neither is required for normal local use.

Restart / re-resolve later

To restart the app after a reboot or to re-print the URL, run scripts/start-app.sh (it resolves the project, starts the app idempotently, and rewrites ~/.workshop-app-url). No rebuild needed unless package/build files changed.

nvwb gotchas (and why the scripts look the way they do)

  • nvwb is a shell function, not a binary. Scripts must source ~/.local/share/nvwb/nvwb-wrapper.sh (after ~/.bashrc). Never run timeout nvwb … — timeout execs a binary and can't see the function. The scripts here source the wrapper for exactly this reason.
  • The /run/cdi/ and /var/host-run/ host mounts are declared in spec.yaml, so their sources must exist before nvwb build/start — setup generates the CDI spec first to avoid a cryptic "mount source not found".
  • secrets.env / variables.env are runtime config: after editing them, restart the container (nvwb close then nvwb open) — a rebuild is not needed. Package/apt.txt/build-script changes do need nvwb build.
  • Scripts pass --context local --project <path> explicitly instead of relying on an "open" project, so they work non-interactively.

Resources

scripts/

  • preflight.sh — read-only environment readiness check (run first).
  • setup.sh — idempotent end-to-end bootstrap; run in the background.
  • start-app.sh — (re)start DevX-Lab and resolve the URL; reused by setup and the optional systemd unit.

references/

  • troubleshooting.md — build failures, 401s, mounts/CDI, GPU, docker, ports, clean-slate reset.
  • access.md — desktop / headless port-forward / share-url / nginx access modes and how to verify the app is up.
  • persistence.md — optional systemd auto-start and nginx :8888 router.

assets/

  • secrets.env.template — the keys file to fill in (NVIDIA required).
  • nvwb-workshop.service.template — systemd unit (placeholders to substitute).
  • nginx-workshop.conf.template — single-port router (placeholders to substitute).

Related skills (bundled in this repo)

  • nvwb — full AI Workbench CLI reference (contexts, clone, build, apps, mounts, env vars). Consult it for any nvwb command this skill invokes.
  • nvwb-project — in-container project awareness for .project/spec.yaml; useful once working inside DevX-Lab. See .agents/skills/VENDORED.md for provenance and re-sync.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.