Automating Without Overwhelming Yourself 4 of 6 · 2:45–3:05
4 · 2:45–3:05 · live in Claude Code

Three live demos

One demo per project shape. Each one builds the smallest useful step, on dummy data, with an agent that asks before it acts.

How the demos run

One session

I start Claude Code once, inside the 03_demos folder. It works only there.

House rules load first

CLAUDE.md is the folder's SOP. The agent reads it before my first prompt.

Watch it ask

A permission prompt before it writes a file, and another before it runs a command. I say yes once each time.

All dummy data

Whatever the agent reads goes to the model. So today is fake data, and client data stays in approved tools.

The house rules it reads first (CLAUDE.md)

Everything in this folder is dummy data made for a workshop. Treat it as if it were real.

  • Work only inside this folder. Don't read or write anywhere else.
  • The CSV files you were given are originals. Never edit them; write new files next to them.
  • Before you run any code, explain in plain English what it will do.
  • Put exact checks (duplicates, blanks, formats, dates) in code. Use your own judgment only where I ask for it, and say which is which.
  • When a row doesn't fit the rules, mark it "needs review" with a reason. Don't guess.
  • Never send email, post, or upload anything.

Codex reads the same rules from AGENTS.md.

Try the demos yourself. The demo folder has the house rules, the three prompts and the data.

Open the demo folder on GitHub ↗ Download everything (.zip)

Or clone it: git clone https://github.com/tinalasisi/automating-without-overwhelming-yourself.git, then open Claude Code or Codex in site/demos and paste a prompt.

Run a demo on your laptop

step by step

Tell it where your copy of the repo is and which tool you use. It writes the exact commands and the prompt for you.

Demo 1 Intake → triage

6 min

Something arrives. A rule or a person decides. A record gets written.

For

Zell Entrepreneurship Clinic: it's your form.

ZellMTAMichigan DiningOVPR limited submissionsOakland FOIACAI

Smallest useful step

Every application gets a status, so nobody gets lost.

Data

16responses

demo1-intake/form_zell_application_responses.csv

Exported from a law clinic's intake Google Form. The original stays unedited.

Prompt 1 · paste into Claude Code
Look in demo1-intake. form_zell_application_responses.csv is 16 responses exported from a law clinic's intake Google Form. It's the original, so don't edit it.

The smallest useful step: every application gets a status, so nobody gets lost.

