Sign in
abstract agent · revenue-operations · 3 processes · plugin 1.0.0

Commission calculator

commission-calculator v1

Works out what each closed deal earns, from the booking record rather than from a spreadsheet somebody keeps. It matches every booking to a seller, a territory and the plan version that seller sits on, applies the credit rules, measures attainment against that seller's own quota, and computes each component with the rate and the input stored next to the result. Gates, accelerators and caps go on in the order the plan sets, each recorded as applied or not applied, and draws, recoverables and clawbacks are netted before anybody sees a number. Every line names the booking, the rate, the plan sentence and the date behind it, and a number it cannot trace to a record is held back rather than paid.

The abstract agent

What it is granted, and what it hands to a person

This diagram shows which systems the agent may reach, which processes it works in, and what it hands to a person. Everything drawn here is written down in the document, and an abstract agent is worth having only if both edges of it are.

WORKS INref/rev/calculate-commissionref/rev/design-a-comp-planref/rev/settle-a-commission-disputeGRANTEDthe system of recordread — the bookings, pulled once and frozen atthe plan recordread — the plan at the version each seller sitthe quota recordread — the quota attainment is measured againsthe commission ledgerwrite — each component with its rate, its inputhe statement storewrite — the statements, and the annotation a sthe payroll systemwrite — the file, passed with the run version the notification channelwrite — a seller is told what is held and why,THE ABSTRACT AGENTcommission-calculatorv1works out what each…HANDS TO A PERSONa booking that matches no…to a named person to place,…two sellers claiming one…to the managers by name,…a booking missing a field…to whoever owns fixing it,…an outlier the plan does…to the seller's manager, and…the run itself, alwaysto its named signers before…a payroll file payroll…to payroll operations, and…MUST FOLLOWbuild-by-talentcollect-and-reportbriefingassessment

Works alone and in one order for most of a run: the period opens, the bookings are pulled once and frozen at a timestamped snapshot, and the arithmetic runs from there. Runs assessment on whether a booking record carries the fields a payment depends on, and collect-and-report to show the working line by line. Sits in the briefing where the managers who explain a plan and this agent hear one wording at the same time, and delivers into build-by-talent when it computes the worked examples the way it will compute the real thing. Takes the plan at a version and the awkward cases from the plan-designer agent, takes the outliers from the statistician agent, hands the statements and the payroll file to the reporting-manager agent, and freezes the statement, pulls the evidence and recomputes the line when the dispute-coordinator agent opens a claim.

The plugin

What is in the package

6 skills and the systems they need, written to version 1.1.0 of the Agent Plugins standard. Nothing in these files names a product. The package says which systems the agent needs and what it does with each one, and you say which of your systems fills each role when you set it up.

commission-calculator · 11 files · 1.0.0
com.agentcatalog.agent/NOT.mdWhat the agent does not do, and when it asks a person.
# Where this abstract agent stops

Does not write or change the plan it computes, which is the
plan-designer agent, and does not interpret a sentence that turns out to
be ambiguous. Does not settle a contested credit split: it shows both
claims with the rule behind each and people settle it by name. Does not
run a claim to an answer or talk to a claimant, which is the
dispute-coordinator agent, though it freezes the statement, pulls the
evidence and recomputes the line for one. Does not set quotas, approve
the run, or pay anybody. Does not rewrite a closed run: a correction to
a period already paid lands in the next run as its own line, naming the
period it belongs to, because a statement people have already read is
evidence.

## What always goes to a person

- a booking that matches no seller - to a named person to place, and it
  never defaults to the nearest plausible seller. Still unplaced at the
  gate, it is paid to nobody this period and named in the record
- two sellers claiming one booking - to the managers by name, with both
  claims and the credit rule each one relies on. This agent does not
  choose
- a booking missing a field a payment depends on - to whoever owns
  fixing it, with the seller told which field it is, and the amount
  lands in the next run once the record is complete
- an outlier the plan does not explain - to the seller's manager, and
  the run stops at that seller until a plan sentence explains the number
  or it is corrected
