Carolina Pintos Therapy · Operations Workspace

Your clinic runs on real patient data. This workspace never sees any of it.

And you lose almost nothing by doing it that way. Here is the whole system on one page, so you can come back to it without having to remember a call.

The one rule

No real patient data enters this workspace. Ever.

Claude does not read it, act on it, or send it — whatever file, message, filename, or commit it happens to sit in.

Your Claude plan has no Business Associate Agreement, which is the contract that would let a vendor handle protected health information on your behalf. Without it, patient records are not covered. That is a fact about the plan, not a flaw in the tool, and the honest response is to keep the data out rather than hope nobody pastes it in.

You could just try to remember that. Everybody intends to. What follows is the same rule, built into the software so it does not depend on anyone's memory at four in the afternoon.

The shape of it

Two lanes, one door between them

Identity stays on the left. Everything you actually analyze lives on the right. One command is the only way across, and it never carries a name with it.

Outside the workspace

Real people. Never opened here.

square_export.csv

The raw booking export. Names, emails, phones, dates of birth.

reid_map.SECRET.csv

The only file that can turn a code back into a person. Lives in a private folder in your home directory, readable by you and nobody else.

your inbox, your phone

Where a real name gets attached to a message, at send time, outside all of this.

De-identify /clinic-ops:deidentify-export
Inside the workspace

Codes and operations. Work freely here.

appointments_deidentified.csv

Same rows, same appointments, no identities. Each patient becomes a stable code like PT-0374BC4436B1.

weekly reports, analysis

No-show rates by location, by service, by staff member. Repeat no-shows. Booking drop-off.

message drafts

Written with [PATIENT_NAME] where the name goes. You fill that in outside, when you send.

The same patient always gets the same code, in every export, forever. That is what lets you say "this person has missed three appointments" without anyone in this workspace knowing who they are.

What it costs you

Almost nothing, and that is the point

De-identifying is not the same as deleting. The columns that answer operational questions are exactly the ones that carry no identity, so they all survive the trip.

Dropped at the door Kept, in full What you can still answer
given_name, family_name location Which location has the worse no-show rate
email_address, phone_number service_name Which treatments get cancelled most
date_of_birth team_member Whether load is spread evenly across staff
customer_id, booking_id start_at, status When cancellations cluster, and how late they arrive
notes with names in them intake_form_completed Whether a missing intake form predicts a no-show

That last row is not hypothetical. On the sample data we will use together, patients with no completed intake form missed appointments at nearly twice the rate. Small sample, synthetic data, so it is a hypothesis rather than a finding. But it was found without a single real name being involved, which is the whole argument in one line.

The guard

Six things get checked, before anything happens

This runs automatically on every file opened, every command run, and every message sent out. You do not turn it on and you cannot forget it.

01

The filename

Names that read like raw patient data, in English and Spanish.

patient_list.csv · pacientes.csv · *.SECRET.csv
02

The columns

The actual header row. This is the one that does the work: anyone can rename a file, nobody strips the columns out.

email_address · pt_dob · Customer Name · fecha_nacimiento
03

The values

Things shaped like a social security number, a real email address, a phone number, even when the columns are labelled innocently.

123-45-6789 · 713-555-0134
04

Formats it cannot read

Spreadsheets and databases cannot be inspected from the outside, so they are refused rather than waved through. Export to CSV first.

.xlsx · .parquet · .numbers
05

Commands that move data

Anything that would push a file off this machine. The destination is the part nobody can vouch for.

curl · scp · upload · git push
06

Messages going out

Slack, Gmail, Drive, anything fetched from the web. These carry their contents directly, so the contents get read before they leave.

a name in a draft · a phone number in a URL
The part that matters most

When it is not sure, you decide. Not the AI.

Three possible answers, and only one of them is yours

Blocked

Clearly patient data. It does not happen, and no approval makes it happen.

Paused, for you

Might be a patient, might be a supplier. It stops and shows you exactly what would be sent and to whom.

Allowed

Ordinary work. Coded data, normal commands, nothing personal. No interruption.

On a pause, Claude is instructed in writing that it may not approve the send on your behalf, may not reword the message and try again, and may not write it off as a false alarm. If you are not around, the answer is no. That judgment call is exactly the one that should never be automated, so it is not.

One more thing worth knowing: if the guard itself ever breaks, it blocks. A guard that fails open would be decoration.

Where things live

Five folders, each with one job

CLAUDE.mdthe rules, read first, every session
registry/which process uses which steps, and whether it touches patient data
directives/how each recurring job is done, in plain language
execution/the scripts that do it the same way every time
learnings/what surprised you, and what became a permanent rule
.envcredentials. Never opened, never printed, never shared

The split matters more than it looks. Anything that must give the same answer every time belongs in a script, not in a conversation. Judgment stays with you and with Claude. Arithmetic does not.

Why it gets better

A log that refuses to grow into something nobody reads

Something surprises you

An error takes two attempts, a tool behaves oddly, an instruction turns out to be stale. It gets written down in the same session, not later.

The log fills up

At twenty entries it stops asking politely and requires a clean-up pass before anything else is added.

The keepers move up

The lessons worth keeping become permanent rules. The rest is archived. The active log goes back to empty.

Capture is the easy half and it is the half most systems stop at. The log grows, nobody reads it, and the lessons in it stop changing anything. Bounding it is what keeps it alive.

Being straight with you

What this is not

If you ever find yourself looking at something that is obviously patient data and nothing stopped you, stop yourself, and tell us what got through. That is how the list of things it recognizes gets longer.

Built by Argentle for Carolina Pintos Therapy. Everything shown in the walkthrough uses synthetic data generated on your own machine. No real patient record was used to build, test, or demonstrate any part of this.