{% extends "base.html" %} {% block title %}Requivo{% endblock %} {% block content %}

Find what could change the solution
before you commit to the scope.

Paste a client or stakeholder request. Requivo identifies the assumptions and missing decisions that could change the workflow, integrations, permissions, timeline or effort.

{% if error %}{% endif %} {% if not provider.available %}
No analysis provider is configured — {{ provider.reason }} Your request will still be saved, and you can analyse it from Claude Code or the CLI: they share these same sessions.
{% endif %}
{% include "_csrf.html" %} {# The submission comes back on a refusal (#30). Nothing here clips the paste in the browser — that is the silent truncation the server-side refusal exists to replace, and dropping the client-side ceiling is what made that refusal reachable at all (#8). `test_no_template_carries_a_clipping_attribute` scans these files as raw text, so it cannot tell an attribute from prose naming one; this comment therefore describes the rule without spelling the attribute. #} {# `data-limit` is the ceiling the *server* refuses at, rendered from `web/config.py` so the count the reader is shown and the refusal they would meet cannot drift. It is read by `app.js`, which counts and warns and never writes to the field — see the counting-not-clipping block there. #}

One line or a whole email. The messier the request, the more Requivo helps.

{# The duration a reader is told to expect has to be one this repo can stand behind: invariant 2 says provider calls take "seconds to minutes" and invariant 12 says "the call (which takes minutes)". The copy this replaces promised a handful of seconds; it expired at second twenty on a page that blocks, and what a reader does when a promise expires is resubmit — a second session and a second paid call (#236). This is also the whole signal with JavaScript off, which is why it says what the wait is *for* rather than only how long it is. `test_no_provider_backed_button_still_promises_a_few_seconds` scans these files as raw text, so it cannot tell a comment from the copy and this note deliberately does not quote the old wording — the same care `test_no_template_carries_a_clipping_attribute` asks for above. Pinned by that test and by `test_the_no_js_path_still_states_how_long_it_will_take`. #} {% if provider.available %}Usually under a minute — reading the request and building a first understanding.{% endif %} Reading the request…
Advanced settings

Leave blank to derive one from the request.

{% if cards %}
Product context (sharpens the questions — leave all unchecked to use every card) {# The selection survives a refusal too. A session's identity is its request *and* its card selection — the impact estimates are read against them — so handing back the textarea while silently clearing these would return a form that no longer says what the reader told it. #} {% for c in cards %}
{% endfor %}
{% endif %}
{# #226 — the keyless activation path, and it is on this page rather than behind a flag because a flag has to be known about before it can help, which is exactly what a visitor with no key does not have. Rendered whether or not sessions exist: the issue proposed showing it only on an empty workspace, and that is one real session away from an example nobody can reach again — including the reader who wants to compare their own half-finished session against a worked one. It is a POST, with the same token every other write on this app carries, because it creates a session. Pinned by `test_the_example_stays_reachable_once_a_real_session_exists`. #}
{% include "_csrf.html" %}

No key, nothing to install: — a real, messy client email and the understanding Requivo built from it, replayed from the payload bundled with this install. Nothing is called.

{% if sessions %}

Recent

{% else %}

Nothing here yet. Paste a request above — or open one created by Claude Code or the CLI: all three share the same local sessions.

{% endif %} {% endblock %}