Skip to content
James Cronin

How I work with AI

I design hardware and write software, and most of it now goes through a model. This page is the method: the rules I hold it to, the skills I wrote for Claude Code, the tools, and the hours, counted live.

Run a skillUpdated 6 Nov 2026.
Draw a digit
0123456789784 in964810 out

Loading the network, 106 KB.

A small neural network. Runs on your device; nothing is sent anywhere.

Rules I work by

Six rules, each learned on a real build and each enforced somewhere on this site.

How my agents are allowed to act

  1. The model only suggests; code I wrote decides what happens.

    I assume Claude can be fooled, so it never acts on its own. Plain code looks at each suggestion and decides, and anything that changes something waits for me to say yes. Enforced in Zeno.

  2. Nothing reaches another person without my Face ID.

    A typed yes could come from anyone holding my phone. Before an email goes or a call is made, my phone shows me who and what, and only my face approves it. Enforced in Zeno.

  3. Emails, web pages and files are data, never instructions.

    Text inside them can't steer the agent, and a question to the chat on this site can't change its rules from the inside. I test this on purpose: I wrote 23 believable scams and sent them Zeno's way. Claude went along with 7, and none happened without my approval. Enforced in Zeno and Ask James.

How I use AI to review my own work

  1. Two reviewers go over the same schematic without seeing each other's work.

    Claude and OpenAI's Codex have different blind spots. Codex found a battery cut-off problem Claude missed; Claude caught a back-powering path Codex missed. Enforced in Schematic Review.

  2. Every finding is checked against the datasheet before it reaches me.

    A confidently wrong finding is worse than a missed one. Codex once invented a chip pinout with complete confidence and called correct maths wrong, so nothing is reported until it has been checked against the datasheet or the netlist. Enforced in The hardware skills.

  3. The skills ask before any expensive run and default to cheaper models.

    A frontier model at maximum effort ran for 20 minutes and nearly used up my credits. Now each skill names the model and the effort and waits for a yes. Enforced in Schematic Review.

Six skills I wrote for Claude Code

A skill is a file of instructions that teaches Claude Code a repeatable job, and runs from a plain sentence. Pick one and run it. The stage follows the skill's own four steps.

>

Schematic Review: the schematic is exported to text, Claude and Codex review it separately, every finding is checked, and one merged report comes out.

  1. 1.Export the schematic, BOM, pin list and datasheets to text
  2. 2.Codex reviews in the background while Claude reviews in parallel
  3. 3.Every finding is checked against the netlist or a datasheet
  4. 4.One merged report: found by both, Codex only, Claude only

Schematic Review

Exports the netlist, ERC, BOM, pin list and datasheet text, then Claude and Codex each go over every pin and net against the datasheets and design intent without seeing each other's work. Claude then checks every Codex finding against the datasheet, because a confidently wrong finding is worse than a missed one, and nothing in the design changes until I agree.

Output: A ranked findings report, split into hardware changes and firmware rules, with nothing changed until approved

Call it with “Run a schematic review”, “Get a second opinion on this schematic” or “Scour the schematic before layout”.

Read the SKILL.md
---
name: schematic-review
description: Runs a full, independent two-reviewer design review of a KiCad schematic before PCB layout. Exports the netlist, ERC, BOM, pin list and datasheet text, then Claude and OpenAI Codex each review the whole schematic separately against the datasheets and design intent, and Claude verifies and merges both sets of findings into one ranked report (found by both / Codex only / Claude only). Never edits the schematic. Use when the user asks for a schematic review, design review, second opinion on a schematic, to check a schematic before layout, or to "panel" or "scour" a schematic for errors, even if they don't name the skill.
---

# Schematic Review

Two reviewers with different blind spots go over the same schematic independently, then their findings are
checked and merged. The goal is real errors found before copper, not a long list: every finding must be
verified against the netlist or a datasheet before it reaches the user. The review never changes the design;
fixes happen only after the user agrees to each one.

## 1. Gather the inputs
Find, and confirm with the user if anything is missing or ambiguous:
- the KiCad project folder (the one with the `.kicad_pro`)
- the pin list / intended netlist and the BOM (often `.xlsx`)
- the datasheets folder (PDFs)
- the design-intent document (architecture doc, requirements)

Tell the user that footprints that are not assigned yet will not be reported as errors.

