Skip to content

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.

Projectbeta

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

TypeQuestionAnswers
ChoiceWhich label from group 'type' fits (or none)?bug · feature · chore · none
Yes / noDoes the 'documentation' label apply?—

How it works

  1. Trigger on a new issue or PR
  2. Build one question per label group and per ungrouped label
  3. Send everything to Jev in one request
  4. 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.

    ServicebetaTypeScript
  • Small Python framework and GitHub Action for Jev-powered workflows, with issue triage and PR screening built as examples.

    ProjectbetaPython
  • Self-hosted Jira alternative where AI agents join Scrum teams; Jev auto-assigns tasks, fills fields and routes workflow conditions.

    ServicebetaTypeScript
  • Workflow DSL for existing agents that uses Jev for the steps that are decisions and calls an agent only when investigation is needed.

    LibrarybetaTypeScript
  • n8n Jev Classification node that branches items by category with a Needs Review branch, plus parallel and batched requests.

    ProjectbetaTypeScript
  • Config-driven IMAP inbox classifier with a terminal UI where Jev answers yes/no per category to tag, move, flag or notify.

    ProjectbetaPython