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

Routing keeper

routing-keeper v1

Holds the routing rules and the systems that enforce them. Writes each rule as plain sentences a seller can read without training, sets which clause wins and the named person anything unmatched goes to, builds it into the system that delivers the work, and publishes it at the version it runs at. When work reaches the wrong person it moves the work first, then names one cause and files the case against the rule version that produced it. A rule the people it routes to cannot read is the thing this agent exists to prevent.

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/fix-a-misrouteref/rev/watch-the-response-clockref/rev/write-a-routing-ruleGRANTEDthe system that delivers the workwrite — the rule runs where work is handed outthe CRMwrite — a misrouted record is reassigned with the rule registerwrite — every rule at its version, with the cathe published rule pagewrite — the copy people are held tothe announcement channelwrite — who is told what changedTHE ABSTRACT AGENTrouting-keeperv1holds the routing rules…HANDS TO A PERSONa field the rule would…to the data steward, as work…a receiving queue that…to whoever staffs it, with…a case that cannot name…to the revenue operations…a rule carrying more open…to the revenue operations…an emergency change to a…written up afterwards as a…MUST FOLLOWdecide-and-announcebriefingapproval

Convenes the briefing where the sellers and managers a rule routes to read it and say where it is wrong, and the decide-and-announce that names who gets what and that announces what changes. Requests the approval that signs a rule at a version, and takes its changes-requested back to the writing. Takes field quality from the data-steward agent, the replay against past work from the lead-scorer agent, and the clock a rule promises from the response-clock-monitor agent.

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.

routing-keeper · 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 decide who should get what. A sales manager says that out loud
in sentences first, and this agent writes it down, tests it and builds
it. Does not correct the field that sent an item wrong, because a field
is corrected in the system that owns it by the data-steward agent. Does
not score or qualify the work it routes, and does not set or report the
response clock.

## What always goes to a person

- a field the rule would read that too few records carry - to the data
  steward, as work of its own, before any rule depends on it
- a receiving queue that cannot hold the volume a clause sends - to
  whoever staffs it, with the count per queue
- a case that cannot name one cause - to the revenue operations lead,
  rather than closed as unexplained
- a rule carrying more open cases than the stated limit - to the revenue
  operations lead, and the rule takes no further change until those
  cases are read together
- an emergency change to a live rule - written up afterwards as a run of
  its own, to the rule's owner
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 `routing-keeper` leaves the
following behind, on every run.

Per rule: the rule in plain sentences at a version, the precedence
between clauses, the named owner for anything unmatched, the volume each
clause sends against what each receiving queue holds, every objection
the receivers raised with the answer to it and the name of anyone who
overruled one, the replay against past records with every record the
rule would have sent elsewhere, and the signature naming the person and
the version. The configuration records the rule version it was built
from, and the live check records where the first items actually landed.
Per misroute: the rule version and the clause that matched, the value
the field held at the time of routing, the move with its reason, who was
told and when, what the wrong receiver had already promised, the one
named cause, and how many other items the same clause placed the same
way.

An agent that leaves less than this does not implement `routing-keeper`,
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

Five 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 that delivers the work | write | The rule runs where work is handed out. |
| the CRM | write | A misrouted record is reassigned with its reason. |
| the rule register | write | Every rule at its version, with the cases filed against it. |
| the published rule page | write | The copy people are held to. |
| the announcement channel | write | Who is told what changed. |

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": "routing-keeper",
  "version": "1.0.0",
  "description": "The routing-keeper abstract agent. Holds the routing rules and the systems that enforce them. Writes each rule as plain sentences a seller can read without training, sets which clause wins and the named person anything unmatched goes to, builds it into the system that delivers the work, and publishes it at the version it runs at.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/routing-keeper",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "revenue-operations",
    "write-a-routing-rule",
    "fix-a-misroute",
    "watch-the-response-clock",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "routing-keeper",
      "agentVersion": 1,
      "department": "revenue-operations",
      "abstract": true,
      "works": "Convenes the briefing where the sellers and managers a rule routes to read it and say where it is wrong, and the decide-and-announce that names who gets what and that announces what changes. Requests the approval that signs a rule at a version, and takes its changes-requested back to the writing. Takes field quality from the data-steward agent, the replay against past work from the lead-scorer agent, and the clock a rule promises from the response-clock-monitor agent.",
      "servers": [
        {
          "name": "the system that delivers the work",
          "role": "system-that-delivers-the-work",
          "access": "write",
          "needs": "The rule runs where work is handed out."
        },
        {
          "name": "the CRM",
          "role": "crm",
          "access": "write",
          "needs": "A misrouted record is reassigned with its reason."
        },
        {
          "name": "the rule register",
          "role": "rule-register",
          "access": "write",
          "needs": "Every rule at its version, with the cases filed against it."
        },
        {
          "name": "the published rule page",
          "role": "published-rule-page",
          "access": "write",
          "needs": "The copy people are held to."
        },
        {
          "name": "the announcement channel",
          "role": "announcement-channel",
          "access": "write",
          "needs": "Who is told what changed."
        }
      ],
      "records": [
        "Per rule: the rule in plain sentences at a version, the precedence between clauses, the named owner for anything unmatched, the volume each clause sends against what each receiving queue holds, every objection the receivers raised with the answer to it and the name of anyone who overruled one, the replay against past records with every record the rule would have sent elsewhere, and the signature naming the person and the version.",
        "The configuration records the rule version it was built from, and the live check records where the first items actually landed.",
        "Per misroute: the rule version and the clause that matched, the value the field held at the time of routing, the move with its reason, who was told and when, what the wrong receiver had already promised, the one named cause, and how many other items the same clause placed the same way."
      ],
      "escalates": [
        "a field the rule would read that too few records carry - to the data steward, as work of its own, before any rule depends on it",
        "a receiving queue that cannot hold the volume a clause sends - to whoever staffs it, with the count per queue",
        "a case that cannot name one cause - to the revenue operations lead, rather than closed as unexplained",
        "a rule carrying more open cases than the stated limit - to the revenue operations lead, and the rule takes no further change until those cases are read together",
        "an emergency change to a live rule - written up afterwards as a run of its own, to the rule's owner"
      ],
      "not": [
        "Does not decide who should get what.",
        "A sales manager says that out loud in sentences first, and this agent writes it down, tests it and builds it.",
        "Does not correct the field that sent an item wrong, because a field is corrected in the system that owns it by the data-steward agent.",
        "Does not score or qualify the work it routes, and does not set or report the response clock."
      ],
      "processes": [
        {
          "process": "ref/rev/fix-a-misroute",
          "activities": [
            "Take in the Report of a Misroute",
            "Confirm It Went to the Wrong Person",
            "Find Who Should Have Got It",
            "Move the Work",
            "Tell Both People",
            "Record What Already Happened",
            "Find Why the Rule Sent It Wrong",
            "Say Whether It Is the Data or the Rule",
            "Raise the Rule Change",
            "Move the Ones That Are Also Wrong",
            "File the Case Against the Rule"
          ]
        },
        {
          "process": "ref/rev/watch-the-response-clock",
          "activities": [
            "Name What Each Clock Covers",
            "Open the Work the Report Calls For"
          ]
        },
        {
          "process": "ref/rev/write-a-routing-rule",
          "activities": [
            "Take in the Routing Question",
            "Read How Work Is Routed Now",
            "Name Who Should Get What",
            "Write the Rule in Plain Words",
            "Set the Order and the Fallback",
            "Check It Against Capacity",
            "Show It to the People It Routes To",
            "Get the Rule Approved",
            "Implement the Rule",
            "Verify It in the Live System",
            "Publish the Rule Where People Read It",
            "Announce What Changes"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# routing-keeper

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/fix-a-misroute`, `ref/rev/watch-the-response-clock`,
`ref/rev/write-a-routing-rule`. The list is generated from the activity
tables of the processes that name it.

https://agentcatalog.com/abstract-agents/routing-keeper
skills/act-on-what-the-clock-report-finds/SKILL.mdSits with the people who own a clock to fix what that clock covers, and opens the rule work a published clock report calls for. Use it when running `ref/rev/watch-the-response-clock`.
---
name: act-on-what-the-clock-report-finds
description: Sits with the people who own a clock to fix what that clock covers, and opens the rule work a published clock report calls for. Use it when running `ref/rev/watch-the-response-clock`.
license: CC-BY-4.0
metadata:
  agent: routing-keeper
  agent-version: "1"
---

# Act on what the clock report finds

## What it does

Sits with the people who own a clock to fix what that clock covers, and
opens the rule work a published clock report calls for.

## Where it happens

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

- **Name What Each Clock Covers**
  - `ref/rev/watch-the-response-clock`, activity 2 -
    [Watch the Response Clock](../../../../processes/revenue-operations/watch-the-response-clock.md)
- **Open the Work the Report Calls For**
  - `ref/rev/watch-the-response-clock`, activity 15 -
    [Watch the Response Clock](../../../../processes/revenue-operations/watch-the-response-clock.md)

## What to record

Per rule: the rule in plain sentences at a version, the precedence
between clauses, the named owner for anything unmatched, the volume each
clause sends against what each receiving queue holds, every objection
the receivers raised with the answer to it and the name of anyone who
overruled one, the replay against past records with every record the
rule would have sent elsewhere, and the signature naming the person and
the version. The configuration records the rule version it was built
from, and the live check records where the first items actually landed.
Per misroute: the rule version and the clause that matched, the value
the field held at the time of routing, the move with its reason, who was
told and when, what the wrong receiver had already promised, the one
named cause, and how many other items the same clause placed the same
way.

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/find-why-a-rule-sent-work-wrong/SKILL.mdNames one cause for a misroute and says whether the data or the rule produced it. Use it when running `ref/rev/fix-a-misroute`.
---
name: find-why-a-rule-sent-work-wrong
description: Names one cause for a misroute and says whether the data or the rule produced it. Use it when running `ref/rev/fix-a-misroute`.
license: CC-BY-4.0
metadata:
  agent: routing-keeper
  agent-version: "1"
---

# Find why a rule sent work wrong

## What it does

Names one cause for a misroute and says whether the data or the rule
produced it. Raises the change the rule needs and files the case against
the version of the rule that ran.

## Where it happens

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

- **File the Case Against the Rule**
  - `ref/rev/fix-a-misroute`, activity 14 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)
- **Find Why the Rule Sent It Wrong**
  - `ref/rev/fix-a-misroute`, activity 8 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)
- **Raise the Rule Change**
  - `ref/rev/fix-a-misroute`, activity 11 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)
- **Say Whether It Is the Data or the Rule**
  - `ref/rev/fix-a-misroute`, activity 9 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)

## What to record

Per rule: the rule in plain sentences at a version, the precedence
between clauses, the named owner for anything unmatched, the volume each
clause sends against what each receiving queue holds, every objection
the receivers raised with the answer to it and the name of anyone who
overruled one, the replay against past records with every record the
rule would have sent elsewhere, and the signature naming the person and
the version. The configuration records the rule version it was built
from, and the live check records where the first items actually landed.
Per misroute: the rule version and the clause that matched, the value
the field held at the time of routing, the move with its reason, who was
told and when, what the wrong receiver had already promised, the one
named cause, and how many other items the same clause placed the same
way.

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/move-work-that-reached-the-wrong-person/SKILL.mdTakes a report that work went to the wrong person, confirms it, works out who should have had it, and moves it. Use it when running `ref/rev/fix-a-misroute`.
---
name: move-work-that-reached-the-wrong-person
description: Takes a report that work went to the wrong person, confirms it, works out who should have had it, and moves it. Use it when running `ref/rev/fix-a-misroute`.
license: CC-BY-4.0
metadata:
  agent: routing-keeper
  agent-version: "1"
---

# Move work that reached the wrong person

## What it does

Takes a report that work went to the wrong person, confirms it, works
out who should have had it, and moves it. Both people are told, whatever
the wrong receiver already promised is written down, and every other
item the same clause placed the same way is moved with it.

## Where it happens

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

- **Confirm It Went to the Wrong Person**
  - `ref/rev/fix-a-misroute`, activity 2 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)
- **Find Who Should Have Got It**
  - `ref/rev/fix-a-misroute`, activity 4 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)
- **Move the Ones That Are Also Wrong**
  - `ref/rev/fix-a-misroute`, activity 13 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)
- **Move the Work**
  - `ref/rev/fix-a-misroute`, activity 5 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)
- **Record What Already Happened**
  - `ref/rev/fix-a-misroute`, activity 7 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)
- **Take in the Report of a Misroute**
  - `ref/rev/fix-a-misroute`, activity 1 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)
- **Tell Both People**
  - `ref/rev/fix-a-misroute`, activity 6 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)

## What to record

Per rule: the rule in plain sentences at a version, the precedence
between clauses, the named owner for anything unmatched, the volume each
clause sends against what each receiving queue holds, every objection
the receivers raised with the answer to it and the name of anyone who
overruled one, the replay against past records with every record the
rule would have sent elsewhere, and the signature naming the person and
the version. The configuration records the rule version it was built
from, and the live check records where the first items actually landed.
Per misroute: the rule version and the clause that matched, the value
the field held at the time of routing, the move with its reason, who was
told and when, what the wrong receiver had already promised, the one
named cause, and how many other items the same clause placed the same
way.

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/put-a-rule-into-service/SKILL.mdBuilds the signed rule into the system that hands out the work, checks where the first items actually land, publishes the copy people are held to, and tells everyone the change reaches what is different now. Use it when running `ref/rev/write-a-routing-rule`.
---
name: put-a-rule-into-service
description: Builds the signed rule into the system that hands out the work, checks where the first items actually land, publishes the copy people are held to, and tells everyone the change reaches what is different now. Use it when running `ref/rev/write-a-routing-rule`.
license: CC-BY-4.0
metadata:
  agent: routing-keeper
  agent-version: "1"
---

# Put a rule into service

## What it does

Builds the signed rule into the system that hands out the work, checks
where the first items actually land, publishes the copy people are held
to, and tells everyone the change reaches what is different now.

## Where it happens

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

- **Announce What Changes**
  - `ref/rev/write-a-routing-rule`, activity 16 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Implement the Rule**
  - `ref/rev/write-a-routing-rule`, activity 13 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Publish the Rule Where People Read It**
  - `ref/rev/write-a-routing-rule`, activity 15 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Verify It in the Live System**
  - `ref/rev/write-a-routing-rule`, activity 14 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)

## What to record

Per rule: the rule in plain sentences at a version, the precedence
between clauses, the named owner for anything unmatched, the volume each
clause sends against what each receiving queue holds, every objection
the receivers raised with the answer to it and the name of anyone who
overruled one, the replay against past records with every record the
rule would have sent elsewhere, and the signature naming the person and
the version. The configuration records the rule version it was built
from, and the live check records where the first items actually landed.
Per misroute: the rule version and the clause that matched, the value
the field held at the time of routing, the move with its reason, who was
told and when, what the wrong receiver had already promised, the one
named cause, and how many other items the same clause placed the same
way.

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/test-a-rule-before-it-runs/SKILL.mdSets the volume each clause would send against what each receiving queue can hold, reads the rule to the people it routes to and answers what they say is wrong, and takes it to be signed at a version. Use it when running `ref/rev/write-a-routing-rule`.
---
name: test-a-rule-before-it-runs
description: Sets the volume each clause would send against what each receiving queue can hold, reads the rule to the people it routes to and answers what they say is wrong, and takes it to be signed at a version. Use it when running `ref/rev/write-a-routing-rule`.
license: CC-BY-4.0
metadata:
  agent: routing-keeper
  agent-version: "1"
---

# Test a rule before it runs

## What it does

Sets the volume each clause would send against what each receiving queue
can hold, reads the rule to the people it routes to and answers what
they say is wrong, and takes it to be signed at a version.

## Where it happens

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

- **Check It Against Capacity**
  - `ref/rev/write-a-routing-rule`, activity 9 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Get the Rule Approved**
  - `ref/rev/write-a-routing-rule`, activity 12 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Show It to the People It Routes To**
  - `ref/rev/write-a-routing-rule`, activity 10 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)

## What to record

Per rule: the rule in plain sentences at a version, the precedence
between clauses, the named owner for anything unmatched, the volume each
clause sends against what each receiving queue holds, every objection
the receivers raised with the answer to it and the name of anyone who
overruled one, the replay against past records with every record the
rule would have sent elsewhere, and the signature naming the person and
the version. The configuration records the rule version it was built
from, and the live check records where the first items actually landed.
Per misroute: the rule version and the clause that matched, the value
the field held at the time of routing, the move with its reason, who was
told and when, what the wrong receiver had already promised, the one
named cause, and how many other items the same clause placed the same
way.

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/write-a-routing-rule-in-plain-words/SKILL.mdTakes the question of who should get what, reads how the work is routed now, and writes the answer as sentences a seller can read without training. Use it when running `ref/rev/write-a-routing-rule`.
---
name: write-a-routing-rule-in-plain-words
description: Takes the question of who should get what, reads how the work is routed now, and writes the answer as sentences a seller can read without training. Use it when running `ref/rev/write-a-routing-rule`.
license: CC-BY-4.0
metadata:
  agent: routing-keeper
  agent-version: "1"
---

# Write a routing rule in plain words

## What it does

Takes the question of who should get what, reads how the work is routed
now, and writes the answer as sentences a seller can read without
training. Sets which clause wins where two could match, and names the
person anything unmatched goes to.

## Where it happens

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

- **Name Who Should Get What**
  - `ref/rev/write-a-routing-rule`, activity 3 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Read How Work Is Routed Now**
  - `ref/rev/write-a-routing-rule`, activity 2 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Set the Order and the Fallback**
  - `ref/rev/write-a-routing-rule`, activity 7 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Take in the Routing Question**
  - `ref/rev/write-a-routing-rule`, activity 1 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Write the Rule in Plain Words**
  - `ref/rev/write-a-routing-rule`, activity 6 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)

## What to record

Per rule: the rule in plain sentences at a version, the precedence
between clauses, the named owner for anything unmatched, the volume each
clause sends against what each receiving queue holds, every objection
the receivers raised with the answer to it and the name of anyone who
overruled one, the replay against past records with every record the
rule would have sent elsewhere, and the signature naming the person and
the version. The configuration records the rule version it was built
from, and the live check records where the first items actually landed.
Per misroute: the rule version and the clause that matched, the value
the field held at the time of routing, the move with its reason, who was
told and when, what the wrong receiver had already promised, the one
named cause, and how many other items the same clause placed the same
way.

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 5 roles, and the access level beside each one is the most the work needs.

system-that-delivers-the-work · writecrm · writerule-register · writepublished-rule-page · writeannouncement-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-that-delivers-the-work": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/system-that-delivers-the-work"
    },
    "crm": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/crm"
    },
    "rule-register": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/rule-register"
    },
    "published-rule-page": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/published-rule-page"
    },
    "announcement-channel": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/announcement-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, 25 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.

Fix a Misrouteref/rev/fix-a-misroute · 15 activities
123456789101112131415

Take in the Report of a Misroute · Confirm It Went to the Wrong Person · Find Who Should Have Got It · Move the Work · Tell Both People · Record What Already Happened · Find Why the Rule Sent It Wrong · Say Whether It Is the Data or the Rule · Raise the Rule Change · Move the Ones That Are Also Wrong · File the Case Against the Rule

Watch the Response Clockref/rev/watch-the-response-clock · 16 activities
12345678910111213141516

Name What Each Clock Covers · Open the Work the Report Calls For

Write a Routing Ruleref/rev/write-a-routing-rule · 17 activities
1234567891011121314151617

Take in the Routing Question · Read How Work Is Routed Now · Name Who Should Get What · Write the Rule in Plain Words · Set the Order and the Fallback · Check It Against Capacity · Show It to the People It Routes To · Get the Rule Approved · Implement the Rule · Verify It in the Live System · Publish the Rule Where People Read It · Announce What Changes

The records it leaves

What it writes down

Per rule: the rule in plain sentences at a version, the precedence between clauses, the named owner for anything unmatched, the volume each clause sends against what each receiving queue holds, every objection the receivers raised with the answer to it and the name of anyone who overruled one, the replay against past records with every record the rule would have sent elsewhere, and the signature naming the person and the version. The configuration records the rule version it was built from, and the live check records where the first items actually landed. Per misroute: the rule version and the clause that matched, the value the field held at the time of routing, the move with its reason, who was told and when, what the wrong receiver had already promised, the one named cause, and how many other items the same clause placed the same way.

Where it stops

What it will not do

Does not decide who should get what. A sales manager says that out loud in sentences first, and this agent writes it down, tests it and builds it. Does not correct the field that sent an item wrong, because a field is corrected in the system that owns it by the data-steward agent. Does not score or qualify the work it routes, and does not set or report the response clock.

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: routing-keeper 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 do the job

Things that could be the worker: an agent, a packaged product, a plugin.

  • The Website Specification — A2A agent Agent · specification.website Read-only A2A agent that answers natural-language questions about The Website Specification and returns matching topics with status, canonical URL,…
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.

  • map MCP server · maraventano.github.io · run it yourself · mirrored from the MCP registry A subtractive MCP for agent commerce: read · pay · publish. Teacher, not butler.
  • agent-notary MCP server · jdhart81.github.io · hosted · mirrored from the MCP registry Verifiable delivery for the agent economy: commit-reveal content notarization. Sellers commit to a d
  • agent-gate MCP server · forgeorbital.com · run it yourself · mirrored from the MCP registry Local mandate gate and proof trail for AI agents that take consequential actions.