Borrowing it
Nothing to install: this file belongs to khaoss85/agent-crm. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/khaoss85/agent-crm/main/.agents/skills/build-commercial-operations/SKILL.mdgit clone --depth 1 https://github.com/khaoss85/agent-crmWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/khaoss85/agent-crm/build-commercial-operations)<a href="https://agentmods.dev/skills/khaoss85/agent-crm/build-commercial-operations"><img src="https://agentmods.dev/badge/skills/khaoss85/agent-crm/build-commercial-operations/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/khaoss85/agent-crm/build-commercial-operations"><img src="https://agentmods.dev/badge/skills/khaoss85/agent-crm/build-commercial-operations.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00080 | $0.01730 |
| Opus 5 | $0.00040 | $0.00865 |
| Sonnet 5 | $0.00016 | $0.00346 |
| Haiku 4.5 | $0.00008 | $0.00173 |
Grade A, and why
build-commercial-operations scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 59 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Orient yourself first
npm run crm -- app inspect --json
Read valid, then problems[], then limitations[], in that order. Every problem is fixed or reported before anything is built on top of it, and every limitation is a hard boundary on what you may claim. Then read packages[], capabilities[], resources[], actions[], policies[] and providers[]: that list is what exists. A capability absent from the report does not exist, whatever a record name, a label or a document suggests.
If the repository documents this skill names are absent, you are in a project built from this framework rather than in the framework itself. The inspection report is then the source of truth and those documents are optional background — do not guess at their contents, and do not assume a path exists because this skill names it.
Background, where they exist: ARCHITECTURE.md, DECISIONS.md (ADR-016) and docs/COMMERCIAL_OPERATIONS.md. They are the deeper source for the rules below, not a prerequisite for them — the rules stand on their own.
Integrate a catalog provider
- Define it code-first:
{ name, version, label, config, async fetchCatalog(input, ctx) }returning{ sourceRef?, priceBooks[], products[], offers[] }. An offer is the sellable package:{ sourceKey, priceBookSourceKey, productSourceKey, name, active, externalOfferId?, components[] }. A component is{ sourceKey, label, chargeType: 'one_time'|'recurring', pricingModel: 'flat_fee'|'per_unit'|'volume'|'graduated', interval?, intervalCount?, unitAmountCents? (per_unit), flatAmountCents? (flat_fee), tiers? (volume/graduated), externalPriceId?, sourcePricingModel? }. Tiers are ordered{ upTo (inclusive, null on the final open-ended tier), unitAmountCents, flatAmountCents? }. Out-of-contract output is refused (PROVIDER_INVALID) — never loosen the normalizer. - Never flatten a provider model. Map Stripe one_time/recurring and
tiers_modevolume/graduated, and Zuora one-time/recurring with Volume and Tiered/Cumulative pricing, onto the four supported models and keepsourcePricingModel+ external ids. For anything unsupported (metered usage, overage, proration, ramps, minimums, attribute-based pricing), mark the componentunsupportedModel: '<name>'— the offer persistsquoteEligible: falsewith a reason and is refused for quoting. Approximating it as a flat price is a defect. - Register it in the composition: pass it to
createCommercialDomain({ catalogProviders: [...] })inpackages/domains/generated/index.js(static import — the composition file is the only place a project names its packages). - The provider is called outside the write transaction under a bounded timeout. Never add DB writes to a provider.
- Sync is idempotent by source key + declared source fingerprint: unchanged data must produce no writes/audits/events; changed data must create a new product version or whole-offer revision (with fresh component and tier rows), never an in-place edit. Historical and quoted evidence is immutable.
- Test failure paths with a deterministic fixture (outage →
PROVIDER_FAILED, hang →PROVIDER_TIMEOUT, bad shapes →PROVIDER_INVALID): no partial catalog, honest failed trace. - Real Stripe/Zuora/ERP adapters need human-approved credentials and are out of scope until then; do not claim full Stripe or Zuora support.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 59 lines · 80 tokens per session scan A 3281c8b8a4ee
build-commercial-operations is a skill published in the GitHub repository khaoss85/agent-crm (2 stars, last pushed yesterday), licensed MIT. It adds 80 tokens to every session and 1,730 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
retail-expert
Expert-level retail systems, POS, inventory management, e-commerce, customer analytics, and omnichannel retail. Use when the user mentions POS, ecommerce, inventory, CRM, or omnichannel, or when the task involves Retail Systems, Omnichannel Retail, Technologies, or POS Operations.
web0-onboard
Set up an agent on web0 in one call. Tell it your payout wallet, the services you want to sell, and (optionally) a .null name — it returns a complete, validated setup your agent can act on immediately.
trusty-squire
Use when a coding agent needs to sign up for a website or SaaS, provision an OAuth client or API key, pay a checkout, or otherwise act on a real website on the user's behalf — and the secret or card must NOT land in chat, source code, or a .env file. Trusty Squire is an MCP server that drives a real browser through…
leboncoin
Drive Leboncoin (FR marketplace) via the browser skill: search listings, ad detail, seller inventory, price/market scan, gated seller messaging — api.leboncoin.fr behind DataDome. Use for Leboncoin search/market tasks.
odoo-inventory
MANDATORY for Transfers (stock.picking), Stock Moves (stock.move), and Locations (stock.location). Expertise in Odoo's logistics and warehouse structure.
odoo-products
MANDATORY for Product Templates (product.template) and Variants (product.product). Expertise in Odoo's catalog and attribute management.