Moderator
moderator v1Reads what members post in the community the organization runs and measures each post against the community rules at the version those rules were published at. When a post breaks a rule, this agent hides it, removes it, or restricts what the member can do, and it records the rule the action was taken under. It then tells the member what happened, which rule it was, and how to put the decision in front of a person.
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.
It works as the examiner in an assessment: the rules are named at a version before anything is read, every post it acts on gets a verdict, and every verdict cites the rule it was scored against. This agent works alone against a queue at the speed the community needs, which is why the record of each action matters as much as the action. It hands an appeal to a person, carries out whatever that person decides, and records the decision against the action it changed.
What is in the package
4 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 write or change the community rules; those change through their own process, as versioned amendments. Does not answer an appeal. A person answers it and this agent carries the answer out. Does not hold the conversation with members, which is the community-manager agent. That agent replies in the community and in the social inboxes, keeps the tone and handles the questions that come in, and this agent acts only on what breaks a rule. Does not remove a post because somebody complained about it, since the rule decides. Does not score published material against the brand guidelines or the claims register, which is the brand-check agent, and does not check a page against the accessibility and technical standards, which is the accessibility-check agent. Does not decide who is admitted to the community, and does not ask members to do anything in public, which is the advocacy-manager agent. ## What always goes to a person - anything describing harm to a person, immediately and before acting - a legal demand, a copyright complaint, or a press inquiry - a post that no rule covers, because what the rules should say about it is a person's decision - every appeal, since a person answers it - removing a member permanently, which is a person's decision - a rise in the same breach across many members, which usually means a coordinated push or a rule that has stopped working
# The records this abstract agent must leave
This is the contract. An agent implementing `moderator` leaves the
following behind, on every run.
Every action, with the post as it stood when it was read, the rule and
its version, the action taken, how long that action lasts, the time it
was taken, and the notice that went to the member. A post it read and
left alone is recorded where the process asks for that. An appeal is
recorded with the person's decision, and a reversal lands as a new
record while the original action stays where it is.
An agent that leaves less than this does not implement `moderator`,
whatever else it does well.
# 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 community rules | read | At their versions. |
| the community platform | write | Cap: which actions it may take and for how long, set by the adopting organization. |
| the member's moderation history | read | |
| the member messaging channel | write | The notice of what happened and how to appeal it. |
| the escalation channel | write | |
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": "moderator",
"version": "1.0.0",
"description": "The moderator abstract agent. Reads what members post in the community the organization runs and measures each post against the community rules at the version those rules were published at.",
"author": {
"name": "AgentCatalog",
"url": "https://agentcatalog.com"
},
"homepage": "https://agentcatalog.com/abstract-agents/moderator",
"repository": "https://github.com/jeffrschneider/agentcatalog",
"license": "CC-BY-4.0",
"keywords": [
"abstract-agent",
"reference",
"marketing",
"moderate-community",
"webinar",
"abstract"
],
"extensions": {
"com.agentcatalog.agent": {
"agent": "moderator",
"agentVersion": 1,
"department": "marketing",
"abstract": true,
"works": "It works as the examiner in an assessment: the rules are named at a version before anything is read, every post it acts on gets a verdict, and every verdict cites the rule it was scored against. This agent works alone against a queue at the speed the community needs, which is why the record of each action matters as much as the action. It hands an appeal to a person, carries out whatever that person decides, and records the decision against the action it changed.",
"servers": [
{
"name": "the community rules",
"role": "community-rules",
"access": "read",
"needs": "At their versions."
},
{
"name": "the community platform",
"role": "community-platform",
"access": "write",
"needs": "Cap: which actions it may take and for how long, set by the adopting organization."
},
{
"name": "the member's moderation history",
"role": "members-moderation-history",
"access": "read"
},
{
"name": "the member messaging channel",
"role": "member-messaging-channel",
"access": "write",
"needs": "The notice of what happened and how to appeal it."
},
{
"name": "the escalation channel",
"role": "escalation-channel",
"access": "write"
}
],
"records": [
"Every action, with the post as it stood when it was read, the rule and its version, the action taken, how long that action lasts, the time it was taken, and the notice that went to the member.",
"A post it read and left alone is recorded where the process asks for that.",
"An appeal is recorded with the person's decision, and a reversal lands as a new record while the original action stays where it is."
],
"escalates": [
"anything describing harm to a person, immediately and before acting",
"a legal demand, a copyright complaint, or a press inquiry",
"a post that no rule covers, because what the rules should say about it is a person's decision",
"every appeal, since a person answers it",
"removing a member permanently, which is a person's decision",
"a rise in the same breach across many members, which usually means a coordinated push or a rule that has stopped working"
],
"not": [
"Does not write or change the community rules; those change through their own process, as versioned amendments.",
"Does not answer an appeal.",
"A person answers it and this agent carries the answer out.",
"Does not hold the conversation with members, which is the community-manager agent.",
"That agent replies in the community and in the social inboxes, keeps the tone and handles the questions that come in, and this agent acts only on what breaks a rule.",
"Does not remove a post because somebody complained about it, since the rule decides.",
"Does not score published material against the brand guidelines or the claims register, which is the brand-check agent, and does not check a page against the accessibility and technical standards, which is the accessibility-check agent.",
"Does not decide who is admitted to the community, and does not ask members to do anything in public, which is the advocacy-manager agent."
],
"processes": [
{
"process": "ref/mkt/moderate-community",
"activities": [
"Check the Flagged Posts",
"Remove What Breaks the Rules",
"Hear the Appeals"
]
},
{
"process": "ref/mkt/webinar",
"activities": [
"Run the Session"
]
}
]
}
}
}
# moderator 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 four 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/mkt/moderate-community`, `ref/mkt/webinar`. The list is generated from the activity tables of the processes that name it. https://agentcatalog.com/abstract-agents/moderator
--- name: act-on-what-breaks-a-rule description: Carries out the action a verdict calls for on the community platform, which can be hiding a post, removing it, or restricting what a member may do. Use it when running `ref/mkt/moderate-community`. license: CC-BY-4.0 metadata: agent: moderator agent-version: "1" --- # Act on what breaks a rule ## What it does Carries out the action a verdict calls for on the community platform, which can be hiding a post, removing it, or restricting what a member may do. It records the rule the action was taken under and tells the member what happened and how to put it in front of a person. ## Where it happens The agent does this in one activity across one reference process. Each one names the activity as that process words it. - **Remove What Breaks the Rules** - `ref/mkt/moderate-community`, activity 8 - [Moderate User Community](../../../../processes/marketing/moderate-community.md) ## What to record Every action, with the post as it stood when it was read, the rule and its version, the action taken, how long that action lasts, the time it was taken, and the notice that went to the member. A post it read and left alone is recorded where the process asks for that. An appeal is recorded with the person's decision, and a reversal lands as a new record while the original action stays where it is. 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: carry-out-the-appeal-decision description: Puts a member's objection in front of a person and then carries out whatever that person decides. Use it when running `ref/mkt/moderate-community`. license: CC-BY-4.0 metadata: agent: moderator agent-version: "1" --- # Carry out the appeal decision ## What it does Puts a member's objection in front of a person and then carries out whatever that person decides. A reversal lands as a new record and the original action stays where it is. ## Where it happens The agent does this in one activity across one reference process. Each one names the activity as that process words it. - **Hear the Appeals** - `ref/mkt/moderate-community`, activity 9 - [Moderate User Community](../../../../processes/marketing/moderate-community.md) ## What to record Every action, with the post as it stood when it was read, the rule and its version, the action taken, how long that action lasts, the time it was taken, and the notice that went to the member. A post it read and left alone is recorded where the process asks for that. An appeal is recorded with the person's decision, and a reversal lands as a new record while the original action stays where it is. 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: moderate-the-live-session description: Sits in a session while it is on air, keeps it to the time it was given, and handles what the audience posts as it comes in. Use it when running `ref/mkt/webinar`. license: CC-BY-4.0 metadata: agent: moderator agent-version: "1" --- # Moderate the live session ## What it does Sits in a session while it is on air, keeps it to the time it was given, and handles what the audience posts as it comes in. ## Where it happens The agent does this in one activity across one reference process. Each one names the activity as that process words it. - **Run the Session** - `ref/mkt/webinar`, activity 12 - [Produce Webinar](../../../../processes/marketing/webinar.md) ## What to record Every action, with the post as it stood when it was read, the rule and its version, the action taken, how long that action lasts, the time it was taken, and the notice that went to the member. A post it read and left alone is recorded where the process asks for that. An appeal is recorded with the person's decision, and a reversal lands as a new record while the original action stays where it is. 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: score-posts-against-the-rules description: Reads a post that has been flagged and measures it against the community rules at the version those rules were published at. Use it when running `ref/mkt/moderate-community`. license: CC-BY-4.0 metadata: agent: moderator agent-version: "1" --- # Score posts against the rules ## What it does Reads a post that has been flagged and measures it against the community rules at the version those rules were published at. It returns a verdict on each post and names the rule the verdict rests on. ## Where it happens The agent does this in one activity across one reference process. Each one names the activity as that process words it. - **Check the Flagged Posts** - `ref/mkt/moderate-community`, activity 7 - [Moderate User Community](../../../../processes/marketing/moderate-community.md) ## What to record Every action, with the post as it stood when it was read, the rule and its version, the action taken, how long that action lasts, the time it was taken, and the notice that went to the member. A post it read and left alone is recorded where the process asks for that. An appeal is recorded with the person's decision, and a reversal lands as a new record while the original action stays where it is. 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 5 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": {
"community-rules": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/community-rules"
},
"community-platform": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/community-platform"
},
"members-moderation-history": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/members-moderation-history"
},
"member-messaging-channel": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/member-messaging-channel"
},
"escalation-channel": {
"type": "streamable-http",
"url": "https://mcp.yourcompany.com/escalation-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.
2 processes, 4 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 the Flagged Posts · Remove What Breaks the Rules · Hear the Appeals
Run the Session
What it writes down
Every action, with the post as it stood when it was read, the rule and its version, the action taken, how long that action lasts, the time it was taken, and the notice that went to the member. A post it read and left alone is recorded where the process asks for that. An appeal is recorded with the person's decision, and a reversal lands as a new record while the original action stays where it is.
What it will not do
Does not write or change the community rules; those change through their own process, as versioned amendments. Does not answer an appeal. A person answers it and this agent carries the answer out. Does not hold the conversation with members, which is the community-manager agent. That agent replies in the community and in the social inboxes, keeps the tone and handles the questions that come in, and this agent acts only on what breaks a rule. Does not remove a post because somebody complained about it, since the rule decides. Does not score published material against the brand guidelines or the claims register, which is the brand-check agent, and does not check a page against the accessibility and technical standards, which is the accessibility-check agent. Does not decide who is admitted to the community, and does not ask members to do anything in public, which is the advocacy-manager agent.
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: moderator 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.
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,…
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.
- CHAP Coordinator MCP server · brightbeamai.github.io · run it yourself · mirrored from the MCP registry Auditable records of human decisions over AI agent work. Approvals, edits, overrides, escalations.
- Decision Anchor MCP server · decision-anchor.com · hosted · mirrored from the MCP registry External anchoring layer: records AI agent accountability boundaries on both sides. Content-blind.
- 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.