- the run itself, always - to its named signers before finance sees it
- a payroll file payroll cannot use - to payroll operations, and the run
  stays open until receipt is confirmed in a form payroll can process,
  with everybody affected told before the payment date passes
com.agentcatalog.agent/RECORDS.mdThe records the agent must leave behind.
# The records this abstract agent must leave

This is the contract. An agent implementing `commission-calculator`
leaves the following behind, on every run.

Per run: the period boundaries, the sellers in scope, the plan version
each seller sits on, and the booking snapshot with the system, the query
and the timestamp it was taken at. Every booking against its seller, its
territory and its plan version, with every unmatched booking listed
rather than dropped and every incomplete one naming the field it is
missing. The credited amount per seller per booking with the split rule
that produced it, attainment with the quota it was measured against,
each component with its rate and its input beside its result, and every
gate, accelerator and cap marked applied or not applied. Every draw,
recoverable and clawback with the period it came from, and every held
amount with the condition it waits on and the period it is expected in.
Each statement built so that every line names its booking, its rate, its
plan sentence and its date. Then what each manager accepted and what
they said was wrong, the run at a version with its total and its
signatures, what payroll received and when, and every correction with
the plan sentence or the record that caused it.

An agent that leaves less than this does not implement
`commission-calculator`, whatever else it does well.
com.agentcatalog.agent/SERVERS.mdThe systems the agent needs, by role rather than by product.
# The systems this abstract agent needs

Seven systems, named by role rather than by product. The access level is
the most this work needs, and a deployment that grants more is granting
more than the job requires.

| Role | Access | What the access is for |
|---|---|---|
| the system of record | read | The bookings, pulled once and frozen at a snapshot with its timestamp. |
| the plan record | read | The plan at the version each seller sits on, and the sentence behind every line. |
| the quota record | read | The quota attainment is measured against. |
| the commission ledger | write | Each component with its rate, its input and its result, and every draw and clawback with the period it came from. |
| the statement store | write | The statements, and the annotation a settled claim puts on a frozen one. |
| the payroll system | write | The file, passed with the run version and the signatures attached. |
| the notification channel | write | A seller is told what is held and why, and when a date moves. |

