After the relatively easy process of setting up the DGX Spark (ok, the Dell, but for ease of reference I’m just calling it a DGX Spark) it was time to configure the software side. A lot comes preinstalled, but there was more to add.

To make this server as well maintained as possible I decided everything had to be installed via Ansible like we do for our clients. Normally, our excellent infrastructure team would write the playbooks, but I did this over the winter break and I wanted to get more experience with Ansible myself after dabbling with it previously to set up my home network.
More so than learning Ansible, this was really an opportunity to learn Claude Code. My previous experience using ChatGPT to write an R package and using Copilot to develop a Kubernetes cluster left me underwhelmed. But one of my takeaways from that second talk was that people really love Claude Code and I should try it.
Joe Marlo helped me get up to speed with adding agents and skills. This was important, because when I asked Claude Code to generate the skills it did not make the required SKILL.md file and it completely missed the yaml frontmatter, even though it created agents properly.
At first, I was not enjoying myself using Claude. I felt the bird Homer Simpson used to automate his job which was entirely hitting the “y” key for “yes.”

But worse than that existential dread was that it did not write very good code. I felt I could do it better. But then Joe Marlo told me about Context7. It provides an MCP that delivers markdown documentation for just about every software framework out there. Insisting in both the CLAUDE.md file and individual skills that Claude should query the documentation any time it writes code dramatically improved the quality of the code.
Then I used the Claude chat interface to significantly improve the skills for Ansible, Caddy, code reviewing, Docker, Linux administration and unit tests. Importantly, I used the CLAUDE.md file to really stress upon Claude that it should use the skills while writing both the playbooks and the underlying templates such as the Caddyfile and Docker compose files. While waiting for Claude to finish individual tasks I probably spent too much time staring at LinkedIn.
So far I setup:
- Caddy (in Docker) as a reverse proxy to access the DGX Dashboard which is otherwise only available from localhost or using NVIDIA Sync which I didn’t want my team to need
- Made zsh the default shell for all new users
- Created new users for members of my team
- Added the machine to our Tailscale network (not running in Docker)
Now that I have the framework setup for Claude Code to generate the Ansible playbooks and underlying files, I will hand it off to my team to truly test the capabilities of using Claude Code collaboratively.
Then we will have Claude Code add at least the following:
- Ollama
- OpenWebUI
- DistillKit
- MergeKit
- Some kind of containerized IDE beyond the JupyterLab already installed
- Automated user management along with proper ssh keys for authentication
The other day I saw this tweet and it nicely summarized my feelings.

We even have internal trainings where more experienced users get the less experienced up and running with their agentic workflows. This is a training we will soon be offering our clients too.
After being initially lukewarm, seeing Claude Code in action got me excited to have my team make great use of the tool.
Jared Lander is the Chief Data Scientist of Lander Analytics a New York data science and AI firm, Adjunct Professor at Columbia University, Organizer of the New York Open Statistical Programming meetup and the New York and Government Data Science and AI Conferences and author of R for Everyone.

