The same content as the slides above, in one page.
Why start here
Every tool in this course has to be installed first.
Git, Docker, Node.js, Python and the GitHub CLI all arrive on your computer the same way: someone packages the program, you download it, and something installs it. If you know the few ways that happens, setup stops feeling like guesswork, and you can ask a Coding Agent App for the right one.
This deck uses a few terminal commands as examples. The next deck, The terminal, explains the window you type them in.
Two places you type
A terminal takes exact commands. A Coding Agent App takes plain-language prompts.
The Terminal
A text window where you type exact commands. The shell inside it runs each command the moment you press Enter.
- Spelling and spacing must be exact.
- macOS and Linux use zsh or bash. Upper and lower case matter there:
Git is not git. - Windows uses PowerShell. It does not care about case in command names, but type them as shown anyway.
- Names inside a command, such as Linux file paths, branch names and image names, can be case-sensitive in any shell.
- The two kinds of shell have different commands:
ls -la works in zsh and bash, while PowerShell uses Get-ChildItem -Force.
Terminal command, macOS and Linux (zsh or bash, case-sensitive): ls -la
Terminal command, Windows PowerShell (command names are not case-sensitive): Get-ChildItem -Force
A Coding Agent App
It looks like a chatbot, but it does much more: it can read your project files, run commands, edit code and use tools, and it often asks your permission first. Product names and features change fast and differ a lot, so these decks use one group name for all of them.
Examples: Kiro, Claude Code Desktop, GitHub Copilot's desktop app, Google Antigravity, the Codex and ChatGPT desktop apps, OpenCode, Hermes, LangChain's Deep Agents desktop app, and others. Which one you use does not matter here.
- Plain language is fine. Say what you want, and use the right names for things.
- Capital letters and small slips are forgiving; the meaning is what counts.
- It may run terminal commands for you. Read what it proposes, especially anything that deletes files or sends data.
- Pasting a command into the prompt does not guarantee it runs as typed. Ask for the result you want, or ask the app to explain the command first.
Prompt for a Coding Agent App: “What changed in my project since the last commit? Explain it in plain words.”
The same job, two ways
Terminal command, Any shell: git status
In a terminal you type the exact command. In a Coding Agent App you describe what you want.
Three ways software reaches your computer
Same program, different route. Each route has trade-offs.
- 1 · Download an installer
- You fetch a file and run it A .dmg or .pkg on a Mac, an .exe or .msi on Windows. Simple for one app. You must find the right file, and you must come back and update it yourself.
- 2 · An app store
- A curated shop on your computer The Mac App Store and the Microsoft Store. Checked by the platform and easy to update, but they carry few developer tools.
- 3 · A package manager
- A catalog you control by typing
brew install git or winget install finds, installs, updates and removes software. It is repeatable, so it can be written in a setup script.
Developers prefer the third route. A setup you can repeat is a setup you can fix, share and automate.
The words, part 1
Each card gives the word, what it means, and a sentence you can say to a Coding Agent App.
- Installer
- One file that installs one program. You run it, click through, and the program is on your computer.
Prompt for a Coding Agent App: “Is there an official installer for this tool, and which file do I pick for my computer?”
- Package
- A program or library bundled with its name, version and a list of what it needs.
Prompt for a Coding Agent App: “What is the package name for this tool on my system?”
- Package manager
- A program that finds, installs, updates and removes packages from one command.
Prompt for a Coding Agent App: “Which package manager should I use to install this on my computer?”
- Library
- Code someone else wrote that your program reuses, so you do not write it again.
Prompt for a Coding Agent App: “Which libraries does this project use, and what is each one for?”
The words, part 2
- Dependency
- A library your project needs in order to run. Libraries can need other libraries, so the list grows.
Prompt for a Coding Agent App: “List this project's dependencies and tell me which ones I can ignore.”
- Registry
- An online catalog of packages, such as npm for JavaScript or PyPI for Python. The tool downloads from it.
Prompt for a Coding Agent App: “Where does this package come from, and is it the official one?”
- Version
- A number such as 22.1.0 that names one release. Newer is not always safer for your project.
Prompt for a Coding Agent App: “Which version of Node does this project need, and how do I install exactly that one?”
- Runtime
- The program that runs code written in a language, such as Node.js for JavaScript or the Python interpreter.
Prompt for a Coding Agent App: “Which runtime and version do I need to run this project?”
Programs and libraries are different jobs. A package manager like Homebrew installs programs on your computer. A language tool like npm installs libraries into one project.
Homebrew: the package manager for Mac
Started in 2009. It is the usual way developers install tools on macOS, and it also runs on Linux.
Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew --version
Check that Homebrew is installed To install it, copy the one-line command from brew.sh, the official site, and paste it in your terminal.Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew search node
Look for a package Lists the formulae and casks whose names match.Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew install git gh
Install one or more tools Downloads each tool and everything it needs. One command, several tools.Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew list
See what you installed Brew keeps the list, so you do not have to remember.Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew upgrade
Update everything it installed Run brew update first to refresh the catalog.Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew uninstall gh
Remove a tool Clean and complete. A hand-dragged app can leave files behind.
zsh and bash are case-sensitive: brew works, Brew does not.
Each programming language has its own tool
Homebrew installs programs. These install the libraries a single project uses.
- JavaScript and TypeScript
- npm Ships with Node.js. Libraries come from the npm registry. Alternatives:
yarn, pnpm and bun. Older: bower. - Python
- uv A fast manager released in 2024. It installs Python, project libraries and the project's own environment. Before it:
pip, venv, pipenv, poetry and conda. - Java
- Maven and Gradle Libraries come from Maven Central. Gradle is newer and more flexible. Older:
Ant. - Rust
- cargo Builds the program and fetches libraries from crates.io. One tool does both jobs.
- Go
- go modules Built into the
go command. Libraries are named by their web address. - Ruby, PHP, .NET
- gem · Composer · NuGet Same idea: a command, a registry and a file listing what the project needs.
The pattern repeats: a registry of libraries, a command that installs them, and a file in your project that lists them.
Reading a project's dependency files
You do not write these by hand. You should know which one you are looking at.
- package.json
- JavaScript: the list of libraries and scripts
npm install reads it and creates node_modules, a large folder you never edit. - package-lock.json
- JavaScript: the exact versions that were installed The lock file makes every computer install the same versions.
- pyproject.toml and uv.lock
- Python: the list, and the exact versions
uv sync reads them and creates a private environment for the project. requirements.txt is the older, simpler list. - Docker also does this job
- A container carries its own tools In this course the whole project runs in Docker, so you rarely install these libraries on your own computer.
What a compiler does
Computers run machine code, which is just numbers. People write something readable.
- 1 · Source code
- Text a person can read Written in C, C++, Rust, Go or Swift. It says what the program should do.
- 2 · The compiler
- A translator program It checks the code for mistakes, then converts it to instructions for one kind of processor. On a Mac the common compiler is
clang. - 3 · Machine code
- A binary file Bytes the processor understands directly. This is what an .exe or a Mac program really is. You cannot read it, but you can run it.
A binary is the finished program. The source code is the recipe. When you download an app, you almost always get the binary.
One program, several binaries
Machine code fits one processor and one operating system. That is why downloads offer choices.
- Mac
- Apple silicon (arm64) or Intel (x86-64) Newer Macs use Apple's own chips. A program built for the other kind needs Rosetta, Apple's translator, and may be slower.
- Windows
- x64 or ARM64 Most PCs are x64. Some laptops use ARM and run x64 programs through Windows's built-in emulation, usually a little slower.
- The file format also differs
- Mac, Windows and Linux are not interchangeable Each system expects its own program format. A Windows .exe does not run on a Mac, and the reverse.
- Not every language compiles ahead of time
- Python and JavaScript run through a runtime Their code is read by an interpreter such as
python or node as it runs. That is why you install the runtime first. Java compiles to a middle form that a Java runtime then runs.
Practical rule: when a download page lists several files, pick the one that matches your operating system and your processor. A package manager chooses for you.
Windows: how installing evolved
Each step added what the last one lacked.
- 1990s and on · .exe installers
- Download, double-click, click Next Every maker wrote their own setup program. Uninstalling was inconsistent, and updates were your job.
- Around 2000 · MSI
- Windows Installer packages A standard format that Windows itself tracks. IT departments can install and remove it silently across many PCs.
- 2011 · Chocolatey
- The first popular command-line manager Community-run.
choco install git brought the Linux idea to Windows. It usually asks for administrator rights. - Early 2010s · Scoop
- Installs for you alone Aimed at developers. It needs no administrator rights and keeps each tool in your own folder.
- 2012 onward · Microsoft Store, later MSIX
- Packages checked and updated by Microsoft Safe and tidy, but the Store never held most developer tools.
- 2020 and 2021 · winget
- Microsoft's own package manager Announced in 2020, version 1.0 in 2021. Included with current Windows 10 and 11. Its catalog is a public list on GitHub.
Mac and Windows: the same job, side by side
Run the left line in zsh or bash, the right line in PowerShell.
Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew install gh
Terminal command, Windows PowerShell (command names are not case-sensitive): winget install --id GitHub.cli -e
Install the GitHub CLI In winget, --id names the exact package and -e means an exact match, so you do not get a lookalike.Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew search node
Terminal command, Windows PowerShell (command names are not case-sensitive): winget search node
Search the catalog Check the publisher in the results before you install.Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew list
Terminal command, Windows PowerShell (command names are not case-sensitive): winget list
See what is installed winget list also shows apps you installed by other routes.Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew upgrade
Terminal command, Windows PowerShell (command names are not case-sensitive): winget upgrade --all
Update everything A good habit once a week. winget upgrade alone lists what can be updated.Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew uninstall gh
Terminal command, Windows PowerShell (command names are not case-sensitive): winget uninstall --id GitHub.cli
Remove a tool Prefer this over deleting files by hand.Terminal command, Windows PowerShell (command names are not case-sensitive): choco install git
Terminal command, Windows PowerShell (command names are not case-sensitive): scoop install git
The older Windows managers Chocolatey and Scoop do the same job with their own catalogs. Use one manager at a time per tool.
PowerShell command names are not case-sensitive, but copy package names and IDs exactly as shown.
What to take away from the trend
- The trend runs in one direction: from “download a file and click through” to “name the package and let a tool install it”. Both big platforms now have a built-in or standard answer: Homebrew on Mac, winget on Windows.
- Choose one package manager per computer and use it for programs. Mixing three of them makes it hard to know who installed what.
- Use the language tool, not the system manager, for a project's libraries:
npm, uv and the like. They keep each project's libraries separate. - Better still, put the whole project in a container. Docker Desktop, covered in a later deck, carries the right tools with the project, so your computer stays clean.
- A command you can repeat is better than a series of clicks you cannot. It can be shared, checked and run again by a Coding Agent App.
Rule of thumb for this course: Homebrew or winget for programs, Docker for projects.
Install with care
Installing means running someone else's code on your computer.
- Check the source
- Use the official site Search results and ads can lead to lookalike pages. For Homebrew, copy the command from brew.sh. For winget, check the publisher name.
- Read before you paste
- Be careful with one-line scripts Some sites tell you to paste a command that downloads and runs a script. Only do that for sites you chose to trust, such as the official one.
- Ask before administrator rights
- Know why it needs them Installers may request a password or an administrator prompt. If you cannot say why, ask your Coding Agent App before you approve.
A Coding Agent App can run install commands for you, usually after asking permission. Read the command it shows you before you approve.
Say it to your Coding Agent App
Name your computer and the tool. You get a better answer.
Prompt for a Coding Agent App: “I have a Mac with an Apple silicon chip. How do I install Git, the GitHub CLI and Node 22 with Homebrew?”
Prompt for a Coding Agent App: “I have Windows 11. Which winget commands install Git, the GitHub CLI and Docker Desktop, and how do I check they worked?”
Prompt for a Coding Agent App: “This command says command not found: <paste the exact error>. Is the tool installed, or is it just not on my PATH?”
Prompt for a Coding Agent App: “Which of these tools did I install with a package manager, and which by hand? Show me how to tell.”
Prompt for a Coding Agent App: “Explain this install error in plain language and give me the smallest fix: <paste the exact error>.”
- Say your operating system and processor. The right answer depends on them.
- Never paste keys or passwords into a prompt.
Learn more from the source
Checked against the official documentation on 7 November 2026.
- The Homebrew documentation explains installing, formulae, casks and upgrades.
- Microsoft's winget documentation lists every winget command.
- The uv documentation shows how to install Python and manage a project's libraries.
- The npm documentation covers installing and updating a project's JavaScript libraries.