Borrowing it
Nothing to install: this file belongs to potatobeanradio/circuitRF. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/potatobeanradio/circuitRF/main/CLAUDE.mdgit clone --depth 1 https://github.com/potatobeanradio/circuitRFWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/potatobeanradio/circuitrf/claude-md)<a href="https://agentmods.dev/instructions/potatobeanradio/circuitrf/claude-md"><img src="https://agentmods.dev/badge/instructions/potatobeanradio/circuitrf/claude-md/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/potatobeanradio/circuitrf/claude-md"><img src="https://agentmods.dev/badge/instructions/potatobeanradio/circuitrf/claude-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.12395 | $0.12395 |
| Opus 5.5 | $0.04958 | $0.04958 |
| Sonnet 5.5 | $0.02479 | $0.02479 |
| Haiku 4.5 | $0.01239 | $0.01239 |
Grade A, and why
circuitRF CLAUDE.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 575 lines — stays where its author put it; the contents beside it link to each section on GitHub.
circuitRF
Lightweight cross-platform RF circuit simulator (DC, S-parameters, harmonic balance,
loadpull/sourcepull). See docs/PRD.md for scope - may not be update to date.
Searching this repo
Use grep (or ripgrep) directly whenever possible instead of spawning a search agent. This
repo's structure is well-known and its files are plain text — a targeted grep -n finds a
symbol, class, or XAML control faster and far cheaper than delegating a "find X" task to an
agent. Reach for an agent only when the search genuinely needs multi-step reasoning across many
unrelated locations, not for straightforward lookups.
Resolving Issues
If significant findings were found during bug fixes or changes, write to the relevant RESOLVED.md files never CLAUDE.md. This helps keep the CLAUDE.md files small.
Never quote the owner or users in git commit comments, RESOLVED.md files or anywhere in the code. Instead, briefly paraphrase owner/user messages. Pre-existing quotes are ok.
Stack
-
.NET 10 (LTS), C# 14
-
Avalonia 12 (UI), SkiaSharp (canvas rendering), CommunityToolkit.MVVM (MVVM)
-
CSparse.NET (sparse complex LU for large MNA), NumFlat (dense linear algebra)
The architectural boundary is unchanged and does not depend on directory placement — it is enforced by assembly-reference checks in
tests/Firewall.Tests.
Build / test / run
-
Build:
dotnet build -
Test:
dotnet test -
Run CLI:
dotnet run --project src/Cli -- <args> -
For faster simulations, run the Release build:
dotnet run --project src/Ui -c ReleaseThe installed
circuitRFexecutable IS the CLI (AUT-13):src/Ui/Program.Main's first statement hands a verb toCliEntry.Run(IsVerbcomes fromRun's own switch; the verb must beargs[0]). The verbs build as the librarysrc/Cli.Verbs, which compilessrc/Cli/*.csin place;src/Cli's project isProgram.csonly. Windows adds a console-subsystemcircuitRF.comtwin of the stub. Detail:docs/design/cli.md§20. Verbs:sparam,dc,hb,lp,lpp,em,convert,new,import,check,explain,history,render,netlist,plot,find,rail,smith,snp,lvs,elab. The CLI has its own design doc —docs/design/cli.md— covering the five-step anatomy of a run verb, the stdout/stderr split, and the rules below; read it before adding a verb.hb/lp/lpprun the netlist's harmonic-balance, loadpull and loadpull-pursuit analyses, and each runs the whole sweep when aparametric_sweepwraps it (naming the inner analysis is promoted to its wrapper, since running the inner alone silently drops the sweep axis — a freq-swept loadpull is exactly this shape). They evaluate the TestBench'smeasurelines exactly as the GUI does, so a.cnlthat works headless works when opened.--set var=exproverrides a global before elaboration; every other override replaces the DIRECTIVE in the TestBench, because the sweep engine re-resolves it at each point and an override handed to one engine instance is discarded after the first.-o out.{mat,npy,txt}exports, andlpalso writes.spl/.lpcwave— the loadpull interchange the Data Display reads back.emtakes a.cemand needs no other arguments (2026-08-26). Both references it must follow are WALK-UPS, not flags: the layout is relative to the nearest ancestor.cwsabove the.cem(falling back to the.cem's own directory), and the technology resolves against the LAYOUT's own parent workspace. It writes exactly where Simulate writes —EmRunService.ResolveSnpPathis predictable by design so a schematic's SnP reference survives a re-run — and-omoves the Touchstone only, never the.npythat carries the diagnostics group. A refusal stays a refusal:Refused/NoLayout/EngineErrorexit 1 with the run service's own sentence,Cancelledexits 130. The gate istests/Ui.Tests/Em/EmCliVerbTests.cs, which compares the CLI's.sNpbyte for byte againstEmRunService.Run's — every line but the provenance write-timestamp and run stamp, which the file carries by design; the.npydiffers only by that stamp. The setup's Output name decides every result file,.cemrrecord included;-oisEmRunTarget.TouchstoneDestination(CP-1,cli.md§8.2).convertis one import and one export (2026-09): every ordered pair ofclay/gdsii/dxf/gerber/boardworks because every reader lands on a cell folder plus a technology and every writer starts from one — a.claytarget stops after the import, anything else exports out of a scratch directory (--keep-cellskeeps it). Aclaytarget is a DIRECTORY; a file-shaped path is a refusal naming the directory spelling (AUT-12). Formats infer from the paths (a FOLDER is a Gerber file set; an unknown extension is classified by CONTENT through the import's own classifier);--from/--tooverride. Two things the GUI asks in a dialog: the layer mapping takes the same default the dialog pre-selects, and an unstated Excellon coordinate format is a REFUSAL, never a guess — leading vs trailing suppression differ by four orders of magnitude on identical text, so it prints the inference and the flags that answer it. Headless there is no open workspace to graft layers onto, so it writes a.ctechof its own; passing a null destination technology to any importer silently drops every layer —src/Design/RESOLVED.mdrecords why. Gate:tests/Ui.Tests/ConvertCliVerbTests.cs(all 24 pairs, plus byte identity against the in-processGdsiiExport/GerberExportthe GUI's own File ▸ Export calls).new workspace <dir>,new cell <ws> <name>andimport part <file> --into <dir>create a correct INITIAL document headlessly (2026-09-05) — and none of them contains any creation logic: each calls the one function the GUI's own command calls (WorkspaceCreate.Create,CellCreate,ComponentImport.Import, all insrc/Design). An operation that lives only in a view model is not a capability, and a verb that re-implements one diverges from it silently — so the extraction is the feature andsrc/Cli/Authoring.csis only argument parsing, refusals and reporting.newis ONE verb with a noun, not three;new schematicwould be a fourth noun, never a fourth verb. There are deliberately no per-primitive edit verbs — noplace-instance, noset-parameter: once a document exists, the way to change it is to WRITE it, because the format is the contract. Every default is the GUI dialog's —--techopens on what the New Workspace combobox opens on (--tech noneis its "None" row, and an unknown id is a refusal listing the real ones, never a fallback),--viewsdefaults toschematicbecause that is what New Cell creates, and the layer mapping takes the same defaultconvert's does. Anything the dialog would have ASKED is a refusal naming the flag that answers it: a source holding several parts prints them and stops (--cell/--variant/--list-parts).import partreports the layers its technology lacks and writes none unless--add-layerssays so — the GUI's own install is session-only and writes nothing to disk either. The paths created ARE the result, on stdout and in--json. Gate:tests/Ui.Tests/AuthoringCliVerbTests.cs— the CLI as a process, byte for byte against the in-process call, a comment-stripped source scan proving the view model kept no second copy, and the end-to-end that authors a design and simulates it with no display at any step.ShippedTechnologiesand its.ctechresources moved tosrc/Designfor this; moving such a class without itsEmbeddedResourceitems leaves it enumerating nothing, silently.check <path>andexplain <path>are read-only, and neither runs an analysis (2026-09-05).checkanswers "is it well formed, does it resolve, is it sound" over a workspace, a cell folder or one document — the kind inferred from the path exactly asconvertinfers a format, and a foreign file classified throughconvert's OWN classifier so a GDSII or Gerber file is named rather than called unreadable. It writes NO validation logic of its own: every finding comes from a validator the GUI already uses (CellViewFileValidator,CellFolder.ResolvePrimary,NameValidator,TechValidation,TechnologyResolver,EmSetupResolver,CellSymbolResolver,NetExtractor,Elaborator,ChainSelector,DrcPredicateParser,DrcEngine) — a rule living only incheckis a rule the application does not enforce, so a design would pass headlessly and be refused when someone opened it. Exit 0 unless something at or above--severity(defaulterror) was found; warnings are ALWAYS reported and still exit 0, because a check that hid them to keep the exit code clean makes the exit code useless. It writes nothing at all, so it runs on a read-only tree and on a workspace another process has open.explainanswers the question that is not a failure — what did circuitRF decide — and reports the WALK as well as the answer, because resolution here is a series of walk-ups and which one produced an answer is the part a caller cannot otherwise see (a.cem's layout and technology walks start from different files and can land on different workspaces).--exprevaluates in the design's own resolved scope through the one expression engine, with--setapplied first exactly as a run verb applies it;--analysisreports every declared chain, which one dispatches and for which verb, and whether a named inner analysis would be promoted;--refresolves a relative reference and says whether it leaves the workspace. A sweep is reported in base SI WITH its unit and its scale — reading a mark without its scale once produced a run at 2 Hz that looked entirely normal.--extentsalso emits awindowstring in the spellingrender --windowtakes (AUT-12). A.cschreaches the elaborator through the.cnl, in memory, because that is what the GUI's own Simulate does and the two readers disagree about bare words: skipping the round trip reports errors the application does not have. The DRC engine and the.wasmrule model moved tosrc/Designto make the layout half ofcheckpossible. Gate:tests/Ui.Tests/CheckAndExplainCliVerbTests.cs.historyis ONE verb with nouns, and every revision-control operation has a spelling on it (docs/design/revision-control.md§5.3d) —checkpoint,list,restore,commit,versions, and RC-9'sclone,pins,pin,unpin,fetch,send. It exists because the governing motive of that whole feature is a floor under an AI-authored edit and the agent is out of process: a safety net reachable only from a window is worth nothing to it. Each noun calls thesrc/Designfunction the GUI's own command calls and holds no logic of its own — the ruleAuthoring.csalready states, and a comment-stripped source scan is what holds it. The batch's open and close are deliberately NOT here: they carry session state a process that exits after one command cannot, so they stay onserve;history checkpoint --intentIS what a batch's open takes.clonederives nothing — both the address and the destination folder are required, because git would work a folder name out of the address and a folder appearing somewhere the caller did not name is a surprise nobody is there to notice on a build machine.pins/pinname an ALIAS and there is no per-cell spelling: one referenced workspace is one repository with one commit identity, and pinning per cell would let one design reference two mutually inconsistent versions of one library.pinsexits 1 on a pin that cannot be honoured — a build machine treating that as a warning would produce a result against content the design was never verified against, which is the one outcome the pin exists to prevent. Nothing reaches a network without being asked (fetch/sendonly), and circuitRF holds no credential and asks for none: it uses whatever git is already configured with, andGIT_TERMINAL_PROMPT=0turns an operation that would have asked into a refusal rather than a process that never returns.pins/pin/unpinneed no repository — the pin lives in the consuming design's.cws, which is very often a workspace circuitRF has never kept a history for. Gates:tests/Ui.Tests/Revision/CloneAndPinsTests.csand the RC-5/RC-7 files beside it.render <path> -o out.{svg,pdf,png}turns a.csch,.csymor.clayinto a picture, and it owns no rendering (2026-09-07) — every pixel comes out of the three Skia renderers inCircuitRF.Renderthat the application draws each frame with, which is the whole reason RND-1 put that project below the firewall.src/Cli/Render.csis argument parsing, viewport arithmetic, refusals and reporting, onAuthoring.cs' terms. One verb over every document kind, inferred throughDocumentKinds.Classifyexactly ascheckinfers it; a cell folder takes--view(more than one view is a refusal LISTING them), a workspace takes--cell, and a document belonging to no workspace is a first-class input — it resolves no technology, renders on the fallback palette as the layout editor does, and says so as a NOTE rather than a warning.-ois required and its extension picks the format: there is no picture on stdout, because stdout is the result document and--jsonhas to co-exist with the write.--fit(the default),--windowand--center/--spanare refused together rather than ordered, and on a layout every coordinate carries an SI unit — a bare number is a refusal, because--window 0,0,500,300could mean DBU, µm or mm and all three are plausible. A window of a different aspect is letterboxed, never cropped.--detail full(the default) turns every LOD tier off so what is STORED is what is drawn;--detail screenengages them as a canvas would, and on a real board that is the difference between a 23.5 MB SVG in 1.44 s and a 6.2 MB one in 0.36 s.--layers/--hide-layersapply to a CLONE of the resolved technology (TechnologyLayerSelection, insrc/Design) —TechnologyCachehands back a shared instance and mutating it would narrow every later render in the same process, which is the defect that only appears on the second call.--fit-layersframes the fit on some layers and draws all of them;--layer-colors name=#rrggbb[aa]recolours one for this render only — eight digits sets FILL OPACITY, the only alpha the renderer reads (AUT-12). Rulers stay ON (document content, not overlay state); every other overlay is off by construction. Progress and cancellation rideRunHost'sRunControllikeem's, so a cancelled render exits 130 and writes nothing. Gate:tests/Ui.Tests/Render/RenderCliVerbTests.cs, which compares the verb run as a PROCESS against the in-processCircuitRF.Rendercall byte for byte — schematic, symbol and layout, SVG and PDF, and all four came back identical with no exclusion at all.render x.c3d -o out.png --field <plot>draws a clip-plane field plot;--list-fieldslists them (brief-em3d-84) — resolution isFieldPlotResolverinsrc/Render, shared with the 3D view;cli.md§13.8.1. A clip-plane TEMPERATURE plot renders too, wires painted from their T(s);--labels --tight --axes --scale-bar(brief-em3d-88).netlist <path.csch> [-o out.cnl]writes the extraction Simulate performs, and every run verb now takes a.cschtoo (2026-09-08) — until then nothing headless could simulate a design anyone had DRAWN: a run handed the JSON toCnlReader, which reported its first key as a missing cell name. Both halves go throughCircuitSource.CnlTextOf, so the file written is the same BYTES a run consumes; the provenance comment is a constant for that reason, and the gate scanssrc/Clifor a secondCnlWriter.Write— the WRITER, notNetExtractor.Extract, whichcheckcalls on its own account. Any other document kind is a refusal BY KIND.plot <result> -o out.svg --trace cube=S,i=2,j=1,y=dbis one picture with no.cddto author first, and not a second plotting path: it builds the documentrender --dataconsumes and hands it to the same composer (--write-cddgives that document back).cube=is the trace card's own shorthand. An integer on ani/jaxis is a 1-based PORT NUMBER, not an index — converting it draws S12 fori=2,j=1in silence, which is invisible on a reciprocal part.find <root> [--depth n]says what is here — workspaces, cells, views, declared analyses. The walk is bounded and says when it stopped short; a directory symlink is never followed. Gate for all three:tests/Ui.Tests/Cli/MissingVerbsCliTests.cs; detail insrc/Cli/RESOLVED.mdandcli.md§14-16.new workspacealso creates missing PARENT directories now.lvs <path>compares a cell's layout against its schematic (2026-09-21) — a cell folder, a workspace, a.clayor a.csch, the kind inferred ascheckinfers it. It owns no comparison: every finding comes out ofLvsRun.Runinsrc/Design/Layout/Lvs, the function the GUI panel calls, so a design that passes headlessly passes when it is opened. Read-only oncheck's terms —-o report.txtis the only thing it ever writes. A cell with one of the two views is INFO and skipped, not a refusal: that is the ordinary mid-design state. Exit 0/1 on--severity(defaulterror; warnings always reported), 130 on cancellation, and never 2 — nothing here solves.cli.md§19; gatetests/Ui.Tests/Lvs/LvsCliVerbTests.cs. -
Package: exactly one script per platform, and each builds everything that platform ships —
packaging/windows/build-windows.ps1(9 files:.msix64/arm64/x86 in both install scopes, plus the.zipthe updater fetches),packaging/macos/build-macos.sh(2.dmgs, both architectures; wraps the existingsrc/Ui/bundleFor*MacOS.sh),packaging/linux/build-linux.sh(4 files:.deband.tar.gzfor x64/arm64;fpmis needed only for the.deb). All write todist/. Flags narrow a run; the no-argument form is the release form, because 1.0.0-beta.2 shipped 7 of its 15 artifacts when Windows defaulted to one architecture in one scope and Linux was two scripts — silently, since a missing update payload stops updates with no error. Held bytests/Ui.Tests/PackagingScriptTests.cs. Every script runstools/CliSmokeagainst its own publish tree and fails unless the CLI answers — beta.1–32 shipped no CLI because nothing did; an architecture the host cannot execute fails unlessCRF_ALLOW_UNSMOKED=1. Each must run ON its own platform (WiX is Windows-only,codesign/hdiutilmacOS-only, and the Windows PE icon is only embedded when the publish happens on Windows). Step-by-step instructions live inBUILDING.md, whichREADME.mdlinks to; keep the two in step. App icons (.icns/.ico/.png) are build products rasterised from the committed brand SVGs bydotnet run --project tools/IconGen, which every packaging script runs first — no icon binary is ever committed.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today Changed · +1 lines · +51 tokens per session 9b464979a716
- 6d ago Changed · -16 lines · -427 tokens per session e1a0b37c0798
- 7d ago Changed · +6 tokens per session fcc45be2c920
- 11d ago Changed · +1 lines · +37 tokens per session a8618f10f8da
- 1mo ago Changed · +3 lines · +110 tokens per session ba6414b07916
- 1mo ago Changed · +7 lines · +206 tokens per session abb372d29840
- 1mo ago Changed · +8 lines · +225 tokens per session e8007681c4ed
- 1mo ago Changed · +5 tokens per session ad2ad536914b
- 1mo ago Changed · +5 tokens per session fe7073ab5e7c
- 1mo ago First seen · 571 lines · 12,177 tokens per session scan A a9b7f17d4bf9
circuitRF CLAUDE.md is an instructions file published in the GitHub repository potatobeanradio/circuitRF (257 stars, last pushed today), licensed MIT. It adds 12,395 tokens to every session, about $0.0496 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
circuitRF CLAUDE.md compared with instructions from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| circuitRF CLAUDE.mdpotatobeanradio/circuitRF | Instructions file | 257 | today | MIT | A | 12,395 | Claude Code |
| vscode buildNext.instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 9,719 | GitHub Copilot |
| next.js AGENTS.mdvercel/next.js | Instructions file | 143k | today | MIT | A | 7,461 | Codex, OpenCode |
| langchain AGENTS.mdlangchain-ai/langchain | Instructions file | 149k | today | MIT | A | 4,680 | Codex, OpenCode |
| vscode oss-third-party-notices.instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 5,516 | GitHub Copilot |
| vscode copilot-instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 3,093 | GitHub Copilot |
| deepseek-harness AGENTS.mddeepseek-ai/deepseek-harness | Instructions file | 275k | 2d ago | MIT | A | 4,313 | Codex, OpenCode |