acqagent.ai
Bring your Section I. The skill validates every FAR 52.2xx and HHSAR 352.2xx entry against the acquisition.gov Smart Matrix and the JUL 2026 HHSAR Deviations matrix, then writes a standalone compliance report.
Pick the path that matches where you use Claude. Same bundle; different drop-in spot.
Recommended: install via the AcqAgent plugin marketplace — two slash commands, no download.
/plugin marketplace add acqagent/skills
/plugin install far-clause-checker@acqagent
acqagent/skills is the GitHub repo that hosts the marketplace catalog; @acqagent is the marketplace name it declares. If Claude Code reports that the plugin isn't in the marketplace, your local catalog is stale — run /plugin marketplace update acqagent and retry.
The skill activates automatically when you ask about FAR or HHSAR clauses, clause dates, deviations, or Section I — no slash command needed. Plugin skills are also directly invocable as /far-clause-checker:far-clause-checker if you want to force it. Try a prompt like:
Check the clause list in Section I of this RFP. Firm-fixed-price,
over the SAT, non-commercial, no set-aside.
/plugin marketplace update acqagent
/plugin install far-clause-checker@acqagent
Skills are just folders. Unzip the bundle into ~/.claude/skills/ for every project, or into a repo's .claude/skills/ to scope it to that project and commit it for your team.
mkdir -p ~/.claude/skills
curl -L https://acqagent.ai/skills/far-clause-checker.zip -o /tmp/fcc.zip
unzip -o /tmp/fcc.zip -d ~/.claude/skills/
rm /tmp/fcc.zip
$dest = "$HOME\.claude\skills"
New-Item -ItemType Directory -Force -Path $dest | Out-Null
$zip = "$env:TEMP\fcc.zip"
Invoke-WebRequest "https://acqagent.ai/skills/far-clause-checker.zip" -OutFile $zip
Expand-Archive -Path $zip -DestinationPath $dest -Force
Remove-Item $zip
Verify with ls ~/.claude/skills/far-clause-checker — you should see SKILL.md, scripts/, references/, and CHANGELOG.md. Claude Code watches the skills directories, so a manually dropped skill is picked up in the current session; only creating the top-level skills/ directory for the first time needs a restart.
On claude.ai, a custom skill is uploaded as a .zip whose root is the skill folder. The bundle on this page is already packaged that way — upload it as-is.
Grab far-clause-checker.zip (~72 KB). Don't unzip it, and don't re-zip the inner folder's contents — claude.ai expects the far-clause-checker/ folder at the archive root.
Open Customize → Skills (in the claude.ai settings, or the Customize item in the Claude desktop app sidebar). Click +, choose Create skill, and upload the .zip. Claude reads SKILL.md and shows the name and description; the toggle next to it controls whether the skill is live.
Start a new chat and ask anything about FAR or HHSAR clauses, clause dates, class deviations, or Section I — Claude loads the skill on its own. Paste or attach your clause list in the same message.
Requirements. Custom skills need a Pro, Max, Team, or Enterprise plan with file creation (code execution) turned on — the skill runs a Python script and writes a .docx, so both halves depend on it. Uploaded skills are private to your own account; they aren't shared across a Team or Enterprise workspace and can't be pushed out centrally by an admin. Skills also don't sync between surfaces: a skill added here is separate from your Claude Code install and from anything uploaded through the API.
v3 is clause-list-first. The primary input is your actual list — a solicitation or contract Section I, or any list of clause numbers with dates. The parser reads each line for a clause number, an optional Alternate, an optional month-year date, and the word "deviation"; titles are ignored, so pasting straight from a document is fine.
You also give it the action parameters, all of which have defaults: contract type (FFP, FFP_LOE, COST, TM), whether the action is over the SAT, commercial or not, and the set-aside (NONE, SB, 8A, HUBZONE, SDVOSB, WOSB).
Two data sets ship with the skill, and they are disjoint clause families — 52.x routes to one, 352.x to the other:
On FAR 52.2xx entries: whether the number exists in the current baseline, whether a cited Alternate exists, whether your date is older than the current effective date, and whether a Part 19 clause conflicts with the set-aside you stated.
On HHSAR 352.2xx entries: status (Reserved and "do not use or enforce" rows are critical, with the class deviation or court order cited), deviation currency against your own date, missing or extra deviation citations, IBR authorization (full text required where IBR isn't allowed), PCO fill-ins to verify, and applicability fit against the coded column — R-All, R-Over SAT, A-Cost Only, and the rest of the legend.
Across the whole list: Active HHSAR clauses whose R-code fits your action but that are missing from the list, and expected 52.219 clauses missing for the set-aside you stated. Out-of-scope entries (DFARS 252.x) and unparseable lines get their own section rather than a guess.
Output is a standalone .docx: executive summary and counts, status legend, a FAR table, an HHSAR table, the two missing-clause sections, and the out-of-scope list. The raw JSON can be saved alongside it.
With no clause list, the skill flips to checklist mode and builds the HHSAR clauses grouped into required, as-applicable, and not-applicable for your parameters — with prescriptions, IBR, UCF, fill-in flags, and deviation citations — plus a FAR inventory for whichever Parts you name. Useful when you're assembling Section I rather than checking one.
--clauses is new: a path to a clause-list file, or an inline semicolon-separated list. Its presence selects check mode; its absence selects checklist mode.--contract-type values changed to FFP, FFP_LOE, COST, TM (v2 used FP, CR, TM).--over-sat yes|no is new; no also covers simplified acquisitions.--purpose and --method are retired. They're accepted and ignored with a printed note, so v2 invocations fail soft.--commercial, --small-biz, --parts, --output, and --data-dir are unchanged. Every parameter now has a default; nothing is required.openpyxl to read the HHSAR workbook; it installs openpyxl on first run if it's missing.Anything in this neighborhood will trigger the skill.
Here's Section I from my RFP — check every clause. FFP, over the SAT,
non-commercial, no set-aside.
Run the FAR clause checker on this list:
52.212-5 (Mar 2026); 352.203-70 (JUN 2026) Deviation; 52.219-3 (Oct 2022)
Build me an HHSAR clause checklist for a cost-reimbursement action
above the SAT with an 8(a) set-aside, plus a FAR inventory for Parts 19 and 27.
Is 352.209-1 still usable, and what class deviation covers it?
Which HHSAR clauses am I missing for a T&M HUBZone award over the SAT?
far-clause-checker/
├── SKILL.md # skill prompt + workflow
├── CHANGELOG.md # v3 release notes
├── scripts/
│ └── far_checker.py # the runner
└── references/
├── DATA_DICTIONARY.md # column maps, code legend, data quirks
├── Smart_Matrix__Acquisition_GOV.csv # FAR 52.2xx baseline
└── HHSAR_Deviations_JUL_2026.xlsx # HHSAR 352.2xx matrix
The runner auto-discovers both data files in references/ — a csv with "matrix" or "smart" in the name, an xlsx with "hhsar" or "deviation". To move to a newer release of either, drop the new file in and remove the old one; no code change needed. Point --data-dir elsewhere to override.
Read references/DATA_DICTIONARY.md before parsing either file by hand. Both carry real quirks the runner already absorbs: a typo'd HHSAR number (352.215.70), RESERVED and DO-NOT-USE prefixes, literal <br> tags in one deviation citation, non-breaking spaces in dates and titles, underscore-style alternate labels, and duplicate numbers where a base and an alternate share a row group.