AI Tools Lab — working with coding LLMs
Every project on this site reaches a stage where an AI does the assembly and you do the thinking. This page is the difference between one clean build session and an afternoon of flailing: which tool to open, how to hand it your project, and how to stay the auditor while it does the typing.
Why this page exists
At the build stage of your project you'll generate a real financial model from your own spec — and the quality of that session is decided before you type your first prompt, by two choices: which surface you use (web chat, desktop app, or a terminal agent) and how much of your project the AI can actually see. Most students get both wrong in the same way: they open a blank chat window and start typing from memory. This guide fixes that.
Nothing here is course-specific. The examples lean on the FX hedging project because its Stage 3 links here as required reading, but every rule applies unchanged to ratio models, policy analyses, and anything else you'll build.
Chat vs code — the harness idea
Claude and ChatGPT each come in two fundamentally different forms, and the split matters more than which vendor you pick. The chat form is the familiar one: a text box, a conversation, answers. The "code" form runs the same AI model inside a harness — a program that wraps the model and gives it tools: it can read your files, run commands, edit documents, and execute Git operations, each action shown to you for approval before it happens.
Chat answers questions. Code does work.
Ask a chat "is my spec complete?" and it answers from whatever you pasted. Ask a code tool the same question from inside your repo and it opens the spec, reads the stage brief next to it, and checks one against the other. Same model — the harness is the superpower.
Both vendors ship one: Claude Code (Anthropic) runs in your terminal and works on the files in front of it; Codex (OpenAI) connects to your GitHub repos and runs tasks in a cloud sandbox, opening pull requests with the results. Plans, pricing, and free-tier limits for all of these change often — check claude.ai and openai.com for what's current rather than trusting anything printed in a slide or on this page.
The three surfaces
| Aspect | Web chat | Desktop app | CLI agent |
|---|---|---|---|
| What it is | claude.ai or chatgpt.com in your browser | The same account and abilities in its own window | Claude Code or Codex — the AI inside a harness |
| Setup | None — sign up and go | One download from the vendor's site | An install and a sign-in (walkthrough below) |
| What it can see | What you paste, upload, or link — nothing else | Same as web: uploads and pasted context | Your entire repo: spec, workbook, memos, prompt log, folder structure |
| What it can do | Answer, draft, and generate Artifacts (side-panel documents you can copy or download); Projects keep files as persistent context | Everything web does, plus it sits split-screen next to Excel while you build | Read and edit files, run checks, draft commits, push to GitHub — with your approval per action |
| Reach for it when | Explaining concepts, drafting memo language, one-off formula checks | Working a workbook and a conversation at the same time | Anything touching multiple files: spec review, model verification, committing work |
Start on the web, graduate to the CLI. That's not a compromise — it's the sequence. The web surface teaches you how the model thinks and what a good prompt looks like with zero setup cost. The CLI is where the compounding returns are, once the basics are boring.
The headline: give the AI your repo
Here is the single biggest upgrade available to you, and it costs nothing: stop describing your project and start showing it. An LLM that can see your committed spec, your workbook, your prompt log, and your directory structure stops guessing about conventions and starts checking against them. The difference in output quality is not subtle.
There's a ranking, and it's the same one your build stage grades you on (Stage 3 spells it out for FX hedging):
| Rank | How you provide context | Why |
|---|---|---|
| 1 | A CLI agent launched inside the repo | It sees everything, at the committed state, with no re-uploading — and it can act on what it finds |
| 2 | GitHub file links, or uploading the committed file | The AI reads exactly what's in version control — reproducible and auditable; anyone can re-run the session later |
| 3 | Copy-pasted fragments | Last resort. Fragments drift from the committed truth, lose their surroundings, and evaporate when the chat ends |
Your spec goes in as-is
Feed the AI your committed spec, unedited. If you find yourself re-explaining the model in the chat — the strike convention, a named range, the day-count basis — that's not a prompting problem, it's a spec defect. Fix the spec, commit the change, regenerate. A spec that needs a narrator will fail exactly when it matters: when a fresh AI, with no chat history, has to rebuild your model from the document alone.
Handing a spec to an AI — the three routes
In every build stage you write a specification first and an AI builds the artifact from it. The rule that matters more than the choice of tool: the spec goes in as-is. If you find yourself re-explaining the model in the chat, that is a spec defect — add the explanation to the spec, commit it, and regenerate.
| Route | How the spec gets there | Good for | What to watch |
|---|---|---|---|
| Chat — web or desktop | Paste the spec, or give the raw GitHub URL of the committed file. The URL is cleaner: it proves what you actually committed, and it updates when you fix the spec | The most available route, no setup, and fine for a single workbook | Chat cannot write a file into your repository. You get structure and formulas to assemble, or a file to download and commit yourself — either way the commit is yours to make |
| CLI agent — Claude Code, Codex | Point it at the repository and name the file (see the prompt below) | Reads the spec, your repo conventions, and AGENTS.md together; can write the file and commit it |
It follows a vague spec as confidently as a precise one. The stop-if-unspecified instruction is what turns ambiguity into a question instead of a guess |
| Claude for Excel | Open the workbook, provide the spec, build in place | Closest to the artifact — it edits the sheet directly rather than describing one | Availability varies. Do not buy anything for a course. If you do not have access, the other two routes produce the same deliverable |
Starter prompt — CLI agent
Build the workbook described in capabilities/marginal-analysis/spec.md.
Follow the validation rules in that file exactly — they are acceptance criteria,
not suggestions. Every calculated cell must contain a formula referencing the
named inputs, never a pasted value.
If any input, convention, or formula in the spec is ambiguous or missing, STOP
and ask me rather than choosing for me. Do not infer a value I did not state.
When you are done, list which validation rules you verified and which you could
not check.
The last two paragraphs are the ones doing the work. Without the stop instruction the model fills gaps silently, and you inherit its assumptions without knowing which ones they are. The closing request gives you a starting list for your own audit — a list, not a verdict.
Whichever route you take, the output is a draft. Audit it against your own validation rules before you commit it, and record what you checked. A model cannot tell you its own output is correct, and asking it to is the most common way people end up trusting a wrong workbook.
When the AI says it can't commit
You connect your repo to a chat window, ask "can you see my repo?", get a confident yes — and then ask it to commit your memo and it declines. This is the most common tooling wall students hit, it costs people an hour, and the fix takes thirty seconds once you know what you're looking at.
A chat window refusing to commit is not broken
It is telling you the truth about its own tools. There is no setting you missed and no rephrasing that unlocks it — rephrasing the prompt is the one thing guaranteed not to work. Read the refusal, believe it, and change surfaces or change method.
Both vendors ship two different GitHub connections, and they are not tiers of the same product. They look almost identical while you're setting them up:
| The repo connector (chat) | The coding tool | |
|---|---|---|
| Examples | The GitHub connector inside ChatGPT or claude.ai | Codex · Claude Code |
| What it does | Reads — it can see your files and answer questions about them | Reads and writes — creates files, commits, pushes |
| Puts a file in your repo? | No. By design. Not a permissions gap you can widen | Yes |
| How work lands | It doesn't — you get text to copy or a file to download | A commit, or a pull request you then merge |
That's the whole explanation for the most common version of this. But three different problems produce the same complaint, and you can't tell them apart from the symptom — so match yours before you start fixing anything:
| What you see | What's actually wrong | What to do |
|---|---|---|
| "I can only read repository content" — a clear, calm refusal | Nothing. You're in a chat window and it reads. Working as designed | Commit it yourself, or switch to a coding tool. Do not retry |
It reads fine, but every write fails with 403 | A real misconfiguration — you authorized the app but never finished installing it on your account, or your repo isn't in its allowed list | Redo the connection, and make sure your repo is ticked when it asks which ones |
| It says it can't find your repo at all | The repo wasn't selected during setup — or it belongs to an organization whose owner has to approve first | Redo the connection and select it. Personal repos need no approval |
For a Markdown file, the boring path is the fast path
Getting an AI to commit a one-page memo is slower than doing it yourself. On github.com:
Add file → Create new file, type the full path in the filename box, paste,
Commit changes. That single click is add + commit + push. And since every
/ you type creates a folder, docs/decisions/2026-08-04-lastname-slug.md
builds both folders and the file in one move — see
Git mechanics.
Watch the filename it invents
A chat that can't see your assignment doesn't know your naming convention, so it makes up
something plausible — Docs/my-memo.md instead of the dated, lowercase,
docs/decisions/ path your stage actually requires. Every stage grades location and
filename under professionalism, which means the invented filename usually costs more
points than the failed commit did. Paste the convention into the prompt, or take the
path from the stage page rather than from the model.
If you do want the AI doing the committing, that's the CLI agent row of the table above, and the routes section covers handing it your work. Two things to expect: a coding tool may land your work as a pull request — a proposed change you click once more to merge — so if the file doesn't appear immediately, that's not a failure; and these tools live in their own place in the app rather than in the model dropdown next to the message box, which is where most people look first. Vendors move their menus constantly, so trust the vendor's current docs over any path written here.
Claude Code in 10 minutes
The fastest route from "never touched a terminal" to an AI working inside your repo. You already have a terminal if you installed Git — Git Bash on Windows, Terminal on Mac.
- Install Node.js (version 18 or newer) from nodejs.org.
- Install Claude Code — one command, once:
npm install -g @anthropic-ai/claude-code - Navigate to your repo and launch. The launch folder matters — start it
inside the repo so it can see your project:
First launch prompts you to sign in with your Anthropic account.cd path/to/your-repo claude - Ask in plain English. No special syntax. It reads your files and responds; anything that changes a file or runs a command waits for your approval.
Power moves worth stealing
Once "explain this file" feels routine, these are the prompts that earn the setup time — written here for the FX hedging project, but the pattern transfers to any build stage:
- Contract check: "Check my workbook against my spec's named-range contract — list any range that's missing, misnamed, or attached to the wrong cell."
- Spec audit: "Compare my Stage 2 spec against the stage brief and tell me which required sections are thin or missing."
- Git without leaving: "Draft a commit message for my Stage 3 build and push it to GitHub."
- Log hygiene: "Read my prompt-log.md and flag any entry missing a used / modified / rejected verdict."
Notice what these have in common: each one asks the AI to check your work against a committed artifact — spec vs workbook, spec vs brief, log vs its required format. That's what the harness buys you that no chat window can.
Prompt patterns that work
Four habits separate prompts that produce deliverable-quality output from prompts that produce plausible-looking filler. Each works on every surface, from a free web chat to a CLI agent.
1 · Give it a role
Vague: "Help me with hedging."
Better: "You are an FX risk analyst at a US exporter with a €4,500,000 receivable due in 360 days. Walk me through the forward hedge using the named ranges from my spec."
2 · Provide the data
Vague: "What does the money-market hedge pay?"
Better: "S0 = 1.0842 USD/EUR, R_USD = 4.00%, R_FC = 3.68%, both ACT/360, receivable €4,500,000 due in 360 days. Compute the money-market hedge in its three explicit steps and state the total USD proceeds." The AI doesn't know your scenario's numbers — and if you don't provide them, it may invent figures that look real.
3 · Specify the output
Vague: "Analyze the hedges."
Better: "Present all three hedges in a Markdown table with columns: Strategy, USD proceeds at today's forward, Best case, Worst case. Two decimal places." Output you specified drops into your deliverable; output it improvised gets reformatted by hand.
4 · Request verification
Vague: "Is this right?"
Better: "Cross-check: if covered interest parity holds, the forward hedge and the money-market hedge should produce the same USD proceeds within rounding. Show the math and state the gap." Make the AI grade its own work against a known relationship — parity checks, Du Pont identities, balance-sheet ties — and the errors surface themselves.
One more habit worth forming: the figures above are the FX Hedging Lab's sample scenario, so you can run the same inputs there and grade the AI's answer yourself. Whenever a lab mirrors your model, it's a free answer key for exactly this kind of check.
Vendor balance & hygiene
Claude or ChatGPT? Yes. Both are welcome in every course here, both have free tiers that are enough to do the work, and their relative strengths leapfrog every few months — which is exactly why this page won't tell you one is better. What's graded is your spec, your audit, and your judgment; the tool is interchangeable. Pick one, learn it well, and check the vendor's own site for current models and plans.
- Verify, don't trust. AI produces plausible-sounding errors: subtly wrong formulas, invented financial data, a sign flipped in an option payoff. Cross-check every number that matters against your textbook, your spec's validation checks, or the filing it supposedly came from. Your build stage requires a written audit for precisely this reason.
- Never paste sensitive personal data. Course materials and public financial data are fine; your ID numbers, other people's information, and anything you wouldn't put in a public repo are not.
- Log every meaningful interaction in
prompt-log.md. This is graded. For each entry: the prompt you used, the key output, and your verdict — used, modified, or rejected. The log is your evidence that the AI was your analyst and not your ghostwriter; your project's stage pages spell out the format.