To create PSM charts for the PSM questions asked in the Market Research Survey
SaferSkills independently audited psm-skill (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.
Turn a pricing survey into the four cumulative curves, the four key price points (PMC, OPP, IPP, PME) and the acceptable price range — then deliver an interactive chart, an Excel workbook, and a Word/PDF report.
A deterministic engine does all the math and the chart/Excel rendering. Your job is to wire it up to the user's file, sanity-check the column mapping, build the report, and explain the results. Do not re-implement the curve math yourself.
The user drops a CSV or Excel file. Find it under /mnt/user-data/uploads/. The file needs one row per respondent and four price columns (the four PSM questions). Extra columns (respondent ID, demographics, etc.) are fine and ignored.
If no file is present, check what the user has:
template at assets/psm_template.xlsx. Present it with present_files so they can fill it in. It has the four correctly-named question columns (which makes auto-detection foolproof), an Instructions sheet, and an Example sheet.
collecting responses, and briefly explain the four PSM questions.
python /path/to/skill/scripts/psm_analysis.py "<uploaded_file>" \
--outdir /mnt/user-data/outputs/psm --currency "$"Set --currency to match the data ($, €, £, AED, etc.; it is only used for cleaning and labels). The script auto-detects the four columns from header keywords, strips currency symbols, drops blank/non-numeric rows, and flags intransitive responses (those violating too_cheap ≤ cheap ≤ expensive ≤ too_expensive), excluding them by default.
It writes to the outdir:
results.json — price points, curves, diagnostics, the column mapping it chosepsm_curves.png — static chart (embed this in the report)psm_chart.html — self-contained interactive chartpsm_analysis.xlsx — Summary, Curves (+ native chart), Clean Data, ExcludedRead column_mapping from the script's stdout / results.json and confirm it matched the right column to each role. If headers were vague, it falls back to ordering the first four numeric columns by median. If the mapping looks wrong, re-run with explicit overrides (accepts a header name or a 0-based index):
... --too-cheap "Q1" --cheap "Q2" --expensive "Q3" --too-expensive "Q4"Also glance at n_analyzed, n_dropped_missing, and n_intransitive — a high intransitive share signals a data-quality or column-mapping problem worth raising.
Show the interactive chart inline using the visualizer (show_widget) by reading psm_chart.html content, OR present psm_chart.html as a file for download. Give the four price points and the acceptable range in a short readable summary. Pull interpretation language from references/methodology.md — especially the OPP-vs-IPP reading and the standard caveats (PSM gives an acceptable band, not a revenue-maximizing price or demand volume).
By default produce all three. The Excel workbook and both charts already exist from step 2. For the Word/PDF report, use the docx skill (and pdf skill if PDF is requested) — read that skill first, then build a report that contains:
the acceptable range (PMC–PME)
results.jsonpsm_curves.pngmethodology.md)n_analyzed, dropped, intransitive)Finally, call present_files with the report first, then the Excel and the interactive HTML chart.
Use this structure when summarizing in chat:
Recommended price (OPP): <currency><price>
Acceptable range (PMC–PME): <currency><low> – <currency><high>
Indifference price (IPP): <currency><price>
Based on N = <n_analyzed> valid responses (<dropped> dropped, <intransitive> intransitive).--currency; the cleaner removesthousands separators and stray symbols automatically.
ask for more data.
only two are present, explain that a full PSM isn't possible.
(Newton-Miller-Smith) becomes possible — see references/methodology.md. Only pursue it if intent data genuinely exists; otherwise keep scope to classic PSM.
assets/psm_template.xlsx is a ready-to-fillworkbook whose headers match the engine's auto-detection. Offer it whenever a user needs to collect or reformat responses before analysis.
references/methodology.md; read it before writing report narrative.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.