{% extends "base.html" %} {% import "_empty.html" as empty %} {% block title %}Memory{% endblock %} {% block topbar_main %}

Memory

What later sessions need to know {% endblock %} {% block topbar_actions %} {# Search, filters and sort in one form, so each keeps the others when it changes. The selects submit as soon as they change; the button is for the search box and for a browser without the script. #}
{% if tag %}{% endif %}
{% endblock %} {% block content %}
{% if said %}
{{ said }}
{% endif %} {# Remembering from the page, closed until wanted: most visits are to read. A project memory belongs to the repository flanner web runs in, so the choice says which one that is, or why there is none. #}

Remember something

A decision, a constraint or a lesson a later session should not have to be told again.

Checked against this project's memory policy, and refused if it looks like a credential.

{% if nav_memory_pending %}
{{ nav_memory_pending }} suggestion{{ '' if nav_memory_pending == 1 else 's' }} waiting on you. Review them; nothing is recalled until you do.
{% endif %} {% if summary.search == 'scan' %}
This Python's SQLite has no full-text index, so search is a slower scan with no ranking. Everything still works.
{% endif %} {% if tag %}
Showing memories tagged {{ tag }} Show every tag
{% endif %} {% if rows %}
{% if query %}Matches for “{{ query }}”{% else %}Everything remembered{% endif %} {{ rows | length }}
{% set cols = 'cols-memory-reasoned' if show_reason else 'cols-memory' %}
MemoryCategoryScopeBy {% if show_reason %}Why it matched{% endif %}
{% for row in rows %} {# The title is the first sentence of the body, so the summary under it used to repeat it. Only what the title does not already say is shown. #} {% set head = row.title.rstrip('…') %} {% set rest = (row.summary[(head | length):] | trim) if row.summary.startswith(head) else row.summary %}
{{ row.title }}{% if row.status and row.status != 'active' %} {{ row.status }}{% endif %} {% if rest %}{{ rest }}{% endif %} {% if row.tags %}{% for t in row.tags %}{{ t }}{% endfor %}{% endif %} {{ row.category }} {{ row.scope }} {{ row.created_by }} {% if show_reason %}{{ row.match_reason }}{% endif %}
{% endfor %} {% if not query %}{% include "_pager.html" %}{% endif %}
{% else %} {% if query %} {% call empty.state('search', 'Nothing remembered about that') %}

No memory in this project or your personal memory matches “{{ query }}”{% if tag %} with the tag {{ tag }}{% endif %}.

{% endcall %} {% elif tag %} {% call empty.state('memory', 'Nothing tagged ' ~ tag) %}

No memory with this status, category and scope carries that tag.

{% endcall %} {% else %} {% call empty.state('memory', 'Nothing remembered yet') %}

Memory holds what a later session would otherwise have to be told again: a decision and why the alternatives lost, a constraint that is not obvious from the code, a lesson from something that failed.

Ask your agent to remember something, or run flanner mem remember "…" --category decision.

{% endcall %} {% endif %} {% endif %}
Memory files live on this machine and are never uploaded. Personal memory stays in your flanner home; project memory sits in the repository and is kept out of git.
{% endblock %}