Groundwork

Write & build

Where you write code — and the agents that write it with you.

This setup has two families of tool: editors, where you type code yourself, and AI agents, which read your project and make changes for you. Knowing what each one is — and when to reach for it — is most of the skill.

When you'll want this You're ready to actually build with an agent, not just chat with one.

#Two families

An editor is where code lives on screen: you open files, type, and save. An agent is a program you give a task to in plain English — it reads the project, proposes changes, and applies them once you approve. You'll use both, often at the same time: an agent drafts, you refine by hand in the editor.

Why this is AI-native

The agent is expected to work inside the same repo you do: read AGENTS.md, inspect files, run commands, produce a diff, and explain how it verified the result. That makes the terminal and Git part of the AI workflow, not separate old-school tools.

#The editors

NeovimA fast, keyboard-only editor that runs in the terminal. The one at the center of this setup — see its own page. Steeper to learn, hard to give up.
VS CodeThe familiar graphical editor. Huge extension library; hosts the Claude Code extension here. The safe default if Neovim feels like a lot.
CursorA fork of VS Code built around AI — inline completion and a built-in agent that edits across files. Looks like VS Code, thinks with an AI.
ZedA newer native editor built for speed, with collaboration and an AI assistant baked in.
Font consistency

VS Code prefers JetBrainsMono Nerd Font, the same coding font used in Ghostty. That keeps screenshots, reviews, and terminal/editor handoffs readable: ambiguous code characters stay distinct, and prompt/status icons have the glyphs they need.

You don't pick just one

Most people keep a graphical editor and a terminal editor and switch by task — Neovim for quick edits inside tmux, VS Code or Cursor for big visual work. Try them; settle into what fits.

#The agents, and the loop they share

The terminal agents all work the same way once you start them in a project folder. You describe a task; for anything sizeable they show a plan first; they make edits; and they show you a diff to approve before anything is kept. Learning this loop once means you can use any of them.

describe plan edit review diff commit not right? send it back with notes
Every agent here follows this loop. You stay in control at the review step — nothing is kept until you approve.
claudeClaude Code — Anthropic's terminal agent and the primary one here. Reads project instructions, with CLAUDE.md acting as a thin adapter to AGENTS.md in this setup.
codexCodex — OpenAI's coding agent across CLI, app, IDE, and cloud workflows. Use it for repo-aware changes, reviews, and verified diffs.
grokGrok Build — SpaceXAI's terminal agent, with a plan-first mode. Free trial, then a SuperGrok / X Premium+ plan or API credits; see Grok & Grok Build.
opencodeOpenCode — open-source and model-agnostic; works with whichever model you point it at. Has a desktop app too.
aideraider — a lightweight, git-aware AI pair programmer that commits as it goes.

To start any of them, change into a project folder and run its command:

start an agent
$ cd ~/code/my-project
$ claude
# then just describe what you want, in plain English

#Give agents a concrete target

The single highest-leverage change in how you direct an agent: replace a description of what you want with an artifact the agent can check itself against. An agent with a checkable target can verify its own work and iterate; an agent with only prose has to guess what you meant and wait for you to notice. Every round-trip you save compounds.

A failing testThe gold standard for behavior. Write one (or have the agent write it) that fails for exactly the bug or missing feature, then ask for the code that makes it pass. It turns "I think it's fixed" into "the test passes."
A screenshot or mockFor UI work, an image of the desired result beats paragraphs. Paste a screenshot, sketch a mock, or have the agent generate an image of the design first and then implement it — it can compare its output against the picture and self-correct.
A desired diff shape"The change should touch only these two files and add a flag here" bounds the blast radius before work starts.
A sample of the outputFor generators, transformations, and reports: show one correct example.

This is spec design and eval design in miniature, and on real teams the habit hardens into repo machinery — for example, a rule that every bug fix starts with a red test before any fix is written. Groundwork teaches the habit; a well-governed repo enforces it.

#The desktop AI apps

Not everything needs the terminal. These graphical apps are installed (on personal machines — work machines skip AI apps) for chat, quick questions, and supervising agents:

Claude appAnthropic's desktop app: general chat plus a Code tab for running and reviewing Claude Code sessions, when juggling threads outgrows the terminal.
ChatGPTOpenAI's chat app for questions, tutoring, writing, images, and voice. Good for thinking out loud, drafting specs, and learning away from a codebase.
Codex appA desktop home for OpenAI's coding agents: run several in parallel, watch their diffs, and manage long-running tasks.
OpenCode DesktopThe graphical companion to the OpenCode CLI, for the same run-and-review loop in a window.

#Copy context for review

Sometimes the best reviewer is outside the tool that can read your repo. In that case, send a small, deliberate context bundle: the files that explain the question, each with its path attached. VS Code has built-in commands for the Command Palette and copying the active file path, but open-tab contents need an extension.

VS Code open tabsPress P, then run Copy Opened Files to Clipboard. Groundwork installs the Copy Opened Files For AI/LLM extension for VS Code only.
Terminal / tmuxRun copy-context AGENTS.md src tests to copy selected files or folders with path headers and contents. Add --stdout when you want to inspect the payload before pasting.
CursorUse Cursor's built-in project context for agent work, or use copy-context from the terminal. The VS Code tab-copy extension is not published on Open VSX, so Cursor does not try to install it.
Keep the bundle intentional

