Sign in
abstract agent · marketing · 2 processes · plugin 1.0.0

Moderator

moderator v1

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. 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.

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/mkt/moderate-communityref/mkt/webinarGRANTEDthe community rulesread — at their versionsthe community platformwrite — cap: which actions it may take and forthe member's moderation historyreadthe member messaging channelwrite — the notice of what happened and how tothe escalation channelwriteTHE ABSTRACT AGENTmoderatorv1reads what members post…HANDS TO A PERSONanything describing harm…a person decidesa legal demand, a…a person decidesa post that no rule…a person decidesevery appeal, since a…a person decidesremoving a member…a person decidesa rise in the same breach…a person decidesMUST FOLLOWassessment

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.

The plugin

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.

moderator · 9 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 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
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 `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.
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 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.
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": "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"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# 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
skills/act-on-what-breaks-a-rule/SKILL.mdCarries 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`.
---
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`.
skills/carry-out-the-appeal-decision/SKILL.mdPuts 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`.
---
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`.
skills/moderate-the-live-session/SKILL.mdSits 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`.
---
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`.
skills/score-posts-against-the-rules/SKILL.mdReads 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`.
---
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`.
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.

community-rules · readcommunity-platform · writemembers-moderation-history · readmember-messaging-channel · writeescalation-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": {
    "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.

Where it works

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.

Moderate User Communityref/mkt/moderate-community · 15 activities
123456789101112131415

Check the Flagged Posts · Remove What Breaks the Rules · Hear the Appeals

Produce Webinarref/mkt/webinar · 18 activities
123456789101112131415161718

Run the Session

The records it leaves

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.

Where it stops

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.

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: moderator 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.

  • 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.