{% extends "base.html" %} {% from "_help.html" import info %} {% from "_job_status.html" import job_status %} {% block title %}Briefs — Paperful{% endblock %} {% block body_attrs %}{% if poll_run %} data-poll-run="{{ poll_run }}"{% endif %}{% endblock %} {% block content %}

Briefs

{% if error %}
{{ error }}
{% endif %}

{{ message }} Summaries are grounded in local PDF text. Synthesize then folds those notes into a collection review. Both follow the collection chip.

{% if flags.remote_llm %}

Remote LLM — PDF or summary text may leave this machine.

{% endif %}

Scope: {% if prefs.collection %}{{ prefs.collection }}{% else %}entire library{% endif %}

{% if flags.llm_on %}

Summarize

Write a grounded summary of each PDF in scope. Dest chooses disk, a Zotero child note, or both. Force regenerates papers that already have a summary.

{{ job_status(summarize_result, 'Summarize') }} {% if summarize_result.queued is defined %}

Last run: {{ summarize_result.summarized }} summarized · {{ summarize_result.skipped }} skipped · {{ summarize_result.failed }} failed · {{ summarize_result.not_reached }} not reached ({{ summarize_result.dest }})

{% endif %}

Filters {{ info("Which PDFs to summarize, in what order, and where to write them.") }}

{{ info("Write grounded summaries for PDFs in scope. Spends tokens. Skips papers that already have a summary unless Force is on.") }}
{% if summaries %}
Recent summaries ({{ summaries|length }})
{% endif %}

Synthesize

Build a literature-review report from summaries already on disk. Dry-run shows source counts and the chunk plan without calling the model. Write report spends tokens.

{% if synth_via and error %}

{{ error }}

{% endif %} {% if synthesize_result.status == 'queued' or synthesize_result.status == 'running' %}

{% if synthesize_result.args.dry_run %}Dry-run{% else %}Write report{% endif %} {{ synthesize_result.status }}…

{% elif synthesize_result.skip_plain %}

{{ synthesize_result.skip_plain }}

{% elif synthesize_result.slug %}

{% if synthesize_result.dry_run %}Dry-run{% else %}Report{% endif %} {% if synthesize_result.dry_run or synthesize_result.args.dest == 'zotero' %} {{ synthesize_result.slug }} {% else %} {{ synthesize_result.slug }} {% endif %}: disk {{ synthesize_result.sources_disk }} · notes {{ synthesize_result.sources_note }} · missing {{ synthesize_result.missing }}{% if synthesize_result.chunks %} · chunks {{ synthesize_result.chunks }}{% endif %}

{% elif synthesize_result.error %}

{{ synthesize_result.error }}

{% endif %}

Filters {{ info("Which summaries to include and where to write the report.") }}

{% if not prefs.collection %}

No collection in the chip — destination defaults to disk. Zotero or both needs a collection.

{% endif %} {{ info("Show source counts and the chunk plan. No model call.") }} {{ info("Call the model and write the report to Dest.") }}
{% if reports %}
Recent reports ({{ reports|length }})
{% endif %}
{% endif %} {% endblock %}