positioning-statement — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited positioning-statement (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.
Positioning is the context you set so a buyer instantly understands what you are, why you are different, and why they should care. Get it wrong and every downstream asset — the headline, the deck, the launch — is fluent nonsense written about the wrong product for the wrong person. This is the first GTM step. Everything else ([[messaging-hierarchy]], [[launch-plan-sequencer]], [[launch-day-runbook]], [[plg-motion-designer]], [[sales-enablement-kit]]) is calibrated to its output, so do it first and do it honestly.
The trap is positioning from ambition — the category you wish you led, the buyer you wish you had. Position from evidence instead: the alternatives real customers weigh, the attributes you actually have, and the segment that already loves you. This follows April Dunford's method (Obviously Awesome): build positioning bottom-up from competitive alternatives, not top-down from a category you picked.
Reach for it before writing any customer-facing copy or planning a launch, and re-run it whenever the product, the best-fit customer, or the competitive set has moved. If a founder says "we sound generic," "nobody gets what we do," or "what category are we even in," that is a positioning problem, not a copy problem — start here.
Run them in sequence; each later component is derived from the earlier ones. Do NOT jump to the market frame first — the category you can credibly claim is an output of the value you deliver, not an input you assert.
did not exist — and be honest: the real alternative is usually a spreadsheet, a manual process, a hire, or "do nothing," not the funded competitor you fear. These alternatives define the frame the buyer is already in. (For deep rival teardowns, defer to the catalog's competitive-intelligence skill — here you only need the alternatives a buyer weighs at the point of decision.)
have that the alternatives do not. Attributes are objective and provable — "reconciles in real time," "ships with 40 connectors," "SOC 2 from day one" — not adjectives like "powerful" or "intuitive." If an alternative can claim it too, it is not unique; cut it.
enables for the customer. Attribute → value: "reconciles in real time" → "closes the books in a day instead of a week." Buyers do not buy attributes; they buy the outcome the attribute makes possible. Cluster the values into 2–3 themes — these become the spine of [[messaging-hierarchy]].
the segment for whom your unique value is urgent, not nice-to-have. Describe them by characteristics you can target (role, company stage, trigger event), not a vague persona. Narrow beats broad: the tightest segment that loves you gives the sharpest positioning. A weak best-fit segment is the #1 silent positioning killer.
obvious to that segment — the frame of reference that tells the buyer what to compare you against and what to expect. You can lead a known category, fight for a slice of one, or (rarely, expensively) create a new one. Pick the frame that makes your unique value the obvious choice; the wrong frame makes your strengths look irrelevant.
Deliberately out of scope here: price points and packaging tiers. Positioning sets the frame; what to charge inside it is [[pricing-strategy]] / [[saas-pricing]]. Naming, taglines, and page copy are downstream in [[messaging-hierarchy]].
Assemble the five components into a single tight internal paragraph. This is an internal alignment artifact, not customer copy — it is the brief every later skill reads. Fill this template:
For [best-fit segment, described by targetable traits]
who [the trigger / situation that makes the value urgent],
[Product] is a [market frame / category]
that [the single most important value, the so-what].
Unlike [the dominant competitive alternative they'd otherwise choose],
[Product] [the unique attribute(s) that make that value possible].Worked example (a fictional close-automation tool):
For Series-A-to-B SaaS controllers
who are closing the books manually in spreadsheets and missing board deadlines,
LedgerLoop is a continuous-close accounting platform
that lets finance close the month in a day instead of a week.
Unlike general ledgers and bolt-on close checklists,
LedgerLoop reconciles every transaction in real time as it lands,
so the books are always one day from done.Note what the example does NOT do: no price, no "powerful/intuitive," no "for everyone," no invented category nobody searches for. Every clause traces to one of the five components.
A self-contained Node script that scores a candidate positioning statement against the five components and the most common failure modes, so the founder gets a sharp, repeatable check instead of a vibe. Save as score-positioning.mjs and run node score-positioning.mjs.
// score-positioning.mjs — score a positioning statement, Dunford-style.
// No deps. Edit the `p` object, then: node score-positioning.mjs
const p = {
segment: "Series-A-to-B SaaS controllers",
trigger: "closing the books manually in spreadsheets, missing board deadlines",
category: "continuous-close accounting platform",
value: "close the month in a day instead of a week",
alternative: "general ledgers and bolt-on close checklists",
attributes: ["reconciles every transaction in real time as it lands"],
};
// Words that signal you wrote an adjective instead of a provable attribute/value.
const FLUFF = ["powerful", "intuitive", "seamless", "robust", "innovative",
"world-class", "best-in-class", "cutting-edge", "easy-to-use", "next-gen"];
const BROAD = ["everyone", "anyone", "all businesses", "any company", "teams of all sizes"];
const checks = [
["Has a best-fit segment", () => p.segment.trim().length > 0],
["Segment is targetable, not 'everyone'",
() => !BROAD.some((b) => p.segment.toLowerCase().includes(b))],
["Has a trigger that makes value urgent", () => p.trigger.trim().length > 0],
["Names the real competitive alternative",
() => p.alternative.trim().length > 0],
["Has >=1 unique, provable attribute", () => p.attributes.length >= 1],
["Value reads as an outcome (has 'instead of' or a metric/verb)",
() => /(instead of|in (a|one) |without |so |faster|less|days?|hours?|week)/i.test(p.value)],
["No adjective fluff in value/attributes",
() => ![p.value, ...p.attributes].some((s) =>
FLUFF.some((f) => s.toLowerCase().includes(f)))],
["Category is a frame, not a slogan",
() => p.category.trim().split(/\s+/).length <= 5 && p.category.trim().length > 0],
];
let pass = 0;
console.log("\nPositioning scorecard\n---------------------");
for (const [label, fn] of checks) {
const ok = fn();
if (ok) pass++;
console.log(`${ok ? "PASS" : "FAIL"} ${label}`);
}
const pct = Math.round((pass / checks.length) * 100);
console.log(`\nScore: ${pass}/${checks.length} (${pct}%)`);
console.log(pct === 100
? "Tight. Hand it to messaging-hierarchy."
: "Fix the FAILs before writing any copy.\n");Expected output for the example above:
Positioning scorecard
---------------------
PASS Has a best-fit segment
PASS Segment is targetable, not 'everyone'
PASS Has a trigger that makes value urgent
PASS Names the real competitive alternative
PASS Has >=1 unique, provable attribute
PASS Value reads as an outcome (has 'instead of' or a metric/verb)
PASS No adjective fluff in value/attributes
PASS Category is a frame, not a slogan
Score: 8/8 (100%)
Tight. Hand it to messaging-hierarchy.The positioning is done when:
free-floating claims.
"do nothing" or a spreadsheet — not the competitor that scares the founder.
claim it too, it is cut.
not a demographic mood.
guess what you compete with from the category alone.
without a follow-up "wait, but what is it?"
brief; the customer-facing words are [[messaging-hierarchy]]'s job.
[[saas-pricing]]. Positioning is the frame, not the number.
to educate a market into it. Creating a category is the most expensive play in positioning; most products should lead or sub-segment an existing one.
spreadsheet or doing nothing. You will answer questions no buyer is asking.
positioning is invisible positioning; the tightest best-fit segment wins.
attributes. If you cannot demo it or cite it, it is not an attribute.
[[sales-enablement-kit]] until the one-paragraph statement scores clean — a launch built on muddy positioning only amplifies the muddiness.
A filled five-component worksheet (alternatives, unique attributes, value/so-what, best-fit segment, market frame), the assembled one-paragraph positioning statement, a passing positioning scorecard, and a one-line note on the single riskiest assumption in the positioning to validate with customers. Hand the paragraph to [[messaging-hierarchy]] to turn into copy, and to [[launch-plan-sequencer]] to plan the launch.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.