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

Budget keeper

budget-keeper v1

Holds the department's record of money for the year, saying what each function was allocated, what was already committed before the money was divided, what has been drawn since, and what is left. Every draw is recorded against the allocation it came from, so the figure a function has left is the same number whoever asks for it. The agent exists because the money is divided once and then spent by many agents over many months, and somebody has to keep one record that all of them are read against.

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/brand-healthref/mkt/brand-refreshref/mkt/brief-executive-leadershipGRANTEDthe budget recordwrite — each allocation lands at a version witthe commitments already maderead — the agreements, retainers and renewals the order recordread — what has been ordered against each allothe accounting record for the periodread — what has been billed and what has alreathe reconciliation recordread — the checked spend figure for a closed pthe supplier recordread — the term and the renewal date on every the notification channelwrite — every function is told what it holds aTHE ABSTRACT AGENTbudget-keeperv1holds the department's…HANDS TO A PERSONa draw larger than what…a person decidesa move of money between…a person decidesan allocation drawing down…a person decidesa commitment the record…a person decidesa draw with no allocation…a person decidesa request to change a…a person decidesa function holding money…a person decidesMUST FOLLOWallocate-and-reconcilecollect-and-reportbriefingapprovalroll call

Holds the allocate side of allocate-and-reconcile. Money is allocated to a function before anything is spent against it, each draw is recorded against the allocation it came from, and the spend-reconciler agent accounts afterwards for what came back billed. Runs collect-and-report when the money is being divided, so every function is asked the same questions in the same format and a function that did not answer appears as missing. Sits in the briefing that opens the budget decision and brings what was allocated last time, what has already been committed, and what is still unspent. Requests the approval that has to pass before an allocation changes, and puts the change in front of the signers beside the version it would replace. Answers roll-calls with what each function holds, what is committed against it, and what is left.

The plugin

What is in the package

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

budget-keeper · 14 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 spend money. It places no order, signs no agreement, and
releases no payment. The media-buyer agent places media spend under its
own cap, the supplier-manager agent holds what the department buys, and
finance (person) pays. Does not check an invoice against what was
ordered and what ran, which is the spend-reconciler agent; this agent
takes that agent's checked figure and records it against the allocation
it came from. Does not decide how the money is divided. Named people
decide that, the decision-coordinator agent runs the decision, and this
agent issues the agreed answer as a version and reports what is left
against it. Does not say what an initiative would cost or return, which
is the forecaster agent. Does not judge whether the money was well
spent. Does not keep the book of work or say whether the department has
the people for a run, which is the capacity-manager agent. Does not
report the department's performance for a reporting period, which is the
reporting-manager agent; this agent gives that report the allocation
each figure is measured against. Does not sign anything.

## What always goes to a person

- a draw larger than what the allocation still holds, always
- a move of money between functions, always. This agent records the move
  once a person approves it and never makes one itself.
- an allocation drawing down fast enough that it will not last the
  period, said on the day the math stops working rather than when the
  money runs out
- a commitment the record did not know about, such as a renewal that
  fires against a line nobody allocated for it
- a draw with no allocation named
- a request to change a closed period's figures
- a function holding money it has neither drawn nor committed with the
  period nearly over, because giving it up or keeping it 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 `budget-keeper` leaves the
following behind, on every run.

It leaves the budget at a version for the year, with one line per
function carrying what was allocated, what was already committed against
it before the year began, what has been drawn, and what is left. Every
change to an allocation goes in as a new version naming who approved it,
on what date, and which line the money moved from and to, and the
version it replaces stays where it was. Every draw is recorded against
the allocation it came from and the run that made it. The uncommitted
remainder is restated whenever a draw or a change lands. Once the
reconciliation for a period closes, that period's figures are frozen, so
a question about it a year later gets the same answer it got on the day.

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

Seven 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 budget record | write | Each allocation lands at a version with the date it took effect. |
| the commitments already made | read | The agreements, retainers and renewals signed before the money was divided. |
| the order record | read | What has been ordered against each allocation and by whom. |
| the accounting record for the period | read | What has been billed and what has already been paid. |
| the reconciliation record | read | The checked spend figure for a closed period. |
| the supplier record | read | The term and the renewal date on every entry the department pays for. |
| the notification channel | write | Every function is told what it holds and from when. |

There is deliberately no payment grant and no ordering grant. This agent
records money and moves none of it, which is what makes its figures
worth reading.

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": "budget-keeper",
  "version": "1.0.0",
  "description": "The budget-keeper abstract agent. Holds the department's record of money for the year, saying what each function was allocated, what was already committed before the money was divided, what has been drawn since, and what is left.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/budget-keeper",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "marketing",
    "set-marketing-budget",
    "select-marketing-technology",
    "brand-refresh",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "budget-keeper",
      "agentVersion": 1,
      "department": "marketing",
      "abstract": true,
      "works": "Holds the allocate side of allocate-and-reconcile. Money is allocated to a function before anything is spent against it, each draw is recorded against the allocation it came from, and the spend-reconciler agent accounts afterwards for what came back billed. Runs collect-and-report when the money is being divided, so every function is asked the same questions in the same format and a function that did not answer appears as missing. Sits in the briefing that opens the budget decision and brings what was allocated last time, what has already been committed, and what is still unspent. Requests the approval that has to pass before an allocation changes, and puts the change in front of the signers beside the version it would replace. Answers roll-calls with what each function holds, what is committed against it, and what is left.",
      "servers": [
        {
          "name": "the budget record",
          "role": "budget-record",
          "access": "write",
          "needs": "Each allocation lands at a version with the date it took effect."
        },
        {
          "name": "the commitments already made",
          "role": "commitments-already-made",
          "access": "read",
          "needs": "The agreements, retainers and renewals signed before the money was divided."
        },
        {
          "name": "the order record",
          "role": "order-record",
          "access": "read",
          "needs": "What has been ordered against each allocation and by whom."
        },
        {
          "name": "the accounting record for the period",
          "role": "accounting-record-for-the-period",
          "access": "read",
          "needs": "What has been billed and what has already been paid."
        },
        {
          "name": "the reconciliation record",
          "role": "reconciliation-record",
          "access": "read",
          "needs": "The checked spend figure for a closed period."
        },
        {
          "name": "the supplier record",
          "role": "supplier-record",
          "access": "read",
          "needs": "The term and the renewal date on every entry the department pays for."
        },
        {
          "name": "the notification channel",
          "role": "notification-channel",
          "access": "write",
          "needs": "Every function is told what it holds and from when."
        }
      ],
      "records": [
        "It leaves the budget at a version for the year, with one line per function carrying what was allocated, what was already committed against it before the year began, what has been drawn, and what is left.",
        "Every change to an allocation goes in as a new version naming who approved it, on what date, and which line the money moved from and to, and the version it replaces stays where it was.",
        "Every draw is recorded against the allocation it came from and the run that made it.",
        "The uncommitted remainder is restated whenever a draw or a change lands.",
        "Once the reconciliation for a period closes, that period's figures are frozen, so a question about it a year later gets the same answer it got on the day."
      ],
      "escalates": [
        "a draw larger than what the allocation still holds, always",
        "a move of money between functions, always. This agent records the move once a person approves it and never makes one itself.",
        "an allocation drawing down fast enough that it will not last the period, said on the day the math stops working rather than when the money runs out",
        "a commitment the record did not know about, such as a renewal that fires against a line nobody allocated for it",
        "a draw with no allocation named",
        "a request to change a closed period's figures",
        "a function holding money it has neither drawn nor committed with the period nearly over, because giving it up or keeping it is a person's call"
      ],
      "not": [
        "Does not spend money.",
        "It places no order, signs no agreement, and releases no payment.",
        "The media-buyer agent places media spend under its own cap, the supplier-manager agent holds what the department buys, and finance (person) pays.",
        "Does not check an invoice against what was ordered and what ran, which is the spend-reconciler agent; this agent takes that agent's checked figure and records it against the allocation it came from.",
        "Does not decide how the money is divided.",
        "Named people decide that, the decision-coordinator agent runs the decision, and this agent issues the agreed answer as a version and reports what is left against it.",
        "Does not say what an initiative would cost or return, which is the forecaster agent.",
        "Does not judge whether the money was well spent.",
        "Does not keep the book of work or say whether the department has the people for a run, which is the capacity-manager agent.",
        "Does not report the department's performance for a reporting period, which is the reporting-manager agent; this agent gives that report the allocation each figure is measured against.",
        "Does not sign anything."
      ],
      "processes": [
        {
          "process": "ref/mkt/brand-health",
          "activities": [
            "Cover the Cost"
          ]
        },
        {
          "process": "ref/mkt/brand-refresh",
          "activities": [
            "Check What the Department Can Carry",
            "Report the Transition"
          ]
        },
        {
          "process": "ref/mkt/brief-executive-leadership",
          "activities": [
            "Account for the Money",
            "Hand the Decisions On"
          ]
        },
        {
          "process": "ref/mkt/customer-research",
          "activities": [
            "Cover the Cost"
          ]
        },
        {
          "process": "ref/mkt/develop-marketing-strategy",
          "activities": [
            "Check What Each Option Would Take"
          ]
        },
        {
          "process": "ref/mkt/engage-marketing-agency",
          "activities": [
            "Set the Budget and the Term"
          ]
        },
        {
          "process": "ref/mkt/name-product",
          "activities": [
            "Secure the Name"
          ]
        },
        {
          "process": "ref/mkt/plan-marketing-capacity",
          "activities": [
            "Cost Each Way of Closing the Gap",
            "Commission the New Capacity"
          ]
        },
        {
          "process": "ref/mkt/prioritize-initiatives",
          "activities": [
            "Read What Is Already Committed",
            "Resource the Commitments"
          ]
        },
        {
          "process": "ref/mkt/quarterly-business-review",
          "activities": [
            "Read the Budget Position",
            "Move the Money"
          ]
        },
        {
          "process": "ref/mkt/select-marketing-technology",
          "activities": [
            "Brief the Selection",
            "Say What Money There Is",
            "Work out the Whole Cost",
            "Write It into the Register"
          ]
        },
        {
          "process": "ref/mkt/set-marketing-budget",
          "activities": [
            "List the Money Already Committed",
            "Set the Rules for Moving Money",
            "Phase the Money across the Year",
            "Load the Allocations",
            "Record What the Budget Rests On"
          ]
        },
        {
          "process": "ref/mkt/win-loss-analysis",
          "activities": [
            "Cover What It Costs"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# budget-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 nine 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/brand-health`, `ref/mkt/brand-refresh`,
`ref/mkt/brief-executive-leadership`, `ref/mkt/customer-research`,
`ref/mkt/develop-marketing-strategy`, `ref/mkt/engage-marketing-agency`,
and 7 more. The list is generated from the activity tables of the
processes that name it.

https://agentcatalog.com/abstract-agents/budget-keeper
skills/bring-the-money-picture-to-a-briefing/SKILL.mdThe agent sits in the briefing that opens a decision and brings what was allocated, what is already committed and what is left, so everyone hears the same figures at the same time. Use it when running `ref/mkt/select-marketing-technology`.
---
name: bring-the-money-picture-to-a-briefing
description: The agent sits in the briefing that opens a decision and brings what was allocated, what is already committed and what is left, so everyone hears the same figures at the same time. Use it when running `ref/mkt/select-marketing-technology`.
license: CC-BY-4.0
metadata:
  agent: budget-keeper
  agent-version: "1"
---

# Bring the money picture to a briefing

## What it does

The agent sits in the briefing that opens a decision and brings what was
allocated, what is already committed and what is left, so everyone hears
the same figures at the same time.

## Where it happens

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

- **Brief the Selection**
  - `ref/mkt/select-marketing-technology`, activity 5 -
    [Select Marketing Technology](../../../../processes/marketing/select-marketing-technology.md)

## What to record

It leaves the budget at a version for the year, with one line per
function carrying what was allocated, what was already committed against
it before the year began, what has been drawn, and what is left. Every
change to an allocation goes in as a new version naming who approved it,
on what date, and which line the money moved from and to, and the
version it replaces stays where it was. Every draw is recorded against
the allocation it came from and the run that made it. The uncommitted
remainder is restated whenever a draw or a change lands. Once the
reconciliation for a period closes, that period's figures are frozen, so
a question about it a year later gets the same answer it got on the day.

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/cost-an-option/SKILL.mdThe agent works out what a proposed option would take in money and in people over its whole life, including what it would cost to leave it, and says what the department would have to give up to carry it. Use it when running `ref/mkt/brand-refresh` and 3 other reference processes.
---
name: cost-an-option
description: The agent works out what a proposed option would take in money and in people over its whole life, including what it would cost to leave it, and says what the department would have to give up to carry it. Use it when running `ref/mkt/brand-refresh` and 3 other reference processes.
license: CC-BY-4.0
metadata:
  agent: budget-keeper
  agent-version: "1"
---

# Cost an option

## What it does

The agent works out what a proposed option would take in money and in
people over its whole life, including what it would cost to leave it,
and says what the department would have to give up to carry it.

## Where it happens

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

- **Check What Each Option Would Take**
  - `ref/mkt/develop-marketing-strategy`, activity 8 -
    [Develop Marketing Strategy](../../../../processes/marketing/develop-marketing-strategy.md)
- **Check What the Department Can Carry**
  - `ref/mkt/brand-refresh`, activity 9 -
    [Roll Out Brand Refresh](../../../../processes/marketing/brand-refresh.md)
- **Cost Each Way of Closing the Gap**
  - `ref/mkt/plan-marketing-capacity`, activity 9 -
    [Plan Marketing Capacity](../../../../processes/marketing/plan-marketing-capacity.md)
- **Work out the Whole Cost**
  - `ref/mkt/select-marketing-technology`, activity 15 -
    [Select Marketing Technology](../../../../processes/marketing/select-marketing-technology.md)

## What to record

It leaves the budget at a version for the year, with one line per
function carrying what was allocated, what was already committed against
it before the year began, what has been drawn, and what is left. Every
change to an allocation goes in as a new version naming who approved it,
on what date, and which line the money moved from and to, and the
version it replaces stays where it was. Every draw is recorded against
the allocation it came from and the run that made it. The uncommitted
remainder is restated whenever a draw or a change lands. Once the
reconciliation for a period closes, that period's figures are frozen, so
a question about it a year later gets the same answer it got on the day.

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/fund-a-piece-of-work/SKILL.mdThe agent sets money aside for a named piece of work against the allocation it comes from, records the cap and the term it runs under, and says whether that allocation still holds enough to cover it. Use it when running `ref/mkt/brand-health` and 6 other reference processes.
---
name: fund-a-piece-of-work
description: The agent sets money aside for a named piece of work against the allocation it comes from, records the cap and the term it runs under, and says whether that allocation still holds enough to cover it. Use it when running `ref/mkt/brand-health` and 6 other reference processes.
license: CC-BY-4.0
metadata:
  agent: budget-keeper
  agent-version: "1"
---

# Fund a piece of work

## What it does

The agent sets money aside for a named piece of work against the
allocation it comes from, records the cap and the term it runs under,
and says whether that allocation still holds enough to cover it.

## Where it happens

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

- **Commission the New Capacity**
  - `ref/mkt/plan-marketing-capacity`, activity 14 -
    [Plan Marketing Capacity](../../../../processes/marketing/plan-marketing-capacity.md)
- **Cover What It Costs**
  - `ref/mkt/win-loss-analysis`, activity 8 -
    [Conduct Win/Loss Analysis](../../../../processes/marketing/win-loss-analysis.md)
- **Cover the Cost**
  - `ref/mkt/brand-health`, activity 10 -
    [Measure Brand Health](../../../../processes/marketing/brand-health.md)
  - `ref/mkt/customer-research`, activity 9 -
    [Conduct Customer Research](../../../../processes/marketing/customer-research.md)
- **Resource the Commitments**
  - `ref/mkt/prioritize-initiatives`, activity 11 -
    [Prioritize Marketing Initiatives](../../../../processes/marketing/prioritize-initiatives.md)
- **Secure the Name**
  - `ref/mkt/name-product`, activity 13 -
    [Name Product or Company](../../../../processes/marketing/name-product.md)
- **Set the Budget and the Term**
  - `ref/mkt/engage-marketing-agency`, activity 5 -
    [Engage Marketing Agency](../../../../processes/marketing/engage-marketing-agency.md)

## What to record

It leaves the budget at a version for the year, with one line per
function carrying what was allocated, what was already committed against
it before the year began, what has been drawn, and what is left. Every
change to an allocation goes in as a new version naming who approved it,
on what date, and which line the money moved from and to, and the
version it replaces stays where it was. Every draw is recorded against
the allocation it came from and the run that made it. The uncommitted
remainder is restated whenever a draw or a change lands. Once the
reconciliation for a period closes, that period's figures are frozen, so
a question about it a year later gets the same answer it got on the day.

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/keep-the-record-of-commitments/SKILL.mdThe agent records every contract, licence and renewal with its owner, cost, term and renewal date, and totals up what is already committed against a period before any new money is divided. Use it when running `ref/mkt/prioritize-initiatives`, `ref/mkt/select-marketing-technology` and `ref/mkt/set-marketing-budget`.
---
name: keep-the-record-of-commitments
description: The agent records every contract, licence and renewal with its owner, cost, term and renewal date, and totals up what is already committed against a period before any new money is divided. Use it when running `ref/mkt/prioritize-initiatives`, `ref/mkt/select-marketing-technology` and `ref/mkt/set-marketing-budget`.
license: CC-BY-4.0
metadata:
  agent: budget-keeper
  agent-version: "1"
---

# Keep the record of commitments

## What it does

The agent records every contract, licence and renewal with its owner,
cost, term and renewal date, and totals up what is already committed
against a period before any new money is divided.

## Where it happens

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

- **List the Money Already Committed**
  - `ref/mkt/set-marketing-budget`, activity 3 -
    [Set Marketing Budget](../../../../processes/marketing/set-marketing-budget.md)
- **Read What Is Already Committed**
  - `ref/mkt/prioritize-initiatives`, activity 4 -
    [Prioritize Marketing Initiatives](../../../../processes/marketing/prioritize-initiatives.md)
- **Write It into the Register**
  - `ref/mkt/select-marketing-technology`, activity 19 -
    [Select Marketing Technology](../../../../processes/marketing/select-marketing-technology.md)

## What to record

It leaves the budget at a version for the year, with one line per
function carrying what was allocated, what was already committed against
it before the year began, what has been drawn, and what is left. Every
change to an allocation goes in as a new version naming who approved it,
on what date, and which line the money moved from and to, and the
version it replaces stays where it was. Every draw is recorded against
the allocation it came from and the run that made it. The uncommitted
remainder is restated whenever a draw or a change lands. Once the
reconciliation for a period closes, that period's figures are frozen, so
a question about it a year later gets the same answer it got on the day.

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/load-the-allocations/SKILL.mdThe agent records each function's number where spend is tracked and says when in the year that money becomes available. Use it when running `ref/mkt/set-marketing-budget`.
---
name: load-the-allocations
description: The agent records each function's number where spend is tracked and says when in the year that money becomes available. Use it when running `ref/mkt/set-marketing-budget`.
license: CC-BY-4.0
metadata:
  agent: budget-keeper
  agent-version: "1"
---

# Load the allocations

## What it does

The agent records each function's number where spend is tracked and says
when in the year that money becomes available.

## Where it happens

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

- **Load the Allocations**
  - `ref/mkt/set-marketing-budget`, activity 13 -
    [Set Marketing Budget](../../../../processes/marketing/set-marketing-budget.md)
- **Phase the Money across the Year**
  - `ref/mkt/set-marketing-budget`, activity 10 -
    [Set Marketing Budget](../../../../processes/marketing/set-marketing-budget.md)

## What to record

It leaves the budget at a version for the year, with one line per
function carrying what was allocated, what was already committed against
it before the year began, what has been drawn, and what is left. Every
change to an allocation goes in as a new version naming who approved it,
on what date, and which line the money moved from and to, and the
version it replaces stays where it was. Every draw is recorded against
the allocation it came from and the run that made it. The uncommitted
remainder is restated whenever a draw or a change lands. Once the
reconciliation for a period closes, that period's figures are frozen, so
a question about it a year later gets the same answer it got on the day.

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/record-a-move-between-lines/SKILL.mdOnce a person has approved it, the agent records money moving from one line of the plan to another as a new version, naming who approved it and which lines it came from and went to. Use it when running `ref/mkt/quarterly-business-review`.
---
name: record-a-move-between-lines
description: Once a person has approved it, the agent records money moving from one line of the plan to another as a new version, naming who approved it and which lines it came from and went to. Use it when running `ref/mkt/quarterly-business-review`.
license: CC-BY-4.0
metadata:
  agent: budget-keeper
  agent-version: "1"
---

# Record a move between lines

## What it does

Once a person has approved it, the agent records money moving from one
line of the plan to another as a new version, naming who approved it and
which lines it came from and went to.

## Where it happens

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

- **Move the Money**
  - `ref/mkt/quarterly-business-review`, activity 12 -
    [Conduct Quarterly Business Review](../../../../processes/marketing/quarterly-business-review.md)

## What to record

It leaves the budget at a version for the year, with one line per
function carrying what was allocated, what was already committed against
it before the year began, what has been drawn, and what is left. Every
change to an allocation goes in as a new version naming who approved it,
on what date, and which line the money moved from and to, and the
version it replaces stays where it was. Every draw is recorded against
the allocation it came from and the run that made it. The uncommitted
remainder is restated whenever a draw or a change lands. Once the
reconciliation for a period closes, that period's figures are frozen, so
a question about it a year later gets the same answer it got on the day.

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/record-the-rules-and-the-assumptions/SKILL.mdThe agent writes down what the budget rests on, what would reopen it, and who may move money between functions and when. Use it when running `ref/mkt/set-marketing-budget`.
---
name: record-the-rules-and-the-assumptions
description: The agent writes down what the budget rests on, what would reopen it, and who may move money between functions and when. Use it when running `ref/mkt/set-marketing-budget`.
license: CC-BY-4.0
metadata:
  agent: budget-keeper
  agent-version: "1"
---

# Record the rules and the assumptions

## What it does

The agent writes down what the budget rests on, what would reopen it,
and who may move money between functions and when.

## Where it happens

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

- **Record What the Budget Rests On**
  - `ref/mkt/set-marketing-budget`, activity 15 -
    [Set Marketing Budget](../../../../processes/marketing/set-marketing-budget.md)
- **Set the Rules for Moving Money**
  - `ref/mkt/set-marketing-budget`, activity 9 -
    [Set Marketing Budget](../../../../processes/marketing/set-marketing-budget.md)

## What to record

It leaves the budget at a version for the year, with one line per
function carrying what was allocated, what was already committed against
it before the year began, what has been drawn, and what is left. Every
change to an allocation goes in as a new version naming who approved it,
on what date, and which line the money moved from and to, and the
version it replaces stays where it was. Every draw is recorded against
the allocation it came from and the run that made it. The uncommitted
remainder is restated whenever a draw or a change lands. Once the
reconciliation for a period closes, that period's figures are frozen, so
a question about it a year later gets the same answer it got on the day.

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/report-the-budget-position/SKILL.mdThe agent reports what was allocated, what has been drawn against it and what is left, for a function, a period or a single piece of work. Use it when running `ref/mkt/brand-refresh` and 3 other reference processes.
---
name: report-the-budget-position
description: The agent reports what was allocated, what has been drawn against it and what is left, for a function, a period or a single piece of work. Use it when running `ref/mkt/brand-refresh` and 3 other reference processes.
license: CC-BY-4.0
metadata:
  agent: budget-keeper
  agent-version: "1"
---

# Report the budget position

## What it does

The agent reports what was allocated, what has been drawn against it and
what is left, for a function, a period or a single piece of work. It
also says what can still be spent this year and in the years after.

## Where it happens

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

- **Account for the Money**
  - `ref/mkt/brief-executive-leadership`, activity 6 -
    [Brief Executive Leadership](../../../../processes/marketing/brief-executive-leadership.md)
- **Read the Budget Position**
  - `ref/mkt/quarterly-business-review`, activity 4 -
    [Conduct Quarterly Business Review](../../../../processes/marketing/quarterly-business-review.md)
- **Report the Transition**
  - `ref/mkt/brand-refresh`, activity 25 -
    [Roll Out Brand Refresh](../../../../processes/marketing/brand-refresh.md)
- **Say What Money There Is**
  - `ref/mkt/select-marketing-technology`, activity 7 -
    [Select Marketing Technology](../../../../processes/marketing/select-marketing-technology.md)

## What to record

It leaves the budget at a version for the year, with one line per
function carrying what was allocated, what was already committed against
it before the year began, what has been drawn, and what is left. Every
change to an allocation goes in as a new version naming who approved it,
on what date, and which line the money moved from and to, and the
version it replaces stays where it was. Every draw is recorded against
the allocation it came from and the run that made it. The uncommitted
remainder is restated whenever a draw or a change lands. Once the
reconciliation for a period closes, that period's figures are frozen, so
a question about it a year later gets the same answer it got on the day.

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/tell-the-agents-what-was-decided/SKILL.mdOnce a decision is made, the agent tells every agent that has to act what was decided about the money and what each one now holds. Use it when running `ref/mkt/brief-executive-leadership`.
---
name: tell-the-agents-what-was-decided
description: Once a decision is made, the agent tells every agent that has to act what was decided about the money and what each one now holds. Use it when running `ref/mkt/brief-executive-leadership`.
license: CC-BY-4.0
metadata:
  agent: budget-keeper
  agent-version: "1"
---

# Tell the agents what was decided

## What it does

Once a decision is made, the agent tells every agent that has to act
what was decided about the money and what each one now holds.

## Where it happens

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

- **Hand the Decisions On**
  - `ref/mkt/brief-executive-leadership`, activity 19 -
    [Brief Executive Leadership](../../../../processes/marketing/brief-executive-leadership.md)

## What to record

It leaves the budget at a version for the year, with one line per
function carrying what was allocated, what was already committed against
it before the year began, what has been drawn, and what is left. Every
change to an allocation goes in as a new version naming who approved it,
on what date, and which line the money moved from and to, and the
version it replaces stays where it was. Every draw is recorded against
the allocation it came from and the run that made it. The uncommitted
remainder is restated whenever a draw or a change lands. Once the
reconciliation for a period closes, that period's figures are frozen, so
a question about it a year later gets the same answer it got on the day.

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

budget-record · writecommitments-already-made · readorder-record · readaccounting-record-for-the-period · readreconciliation-record · readsupplier-record · readnotification-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": {
    "budget-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/budget-record"
    },
    "commitments-already-made": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/commitments-already-made"
    },
    "order-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/order-record"
    },
    "accounting-record-for-the-period": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/accounting-record-for-the-period"
    },
    "reconciliation-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/reconciliation-record"
    },
    "supplier-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/supplier-record"
    },
    "notification-channel": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/notification-channel"
    }
  }
}

