{% extends "base.html" %} {% block content %}

Memory

Read-only view of the Redis-derived memory index (attune:memory:*) — curated nodes, lessons, and file pointers hydrated from the tracked corpus at session start. The index is derived: edit the corpus, never these keys.

{% if attention is not none and attention.has_exceptions %}
{% if attention.stale %}
Hydration stale
{% if attention.age_hours is not none %} {{ attention.age_hours }}h old {% else %}never ran{% endif %}
re-run your SessionStart hydration hook, or: python3 ~/.attune/memory/hydrate.py
{% endif %} {% if attention.changed_since %}
Corpus changed since hydration {{ attention.changed_since | length }} file(s)
{% endif %} {% if attention.pending_threads %}
Deliberation threads pending promotion
{{ attention.pending_threads }}
rule them in-session: /roundtable promote <thread>
{% endif %}
{% endif %} {% if overview is none %}
Memory index unreachable
Local Redis is not answering, so the derived index can't be read. Sessions degrade gracefully without it — start Redis and reload to browse the corpus here.
{% elif overview.total == 0 %}
No memory nodes yet
Redis is up but holds no attune:memory:* keys. The index hydrates at session start from the tracked corpus (curated memories, lessons, file pointers).
{% else %}
{% for fam, label in family_labels.items() %} {% if overview.family_counts.get(fam) %}
{{ label }}
{{ '{:,}'.format(overview.family_counts[fam]) }}
{% endif %} {% endfor %}
All keys
{{ '{:,}'.format(overview.total) }}
{% set fam_q = 'family=' ~ overview.family ~ '&' if overview.family else '' %} {% if overview.kind_counts | length > 1 %} {# Second-level filter: KIND within the current family selection. Row Kind chips link here too — every value shown is filterable. #}
All kinds ({{ '{:,}'.format(overview.kind_counts.values() | sum) }}) {% for k, n in overview.kind_counts.items() | sort %} {{ k }} ({{ '{:,}'.format(n) }}) {% endfor %}
{% endif %} {% for row in overview.rows %} {% endfor %}
Node Kind Description Size
{{ row.name }} {{ row.kind }} {{ row.description or '—' }} {{ row.size or '—' }}
{% if overview.pages > 1 %} {% endif %} {% endif %} {% endblock %}