skip to content
$worker

memory

v0.2.8

Durable cross-session agent memory — named banks of always-injected markdown rules and auto-extracted memories, hybrid BM25 + entity recall, pinning, and supersede-never-delete history. Plain files on disk; every operation is a traced function.

iiiverified
155 installs0 in 7d0 today
install
$iii trigger compose::add worker=memory@0.2.8
binarylicense: Apache-2.0agentbm25contextmemoryragrecall
  • macOS: arm64
  • Linux: arm64 · armv7 · x64
  • Windows: arm64 · x64

exact versions are immutable; binary and bundle artifacts are digest-pinned.

functions

23

memory::bank::create

function

Create a named memory bank: an isolated scope of rules and memories, e.g. one per project or persona. Idempotent; sessions select it via metadata `memory_bank`.

request
  • descriptionstring

    Human description shown in listings and the console.

  • namestringrequired

    Bank name, `[a-z0-9][a-z0-9_-]{0,63}` (it becomes a folder name).

response
  • bankobjectrequired

    Summary row for `memory::bank::list` and the console page.

    • descriptionstring
    • memoriesinteger· uintrequiredmin 0

      Live memory (memory) count.

    • namestringrequired
    • pinnedinteger· uintrequiredmin 0
    • rulesinteger· uintrequiredmin 0

      Rule (always-injected markdown) count.

  • createdbooleanrequired

    False when the bank already existed (create is idempotent).

memory::bank::delete

function

Delete a memory bank: the folder moves to the store's .trash, recoverable by hand.

request
  • namestringrequired
response
  • okbooleanrequired
  • trashed_tostringrequired

    Where the bank folder was moved (under the store's `.trash/`).

memory::bank::list

function

List every memory bank with memory/rule/pin counts.

request
empty object
response
  • banksobject[]required
    • descriptionstring
    • memoriesinteger· uintrequiredmin 0

      Live memory (memory) count.

    • namestringrequired
    • pinnedinteger· uintrequiredmin 0
    • rulesinteger· uintrequiredmin 0

      Rule (always-injected markdown) count.

memory::delete

function

Delete a memory (tombstone: sets invalid_at). It leaves recall immediately but stays on disk, readable with include_superseded.

request
  • bankstring
  • idstringrequired
response
  • memoryobjectrequired

    One memory item. Serialized whole as a `memories.jsonl` line; replay is last-wins by `id`, so an update appends a full record with a bumped `revision` and a delete appends a tombstoned record (`invalid_at` set) — history is never destroyed, only superseded.

    • confidenceone ofrequired

      How a memory entered the store.

      one of (3)
      variant 1
      valuestringenum: extracted
      variant 2
      valuestringenum: inferred
      variant 3
      valuestringenum: stated
    • corroborationinteger· uint32min 0

      Times this memory was independently re-observed. Boosts recall rank.

    • created_atinteger· uint64requiredmin 0

      Milliseconds since epoch.

    • entitiesstring[]

      Entity handles used as an exact-match retrieval signal.

    • idstringrequired

      Content fingerprint (`fp` + FNV-1a of the normalized text), so re-ingesting the same source reinforces instead of duplicating.

    • invalid_atinteger· uint64min 0

      Set when the memory stopped being true (superseded or deleted). The record stays on disk and remains queryable with `include_superseded: true`.

    • pinnedboolean

      Pinned memories are never touched by any automatic path (consolidation, decay); only an explicit `memory::pin`/`memory::update` changes them.

    • revisioninteger· uint64min 0

      Bumped on every appended revision of this id; replay keeps the highest.

    • sourceany of
      any of (2)
      variant 1
      • agentstring
      • entry_idstring
      • session_idstring
      variant 2
      valuenull
    • superseded_bystring

      Memory id that replaced this one, when superseded by content.

    • tagsstring[]

      Topical labels for filtering WITHIN a bank ("iii", "workers", "billing") — organization, not ranking. Normalized lowercase, capped like entities. Old records without the field load as untagged.

    • textstringrequired
    • updated_atinteger· uint64requiredmin 0

memory::doctor

function

Self-test memory end to end: data-dir writability, a scratch-bank write/read/trash roundtrip, and sibling reachability (router, session-manager). Reports degraded states explicitly, not a bare process-up health.

request
empty object
response
  • checksobject[]required
    • detailstringrequired
    • namestringrequired
    • okbooleanrequired
  • okbooleanrequired

    True only when every REQUIRED check passed (sibling reachability is reported but advisory).

memory::extract-job

function

Internal: queue-delivered extraction job — errors propagate so the queue retries and dead-letters instead of losing the pass.

request
  • session_idstringrequired
response
  • okbooleanrequired

memory::get

function

Fetch one memory by id, including superseded/tombstoned records.

request
  • bankstring
  • idstringrequired
response
  • memoryobjectrequired

    One memory item. Serialized whole as a `memories.jsonl` line; replay is last-wins by `id`, so an update appends a full record with a bumped `revision` and a delete appends a tombstoned record (`invalid_at` set) — history is never destroyed, only superseded.

    • confidenceone ofrequired

      How a memory entered the store.

      one of (3)
      variant 1
      valuestringenum: extracted
      variant 2
      valuestringenum: inferred
      variant 3
      valuestringenum: stated
    • corroborationinteger· uint32min 0

      Times this memory was independently re-observed. Boosts recall rank.

    • created_atinteger· uint64requiredmin 0

      Milliseconds since epoch.

    • entitiesstring[]

      Entity handles used as an exact-match retrieval signal.

    • idstringrequired

      Content fingerprint (`fp` + FNV-1a of the normalized text), so re-ingesting the same source reinforces instead of duplicating.

    • invalid_atinteger· uint64min 0

      Set when the memory stopped being true (superseded or deleted). The record stays on disk and remains queryable with `include_superseded: true`.

    • pinnedboolean

      Pinned memories are never touched by any automatic path (consolidation, decay); only an explicit `memory::pin`/`memory::update` changes them.

    • revisioninteger· uint64min 0

      Bumped on every appended revision of this id; replay keeps the highest.

    • sourceany of
      any of (2)
      variant 1
      • agentstring
      • entry_idstring
      • session_idstring
      variant 2
      valuenull
    • superseded_bystring

      Memory id that replaced this one, when superseded by content.

    • tagsstring[]

      Topical labels for filtering WITHIN a bank ("iii", "workers", "billing") — organization, not ranking. Normalized lowercase, capped like entities. Old records without the field load as untagged.

    • textstringrequired
    • updated_atinteger· uint64requiredmin 0

memory::hook::pre-generate

function

Internal: harness pre-generate hook — injects the session bank's rules into the system prompt and recalled memories as one appended message. Never denies.

request
  • generateany of
    any of (2)
    variant 1
    • messagesunknown

      Transcript messages as assembled so far (schema-free: shapes belong to the router).

    • system_promptstring
    variant 2
    valuenull
  • metadataunknown

    Turn metadata (`harness::send` options.metadata); `memory_bank` here overrides the session-level selection for this turn.

  • session_idstring
response
  • annotationsobject
  • decisionstringrequired
  • mutationsany of
    any of (2)
    variant 1
    • append_messagesunknown[]required
    • system_promptstring
    variant 2
    valuenull

memory::list

function

List a bank's memories page by page, newest first. `include_superseded` shows history too.

request
  • bankstring
  • include_supersededboolean

    Include superseded/tombstoned records (the history view).

  • limitinteger· uintmin 0

    Page size, default 50, max 500.

  • offsetinteger· uintmin 0
  • tagstring

    Only memories carrying this tag.

response
  • memoriesobject[]required
    • confidenceone ofrequired

      How a memory entered the store.

      one of (3)
      variant 1
      valuestringenum: extracted
      variant 2
      valuestringenum: inferred
      variant 3
      valuestringenum: stated
    • corroborationinteger· uint32min 0

      Times this memory was independently re-observed. Boosts recall rank.

    • created_atinteger· uint64requiredmin 0

      Milliseconds since epoch.

    • entitiesstring[]

      Entity handles used as an exact-match retrieval signal.

    • idstringrequired

      Content fingerprint (`fp` + FNV-1a of the normalized text), so re-ingesting the same source reinforces instead of duplicating.

    • invalid_atinteger· uint64min 0

      Set when the memory stopped being true (superseded or deleted). The record stays on disk and remains queryable with `include_superseded: true`.

    • pinnedboolean

      Pinned memories are never touched by any automatic path (consolidation, decay); only an explicit `memory::pin`/`memory::update` changes them.

    • revisioninteger· uint64min 0

      Bumped on every appended revision of this id; replay keeps the highest.

    • sourceany of
      any of (2)
      variant 1
      • agentstring
      • entry_idstring
      • session_idstring
      variant 2
      valuenull
    • superseded_bystring

      Memory id that replaced this one, when superseded by content.

    • tagsstring[]

      Topical labels for filtering WITHIN a bank ("iii", "workers", "billing") — organization, not ranking. Normalized lowercase, capped like entities. Old records without the field load as untagged.

    • textstringrequired
    • updated_atinteger· uint64requiredmin 0
  • totalinteger· uintrequiredmin 0

memory::on-config-change

function

Internal: hot-reload memory from the authoritative configuration when it changes — reopens the store on a data_dir change and swaps the per-call tuning snapshot otherwise.

request
  • idstring

    Configuration id that changed (advisory; the handler re-fetches).

response
  • okbooleanrequired

memory::on-session-deleted

function

Internal: session::deleted handler — drops the session's extraction cursor.

request
  • session_idstring
response
  • okbooleanrequired

memory::on-turn-completed

function

Internal: harness turn-completed handler — enqueues one durable extraction job (a single router::complete call) for the finished turn; inline fallback without a queue.

request
  • session_idstring
  • statusstring
  • turn_idstring
response
  • okbooleanrequired

memory::pin

function

Pin or unpin a memory. Pinned memories rank higher in recall and are untouchable by every automatic path.

request
  • bankstring
  • idstringrequired
  • pinnedbooleanrequired
response
  • memoryobjectrequired

    One memory item. Serialized whole as a `memories.jsonl` line; replay is last-wins by `id`, so an update appends a full record with a bumped `revision` and a delete appends a tombstoned record (`invalid_at` set) — history is never destroyed, only superseded.

    • confidenceone ofrequired

      How a memory entered the store.

      one of (3)
      variant 1
      valuestringenum: extracted
      variant 2
      valuestringenum: inferred
      variant 3
      valuestringenum: stated
    • corroborationinteger· uint32min 0

      Times this memory was independently re-observed. Boosts recall rank.

    • created_atinteger· uint64requiredmin 0

      Milliseconds since epoch.

    • entitiesstring[]

      Entity handles used as an exact-match retrieval signal.

    • idstringrequired

      Content fingerprint (`fp` + FNV-1a of the normalized text), so re-ingesting the same source reinforces instead of duplicating.

    • invalid_atinteger· uint64min 0

      Set when the memory stopped being true (superseded or deleted). The record stays on disk and remains queryable with `include_superseded: true`.

    • pinnedboolean

      Pinned memories are never touched by any automatic path (consolidation, decay); only an explicit `memory::pin`/`memory::update` changes them.

    • revisioninteger· uint64min 0

      Bumped on every appended revision of this id; replay keeps the highest.

    • sourceany of
      any of (2)
      variant 1
      • agentstring
      • entry_idstring
      • session_idstring
      variant 2
      valuenull
    • superseded_bystring

      Memory id that replaced this one, when superseded by content.

    • tagsstring[]

      Topical labels for filtering WITHIN a bank ("iii", "workers", "billing") — organization, not ranking. Normalized lowercase, capped like entities. Old records without the field load as untagged.

    • textstringrequired
    • updated_atinteger· uint64requiredmin 0

memory::preview

function

Preview the memory injection for a hypothetical chat message: the exact system-prompt memory section (rules, budgets, truncation markers), the memories the turn would be handed (post ambient floor and token budget), and the appended message verbatim. Runs the pre-generate hook's own code.

request
  • bankstring

    Bank to preview; the configured default when omitted.

  • querystringrequired

    The hypothetical user message (what someone would type in chat).

response
  • bankstringrequired
  • memoriesobject[]required

    Memories the turn would be handed, post ambient floor and token budget, in injection order.

    • memoryobjectrequired

      One memory item. Serialized whole as a `memories.jsonl` line; replay is last-wins by `id`, so an update appends a full record with a bumped `revision` and a delete appends a tombstoned record (`invalid_at` set) — history is never destroyed, only superseded.

      • confidenceone ofrequired

        How a memory entered the store.

        … expand 3 nested
        one of (3)
        variant 1
        valuestringenum: extracted
        variant 2
        valuestringenum: inferred
        variant 3
        valuestringenum: stated
      • corroborationinteger· uint32min 0

        Times this memory was independently re-observed. Boosts recall rank.

      • created_atinteger· uint64requiredmin 0

        Milliseconds since epoch.

      • entitiesstring[]

        Entity handles used as an exact-match retrieval signal.

      • idstringrequired

        Content fingerprint (`fp` + FNV-1a of the normalized text), so re-ingesting the same source reinforces instead of duplicating.

      • invalid_atinteger· uint64min 0

        Set when the memory stopped being true (superseded or deleted). The record stays on disk and remains queryable with `include_superseded: true`.

      • pinnedboolean

        Pinned memories are never touched by any automatic path (consolidation, decay); only an explicit `memory::pin`/`memory::update` changes them.

      • revisioninteger· uint64min 0

        Bumped on every appended revision of this id; replay keeps the highest.

      • sourceany of
        … expand 2 nested
        any of (2)
        variant 1
        • agentstring
        • entry_idstring
        • session_idstring
        variant 2
        valuenull
      • superseded_bystring

        Memory id that replaced this one, when superseded by content.

      • tagsstring[]

        Topical labels for filtering WITHIN a bank ("iii", "workers", "billing") — organization, not ranking. Normalized lowercase, capped like entities. Old records without the field load as untagged.

      • textstringrequired
      • updated_atinteger· uint64requiredmin 0
    • scorenumber· floatrequired

      Recall score; 0.0 for memories added by the ambient floor.

  • messagestring

    The appended `<memory>` message body, verbatim; absent when no memory fits the budget.

  • retrievalstringrequired

    Retrieval mode that ran (`bm25-entity` or `bm25-entity-semantic`).

  • rulesinteger· uintrequiredmin 0

    Rules included, and whether any were cut by `max_rule_chars`.

  • rules_truncatedbooleanrequired
  • system_prompt_sectionstringrequired

    The memory section appended to the system prompt (ambient header + rules), exactly as injected — truncation markers included.

memory::recall

function

Search a bank's memories relevant to a query (BM25 + entities + corroboration + recency; no LLM). The same scorer the pre-generate hook uses — call it to preview an injection.

request
  • bankstring

    Bank to search; the configured default when omitted.

  • include_supersededboolean

    Also rank superseded/tombstoned records (the history view).

  • limitinteger· uintmin 0

    Max memories returned (default: the configured recall_limit).

  • querystringrequired
  • tagstring

    Only rank memories carrying this tag.

response
  • bankstringrequired
  • memoriesobject[]required
    • memoryobjectrequired

      One memory item. Serialized whole as a `memories.jsonl` line; replay is last-wins by `id`, so an update appends a full record with a bumped `revision` and a delete appends a tombstoned record (`invalid_at` set) — history is never destroyed, only superseded.

      • confidenceone ofrequired

        How a memory entered the store.

        … expand 3 nested
        one of (3)
        variant 1
        valuestringenum: extracted
        variant 2
        valuestringenum: inferred
        variant 3
        valuestringenum: stated
      • corroborationinteger· uint32min 0

        Times this memory was independently re-observed. Boosts recall rank.

      • created_atinteger· uint64requiredmin 0

        Milliseconds since epoch.

      • entitiesstring[]

        Entity handles used as an exact-match retrieval signal.

      • idstringrequired

        Content fingerprint (`fp` + FNV-1a of the normalized text), so re-ingesting the same source reinforces instead of duplicating.

      • invalid_atinteger· uint64min 0

        Set when the memory stopped being true (superseded or deleted). The record stays on disk and remains queryable with `include_superseded: true`.

      • pinnedboolean

        Pinned memories are never touched by any automatic path (consolidation, decay); only an explicit `memory::pin`/`memory::update` changes them.

      • revisioninteger· uint64min 0

        Bumped on every appended revision of this id; replay keeps the highest.

      • sourceany of
        … expand 2 nested
        any of (2)
        variant 1
        • agentstring
        • entry_idstring
        • session_idstring
        variant 2
        valuenull
      • superseded_bystring

        Memory id that replaced this one, when superseded by content.

      • tagsstring[]

        Topical labels for filtering WITHIN a bank ("iii", "workers", "billing") — organization, not ranking. Normalized lowercase, capped like entities. Old records without the field load as untagged.

      • textstringrequired
      • updated_atinteger· uint64requiredmin 0
    • scorenumber· floatrequired
  • retrievalstringrequired

    Retrieval mode actually used — degradation is explicit, never silent. Currently always `bm25-entity`; a semantic signal joins when the router grows an embeddings surface.

memory::reload

function

Drop all in-RAM state and reload every bank from disk — the recovery hatch after editing bank files by hand.

request
empty object
response
  • banksinteger· uintrequiredmin 0
  • okbooleanrequired

memory::rule::list

function

List a bank's rules (markdown, injected whole into the system prompt on every turn). Stored as plain files under the bank's rules/ folder; editing them by hand is equivalent.

request
  • bankstring

    Bank whose rules to list; the configured default when omitted.

response
  • bankstringrequired
  • rulesobject[]required
    • contentstringrequired
    • namestringrequired
    • updated_atinteger· uint64requiredmin 0

      Milliseconds since epoch (file mtime).

memory::rule::set

function

Create or replace one rule (atomic write; empty content removes it). Rules are plain markdown files under the bank's rules/ folder.

request
  • bankstring

    Bank to write into; the configured default when omitted. Created on first use.

  • contentstringrequired

    Markdown content. Empty removes the rule.

  • namestringrequired

    Rule name, `[a-z0-9][a-z0-9_-]{0,63}` (it becomes `<name>.md`).

response
  • existsbooleanrequired

    False when the empty content removed the rule.

  • okbooleanrequired

memory::save

function

Save one memory explicitly. Content-fingerprinted: re-saving the same text reinforces the existing memory instead of duplicating it. Use when the user says `remember this`.

request
  • bankstring

    Target bank; the configured default when omitted.

  • entitiesstring[]

    Entity handles (people/projects/tools) used as a retrieval signal.

  • pinnedboolean
  • session_idstring

    Provenance session, when saved on behalf of a conversation.

  • tagsstring[]

    Topical labels for filtering within the bank (organization, not ranking).

  • textstringrequired

    The memory, one self-contained sentence.

response
  • createdbooleanrequired

    False when the text fingerprint matched an existing memory (it was reinforced instead).

  • memoryobjectrequired

    One memory item. Serialized whole as a `memories.jsonl` line; replay is last-wins by `id`, so an update appends a full record with a bumped `revision` and a delete appends a tombstoned record (`invalid_at` set) — history is never destroyed, only superseded.

    • confidenceone ofrequired

      How a memory entered the store.

      one of (3)
      variant 1
      valuestringenum: extracted
      variant 2
      valuestringenum: inferred
      variant 3
      valuestringenum: stated
    • corroborationinteger· uint32min 0

      Times this memory was independently re-observed. Boosts recall rank.

    • created_atinteger· uint64requiredmin 0

      Milliseconds since epoch.

    • entitiesstring[]

      Entity handles used as an exact-match retrieval signal.

    • idstringrequired

      Content fingerprint (`fp` + FNV-1a of the normalized text), so re-ingesting the same source reinforces instead of duplicating.

    • invalid_atinteger· uint64min 0

      Set when the memory stopped being true (superseded or deleted). The record stays on disk and remains queryable with `include_superseded: true`.

    • pinnedboolean

      Pinned memories are never touched by any automatic path (consolidation, decay); only an explicit `memory::pin`/`memory::update` changes them.

    • revisioninteger· uint64min 0

      Bumped on every appended revision of this id; replay keeps the highest.

    • sourceany of
      any of (2)
      variant 1
      • agentstring
      • entry_idstring
      • session_idstring
      variant 2
      valuenull
    • superseded_bystring

      Memory id that replaced this one, when superseded by content.

    • tagsstring[]

      Topical labels for filtering WITHIN a bank ("iii", "workers", "billing") — organization, not ranking. Normalized lowercase, capped like entities. Old records without the field load as untagged.

    • textstringrequired
    • updated_atinteger· uint64requiredmin 0

memory::supersede

function

Retire one memory in favor of another: tombstone with a superseded_by pointer, never a plain delete. The consolidation seam; pinned memories cannot be superseded.

request
  • bankstring
  • idstringrequired

    Memory to retire.

  • superseded_bystringrequired

    Live memory that replaces it.

response
  • memoryobjectrequired

    One memory item. Serialized whole as a `memories.jsonl` line; replay is last-wins by `id`, so an update appends a full record with a bumped `revision` and a delete appends a tombstoned record (`invalid_at` set) — history is never destroyed, only superseded.

    • confidenceone ofrequired

      How a memory entered the store.

      one of (3)
      variant 1
      valuestringenum: extracted
      variant 2
      valuestringenum: inferred
      variant 3
      valuestringenum: stated
    • corroborationinteger· uint32min 0

      Times this memory was independently re-observed. Boosts recall rank.

    • created_atinteger· uint64requiredmin 0

      Milliseconds since epoch.

    • entitiesstring[]

      Entity handles used as an exact-match retrieval signal.

    • idstringrequired

      Content fingerprint (`fp` + FNV-1a of the normalized text), so re-ingesting the same source reinforces instead of duplicating.

    • invalid_atinteger· uint64min 0

      Set when the memory stopped being true (superseded or deleted). The record stays on disk and remains queryable with `include_superseded: true`.

    • pinnedboolean

      Pinned memories are never touched by any automatic path (consolidation, decay); only an explicit `memory::pin`/`memory::update` changes them.

    • revisioninteger· uint64min 0

      Bumped on every appended revision of this id; replay keeps the highest.

    • sourceany of
      any of (2)
      variant 1
      • agentstring
      • entry_idstring
      • session_idstring
      variant 2
      valuenull
    • superseded_bystring

      Memory id that replaced this one, when superseded by content.

    • tagsstring[]

      Topical labels for filtering WITHIN a bank ("iii", "workers", "billing") — organization, not ranking. Normalized lowercase, capped like entities. Old records without the field load as untagged.

    • textstringrequired
    • updated_atinteger· uint64requiredmin 0

memory::tags

function

List the tags across a bank's live memories with usage counts, most used first — the filter source for tag-scoped list/recall.

request
  • bankstring
response
  • bankstringrequired
  • tagsobject[]required
    • countinteger· uintrequiredmin 0
    • tagstringrequired

memory::ui-content

function

Serve the memory worker's injected console UI assets (content function for its console:script / console:style triggers).

request
  • pathstringrequired

    The asset path from the trigger config (e.g. `state/page.js`).

response
  • contentstringrequired

    The asset source, verbatim.

  • content_typestringrequired

    MIME type the console should serve the asset with.

memory::update

function

Revise a memory's text, entities, or pin flag in place (same id, bumped revision; the prior revision stays in the on-disk log).

request
  • bankstring
  • entitiesstring[]
  • idstringrequired
  • pinnedboolean
  • tagsstring[]

    Replace the tag set (empty list clears).

  • textstring
response
  • memoryobjectrequired

    One memory item. Serialized whole as a `memories.jsonl` line; replay is last-wins by `id`, so an update appends a full record with a bumped `revision` and a delete appends a tombstoned record (`invalid_at` set) — history is never destroyed, only superseded.

    • confidenceone ofrequired

      How a memory entered the store.

      one of (3)
      variant 1
      valuestringenum: extracted
      variant 2
      valuestringenum: inferred
      variant 3
      valuestringenum: stated
    • corroborationinteger· uint32min 0

      Times this memory was independently re-observed. Boosts recall rank.

    • created_atinteger· uint64requiredmin 0

      Milliseconds since epoch.

    • entitiesstring[]

      Entity handles used as an exact-match retrieval signal.

    • idstringrequired

      Content fingerprint (`fp` + FNV-1a of the normalized text), so re-ingesting the same source reinforces instead of duplicating.

    • invalid_atinteger· uint64min 0

      Set when the memory stopped being true (superseded or deleted). The record stays on disk and remains queryable with `include_superseded: true`.

    • pinnedboolean

      Pinned memories are never touched by any automatic path (consolidation, decay); only an explicit `memory::pin`/`memory::update` changes them.

    • revisioninteger· uint64min 0

      Bumped on every appended revision of this id; replay keeps the highest.

    • sourceany of
      any of (2)
      variant 1
      • agentstring
      • entry_idstring
      • session_idstring
      variant 2
      valuenull
    • superseded_bystring

      Memory id that replaced this one, when superseded by content.

    • tagsstring[]

      Topical labels for filtering WITHIN a bank ("iii", "workers", "billing") — organization, not ranking. Normalized lowercase, capped like entities. Old records without the field load as untagged.

    • textstringrequired
    • updated_atinteger· uint64requiredmin 0

triggers

2

memory::bank-changed

trigger

A memory bank was created or trashed. Payload: { event_type, bank }.

invocation
  • bankstring

    Only deliver events for this bank.

return
valueunknown

memory::item-changed

trigger

A memory was created, updated, superseded, or deleted in a memory bank. Payload: { event_type, bank, memory }. Bind console/live views here.

invocation
  • bankstring

    Only deliver events for this bank.

return
valueunknown