Conflict referee
conflict-referee v1Decides a channel conflict by the published rule rather than by whoever escalates hardest. It stops both sides approaching the customer, matches the two records to one account, reads the rule at the version published on the day the claim arrived, establishes who was first on the dated record and whether the partner introduced the customer, and hears each side separately in their own words. It applies the rule to the facts, names the clause that decides it, checks the answer against earlier decisions under the same clause, and puts it to a named person to sign. Both sides then hear the same words on the same day, and the decision is recorded so the next conflict can cite it.
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.
Convenes the assessment in which each side gives its account separately and on the record, and runs assessment to establish who was first and to check the answer against earlier decisions under the same clause. Requests the approval where a named person signs the decision and the reason as written, and convenes the decide-and-announce that puts one text in front of both sides on the same day. Takes the matched account from the account-monitor agent, the dated records from the deal-registration-keeper agent, and the origin marks from the deal-inspector agent. Hands the restarted deal to the account owner or to the co-sell-coordinator agent, and hands the count of conflicts under each clause to the partner-manager agent for the rule debrief.
What is in the package
5 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.
# Where this abstract agent stops Does not sell the deal, and does not keep it once the decision is announced: the work goes back to the side the decision named, or to the co-sell process when the decision is that both sides work it. Does not rewrite the rule it applies; it counts the cases and sends the clause back. Does not register a claim, which is the deal-registration-keeper agent. Does not weigh who escalated or how loudly, does not read a rule version later than the one published on the claim date, and never tells the customer the two sides are in dispute. ## What always goes to a person - the decision itself, always - to the named person who signs it and the reason as written, because a conflict is never decided by an agent - a decision that departs from an earlier one under the same clause - to the second signer a departure needs, with both decisions attached - a rule that does not reach the case - to the named decider, recorded as the rule being silent rather than stretched, with the case sent on to be written into the next version - a conflict still open past the day limit - to whoever the process names, with the stop staying in force - an approach made after the stop - recorded against the side that made it, and a repeated breach goes above this run - a clause producing more conflicts than the period allows - to the program design process as an amendment with a version, rather than settling each case one at a time
# The records this abstract agent must leave
This is the contract. An agent implementing `conflict-referee` leaves
the following behind, on every run.
Who raised it, on which deal, and what they said the rule gives them.
The stop, with the time each side confirmed it rather than being assumed
to have. The single account both deals point at, or the finding that
they are two customers. The rule at the version in force on the claim
date, and the clauses the case turns on. Who was first on the dated
record, and by how much. The introduction marked evidenced, asserted or
absent. Each side's account as given, and every place it disagrees with
the record. The decision with the clause behind it and every fact it
cites, the earlier decisions checked, any departure said in writing, and
the signer. The one text both sides received and the date they received
it. Which side picked the deal up, and what the customer was told.
An agent that leaves less than this does not implement
`conflict-referee`, whatever else it does well.
# The systems this abstract agent needs
Six 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 decision record | write | The decision, the rule version, the facts it turned on, the signer, and the precedent it becomes. |
| the CRM | read | The two deals, their dates and their activity. |
| the registration record | read | Every registration on the customer, with its owner and its end date. |
| the activity record | read | Who contacted the customer, when, and from which side. |
| the partner record | read | The agreement, and the standing of the partner raising the claim. |
| the notification channel | write | The stop, and the one decision text both sides receive. |
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.
{
"$schema": "https://agent-plugins.org/schemas/1.1.0/plugin.schema.json",
"name": "conflict-referee",
"version": "1.0.0",
"description": "The conflict-referee abstract agent. Decides a channel conflict by the published rule rather than by whoever escalates hardest.",
"author": {
"name": "AgentCatalog",
"url": "https://agentcatalog.com"
},
"homepage": "https://agentcatalog.com/abstract-agents/conflict-referee",
"repository": "https://github.com/jeffrschneider/agentcatalog",
"license": "CC-BY-4.0",
"keywords": [
"abstract-agent",
"reference",
"partners",
"resolve-a-channel-conflict",
"register-a-deal",
"run-a-co-sell",
"abstract"
],
"extensions": {
"com.agentcatalog.agent": {
"agent": "conflict-referee",
"agentVersion": 1,
"department": "partners",
"abstract": true,
"works": "Convenes the assessment in which each side gives its account separately and on the record, and runs assessment to establish who was first and to check the answer against earlier decisions under the same clause. Requests the approval where a named person signs the decision and the reason as written, and convenes the decide-and-announce that puts one text in front of both sides on the same day. Takes the matched account from the account-monitor agent, the dated records from the deal-registration-keeper agent, and the origin marks from the deal-inspector agent. Hands the restarted deal to the account owner or to the co-sell-coordinator agent, and hands the count of conflicts under each clause to the partner-manager agent for the rule debrief.",
"servers": [
{
"name": "the decision record",
"role": "decision-record",
"access": "write",
"needs": "The decision, the rule version, the facts it turned on, the signer, and the precedent it becomes."
},
{
"name": "the CRM",
"role": "crm",
"access": "read",
"needs": "The two deals, their dates and their activity."
},
{
"name": "the registration record",
"role": "registration-record",
"access": "read",
"needs": "Every registration on the customer, with its owner and its end date."
},
{
"name": "the activity record",
"role": "activity-record",
"access": "read",
"needs": "Who contacted the customer, when, and from which side."
},
{
"name": "the partner record",
"role": "partner-record",
"access": "read",
"needs": "The agreement, and the standing of the partner raising the claim."
},
{
"name": "the notification channel",
"role": "notification-channel",
"access": "write",
"needs": "The stop, and the one decision text both sides receive."
}
],
"records": [
"Who raised it, on which deal, and what they said the rule gives them.",
"The stop, with the time each side confirmed it rather than being assumed to have.",
"The single account both deals point at, or the finding that they are two customers.",
"The rule at the version in force on the claim date, and the clauses the case turns on.",
"Who was first on the dated record, and by how much.",
"The introduction marked evidenced, asserted or absent.",
"Each side's account as given, and every place it disagrees with the record.",
"The decision with the clause behind it and every fact it cites, the earlier decisions checked, any departure said in writing, and the signer.",
"The one text both sides received and the date they received it.",
"Which side picked the deal up, and what the customer was told."
],
"escalates": [
"the decision itself, always - to the named person who signs it and the reason as written, because a conflict is never decided by an agent",
"a decision that departs from an earlier one under the same clause - to the second signer a departure needs, with both decisions attached",
"a rule that does not reach the case - to the named decider, recorded as the rule being silent rather than stretched, with the case sent on to be written into the next version",
"a conflict still open past the day limit - to whoever the process names, with the stop staying in force",
"an approach made after the stop - recorded against the side that made it, and a repeated breach goes above this run",
"a clause producing more conflicts than the period allows - to the program design process as an amendment with a version, rather than settling each case one at a time"
],
"not": [
"Does not sell the deal, and does not keep it once the decision is announced: the work goes back to the side the decision named, or to the co-sell process when the decision is that both sides work it.",
"Does not rewrite the rule it applies; it counts the cases and sends the clause back.",
"Does not register a claim, which is the deal-registration-keeper agent.",
"Does not weigh who escalated or how loudly, does not read a rule version later than the one published on the claim date, and never tells the customer the two sides are in dispute."
],
"processes": [
{
"process": "ref/prt/register-a-deal",
"activities": [
"Check for an Existing Claim"
]
},
{
"process": "ref/prt/resolve-a-channel-conflict",
"activities": [
"Take in the Claim of Conflict",
"Stop the Customer Approaches",
"Match the Two Records",
"Read the Rule as It Stood",
"Establish Who Was First",
"Test Who Brought the Customer",
"Hear Each Side Separately",
"Apply the Rule to the Facts",
"Check It Against Earlier Decisions",
"Have the Decision Signed",
"Tell Both Sides the Same Thing",
"Restart the Deal",
"Record the Decision as Precedent"
]
},
{
"process": "ref/prt/run-a-co-sell",
"activities": [
"Keep the Approaches in Step"
]
}
]
}
}
}
# conflict-referee 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 five 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/prt/register-a-deal`, `ref/prt/resolve-a-channel-conflict`, `ref/prt/run-a-co-sell`. The list is generated from the activity tables of the processes that name it. https://agentcatalog.com/abstract-agents/conflict-referee
--- name: announce-it-and-give-the-work-back description: Puts one text in front of both sides on the same day, releases the deal to whichever side the decision named, and files the decision so the next conflict under the same clause can cite it. Use it when running `ref/prt/resolve-a-channel-conflict`. license: CC-BY-4.0 metadata: agent: conflict-referee agent-version: "1" --- # Announce it and give the work back ## What it does Puts one text in front of both sides on the same day, releases the deal to whichever side the decision named, and files the decision so the next conflict under the same clause can cite 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. - **Record the Decision as Precedent** - `ref/prt/resolve-a-channel-conflict`, activity 14 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) - **Restart the Deal** - `ref/prt/resolve-a-channel-conflict`, activity 13 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) - **Tell Both Sides the Same Thing** - `ref/prt/resolve-a-channel-conflict`, activity 12 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) ## What to record Who raised it, on which deal, and what they said the rule gives them. The stop, with the time each side confirmed it rather than being assumed to have. The single account both deals point at, or the finding that they are two customers. The rule at the version in force on the claim date, and the clauses the case turns on. Who was first on the dated record, and by how much. The introduction marked evidenced, asserted or absent. Each side's account as given, and every place it disagrees with the record. The decision with the clause behind it and every fact it cites, the earlier decisions checked, any departure said in writing, and the signer. The one text both sides received and the date they received it. Which side picked the deal up, and what the customer was told. 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`.
--- name: decide-the-conflict description: Applies the rule to the facts, names the clause that decides it, sets the answer against earlier decisions under the same clause, and puts it to a named person to sign with the reason as written. Use it when running `ref/prt/resolve-a-channel-conflict`. license: CC-BY-4.0 metadata: agent: conflict-referee agent-version: "1" --- # Decide the conflict ## What it does Applies the rule to the facts, names the clause that decides it, sets the answer against earlier decisions under the same clause, and puts it to a named person to sign with the reason as written. ## 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 Rule to the Facts** - `ref/prt/resolve-a-channel-conflict`, activity 9 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) - **Check It Against Earlier Decisions** - `ref/prt/resolve-a-channel-conflict`, activity 10 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) - **Have the Decision Signed** - `ref/prt/resolve-a-channel-conflict`, activity 11 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) ## What to record Who raised it, on which deal, and what they said the rule gives them. The stop, with the time each side confirmed it rather than being assumed to have. The single account both deals point at, or the finding that they are two customers. The rule at the version in force on the claim date, and the clauses the case turns on. Who was first on the dated record, and by how much. The introduction marked evidenced, asserted or absent. Each side's account as given, and every place it disagrees with the record. The decision with the clause behind it and every fact it cites, the earlier decisions checked, any departure said in writing, and the signer. The one text both sides received and the date they received it. Which side picked the deal up, and what the customer was told. 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`.
--- name: establish-the-facts description: Builds the record the decision will rest on. Use it when running `ref/prt/resolve-a-channel-conflict`. license: CC-BY-4.0 metadata: agent: conflict-referee agent-version: "1" --- # Establish the facts ## What it does Builds the record the decision will rest on. It matches the two deals to one account or finds they are two customers, reads the rule at the version published on the day the claim arrived, works out who was first on the dated record and whether the partner brought the customer in, and takes each side's account separately and in their own words. ## Where it happens The agent does this in five activities across one reference process. Each one names the activity as that process words it. - **Establish Who Was First** - `ref/prt/resolve-a-channel-conflict`, activity 6 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) - **Hear Each Side Separately** - `ref/prt/resolve-a-channel-conflict`, activity 8 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) - **Match the Two Records** - `ref/prt/resolve-a-channel-conflict`, activity 3 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) - **Read the Rule as It Stood** - `ref/prt/resolve-a-channel-conflict`, activity 5 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) - **Test Who Brought the Customer** - `ref/prt/resolve-a-channel-conflict`, activity 7 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) ## What to record Who raised it, on which deal, and what they said the rule gives them. The stop, with the time each side confirmed it rather than being assumed to have. The single account both deals point at, or the finding that they are two customers. The rule at the version in force on the claim date, and the clauses the case turns on. Who was first on the dated record, and by how much. The introduction marked evidenced, asserted or absent. Each side's account as given, and every place it disagrees with the record. The decision with the clause behind it and every fact it cites, the earlier decisions checked, any departure said in writing, and the signer. The one text both sides received and the date they received it. Which side picked the deal up, and what the customer was told. 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`.
--- name: hold-the-customer-approaches description: Settles who may approach the customer while the question is open, which means stopping both sides and getting each one to confirm the stop, and where two sides work a customer together, spacing their approaches so the customer is not contacted twice. Use it when running `ref/prt/resolve-a-channel-conflict` and `ref/prt/run-a-co-sell`. license: CC-BY-4.0 metadata: agent: conflict-referee agent-version: "1" --- # Hold the customer approaches ## What it does Settles who may approach the customer while the question is open, which means stopping both sides and getting each one to confirm the stop, and where two sides work a customer together, spacing their approaches so the customer is not contacted twice. ## Where it happens The agent does this in two activities across two reference processes. Each one names the activity as that process words it. - **Keep the Approaches in Step** - `ref/prt/run-a-co-sell`, activity 13 - [Run a Co-Sell](../../../../processes/partners/run-a-co-sell.md) - **Stop the Customer Approaches** - `ref/prt/resolve-a-channel-conflict`, activity 2 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) ## What to record Who raised it, on which deal, and what they said the rule gives them. The stop, with the time each side confirmed it rather than being assumed to have. The single account both deals point at, or the finding that they are two customers. The rule at the version in force on the claim date, and the clauses the case turns on. Who was first on the dated record, and by how much. The introduction marked evidenced, asserted or absent. Each side's account as given, and every place it disagrees with the record. The decision with the clause behind it and every fact it cites, the earlier decisions checked, any departure said in writing, and the signer. The one text both sides received and the date they received it. Which side picked the deal up, and what the customer was told. 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`.
--- name: take-in-a-claim-of-conflict description: Takes in a claim that two sides are on the same customer, records what the claimant says the rule gives them, and checks what is already registered against that customer before anything else is read. Use it when running `ref/prt/register-a-deal` and `ref/prt/resolve-a-channel-conflict`. license: CC-BY-4.0 metadata: agent: conflict-referee agent-version: "1" --- # Take in a claim of conflict ## What it does Takes in a claim that two sides are on the same customer, records what the claimant says the rule gives them, and checks what is already registered against that customer before anything else is read. ## Where it happens The agent does this in two activities across two reference processes. Each one names the activity as that process words it. - **Check for an Existing Claim** - `ref/prt/register-a-deal`, activity 4 - [Register a Deal](../../../../processes/partners/register-a-deal.md) - **Take in the Claim of Conflict** - `ref/prt/resolve-a-channel-conflict`, activity 1 - [Resolve a Channel Conflict](../../../../processes/partners/resolve-a-channel-conflict.md) ## What to record Who raised it, on which deal, and what they said the rule gives them. The stop, with the time each side confirmed it rather than being assumed to have. The single account both deals point at, or the finding that they are two customers. The rule at the version in force on the claim date, and the clauses the case turns on. Who was first on the dated record, and by how much. The introduction marked evidenced, asserted or absent. Each side's account as given, and every place it disagrees with the record. The decision with the clause behind it and every fact it cites, the earlier decisions checked, any departure said in writing, and the signer. The one text both sides received and the date they received it. Which side picked the deal up, and what the customer was told. 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`.
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.
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 6 roles, and the access level beside each one is the most the work needs.
{
"$schema": "https://agent-plugins.org/schemas/1.1.0/mcp.schema.json",
"mcpServers": {
"decision-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/decision-record"
},
"crm": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/crm"
},
"registration-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/registration-record"
},
"activity-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/activity-record"
},
"partner-record": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/partner-record"
},
"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.
3 processes, 15 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.
Check for an Existing Claim
Take in the Claim of Conflict · Stop the Customer Approaches · Match the Two Records · Read the Rule as It Stood · Establish Who Was First · Test Who Brought the Customer · Hear Each Side Separately · Apply the Rule to the Facts · Check It Against Earlier Decisions · Have the Decision Signed · Tell Both Sides the Same Thing · Restart the Deal · Record the Decision as Precedent
Keep the Approaches in Step
What it writes down
Who raised it, on which deal, and what they said the rule gives them. The stop, with the time each side confirmed it rather than being assumed to have. The single account both deals point at, or the finding that they are two customers. The rule at the version in force on the claim date, and the clauses the case turns on. Who was first on the dated record, and by how much. The introduction marked evidenced, asserted or absent. Each side's account as given, and every place it disagrees with the record. The decision with the clause behind it and every fact it cites, the earlier decisions checked, any departure said in writing, and the signer. The one text both sides received and the date they received it. Which side picked the deal up, and what the customer was told.
What it will not do
Does not sell the deal, and does not keep it once the decision is announced: the work goes back to the side the decision named, or to the co-sell process when the decision is that both sides work it. Does not rewrite the rule it applies; it counts the cases and sends the clause back. Does not register a claim, which is the deal-registration-keeper agent. Does not weigh who escalated or how loudly, does not read a rule version later than the one published on the claim date, and never tells the customer the two sides are in dispute.
These limits are written into the job on purpose, so that everyone adopting the process knows which decisions stay with a person.
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.
implements: conflict-referee v1
One line in your agent's manifest. The catalog checks it against the records your runs actually leave.
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.
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.
- agent-arbitration MCP server · jdhart81.github.io · hosted · mirrored from the MCP registry Deterministic, machine-verifiable dispute resolution for A2A escrows.
- Consulate - AI Dispute Resolution (Crypto + Traditional + General) MCP server · consulatehq.com · hosted · mirrored from the MCP registry Unified dispute resolution: crypto, payments, SLA violations. 95% AI automation.
- Wavn MCP server · wavn.ai · hosted · mirrored from the MCP registry The deciding place: argue the call, decide, keep the reasons, get the work back as finished files.