Write a short Python script, triage.py, that writes pipeline.csv with every row plus three new columns: status, review_reason, and flag.
- status is "new" by default.
- Change it to "needs review" and give the reason if: the same email address already applied in an earlier row; the business description is blank; the applicant says they are not a student; or they ask for help with a patent (this clinic doesn't do patents).
- If the free text mentions a date or says "urgent", copy that phrase into flag. Don't act on it.

Before you run anything, explain the script in plain English. Then run it and show me only the rows that need review or have a flag.
Optional second beat · AI on top of the rules
Now add a summary column: for rows with status "new" only, one line naming the business and the legal help it needs. Don't change any status.

If we run it: summaries on "new" rows only, and no status changes.

Watch for

  1. The plain-English explanation, before any code runs.
  2. A request to create triage.py. That's a write permission.
  3. A request to run python3. That's a run permission.
  4. Only the rows that need review or carry a flag.
Reveal: what it should find

The script decided nothing that should stay manual. Rules are free and repeatable, and "needs review" beats guessing.

Map it to your project

  • ZellThis is your pipeline. Each submission lands as a row with a status.
  • MTAThe eligibility rule. Eligible, not eligible, or needs review.
  • Michigan DiningThe next step is an AI memo draft for Kenzie to review.
  • OVPRThe rubric comes first.
  • Oakland FOIAExact duplicates.
  • CAIThis is your intake form.
Speaker notes
  • Pace: about 6 minutes, 2:45 to 2:51. Drop the optional second beat if it runs long.
  • Point out three moments: the plain-English explanation, the write request for triage.py, the run request for python3. Answer yes once each time.
  • Say: the script decided nothing that should stay manual. Rules are free and repeatable, and "needs review" beats guessing.
  • The second beat is AI on top of the rules: summaries only, no status changes.
  • If it stalls, press Esc and open the backup: 05_instructor-only/demo-backups/demo1_pipeline.csv. The lesson is the same.

Demo 2 Pile → catalog

6 min

Find it later: capture, name, retrieve.

For

Ginsberg Center archive: exactly this.

GinsbergFJA staff AI portalOakland County

Smallest useful step

A catalog someone could actually search.

Data

25files listed

demo2-catalog/shared_drive_dump.csv

A listing from an old shared drive: name, date modified, folder, size, first line.

Prompt 2 · paste into Claude Code
Look in demo2-catalog. shared_drive_dump.csv lists 25 files from an old shared drive: name, date modified, folder, size, and the first line of each file. Work only from this listing. Don't open, move, or delete anything.

The smallest useful step: a catalog someone could actually search.

Build catalog.csv with one row per file and these columns: topic (a few words), version_group (files that are versions of the same document share a group name), keep (yes for the one version worth keeping in each group), duplicate_of (for exact copies), pii (yes if the name or first line suggests student IDs or other personal information), and junk (system files).

Use code for the exact checks: duplicates, junk files, PII keywords. Use your own judgment only for topic and version_group, and tell me which columns came from which. Then list the files a person should look at before anything gets indexed, and why.

Watch for

  1. It works from the listing only. Nothing gets opened, moved, or deleted.
  2. Code for the exact checks: duplicates, junk files, PII keywords.
  3. Judgment only for topic and version_group, and it says which columns came from which.
  4. A list of files a person should look at first, with reasons.
Reveal: what it should find

Code handles the exact checks. Judgment is used only for topic labels. A person decides what gets deleted.

Map it to your project

  • GinsbergExactly this. The catalog is what makes Maizey useful.
  • FJAA prompt library is a catalog, with names, tags and owners.
  • OaklandRetention tags.
Speaker notes
  • Pace: about 6 minutes, 2:51 to 2:57.
  • Optional framing from deck 04: the System Graveyard, and keyword vs semantic search. Keep it to a sentence.
  • Say: code handles the exact checks, and judgment is used only for topic labels. A person decides what gets deleted. The catalog is what makes Maizey useful.
  • If it stalls, press Esc and open the backup: 05_instructor-only/ANSWER_KEYS.md (the shared_drive_dump.csv section).

Demo 3 Many sheets → one table

6 min

Two sources, one truth: join on a shared key, then act on the combined table.

For

Marsal gift funds: it's your shape.

MarsalWomen's BasketballFaculty Development

Smallest useful step

One table, one row per fund.

Data

2offices' sheets

demo3-one-table/funds_development.csv and funds_finance.csv

Both cover the same gift funds. The shared account number is written differently in each.

Prompt 3 · paste into Claude Code
Look in demo3-one-table. Two offices keep spreadsheets about the same gift funds: funds_development.csv and funds_finance.csv. Both are originals, so don't edit them. The account number is the shared key, but the two offices write it differently.

The smallest useful step: one table, one row per fund.

Write merge.py to build funds_combined.csv by joining the two sheets on the account number after cleaning up the format. Explain the matching rule in plain English before you run it. Then show me three lists: funds that appear in only one sheet; duplicate rows; and funds whose last stewardship letter is more than 12 months before today, 2026-09-27, or missing.

I don't think any of this needs AI. Tell me if you disagree.

Watch for

  1. The matching rule in plain English, before it runs.
  2. How it cleans up the account number before the join.
  3. Three lists: in one sheet only, duplicate rows, and letters overdue or missing.
  4. Whether it agrees that none of this needs AI.
Reveal: what it should find

A join, not AI. One clean table makes any Q&A tool work.

Map it to your project

  • MarsalOne table joined on account number. Maizey couldn't read the spreadsheets.
  • Women's BasketballOne sheet keyed on player, instead of three entries.
  • Faculty DevelopmentRank by interests by not-yet-attended gives a match list.
Speaker notes
  • Pace: about 6 minutes, 2:57 to 3:03.
  • Say: "A join, not AI." Marsal asked for AI, and Maizey couldn't read their spreadsheets. One clean table makes any Q&A tool work.
  • Your own example, if there's time: lab account statements plus reimbursements give a 45-day alert.
  • If it stalls, press Esc and open the backup: 05_instructor-only/demo-backups/demo3_funds_combined.csv.

What just happened

2 min

Rules went into code

Duplicates, blanks, formats, dates. Exact checks, written once, free to rerun.

Judgment calls stayed manual

Anything that didn't fit got "needs review" and a reason. Nothing was guessed.

Demo 3 needed no AI

A join on a cleaned-up key did the work.

After the break, you build your own smallest useful unit.

Break 3:05 to 3:20. Hands-on starts at 3:20.

Speaker notes
  • Pace: 2 minutes, 3:03 to 3:05, then break.
  • Three points only: rules into code, judgment calls flagged for manual review instead of guessed, and the third demo needed no AI at all.

Your notes: the demos

saves as you type

Type as you go. It saves in this browser. The My notes button (bottom right) downloads everything from every page as one file.