Setup
Setup
Make the project folder, give Claude Code the brief, add the data, and let Claude set up Python.
Nothing is built in this lesson. You set up what every later step depends on: the project folder, the brief that tells Claude Code what the system is, the tools it needs, and the council's public data.
Steps 1 and 3 are done in VS Code and your browser. Every other step is a prompt you paste into Claude Code, in order.
By the end of this lesson
A folder containing CLAUDE.md, a .venv with pandas and openpyxl, a data/ folder with the contract rules, three months of spend, the Contracts Finder export and four committee papers, and empty .claude/skills, .claude/agents, scripts and outputs folders.
Before you start
Two tools are needed for the whole guide. Install anything missing, then tick it off.
PrerequisiteVS Code is installed
Download VS Code from code.visualstudio.com and install it.
Open it once to check that it starts. You will work in it for the whole guide.
PrerequisiteClaude Code is installed and signed in
Install Claude Code by following the installation steps in the Claude Code docs.
Open a terminal, type claude and press enter, then sign in when it asks. Type /exit when you're done.
Steps
Everything lives in one folder, and Claude Code only ever looks at the folder you start it in.
- Open VS Code.
- Choose File › Open Folder.
- Go to your Desktop, click New Folder, and name it
procurement-audit-planner. - Select it and click Open.
- Choose View › Terminal to open a panel at the bottom.
- Type
claudein that panel and press enter.
What to expect
- VS Code shows the empty
procurement-audit-plannerfolder in the left-hand panel. - Claude Code is running in the terminal panel at the bottom. Every prompt from now on goes there.
What you should see after step 1.1
Explorer
⌄ procurement-audit-planner
- empty folder
CLAUDE.md is the brief. Claude Code reads it at the start of every session in this folder.
It describes the whole system: the problem it solves, the data sources, how the parts fit together, and a specification for each skill, each sub-agent and the agent team. Later prompts say “described in CLAUDE.md”, and this is where Claude looks.
It also fixes the rules that hold at every step. Python computes every number. Every quote, figure and rating traces to a source. Outputs describe risk indicators to investigate, never wrongdoing.
Create a file called CLAUDE.md in this folder with exactly the content between the two marker lines below. Do not add, remove or reword anything, and do not include the marker lines. ----- BEGIN CLAUDE.md ----- # CLAUDE.md: Procurement Audit Planning Agent (West Berkshire Council) An agentic system that plans an internal audit of procurement for West Berkshire Council from its public data: it turns the council's purchasing rulebook into testable rules, analyses the full spend population against them, folds in past audit history, rates the risks, and produces a complete, cross-checked audit planning pack for a human auditor to approve. This file describes the ENTIRE target system. Where this file is silent,
What do you know about this project?
What to expect
- Claude writes
CLAUDE.mdand confirms it. - Its answer summarises the system and its design principles, and says what is still missing, such as the data.
What you should see after step 1.2
Explorer
⌄ procurement-audit-planner
- CLAUDE.mdnew
The system works from four kinds of public data: the council's Contract Rules, three months of spend over £500, its Contracts Finder notices, and four Governance Committee papers.
They come as one folder called data, with the exact file names the skills and agents expect. The same files are in the course repository if you would rather take them from there.
- Download data.zip (2.2 MB).
- Unzip it. You get a folder called
data. - Move that
datafolder into yourprocurement-audit-plannerfolder, next toCLAUDE.md. You can drag it onto the left-hand panel in VS Code.
What to expect
- The left-hand panel in VS Code shows a folder called
data, holdingcontract-rules.pdf,contracts.csvand two folders,spendandcommittee. spendholds three Excel workbooks andcommitteeholds four PDFs.
What you should see after step 1.3
Explorer
⌄ procurement-audit-planner
- ⌄data
- ⌄committee
- audit-completed-work-2024-25-annual.pdfnew
- audit-completed-work-2025-26-q3.pdfnew
- internal-audit-plan-2025-28.pdfnew
- risk-management-strategy-2024-27.pdfnew
- ⌄spend
- Over500_2026_P02_-_published.xlsxnew
- Over500_2026_P03_-_published.xlsxnew
- Over500_2026_P04_-_published.xlsxnew
- contract-rules.pdfnew
- contracts.csvnew
- CLAUDE.md
Claude Code installs the tools it needs when you ask. This is the first step that needs them: Python with pandas and openpyxl for the spend workbooks, and pdftotext for the PDFs.
Real data rarely matches a brief exactly. Finding the differences now stops the agents failing later on a file they didn't expect.
Asking for aggregates only keeps whole datasets out of Claude's context window, one of the brief's rules.
First set up the tools this project needs. Create a Python virtual environment in .venv with pandas and openpyxl, and list both in requirements.txt. If pdftotext and pdfinfo (from poppler) aren't installed, install poppler with the right package manager for this computer. Then look at data/ and compare it with the Data sources table in CLAUDE.md. Inspect the files with .head(), .info() and aggregates only; never print whole tables. Report: each expected file present or missing; the real format of the spend workbooks (sheet name, which row holds the header, date type, row count); how many contracts.csv rows belong to the council; and every mismatch with CLAUDE.md. Don't change any file.
What to expect
- Claude Code asks your permission before it installs anything. Approve each request.
- A short list of differences, for example that the header row sits on a different line in one workbook.
- If Claude finds a real mismatch with the brief, decide whether to fix the data or the brief before moving on.
> First set up the tools this project needs…● Bash(python3 -m venv .venv && .venv/bin/pip install pandas openpyxl)● Bash(which pdftotext pdfinfo)● Bash(find data -type f | sort)● Bash(.venv/bin/python -c '…profile each workbook with .head() and .info()…')3 workbooks · sheet 'Data to publish' · header on row 1 in one file, row 2 in the othersDate column already datetime · 10,607 rows in totalcontracts.csv: 150 rows, 141 for the council under 3 spellingsEvery file CLAUDE.md lists is present. Two things matter for later: the header row moves between workbooks, and about a fifth of spend rows name the supplier only as 'Redacted'.
What you should see after step 1.4
Explorer
⌄ procurement-audit-planner
- ›.venvnew
- ›data
- CLAUDE.md
- requirements.txtnew
Every skill, agent, script and output has a fixed home. Creating the folders now means each later step only adds files.
.claude/skills/ holds instructions Claude can follow. .claude/agents/ holds the agents: the sub-agents first, then the team in lesson 4. scripts/ holds the Python the spend analyst writes and, later, the QA checks. outputs/ holds everything the system produces.
A folder whose name starts with a dot is hidden in Finder and File Explorer. VS Code shows it in the left-hand panel.
Create four empty folders in this project: .claude/skills, .claude/agents, scripts and outputs.
What to expect
- Claude asks permission before creating them. Say yes.
- The four folders appear in VS Code's left-hand panel.
What you should see after step 1.5
Explorer
⌄ procurement-audit-planner
- ⌄.claude
- ›agentsnew
- ›skillsnew
- ›.venv
- ›data
- ›outputsnew
- ›scriptsnew
- CLAUDE.md
- requirements.txt
Check
A few questions on the ideas behind this lesson.
What you have built so far
1 of 11 filesNothing is built yet, and that is the point. Claude Code now has the brief it reads every session, the public data, the folders each later step writes into, and a Python environment. Everything from here adds files to this folder.
- ✓ builtThe briefCLAUDE.md
- not yetTestable rulesoutputs/rules.json
- not yetSpend indicatorsoutputs/analytics.json
- not yetAudit historyoutputs/history.json
- not yetRisk registeroutputs/risk-register.md
- not yetAuditor decisionsoutputs/auditor-comments.md
- not yetPlanning memooutputs/planning-memo.md
- not yetRisk-control matrixoutputs/risk-control-matrix.md
- not yetAudit programoutputs/audit-program.md
- not yetChallengesoutputs/challenges.md
- not yetQA review and sign-offoutputs/review.md