The hostnames here are a placeholder for your own. Whichever product holds each of these systems, the agent you build is yours and nobody else has to be involved in running it.

Where it works

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

Measure Brand Healthref/mkt/brand-health · 23 activities
1234567891011121314151617181920212223

Cover the Cost

Roll Out Brand Refreshref/mkt/brand-refresh · 26 activities
1234567891011121314151617181920212223242526

Check What the Department Can Carry · Report the Transition

Brief Executive Leadershipref/mkt/brief-executive-leadership · 20 activities
1234567891011121314151617181920

Account for the Money · Hand the Decisions On

Conduct Customer Researchref/mkt/customer-research · 20 activities
1234567891011121314151617181920

Cover the Cost

Develop Marketing Strategyref/mkt/develop-marketing-strategy · 17 activities
1234567891011121314151617

Check What Each Option Would Take

Engage Marketing Agencyref/mkt/engage-marketing-agency · 16 activities
12345678910111213141516

Set the Budget and the Term

Name Product or Companyref/mkt/name-product · 16 activities
12345678910111213141516

Secure the Name

Plan Marketing Capacityref/mkt/plan-marketing-capacity · 15 activities
123456789101112131415

Cost Each Way of Closing the Gap · Commission the New Capacity

Prioritize Marketing Initiativesref/mkt/prioritize-initiatives · 16 activities
12345678910111213141516

Read What Is Already Committed · Resource the Commitments

Conduct Quarterly Business Reviewref/mkt/quarterly-business-review · 16 activities
12345678910111213141516

Read the Budget Position · Move the Money

Select Marketing Technologyref/mkt/select-marketing-technology · 21 activities
123456789101112131415161718192021

Brief the Selection · Say What Money There Is · Work out the Whole Cost · Write It into the Register

Set Marketing Budgetref/mkt/set-marketing-budget · 15 activities
123456789101112131415

List the Money Already Committed · Set the Rules for Moving Money · Phase the Money across the Year · Load the Allocations · Record What the Budget Rests On

Conduct Win/Loss Analysisref/mkt/win-loss-analysis · 21 activities
123456789101112131415161718192021

Cover What It Costs

The records it leaves

What it writes down

It leaves the budget at a version for the year, with one line per function carrying what was allocated, what was already committed against it before the year began, what has been drawn, and what is left. Every change to an allocation goes in as a new version naming who approved it, on what date, and which line the money moved from and to, and the version it replaces stays where it was. Every draw is recorded against the allocation it came from and the run that made it. The uncommitted remainder is restated whenever a draw or a change lands. Once the reconciliation for a period closes, that period's figures are frozen, so a question about it a year later gets the same answer it got on the day.

Where it stops

What it will not do

Does not spend money. It places no order, signs no agreement, and releases no payment. The media-buyer agent places media spend under its own cap, the supplier-manager agent holds what the department buys, and finance (person) pays. Does not check an invoice against what was ordered and what ran, which is the spend-reconciler agent; this agent takes that agent's checked figure and records it against the allocation it came from. Does not decide how the money is divided. Named people decide that, the decision-coordinator agent runs the decision, and this agent issues the agreed answer as a version and reports what is left against it. Does not say what an initiative would cost or return, which is the forecaster agent. Does not judge whether the money was well spent. Does not keep the book of work or say whether the department has the people for a run, which is the capacity-manager agent. Does not report the department's performance for a reporting period, which is the reporting-manager agent; this agent gives that report the allocation each figure is measured against. 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: budget-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 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.

  • ledger MCP server · eternal-roman.github.io · run it yourself · mirrored from the MCP registry Exact-decimal double-entry for agents. Call MCP tools; do not do money math in tokens.
  • Cycles — Budget Authority for AI Agents MCP server · runcycles.github.io · run it yourself · mirrored from the MCP registry Runtime budget authority for AI agents — reserve, enforce, reconcile spend across providers
  • figuard-mcp MCP server · figuard.github.io · run it yourself · mirrored from the MCP registry Pre-flight spend authorization for AI agents. Set a budget, enforce limits, audit every decision.