Proactive

July 20, 2026 ยท View on GitHub

proactive is ReMe's interface for reading proactive memory. It does not reanalyze daily notes or call an LLM. It only reads the current day's interest topics written by auto_dream:

daily/<date>/interests.yaml

A host agent can use it to learn "what is worth proactive attention today," then decide whether to remind the user, ask a follow-up question, recommend a next step, or produce a proactive insight.

interests.yaml is generated by the Topics stage of Auto Dream. proactive only reads and exposes the result.

Configuration

The default configuration is in reme/config/default.yaml:

proactive:
  backend: base
  description: "Proactive: read daily/<date>/interests.yaml and expose the latest user-interest topics."
  parameters:
    date:
      type: string
      default: ""
    include_content:
      type: boolean
      default: true
  steps:
    - backend: proactive_step

Parameters:

ParameterPurpose
dateDate to read in YYYY-MM-DD format. When empty, use today in the application's timezone.
include_contentWhether to return the raw YAML in the answer and metadata. Defaults to true.

Input Contract

A typical file looks like this:

date: 2026-06-20
topic_count: 3
diversity_days: 7
topics:
  - title: Quality regression in the memory retrieval pipeline
    reason: The user has recently made repeated changes to search, node_search, and dream integration.
    evidence: daily/2026-06-20/session.md
    keywords:
      - memory search
      - auto dream
    paths:
      - daily/2026-06-20/session.md

Only the topics list is parsed into structured results. Every topic requires at least title and reason; evidence, keywords, and paths are supporting fields.

Return Value

When the file is read successfully, proactive_step returns summary and topics in the primary answer. When include_content=true, the answer also contains content. The same result fields remain available in standard response metadata:

FieldDescription
dateThe date actually read.
pathdaily/<date>/interests.yaml.
topicsParsed topic list.
contentRaw YAML; returned only when include_content=true.
skippedtrue when the file does not exist.
errorRead or parse error.
summaryShort summary.

When the file exists and parses successfully, the answer is structured data. For example:

{
  "summary": "Read 1 proactive topic(s) from daily/2026-06-20/interests.yaml",
  "topics": [
    {
      "title": "Quality regression in the memory retrieval pipeline",
      "reason": "The user has recently made repeated changes to search, node_search, and dream integration.",
      "evidence": "daily/2026-06-20/session.md",
      "keywords": ["memory search", "auto dream"],
      "paths": ["daily/2026-06-20/session.md"]
    }
  ],
  "content": "date: 2026-06-20\n..."
}

With include_content=false, the content field is omitted from the answer. Missing-file and read-error answers remain explicit Skipped: ... and Error: ... messages, respectively.

A missing file is not an error. The call succeeds with a skipped result:

Skipped: interests file not found at daily/2026-06-20/interests.yaml

This lets a host agent treat "there is no dream result for today yet" as a normal empty state.

Running Proactive

CLI:

reme proactive date=2026-06-20

Omit the raw YAML content:

reme proactive date=2026-06-20 include_content=false

Relationship to auto_dream

proactive is the downstream read step for auto_dream:

daily notes
  -> auto_dream
  -> daily/<date>/interests.yaml
  -> proactive
  -> host agent

The responsibilities are divided as follows. For the complete Extract, Integrate, Topics, and Finish flow, see Auto Dream:

ModuleResponsibility
dream_extract_stepExtract topic candidates from changed daily inputs.
dream_topics_stepDeduplicate, select, and write interests.yaml.
proactive_stepRead interests.yaml and expose it to the host agent.

proactive does not modify files, update a catalog, or decide whether the user should be interrupted. It only provides the day's topic material. The caller's product policy determines whether, when, and in what tone to push it to the user.

Failure Modes

ScenarioBehavior
interests.yaml does not existsuccess=true, skipped=true, topics=[].
YAML cannot be read or parsedsuccess=false; the answer contains an error summary.
YAML exists but has no valid topicssuccess=true, topics=[].

Callers should therefore check success first, then skipped, and finally whether topics is empty.