Open-source · v1 pipeline

Feedback in.
Traceable work
packs out.

Asterline turns raw, unstructured feedback into structured work packs — one per underlying issue, each backed by the quotes that surfaced it, the tasks it implies, and a drafted reply that waits on a human before it goes anywhere.

Built for whoever ends up with the feedback inbox — no assumed role, no assumed team size.

01Eval-first
02Traceable output
03Human-gated
View the code
Clustering

The same issue, however it arrives.

Raw feedback in
FB-01 · support_ticket
"no error, no confirmation, page just sat there for 10+ minutes."
FB-26 · support_ticket
"We had no way of knowing whether the payments had gone out."
FB-27 · support_ticket
"Uploaded a 540-row file, nothing happened. Is there a size limit nobody told us about?"
One work pack out
CLU-001 ● actionable bug
{{ demoTitle }}
{{ demoTaskPrio }} {{ demoTaskTeam }} — {{ demoTaskText }}
🔒 {{ demoReviewText }}

Built-in demo data — Vela Pay (synthetic)

Eight steps, none skipped

The pipeline: eight stages from raw inbox to reviewable work packs.

See the full walkthrough →
{{ st.n }}
{{ st.short }}
Output reliability

Not 'trust us.' Verify it yourself.

So the answer isn’t “trust the model.” It's three things the pipeline enforces — each one inspectable in the product itself.

Eval-first, not vibes
21-item rubric · scored every version

A rubric and 20 hand-labeled examples defined "correct" before any output ran. Every version scored against the same standard — including one that regressed, was reverted, and kept in the log.

Every claim is cited
100% traceable to a source

Each quote is verbatim from a real feedback item; each policy statement cites a clause ID you can open. If the context to back a claim isn't loaded, the draft says so rather than inventing a policy.

A human holds the trigger
0 replies auto-sent

Tasks are recommendations, not filed tickets. Any reply touching money, timing, or policy is blocked by a review flag until a person verifies it. Nothing sends itself.

Safety & data handling

Honest about what it protects — and what it doesn't yet.

Feedback is messy and often carries personal data. Here is what the pipeline does about that, stated plainly, including the limits it hasn't closed.

PII redaction runs first

Emails, phone numbers, and account identifiers are stripped in memory before your text reaches any model. The honest limit: human names aren't caught by regex in v1 — a documented gap, not a hidden one. You can see it directly: open any quote's source.

Not stored on our servers

Feedback you submit is processed in memory and not stored on our servers. Your text is sent to the Anthropic API for classification and generation — Anthropic does not use API inputs for model training. No database, no file storage, no content logging.

Nothing acts without you

The pipeline proposes tasks and drafts replies — it never files a ticket or sends a message on its own. Any reply touching money, timing, or policy is explicitly blocked until a person clears it.

v1 design tradeoffs: PII is caught by rules, not AI — names may slip through. Context docs are loaded in full rather than searched. Both decisions are documented in the repo.

See what the pipeline produces.

View the code on GitHub
The Vela Pay demo shows real pipeline output — 22 work packs generated by the actual pipeline (generate-v9) against synthetic feedback with full context docs. Paste your own feedback or try the CFPB complaints pack to run the live pipeline.
How it works

From a raw inbox to a stack of reviewable work packs.

The same depth you'd expect from a real product's explainer: the full pipeline, every field in a work pack, how the evaluation was designed, and what changed across iterations.

01 — The pipeline, one beat each

{{ st.nNum }}
{{ st.name }}
{{ st.one }}

02 — What's in a work pack

Every field explained in plain terms. The structure is deliberate — some fields are computed, some block sending, some are only recommendations.

{{ f.field }} {{ f.tag }}
{{ f.desc }}

03 — How the evaluation was designed

Before any work pack was generated at scale, twenty real-looking feedback items were hand-labeled against a written rubric — what a correct classification looks like, what a passing work pack has to include.

That standard came first; everything since is measured against it, not the other way around. The rubric mixes deterministic checks the code runs automatically (14 rules) with judgment calls scored by a human reviewer (7 rules) — including whether tasks are correctly scoped and whether the reply tone matches the situation.

What counts as a pass 5 of 21 — see all →
{{ r.id }} {{ r.text }} {{ r.kind }}

04 — Iteration evidence

Two prompts, two different kinds of evidence. The classifier has a single accuracy metric — four prompt versions, one revert, 40% → 65% on a fixed golden set. The work pack generator had no equivalent number: nine prompt versions across three sessions, four rounds of human eval sampling, and four automated-check code bugs found and fixed. The fuller system left the fuller record.