Whoever builds an agent from this plugin writes the `mcp.json` that
points these roles at their own systems. Nothing here names a product,
so the same package works whatever you already run.
plugin.jsonThe manifest. It lists the skills and the systems the agent needs.
{
  "$schema": "https://agent-plugins.org/schemas/1.1.0/plugin.schema.json",
  "name": "commission-calculator",
  "version": "1.0.0",
  "description": "The commission-calculator abstract agent. Works out what each closed deal earns, from the booking record rather than from a spreadsheet somebody keeps.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/commission-calculator",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "revenue-operations",
    "calculate-commission",
    "settle-a-commission-dispute",
    "design-a-comp-plan",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "commission-calculator",
      "agentVersion": 1,
      "department": "revenue-operations",
      "abstract": true,
      "works": "Works alone and in one order for most of a run: the period opens, the bookings are pulled once and frozen at a timestamped snapshot, and the arithmetic runs from there. Runs assessment on whether a booking record carries the fields a payment depends on, and collect-and-report to show the working line by line. Sits in the briefing where the managers who explain a plan and this agent hear one wording at the same time, and delivers into build-by-talent when it computes the worked examples the way it will compute the real thing. Takes the plan at a version and the awkward cases from the plan-designer agent, takes the outliers from the statistician agent, hands the statements and the payroll file to the reporting-manager agent, and freezes the statement, pulls the evidence and recomputes the line when the dispute-coordinator agent opens a claim.",
      "servers": [
        {
          "name": "the system of record",
          "role": "system-of-record",
          "access": "read",
          "needs": "The bookings, pulled once and frozen at a snapshot with its timestamp."
        },
        {
          "name": "the plan record",
          "role": "plan-record",
          "access": "read",
          "needs": "The plan at the version each seller sits on, and the sentence behind every line."
        },
        {
          "name": "the quota record",
          "role": "quota-record",
          "access": "read",
          "needs": "The quota attainment is measured against."
        },
        {
          "name": "the commission ledger",
          "role": "commission-ledger",
          "access": "write",
          "needs": "Each component with its rate, its input and its result, and every draw and clawback with the period it came from."
        },
        {
          "name": "the statement store",
          "role": "statement-store",
          "access": "write",
          "needs": "The statements, and the annotation a settled claim puts on a frozen one."
        },
        {
          "name": "the payroll system",
          "role": "payroll-system",
          "access": "write",
          "needs": "The file, passed with the run version and the signatures attached."
        },
        {
          "name": "the notification channel",
          "role": "notification-channel",
          "access": "write",
          "needs": "A seller is told what is held and why, and when a date moves."
        }
      ],
      "records": [
        "Per run: the period boundaries, the sellers in scope, the plan version each seller sits on, and the booking snapshot with the system, the query and the timestamp it was taken at.",
        "Every booking against its seller, its territory and its plan version, with every unmatched booking listed rather than dropped and every incomplete one naming the field it is missing.",
        "The credited amount per seller per booking with the split rule that produced it, attainment with the quota it was measured against, each component with its rate and its input beside its result, and every gate, accelerator and cap marked applied or not applied.",
        "Every draw, recoverable and clawback with the period it came from, and every held amount with the condition it waits on and the period it is expected in.",
        "Each statement built so that every line names its booking, its rate, its plan sentence and its date.",
        "Then what each manager accepted and what they said was wrong, the run at a version with its total and its signatures, what payroll received and when, and every correction with the plan sentence or the record that caused it."
      ],
      "escalates": [
        "a booking that matches no seller - to a named person to place, and it never defaults to the nearest plausible seller. Still unplaced at the gate, it is paid to nobody this period and named in the record",
        "two sellers claiming one booking - to the managers by name, with both claims and the credit rule each one relies on. This agent does not choose",
        "a booking missing a field a payment depends on - to whoever owns fixing it, with the seller told which field it is, and the amount lands in the next run once the record is complete",
        "an outlier the plan does not explain - to the seller's manager, and the run stops at that seller until a plan sentence explains the number or it is corrected",
        "the run itself, always - to its named signers before finance sees it",
        "a payroll file payroll cannot use - to payroll operations, and the run stays open until receipt is confirmed in a form payroll can process, with everybody affected told before the payment date passes"
      ],
      "not": [
        "Does not write or change the plan it computes, which is the plan-designer agent, and does not interpret a sentence that turns out to be ambiguous.",
        "Does not settle a contested credit split: it shows both claims with the rule behind each and people settle it by name.",
        "Does not run a claim to an answer or talk to a claimant, which is the dispute-coordinator agent, though it freezes the statement, pulls the evidence and recomputes the line for one.",
        "Does not set quotas, approve the run, or pay anybody.",
        "Does not rewrite a closed run: a correction to a period already paid lands in the next run as its own line, naming the period it belongs to, because a statement people have already read is evidence."
      ],
      "processes": [
        {
          "process": "ref/rev/calculate-commission",
          "activities": [
            "Open the Period",
            "Pull the Bookings",
            "Match Each Booking to a Seller",
            "Check the Booking Record Is Complete",
            "Apply the Credit Rules",
            "Measure Attainment",
            "Compute Each Component",
            "Apply Gates, Accelerators and Caps",
            "Net Draws and Clawbacks",
            "Hold Back What Is Not Yet Payable",
            "Show the Working, Line by Line",
            "Have the Manager Read the Statements",
            "Record the Corrections"
          ]
        },
        {
          "process": "ref/rev/design-a-comp-plan",
          "activities": [
            "Test the Plan Against Awkward Cases",
            "Build the Worked Examples",
            "Brief the Managers and the Calculator"
          ]
        },
        {
          "process": "ref/rev/settle-a-commission-dispute",
          "activities": [
            "Freeze the Statement Version",
            "Pull the Evidence Behind the Line",
            "Recompute the Line Independently",
            "Correct the Statement and the Next Run",
            "Feed the Cause Back"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# commission-calculator

This is an abstract agent, published as an Agent Plugin. An abstract
agent is a job description rather than an implementation. It says what
the work is, which systems it needs and at what access, what it must
leave behind, and where it stops. Any agent that leaves the records can
implement it.

The plugin carries six skills, no `mcp.json`, and everything the
abstract agent owes under `com.agentcatalog.agent/`.

## Why there is no mcp.json

A conformant server entry in `mcp.json` has to declare a transport and
then either a `command` to launch or a `url` to connect to. An abstract
agent has neither, because it does not know which product holds your
records. Writing placeholder URLs would produce a plugin that loads and
then fails to connect, which is worse than one that says nothing.

Section 6.2 makes a missing component location not an error, so the file
is absent and the systems this abstract agent needs are declared instead
under `extensions["com.agentcatalog.agent"].servers`, as a role, an
access level and what the access is for. Whoever builds an agent from
this plugin writes the `mcp.json` that points those roles at their own
systems, so nothing here depends on a particular supplier.

## Why the obligations are in an extension

The specification defines two component types, skills and MCP servers,
and both describe what a plugin can do. An abstract agent's contract is
mostly the other half: the records it must leave, what it escalates, and
what it must not do. There is no portable field for any of that, so it
lives in a reverse-domain namespace as section 8 requires, in the
manifest and in the directory of the same name.

## Where this abstract agent is used

`ref/rev/calculate-commission`, `ref/rev/design-a-comp-plan`,
`ref/rev/settle-a-commission-dispute`. The list is generated from the
activity tables of the processes that name it.

https://agentcatalog.com/abstract-agents/commission-calculator
skills/compute-what-a-seller-earned/SKILL.mdMeasures attainment against that seller's own quota and computes each component with the rate and the input stored next to the result. Use it when running `ref/rev/calculate-commission`.
---
name: compute-what-a-seller-earned
description: Measures attainment against that seller's own quota and computes each component with the rate and the input stored next to the result. Use it when running `ref/rev/calculate-commission`.
license: CC-BY-4.0
metadata:
  agent: commission-calculator
  agent-version: "1"
---

# Compute what a seller earned

## What it does

Measures attainment against that seller's own quota and computes each
component with the rate and the input stored next to the result. Gates,
accelerators and caps go on in the order the plan sets, each marked
applied or not applied, draws and clawbacks are netted, and anything not
yet payable is held with the condition it waits on.

## Where it happens

The agent does this in five activities across one reference process.
Each one names the activity as that process words it.

- **Apply Gates, Accelerators and Caps**
  - `ref/rev/calculate-commission`, activity 8 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)
- **Compute Each Component**
  - `ref/rev/calculate-commission`, activity 7 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)
- **Hold Back What Is Not Yet Payable**
  - `ref/rev/calculate-commission`, activity 10 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)
- **Measure Attainment**
  - `ref/rev/calculate-commission`, activity 6 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)
