DEV Community

lamingsrb
lamingsrb

Posted on Originally published at bizflowai.io

One Claude Skill Per Client Beats One Per Task

One Claude Skill Per Client Beats One Per Task

You run reconciliation, reporting, or bookkeeping for eight clients. Every Monday you open a fresh Claude chat and re-explain that Client A's VAT sits in a boxed footer, Client B distributes it per line, and Client C exports in EUR but needs USD in column F. That re-explaining is the actual job eating your week — and it's the wrong thing to be doing by hand in 2026.

Every Claude Skills tutorial shows the solo version: record your inbox triage, record your standup notes, record your commit format. Fine, if you work for yourself. If you serve clients, that pattern saves minutes when it should be saving hours. The repeat isn't the task — it's the client-specific configuration you re-type every time. Below is the exact per-client recording pattern I use for invoice automation, the naming system that survives past five clients, and the math on why this beats the per-task approach every time.

Why per-task Skills break the moment you have real clients

The direct answer: per-task Skills assume one canonical version of the task. Client work has no canonical version — every tenant hands you a different mess, and a single Skill named reconcile-invoices will fail on at least one of them every run. Per-client Skills accept that reality and encode it.

Take monthly invoice reconciliation across two real clients:

Field Client A Client B
VAT location Boxed footer Distributed per line
Date format DD-MM-YYYY YYYY-MM-DD
Currency USD only USD + EUR mixed
Export sort By date By supplier
VAT label language English English + local
Output target QuickBooks CSV Xero CSV

Same job description on the invoice: "monthly reconciliation." Zero overlap in execution. If you record one Skill and try to branch inside it (if client == "A" then...), you've built a fragile decision tree that grows a new bug every time a client tweaks a header. Two Skills, one per client, means each one has exactly one path and exactly one thing to get right.

The teams that scale past five clients without a rewrite are the ones that stopped treating "the task" as the unit of automation. The client is the unit. The task is just what the client happens to need this month.

The recording pattern: narrate judgment, not keystrokes

The direct answer: when you record a Skill, narrate the reasoning behind each action, not the mouse movements. Claude's replay engine handles the clicks. What it can't infer is why you clicked there, and that "why" is the difference between a Skill that works once and one that survives a template change.

Here's my actual pattern for a Client A reconciliation recording. Total time: 14 minutes end-to-end.

[00:00] Open Claude → Record a Skill → name it client-a_reconcile-invoices
[00:30] Open Client A's shared drive → invoices/2026-09/
[01:15] Open first PDF. Narrate:
        "VAT for this client is always in the boxed footer,
         never inline. Label is in English. If you see VAT
         appear on individual line items, stop and flag —
         that means the template changed."
[03:00] Extract line items. Narrate:
        "Amounts are USD only. If a second currency appears
         in any row, stop and flag. Don't try to convert."
[05:20] Map to QuickBooks CSV template. Narrate:
        "Column order: date, supplier, amount, VAT, memo.
         Dates come in DD-MM-YYYY, convert to MM-DD-YYYY for QB."
[09:00] Run sanity check: totals match footer within $0.01
[11:00] Save output to /client-a/exports/2026-09-recon.csv
[13:30] Confirm output → stop recording
Enter fullscreen mode Exit fullscreen mode

The narration lines are what turn a brittle screen-replay into something with judgment. Every stop and flag clause is a guardrail. Every if X then Y is a branch Claude can execute when it hits the same fork next month. Skip the narration and you get a Skill that works exactly once — on the PDF you happened to record against.

What to narrate every time

  • Why this field lives where it lives (footer vs inline vs header)
  • What "wrong" looks like (second currency appearing, VAT label changing language)
  • The exact stop condition when something looks off
  • The target format and any transforms (date format, sort order, column mapping)
  • Where the output goes and what filename convention to use

The naming convention that scales past five clients

The direct answer: prefix every Skill with a client slug, then the task. client-a_reconcile-invoices, not reconcile-invoices-v2. Once you cross five clients, your Skills library becomes a filing system, and task-first naming turns it into a graveyard by month three.

My convention:

{client-slug}_{task-name}[_{variant}]

Examples:
  acme_reconcile-invoices
  acme_monthly-report
  acme_vat-return
  brightpath_reconcile-invoices
  brightpath_weekly-payroll
  northwind_reconcile-invoices_eur
  northwind_reconcile-invoices_usd
Enter fullscreen mode Exit fullscreen mode

Rules I follow without exception:

  • Client slug first, always. Sorts alphabetically by tenant. When you scroll the library, all of Acme's Skills sit together. Onboarding a new client is a clean namespace, not a merge conflict.
  • Kebab-case task names. reconcile-invoices, not reconcileInvoices or Reconcile Invoices. Copies cleanly into scripts and search.
  • Variant suffix only when truly needed. northwind_reconcile-invoices_eur exists because Northwind runs two entities in two currencies. Don't invent variants pre-emptively.
  • No versions in the name. No _v2, no _final, no _new. When a client changes their template, you re-record and overwrite. The Skill name stays stable so anything referencing it doesn't break.

The version rule matters most. Skills should be idempotent by name — if acme_reconcile-invoices exists, it's always the current one. If you need history, that's what your Skill platform's version log is for, not your file naming.

The math: 14 minutes up front, ~5 hours/month back

The direct answer: each Skill costs about 14 minutes to record and roughly 40 seconds per run to trigger and verify. Across eight clients on monthly reconciliation, that's a one-time investment of about 1.9 hours and an ongoing save of roughly 5 hours a month on formatting work you were probably undercharging for anyway.

Here's the breakdown for eight clients, monthly reconciliation, assuming ~40 minutes of manual formatting per client per month before automation:

Item Per-task approach Per-client approach
Skills recorded 1 8
Recording time (one-time) 14 min 112 min (~1.9 hrs)
Manual re-explain per run ~15 min 0 min
Failure rate per run ~30% (wrong template) <5%
Per-client time per month ~40 min ~2 min
Total monthly time (8 clients) ~5.3 hrs ~16 min
Time saved / month — ~5 hrs
Break-even — Month 1

Two things about that table. First, the per-task "failure rate" isn't Claude being bad — it's the Skill being asked to handle branches it wasn't designed for. Second, the 5 hours saved is on formatting only. It doesn't count the mental tax of context-switching between eight client layouts, which is the real reason this work always takes longer than you think.

When a client changes their template

They will. Someone at Acme redesigns their invoice header, or Brightpath switches accounting systems, or Northwind adds a second entity. With per-task Skills, that one change breaks all eight clients because they share the Skill. With per-client Skills, you re-record exactly one — 14 minutes — and the other seven don't know anything happened. That isolation is the whole point.

Where per-client Skills stop making sense

The direct answer: per-client Skills are worth it when the client-specific configuration is what you keep re-typing. If two clients genuinely share a template — same PDF vendor, same export target, same sort order — one shared Skill is fine. Don't invent tenant boundaries that don't exist.

Cases where I still use per-task (not per-client) Skills:

  • Internal ops. My own inbox triage, invoice generation for my own business, weekly report to myself. One user, one Skill per task.
  • Shared platform tenants. Three clients all using the exact same SaaS export (say, Stripe → QuickBooks). The Skill is defined by Stripe's format, not the client. One Skill, stripe-to-qb-recon, serves all three.
  • True universal transforms. "Convert any CSV to Parquet with these columns" doesn't need a per-client version.

The test is simple: if you'd narrate different judgment ("for this client, VAT is in the footer") for each tenant, it's a per-client Skill. If the narration is identical across clients, it's a per-task Skill. Don't overthink it.

Why bizflowai.io helps with this

We build invoicing and reconciliation automation for small US firms where every client has a slightly different PDF, export target, or column order. The per-client Skills pattern above is roughly how we structure the underlying agent configs — one config namespace per tenant, versioned separately, so a template change at one client never propagates to the others. If you're running this yourself across five-plus clients and the naming is starting to sprawl, that's usually where a dedicated tenant-scoped setup pays for itself faster than another round of Skill recording.

The one Skill to record this week

If you're doing client work and still pasting the same formatting rules into a fresh chat every week, don't record your morning routine. Don't record your inbox. Record the client whose weird export is currently eating your Friday afternoon. Name it {client-slug}_{task-name}. Narrate the judgment, not the clicks. Fourteen minutes now, five hours a month back, and one less client whose template lives rent-free in your head.


Want more like this?

I publish practical AI automation, GenAI engineering, and faceless content workflows on YouTube every week.

Subscribe to bizflowai.io on YouTube — never miss a new tutorial.

Planning an AI automation project or need a second opinion on your architecture?

Connect with me on LinkedIn — Lazar Milicevic, GenAI Engineer & bizflowai.io Founder.

Visit bizflowai.io for our services, case studies, and AI consulting.

Top comments (0)