Active-inference metacognitive controller kit for agent runtimes, with Hermes Agent adapter support.
Project description
Dionysus Metacognition
Dionysus Metacognition is an active-inference metacognitive controller kit for agent runtimes.
It provides a public Python package, dionysus-metacognition, with import root
dionysus_metacog. The package is designed to expose metacognitive control
primitives, model provenance, attractor-aware state tracking, and adapter seams
for systems such as Hermes Agent, Autonoesis, Elume, Sakshi, and
linoss-dynamics.
Install
pip install dionysus-metacognition
Import
import dionysus_metacog
from dionysus_metacog.core import MetaCogSignal, PromotionLabel
For local code that wants a shorter alias:
import dionysus_metacog as metacog
Scope
Dionysus Metacognition is not a generic utils package and is not the ontology
owner for phenomenological self-modeling. It is the applied metacognitive
controller layer: the place where active-inference control signals, POMDP-style
model records, Markov blanket boundaries, attractor-aware runtime observations,
and adapter seams can be assembled without polluting host projects.
Autonoesis should remain the self-model and computational-phenomenology kernel. Elume should remain the deterministic replay and competition substrate. Sakshi should remain the witness and verification layer. linoss-dynamics should remain the oscillator dynamics toolkit. Hermes Agent should remain a first-class runtime adapter target, not a hard dependency.
Package Layout
dionysus_metacog/
framework/ # canonical layer stack and dependency contract
core/ # controller signals, traces, promotion labels
models/ # active-inference, POMDP, Markov blanket records
attractors/ # attractor-state interfaces
adapters/ # optional integration seams
provenance/ # source attribution and model lineage
Framework Layers
The initial framework stack is intentionally explicit:
provenanceowns source attribution and model lineage.generative_modelowns active-inference and POMDP model records.boundaryowns Markov blanket boundary records.dynamicsowns attractor-basin and dynamical-state observations.controlowns metacognitive control signals and traces.adaptersowns optional host-runtime integration seams.
The default layer contract is available in code:
from dionysus_metacog.framework import FrameworkSpec
framework = FrameworkSpec.default()
print(framework.dependency_graph)
Provenance Ledger
ProvenanceLedger is the source registry for framework records. It stores
SourceReference objects by source_id, accepts exact duplicate references,
and rejects conflicting duplicates so source lineage fails loudly instead of
silently drifting.
from dionysus_metacog.attractors import default_attractor_sources
from dionysus_metacog.provenance import ProvenanceLedger
ledger = ProvenanceLedger.from_sources(default_attractor_sources().values())
metadata = ledger.metadata_for(("friston-2014-cognitive-dynamics",))
The emitted metadata is string-only so adapters can pass it through systems such as Hermes Agent without taking a hard dependency on this package's Python objects.
Payload Contract
MetaCogPayload is the generic handoff contract for host runtimes. It wraps a
MetaCogSignal with JSON-safe provenance, boundary, and context sections
without naming or importing any specific host adapter.
payload = assessment.to_payload(ledger=ledger)
as_dict = payload.as_dict()
The payload dictionary is safe to pass through queues, logs, HTTP APIs, CLIs, or runtime adapters that need a stable metacognitive control envelope.
Attractor Sources
Attractor-basin records must carry source backing. The initial source ledger connects the package to:
- Friston, Sengupta, and Auletta's "Cognitive Dynamics: From Attractors to
Active Inference" (
https://doi.org/10.1109/JPROC.2014.2306251). - Context-Engineering's attractor dynamics and attractor co-emergence protocol shell lineage.
- Spisak and Friston's PNI Lab article, "Self-orthogonalizing attractor neural
networks emerging from the free energy principle"
(
https://pni-lab.github.io/fep-attractor-network/).
Attractor source records use the shared SourceReference provenance contract,
so source attribution stays consistent across attractor, model, and future
adapter layers.
from dionysus_metacog.attractors import AttractorBasin, default_attractor_sources
from dionysus_metacog.models import PomdpStateRecord
sources = default_attractor_sources()
basin = AttractorBasin(
basin_id="focused_attention",
attractor_label="focused attention",
depth=0.8,
width=0.6,
stability=0.9,
sources=(sources["friston-2014-cognitive-dynamics"],),
)
model = PomdpStateRecord(
hidden_state="focused",
observation="task_stable",
policy="continue",
expected_free_energy=0.1,
precision=0.9,
)
Use AttractorAssessment when an attractor observation should become a
portable metacognitive control signal:
from dionysus_metacog.attractors import AttractorAssessment
assessment = AttractorAssessment.from_basin(basin=basin, model=model)
control_signal = assessment.to_signal()
The assessment computes a deterministic, precision-weighted free-energy proxy.
Its control policies are hold, stabilize, explore, attenuate, and
escalate. Signal metadata includes the selected policy, source IDs, the
free-energy proxy, and any available expected-free-energy or precision values.
When available, a MarkovBlanketRecord can be passed into
AttractorAssessment.from_basin(...) so the emitted control signal carries the
internal, external, sensory, and active-state boundary context alongside the
POMDP observation.
Attractor Lifecycle
AttractorObservation and AttractorTransition describe how source-backed
basin states change over time. The transition classifier is deterministic and
intentionally small: it labels observations as entered, held,
destabilized, escaped, or merged while preserving source IDs across the
lifecycle.
from dionysus_metacog.attractors import (
AttractorObservation,
AttractorTransition,
)
prior = AttractorObservation(state=basin.as_state(), source_ids=basin.source_ids)
current = AttractorObservation(
state=basin.as_state(),
source_ids=basin.source_ids,
)
transition = AttractorTransition.from_observations(
prior=prior,
current=current,
)
Elume Adapter
The Elume adapter is optional and structural. It does not import Elume at module import time; it accepts Elume-shaped objects or compatible test doubles and converts them into package-native records.
from dionysus_metacog.adapters.elume import thoughtseed_winner_to_assessment
assessment = thoughtseed_winner_to_assessment(
seed,
efe_result,
source_ids=("elume-thought-competition",),
)
payload = assessment.to_payload()
This keeps Elume as a deterministic cognition substrate while
dionysus-metacognition remains the portable control and provenance layer.
Sakshi Adapter
The Sakshi adapter is also optional and structural. It converts emitted metacognitive payloads into Sakshi-compatible dictionaries for witness events, write-guard checks, control actions, and dominant ThoughtSeed snapshots.
from dionysus_metacog.adapters.sakshi import (
meta_payload_to_control_action,
meta_payload_to_write_guard_payload,
)
control_action = meta_payload_to_control_action(payload)
guard_payload = meta_payload_to_write_guard_payload(payload)
This lets Sakshi validate or witness a metacognitive control signal without making Sakshi a hard dependency of this package.
linoss-dynamics Adapter
The linoss-dynamics adapter is optional and structural. It converts numerical trajectory, stability, and filtering outputs into package-native attractor and POMDP records without importing linoss-dynamics at module import time.
from dionysus_metacog.adapters.linoss import (
linoss_filter_to_pomdp_record,
linoss_metrics_to_attractor_state,
)
state = linoss_metrics_to_attractor_state(metrics, basin_id="trajectory-basin")
model = linoss_filter_to_pomdp_record(
filter_result,
hidden_state="latent_basin_state",
observation="trajectory_observation",
policy="stabilize",
)
This keeps linoss-dynamics as the oscillator and trajectory substrate while
dionysus-metacognition stays focused on basin movement and control payloads.
Autonoesis Adapter
The Autonoesis adapter is optional and structural. It treats Autonoesis as the self-model and phenomenology owner, then translates self-model snapshots, meta-awareness states, and metacognitive feelings into payload context or signals.
from dionysus_metacog.adapters.autonoesis import (
enrich_payload_with_self_model,
meta_awareness_to_signal,
)
signal = meta_awareness_to_signal(meta_awareness)
payload = enrich_payload_with_self_model(
payload,
self_model=self_model,
meta_awareness=meta_awareness,
)
This lets host runtimes carry Autonoesis context alongside metacognitive control payloads without moving self-model ontology into this package.
Adapter Pipeline
See docs/adapter-pipeline.md for the full optional-adapter flow across Elume,
linoss-dynamics, Autonoesis, and Sakshi. The short rule is: adjacent packages
own execution and ontology; Dionysus Metacognition owns portable records,
control assessment, provenance, and payload translation.
Status
This is the initial public package skeleton. The API is intentionally small and typed so that the package name can be claimed cleanly before deeper model extraction lands.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dionysus_metacognition-0.3.0.tar.gz.
File metadata
- Download URL: dionysus_metacognition-0.3.0.tar.gz
- Upload date:
- Size: 39.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a53e41f3b6fa5901f1e9c8ecc783c4ce10e30325a6d6dac8ba295458a935198
|
|
| MD5 |
9028a5122eb1ec01043acd5c264e624e
|
|
| BLAKE2b-256 |
6c57270d6f082770ae08157b0ab35b85cf8cb9923e4fd2de99856f31ceff11fe
|
Provenance
The following attestation bundles were made for dionysus_metacognition-0.3.0.tar.gz:
Publisher:
publish.yml on bionicbutterfly13/dionysus-metacog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dionysus_metacognition-0.3.0.tar.gz -
Subject digest:
0a53e41f3b6fa5901f1e9c8ecc783c4ce10e30325a6d6dac8ba295458a935198 - Sigstore transparency entry: 1549256553
- Sigstore integration time:
-
Permalink:
bionicbutterfly13/dionysus-metacog@3e97b542aee8825481394b7e89dfb350ce8d3b51 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/bionicbutterfly13
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3e97b542aee8825481394b7e89dfb350ce8d3b51 -
Trigger Event:
push
-
Statement type:
File details
Details for the file dionysus_metacognition-0.3.0-py3-none-any.whl.
File metadata
- Download URL: dionysus_metacognition-0.3.0-py3-none-any.whl
- Upload date:
- Size: 22.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99d6db4511d2400c8bbf011347d3ffa393bfce030a64167fddbbef7127a62548
|
|
| MD5 |
d77f1482756b6389d87791d46e81ba1a
|
|
| BLAKE2b-256 |
35d560dba19e1346182930e2d589ff3e1063fa2085fe36bdf9bcc74c7ee61483
|
Provenance
The following attestation bundles were made for dionysus_metacognition-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on bionicbutterfly13/dionysus-metacog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dionysus_metacognition-0.3.0-py3-none-any.whl -
Subject digest:
99d6db4511d2400c8bbf011347d3ffa393bfce030a64167fddbbef7127a62548 - Sigstore transparency entry: 1549256582
- Sigstore integration time:
-
Permalink:
bionicbutterfly13/dionysus-metacog@3e97b542aee8825481394b7e89dfb350ce8d3b51 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/bionicbutterfly13
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3e97b542aee8825481394b7e89dfb350ce8d3b51 -
Trigger Event:
push
-
Statement type: