Skip to content

blacklist operations

The exact fields each blacklist.* operation takes and returns.

Every op is POST /v1/<op> over HTTP and the MCP tool loom_<op>. The identity fields (org, namespace, agent, user_id, session_id) are filled from the token and the MCP session when a transport can; for an HTTP call with no token on a single-user server, the install's org on every op but code.* and tracker.* (which keep their plane's), and on some ops its namespace and agent; see identities and namespaces. The operations index explains role, kind and the MCP all listing. Unknown input fields are served and named in ignored_args.

blacklist.add

Refuse future memory writes whose value matches a pattern.

POST /v1/blacklist.add · MCP loom_blacklist_add · role writer · idempotent · audited

Input field Type Default Meaning
org str required The tenant (first element of the identity tuple).
namespace str required The namespace the op reads or writes.
pattern str required The text to refuse, matched case-sensitively against a stored value: as a substring, or as a regex of at most 256 characters.
pattern_type Literal['substring', 'regex'] 'substring' substring (plain text) or regex (RE2, on writes and in the sweep; bounded at add).
scope Literal['namespace', 'org', 'global'] 'namespace' Reach: namespace (this one), org (every namespace; needs org admin) or global (every tenant; needs platform admin).
reason str '' Why the pattern exists; stored and listed.
created_by str '' Author recorded only when the call has no authenticated principal to stamp.
sweep bool False Also tombstone the live rows the pattern already matches: inside this org, and inside the namespace for a namespace-scoped pattern.
Output field Type Meaning
pattern_id str The new pattern's id, for blacklist.sweep and blacklist.remove.
created_at datetime When the pattern was stored (UTC).
swept int Rows the sweep tombstoned; 0 without sweep.
swept_truncated bool True when more rows matched than one sweep takes; call blacklist.sweep.
sweep_error str "" when the sweep finished, else why not (the pattern is stored either way): <code>: <message> (rerun with blacklist.sweep), RE2's reason when a regex cannot run (no query ran), or the kind of error the match query failed with.

blacklist.list

List patterns that suppress memory storage.

POST /v1/blacklist.list · MCP loom_blacklist_list · role viewer · read · not listed under the MCP all toolset

Input field Type Default Meaning
org str required The tenant (first element of the identity tuple).
namespace str required The namespace the op reads or writes.
scope Literal['namespace', 'org', 'global'] \| None None scope=None returns every pattern that applies to this (org, namespace), which includes higher-scoped (org-wide, global) patterns too — the effective rule set, not just the ones literally pinned to this scope.
limit int 100 At most this many patterns, 1-1000, newest first.
Output field Type Meaning
rows list[_BlacklistRow] The live patterns that match the scope filter, newest first.

blacklist.remove

Remove a previously-added blacklist pattern.

POST /v1/blacklist.remove · MCP loom_blacklist_remove · role admin · idempotent · audited · not listed under the MCP all toolset

Input field Type Default Meaning
org str required The tenant (first element of the identity tuple).
pattern_id str required The pattern to tombstone; a namespace pattern outside the caller's reach answers removed=false.
removed_by str '' Recorded on the blacklist cache's version marker only, not on the pattern row.
reason str '' Accepted but not stored.
Output field Type Meaning
removed bool False when no live pattern with that id is visible to the caller.
removed_at datetime \| None When the pattern was tombstoned (UTC); null when nothing was removed.

blacklist.sweep

Tombstone the live rows an existing pattern matches.

POST /v1/blacklist.sweep · MCP loom_blacklist_sweep · role writer · idempotent · audited · not listed under the MCP all toolset

Input field Type Default Meaning
org str required The tenant (first element of the identity tuple).
namespace str required The namespace the op reads or writes.
pattern_id str required The live pattern to sweep with; an unknown id or one outside the caller's reach answers 404.
Output field Type Meaning
pattern_id str The pattern swept with, echoed.
matched int Live rows the pattern matched in this call: at most 5,000 in ClickHouse, plus, under the Postgres authority, the parked heads this call tombstoned.
tombstoned int Rows this call tombstoned.
truncated bool True when more rows matched than one call takes; call again.
error str "" when the sweep finished, else <code>: <message> once rows may have landed (call again), RE2's reason when a regex cannot run (no query ran), or the kind of error the match query failed with; a failure before that is the call's.