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

Profile

The standing taste file the curator reads before every run, alongside stored interests and what the editor model has learned from your verdicts.

profile.md

{{ path }}{% if !exists %} — missing; saving creates it{% else %} · {{ bytes }} bytes{% endif %} · limit {{ max_bytes }} bytes. Any ## Interests section is ignored; everything else goes into the system prompt verbatim.

The next run rebuilds the system prompt from the saved file.

What the loader parses

A live read of the text on the left, exactly as curate::profile splits it.

Passthrough sections

{% if preview_body.trim().is_empty() %}

Nothing passes through — the file is empty or only has an Interests section.

{% else %}
{{ preview_body }}
{% endif %}

History

{% if versions.is_empty() %}

No saved versions yet. The first save records the current file as version 1.

{% else %}

Each row is the text that was replaced by a save (or a restore). Restore writes it back and records what is on disk now as a new version.

{% for version in versions %}{% endfor %}
VersionReplaced atBySizePreview
#{{ version.id }} {{ version.saved_at }} {{ version.saved_by }} {{ version.bytes }} bytes
{{ version.preview }}
{% endif %}

Standing interests

{{ interest_count }} standing interests in {{ category_count }} categories — manage them on the Interests page.

{% if !categories.is_empty() %}
{% for category in categories %}
{{ category.name }} ({{ category.count }})
{{ category.members }}
{% endfor %}
{% endif %}

Learned adjustments

Rebuilt weekly from ratings by the editor model (prompt version {{ prompt_version }}, built {{ prompt_built_at }}, {{ learned_age }}). {% if rebuild_due %}A rebuild is due — the next run performs it, or start it now.{% else %}The next scheduled rebuild is at least {{ rebuild_interval_days }} days after the last one; the next run performs it when due.{% endif %}

{% if learned.trim().is_empty() %}

No learned adjustments stored yet.

{% else %}
{{ learned }}
{% endif %}
{% if !jobs_enabled %} Jobs are disabled on this server (server.jobs_enabled = false); run daily-epub profile rebuild instead.{% else %} Starts the profile-rebuild job through systemd.{% endif %}

System prompt

Stored after the last run: version {{ prompt_version }}, {{ prompt_chars }} characters, {{ prompt_verdicts }} verdict lines. Every LLM call of a run receives exactly this text.

{% if prompt.is_empty() %}

No prompt has been built yet.

{% else %}
Show the system prompt
{{ prompt }}
{% endif %}
{% endblock %}