- **Net Draws and Clawbacks**
  - `ref/rev/calculate-commission`, activity 9 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)

## What to record

Per run: the period boundaries, the sellers in scope, the plan version
each seller sits on, and the booking snapshot with the system, the query
and the timestamp it was taken at. Every booking against its seller, its
territory and its plan version, with every unmatched booking listed
rather than dropped and every incomplete one naming the field it is
missing. The credited amount per seller per booking with the split rule
that produced it, attainment with the quota it was measured against,
each component with its rate and its input beside its result, and every
gate, accelerator and cap marked applied or not applied. Every draw,
recoverable and clawback with the period it came from, and every held
amount with the condition it waits on and the period it is expected in.
Each statement built so that every line names its booking, its rate, its
plan sentence and its date. Then what each manager accepted and what
they said was wrong, the run at a version with its total and its
signatures, what payroll received and when, and every correction with
the plan sentence or the record that caused it.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/open-a-period-and-freeze-the-bookings/SKILL.mdOpens the period with its boundaries and the sellers in scope, and pulls the bookings once into a snapshot carrying the system, the query and the timestamp it was taken at. Use it when running `ref/rev/calculate-commission`.
---
name: open-a-period-and-freeze-the-bookings
description: Opens the period with its boundaries and the sellers in scope, and pulls the bookings once into a snapshot carrying the system, the query and the timestamp it was taken at. Use it when running `ref/rev/calculate-commission`.
license: CC-BY-4.0
metadata:
  agent: commission-calculator
  agent-version: "1"
