Skip to content
Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

CI Analysis OpenSSF Scorecard License: Apache 2.0 Latest release Pull requests welcome

Reeve — repository upkeep, in every contributor's language

Reeve

The best bug report you ever received was written in a language you do not read.
Reeve keeps a repository's recurring work moving — sorting, matching, answering —
in whatever language it arrived in, inside an authority you wrote down and it cannot exceed.

Reeve labels, translates, deduplicates, and answers issues from inside your own warrant file — not a chatbot, not a hosted service, not a workflow engine.

Quick start · What it refuses to do · North star · Documentation

Important

Reeve is being assembled, not announced. It is on a 0.x line: five duties ship, dogfooded on this repository as they land — duplicate and respond in report-only mode, writing verdicts to job summaries and touching nothing — and the rest of the roadmap is still open. 1.0 is the release where all of it is done — until then an input can still be renamed on a minor, and the release notes will say so.

Why this exists

A project's contributors do not all share a language. Its automation acts as though they do.

Every serious tool in this category is English-first, and it shows in the place it matters least visibly: not in translation, but in decisions. Sorting is worse. Duplicate detection simply fails — two reports of the same crash, one in Vietnamese and one in English, never meet. The person who wrote the most useful report you got this month gets a slower, worse answer than someone who wrote a vaguer one in English.

Reeve treats language as something the core knows and every duty consumes, not as one feature bolted on beside the others. That is the whole thesis, and the north star is where it is argued properly.

Quick start

name: Reeve

on:
  issues:
    types: [opened, reopened, edited]

permissions:
  contents: read
  issues: write

jobs:
  triage:
    runs-on: ubuntu-latest
    steps:
      - uses: ecoma-io/reeve/triage@v0.1
        with:
          api-key: ${{ secrets.OPENAI_API_KEY }}
          models: gpt-5-mini

  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: ecoma-io/reeve/translate@v0.1
        with:
          api-key: ${{ secrets.OPENAI_API_KEY }}
          models: gpt-5-mini
          languages: en, vi

One repository, one version line, one core — and each duty keeps its own inputs, so nothing you write is meaningless to the thing you are configuring.

Before granting a capability for real, check what your warrant would actually do with uses: ecoma-io/reeve@v0.1 and doctor: true — it reads your file and this repository's labels and reports what a duty would find, writing nothing. See Doctor.

A reeve, and why that is the word

A reeve was the officer who ran an estate on the owner's behalf: the daily work, done without being asked each time, inside an authority the owner had granted and could withdraw at any moment. The owner stayed the owner.

That is the whole product. Everything below follows from it.

What it refuses to do

The list is short, it is enforced in code, and it is the most important section on this page.

Act outside its warrant What Reeve may do is a file in your repository, or its narrowest built-in default where you wrote no file at all. A label your taxonomy does not name is never applied; a capability you did not grant is never used. Checked against the file — never against the model's own claim about what it was allowed to do.
Rewrite what a person wrote Titles and bodies belong to whoever wrote them. Machine output sits beside human text, marked, never in place of it.
Overrule a maintainer It never removes a label a person applied, never reassigns, never reopens. It proposes; you decide. (The one bounded carve-out: lifecycle's clock-hand exception takes back a label its own actor applied, and only that.)
Close, lock, or delete Off by default and staying that way. Everything past the cheapest reversible action is opt-in, one at a time.
Write code Reeve reads and decides. It does not author diffs, run your tests, or fix your bugs. That is a different tool, and a crowded one.
Guess when it cannot read Model output that does not parse yields no result and a loud failure — not a best-effort read of the parts that looked fine. The shapes that fail to parse are the ones an injection produced.
Pretend it worked A run that cannot do its job fails red. It never reports an empty result in green to mean something went wrong.
Hold your data No account, no dashboard, no hosted state. Taxonomy, corrections, configuration and markers are plain files in your repository — reviewed in a pull request, and deleted with rm.

Duties, and the ladder they sit on

A duty is one job Reeve does, and none of them is switched on by a mode — what runs is exactly as much as you wrote down, one rung of the ladder at a time. Every duty shares a core — the provider client and its fallback, the language layer, several drafts filtered by deterministic scoring, the sanitiser, the allowlist, the state kept as files in your repository — and differs only in what it decides:

Duty What it does Reference
triage Sorts a backlog against the taxonomy you wrote — or, at the bottom rung, against the labels your repository already has. Reference
translate Puts every issue and pull request in every language your project reads — in the thread's own body, marked as the version that counts. Reference
duplicate Finds the thread that already reported this — across the language it was reported in. Top rung: opt-in, never on by accident. Reference
respond Gives a stranger a first, useful reply in the language they wrote to you in, grounded in what the project already knows. Top rung: granted nothing until a warrant names it. Reference
lifecycle Runs your own staleness policy — reminders, un-staling, and a final close as not planned — from timestamps and labels alone. No model is ever called. Reference

What comes after them is decided by one test, and it is a strict one: the work has to recur, be uniformly expensive today, already be work a maintainer stopped doing, and be harder on a project whose contributors do not share a language. Doctrine D10 rejects most feature requests, on purpose.

Cost

Reeve is arranged so the expensive step runs last and least: code decides the easy majority for nothing, a cheap model screens what survives that, and only the minority that was always worth a careful read reaches the model you chose.

Tier Decides Costs
Code Empty bodies, unfilled templates, obvious spam, exact repeats, a thread Reeve already handled Nothing
A cheap model Is this worth a careful read — spam, off-topic, out of scope Very little
The model you chose The actual verdict, on what survived The real bill

Providers serving OpenAI-compatible models with no key at all are a supported configuration, not a tolerated one: point base-url at one and give Reeve several models. Full breakdown, including a worked estimate and how to measure it instead of estimating it: Cost.

Documentation

docs/ is the full index, organized by who's reading. Start here:

If you are… Start at
New to Reeve Getting started
Deciding whether to adopt it The authority model
Running it day to day Guides
Reviewing it for security Threat model
Changing the code Development

License

Apache-2.0.



Reeve is developed at github.com/ecoma-io/reeve.

About

Automated upkeep for a repository — triage, translation and the duties after them, with any OpenAI-compatible model, inside an authority you wrote down and it cannot exceed.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages