What is the Ncr Writeup skill?
Ncr Writeup is a coding skill by Anthropic for Claude Code, Cursor, Codex and other AI coding agents. Writes the nonconformance report: what was found and measured, the specific requirement it violates cited to its document and locator, how many parts are actually suspect and why that scope rather than a narrower one, and where every one of them physically is across all five locations. Searches prior NCRs and CAPAs at the moment of writing and reports whether the earlier fix held.
The formal record that something did not meet its requirement, written by whoever found it — an inspector, an operator, a customer complaint landing in somebody's inbox.
What the SKILL.md covers
- Inputs
- Workflow
- Step 1 — Capture the finding, structured
- Step 2 — Cite the requirement
- Step 3 — Scope the affected quantity
- Step 4 — Locate the parts
- Step 5 — Recommend containment per location
- Step 6 — Search history, now
- Step 7 — Draft the escape notification
- Step 8 — Write the register row, and update the Quality Register
- Author
- Anthropic
- Pack
- anthropics/claude-plugins-official (53 skills)
- Category
- Coding, #257 of 1763
- Alyn Score
- 79 / 99
- Files
- 4, includes references
- License
- Apache-2.0
- Last updated
- 13 h ago
- Works with
- Claude Code, Claude, Cursor, Codex, Gemini CLI, Copilot
Ncr Writeup compared to similar skills
| Skill | Alyn Score | GitHub stars | Updated |
|---|---|---|---|
| Ncr Writeup · Anthropic | 79 | 47k | 13 h ago |
| PR · Matt Pocock | 94 | 324k | 32 h ago |
| Gongwen Party · duyunzhoudyz | 60 | 809 | 33 h ago |
| Caveman Setup · JuliusBrussee | 88 | 120k | 13 h ago |
Install Ncr Writeup
Pick your agent. Every command is ready to paste.
npx alyn-cli add ncr-writeupDetects your agents (Claude Code, Cursor, Codex and 70+ more) and installs to the right folder. Add -g to install globally.
npx skills add anthropics/claude-plugins-official --skill ncr-writeupOr use the open skills CLI directly.
01
Install it
Run the command above, or upload the folder in Claude.
02
Ask naturally
Describe the task. Your agent loads ncr-writeup when the request matches its description.
03
Name it if needed
If it does not trigger, say “use the ncr-writeup skill”. In Codex, type $ncr-writeup.
NCR Writeup
The formal record that something did not meet its requirement, written by whoever found it — an inspector, an operator, a customer complaint landing in somebody's inbox.
It has to answer four questions, and the skill is built around them in order, because each one depends on the last:
- What was found — the observed condition, measured where possible. "Hole diameter 0.512 in," not "hole too big."
- Against which requirement — cited to a document and a locator.
- How many parts — rarely just the one somebody found.
- Where they physically are — which is containment.
Quick start
→ Capture the finding, structured: part, WO, lot, operation, condition, who, when
→ Cite the requirement. Cannot locate one? Flag blocking. Never invent one
→ Scope the suspect quantity, and show the reasoning behind the scope
→ Locate the parts across all five locations
→ Recommend containment per location, ordered by urgency
→ Search history NOW: prior NCRs and CAPAs, and whether the fix held
→ Parts at a customer? Draft the escape notification against its clock
→ Write the register row, keyed <site>_<ncr_ref>, and update the Quality Register
→ "Close NCR-…"? The user's decision: set the row closed and republish
Inputs
First, find the plant setup: from the task's own folder (never cd into the plugin), run
python3 -I <this skill's folder>/../../shared/scripts/plant_setup.py find, do its setup_page_first step, then read the profile at
profile_path and any rate at rates_path, per ../../shared/replies.md.
| Input | Source | Form |
|---|---|---|
| The finding | Inspector notes, operator report, customer complaint email | Conversation, M365 mail, pasted text |
| Inspection measurements | Quality system export to the M365 folder | CSV/XLSX |
| The requirement | Drawing, spec, standard clause, customer PO flow-down | M365 documents |
| Work order, lot, quantity produced | data-consolidate workbook, then the ERP |
../../shared/contracts/consolidated-dataset.md |
| Where the parts are, on-hand | inventory tab — one row per part per location |
Same workbook |
| Where the parts are, shipped | ERP shipment records. Infor M3 delivery lines carry no lot (../../shared/erp-connectors.md): they give candidate shipments by part and date, each unverified until confirmed |
Connector |
| Prior NCRs and CAPAs | M365 quality document library | Documents |
| The plant's NCR template | ## Plant context, captured during onboarding |
Template |
The inspection measurements come from the quality export rather than the
workbook, because an NCR quotes the condition as measured — "hole diameter
0.512 in" — and that is the value the gage wrote, not the normalized one.
Everything about identity still comes from the dataset: which work order,
which lot, where the parts are. See What this dataset is authoritative for in
../../shared/contracts/consolidated-dataset.md.
Read the plant's vocabulary, sites, standards and template location from the
## Plant context block. A plant that says "traveler" gets an NCR that says
traveler.
Workflow
Step 1 — Capture the finding, structured
Part and revision, production work order, lot, the operation it was found at, quantity found, the measured or observed condition, who found it, and when with its timezone.
Take the measurement as recorded, with its gage. A characteristic measured on a gage whose calibration has lapsed is a finding of its own — check the date if one is available.
Step 2 — Cite the requirement
Locate the drawing, spec or clause and cite the document, the locator inside it, the characteristic, and the stated value. Cite it at the revision the part was actually built to, not the current one.
If the requirement cannot be located, flag the NCR as blocking and say what
was searched. Never assert one. Read reference/requirement-citation.md —
this is the field the whole chain gates on, and blocking here is a normal,
correct outcome.
Step 3 — Scope the affected quantity
From the work order quantity, the lot, and the production window. Reason explicitly from the suspected mechanism outward, and state the assumption.
Where traceability is incomplete, the scope widens and says why. Never narrow it
to make the number look better. Where the widened number is still only what
can be counted, it is a floor: set qty_suspect_is_minimum and write at
least 660 everywhere it is printed. Where the source records no count of parts
found, qty_found is null with qty_found_reason, never a number filled in.
Read reference/scope-and-containment.md.
Step 4 — Locate the parts
Read the workbook first. Place on-hand quantity from the inventory tab —
one row per part per location — and from production_output for what is still
at the machine. Map each location into the five containment types using the
plant's vocabulary from the ## Plant context block.
Then read shipment records for in-transit and at-customer. Those are not on
inventory. Use the ERP when it is connected.
If the inventory tab is absent, do not treat that as zero on hand. Ask
location by location, or read the ERP / an inventory export, and record each
answer as unverified until confirmed. That is the missing behavior on
../../shared/contracts/consolidated-dataset.md.
Address all five, including with a zero quantity. An omitted location reads
as "none there" rather than "not checked," and checked: false is not qty: 0.
Two shapes, one meaning. In the structured record every entry carries a
number, because ../../shared/contracts/ncr.md requires qty and uom: an
unchecked location is written qty: 0, uom: <the part's unit>,
checked: false, never null. In the human-readable containment table the
same row reads "not checked" and never "0 parts" — a zero in the table is
the false statement absent-is-not-zero.md exists to prevent. If "unknown"
ever needs to be representable in the payload itself, that is a contract
change raised with its owner, not a null emitted quietly.
The table's quantity cell is built from checked, not from qty:
| Location | Suspect qty | Action | Urgency |
|---|---|---|---|
| Installed at customer | not checked | Confirm with the customer whether any of the lot was installed | immediate |
| Finished goods | 0 (checked, none on hand) | — | routine |
A checked location with none on hand says "0 (checked)"; an unchecked one says "not checked" and no number. The two are never the same cell.
Step 5 — Recommend containment per location
Ordered by urgency, with the action for each and the owner left blank for assignment. Containment happens before anyone knows the root cause — the point is to stop the bleeding.
The order is customer side first, always: installed_at_customer,
at_customer, in_transit, wip_at_machine, finished_goods. Parts already
in a customer's product are the escape with a contractual clock running; parts
on our own shelf can wait an hour. Every entry carries its urgency
(immediate, same_day, routine), and the table is sorted by it, not by
where the parts happen to be easiest to find.
Step 6 — Search history, now
Prior NCRs and CAPAs on the same part, the same defect, the same process, the same supplier. This runs when the NCR is written, not on request, because the moment of detection is the only moment anyone is looking.
Report whether the earlier corrective action held — the highest-value single
line in Chain 2. With no searchable library, say "no searchable history
available" rather than nothing. Prior NCRs with no CAPA records are reported
as both facts: prior_ncrs_found counts them, and the line says whether a fix
held cannot be judged. Read reference/recurrence-and-escape.md.
A prior NCR's part label is checked before it counts as same-part
history. Where the dataset's ncrs tab flags it ncr_part_differs or
ncr_dated_before_wo, or where the ERP holds a different part for the work
order the NCR cites, it is not same-part history: list it as unreliable, with
both parts, and say what it would take to settle.
Step 7 — Draft the escape notification
If containment placed any suspect parts at or past a customer, draft the customer notification as the immediate next output, with the required content and the contractual clock stated at the top.
If the customer locations are unchecked and shipment is plausible (orders
for the suspect parts promised before today, a customer named on the NCR), the
escape is possible, not ruled out: set escape_possible, leave
escape_detected_at null, draft the notification marked conditional on the
shipment check, and name that check as an action with an owner to fill:
"Confirm whether any of WO-88412/413/414 shipped on Example Hydraulics's 7 and 19 Sep
orders." Saying nothing because nothing was verified is how the clock runs out.
Chained straight off containment so nobody has to remember it separately, under time pressure, against a 24 to 48 hour window. Missing that window is a bigger problem than the defect.
Step 8 — Write the register row, and update the Quality Register
A single run knows one NCR. The Quality Register lists all of them, so this
run leaves a row behind. Per ../../shared/live-dashboard.md, which names
every tool call:
- Find the register. The
## Dashboardsline on the Open work page, thenArtifactlistfor the exact title ": Quality Register", then create it. - Build the row per
../../shared/contracts/quality-register-record.md, keyed<site>_<ncr_ref>: status, containment summary, the escape clock, the recurrence finding and whether the previous fix held.statusisblockedwhen no requirement could be located,awaiting_approvaluntil the quality owner approves the NCR, thenopen. - Read the existing row first, if there is one, and carry forward every
field this skill does not own. A second run on the same NCR overwrites its
row and keeps the 8D fields
root-cause-capawrote. One NCR, one row. setthe row,listthe collection, compute the register in code and publish it, per the register layout in../../shared/live-dashboard.md.- Report it: "Updated Fairview: Quality Register,
<url>. Private to you until you share it." followed by the sensitivity line, "Internal: it lists customer names and notification deadlines. Check who you share it with." On a fallback: the Quality page in the conversation, its placement line, and "The Quality Register was not updated: [reason]." That page could not read the other rows, so it shows this NCR only and says so; it never prints an open count it could not compute. The row is still in the reply's summary table, marked not stored.
The register banner says what it is not: "Tracks NCRs run through this plugin since [date]. Not your full quality library." A manager reading "3 open" will otherwise assume that is everything.
Not a gate. The register is not a system of record, the row carries the NCR's own approval state, and nothing in it reaches a customer. The NCR's two gates are unchanged.
Closing an NCR
Closing is the user's decision, never this skill's. When the user says
"close NCR-2026-0141," read that row, set status: closed with closed_at
and closed_by as the user gave them, and republish. It leaves every open
count and moves to the closed section. Say that this closes it in the register
only; the NCR in the plant's quality system is closed by whoever owns it.
If the register cannot be read or written this run, the close was not recorded. Say so plainly: "NCR-2026-0141 was not closed in the register: [reason]. The Quality Register was not updated." Never report an NCR closed that was not written closed. There is no in-page editing.
Approval gates
Two gates, and neither is a formality.
Before the NCR is final — a quality owner confirms the finding, the cited
requirement, the suspect scope and the containment plan. This is the Chain 2 and
Chain 5 gate. The NCR carries approval_state, and root-cause-capa blocks
anything customer-facing until it reads approved.
Before anything reaches a customer — the escape notification is drafted, shown, and sent by a person. Nothing goes to a customer unattended, ever. Speed is the point of drafting it automatically; unattended sending is not.
Nothing is written back to the ERP or to the quality system. The NCR is a document the quality owner files.
Output
Every document this skill produces is printed in the reply, in full.
Saving a copy to a file as well is fine, as Word or Excel per ../../shared/replies.md, never .txt; a file instead of the reply is not.
The person reads the reply, and every delimited block and outbound check lives
in it — a document only on disk has been neither seen nor checked.
A record handed to another skill is saved and summarised, never pasted as
raw YAML; memory blocks are written where the plant's memory lives; and the
name on an approval is asked, never taken from the account. All three per
../../shared/replies.md.
Report depth follows the plant's preference. The ## Plant context
block's Report depth line is summary-first or full (absent means
full). Summary-first puts a short summary — what was found, what it
affects, what happens next — above the full document; it moves nothing out and
drops nothing. Every required field is still in the document below it.
The NCR, in the plant's or the customer's controlled template captured
during onboarding — identification, requirement cited, condition found with
measurements, affected quantity with its reasoning, and the disposition-pending
flag.
Per ../../shared/artifact-style.md, a controlled document is never
house-styled. An NCR has a contractual shape and restyling it would make it
wrong, not nicer.
Containment plan — actions by location, ordered by urgency, owners blank.
Recurrence finding — prior related records, and whether the previous fix held.
Escape notification draft — when applicable.
The structured NCR — per ../../shared/contracts/ncr.md, in exactly the
shape root-cause-capa consumes with no transformation between.
The register row — per ../../shared/contracts/quality-register-record.md,
with its key <site>_<ncr_ref>, in the reply's summary table on every run, stored
or not.
The Quality Register — ": Quality Register", the Quality
command-center page, updated in place per ../../shared/live-dashboard.md.
It carries this NCR by reference, never the document. The run ends with the
dashboard line and the sensitivity line, or with the fallback and "The
Quality Register was not updated." Never "shared," never "posted." Read
../../shared/command-center.md.
Edge cases and failure modes
- The requirement genuinely cannot be found — flag as blocking, list what was searched. Do not invent it.
- Traceability is incomplete, no lot recorded — widen the suspect scope and say why it had to widen.
- The finding is subjective — "surface looks wrong." Capture as observed, set the subjective flag, note that no measurable requirement was cited.
- Parts shipped to multiple customers — separate containment and a separate notification per customer. Never merge.
- Multiple defects on one part — one NCR with multiple findings, not several NCRs, unless the customer's template requires otherwise.
- The inspection export is stale or does not cover the run — say so at the top. A containment scope computed from data that stops before the event is wrong in the dangerous direction.
- Two revisions of the print in circulation — record both, say which the part was built to. This is often the finding rather than a nuisance.
- The same NCR written up twice — the second run overwrites its register row by key. One NCR, one row, and the 8D fields already on it are kept.
- Asked to close an NCR that has no register row — say it is not in the register, and close nothing. The register only knows NCRs run through this plugin.
Degradation
The skill runs on a pasted finding and an uploaded drawing with no connector at all.
| Not available | What happens |
|---|---|
Consolidated dataset, or no inventory tab |
Ask where the parts are, location by location, or read the ERP / an inventory export. Record each answer as unverified until confirmed. Never treat a missing tab as zero on hand |
| The ERP (NetSuite or Infor M3) | On-hand can still come from the workbook. In-transit and at-customer cannot. Ask about shipments, and record those two locations as unverified until confirmed |
| Inspection export | Work from the finding as described. Measurements are whatever the inspector reports |
| Quality document library | no_searchable_history. Never presented as a first occurrence |
| The plant's or the customer's template | Use a neutral NCR structure covering the four questions, and flag that the controlled template was not available |
| Customer contractual terms | Draft the notification without a computed deadline and ask where the terms are recorded. Do not guess a window |
The Artifact or ArtifactData tools |
The NCR is unaffected. The Quality page is offered in the conversation, showing this NCR only, with "The Quality Register was not updated." A close request is not recorded, and the reply says so |
Chain position
Chain 2, inspection to CAPA — step 1, feeding root-cause-capa.
Chain 5, supplier escape to alternate source — step 1. Where the cause turns
out to trace to purchased material, the chain runs on through root-cause-capa
into sourcing.
Metric. Nonconformance closure time; escape response time — the clock from detection to customer notified, which step 7 is what moves.
Chain 5's escape-to-RFQ metric is segmented, and this skill opens it. That
window runs escape detected → supplier-caused determination → RFQ issued, and no
single skill controls it. This skill owns detection and containment speed in the
first segment, alongside root-cause-capa's investigation time; the second
segment belongs to supplier-quote-request.
Stamp escape_detected_at on the NCR when containment first places parts at
or past a customer. That is the start of the window, it is not the same moment
as found_at, and it cannot be reconstructed afterwards. root-cause-capa
carries it forward onto the supplier-caused flag.
Reference files
| File | Load when |
|---|---|
reference/requirement-citation.md |
Step 2 — what counts as a requirement, revisions, and what to do when there is none |
reference/scope-and-containment.md |
Steps 3 to 5 — reasoning the scope outward, and the five locations |
reference/recurrence-and-escape.md |
Steps 6 and 7 — searching at creation, and the contractual clock |
../../shared/contracts/consolidated-dataset.md |
Step 4 — the inventory tab, and what to do when it is absent |
../../shared/contracts/ncr.md |
On emit — the exact shape root-cause-capa consumes |
../../shared/live-dashboard.md |
Step 8 and on a close — finding and updating the Quality Register, the banner, the fallback |
../../shared/contracts/quality-register-record.md |
Step 8 — the register row, and which fields this skill owns |
../../shared/command-center.md |
When "updated" may be said |
Tips for Ncr Writeup
- • Start a fresh session after installing so your agent picks up the new skill.
- • It bundles reference files. The agent reads them only when needed, so they cost no context until then.
- • It is part of a pack with 53 skills. Install only the ones you need with --skill to keep triggers precise.
- • If two skills overlap, mention the one you want by name.
Questions about Ncr Writeup
What does the Ncr Writeup skill do?
Writes the nonconformance report: what was found and measured, the specific requirement it violates cited to its document and locator, how many parts are actually suspect and why that scope rather than a narrower one, and where every one of them physically is across all five locations. Searches prior NCRs and CAPAs at the moment of writing and reports whether the earlier fix held.
How do I install Ncr Writeup?
Run "npx alyn-cli add ncr-writeup" in your project. The Alyn CLI installs it for Claude Code, Cursor, Codex and 70+ other agents. In Claude on the web, upload the skill folder as a ZIP under Customize > Skills.
Does Ncr Writeup work in Cursor and Codex?
Yes. Ncr Writeup uses the open SKILL.md format, so it works in Claude Code, Claude, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot and other agents that support agent skills.
What is inside the Ncr Writeup skill?
The SKILL.md covers Inputs, Workflow, Step 1 — Capture the finding, structured, Step 2 — Cite the requirement, Step 3 — Scope the affected quantity, Step 4 — Locate the parts, and the skill folder has 4 files.
What is a good alternative to Ncr Writeup?
PR by Matt Pocock is the highest-ranked similar skill from another creator, with an Alyn Score of 94 compared to 79 for Ncr Writeup.
Is Ncr Writeup free?
Ncr Writeup is open source on GitHub under the Apache-2.0 license. It is free to install; check the license before commercial use.
Who made Ncr Writeup?
Ncr Writeup is published by Anthropic in the anthropics/claude-plugins-official repository, together with 52 other skills.



