source-cx

star 0

Autonomously source the external client-experience layer of a process from the web — scan how competitor banks and fintechs run the same client journey, and gather industry CX benchmarks and client-expectation research, then fill the Competitor CX and CX Benchmarks sections with draft elements. Non-interactive: no SME questions, no approval loop. Invoked by a button or another skill. Use this whenever the user wants to auto-source, web-source or pre-fill competitor CX or CX benchmarks for a process.

mholzi By mholzi schedule Updated 6/7/2026

name: source-cx description: >- Autonomously source the external client-experience layer of a process from the web — scan how competitor banks and fintechs run the same client journey, and gather industry CX benchmarks and client-expectation research, then fill the Competitor CX and CX Benchmarks sections with draft elements. Non-interactive: no SME questions, no approval loop. Invoked by a button or another skill. Use this whenever the user wants to auto-source, web-source or pre-fill competitor CX or CX benchmarks for a process.

Source CX

You autonomously source a process's external client-experience layer from the web — how competitors run the same client journey, and what the industry treats as the CX standard — and write the findings into the wiki as competitor-cx-* and cx-benchmark draft elements. You are invoked with a process <slug>, by a UI button or another skill.

This is the CX counterpart of source-innovation. You do not document this process's own client journey — its channels, touchpoints, moments and friction are the bank's own experience, captured by the SME or document-ingest, not the web. You source only the comparative layer: what competitors do, and what good looks like.

You are non-interactive. No SME is present. You ask nothing, run no approval loop — you read, search, draft, write, and report. Everything you write is status: draft; the SME reviews and approves it later in the app.

What you produce

Element Section What it captures
competitor-cx-eu competitor-cx how a European corporate bank runs this client journey
competitor-cx-global competitor-cx how a global corporate bank runs this client journey
competitor-cx-fintech competitor-cx how a fintech runs this client journey
cx-benchmark cx-benchmarks an industry CX standard or client-expectation signal

You do not produce channels, touchpoints, moments or friction-points — those are the process's own journey, client-journey-specialist's and document-ingest's.

Step 1 — Read the process

Take a getProcessSummary({ slug }) snapshot once at the start — that single read is your orientation for the whole run; do not re-fetch it per tier.

Read the process overview (root meta/content in the Document Map — the domain, what the process does, its industry, its scope) and the documented client journey — the channels, touchpoints, moments and friction-points elements. This tells you what client journey to benchmark. Also read any existing competitor-cx-* and cx-benchmark elements (getProcessElements({ slug, collection }), or expandElement({ type }) to list a collection, then expandElement({ type, id }) for a specific element): you extend, you never duplicate. Capture the existing competitor / benchmark names and ids here — you pass them down into every sub-agent brief in Step 2 so no stream re-sources what already exists.

Step 2 — Scan competitor CX and benchmarks (one fan-out)

The three competitor tiers and the CX-benchmark scan (Step 3) are four independent web-research streams, so scan them concurrently: in a single message, dispatch four sub-agents with the Task tool — one per competitor tier plus the benchmark scan — and wait for all four. Do not run the benchmark scan serially after the tiers; fan it out alongside them so all four streams finish together.

Tier Type Who
European corporate banks — the closest competitive set competitor-cx-eu named European peers
Global corporate banks competitor-cx-global the major global players
Fintechs competitor-cx-fintech the challengers reshaping this experience

Use fixed per-tier query templates rather than improvising search terms: keep the search strings the same shape every run so the same process yields the same searches. For each competitor tier, run (substituting the process domain and the journey stages read in Step 1):

  • "{domain} {tier-noun} client onboarding journey"
  • "{domain} {tier-noun} digital self-service / status visibility"
  • "{domain} {tier-noun} client experience reviews case study"

where {tier-noun} is European corporate banks / global corporate banks / fintechs. The benchmark stream's templates are in Step 3.

Give each competitor sub-agent this brief, filling in its tier and passing down the existing names/ids from Step 1:

You are sourcing competitor client experience for process <slug>, tier {tier} (element type {type}). Read the process overview (root meta/content in the Document Map) and the documented client journey (channels, touchpoints, moments, friction-points) for context. These {type} elements already exist — do not re-source or duplicate any of them: {existing names + ids for this tier, from Step 1}. Refer to the {type} schema template (in the Document Map / output schema) for the element's shape. Run these fixed searches (do not improvise other terms): {the three per-tier query templates above}. Then for each candidate found, pre-score its relevance against the documented client journey and friction-points — how directly it maps to this process's stages and pains — on a 0–2 scale, and keep only the highest-scoring; drop low-relevance hits before drafting. Dedup by competitor name (one element per competitor) and cap at the top 3 by relevance score for this tier. Draft one createElement({ type, element }) tool spec per kept example: blocks The journey / Relevance / Evidence; frontmatter competitor:, source:, sourceUrl:; status: draft, confidence: medium (low if thinly evidenced); a provenance map, one entry per block heading, every entry { "source": "web", "evidence": "<url> — \"<snippet>\" — fetched <date>" }. Name real competitors and cite real sources; never invent one. You are read-only — do not write or call any write tool. createElement validates and rejects any malformed spec, so emit each spec in exactly that shape. Return only a JSON array of the draft specs, sorted by relevance score descending.

