argus-eye bot
Blocking · Bug: Stale window of 1800 becomes 1.8µs, not 30 minutes
removed: recoveryStaleAfter := time.Duration(staleSecs)
added: recoveryStaleAfter := time.Duration(staleSecs) * time.Second
— Matches a prior fix in PR #1172.
Open-source code review for GitHub that you run yourself. It learns from your team's replies and reactions, and with an embeddings endpoint, later reviews drop close repeats of findings you dismissed.
Self-hosted only: Docker Compose or Fly.io, Postgres with pgvector, a GitHub App and a Clerk app you create, your model keys and an embeddings endpoint.
backend/internal/config/config.go
Example · PR #1215
| 147 | return nil, fmt.Errorf("invalid MAX_CONCURRENT_REVIEWS: %w", err) | |
|---|---|---|
| 148 | } | |
| 149 | added | staleSecs, err := strconv.Atoi(getEnv("RECOVERY_STALE_AFTER", "1800")) |
| 150 | added | if err != nil { |
| 151 | added | return nil, fmt.Errorf("invalid RECOVERY_STALE_AFTER: %w", err) |
| 152 | added | } |
| 153 | added | recoveryStaleAfter := time.Duration(staleSecs) (Argus finding on this line) |
argus-eye bot Blocking · Bug: Stale window of 1800 becomes 1.8µs, not 30 minutes removed: recoveryStaleAfter := time.Duration(staleSecs) added: recoveryStaleAfter := time.Duration(staleSecs) * time.Second — Matches a prior fix in PR #1172. | ||
| 154 | embedDims, err := strconv.Atoi(getEnv("EMBEDDINGS_DIMENSIONS", "1024")) | |
Resolved by 3e9c1a7 — the flagged lines were modified in this push.
Replies and reactions from people with write access, findings the judge scores highly, and conventions read from your diffs are stored in your Postgres.
#1164
What happened: A maintainer dismissed a finding and said why.
Stored: The dismissal, with the reply as the reason.
#1172
What happened: The judge scored a finding 94.
Stored: A pattern, and a convention from the diff: duration settings are integer seconds.
#1190
What happened: Two conventions disagreed, and a maintainer picked one.
Stored: The pick. The other convention is marked superseded.
#1215
What happened: The review cited the #1172 pattern and dropped a repeat of the #1164 finding.
Stored: 1 pattern, 1 PR summary, 1 finding memory and 1 file memory.
Only people with write access change memory, and security findings are lowered one level at most, never dropped. Similarity search needs an embeddings endpoint.
Twelve written rules in the review prompt say what not to post. With a scoring model set, a second model scores the findings, and only those over the bar for the PR's change class are posted.
On each push, up to 20 open Argus threads with a change near their line go back to a model with the new code. A confirmed fix resolves the thread and the reply names the commit; anything else stays open. Each re-check is a model call on your key.
The usage block at the end of each summary lists each stage's model and tokens, billed to your key, and the cost when your provider reports it or the model's price is known.
There is no hosted version. Create a GitHub App, fill in backend/.env, and start it with Docker Compose. Begin with one repository.
Before the host is reachable, change Compose's default Postgres password. On a public repository, turn auto-review off: any pull request, forks included, starts a review on your key.
git clone https://github.com/BeLazy167/argus
cd argus
cp backend/.env.example backend/.env
# fill in the App, Clerk, embeddings and encryption values
mkdir -p backend/secrets
cp ~/Downloads/<your-app>.*.private-key.pem \
backend/secrets/github-app.pem
docker compose up