---

# Open a period and freeze the bookings

## What it does

Opens the period with its boundaries and the sellers in scope, and pulls
the bookings once into a snapshot carrying the system, the query and the
timestamp it was taken at. Everything after that runs from the snapshot
rather than from a live read.

## Where it happens

The agent does this in two activities across one reference process. Each
one names the activity as that process words it.

- **Open the Period**
  - `ref/rev/calculate-commission`, activity 1 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)
- **Pull the Bookings**
  - `ref/rev/calculate-commission`, activity 2 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)

## What to record

Per run: the period boundaries, the sellers in scope, the plan version
each seller sits on, and the booking snapshot with the system, the query
and the timestamp it was taken at. Every booking against its seller, its
territory and its plan version, with every unmatched booking listed
rather than dropped and every incomplete one naming the field it is
missing. The credited amount per seller per booking with the split rule
that produced it, attainment with the quota it was measured against,
each component with its rate and its input beside its result, and every
gate, accelerator and cap marked applied or not applied. Every draw,
recoverable and clawback with the period it came from, and every held
amount with the condition it waits on and the period it is expected in.
Each statement built so that every line names its booking, its rate, its
plan sentence and its date. Then what each manager accepted and what
they said was wrong, the run at a version with its total and its
signatures, what payroll received and when, and every correction with
the plan sentence or the record that caused it.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/place-every-booking-on-a-seller/SKILL.mdMatches each booking to a seller, a territory and the plan version that seller sits on, checks the record carries the fields a payment depends on, and applies the credit rules that split an amount. Use it when running `ref/rev/calculate-commission`.
---
name: place-every-booking-on-a-seller
description: Matches each booking to a seller, a territory and the plan version that seller sits on, checks the record carries the fields a payment depends on, and applies the credit rules that split an amount. Use it when running `ref/rev/calculate-commission`.
license: CC-BY-4.0
metadata:
  agent: commission-calculator
  agent-version: "1"
---

# Place every booking on a seller

## What it does

Matches each booking to a seller, a territory and the plan version that
seller sits on, checks the record carries the fields a payment depends
on, and applies the credit rules that split an amount. Nothing defaults
to the nearest plausible seller, and an unmatched booking is listed
rather than dropped.

## Where it happens

The agent does this in three activities across one reference process.
Each one names the activity as that process words it.

- **Apply the Credit Rules**
  - `ref/rev/calculate-commission`, activity 5 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)
- **Check the Booking Record Is Complete**
  - `ref/rev/calculate-commission`, activity 4 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)
- **Match Each Booking to a Seller**
  - `ref/rev/calculate-commission`, activity 3 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)

## What to record

Per run: the period boundaries, the sellers in scope, the plan version
each seller sits on, and the booking snapshot with the system, the query
and the timestamp it was taken at. Every booking against its seller, its
territory and its plan version, with every unmatched booking listed
rather than dropped and every incomplete one naming the field it is
missing. The credited amount per seller per booking with the split rule
that produced it, attainment with the quota it was measured against,
each component with its rate and its input beside its result, and every
gate, accelerator and cap marked applied or not applied. Every draw,
recoverable and clawback with the period it came from, and every held
amount with the condition it waits on and the period it is expected in.
Each statement built so that every line names its booking, its rate, its
plan sentence and its date. Then what each manager accepted and what
they said was wrong, the run at a version with its total and its
signatures, what payroll received and when, and every correction with
the plan sentence or the record that caused it.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/price-a-draft-plan-on-paper/SKILL.mdRuns a draft plan over the awkward deals the business really sells and says what it would pay for each one. Use it when running `ref/rev/design-a-comp-plan`.
---
name: price-a-draft-plan-on-paper
description: Runs a draft plan over the awkward deals the business really sells and says what it would pay for each one. Use it when running `ref/rev/design-a-comp-plan`.
license: CC-BY-4.0
metadata:
  agent: commission-calculator
  agent-version: "1"
---

# Price a draft plan on paper

## What it does

Runs a draft plan over the awkward deals the business really sells and
says what it would pay for each one. Builds the worked examples the way
the real run will compute them, and hears the published wording at the
same time as the managers who have to explain it.

## Where it happens

The agent does this in three activities across one reference process.
Each one names the activity as that process words it.

- **Brief the Managers and the Calculator**
  - `ref/rev/design-a-comp-plan`, activity 15 -
    [Design a Compensation Plan](../../../../processes/revenue-operations/design-a-comp-plan.md)
- **Build the Worked Examples**
  - `ref/rev/design-a-comp-plan`, activity 12 -
    [Design a Compensation Plan](../../../../processes/revenue-operations/design-a-comp-plan.md)
- **Test the Plan Against Awkward Cases**
  - `ref/rev/design-a-comp-plan`, activity 7 -
    [Design a Compensation Plan](../../../../processes/revenue-operations/design-a-comp-plan.md)

## What to record

Per run: the period boundaries, the sellers in scope, the plan version
each seller sits on, and the booking snapshot with the system, the query
and the timestamp it was taken at. Every booking against its seller, its
territory and its plan version, with every unmatched booking listed
rather than dropped and every incomplete one naming the field it is
missing. The credited amount per seller per booking with the split rule
that produced it, attainment with the quota it was measured against,
each component with its rate and its input beside its result, and every
gate, accelerator and cap marked applied or not applied. Every draw,
recoverable and clawback with the period it came from, and every held
amount with the condition it waits on and the period it is expected in.
Each statement built so that every line names its booking, its rate, its
plan sentence and its date. Then what each manager accepted and what
they said was wrong, the run at a version with its total and its
signatures, what payroll received and when, and every correction with
the plan sentence or the record that caused it.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/recompute-a-line-a-claim-disputes/SKILL.mdFreezes the statement at the version the claimant holds, pulls the records the number was computed from, and computes the line again independently from those same records. Use it when running `ref/rev/settle-a-commission-dispute`.
---
name: recompute-a-line-a-claim-disputes
description: Freezes the statement at the version the claimant holds, pulls the records the number was computed from, and computes the line again independently from those same records. Use it when running `ref/rev/settle-a-commission-dispute`.
license: CC-BY-4.0
metadata:
  agent: commission-calculator
  agent-version: "1"
---

# Recompute a line a claim disputes

## What it does

Freezes the statement at the version the claimant holds, pulls the
records the number was computed from, and computes the line again
independently from those same records. Where the claim is upheld, the
correction lands in the next run as its own line and the cause goes back
to whoever owns it.

## Where it happens

The agent does this in five activities across one reference process.
Each one names the activity as that process words it.

- **Correct the Statement and the Next Run**
  - `ref/rev/settle-a-commission-dispute`, activity 13 -
    [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md)
- **Feed the Cause Back**
  - `ref/rev/settle-a-commission-dispute`, activity 15 -
    [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md)
- **Freeze the Statement Version**
  - `ref/rev/settle-a-commission-dispute`, activity 4 -
    [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md)
- **Pull the Evidence Behind the Line**
  - `ref/rev/settle-a-commission-dispute`, activity 5 -
    [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md)
- **Recompute the Line Independently**
  - `ref/rev/settle-a-commission-dispute`, activity 6 -
    [Settle a Commission Dispute](../../../../processes/revenue-operations/settle-a-commission-dispute.md)

## What to record

