sow-pws-builder — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sow-pws-builder (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill walks a program office (or analyst acting on their behalf) through structured scope decisions and assembles the answers into a properly formatted SOW or PWS. The core insight: the program office doesn't need to know FTE counts or cost estimates up front — they need to make scope decisions, and staffing falls out as a derived output.
Outputs (TWO SEPARATE ARTIFACTS — never combined):
No external APIs required. This is a decision tree + document generation skill.
Regulatory basis: FAR 37.102(d) (describe work in terms of results, not hours or number of people), FAR 37.602 (performance-based acquisition), FAR 46.401 (quality assurance), FAR 7.105 (written acquisition plans — requirement description), FAR 16.601(c)(2) (T&M/LH ceiling price mechanism).
User needs a SOW/PWS from scratch or from a rough concept. Execute all three phases. Triggers: "write a SOW," "build a PWS," "I need a work statement for..."
User has an existing SOO and needs it developed into a SOW/PWS. Start with Phase 0 (SOO intake), then Phases 1–3. Triggers: "convert this SOO to a SOW," "develop this SOO into a PWS," "we have a SOO and need a work statement."
User has an existing SOW/PWS or IGCE output that exceeds budget. Walk through scope decision tree to identify what to cut, then produce a revised document. Triggers: "this is too expensive, what can we cut," "reduce scope to fit budget," "need to descope."
Before diving into the scope decision tree, collect three framing decisions that shape everything that follows. Ask these up front, in a single pass, before Block 1. These are the acquisition strategy context — they determine document type, pricing structure, and FAR Part applicability.
| SOW | PWS | |
|---|---|---|
| Prescribes | Tasks and methods (how) | Outcomes and standards (what) |
| Contractor flexibility | Low — government directs approach | High — contractor proposes approach |
| Best for | Well-understood, repeatable work | Complex or innovative requirements |
| QASP focus | Task completion | Performance metrics |
| FAR preference | — | FAR 37.602 prefers PBA/PWS |
If the user is unsure, default to PWS — it's the FAR-preferred approach for services and gives the contractor room to propose efficient solutions. The decision tree is identical either way; only the output language changes.
FFP | T&M | LH | CR | Hybrid (specify)
This is asked up front (not in Block 5) because contract type frames the rest of the scope decisions:
If the user says "unsure," recommend FFP for well-defined services, T&M for requirements where level of effort is unknown, and CR for R&D or high-uncertainty work. FAR Part 16 analysis is the contracting officer's call — this skill accepts the user's decision; it does not advise on contract type selection.
Commercial service (FAR Part 12) | Non-commercial (FAR Part 15) | Unsure — flag for Contracting Officer
The issue a requirement writer faces: the same scope decisions produce different document language, different clause references, and different FAR Part applicability depending on these three framing choices. Collecting them up front means Phase 1 can frame its questions accordingly (e.g., for a commercial FFP PWS, skip Phase 1 questions about Government-unique processes; for a T&M SOW, ask more detail about labor categories and ceilings). It also means the generated document in Phase 2 can reference the correct FAR sections and clauses without a retrofit.
When the user provides an existing SOO:
Ask questions in this sequence. Each decision narrows scope and implies staffing. Present as structured choices, not open-ended questions. Collect in a single pass where possible.
Phase 1 execution: On platforms that expose a structured multi-choice prompt tool (claude.ai web chat provides AskUserQuestion), use it for Acquisition Strategy Intake and Blocks 1-6. Batch 3-4 related questions per prompt block. Reserve prose for genuinely open-ended answers (ticket volume, system names, incumbent details). Every multi-choice question must include an "Other" / "Something else" free-text escape.
Anti-redundancy: Before asking any framing or scope question, check whether the user's initial prompt already answers it. Do not re-ask explicit answers; confirm silently and proceed.
Contract type is already captured in the Acquisition Strategy Intake above; do not re-ask it here.
After collecting decisions, derive the staffing implications. These are heuristics, not formulas:
| Decision | Staffing Implication |
|---|---|
| 24/7 coverage | Minimum 3x the single-shift headcount for covered roles |
| Custom development | 1 architect + 2-4 developers per major system/module |
| COTS configuration | 1 architect + 1-2 configurators per platform |
| AI/NLP components | +1-2 data scientists or ML engineers |
| 4+ system integrations | +1-2 integration/middleware engineers |
| Data migration from 3+ sources | +1 data engineer + 1 DBA (may be time-limited to base year) |
| Multi-site or 3+ org units | +1 change management/training specialist per 2-3 units |
| Contact center: volume ÷ 250 days ÷ contacts/agent/day | = required agent headcount (adjust for FTE vs. contractor split) |
| Agile development | 1 scrum master or PM per 2 dev teams (team = 5-7 people) |
| FISMA/security requirements | +1 information security analyst |
| O&M phase | Typically 40-60% of development-phase staffing |
| Transition-in | +0.5-1 FTE for knowledge transfer (time-limited) |
Present the derived staffing table to the user for validation before proceeding to Phase 2. Format:
Task Area | Labor Category | Est. FTEs | Derivation Basis | Phase
Development | Solution Architect | 1 | Enterprise CRM platform | Base-OY1
Development | Software Developer | 4 | 2 Agile teams × 2 devs | Base-OY1
Operations | Tier 1 Agent | 10 | 127K contacts ÷ vol/day | Base-OY4
O&M | Systems Admin | 2 | 50% of dev staffing | OY2-OY4User validation gate. The user confirms, adjusts, or overrides any line. If they override, document the override reason — it matters for the IGCE methodology narrative.
Before invoking the docx skill for document generation, present a Phase 1 Decision Summary in chat. The summary must include:
Wait for the user to reply "proceed" (or correct any item) before generating the .docx. Do this even when the user has waived interactive Phase 1 — it provides a catch point before a large document generation locks in framing errors and preserves progress if the session is interrupted.
DO NOT self-approve. Presenting the Decision Summary and then immediately continuing to docx generation in the same response (e.g., emitting "Proceeding to document assembly now" or similar without waiting for user input) defeats the entire purpose of the gate. The user must have an opportunity to read the summary, catch a wrong default, and redirect before the .docx is built. After presenting the Decision Summary, the response must END. Wait for the next user message containing "proceed" (or a correction) before invoking the docx skill. This applies even when the user's original prompt was richly specified. The intake defaults applied in Phase 1 are your inferences; the user is entitled to review them before commitment.
Generate the SOW or PWS using the docx skill. Read /mnt/skills/public/docx/SKILL.md before generating output. Include a Table of Contents after the title block when the document will contain more than 8 sections.
Section ordering is prescriptive. The sections below appear in the document in the exact order shown. Do not merge, combine, swap, or rename them. In particular: Section 11 is Reporting and Oversight, Section 12 is QASP Summary, Section 13 is Transition, Section 14 is Constraints and Assumptions. If a contract-type-specific section is omitted (Section 5 is T&M/LH only), renumber subsequent sections sequentially but preserve the relative order of all remaining sections.
Section 1: Introduction
Section 2: Definitions and Acronyms
Section 3: Requirements (this is the core — structure depends on SOW vs. PWS)
For SOW: Section 3 is organized by task area. Each task has:
For PWS: Section 3 is organized by performance objective. Each objective has:
Section 4: Deliverables
Section 5: Labor Category Ceiling Hours (T&M/LH only)
CLINs do NOT go in the SOW/PWS body. CLIN structure is a pricing/contract-admin construct that belongs in Section B of the UCF solicitation. Including a CLIN table in the SOW/PWS either creates a conflict when the CO drops a real Section B on top, or reveals the document isn't actually a SOW/PWS but a mashed-up mini-contract. The CLIN preferences gathered in Block 5 of the intake are emitted as a chat-only CLIN Handoff Table in Phase 3 for the CO to paste into Section B. They never appear in the document body.
T&M/LH only (FAR 16.601(c)(2)): If the contract type selected in the Acquisition Strategy Intake is T&M or LH, Section 5 is titled "Labor Category Ceiling Hours" and contains a single table telling offerors which labor categories the government expects them to propose rates against and the ceiling hours per LCAT per period. It is a pricing risk-sharing mechanism, NOT an FTE estimate or staffing prescription. Table columns: Labor Category | Base Year Ceiling Hours | OY1 | OY2 | OY3 | OY4 | Total Ceiling. Do NOT include SOC codes, FTE counts, "derivation basis," or anything resembling the Phase 3 staffing handoff table.
For FFP and CR contracts: omit Section 5 entirely and renumber subsequent sections. Do not substitute a CLIN table, pricing schedule, or any other pricing content.
CPFF contracts — explicit form commitment required (FAR 16.306(d)): For any Cost-Plus-Fixed-Fee contract, the document must explicitly identify whether the contract is completion form (FAR 16.306(d)(1)) or term form (FAR 16.306(d)(2)) at the first place the contract framework is described (typically the opening framing table or Section 1.1 Purpose). This is non-negotiable. The two forms have materially different fee-earning mechanics:
Section 6: Period of Performance
Section 7: Place of Performance
Section 8: Government-Furnished Property/Information
Section 9: Security Requirements
Section 10: Key Personnel
Section 11: Reporting and Oversight
Section 12: Quality Assurance Surveillance Plan (QASP) Summary
CRITICAL: Do NOT tie QASP thresholds to CPARS ratings. CPARS (FAR 42.15) is a separate post-performance evaluation with fixed FAR rating categories (Exceptional / Very Good / Satisfactory / Marginal / Unsatisfactory) based on the CO's judgment across the full factor set. It is NOT bound by QASP threshold mechanics and cannot be pre-committed in a SOW/PWS. Writing "95% threshold = CPARS Satisfactory" is both legally wrong and defeats the point of performance-based acquisition.
The Payment Consequence column must describe what happens to payment or contract administration when the threshold is missed. Acceptable examples:
Do NOT put CPARS ratings, CPARS thresholds, or the words "Satisfactory / Exceptional / Very Good / Marginal / Unsatisfactory" in the Payment Consequence column. Those belong in the post-performance CPARS evaluation, not the QASP.
Section 13: Transition
Section 14: Constraints and Assumptions
Appendices (as applicable):
The appendix set above is the only authorized appendix set for the SOW/PWS. Include only those applicable; omit the rest. DO NOT create any staffing-related appendix under any title (variants seen in practice: "Implied Staffing Table," "IGCE Handoff," "FTE Allocation," "Labor Category Staffing"). The staffing handoff is a separate chat-output artifact (see Phase 3); it does not belong anywhere in this document, including as a supplement after Appendix D.
SOW language: "The contractor shall [verb]..." — prescriptive, task-oriented. PWS language: "The contractor shall achieve/maintain/ensure..." — outcome-oriented, measurable.
Avoid:
Every requirement must be: specific, measurable, achievable, relevant, and time-bound. If a requirement fails any of these, flag it for the user during assembly.
UNCONDITIONAL RULE: At the end of every run, present BOTH chat-only handoff tables as markdown blocks in chat: (1) the Staffing Handoff Table for the IGCE Builder, and (2) the CLIN Handoff Table for Section B of the solicitation. Both are REQUIRED, not optional, regardless of contract type, commercial status, or whether the user mentions downstream skills. The staffing table is informational for commercial FFP (where the contractor owns labor mix risk) and load-bearing for T&M/LH/CR. The CLIN handoff is always emitted because Section B is always separate from Section C (the PWS). Do not skip or self-edit based on judgment that the user "won't need it."
Before presenting the final document, verify:
After the SOW/PWS .docx is saved to disk, present the staffing handoff table as chat output only. It is NOT a section of the SOW/PWS. It is NOT saved as a .docx, .xlsx, .csv, or any other file. It exists solely as a markdown table in the conversation so (a) the user can review the derived staffing for scope validation, and (b) the IGCE Builder skill can consume it as input when the user says "build the IGCE."
Present it like this, verbatim:
=== STAFFING HANDOFF TABLE — FOR IGCE BUILDER ===
Internal government workpaper. NOT part of the SOW/PWS contract deliverable.
Do not paste this into the contract file.
| Labor Category | SOC Code | FTEs | Phase | Hrs/Yr | Notes |
|-------------------------|----------|------|--------------|--------|-------|
| Program Manager | 13-1082 | 1 | Base-OY4 | 1,880 | Key personnel |
| Software Developer | 15-1252 | 4 | Base-OY1 | 1,880 | Reduces to 1 in OY2+ |
| Tier 1 Agent | 43-4051 | 10 | Base-OY4 | 1,880 | Derivation: 127K contacts ÷ volume/day |
| Systems Admin | 15-1244 | 2 | OY2-OY4 | 1,880 | O&M phase only |Include rows for every labor category derived in Phase 1. Notes should capture user overrides and derivation basis. Columns are fixed: Labor Category, SOC Code, FTEs, Phase, Hours/Yr, Notes.
After the table, tell the user in plain chat prose: "This staffing table is ready for handoff to the IGCE Builder. Say 'build the IGCE' and I'll hand it off to the FFP, LH/T&M, or CR skill based on the contract type selected in the Acquisition Strategy Intake. The IGCE Builder will produce the formal Independent Government Cost Estimate as a separate .docx document — that's where the staffing, rates, wraps, and costs are formally documented for the contract file."
DO NOT, under any circumstances:
Why this rule exists: Offerors anchor on FTE counts when they appear in a requirement document regardless of any "not prescriptive" disclaimer. That violates FAR 37.102(d). The data is still needed; it just belongs in chat output between skills, not in the contract file deliverable.
The one exception is the T&M/LH Labor Category Ceiling Hours table in Section 5 per FAR 16.601(c)(2). That is a pricing mechanism (ceiling hours, no SOC codes, no FTE counts, no derivation basis) and is not the same thing as this staffing handoff table.
After the staffing handoff table, present the CLIN Handoff Table. Same pattern, same rules: chat-only markdown, never written to the SOW/PWS body, never saved as a file. CLINs live in Section B of the solicitation, not the PWS. This table exists so the CO can paste it into their Section B draft.
Present it verbatim:
=== CLIN HANDOFF TABLE — FOR SECTION B OF THE SOLICITATION ===
Contract-admin workpaper. NOT part of the SOW/PWS contract deliverable.
Paste into Section B of the solicitation shell, not the PWS body.
| CLIN | Description | Pricing Basis | Period / Scope Notes |
|------|------------------------------------|----------------------------|----------------------|
| 0001 | Base Year Performance | FFP | Covers Sections 3.x objectives |
| 0002 | Base Year Travel | Cost-reimbursable (NTE) | FAR 31.205-46; no fee |
| 0003 | Base Year ODCs | Cost-reimbursable (NTE) | Receipts required |
| 1001 | Option Year 1 Performance | FFP | Same scope as CLIN 0001 |
| ... | ... | ... | ... |Build the rows from the CLIN structure preference captured in Block 5 question 19. If the user chose "by period," CLINs are base/OY1/OY2/...; if "by function," CLINs are development/operations/maintenance/training; if "by deliverable," each major deliverable gets its own CLIN. Always add separate travel and ODC CLINs if travel/ODCs are in scope.
After the table, tell the user: "This CLIN structure is a suggested starting point for Section B of the solicitation. It is not part of the SOW/PWS and should not be pasted into the document body. The contracting officer owns the final CLIN structure."
Same DO NOT rules apply as for the Staffing Handoff above: never written into the SOW/PWS body or any appendix, never saved as a file, never relabeled as "CLIN Structure," "CLIN Table," "Pricing Schedule," or similar inside the document, and emitted only as a markdown table in chat.
Why this rule exists: The PWS is Section C of the UCF (description of work). CLINs live in Section B (supplies/services and prices/costs). Including CLINs in the PWS body creates a conflict when the CO drops a real Section B on top.
User doesn't know the answer to a decision: Provide a recommended default with rationale. Mark it as an assumption in the document. Example: "If you're unsure about coverage model, business hours (M-F 8-5) is the default for non-emergency federal contact centers. I'll mark this as an assumption you can revisit."
SOO is too vague to decompose: If the SOO is under 300 words or provides fewer than 3 actionable scope details, tell the user: "This SOO doesn't have enough specificity to convert directly. I'll use it as background context, but Phase 1 will need to collect most decisions fresh."
Scope exceeds single contract: If Phase 1 decisions imply >50 FTEs, >$75M, or span >3 distinct technical domains, flag that this may need to be broken into multiple contracts. Suggest logical break points (e.g., development vs. operations, platform vs. contact center staffing).
User wants to skip Phase 1: Don't let them. The decision tree is the value. If they say "just write the SOW from this SOO," explain: "The SOO describes objectives, but a SOW requires decisions the SOO intentionally leaves open — like staffing model, build vs. buy, phasing, and CLIN structure. These take about 10 minutes to walk through, and they're what make the SOW defensible."
Budget-constrained scope reduction (Workflow C): When reducing scope to fit budget, work backwards: identify the highest-cost labor categories from the IGCE, map them to tasks/objectives, and present trade-offs: "Removing 24/7 coverage saves ~$X by eliminating night-shift agents, but means no live response outside business hours. Replacing custom AI with COTS chatbot saves ~$Y in developer FTEs but limits NLP accuracy." Let the user choose which scope reductions are acceptable, then regenerate affected SOW/PWS sections.
MIT © James Jenrette / 1102tools. Source: github.com/1102tools/federal-contracting-skills
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.