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.

Evidence stays inspectable
Quotes checked against source text

Each quote is checked against the submitted feedback. The evaluated Vela pack also validates every policy clause ID against its source document; arbitrary uploaded context does not yet have a generic clause schema.

A human holds the trigger
0 replies auto-sent

Tasks are recommendations, not filed tickets, and no reply is sent automatically. Review flags identify drafts that need verification; low-confidence output receives one deterministically, while broader high-stakes triggers remain part of human review.

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. Review flags identify drafts that require verification, and low-confidence output is flagged automatically.

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 evaluated Vela path runs 14 deterministic rules; 7 judgment calls are scored by a human reviewer. The live path reuses the context-independent guardrails.

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 live through all 8 stages, including deterministic runtime checks. 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 live through all 8 stages, including deterministic runtime checks. 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 generation prompt uses it to ground source_refs and reply drafts. Without one, source_refs are expected to be empty; generic live clause validation is not yet enabled.

{{ 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 }}
{{ liveReceipt }}
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 and severity, plus account diversity when that metadata is available. Anonymous live input never assumes two items came from different accounts.
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.