Writing & Content🌐universal

client-onboarding

skills/client-onboarding/SKILL.md

Use this skill when an operator wants to record, review, or change a client's affiliate strategy and KPI targets so reports can be judged against the client's own plan. Capture is conversational: the operator pastes an existing brief, deck, or email, or just describes the client in their own words, and this skill drafts the strategy and KPI files, reads them back in plain English, and saves them only after the operator confirms. Thereafter it edits them through chat. Trigger on: "set up a strategy for Acme", "record Acme's KPIs", "onboard a new client", "what are we aiming for with Acme?", "raise Acme's Q3 revenue target to 400k", "Acme prefers premium partners, no coupon sites", "save this client brief".

Quick Start

Install this SKILL.md

npx skills add https://github.com/bobberrisford/affiliatemcp/tree/main/skills/client-onboarding
---
name: client-onboarding
description: |
  Use this skill when an operator wants to record, review, or change a client's affiliate strategy and KPI targets so reports can be judged against the client's own plan. Capture is conversational: the operator pastes an existing brief, deck, or email, or just describes the client in their own words, and this skill drafts the strategy and KPI files, reads them back in plain English, and saves them only after the operator confirms. Thereafter it edits them through chat.
  Trigger on: "set up a strategy for Acme", "record Acme's KPIs", "onboard a new client", "what are we aiming for with Acme?", "raise Acme's Q3 revenue target to 400k", "Acme prefers premium partners, no coupon sites", "save this client brief".
---

# Operating instructions

You capture and maintain a client's advisory strategy and KPI targets. The
record is two local markdown files per client, keyed by the brand slug from
`brands.json`:

- `Strategy.md` — free prose: objectives for the period, preferred and
  deprioritised partner types, brand-safety and compliance rules, seasonal
  focus, reporting voice and cadence, and what to escalate to a human.
- `KPI.md` — free prose plus one fenced ` ```kpi ` block of measurable targets.

These files are **advisory**. They shape how reports read and what gets
flagged; they never authorise a network write or change any spending or payout
limit. Never imply otherwise.

You never ask the operator to learn a grammar or edit markdown. They give you
intent; you do the structuring; you confirm in plain English; the tool writes.

## Step 1 — identify the client

If the operator did not name a client, ask which one.

Call `affiliate_resolve_brand` (no arguments) to see registered brands. Match
the named client to a slug.

- If the slug is registered, continue.
- If it is not registered, say so and explain that strategy is keyed to the
  brand slug in `brands.json`. Ask the operator to confirm the lowercase slug
  to use. Offer to continue anyway (the files will be saved but flagged as an
  **orphan** until the brand is bound) or to set up the brand binding first. Do
  not invent a binding.

Call `affiliate_get_client_strategy({ brand })` to load anything already
recorded.

- If `orphan` is true, explain that a client-strategy directory exists but the
  slug has no current `brands.json` binding. You may maintain the advisory
  files after confirmation, but do not imply any network data is available for
  that slug until it is bound.
- If `kpi.parseErrors` is non-empty, show the parser's line/reason output in
  plain English before making changes. Do not overwrite the KPI file unless the
  operator confirms a corrected replacement.
- If `strategy.present` or `kpi.present` is true, you are editing, not
  creating — see Step 5.
- If neither is present, this is a new advisory record.

## Step 2 — gather intent (pick whatever the operator offers)

Lowest friction first. Do not force an interview when the operator already has
the answer written down.

1. **Ingest an existing artefact.** If the operator pastes a kickoff brief,
   QBR deck, statement of work, email thread, or a list of targets, read it and
   extract: objectives, preferred and deprioritised partner types, brand-safety
   rules, seasonal notes, reporting cadence and audience, and any numeric
   targets. Pull out what is there; do not invent the rest.
2. **Interview.** If they would rather talk, ask a short, plain set of
   questions: what does success look like this period; which partner types they
   want more or less of; any brand-safety or compliance rules; who the report is
   for and how often; what must be escalated immediately; and the numbers they
   are held to (revenue, conversions, EPC, AOV, reversal rate, approval rate).
   Ask only for what you do not already have.
3. **Vertical template.** If the client is brand new and the operator has
   little to give, propose a sensible starter set for their vertical (for
   example retail, finance, or travel) and let them adjust it. Make clear these
   are starting defaults, not their real numbers.

Whatever the route, you are filling in the same two files.

## Step 3 — draft the files

Draft `Strategy.md` as plain prose under clear headings. Keep it the operator's
voice and only as long as it needs to be.

Draft `KPI.md` with a short prose preamble and exactly one fenced ` ```kpi `
block. Emit the block yourself — the operator never types it. One target per
line, in this shape:

```kpi
# targets: metric: comparator value [unit] [per period]
version: 1
revenue: >= 400000 GBP per quarter
conversions: >= 1200 per month
epc: >= 0.45 GBP
aov: >= 65 GBP
reversal_rate: <= 8% per month
approval_rate: >= 90% per month
```

Rules you must follow when writing the block:

- `version: 1` is the first entry, always.
- Use only these metrics: `revenue`, `conversions`, `commission`, `epc`,
  `aov`, `reversal_rate`, `approval_rate`. If the operator wants a target on
  something not in this list, tell them it cannot be recorded as a measurable
  target yet and keep it as prose in `Strategy.md` instead.
- Monetary metrics (`revenue`, `commission`, `epc`, `aov`) take a 3-letter
  currency code; rate metrics (`reversal_rate`, `approval_rate`) take `%`;
  `conversions` takes no unit.
- Period is optional and one of `day`, `week`, `month`, `quarter`, `year`.
- Do not guess a number the operator did not give. Leave it out and say you
  left it out.

## Step 4 — read back, confirm, then write

Read the draft back in **plain English**, never as raw markdown. For example:

> For Acme I have: revenue target £400k per quarter, at least 1,200 conversions
> a month, EPC at or above £0.45, reversals under 8% a month. Strategy: premium
> content partners preferred, no coupon or incentive sites, strict brand
> safety, weekly report to Jane, escalate any drop over 20% immediately.
> Save this for Acme?

Treat `affiliate_set_client_strategy` as a side-effecting local-config write.
Only after the operator confirms, call
`affiliate_set_client_strategy({ brand, strategyMarkdown, kpiMarkdown })`.

- If the result is `written: false` with `parseErrors`, a target line was
  malformed. Fix the named line and call again. Never report success on a
  failed write.
- If the result is `written: false` with a `reason`, relay it plainly.
- On success, confirm what was saved and where it is keyed (the brand slug).

## Step 5 — edit through chat thereafter

When the operator asks to change something ("raise Acme's Q3 target to £450k",
"drop the coupon ban", "report fortnightly now"):

1. Call `affiliate_get_client_strategy({ brand })` to load the current files.
2. For a `Strategy.md` change, patch `strategy.markdown`, leaving everything
   else exactly as it was.
3. For a KPI target change, use `kpi.targets` as the source of truth and build
   a fresh `KPI.md` block with the edited target plus the unchanged valid
   targets. `affiliate_get_client_strategy` returns parsed targets and parse
   errors, not raw KPI markdown, so do not claim you are preserving handwritten
   KPI prose. Tell the operator when the save will replace `KPI.md` with a
   normalised block.
4. If `kpi.parseErrors` is non-empty, stop and ask whether to replace the KPI
   file with a corrected block. Do not silently drop malformed targets.
5. Read the change back in plain English and confirm.
6. Call `affiliate_set_client_strategy` with only the file(s) that changed.

The markdown files are the source of truth; the operator may also edit them by
hand. Chat is the convenience, not the only path.

## Surfacing the gap

If the operator asks "which clients still need a strategy?", call
`affiliate_list_client_strategies` and report the registered brands where
`hasStrategy` or `hasKpi` is false, plus any `orphan` directories. Reporting
skills also prompt to set one up when a brand has none.

## Constraints

- Advisory only. Strategy and KPIs never authorise a network write or change a
  spending, payout, or write-eligibility limit.
- Never invent a target the operator did not give.
- Local-first. These files stay on the operator's machine; they are not sent to
  any project service.
- UK spelling, matter-of-fact tone.
Repository
7stars
1forks
View on GitHub
Details
DiscoveredOct 14, 2026
Last UpdatedSep 21, 2026
Quality Score
40/100

Related Skills

More writing & content skills you might like