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

In-product producer

in-product-producer v1

Builds and runs the notices that customers see inside the running product, such as the banner on a screen they already use, the panel that opens the next time they sign in, and the walkthrough that shows a new feature the first time somebody opens it. It builds each notice from copy and design that have already been signed off, chooses which accounts see it out of the accounts that actually have the feature, sets the date it starts, the date it ends and how often one person sees it, puts a preview in front of the people who have to look at it before any customer does, switches it on once the named owner says go, takes it down on its end date, and reports afterwards how many accounts saw it, how many people did what it asked and how many dismissed it.

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/account-based-playref/mkt/feature-releaseref/mkt/pricing-changeGRANTEDthe product's messaging systemwrite — notices are assembled at versions, swithe live noticestrigger — cap: how many accounts one notice mathe asset storeread — it reads the copy and the design at thethe account and entitlement recordread — which accounts have the feature the notproduct usage datareadthe notice record storewrite — each notice lands with its audience, ianalytics platformsreadthe suppression listsreadTHE ABSTRACT AGENTin-product-producerv1builds and runs the…HANDS TO A PERSONthe decision to switch a…a person decidesa request to run a notice…a person decidesa notice that will not…a person decidesa notice that would reach…a person decidesa notice it could not take…a person decidesmore notices aimed at the…a person decidesa notice still running…a person decidesMUST FOLLOWbuild-by-talentcollect-and-reportbriefingapprovalroll call

Holds the assembly slice in build-by-talent, building the notice to the copy and the design it was given and telling the agent that made a piece when something will not fit inside the product's surface. Sits in the briefing that starts the announcement, so it knows which customers the notice is for and what it is meant to make them do before it starts building. Takes a changes-requested from an approval by reopening only the part the signers named. Answers the roll-call before a release with the count of accounts the notice will reach, the preview record, and whether the notice is ready to switch on. Reports into collect-and-report once the notice is live, with every figure attributed to the system it came from.

The plugin

What is in the package

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

in-product-producer · 7 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 the copy or make the design, which are the copywriter and
designer agents, and it never edits the words or the layout to make them
fit. Does not decide what the release says or when it is announced,
which is the comms-manager agent for one announcement and the
launch-coordinator agent for a launch that has several branches. Does
not build a page on the website or publish one, which is the
web-producer agent, and does not send the email about the same release,
which is the email-producer agent. Does not define segments or change
anything in the contact database, which are the audience-manager and
audience-operator agents. This agent picks its audience out of the
product's own record of which accounts have the feature. Does not hold
the record of who has agreed to be contacted, which is the
consent-manager agent, and it never overrides a suppression that reaches
in-product messaging. Does not choose which message one customer gets
next across a standing program, which is the lifecycle-manager agent.
Does not put the measurement on a page or connect a form to the CRM,
which is the conversion-tracker agent, and does not report the numbers
for the whole release, which is the analytics agent. Does not score the
notice against the brand guidelines or the accessibility standards,
which are the brand-check and accessibility-check agents. Does not
change anything in the product other than the notice, and does not build
or release the feature the notice is about. Does not say go and does not
sign anything.

## What always goes to a person

- the decision to switch a notice on, which stays with the named owner
  however automated the rest of the build becomes
- a request to run a notice from copy or design that has not been signed
  off, every time
- a notice that will not build inside the product as the copy and the
  design supply it. It says what will not fit and sends that piece back
  to the agent that made it.
- a notice that would reach accounts the entitlement record says do not
  have the feature
- a notice it could not take down on its end date, on the day the
  takedown failed
- more notices aimed at the same accounts in the same period than the
  process allows, raised before any of them starts
- a notice still running while customers are in the middle of an
  incident, because whether it keeps running is a person's call
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 `in-product-producer` leaves
the following behind, on every run.

The notice at a version, with a preview that shows it the way an account
will see it. The audience at a version, with the count of accounts that
have the feature, the count left after the exclusion rules were applied,
and the rule behind every removal. The run settings as they were set,
naming where in the product the notice appears, the date it starts, the
date it ends, and how often one person sees it. The go record naming the
version that went live, the time it was switched on, and the person who
said go. The takedown record naming the version that came down and the
date it came down. The report afterwards, giving the accounts that saw
the notice, the people who did what it asked, the people who dismissed
it and the people who did nothing. Anything it could not verify is
recorded as unverified instead of being left out.

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

