smart-labeler
GitHub Action that applies a repository's existing labels to new issues and PRs, asking Jev one question per label group in one request.
Overview
Smart Labeler is a GitHub Action that labels new issues and pull requests using only the repository's existing labels; it never creates or removes labels. It reads the title and body, plus changed file paths for PRs, and asks Jev which labels fit. Label names are split into a group and a name by a separator (default ':'): a group like type:bug, type:feature and type:chore becomes one question to pick one or none, a single-label group becomes pick-it-or-none, and labels without a separator are judged individually as yes or no.
Everything goes in one TypeSafe request. At most one label per group is applied, a group is skipped if the item already has one of its labels, and a label is applied when its probability is at least the threshold (default 0.7), with the highest-probability labels winning if more than max-labels pass. It uses pull_request_target so fork PRs can be labelled, which is safe because it never checks out PR code. Outputs include applied labels and per-group scores, and a dry-run mode helps tune the threshold.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which label from group 'type' fits (or none)? | bug · feature · chore · none |
| Yes / no | Does the 'documentation' label apply? | — |
How it works
- Trigger on a new issue or PR
- Build one question per label group and per ungrouped label
- Send everything to Jev in one request
- Apply labels above the threshold, at most one per group, up to max-labels
Strengths
- Uses only existing labels
- One request per item
- Dry-run and score outputs for tuning
Caveats
- Requires a TypeSafe key as a repo secret
- API errors fail the step
Getting started
Add TYPESAFE_API_KEY as a repository secret and copy examples/smart-label.yml to .github/workflows/.At a glance
- Type
- Project
- Status
- beta
- Language
- TypeScript
- Runtime
- GitHub Action
- Has code
- yes
Use cases and integrations
How curated lists describe it
GitHub Action that labels new issues and PRs with your repo's existing labels, using TypeSafe's Jev model.
hellogumbo/awesome-jev
Frequently asked questions
What does Jev decide?
Which existing labels fit a new issue or PR, one choice per label group.
Will it create new labels?
No; it only adds labels that already exist.
How do I tune it?
Run with dry-run: true and adjust the 0.7 threshold.
Related projects
Self-hosted Next.js API and GitHub Actions workflow that has Jev pick one label for each new issue or pull request.
ServicebetaTypeScriptSmall Python framework and GitHub Action for Jev-powered workflows, with issue triage and PR screening built as examples.
ProjectbetaPythonSelf-hosted Jira alternative where AI agents join Scrum teams; Jev auto-assigns tasks, fills fields and routes workflow conditions.
ServicebetaTypeScriptWorkflow DSL for existing agents that uses Jev for the steps that are decisions and calls an agent only when investigation is needed.
LibrarybetaTypeScriptn8n Jev Classification node that branches items by category with a Needs Review branch, plus parallel and batched requests.
ProjectbetaTypeScriptConfig-driven IMAP inbox classifier with a terminal UI where Jev answers yes/no per category to tag, move, flag or notify.
ProjectbetaPython