Skip to content

Project Memory

New in v3.7.0. Pro. Every new agent session starts from zero: it doesn’t know your site’s conventions, your guardrails, or what the last session did. Project Memory fixes that. Agents capture what they did, propose durable guidance, and, once you approve it, that guidance gets composed into a ## Project memory block injected into every future session’s discovery context.

Turning the module off disables capture, injection, and all three memory tools in one switch.

Reads this site’s project memory: approved guidance plus recent session summaries. Call it at the start of a task so the agent doesn’t re-guess site-specific context. Read-only.

Input:

  • type: optional filter: guardrail, fact, convention, or instruction.
  • topic: optional case-insensitive substring filter over guidance text and session summaries.
  • limit: max session records to return (default 10).

Returns: { guidance: [...], sessions: [...] }.

Proposes one piece of durable guidance. Stored pending, never injected until a human approves it on the Memory screen (unless you’ve turned Require approval off).

Input:

  • type (required): guardrail, fact, convention, or instruction.
  • text (required): the guidance itself, e.g. “never edit the header template” or “checkout is page 42.”
  • title: optional short label; defaults to the first 8 words of text.
  • scope: optional, e.g. global, elementor, woocommerce.
  • target: optional concrete target for enforcement, e.g. post_type:elementor-hf or post_id:42. See Guardrail enforcement for the full matching rules.
  • severity: optional hint: info, warn, or block. As of v3.10.0, an approved block-severity entry with a target is actually enforced, not just advisory. See below.

Returns: { id, status }, status is "pending" or "publish" depending on the Require approval setting.

Records a short summary of what the agent did this session. The plugin attaches a factual digest of the actual changes made (built from the change ledger) automatically, no need to describe every edit by hand.

Input:

  • summary (required): a 2–4 sentence summary for a future agent.
  • takeaways: optional array of { type, text } durable-guidance proposals; each becomes a pending entry, same as calling remember.

Returns: { recorded: true, proposed: <count> }.

This is the whole trust model: nothing an agent proposes reaches another session until a human approves it. remember and the takeaways on save-session-summary both create pending guidance. Only guidance with status publish is composed into the injected block.

Approved guidance is grouped by type into a compact block, capped at 1,500 characters, and cached (rebuilt only when guidance changes):

## Project memory
Guardrails: never edit the header template; ...
Site facts: checkout is page 42; ...
Conventions: ...
Instructions: ...
(Call recall for session history and full detail.)

New in v3.10.0. A memory entry with severity: block isn’t just injected as text for the agent to (hopefully) respect: once it’s approved (publish status) and has a non-empty target, it’s enforced server-side: a matching write is refused before it runs, regardless of which client is calling (an external MCP tool or the built-in AI Chat), with a blocked_by_memory error.

The target string is matched as key:value, or a bare value treated as a tool slug:

  • tool:<slug> (or just the bare slug/full name, e.g. create-user or emcp-tools/create-user): matches that specific tool.
  • post_id:<id> (or id:<id>): matches when the call’s post_id/id input equals it exactly.
  • post_type:<type>: resolves the call’s post_id/id input to a post and matches on its post type, e.g. post_type:elementor-hf blocks writes to any header/footer template.
  • Any other key never matches: an unrecognized target key means the guardrail simply never blocks anything, so a typo in target fails safe (open) rather than fails blocking.

A pending (unapproved) block-severity proposal is inert. Approving it on the Memory screen is what activates enforcement, same gate as regular guidance injection.

EMCP Tools → Memory (in the Build group of the EMCP sidebar; the page is titled Project Memory) is the whole control surface. The sidebar entry shows a badge with the number of proposals waiting for review. The screen has three tabs, each with a count, plus a settings card on the right:

  • Pending review: every proposal from remember or a save-session-summary takeaway, with its type, text, date and “from session”, and Approve / Reject buttons per row. You can also edit a proposal before approving it.

    EMCP Tools → Memory screen (Project Memory) on the Pending review tab: agent proposals labelled Convention, Instruction and Site fact, each with Approve, Reject, edit and delete buttons, beside the Settings card with Require approval on

  • Active guidance: approved guidance, each row with an on/off switch (off keeps the entry but stops injecting it), Edit guidance (pencil) and Delete guidance (moves it to the trash). An add row at the top lets you write guidance by hand, no agent required: pick Guardrail, Site fact or Convention, type the text (for example “Never change the site logo”) and click Add. Guidance you add here is active at once and shows “by admin”.

    EMCP Tools → Memory screen on the Active guidance tab: the add row with the Guardrail, Site fact and Convention chips and Add button, and three approved rows (an instruction, a convention and a site fact) with on/off switches, edit and delete buttons

  • Session history: “Recent sessions”, a read-only log of save-session-summary calls: when, the summary text (or “Digest only” if none was given), and how many changes the attached digest covers.

  • Settings (right-hand card): Require approval (on by default: agent proposals stay pending until you approve them) and Auto-summarize sessions (off by default: when an agent doesn’t leave a summary, generate one with your configured AI Chat provider; costs tokens). Both switches save as soon as you flip them.

The screen shows the tab you choose in its URL (&tab=), so you can bookmark Pending review.

Both recall and remember/save-session-summary require edit_posts (the writes are inert proposals, so the bar matches read). Curating on the Memory screen itself requires manage_options and an active Pro license; without one, Memory in the sidebar opens a locked screen with Upgrade to Pro.