Skip to main content

catalyst-brains

A memory for AI agents that tells you, with every answer, how sure it is.

catalyst-brains keeps what an agent learns in fixed-size vectors. A memory of 10,000 numbers holds a few hundred associations, recalls one in under a millisecond on a laptop, and returns with each answer the score of the best value and its lead over the next one. When the lead shrinks, the memory is getting full. You can see that before it costs you, because the package predicts its own accuracy for the load you have put on it, and the prediction matches measurement (table below).

pip install catalyst-brains

Python 3.9 or later. The core is compiled Rust; numpy is the only required dependency.

Thirty seconds

import catalyst_brains as cb

memory = cb.Memory(dim=10_000)
memory.train([("user:ana", "plan:pro"), ("user:ben", "plan:free"), ("user:cho", "plan:team")])

value, score, margin = memory.recall("user:ana")      # ("plan:pro", 0.58, 0.57)
memory.predicted_accuracy()                           # 1.0 at this load

Check your install from the command line:

python -m catalyst_brains
{"ok": true, "version": "0.0.2", "checks": {"bind_exact": true, "memory_recall": true}}

What is in the package

Part What it does
Memory Key-value pairs in one fixed-size state. recall returns value, score and margin; predicted_accuracy() and health() report how full it is. Training is one pass over your pairs, with no gradients.
HoloKV A key-value cache with positions: recall a value by its key, or the value stored at a position. Early entries score the same as late ones.
CausalMemory Records that one event led to another, with an optional time. Answers the effect of a cause and the causes of an effect, and keeps the direction: asking for the effect of an effect does not return its cause.
Accumulator A running sum of angle vectors (the kind random_phase and encode_scalar return). Adding partial sums from separate workers gives exactly the state of one accumulator, byte for byte.
BlockCode Binary vectors with XOR binding. A chain of 10,000 binds is undone exactly by the same chain.
Resonator Recovers the parts of a combined vector when each part comes from a known list.
encode_scalar Turns a number into an angle vector, so nearby numbers are similar and distant ones are not.
rain A portable file and HTTP-header format for all of the above, checked with SHA-256 on load. Optional signed evidence records: HMAC-SHA256, or Ed25519 that anyone can verify with your public key.
Ledger and catalyst-brains memory An append-only, hash-chained log for an agent's notes, with recall within a character budget, a hand-off summary, a doctor that finds edited rows, and a repair that backs up first and deletes nothing.
MemoryUpdatePolicy Decides whether a new memory is accepted, consolidated first, or rejected, from novelty, confidence, saturation and evidence.
ToolRegistry Keeps large tool schemas out of a model's context: a short paged list, and a search that expands a schema only when asked. It describes tools; it never runs them.
vectors The primitives: random_signs, random_phase, bind, majority, permute, similarity.
optimize.tsp Travelling-salesman tours with a Held-Karp lower bound, the gap between the two, and optimal_proven only when the bound meets the tour. An exact mode runs branch and bound up to 1,000 cities. Reads TSPLIB files.
qubo Max-Cut and binary quadratic minimisation within a time budget. Every Max-Cut answer carries a certified upper bound.

Measured

Every number below was produced by benchmarks/run.py against the built wheel on 25 October 2026, on an Apple M1 Pro (macOS, arm64) with Python 3.11 and numpy 2.4. Run it yourself; it uses only the public API.

Memory, 10,000 numbers, one distinct value per key. Predicted is computed from the load before recall; measured is the share of keys recalled correctly.

Pairs stored Predicted accuracy Measured accuracy Recall time
100 1.000 1.000 0.09 ms
200 1.000 1.000 0.17 ms
400 0.971 0.973 0.31 ms
800 0.634 0.638 0.62 ms
1,600 0.204 0.195 1.21 ms

Storing costs about 22 microseconds a pair. The state is 40 KB whatever the load. Recall time grows with the number of distinct values the memory can answer with, not with the number of pairs.

HoloKV, 10,000 numbers. All 400 entries were recalled correctly both by key and by position. The first 50 stored scored 1.02 on average and the last 50 scored 0.98. At 1,600 entries accuracy falls to 0.54 by key, and a query takes 23 ms.