## 2. Export everything to text
Run (creates the review folder; inside a git repo use `<git-dir>/schematic-review/` so it isn't committed):
```bash
python3 ~/.claude/skills/schematic-review/prepare.py <kicad_project_dir> <out_dir> \
  --xlsx <pin_list.xlsx> <bom.xlsx> --datasheets <datasheets_dir>
```
Outputs: `connections_by_part.txt` (every part, value, symbol, footprint, each pin → net — the ground truth),
`nets.txt`, `erc.rpt`, `schematic.pdf`, the spreadsheets as text, and `datasheets_txt/` (PDF text via macOS
PDFKit). Image-only PDFs come out empty: note them, and read those as images if they matter.

Also run the drawing check (missing junction dots at T-points and where 3+ wire ends meet):
```bash
python3 ~/.claude/skills/schematic-review/junction_check.py <kicad_project_dir>
```

## 3. Start Codex first, in the background (independent review)
**Cost check before launching.** A frontier model at max effort can run 20+ minutes and use a lot of credits.
Tell the user the model and effort and get a yes. Defaults:
- `gpt-6-astra` at `high` effort for a full review (good depth, much cheaper than max)
- `max` only if the user explicitly asks for the deepest pass
- `gpt-6-luna` at `medium` if credits are tight

Check the model list in `~/.codex/models_cache.json` if a model name fails. Write a prompt file that gives
Codex: the product summary, the input paths above, "do not report missing footprints", the checklist in
section 4, and this output format: `## Summary`, then numbered `### N. [critical|high|medium|low] title` with
Where / Problem / Evidence (datasheet + page, netlist lines, maths) / Fix / Confidence, then `## Checked and OK`.
Do NOT give Codex Claude's findings (independence matters). Launch:
```bash
nohup npx --yes @openai/codex@0.160.0 exec -m <model> -c model_reasoning_effort=<effort> -s read-only \
  --ephemeral --ignore-user-config --skip-git-repo-check -C <repo> -o <out_dir>/codex_review.md - \
  < <out_dir>/codex_prompt.md > <out_dir>/codex.log 2>&1 &
```
Then wait for it with a background loop (`while kill -0 <pid>; do sleep 20; done`) so you are notified when
it ends. If the user asks to stop it, kill it and salvage its interim conclusions from `codex.log`: the lines
after each `codex` marker are its progress notes, and often already contain its main findings.

## 4. Claude's own review (while Codex runs)
Read `connections_by_part.txt` and `nets.txt` in full, then go block by block, checking against the datasheet
text (grep the big ones) and citing page/section:
1. **Symbols:** every pin number of every custom symbol vs the datasheet pinout; library symbols for parts with
   multiple package variants.
2. **Nets vs intent:** each net against the pin list and design doc; wrong or swapped pins, floating inputs,
   unused pins handled per datasheet (NC vs tie).
3. **Power:** input protection, charger settings (do the maths), battery connector polarity, regulator
   EN/caps/dropout/current budget, capacitance limits on rails (regulator Cout max, USB VBUS 10 µF), any pin
   that can see a rail above its absolute maximum, back-powering paths, sequencing.
4. **MCU:** supply mode, crystal load caps (show maths), reset, debug, USB, GPIO restrictions (low-frequency
   or high-drive pins), every GPIO's voltage.
5. **Each peripheral:** pull-ups/downs and their default state at reset, decoupling, address/strap pins
   (internal pull-ups tied low waste current), switch FET orientation and Vgs(th), LED currents from Vf
   (show maths), coil loads (flyback diode orientation, voltage rating, stuck-on current), bus rise time
   (pull-up × bus capacitance), shared lines.
6. **Standby budget:** leakage paths and parts that need a firmware state to reach their low-power current.
7. **ERC:** explain every message; distinguish real errors from false positives.
8. **BOM ↔ schematic:** references, values, quantities, DNP parts, designator collisions.

Then the **senior engineer pass**: the questions an experienced reviewer asks that a connection check misses.
9. **Faults, not just normal operation.** For every rail, ask "if any part on this rail shorts, what limits
   the current?" A regulator output has a current limit; a battery rail usually has nothing but the pack's own
   protection circuit. Work out the fault current case by case and, where nothing limits it, recommend a
   suitably rated protection device (often a resettable PTC fuse at the battery connector, sized for the peak
   load), and confirm the battery has a protection circuit. For every series resistor and switch, compute the power in a single fault (shorted
   load, switch stuck on): P = V² / R at the highest rail voltage, against the part's rating.
10. **Worst-case margins.** Do the headroom maths at the corners, not the typical point: empty battery (and
   the regulator in dropout), full battery, worst-case LED forward voltage, minimum logic-high voltages.
11. **Readable by someone else.** Report every result from `junction_check.py`; wires that cross near a
   junction; labels that could be misread; PWR_FLAG placement explained. A reviewer who can't follow the
   drawing will (rightly) question it, even when the netlist is correct.
12. **Anything a person touches or plugs in:** ESD on buttons and connectors, USB input protection,
   connector polarity marking.
13. **Defend every choice.** For each judgement call (which rail a load uses, firmware vs hardware debounce,
   pull-up values, load caps), write the one-line reason and the trade-off, so the user can answer a reviewer.

Write findings to `<out_dir>/claude_review.md` in the same format as Codex.

## 5. Compare, verify, debate
- Match findings into **found by both**, **Codex only**, **Claude only**.
- Verify every Codex-only finding yourself against the datasheet text or netlist before accepting it. Codex can
  be confidently wrong (it has invented pinouts before); mark each as confirmed, disputed (say why), or unclear.
- If there are real disagreements worth settling, offer a short second Codex round at lower effort that sees
  only the disputed items and both positions. Ask before spending credits on it.

## 6. Report to the user
A short summary (verdict, counts by severity, which models and effort were used), then three tables, most
severe first: Found by both / Codex only (verified) / Claude only. Each row: severity, finding in plain words,
evidence, suggested fix. Then a short "Checked and OK" list so the user sees the coverage. Save the merged
report as `<out_dir>/combined_review.md`.

Add a **"Questions a reviewer will ask"** section: for each judgement call from item 13, the likely question and
a plain-language answer the user can give, with the numbers behind it.

Finish by separating **hardware changes** from **firmware rules / documentation**, and ask which to apply.
Do not edit the schematic, symbols, BOM or pin list until the user agrees. When fixes are applied, re-run the
netlist and ERC to verify, and update the BOM/pin list with the reason for each change.

AI time

Pushed from my Mac every few minutes. Dates only, never a time of day.

Fetching the count from my Mac.

Time I spend on AI, counted separately from my hardware builds. Solid time is tracked on my own machine: my AI project folders, writing agent skills, and time on AI sites. Videos and reading are logged by hand and hatched. Nothing is estimated. Claude Code time on Jot, Handshake and this website isn't counted.

What I use

  • Claude Code Anthropic

    Building this site and the Jot app, and running the agent skills I wrote.

    In This site, Jot, Agent skills

  • Claude API (Haiku 4.5) Anthropic

    Optional sorting in Jot when turned on in Settings, and answering questions in Ask James.

    In Jot, Ask James

  • Foundation Models Apple

    Sorting Jot transcripts into notes, tasks, reminders and events on the phone, by default.

    In Jot

  • Codex CLI OpenAI

    A second, independent reviewer on my schematics and code before I commit.

    In Schematic Review

  • SpeechAnalyzer Apple

    On-device speech-to-text in Jot, so audio never leaves the phone.

    In Jot

  • Llama Meta

    Meta's open models.

  • Ollama Open source

    Local models, run on my own Mac.

  • Kimi Moonshot AI

    Moonshot AI's model.

  • OpenClaw Open source

    A personal agent you text.

Product names and logos are trademarks of their owners.

What I can do with it

  • Claude API

    Messages API from Swift and TypeScript, streaming responses, and prompt caching.

    In Jot, Ask James

    Using

  • Structured output

    Getting reliable JSON back against a schema and parsing it defensively.

    In Jot

    Using

  • Prompt design and guardrails

    Grounding answers in supplied knowledge, clear refusals, and treating user text as data rather than instructions.

    In Ask James, Jot

    Using

  • Shipping LLM features

    Rate limits, retries, graceful fallbacks, keeping API keys off the client, and choosing a small, fast model where it fits.

    In Ask James, Jot

    Using

  • On-device speech

    Live transcription on the phone with Apple's SpeechAnalyzer, feeding a cloud model only the text.

    In Jot

    Using

  • Agentic coding

    Building with Claude Code day to day, and writing my own skills and multi-agent workflows.

    In Agent skills, this site, Jot

    Building

  • How LLMs work

    Tokens, attention and training, by building a small GPT from scratch.

    Next

Log

2 entries, newest first

  1. Three skills for reviewing hardware

    I wrote three Claude Code skills while designing Jot's circuit board, each one right after doing that stage by hand. Two AI reviewers catch more than one, as long as every finding is checked.

    Designing Jot's board, I kept doing the same kinds of checks, so I turned each one into a Claude Code skill straight after doing it by hand. They're under Six skills I wrote for Claude Code:

    • Schematic Review: Claude and OpenAI's Codex each review the whole schematic against the datasheets without seeing each other's work, then the findings are merged.
    • Assembly Check: whether a manufacturer can actually build the board: their current limits, every part's package and stock, and whether the documents still agree.
    • Footprint Review: a script checks every pin has a pad, then each footprint is compared with its datasheet drawing.

    What I learned

    • Two reviewers catch different things. Codex found a battery cut-off problem Claude missed; Claude caught a back-powering path Codex missed.
    • Every finding still needs checking. Codex also invented a chip pinout with complete confidence, and called correct maths wrong. The skills now check each finding against the datasheet before it reaches me.
    • Effort costs real money. A frontier model at maximum effort ran for 20 minutes and nearly used up my credits. The skills now ask before any expensive run and default to cheaper models.
    • Write the skill after doing the job. Each one carries what the real work taught me, like checking the assembler's limits before drawing footprints.

    Next are review skills for PCB layout and for the final order.

  2. Starting the AI log

    A place to write down the AI skills I'm building and the projects I'm using them on, as they happen.

    I use AI in most of what I build now, from the chat on this site to the iPhone app behind Jot. This page is where I'll record it: what I built, what I learned, and what I'm working on next.

    Where things stand

    • Shipped: Ask James, a grounded chat about my work, and Jot's voice-to-items pipeline with Claude Haiku 4.5.
    • In use: three Claude Code skills I wrote for reviewing ideas and testing my iOS app with simulated users and specialist agents. They're written up under Six skills I wrote for Claude Code.

    New entries will go here as I learn things worth writing down.

Where it's running

Zeno makes the phone calls, Zeno Desk sits on my desk, Zeno 64 runs the TV, Ask James answers on the home page, and Jot sorts speech on the phone.