Proof of concept · 29 Sep 2026

Triaging GitHub issues with Jev

A single Python script sends every unlabeled issue to Jev (TypeSafe AI's System One classifier) and labels it by type, priority, and whether an AI coding agent can pick it up. Those are the same labels Looper already reads, so Looper needs no changes.

15 / 15issues classified correctly as bug, feature, or question
3 / 3vague or incomplete issues flagged needs-more-info
0risky issues (credentials, big design work) handed to the agent
~790tokens per issue (~700 in, ~90 out)

How it works

1. Fetchgh issue list
open issues with no labels
→
2. Ask Jevtitle + body, 4 questions
one API call per issue
→
3. Decidescores → labels
thresholds in code
→
4. Labelgh issue edit
only with --apply
→
5. Looperpicks up agent issues
opens PRs automatically

Jev doesn't generate text. It answers typed questions with a label and a probability, which makes it fast, cheap, and easy to put thresholds on.

The four questions Jev answers

choice

Type

bug, feature, or question
score 0–2

Priority

p2 low · p1 normal · p0 critical (crash, data loss, security)
yes / no

Well described?

Could someone new act on it: what happened, what was expected, how to reproduce?
yes / no

Agent-ready?

Clearly scoped, no human decision, no external access, and can be verified by tests

Labeling rules

Results on 15 test issues

Test issues cover clear bugs, a security hole, data loss, typos, vague one-liners, questions, small and large features, and a task that needs production access. Green bars cleared their threshold.

#IssueTypePriority (conf)Well describedAgent-readyLabels

What we learned

Works well

  • Type was right on every issue, almost always with 0.95+ confidence.
  • Vague issues ("app is broken", "login doesn't work sometimes") scored below 0.1 on "well described".
  • Agent-readiness splits cleanly: everything scored either 0.80 or higher, or 0.62 or lower.
  • Jev kept the agent away from credential rotation (0.03) and multi-workspace design (0.02).

Needs tuning

  • Priority is the weakest answer. Every needs-human-triage came from low priority confidence, which happens when an issue sits between two levels.
  • "app is broken" got p0 with 0.98 confidence, probably because the reporter wrote "asap".
  • "Search should match tags" scored 0.80 on agent-ready, just under the 0.85 bar.

Next steps

  1. Lower the agent bar from 0.85 to 0.75. This only adds #13, with no false positives.
  2. Skip the priority label when an issue gets needs-more-info, since you can't prioritize what isn't clear yet.
  3. Run --apply on a real repo and have the team review the labels for a week.
  4. If it holds up, run it on a schedule or as a GitHub Action so new issues are triaged automatically before Looper picks them up.