CausalMemory. The effect of each cause was right in 200 of 200 links, and in 68% of 800.

Resonator, three lists, 4,096 numbers. Exact for 40 of 40 trials at 1,000 combinations, 95% at 8,000, 82.5% at 64,000.

Accumulator. Splitting 64 items across 2 to 32 workers and adding the parts gave the serial state, byte for byte, every time.

rain. A memory holding 500 pairs is a 40 KB state and an 11 KB .rain file. Writing it takes 3 ms; reading and restoring it takes 0.2 ms.

Ledger. With 1,000 rows, recall for a prompt takes 35 ms and a full chain check takes 5 ms.

Optimisation, measured

The TSP numbers come from benchmarks/tsp.py on 26 October 2026 (UTC), on the same M1 Pro, which other jobs were sharing (load average 5.5 at the start). The instances are the 19 two-dimensional Euclidean TSPLIB instances of 51 to 1,002 cities, scored against their published optima. Distances use TSPLIB rounding, so lengths are comparable.

Budget Published optimum reached Proven optimal by the solver Bound below the optimum
1 s 16 of 19 6 of 19 0 to 6.4% (pr1002 widest)
10 s 19 of 19 7 of 19 0 to 2.8% (pr76 widest)

With exact=True and 120 s each, branch and bound proved the optimum on 11 of the 13 instances of up to 200 cities: eil51 in 0.08 s, kroA100 in 26 s, ch150 in 37 s, ch130 in 71 s. pr76 and kroA200 were not proven in 120 s; the kroA200 tour was already optimal, and only the proof was missing. Over 5 seeds at 3 s, every instance from 200 to 442 cities reached its optimum on every seed; rat783 averaged 0.02% above it and pr1002 0.13%.

A first tour without a bound (bound=False, time_limit=0), on random cities, same run:

Cities Time (median of 4 warm calls) Length above the Beardwood-Halton-Hammersley estimate of the optimum
1,000 7.8 ms 7.6%
10,000 8.3 ms 5.6%
100,000 206 ms 5.7%

Give the search time if length matters.

Max-Cut (benchmarks/maxcut.py, 26 October 2026 UTC, load average 8.1): Gset G1 to G20, 800 vertices each, 10 s per instance, one thread, seed 1, against best-known cuts from arXiv:2606.03917 (Table S6). The solver came within 1% of the best-known cut on 20 of 20 and equalled it on 13, with a median of 0.61 s to its best cut. A simulated-annealing reference in the same package, given the same 10 s, also came within 1% on 20 and equalled 15; head to head the solver was ahead on 3, level on 13 and behind on 4. The best-known cuts sit 3.8% to 20% below the certified upper bound, so the bound proved none of them optimal.

Know the limits before you build on it

  • A memory fills up. Past a few hundred pairs per 10,000 numbers, accuracy falls, as the first table shows. Use predicted_accuracy() and the margin to decide when to start a new memory or raise dim.
  • Recall slows as the set of possible values grows, because each candidate value is checked once: 2.4 ms at 3,200 values for Memory, 23 ms at 1,600 for HoloKV.
  • The Resonator settles on wrong answers once the combinations run into the tens of thousands at 4,096 numbers. Its confidence value shows when that has happened.
  • HMAC evidence can be forged by anyone who holds the secret. For evidence someone else must trust, use the Ed25519 records (pip install "catalyst-brains[ed25519]").
  • The TSP solver handles one symmetric tour. No time windows, capacities or multiple vehicles; asymmetric matrices are refused. Proofs can take minutes past 100 cities and may not finish, and with bound=True the gap is only as good as the bound, which is loose at 1,000 cities and a one-second budget.
  • Max-Cut and QUBO answers are heuristic. The Max-Cut bound is certified but loose (see above), so it rarely proves an answer optimal. QUBO results carry no bound at all.
  • Nothing here runs on a GPU, and nothing here sends data anywhere unless you call catalyst_brains.client.
  • Wheels: macOS (Apple silicon and Intel) and Linux (x86_64 and aarch64, glibc 2.17 or later), each tested from its own wheel before release. Windows and Alpine (musl) are not built yet, and there is no source distribution.