Eight 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 product's messaging system | write | Notices are assembled at versions, switched off. |
| the live notices | trigger | Cap: how many accounts one notice may reach without asking, set by the adopting organization. |
| the asset store | read | It reads the copy and the design at the versions that were signed. |
| the account and entitlement record | read | Which accounts have the feature the notice is about. |
| product usage data | read |  |
| the notice record store | write | Each notice lands with its audience, its dates and what came back. |
| analytics platforms | read |  |
| the suppression lists | read |  |

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": "in-product-producer",
  "version": "1.0.0",
  "description": "The in-product-producer abstract agent. Builds and runs the notices that customers see inside the running product, such as the banner on a screen they already use, the panel that opens the next time they sign in, and the walkthrough that shows a new feature the first time somebody opens it.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/in-product-producer",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "marketing",
    "account-based-play",
    "feature-release",
    "pricing-change",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "in-product-producer",
      "agentVersion": 1,
      "department": "marketing",
      "abstract": true,
      "works": "Holds the assembly slice in build-by-talent, building the notice to the copy and the design it was given and telling the agent that made a piece when something will not fit inside the product's surface. Sits in the briefing that starts the announcement, so it knows which customers the notice is for and what it is meant to make them do before it starts building. Takes a changes-requested from an approval by reopening only the part the signers named. Answers the roll-call before a release with the count of accounts the notice will reach, the preview record, and whether the notice is ready to switch on. Reports into collect-and-report once the notice is live, with every figure attributed to the system it came from.",
      "servers": [
        {
          "name": "the product's messaging system",
          "role": "products-messaging-system",
          "access": "write",
          "needs": "Notices are assembled at versions, switched off."
        },
        {
          "name": "the live notices",
          "role": "live-notices",
          "access": "trigger",
          "needs": "Cap: how many accounts one notice may reach without asking, set by the adopting organization."
        },
        {
          "name": "the asset store",
          "role": "asset-store",
          "access": "read",
          "needs": "It reads the copy and the design at the versions that were signed."
        },
        {
          "name": "the account and entitlement record",
          "role": "account-and-entitlement-record",
          "access": "read",
          "needs": "Which accounts have the feature the notice is about."
        },
        {
          "name": "product usage data",
          "role": "product-usage-data",
          "access": "read"
        },
        {
          "name": "the notice record store",
          "role": "notice-record-store",
          "access": "write",
          "needs": "Each notice lands with its audience, its dates and what came back."
        },
        {
          "name": "analytics platforms",
          "role": "analytics-platforms",
          "access": "read"
        },
        {
          "name": "the suppression lists",
          "role": "suppression-lists",
          "access": "read"
        }
      ],
      "records": [
        "The notice at a version, with a preview that shows it the way an account will see it.",
        "The audience at a version, with the count of accounts that have the feature, the count left after the exclusion rules were applied, and the rule behind every removal.",
        "The run settings as they were set, naming where in the product the notice appears, the date it starts, the date it ends, and how often one person sees it.",
        "The go record naming the version that went live, the time it was switched on, and the person who said go.",
        "The takedown record naming the version that came down and the date it came down.",
        "The report afterwards, giving the accounts that saw the notice, the people who did what it asked, the people who dismissed it and the people who did nothing.",
        "Anything it could not verify is recorded as unverified instead of being left out."
      ],
      "escalates": [
        "the decision to switch a notice on, which stays with the named owner however automated the rest of the build becomes",
        "a request to run a notice from copy or design that has not been signed off, every time",
        "a notice that will not build inside the product as the copy and the design supply it. It says what will not fit and sends that piece back to the agent that made it.",
        "a notice that would reach accounts the entitlement record says do not have the feature",
        "a notice it could not take down on its end date, on the day the takedown failed",
        "more notices aimed at the same accounts in the same period than the process allows, raised before any of them starts",
        "a notice still running while customers are in the middle of an incident, because whether it keeps running is a person's call"
      ],
      "not": [
        "Does not write the copy or make the design, which are the copywriter and designer agents, and it never edits the words or the layout to make them fit.",
        "Does not decide what the release says or when it is announced, which is the comms-manager agent for one announcement and the launch-coordinator agent for a launch that has several branches.",
        "Does not build a page on the website or publish one, which is the web-producer agent, and does not send the email about the same release, which is the email-producer agent.",
        "Does not define segments or change anything in the contact database, which are the audience-manager and audience-operator agents.",
        "This agent picks its audience out of the product's own record of which accounts have the feature.",
        "Does not hold the record of who has agreed to be contacted, which is the consent-manager agent, and it never overrides a suppression that reaches in-product messaging.",
        "Does not choose which message one customer gets next across a standing program, which is the lifecycle-manager agent.",
        "Does not put the measurement on a page or connect a form to the CRM, which is the conversion-tracker agent, and does not report the numbers for the whole release, which is the analytics agent.",
        "Does not score the notice against the brand guidelines or the accessibility standards, which are the brand-check and accessibility-check agents.",
        "Does not change anything in the product other than the notice, and does not build or release the feature the notice is about.",
        "Does not say go and does not sign anything."
      ],
      "processes": [
        {
          "process": "ref/mkt/account-based-play",
          "activities": [
            "Build the Pages and the Notice"
          ]
        },
        {
          "process": "ref/mkt/feature-release",
          "activities": [
            "Tell the Customers Who Have It"
          ]
        },
        {
          "process": "ref/mkt/pricing-change",
          "activities": [
            "Serve the Notice"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# in-product-producer

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 two 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/account-based-play`, `ref/mkt/feature-release`,
`ref/mkt/pricing-change`. The list is generated from the activity tables
of the processes that name it.

https://agentcatalog.com/abstract-agents/in-product-producer
skills/notice-build/SKILL.mdAssembles a notice that appears inside the running product from copy and design that have already been signed off, and puts the tracking on it so what people do with it can be counted afterwards. Use it when running `ref/mkt/account-based-play`.
---
name: notice-build
description: Assembles a notice that appears inside the running product from copy and design that have already been signed off, and puts the tracking on it so what people do with it can be counted afterwards. Use it when running `ref/mkt/account-based-play`.
license: CC-BY-4.0
metadata:
  agent: in-product-producer
  agent-version: "1"
---

# Notice build

## What it does

Assembles a notice that appears inside the running product from copy and
design that have already been signed off, and puts the tracking on it so
what people do with it can be counted afterwards. It also builds the
pages that sit behind the notice when the run needs them.

## Where it happens

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

- **Build the Pages and the Notice**
  - `ref/mkt/account-based-play`, activity 13 -
    [Run Account-Based Play](../../../../processes/marketing/account-based-play.md)

## What to record

The notice at a version, with a preview that shows it the way an account
will see it. The audience at a version, with the count of accounts that
have the feature, the count left after the exclusion rules were applied,
and the rule behind every removal. The run settings as they were set,
naming where in the product the notice appears, the date it starts, the
date it ends, and how often one person sees it. The go record naming the
version that went live, the time it was switched on, and the person who
said go. The takedown record naming the version that came down and the
date it came down. The report afterwards, giving the accounts that saw
the notice, the people who did what it asked, the people who dismissed
it and the people who did nothing. Anything it could not verify is
recorded as unverified instead of being left out.

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/notice-delivery/SKILL.mdWorks out which accounts should see the notice out of the accounts that actually have the feature, switches it on, and keeps the record of who was told and when. Use it when running `ref/mkt/feature-release` and `ref/mkt/pricing-change`.
---
name: notice-delivery
description: Works out which accounts should see the notice out of the accounts that actually have the feature, switches it on, and keeps the record of who was told and when. Use it when running `ref/mkt/feature-release` and `ref/mkt/pricing-change`.
license: CC-BY-4.0
metadata:
  agent: in-product-producer
  agent-version: "1"
---

# Notice delivery

## What it does

Works out which accounts should see the notice out of the accounts that
actually have the feature, switches it on, and keeps the record of who
was told and when. The same work covers a notice a customer is owed and
a notice that simply announces something new.

## Where it happens

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

- **Serve the Notice**
  - `ref/mkt/pricing-change`, activity 10 -
    [Launch Pricing Change](../../../../processes/marketing/pricing-change.md)
- **Tell the Customers Who Have It**
  - `ref/mkt/feature-release`, activity 7 -
    [Announce Feature Release](../../../../processes/marketing/feature-release.md)

## What to record

The notice at a version, with a preview that shows it the way an account
will see it. The audience at a version, with the count of accounts that
have the feature, the count left after the exclusion rules were applied,
and the rule behind every removal. The run settings as they were set,
naming where in the product the notice appears, the date it starts, the
date it ends, and how often one person sees it. The go record naming the
version that went live, the time it was switched on, and the person who
said go. The takedown record naming the version that came down and the
date it came down. The report afterwards, giving the accounts that saw
the notice, the people who did what it asked, the people who dismissed
it and the people who did nothing. Anything it could not verify is
recorded as unverified instead of being left out.

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

products-messaging-system · writelive-notices · triggerasset-store · readaccount-and-entitlement-record · readproduct-usage-data · readnotice-record-store · writeanalytics-platforms · readsuppression-lists · read
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": {
    "products-messaging-system": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/products-messaging-system"
    },
    "live-notices": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/live-notices"
    },
    "asset-store": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/asset-store"
    },
    "account-and-entitlement-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/account-and-entitlement-record"
    },
    "product-usage-data": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/product-usage-data"
    },
    "notice-record-store": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/notice-record-store"
    },
    "analytics-platforms": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/analytics-platforms"
    },
    "suppression-lists": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/suppression-lists"
    }
  }
}

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

Run Account-Based Playref/mkt/account-based-play · 19 activities
12345678910111213141516171819

Build the Pages and the Notice

Announce Feature Releaseref/mkt/feature-release · 10 activities
12345678910

Tell the Customers Who Have It

Launch Pricing Changeref/mkt/pricing-change · 16 activities
12345678910111213141516

Serve the Notice

The records it leaves

What it writes down

The notice at a version, with a preview that shows it the way an account will see it. The audience at a version, with the count of accounts that have the feature, the count left after the exclusion rules were applied, and the rule behind every removal. The run settings as they were set, naming where in the product the notice appears, the date it starts, the date it ends, and how often one person sees it. The go record naming the version that went live, the time it was switched on, and the person who said go. The takedown record naming the version that came down and the date it came down. The report afterwards, giving the accounts that saw the notice, the people who did what it asked, the people who dismissed it and the people who did nothing. Anything it could not verify is recorded as unverified instead of being left out.

Where it stops

What it will not do

Does not write the copy or make the design, which are the copywriter and designer agents, and it never edits the words or the layout to make them fit. Does not decide what the release says or when it is announced, which is the comms-manager agent for one announcement and the launch-coordinator agent for a launch that has several branches. Does not build a page on the website or publish one, which is the web-producer agent, and does not send the email about the same release, which is the email-producer agent. Does not define segments or change anything in the contact database, which are the audience-manager and audience-operator agents. This agent picks its audience out of the product's own record of which accounts have the feature. Does not hold the record of who has agreed to be contacted, which is the consent-manager agent, and it never overrides a suppression that reaches in-product messaging. Does not choose which message one customer gets next across a standing program, which is the lifecycle-manager agent. Does not put the measurement on a page or connect a form to the CRM, which is the conversion-tracker agent, and does not report the numbers for the whole release, which is the analytics agent. Does not score the notice against the brand guidelines or the accessibility standards, which are the brand-check and accessibility-check agents. Does not change anything in the product other than the notice, and does not build or release the feature the notice is about. Does not say go and does not sign anything.

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: in-product-producer v1 One line in your agent's manifest. The catalog checks it against the records your runs actually leave.
A guess, not a claim

The closest things in the catalog, by description

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

Might be reached for

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

  • Version Pill MCP server · versionpill.github.io · hosted · mirrored from the MCP registry Product management, public changelog, and feature requests - 60 lean MCP tools.
  • Pabs MCP server · pdunovits.github.io · hosted · mirrored from the MCP registry The decision layer between an idea and a digital product that works.
  • Terrarium MCP server · nelsonsantryhkd.github.io · hosted · mirrored from the MCP registry Human visual review for agent-built HTML: publish artifacts, pull anchored comments, push fixes.