All five assignments are done with Claude Code — the CLI, the desktop app, or the VS Code extension, whichever you prefer — and every submission includes your session files. This page is how you get set up and what you hand in. It is one of four environments under computing setup; the others are the HPC, AWS, and CloudLab.
Harvard FAS provides this — do not buy a subscription. Claude Code is included in the Harvard Claude licence, alongside Claude chat and the desktop app, and you sign in with HarvardKey. The request form for FAS, GSAS and SEAS is on HUIT's Claude page.
Two things worth knowing before you start. The free Claude plan does not include Claude Code at all, so a free account will not get you through Assignment 1 — Claude Code requires a Pro, Max, Team, Enterprise or Console account, and the Harvard licence is how you get one. And if you already pay for Claude personally, you can continue to use it if you have enough quota.
Three interfaces, one tool and one account behind all of them. Pick whichever you will actually use; you can switch, and you can run more than one. Claude Code needs macOS 13+, Windows 10 1809+, or a current Linux, with 4 GB of RAM.
The reference interface, and the one this page's commands assume. On macOS, Linux or WSL:
On Windows PowerShell:
Homebrew (brew install --cask claude-code) and npm
(npm install -g @anthropic-ai/claude-code, needs Node 22+) also work; the native installer is
the one that auto-updates. Then check it:
claude doctor prints installation and settings diagnostics without starting a session, and is
the first thing to run — and to paste to me — when something is wrong.
A graphical interface, no terminal required. Download it for macOS, Windows or Linux from the desktop quickstart.
Open the Extensions view — Cmd+Shift+X on Mac, Ctrl+Shift+X otherwise
— search for “Claude Code”, and install. It needs VS Code 1.94 or later, and it also
installs in VS Code forks including Cursor. See the
extension docs.
One thing to know if you go this route: the export commands below are CLI commands. The extension can open a terminal session for you, or you can install the CLI alongside it and run them there — both read the same session history on your machine.
Run claude in a terminal. It opens a browser for you to sign in; use your Harvard account.
If the browser does not open, press c to copy the login URL and paste it in yourself. If the
browser shows you a code instead of returning to the terminal — common over SSH, in WSL, and in
containers — paste that code back at the prompt. On success the terminal says
Login successful.
Check what you are actually signed in as with /status, which shows the login method and the
account. /login re-runs the flow and /logout signs you out.
Every one of the five assignments takes three artifacts: your code, the write-up, and your Claude Code session files.
We collect these to understand how the class works with an agent — where people get stuck, which habits pay, what the tool is doing badly — so that we can provide feedback and adjust the course while it is running. They may also be used in grading, as the evidence behind the process claims in your write-up.
Claude Code already keeps every session on disk, so rather than exporting conversations one at a time,
package the directory it keeps them in. Sessions are stored per working directory, under a name that is
your project's path with every non-alphanumeric character replaced by a hyphen — so
/home/you/cs2680/a2 becomes -home-you-cs2680-a2. From your project directory,
this prints the right path:
Or just look at what is there and pick yours out — ls ~/.claude/projects/. Then archive
it, from inside projects/ so the paths in the archive stay tidy:
— with your own directory name in place of the example. On Windows PowerShell,
Compress-Archive -Path $env:USERPROFILE\.claude\projects\<dir> -DestinationPath a2-sessions.zip
does the same job. Submit the archive.
-, which tar, zip, grep and du all read as
the start of a command-line flag — so tar -czf out.tar.gz -home-you-cs2680-a2 fails with
an unhelpful error. Prefix the name with ./, as above, and everything works.
Include a directory for each place you did assignment work; if you worked in two repositories, that is two
directories. Inside, you will find one .jsonl file per session, a folder of overflow
tool-results for the larger ones, and a memory/ folder of notes the agent kept
for itself. Leave all three in — the transcripts reference the tool results, and the memory notes are
some of the most interesting material in the archive. Expect tens of megabytes per assignment, compressing
to roughly a third of that.
cleanupPeriodDays at startup, and Assignment 5 runs for over five
weeks — so the sessions from the week you started can be gone by the week you submit. Either export as
you go, or raise the retention now by putting { "cleanupPeriodDays": 180 } in
~/.claude/settings.json.
You are handing these sessions to us, so treat a Claude Code session as something you will publish to an
audience of one. And note what the archive actually contains: not just what you typed, but every file the
agent read, every command it ran, and everything those commands printed. If Claude ever opened your
.env, that file's contents are in the transcript. This is a wider surface than a conversation
you can skim, which is why the scan below matters.
Before you start work, and again before you submit:
.env file
that is in your .gitignore, and let your code read them — which is what you should be
doing anyway, and is the habit Assignment 2 will test.Scan before you archive. From ~/.claude/projects, against your own project
directory — note the ./ again:
That catches the common shapes — OpenAI and Anthropic-style keys, GitHub tokens, AWS access keys,
PEM private keys — and prints the files containing them. It is a smoke test, not a guarantee: it knows
nothing about your database password or your lab's internal hostnames. Silence means the obvious things are
absent, not that you can skip thinking. The memory/ folder is the one part short enough to read
properly, so read it.
Alongside the per-assignment upload, Claude Code can report usage metadata continuously to a course collector. Please switch it on in week one and leave it on for the semester. It gives me a picture of how the class is getting on while the course is still running rather than three weeks after each deadline. It does not replace the session archive required with each assignment.
Put this in ~/.claude/settings.json — your user settings, not a
project's .claude/settings.json, which would end up committed to a repo you push:
If the file already exists, merge the env block into it rather than overwriting the file. Do
this on every machine you work on, the HPC included — a node that cannot reach the endpoint simply
reports nothing.
You should be able to check this rather than take my word for it, so here is the whole of it. Each request and each tool call produces a record carrying a timestamp, which tool ran, whether it succeeded and how long it took, token counts, cost, the model, your Harvard email, and ids that group records into a session.
No prompt text, no code, and no command strings. Content logging is off by default and
the course configuration above does not turn it on: the prompt field arrives as the literal string
<REDACTED>, and only its length is recorded. Nothing you type, nothing Claude writes,
no file contents, and no Bash commands leave your machine through this channel. That makes it a
narrower disclosure than the session archive you upload with each assignment, not a wider one.
See it for yourself before sending anything anywhere. Set
"OTEL_METRICS_EXPORTER": "console" instead of "otlp", run a session, and Claude
Code prints its telemetry to your own terminal — exactly the records the collector would receive.
Switch it back to "otlp" when you are satisfied.
For feedback and for steering the course: which tools the class leans on, where sessions fail, what an assignment actually costs in tokens. It is not an attendance or effort record. Timestamps show when people work, and I am not grading anyone on working late or on how many prompts they sent — prompt counts have no right answer, and a metric that had one would just become a target. Grades come from the submitted work.
If you would rather not run it, tell me and that is the end of it — it costs you nothing in the grade, and the per-assignment archive already covers what the assignments are marked on. Do say so though, because a machine sending nothing looks the same from here as a machine that was never set up.