Coming from catalyst-brain 1.x

The 0.0.x line is a new implementation, not an upgrade, and it installs alongside 1.x without conflict.

1.x 0.0.2
import catalyst_hdc from catalyst_brains import vectors
rand_bipolar, resonance (0 to 1) random_signs, similarity (-1 to 1); similarity01 keeps the old scale
hdc_bind, hdc_bundle, hdc_permute bind, majority, permute
PyHoloCPUScheduler.recall (a lookup table) Memory.recall, which returns value, score and margin
PyHKVC (a lookup table) HoloKV
PyCausalMemory CausalMemory
RainPayload, rain_dumps, rain_loads rain.RainPayload, rain.dumps, rain.loads (format version 3)
MemoryUpdatePolicy, CatalystTokenKernel MemoryUpdatePolicy, ToolRegistry

Not carried over:

  • The graphics encoders and the self-audit classes. The audit passed any input.
  • The Hugging Face cache adapters. We do not have model-level evidence for them yet.
  • Local Python execution in the tool kernel. A memory library should not run code.
  • Telemetry.

Command line

catalyst-brains memory --ledger ~/.catalyst-brains/brain.jsonl --agent-id my-agent --json pulse --domain ops --book "Never deploy from a dirty tree" "Deployed 0.4.2"
catalyst-brains memory --ledger ~/.catalyst-brains/brain.jsonl --json inject --limit 3 --max-chars 1200 "how do we deploy"
catalyst-brains memory --ledger ~/.catalyst-brains/brain.jsonl --json doctor
catalyst-brains memory --ledger ~/.catalyst-brains/brain.jsonl --json repair --backup brain.bak
catalyst-brains memory --ledger ~/.catalyst-brains/brain.jsonl --json compact --recent 5 --max-chars 1200

Licence

Free for research, evaluation, benchmarks and prototypes. Production systems, hosted services, redistribution and resale need written permission from Strategic Innovations AI: sales@strategic-innovations.ai. Support: support@strategic-innovations.ai.

Metadata

Release files for catalyst-brains 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for catalyst-brains 0.0.2
File Interpreter ABI Platform Actions
catalyst_brains-0.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details for catalyst_brains-0.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
catalyst_brains-0.0.2-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details for catalyst_brains-0.0.2-cp39-abi3-macosx_11_0_arm64.whl
catalyst_brains-0.0.2-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details for catalyst_brains-0.0.2-cp39-abi3-macosx_10_12_x86_64.whl

Total release size: 1.4 MB

Release files / catalyst_brains-0.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL catalyst_brains-0.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 486.1 kB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
6aea7f5b54b6e4206c9c28f970279ef7fb91c83282d7239c6adff3443fb4f172
BLAKE2b-256 checksum
How to use checksums
e6b39a104ac7e44b3a1b68d90863b62a0fb2af70f9c8c461e585c2be5b643f52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / catalyst_brains-0.0.2-cp39-abi3-macosx_11_0_arm64.whl

Download URL catalyst_brains-0.0.2-cp39-abi3-macosx_11_0_arm64.whl
Size 423.1 kB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
fef1b81e19fc5d8c5b2bc1df11ecaf0a44850db0e623523dc99460fd4df4fce9
BLAKE2b-256 checksum
How to use checksums
4e071d492ff07c1b511dc023fca3c267ea0f38eafb519a76e2537fee85ea036e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / catalyst_brains-0.0.2-cp39-abi3-macosx_10_12_x86_64.whl

Download URL catalyst_brains-0.0.2-cp39-abi3-macosx_10_12_x86_64.whl
Size 442.8 kB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
43c9d2d566d537e67d305fe1ad86db4a67e04b5034cac4a9f717cfa19eaadb67
BLAKE2b-256 checksum
How to use checksums
b676ce8b9cadd8386582bd8d3f71aaef9e5dd9b63519108ed028c640be0f4b4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Security for catalyst-brains 0.0.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.2 This release

3 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page