Rick ShankHow I work with AI

How I work with AI

Anyone can show you what AI made. This page shows what I built around it, and the records of when it was wrong.

Digital and AI programs, co-led
$150M+
European program, led directly
$45M
Control frameworks put in place
SOX · HIPAA/PCI · GDPR · CMMC L2
M&A diligence
$20B+

What I actually use it for

Not demos. These run every week, on my own equipment and my own data.

Build

A ’65 Shelby Cobra replica, built in my shop

A Factory Five MK5 Roadster - a road-going kit car I’m assembling, wiring and welding myself.

About 1,000 pages of manuals, video transcripts and forum threads in a local search index. I ask where a bracket goes and get the answer with the page it came from.

Build

The builder community

Hundreds of other builders log their cars on the Factory Five forums.

Daily checks of the build threads I follow, cross-posts of my own build log, and a local vision model that reads forum photos to catalogue paint schemes.

Shop

A knee mill and a lathe

A Precision Matthews PM-935TS vertical knee mill and a full-size metal lathe, for the parts the kit doesn’t include.

Speeds and feeds for the cutter and material, tooling notes, a log per part, and a maintenance history for the mill.

Shop

CAD driven by a model

Fusion 360 for parts like a brake reservoir cap with a custom M44x4 thread.

The model writes and runs the Fusion scripts that build a parametric part. I check the geometry, then print or machine it.

Shop

3D printing

A Bambu P1S with a four-spool AMS - PLA, PETG, ASA and glass-filled ABS.

Calibration values per filament, a print log with the cause of each failure, and prep of models for MakerWorld.

Racing

Sim racing on iRacing

A purpose-built sim-racing cockpit - direct-drive wheel, load-cell pedals, triple 240 Hz screens. Mazda MX-5 Cup.

Lap targets for my rating, track prep sheets with braking points, and telemetry against a faster reference lap.

Racing

A sim-racing PC that must not stutter

A months-long fight with frame stutter on the racing PC.

Run as an investigation - one change per test, scripted checks that grade themselves, and a report I read after the session.

Racing

Sprint karting

Real karts, league nights at the local track.

Session logs, lap times, setup history and data-logger analysis, so each change has a result next to it.

Money

Planning, not just tracking

Net worth, spending, cash flow, Roth conversions and a retirement simulation.

A quarterly review reconciles five sources and flags allocation drift. It sizes a trade. It doesn’t place one.

Money

Paper, filed for me

Statements, tax forms and receipts arrive as scans.

Text is read, the document is classified, renamed and filed, and the spreadsheets update. Restricted documents never go to a cloud model.

Home

A home server I can talk to

An Intel N100 running Ubuntu - home automation, network-wide DNS filtering, media, backups.

I ask why a service stopped or what the garage temperature is doing. Automation changes come to me as a dry run and a diff to approve.

Home

Local models on my own GPU

My sim-racing PC doubles as a model server when I’m not racing.

Private and free work runs locally - photo reading, second-opinion code review. It shuts down fully before I drive.

Home

Meals and training

Weekly meal plans, groceries, batch cooks, workouts.

A plan from what I like and what’s in the freezer, a grocery list, and a cook sheet per dish.

Home

This website

rickshank.com, moved off Squarespace in a day.

DNS moved with a record-by-record diff before and after. Mail stayed up. Nothing went live without my approval.

What I built, in six stages

Each stage started because the one before it broke.

Stage 01

Conversation

Asking a model things and acting on the answers.

What I built

  • Research on parts, tools and settings
  • Drafts I edited by hand

What broke

I couldn’t reproduce an answer a week later. Nothing recorded what I asked or what came back.

Stage 02

Repeatable workflows

Packaged procedures, so a task runs the same way twice and a weaker model stays on rails.

What I built

  • More than 40 packaged procedures - meal plans, lap targets, monthly money, forum capture
  • About 20 work areas, one per subject, each with its own rules and memory

What broke

Two finished PDFs had their generating scripts in a temp folder. The documents survived. They could never be made again.

Stage 03

My own data

Health, spending and race results moved out of notes and into databases with schemas.

What I built

  • A health database - ring, watch, food
  • Spending workbooks and a net worth ledger
  • Race and karting session logs

What broke

A health report compared two different heart-rate measures and showed a 61% drop that didn’t exist.

Stage 04

My own tools

Connectors that let the model read my house and my documents.

What I built

  • Tools for the home server - automation, DNS, media, backups
  • Search over the car build manuals
  • A link from the model into Fusion 360

What broke

A production backup script still had three plaintext secrets in it. An earlier clean-up missed them. A later fix pass found them.

Stage 05

Governance

Risk tiers, a checklist per tier, change records, data rules, and deploys from a commit.

What I built

  • A tier for every script and a checklist for every tier
  • Commit trailers - tier, deployed, approver, rollback
  • Data classes - what a cloud model may read, and what only a local one may

What broke

The same validation script existed in three places and had drifted apart. Fixing one copy didn’t fix the two that ran.

Stage 06

Delegated work

Scheduled jobs that gather, summarise and file without me starting them.

What I built

  • Daily forum and video checks
  • Weekly digests to my inbox
  • Self-healing checks on the home server, with alerts

What broke

A memory file held a fixed portfolio number, not a pointer to the live one. It said 94.1% for months. The real figure was 84.5%.

The stack

Cloud models where they earn it. Local models where the data or the cost says so. Open a layer to see where it’s used.

ModelsClaude OpusClaude SonnetOpenAI CodexOllamaqwen3-vlnomic-embed-text

Cloud models plan, write and check. Local models on the sim-racing PC’s GPU read photos and embed documents. One model never checks its own work.

AgentsClaude CodeScheduled agentsSubagent fan-outPackaged skillsHandoff files

A lead session splits big jobs across subagents and verifies what comes back. Scheduled runs do the daily and weekly checks. Two agent tools share one project through handoff files.

RetrievalRAGChromaFastAPIMCP servers

Search over about 1,000 pages of car build material, with the source page in each answer. MCP servers connect the model to the home server, Fusion 360 and lap telemetry.

DataSQLiteJSON + schemaCSVExcelMarkdown

Health, race and spending data in databases with schemas. Reports built from a JSON file with a fixed schema. Plain Markdown for rules and memory, so a person can read every one.

CodePythonPowerShell 7BashFusion 360 APIOpenSCADGit

Every script in one Git repo - 742 commits and 283 change records so far - with a risk tier, a checklist and a deploy tool that checks by hash.

InfrastructureUbuntu on Intel N100DockerHome AssistantPi-holeTailscaleSynology NASRTX 4090 sim-racing PC

The home server runs the tools and the scheduled jobs. The NAS holds data and reports. The sim-racing PC is the local model server when I’m not racing.

PublishingAstroCloudflare WorkersCloudflare DNSGitHub

This site - static pages, no theme, no tracking. Each push builds and deploys. DNS changes get a record-by-record diff before and after.

Exhibits

Exhibit 01 Verification

The audit that sent its own fixes back

I inventoried 431 scripts I’d written over several years and logged 105 findings. One model wrote the spec and checked the result. Another made the fixes against sandboxed copies. The checker rejected or sent back about one in three fixes - this one would have wiped karting results I logged by hand.

Called at work: Separation of duties

finding  F40   severity S0
issue    live crawler overwrote hand-logged
         karting results with weaker values
fix 1    fix agent: rank-gated merge
review   REWORK - a blank page cell would
         still null a real value
fix 2    reviewer added the guard, 2026-08-16
status   deployed

pass totals: ~1 in 3 fixes rejected or reworked

Exhibit 02 Data governance

Some documents never reach a cloud model

Medical and payroll documents are a restricted class. A cloud model never reads them. A local script can, and it reports back counts only - never names, amounts or text.

Called at work: Data classification and handling

# data rule, set 2026-09-24
Medical documents, W-2s, payslips and other
payroll documents never go to a cloud AI
service. That covers the file and its text.

A local script may process them only when
everything it prints to the session is
counts or aggregate scores.

How a document moves

Who may read it decides where it goes

A local program reads every file first. A cloud model sees only what it clears. Select a step.

Intakescanner, email, by hand
Local gateon my Mac · no model · no network
Cloud model may readcleared files only
Local onlyno AI session can see it
Intake - Scanner - Normal button
The scanner has two buttons. Normal sends the scan to a cloud folder that a session can list and download.
Intake - Scanner - Private button
Private sends the scan to a folder that no session lists or downloads from. It goes straight to the private folder on my Mac.
Intake - Email receipt (label)
I put a label on a receipt email. The pipeline saves the PDF into the same inbox, so it meets the gate like everything else.
Intake - Dropped in by hand
A file I put in the inbox myself. Same rule - nothing reads it before the gate.
Local gate - Local gate reads every file
A small program on my Mac runs every minute. It reads each new file and moves it to cleared or to the private folder. It uses no model and makes no network call. Why it exists - twice, a scheduled run read a medical receipt and a payslip. A session can’t decide a file was safe after it already read it.
Local gate - Verdict logged by md5
Each file gets one line - its fingerprint and the verdict. A session may only work on a file whose fingerprint the log says is CLEARED.
Cloud model may read - Cleared only
A session reads files in the cleared folder, and only when the log matches. Anything else in that folder is reported, not touched.
Cloud model may read - Duplicate check
Same fingerprint as a file already filed? It goes to duplicates, not into the books twice.
Cloud model may read - OCR
Scans get a hidden text layer, so the filed PDF stays searchable.
Cloud model may read - Classify
A model reads the first two pages and says what the document is, how sure it is, its file name and its folder. Not sure means it stops.
Cloud model may read - My review queue
Low or medium confidence lands with me. A mis-filed document is worse than an unfiled one.
Cloud model may read - Extract
Only high-confidence documents get the second pass, with a prompt made for that document type.
Cloud model may read - File, rename, update
The file gets its name and folder, the spreadsheets update, and the manifest records what happened and where it came from.
Cloud model may read - Second check
If a cleared file turns out to have payroll or medical text, the session stops, marks it PRIVATE and hands it back to the gate. The gate moves it without reading it.
Local only - Private folder
Outside every folder a session is connected to, on purpose. The file-transfer tools refuse it by name too.
Local only - Local script only
If a number is needed from one of these files, a local script reads it and reports counts or totals. Or I give the number myself.

Exhibit 03 Data governance

The control that fired

A health report compared a 33.3 ms baseline with a 13.0 ms week and showed a 61% drop in heart rate variability. Both numbers measure variability, but not the same way - one is SDNN from a watch, the other RMSSD from a ring. The fix was a database that refuses to blend them.

Called at work: Data quality control

# health-db/export_recent_md.py
Scale handling: the "HRV Avg" column and the
baseline line both carry ONE scale ...
cannot blend SDNN and RMSSD, which is the
failure this database was built to stop.

before: 33.3 ms SDNN vs 13.0 ms RMSSD
        reported as -61%. Both were normal.

Exhibit 04 Data governance

The number that went stale

A memory file held a fixed portfolio figure, not a pointer to the live one. It said 94.1% equities for months. The real figure was 84.5%. The copy is gone - the file points at the computed source now.

Called at work: Single source of truth

- Apr 2026: 94.1% equities / 4.1% bonds
+ see the computed allocation file

  live figure at the fix: 84.5%

Exhibit 05 Data governance

Data never goes into the code repo

A commit gate checks every file and refuses data and credentials by type. It reports every failure, then exits once, so nothing slips through on a retry. Quarterly money reports close when the quarter does and are built from one JSON file with a fixed schema.

Called at work: Data loss prevention, period close

B3 ext  [file]  '.csv' is on the hard-deny list
        this is data or a credential.
        It does not go in git.

hard-deny: .db .sqlite .xlsx .csv .json
           .pdf .png .pem .key  (and more)

Exhibit 06 Change control

Every change says who approved it and how to undo it

Each script has a risk tier, and each tier has a checklist. Each commit ends with four lines - tier, deployed, approved by, rollback - and the changelog is built from them. 742 commits and 283 change records so far.

Called at work: Change management

healer: new check nzbget_state - alert when
NZBGet stays paused 15 min

Change record:
  meta/changes/2026-10-11-healer-nzbget-state.md

Tier: T2
Deployed: yes
Approved-by: Rick
Rollback: d7ea974

Exhibit 07 Change control

What runs is what was committed

Deploys go out from a commit, get checked by hash, and stop if a file arrives without the right permissions. Copying a script by hand isn’t allowed.

Called at work: Artifact provenance

deployed [script] -> [target]
  mode 0o755
  commit caa9cf8  stamp written  hash verified
  (stamp stripped)
exit=0

Exhibit 08 Secrets

Three secrets an earlier clean-up missed

A production backup script still had a password and two API keys in plain text. A credential clean-up in July missed them. A later fix pass found them. Docs now name a secret and where it lives - never its value.

Called at work: Credential hygiene

finding  F80   severity S1
issue    3 hardcoded plaintext secrets in a
         production backup script
fix      read from root-only credential files
keys     rotated, fix deployed
status   closed

Exhibit 09 Human in the loop

Nothing goes public without a yes

This site and its DNS stay in confirmation mode for good. The model drafts, builds and checks. It doesn’t publish a page or change a record without my approval at the time.

Called at work: Human-in-the-loop approval

change    rickshank.com nameservers
          squarespace -> cloudflare
diff      14 = 14 records, PASS
mail      tested both ways, PASS
approval  Rick, 2026-09-29
applied   yes

Dark panels are real records, redacted. Paths, hosts and names are replaced with [brackets].

What this is called at work

Data governance

Classes for what a cloud model may readData classification

Unit check before two metrics are comparedData quality control

One computed source, no pasted copiesSingle source of truth

Fixed schema, closed quarters, data kept out of codeLineage, period close, DLP

Change management

Risk tiers and a checklist per tierChange risk classification

Approver and rollback on every commitChange records

Deploys checked by hash, never copied by handArtifact provenance

One copy of each script, drift checkedConfiguration management

AI controls

One model writes, another verifiesSeparation of duties

Rules for what a weaker model may not decideTiered escalation

An approval gate before anything goes publicHuman in the loop

Secrets named in docs, never written in themCredential hygiene

The honest part

None of this is a regulated platform. No compliance regime, no other engineers, no uptime obligation. The blast radius is one person.

Same problems. Smaller scale. Nobody else to solve them.