Claude Mac Setup - SS67/project-docs GitHub Wiki
How to use this file: Open a fresh Claude Code session in your terminal (or a new claude.ai chat if you haven't installed Claude Code yet) and paste this entire document as your first message. Then say: "Work through this brief. Start with Phase 0 and stop for my approval after each phase."
I'm a platform/infrastructure engineer with 8+ years of hands-on experience. Over the next 12 months I'm preparing to apply for AI Ops / MLOps / Platform Engineer / SRE roles in Europe (Netherlands, Germany, Luxembourg, Poland), targeting a September 2027 start.
My skill-building plan covers four tracks:
- Python — to real engineer level (typing, packaging, testing, async, FastAPI), not scripting
- IaC — Terraform/OpenTofu module design, state strategy, policy-as-code
- Kubernetes — CKA then CKS certification
- AWS — deep on one cloud, ML/MLOps services included
Later phases add MLOps and LLMOps (MLflow, KServe, vLLM, GPU scheduling, evals), so the environment needs room to grow into that.
I have a Claude Max subscription.
| Hardware | MacBook Pro 2019, Intel Core i7 (x86_64) |
| OS | macOS Tahoe 26.6.2 |
The critical architectural point: knowledge/ must not be loaded into context at startup.
It will grow to hundreds of files over twelve months. Instead, CLAUDE.md contains a short
pointer telling you that knowledge/INDEX.md is the map and that you should grep the
knowledge/ tree when I ask you to recall something. This keeps my context window free for
actual work.
Constraints to respect while building this:
-
CLAUDE.mdunder 200 lines. Longer files reduce adherence. -
@pathimports still consume context at launch, so use them sparingly — prefer path-scoped rules for anything conditional. - Auto memory's
MEMORY.mdindex is capped at 200 lines / 25 KB and truncates silently past that. Detail belongs in topic files, not the index.
-
/recall <topic>— searchknowledge/and summarise what I already know about a topic, citing the note files. Should not require loading the whole tree. -
/note <topic>— capture what we just worked through as a properly formatted note in the rightknowledge/subdirectory, and updateINDEX.md. -
/drill <exam> <domain>— generate hands-on practice tasks for CKA, CKS, or AWS in the style of the real exam, verify my answers, and log results toexams/<exam>/progress.md. -
/weekly— review the week: what I studied, what's stale, what's due for spaced repetition, what's behind schedule. Read fromknowledge/andexams/. -
/lab <name>— scaffold a new lab directory with a README stating the objective, a teardown script, and a cost note if it touches AWS.
-
researcher— does documentation and web research in an isolated context, returns a summary. This keeps search noise out of my main conversation and saves my Max quota. -
reviewer— reviews my Terraform, Python, and Kubernetes manifests against the rules in.claude/rules/, as a hiring manager would.
- Use
/clearwhen switching between study topics rather than letting context accumulate. - Use
/contextto inspect what's actually loaded when behaviour seems off. - Prefer delegating research to the
researchersubagent over doing it in the main thread. -
/compactwith an explicit instruction about what to preserve, rather than bare.
Build a Brewfile and scripts/bootstrap.sh. Group installs by track. Verify each tool
exists and works before moving to the next group. Report anything that needs a
build-from-source on Intel.
git, gh, ripgrep, fd, fzf, jq, yq, bat, eza, direnv, starship,
git-delta, tree, watch, htop
Configure direnv — it matters later for per-project AWS profiles and Python envs.
-
uvas the primary tool — it manages Python versions, virtualenvs, and dependencies, and it's dramatically faster than the pip/pyenv stack, which matters on this hardware. -
ruff(lint + format),mypy,pytest,pre-commit - Install Python 3.12 and 3.13 via
uvso I can test across versions. -
Do not install pyenv or Poetry unless you explain why
uvis insufficient. - Do not touch the system Python.
-
terraformandopentofu(I want to be fluent in both — EU employers use both) -
tenvortfenvfor version switching -
tflint,trivy,checkov,terraform-docs,infracost -
pre-commit-terraformhooks wired into the repo
-
kubectl,kubectx,kubens,k9s,helm,kustomize,stern,krew -
Container runtime: use
colima, not Docker Desktop. Colima is lighter, avoids the Docker Desktop licensing question, and lets me cap CPU/RAM explicitly — which matters on a thermally constrained 2019 Intel machine. Configure it with sensible limits (suggest something like 4 CPU / 6 GB and explain the tradeoff). -
Local cluster:
k3dorkind, not minikube. Both are lighter. Recommend one and justify it. -
CKS-specific tooling:
falco,trivy,kube-bench,kubescape, plus AppArmor and seccomp practice. Several of these need a real Linux kernel. Set up a Lima VM for this and document how to reach it. If some CKS scenarios genuinely can't run locally on Intel macOS, say so explicitly and propose a cheap cloud alternative rather than pretending otherwise. - Set up
krewplugins useful for the exams.
-
awscliv2,session-manager-plugin -
aws-vaultfor credential storage — I do not want long-lived keys in~/.aws/credentials. Set this up properly with the macOS Keychain backend. -
direnvintegration so each lab directory activates the right AWS profile automatically. - A billing alarm and a cost budget as part of setup. I'm going to be spinning up GPU instances later and I want guardrails before I need them, not after.
- Don't install LocalStack by default — it's heavy for this machine. Ask me first.
-
gitleaks, wired as a pre-commit hook - Confirm secrets scanning actually blocks a test commit before declaring this done
- Authenticate
ghand verify withgh auth status. - Set up SSH commit signing (or GPG — recommend one and explain).
- Configure the GitHub MCP server so I can work with issues and PRs from inside Claude Code sessions. Check the current recommended configuration in the docs rather than assuming; MCP setup has changed.
- Set up GitHub Issues as my study backlog — labels per track (
python,iac,cka,cks,aws,mlops,german,job-search), and a milestone per roadmap phase. This gives/weeklysomething durable to read from. - Create a basic CI workflow that runs
ruff,mypy,pytest,tflintandgitleakson push. I want the habit of green CI from day one. - Explain what the Claude Code GitHub Action does and whether it's worth enabling on a private study repo, but don't enable it without asking — I want to understand the quota implications first.
Write scripts/doctor.sh that checks every tool is installed and functional, and produces a
readable pass/fail report. Then walk me through proving the setup works end to end:
-
claude doctoris clean -
/contextin a session shows my CLAUDE.md and rules loading as intended, and shows a small startup footprint -
/memoryshows the auto memory directory and it's enabled - A
k3d/kindcluster comes up,kubectl get nodesworks, and teardown is clean -
uvcreates a venv,pytestruns,ruffandmypypass on a trivial module -
terraform initandplanwork against a trivial local-only config -
aws-vault exec <profile> -- aws sts get-caller-identityreturns my identity -
gitleaksblocks a commit containing a fake AWS key -
/recall kubernetesreturns something sensible from a seeded test note -
bootstrap.shruns cleanly a second time with no errors and no duplicate work
- Everything committed and pushed to the private GitHub repo
-
README.mdat the repo root explaining the structure to future-me -
knowledge/INDEX.mdseeded with the category structure and a note explaining the note-taking convention - All ten verification checks above passing
- A short written summary of: what you installed, anything you couldn't install on Intel and why, any version constraints I should know about, and what I should do first tomorrow
If any of the following are true, tell me rather than quietly complying:
- A tool I asked for is a poor fit for Intel macOS, or has a better modern replacement
- The structure above is over-engineered for where I'm actually starting
- Something here will burn significant Max quota and there's a cheaper pattern
- A phase is too large to do well in one context window and should be split