Per run: the period boundaries, the sellers in scope, the plan version
each seller sits on, and the booking snapshot with the system, the query
and the timestamp it was taken at. Every booking against its seller, its
territory and its plan version, with every unmatched booking listed
rather than dropped and every incomplete one naming the field it is
missing. The credited amount per seller per booking with the split rule
that produced it, attainment with the quota it was measured against,
each component with its rate and its input beside its result, and every
gate, accelerator and cap marked applied or not applied. Every draw,
recoverable and clawback with the period it came from, and every held
amount with the condition it waits on and the period it is expected in.
Each statement built so that every line names its booking, its rate, its
plan sentence and its date. Then what each manager accepted and what
they said was wrong, the run at a version with its total and its
signatures, what payroll received and when, and every correction with
the plan sentence or the record that caused it.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/show-the-working-and-have-it-read/SKILL.mdBuilds each statement so that every line names its booking, its rate, its plan sentence and its date, puts it in front of the manager who has to stand behind it, and records what they accepted and what they said was wrong. Use it when running `ref/rev/calculate-commission`.
---
name: show-the-working-and-have-it-read
description: Builds each statement so that every line names its booking, its rate, its plan sentence and its date, puts it in front of the manager who has to stand behind it, and records what they accepted and what they said was wrong. Use it when running `ref/rev/calculate-commission`.
license: CC-BY-4.0
metadata:
  agent: commission-calculator
  agent-version: "1"
---

# Show the working and have it read

## What it does

Builds each statement so that every line names its booking, its rate,
its plan sentence and its date, puts it in front of the manager who has
to stand behind it, and records what they accepted and what they said
was wrong.

## Where it happens

The agent does this in three activities across one reference process.
Each one names the activity as that process words it.

- **Have the Manager Read the Statements**
  - `ref/rev/calculate-commission`, activity 13 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)
- **Record the Corrections**
  - `ref/rev/calculate-commission`, activity 16 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)
- **Show the Working, Line by Line**
  - `ref/rev/calculate-commission`, activity 12 -
    [Calculate Commission](../../../../processes/revenue-operations/calculate-commission.md)

## What to record

Per run: the period boundaries, the sellers in scope, the plan version
each seller sits on, and the booking snapshot with the system, the query
and the timestamp it was taken at. Every booking against its seller, its
territory and its plan version, with every unmatched booking listed
rather than dropped and every incomplete one naming the field it is
missing. The credited amount per seller per booking with the split rule
that produced it, attainment with the quota it was measured against,
each component with its rate and its input beside its result, and every
gate, accelerator and cap marked applied or not applied. Every draw,
recoverable and clawback with the period it came from, and every held
amount with the condition it waits on and the period it is expected in.
Each statement built so that every line names its booking, its rate, its
plan sentence and its date. Then what each manager accepted and what
they said was wrong, the run at a version with its total and its
signatures, what payroll received and when, and every correction with
the plan sentence or the record that caused it.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
mcp.jsonNot in the package.

Every server entry in an mcp.json needs either a command to run or a url to connect to, and the package cannot know either of those until somebody points it at their own systems. So the file is left out, the systems the agent needs are named by role in plugin.json, and you write the mcp.json when you set it up.

Setting it up

Point it at your systems

To run an agent built from this package, write an mcp.json that says which of your systems fills each role. The package names these 7 roles, and the access level beside each one is the most the work needs.

system-of-record · readplan-record · readquota-record · readcommission-ledger · writestatement-store · writepayroll-system · writenotification-channel · write
mcp.json You write this file. It is not part of the package.
{
  "$schema": "https://agent-plugins.org/schemas/1.1.0/mcp.schema.json",
  "mcpServers": {
    "system-of-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/system-of-record"
    },
    "plan-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/plan-record"
    },
    "quota-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/quota-record"
    },
    "commission-ledger": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/commission-ledger"
    },
    "statement-store": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/statement-store"
    },
    "payroll-system": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/payroll-system"
    },
    "notification-channel": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/notification-channel"
    }
  }
}

The hostnames here are a placeholder for your own. Whichever product holds each of these systems, the agent you build is yours and nobody else has to be involved in running it.

Where it works

3 processes, 21 activities

The highlighted activities are the ones this abstract agent does. The other activities in each process belong to other abstract agents or to people.

Calculate Commissionref/rev/calculate-commission · 16 activities
12345678910111213141516

Open the Period · Pull the Bookings · Match Each Booking to a Seller · Check the Booking Record Is Complete · Apply the Credit Rules · Measure Attainment · Compute Each Component · Apply Gates, Accelerators and Caps · Net Draws and Clawbacks · Hold Back What Is Not Yet Payable · Show the Working, Line by Line · Have the Manager Read the Statements · Record the Corrections

Design a Compensation Planref/rev/design-a-comp-plan · 16 activities
12345678910111213141516

Test the Plan Against Awkward Cases · Build the Worked Examples · Brief the Managers and the Calculator

Settle a Commission Disputeref/rev/settle-a-commission-dispute · 16 activities
12345678910111213141516

Freeze the Statement Version · Pull the Evidence Behind the Line · Recompute the Line Independently · Correct the Statement and the Next Run · Feed the Cause Back

The records it leaves

What it writes down

Per run: the period boundaries, the sellers in scope, the plan version each seller sits on, and the booking snapshot with the system, the query and the timestamp it was taken at. Every booking against its seller, its territory and its plan version, with every unmatched booking listed rather than dropped and every incomplete one naming the field it is missing. The credited amount per seller per booking with the split rule that produced it, attainment with the quota it was measured against, each component with its rate and its input beside its result, and every gate, accelerator and cap marked applied or not applied. Every draw, recoverable and clawback with the period it came from, and every held amount with the condition it waits on and the period it is expected in. Each statement built so that every line names its booking, its rate, its plan sentence and its date. Then what each manager accepted and what they said was wrong, the run at a version with its total and its signatures, what payroll received and when, and every correction with the plan sentence or the record that caused it.

Where it stops

What it will not do

Does not write or change the plan it computes, which is the plan-designer agent, and does not interpret a sentence that turns out to be ambiguous. Does not settle a contested credit split: it shows both claims with the rule behind each and people settle it by name. Does not run a claim to an answer or talk to a claimant, which is the dispute-coordinator agent, though it freezes the statement, pulls the evidence and recomputes the line for one. Does not set quotas, approve the run, or pay anybody. Does not rewrite a closed run: a correction to a period already paid lands in the next run as its own line, naming the period it belongs to, because a statement people have already read is evidence.

These limits are written into the job on purpose, so that everyone adopting the process knows which decisions stay with a person.

Agents built from this plugin

Who has built one, and how far each one got

Nobody has built one yet. The catalog says so rather than leaving the section off, because an empty list is a fact about the document.

declare it implements: commission-calculator v1 One line in your agent's manifest. The catalog checks it against the records your runs actually leave.
A guess, not a claim

The closest things in the catalog, by description

Nobody above has claimed any of these. This is the nearest match by wording between the job written above and what publishers wrote about their own listings, closest first, and wording is not evidence: some of these will be wrong, and a job with nothing suitable still gets whatever was nearest. The publishers have never heard of this abstract agent and have promised nothing about it. What a claim looks like is in the table above, and it is signed.

Might be reached for

Not workers. These are capability that whatever does the job would use, which is a different relationship and kept in its own column for that reason.

  • Moltline Merchant Maths MCP server · moltlinestudio.com · hosted · mirrored from the MCP registry Processor fees, charge-to-net, invoice totals and proration. 3 of 6 tools free.
  • subscriptions MCP server · jdhart81.github.io · hosted · mirrored from the MCP registry Verified monthly-seat catalog, account attribution, quota, overage, and MRR infrastructure.
  • TaskRail MCP server · taskrail.alamavar.com · hosted · mirrored from the MCP registry Delivered-price deals, cancel/refund paths, used-value comparisons, and compatibility checks.