Do not copy an entire repo by reflex, and never paste secrets, tokens, private keys, or local-only credentials into a chat app. A good context bundle is small enough for you to read before you send it.

#Editor extensions stay lean

Groundwork keeps VS Code and Cursor extensions focused on the agent loop: collect context, review changes, inspect CI, run UI tests, and enforce project-local language rules. It avoids duplicate snippet packs, overlapping formatters, and helper extensions that mostly replace built-in editor behavior.

ContextClaude Code plus the VS Code-only open-tabs copier.
Review and verificationGitLens, GitHub Pull Requests, GitHub Actions, Playwright, Error Lens, and Pretty TypeScript Errors.
Project rulesPrettier, ESLint, EditorConfig, markdownlint, ShellCheck, YAML, TOML, Tailwind, GraphQL, CSV, JSON sorting, and Mermaid preview support.

#The shared language: AGENTS.md

The agents look for plain-text project instructions and follow them. In this setup, AGENTS.md is the canonical file: it says how to run the tests, what style to use, what never to touch, and what verification means. Tool-specific files like CLAUDE.md should point back to it instead of repeating the same rules.

You've already seen this idea in action: the knowledge base uses AGENTS.md as its schema. Same mechanism — a file that turns a general agent into one that follows your rules.

#When to reach for which

Quick question, writing, or tutoringThe ChatGPT app
A coding task inside a repoA terminal agent — Claude Code is the default here
Editing a file by handNeovim (in tmux) or VS Code / Cursor
Several agent tasks at onceThe Codex app
Building a knowledge wikiClaude Code in the wiki folder — see Knowledge base

#TODOs without another extension

VS Code already gives you the useful parts of a TODO list. Use Search across the workspace for TODO|FIXME|HACK|NOTE, or use ripgrep in the terminal:

todos
$ rg -n "TODO|FIXME|HACK|NOTE"

The old Todo Tree extension is not part of this setup anymore. It duplicated built-in search and could fail when its bundled ripgrep dependency was missing.

#Good habits

Ask for inspection before editing

For anything non-trivial, start with "inspect the repo and tell me the plan before changing files." It slows the first minute down and usually saves the next thirty.

Read the diff before you approve

An agent's changes aren't real until you accept them. Actually read what it's about to do — this is how you stay in control and how you learn. Approving blindly is the one habit to avoid.

Commit first, then let it work

Make a Git commit before handing a big task to an agent. If you don't like the result, one command puts everything back. (That's what the Git page set you up for.)

Never paste secrets

Don't put passwords, API keys, or private tokens into a prompt. If a tool needs a key, it has a proper place to store it — ask before pasting anything sensitive into a chat.

Esc is unbound in Claude Code's chat — that's deliberate

In a terminal full of vim and tmux, fingers hit Esc constantly, and in Claude Code Esc is the Chat-context cancel key. Groundwork ships ~/.claude/keybindings.json with that one binding removed, so a reflexive Esc no longer triggers a cancel you didn't mean. Stopping running work stays one deliberate key — CtrlC, Claude Code's hardcoded interrupt, which can't be rebound or lost — and /rewind restores code and conversation if a run goes sideways. The file is chezmoi-managed like the rest of the setup: to change or remove bindings, use chezmoi edit --apply ~/.claude/keybindings.json (see Customizing), not Claude Code's /keybindings shortcut, which edits the applied copy that the next apply overwrites.

Agents share your machine

Every agent session spawns its own builds, tests, and file watchers on the same CPU and memory you're using. One agent is rarely noticeable; three running test suites at once will make a fast machine crawl. When things feel slow, don't guess — run btop in a pane and look at what's actually eating the machine, then pause or narrow one of the tasks. For work that must stay bounded, run it in a container: docker run --cpus 2 --memory 2g … is where hard limits live.

#Know your AI budget

Every serious AI tool runs inside limits — a context window, plan or rate limits, sometimes a spend budget — and long or complex work fails in confusing ways when you hit them blind. The habit and where each tool's gauge lives now have their own page: Know your AI budget. Why it counts as fundamentals: you are the senior partner, and knowing the machine's limits before assigning it work is the same judgment you'd apply to any teammate. Token budgets are one half of that awareness; the machine's own CPU and memory (the callout above) are the other.

#Practice

1

Ask the chat app something

Open the ChatGPT app and ask it to explain a concept you're learning. Notice it's great for questions, but it can't see your project — that's what the agents are for.

2

Point an agent at a real project

In the knowledge wiki from new-wiki, run claude and ask: "Explain what this project is and how it's organized." Watch it read the files and answer from them — that's the difference between an agent and a chatbot.

3

Run the loop end to end

Give it a small task: "Add a short Getting Started section to the README." Read the plan, let it make the change, then read the diff before approving. Commit it afterward. You just did the whole loop.

4

Compare two agents

Give the same small task to claude and to codex. Notice how they plan and explain differently. There's no single "best" — you'll develop a feel for which fits which job.

#Going deeper