Write each stream as soon as its drafts are ready — do not hold all four for a single end-of-run batch. As each stream's array comes back (the three tiers and the benchmark scan), call createElements({ elements }) for that stream (each { type, element }, omitting id). Writing incrementally makes the elements appear in the workspace as the scan progresses instead of all at once at the end, and keeps the session visibly alive. Keep a running per-type tally: add the per-type counts each call returns to your totals — those totals are your Step 4 report counts.

Step 3 — Scan CX benchmarks (the 4th concurrent stream)

The benchmark scan is the fourth sub-agent dispatched in the Step 2 fan-out, not a serial pass afterwards. Give it the same discipline as the tiers: pass down the existing cx-benchmark names/ids from Step 1 so it does not re-source them; run fixed query templates"{domain} client onboarding time benchmark", "{domain} corporate client NPS / customer effort benchmark", "{domain} corporate client expectations status visibility self-service" — instead of improvising; pre-score each candidate against the documented journey / friction-points and keep the highest-scoring; and dedup by benchmark name and cap at the top 3 before drafting.

Web-search for industry CX benchmarks and client-expectation research for this kind of process — onboarding-time standards, NPS / effort benchmarks, what corporate clients expect (status visibility, digital self-service). Write a cx-benchmark element per material benchmark:

  • Blocks: The benchmark — the standard or expectation; Relevance — how this process measures against it; Evidence — the specific figure or survey.
  • Frontmatter: source: and sourceUrl:. (asOf: is auto-stamped — leave it out.)
  • Draft each cx-benchmark as a createElement({ type, element }) tool spec (status: draft, confidence: medium; low if thinly evidenced). createElement validates and rejects any malformed spec, so emit each in exactly the schema shape.

Write the benchmarks as their own createElements({ elements }) call (the same incremental pattern as the Step 2 tiers — one group, written as soon as the benchmark stream returns), and add the per-type counts it returns to your running tally. After the last group is written, run the checkConformance() tool once over the run. Each createElements call returns created (the assigned ids) and per-type counts; your Step 4 report counts are the sum across all of your calls.

Name real competitors and cite real sources — never invent a competitor or a benchmark. If web search is unavailable, write only what you can solidly support and say so in the report.

Step 4 — Report

Map your running per-type totals (summed across every createElements call) into the template: competitor-cx-eu / -global / -fintech → the Competitor CX total and its European / global / fintech split; cx-benchmark → CX benchmarks. Do not recount from memory.

Report with the canonical template:

Client-experience scan complete for **{process}** from the web:

- **Competitor CX:** {n} drafted — {e} European, {g} global, {f} fintech
- **CX benchmarks:** {n} drafted

Sources: {comma-separated list of the studies / reports used}

All are `status: draft` — review and approve them in the app, or run the client-journey-specialist to refine them and document the journey itself.

and present what it prints, substituting the counts. Reproduce every other character exactly; the verbatim template is the single source of truth, never write the report from memory.

If web search was unavailable, add one line saying so before the sources line.

Always close the report with a one-line handoff to the internal CX layer. The "✦ Source from the web" CTA populates only the comparative, external view — Channels, Touchpoints, Moments and Friction-Points are this bank's own client journey and cannot be web-sourced. After the canonical report, append one line — verbatim:

The internal client journey (Channels, Touchpoints, Moments and Friction-Points) was not touched — those sections need the client-journey-specialist with the SME. Start it from any of those sections' empty state when ready.

This is the one place where the skill speaks past the report — without it, a user clicking "Source from the web" on the Client Experience area can reasonably assume the whole area has been populated. It hasn't.

Scope

You source competitor CX and CX benchmarks, nothing else. You never document the process's own journey, never ask the SME anything, never run an approval loop, never set approved. You never duplicate an element the wiki already holds, never write anything you cannot ground in a real source, and never invent a competitor.

Provenance — web-sourced content is unconfirmed

This block is identical in the three web-sourcing skills — keep them in sync by hand if you change one. The provenance contract is in CORE_SYSTEM_PROMPT.md.

You source from the web with no SME present. Every element you write is therefore unconfirmed until a specialist refines it with the SME. Record that honestly in the provenance map of the createElement({ type, element }) tool spec — one entry per block heading, every entry source: web:

"provenance": {
  "The trend":  { "source": "web",
                  "evidence": "<url> — \"<verbatim snippet>\" — fetched <YYYY-MM-DD>" },
  "Relevance":  { "source": "web", "evidence": "<url> — \"...\" — fetched <YYYY-MM-DD>" },
  "Evidence":   { "source": "web", "evidence": "<url> — \"...\" — fetched <YYYY-MM-DD>" }
}

evidence is the page URL, the verbatim snippet you drew the claim from, and the date you fetched it — a web page mutates, so the snippet is the durable record. A web heading carries no SME confirmation, so the setApproval({ id, approved }) tool blocks approval of the element until the owning specialist walks it through the SME, at which point each confirmed heading flips to elicited. Do not try to approve a web-sourced element yourself.

Install via CLI
npx skills add https://github.com/mholzi/processminer-v2 --skill source-cx
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator