Agentic desktop AI (Cowork): from empty folder to GitHub
2026-04-29
§ Tutorial: Pre-class checklist
One thing only:
We start from an empty folder today. Nothing to clone, nothing to push ahead of time.
The first ten minutes of class are for stragglers. If Cowork is not installed, say so immediately.
VS Code is our IDE today. If you have not used it for Git yet, the Source Control panel is the third icon on the left sidebar.
§ Tutorial: Where we are
Session 6: chat. Probabilistic pattern-completer, copy-paste interface. No file access. No code execution.
Mode A vs Mode B:
Chat forced Mode B by accident. Cowork does not. Every prompt today bakes Mode B in explicitly.
§ Tutorial: What changes
Three capabilities shift at once.
All three are upgrades. All three are new surfaces for silent damage.
The guardrail is Git. git status and git diff are your only reliable audit trail of what the agent actually did.
§ Tutorial: Chat and Cowork, side by side
Same underlying model. Different surface, capabilities, risks.
| Dimension | Chat (Session 6) | Cowork (today) |
|---|---|---|
| Context | Manual paste | Automatic from folder |
| Read files? | No | Yes |
| Run code? | No | Yes, sandboxed |
| Edit files? | No | Yes, directly |
| Model “knows” | Only what you typed | Full files, real errors |
| Audit trail | Git commit of pasted code | Git diff of touched folder |
| Friction | Copy-paste fatigue | Permission + trust decisions |
Capability goes up. Friction goes down. Risk goes up. Git turns that risk from catastrophic to annoying.
§ Tutorial: What Cowork is good at · What Cowork is bad at
Good:
.gitignore, folder layout, renv setup)Bad:
rvest functions, untested selectors)§ Tutorial: Today’s arc
With the framing in place, here is the arc for the next 75 minutes:
.gitignore template)..Rproj).scrape_dyson_cowork.R. Verify, commit, push.pipeline_dyson.R: parse, classify, plot, summarize. Verify, commit, push.First half feels like Session 6 at speed. Second half is something chat could not have finished.
§ Tutorial: Create the repo on GitHub
In your browser, go to https://github.com/new. Fill in the form:
aem7010-aiCowork and Claude Code exercises for AEM 7010Click Create repository. You land on github.com/<your-handle>/aem7010-ai.
The repo exists online. Nothing exists locally yet. That asymmetry is the point: GitHub is the canonical source.
⟶ Switch to the tutorial: Create the repo on GitHub (~2 min).
§ Tutorial: Clone in terminal
On the repo page, click Code → copy the SSH URL (or HTTPS if you skipped Session 5’s SSH setup).
Open a terminal. Replace <your-handle> and run:
Sanity check:
HTTPS form, if SSH not set up: git clone https://github.com/<your-handle>/aem7010-ai.git
§ Tutorial: Open in VS Code · Grant Cowork access
Open the cloned folder in VS Code: File → Open Folder → ~/github/aem7010-ai. Or from the terminal: code ..
Grant Cowork access to that folder. Confirm three things:
Paste the scaffolding prompt (full text in the tutorial). It asks Cowork for two things: one paragraph appended to the README, and an aem7010-ai.Rproj file. No subfolders pre-created. Scripts will write into code/, data/, and output/ as they need them: functional names, not session-numbered.
Why the .Rproj? Double-click it and RStudio opens the repo with the working directory set to the repo root. Every relative path (data/..., output/...) resolves correctly without setwd(). Reproducibility, free.
Then commit and push: stage, message “Add RStudio project and project description”, commit, sync. Refresh github.com to confirm two commits exist.
⟶ Switch to the tutorial: Open in VS Code, grant Cowork access (~5 min).
§ Tutorial: Shared prompt handout
We all paste the same prompt. Four design choices matter:
.gitignore”)Mode B enforcement is load-bearing. Do not paraphrase the prompt.
⟶ Switch to the tutorial: Shared prompt handout. Read it before pasting.
§ Tutorial: Paste and wait · Verification checklist
Paste the prompt. Cowork writes code/scrape_dyson_cowork.R and produces data/placements_dyson.csv. Do not trust the row count it reports.
Five-step verification (all must pass before commit):
code/scrape_dyson_cowork.R?data/placements_dyson.csv has ≥ 80 rows and the 4 columns in the right order?If a check fails, ask Cowork for a patch, not a full rewrite.
§ Tutorial: Commit and push #1
Source Control panel:
code/scrape_dyson_cowork.R and data/placements_dyson.csv.Cmd+Enter).Open github.com/
§ Tutorial: Build the pipeline
Where Session 7 goes beyond Session 6. The pipeline below is a small project that chat could not have finished in 75 minutes.
code/pipeline_dyson.R reads the CSV from the scrape and does four things:
placement into position_title and institution on ” at “.academic | government | industry | other by keyword rules.output/figures/placements_dyson_by_year.png.output/findings_dyson.md with totals, counts, year range, top institution.The CSV is the boundary. Either side can be rerun without the other.
§ Tutorial: Shared pipeline prompt
Same lockstep rhythm. Paste the full prompt from the tutorial. It specifies:
code/pipeline_dyson.R, output/figures/placements_dyson_by_year.png, output/findings_dyson.md.message() reports. Parsing failure count, then category counts. These are what you reconcile against findings.md..gitignore or README.md.⟶ Switch to the tutorial: The pipeline prompt. Read before pasting.
§ Tutorial: Verification checklist (pipeline)
Five checks. All must pass before the second commit.
pipeline_dyson.R in RStudio (project open), Restart R + Source. Runs clean?output/figures/placements_dyson_by_year.png exists and looks right?output/findings_dyson.md exists, and its numbers match the messages and the CSV?If a check fails, ask Cowork for a patch on that specific failure. Do not accept a full rewrite.
§ Tutorial: Commit and push #2
Source Control panel:
code/pipeline_dyson.R, output/figures/placements_dyson_by_year.png, output/findings_dyson.md.Click findings.md on github.com. It renders as a small report. The numbers came from the data, not from the agent’s prose. That is the artifact.
§ Tutorial: Stretch
If you finish early:
“Cowork, scrape Berkeley ARE PhD placements into
data/placements_berkeley.csvusing the same column contract. Run the same pipeline on it. Produceoutput/findings_comparison.mdwith category counts side by side for Cornell and Berkeley.”
Two things to watch:
§ Tutorial: Debrief
The module is not about three tools. It is one ladder. Each rung adds one new dimension.
| Rung | Tool | Task scope | Pipeline depth | Workflow style |
|---|---|---|---|---|
| Session 6 | chat | one school, one script | scrape only | manual paste |
| Session 7 (today) | Cowork | one school, small project | scrape + parse + classify + plot + summary | interactive, you watch |
| Session 8 (Monday) | Claude Code | five schools, study | same pipeline shape | delegated, you review the diff |
Today added pipeline depth. Monday adds scope and delegation. Your Session 7 code is the seed of Session 8.
The other lesson, every week. Notice when a tool’s constraints were protecting you, and replace them with discipline when they fall away.
| Behavior | Session 6 (chat) | Session 7 (Cowork) |
|---|---|---|
| Running the script | You had to | The agent can, so you have to choose to |
| Verifying the output | You had to | The agent reports; you have to insist |
| Saving an artifact | Only as a pasted script | As script or displayed table; Mode B is your rule |
| Editing files | You, one paste at a time | The agent, many files, possibly silently |
| Ending the session | Clean by default | Requires git diff to know what happened |
The more capable the tool, the more of the verification reflex you own directly.
Next Monday (Session 8): Claude Code. Terminal-native, git-aware, scales to many files. Replaces the keyword classifier with an LLM, scrapes five schools at once, produces a write-up.
For Monday:
github.com/<your-handle>/aem7010-ai.curl -fsSL https://claude.ai/install.sh | bash. Windows (PowerShell): irm https://claude.ai/install.ps1 | iex. Verify with claude --version. Full guide at https://docs.claude.com/en/docs/claude-code/setup. Free Claude account required.aem7010-ai repo open in a terminal at the repo root before class.The bottleneck is no longer typing. It is verification.
Companion site: arielortizbobea.github.io/aem7010