Classifier — Intent Classification Prompt
Classification Accuracy · 20-item Golden Set
{{ b.pct }}%
{{ b.v }}
{{ b.note }}
Work Pack Generator — Generate Prompt
9
prompt
versions
4
rounds of
human eval
12
clusters
reviewed
4
auto-check
bugs fixed

Nine prompt versions across three sessions, validated by four rounds of human eval sampling (12 unique clusters across 4 rounds). Four code bugs in the automated quality checks were found and fixed during iteration — two from full-output scans, two surfaced during human review. None were visible from spot-checking alone.

Issue found
→ Fixed
{{ wi.v }}
{{ wi.type }}
{{ wi.title }}
{{ wi.what }}
{{ wi.fixed }}
New run

Pick a source of feedback.

Paste your own feedback or upload a CSV to run the live pipeline. The CFPB pack samples real financial complaints and runs them live. The Vela Pay demo shows cached output from the real pipeline.

Paste raw feedback — support tickets, survey responses, app reviews, or any unstructured text. One item per block, separated by blank lines. Up to 3 items run through the real pipeline; if you paste more, 3 are randomly sampled.
Live pipeline Your text runs through the full 8-stage pipeline. Results are real, not pre-computed. Max 5 runs per day.
Drop a CSV of feedback rows
CSV with a text column (required). Other columns (channel, account) are optional. Up to 3 rows run through the live pipeline; more are randomly sampled.
Live pipeline Your CSV runs through the full 8-stage pipeline. Max 5 runs per day.
{{ csvFileName }} {{ csvRowCount }}
{{ csvSampleNote }}
Context document optional

Upload a .md or .txt with your product's policies, known issues, or tone guide. The pipeline uses it to ground source_refs and reply drafts. Without one, source_refs will be empty.

{{ contextDocName }}
The pipeline will use this document to ground source_refs and reply drafts. Results will differ from the built-in demo.
Error {{ liveError }}
{{ pickSourceLabel }}
This session
{{ runCount }}

Runs from this browser tab only. Gone on refresh — there's no account and no saved history.

No runs yet this session.
Run the pipeline to see results here.
Running · {{ runLabel }}

{{ runStageName }}

{{ runStageCount }}
{{ st.short }}
{{ st.logIcon }} {{ st.name }} {{ st.logText }}
Results · {{ runLabel }}

{{ resultCount }} work packs

{{ flagSummary }}
No product context loaded for this run — classification and clustering ran without Vela Pay's policy docs or known-issues list.
Intent Signal Flags
{{ filteredCount }} of {{ totalCount }} shown
No clusters match the selected filters.
{{ sel.id }} {{ sel.intentGlyph }} {{ sel.intentLabel }} · {{ sel.dimension }}

{{ sel.title }}

Problem brief

{{ sel.brief }}

Key quotes
"{{ q.text }}"
Tasks recommendations, not auto-filed tickets
{{ t.p }} {{ t.team }}
{{ t.text }}
⚑ {{ t.deadline }}
Done when: {{ t.acc }}
Reply draft body only — the CRM adds salutation and sign-off
🔒 Locked — a blocking review flag must be cleared before this can be sent.
{{ sel.reply }}
Reply draft
None — this cluster is classified noise, so no reply is drafted and no tasks are filed.
Signal strength
{{ sel.signal }}
Computed from member count, account diversity, and severity — not a model opinion.
Cluster members · the evidence
{{ sel.memberLabel }}
Source refs
No source refs — {{ sel.noRefsReason }}
Review flags block sending
{{ f.text }}
Quality flags don't block · for awareness
{{ f.type }}
{{ f.text }}
Export
Markdown for people, JSON shaped for Jira or Linear.
{{ browseTitle }}
{{ bi.id }} {{ bi.channel }} {{ bi.account }}
{{ bi.text }}
Emails and phone numbers are auto-redacted. Human names are not caught by regex — a documented v1 limitation.
{{ cg.group }}
{{ cl.id }} {{ cl.text }}
{{ viewer.id }} {{ viewer.kindLabel }} {{ viewer.channel }} · {{ viewer.account }}
{{ viewer.text }}
From the Vela Pay context documents — the exact clause this work pack cites. Every claim in a pack traces back to a source like this one.
{{ viewer.text }}
Emails and phone numbers are auto-redacted by regex before processing. Human names are not caught by regex — a documented v1 limitation, shown here rather than hidden.