Open Source - GitHub App

PR reviews that stay in their lane

Tinyedge reviews your pull requests and surfaces what matters - suggested test scenarios and risky logic changes - then gets out of the way. No fluff, no style nits, no dashboards.

MIT License - Works with OpenAI, Gemini, or mock endpoint
feat: refactor payment retry logic #247
41 async function processPayment(ctx) {
42-  if (ctx.retries > 0) retry(ctx);
42+  if (ctx.retries > 0 && !ctx.settled) {
43+    await retry(ctx, { backoff: true });
44+  }
45 }
tinyedge[bot]just now
Suggested tests
Verify retry is skipped when ctx.settled is true
Confirm backoff delay applies on repeated retries
Risk flag
ctx.settled is not guarded against undefined and may skip retry on first call

What it does

Two things. Done well.

Tinyedge is narrow by design. It reads the diff, thinks about it, and leaves exactly two types of feedback.

🧪
Suggested test scenarios
Concrete cases worth testing based on the exact logic that changed. No generic advice, no boilerplate, just what the diff reveals.
⚠️
Risky logic flags
Non-obvious edge cases, implicit assumptions, and logic changes reviewers might miss at a glance.
🤫
Silent when there is nothing to say
Tinyedge does not post comments just to post one. If the diff is low-risk, it stays quiet.
Diff-only context
Operates strictly on changed lines. No codebase crawl or repository indexing.
🔌
Provider adapters
Supports OpenAI and Gemini plus a mock provider for local testing.
🔧
Self-hostable
Express webhook server. Bring your own GitHub App credentials. Runs anywhere Node.js runs.

Design philosophy

Intentionally narrow.

Every feature Tinyedge does not have is a deliberate choice. Scope creep is where review bots go to die.

Goals - what it does
+Analyze only changed diffs, never the full codebase
+Suggest concrete, diff-grounded test scenarios
+Flag risky or non-obvious logic changes
+Stay silent when there is nothing meaningful to say
Non-goals - what it will not do
xGenerate test code
xStyle or formatting comments
xUI dashboards or analytics
xReplace your CI pipeline

Quick start

Up in three commands.

Clone, install, configure your GitHub App credentials, and point Tinyedge at your LLM provider.

terminal
# Install dependencies
pnpm install

# Build the API
pnpm -C apps/api run build

# Start in dev mode
pnpm -C apps/api run dev
.env
GITHUB_APP_ID=123456
GITHUB_PRIVATE_KEY="-----BEGIN RSA..."
GITHUB_WEBHOOK_SECRET=your-secret
TINYEDGE_LLM_PROVIDER=openai  # openai | gemini | mock
TINYEDGE_LLM_API_KEY=sk-...
TINYEDGE_LLM_MODEL=gpt-4o-mini
Environment variables
GITHUB_APP_IDYour GitHub App numeric IDrequired
GITHUB_PRIVATE_KEYRSA private key from GitHub App settingsrequired
GITHUB_WEBHOOK_SECRETWebhook secret set in GitHub Apprequired
TINYEDGE_LLM_PROVIDEROne of: openai, gemini, mockrequired
TINYEDGE_LLM_API_KEYAPI key for your selected provideroptional for mock
TINYEDGE_LLM_MODELModel name for OpenAI or Geminioptional for mock
TINYEDGE_DRY_RUNLog comments without posting to GitHuboptional
TINYEDGE_MAX_DIFF_BYTESCap diff size sent to the LLMoptional
PORTHTTP port for the webhook serveroptional