GitInkGitInk
DemoFeaturesArchitectureConfigFAQGitHub
Get Started
✦ AI-Powered PR Generation

Automate your Pull Requests from CLI to CI

GitInk analyzes your Git diffs and generates structured, professional PR titles and markdown descriptions in seconds using Google Gemini AI.

< 3s
Generation time
100%
Local diff privacy
Zero-install
via npx
bash — gitink dry-run
$ git diff | npx gitink --dry-run --key "your-key"
 
✓ Parsing diff... (3 files changed)
✓ Filtering non-code assets...
✓ Sending to Gemini AI...
─────────────────────────────────────────
 
PR TITLE
feat: add session caching for auth middleware
 
PR DESCRIPTION
 
## Summary
Adds localStorage caching for session
validation to reduce auth API calls.
 
## Key Changes
- `SessionCache` utility class added
- TTL configured via `CACHE_TTL` env var
─────────────────────────────────────────
$

Works with any git repository · Zero config required

LIVE SIMULATION

Watch GitInk in Action

A step-by-step simulation of GitInk automatically populating PR content via GitHub Actions.

github.com/octocat/my-project/pulls
CodeIssuesPull requestsActionsSettings
octocat / my-project / Pull requests
0 Open · 3 Closed

There aren't any open pull requests.

LOCAL DRY-RUN MODE

Offline-First Developer Experience

Analyze any Git diff state locally. No internet, no GitHub connection — just your diffs and the AI.

No GitHub Credentials Required

Only a Gemini API key is needed for local dry-runs. Your GITHUB_TOKEN stays untouched and your repository credentials are never exposed.

Pre-commit Friendly

Verify AI-generated summaries before staging, committing, or pushing. Catch irrelevant noise in diffs before they enter your PR history.

Standard Input (stdin) Piping

GitInk reads diff metadata directly from stdin, making it compatible with pre-commit hooks, shell scripts, and CI pipelines.

bash — local dry-run
$ git diff | npx gitink --dry-run
Analyzing diff...Files changed: src/auth/middleware.ts (+45 -12)⟶ Gemini API response received✓ PR Title:  fix: resolve session token expiry race condition✓ Description:  ## Summary  Fixes a race condition in the session refresh  logic that caused intermittent 401 errors.  ## Key Changes  - Added mutex lock to token refresh handler  - Synchronized expiry checks across workers
SYSTEM ARCHITECTURE

How GitInk Flows Through Your Pipeline

Four interconnected stages form a closed-loop automation — from diff to deployed PR description.

GitHub Repository
Source of truth
Webhook PR Event
GitHub Action / CLI
Trigger & executor
Git Diff Payloads
Gemini AI Engine
Content generator
JSON Schema Output
PR Title/Body Updater
GitHub REST API
CI/CD SETUP

Set Up Once. Runs Forever.

Drop a YAML file into your repo and add one secret. Every pull request gets an AI-generated description from that moment on.

Add API Key
Set GEMINI_API_KEY as a repo secret
Create Workflow
Commit gitink.yml to .github/workflows/
Auto-runs on PRs
GitInk runs on every new pull request
github.com/prpilot/prpilot/settings
CodeIssuesPull requestsActionsSettings
Settings
Access
Collaborators
Moderation options
Code & Automation
Branches
Tags
Actions
Codespaces
Dependabot

General

Repository name
prpilot
Default branch
The default branch is considered the "base" branch in your repository.
main
Releases
Enable release immutability
COMPARISON

CLI Mode vs GitHub Action Mode

GitInk works seamlessly in both contexts — choose what fits your workflow.

Feature
gitink
CLI Mode
action
GitHub Action
Primary Trigger
Manual terminal pipe (git diff)
Automatic on pull_request event
Credentials
GEMINI_API_KEY (local env)
GEMINI_API_KEY (repo secret)
Output Context
Dry-run stdout or API direct update
Direct update on active pull request
Ideal For
Local testing before staging/committing
Global team automation in pipelines
Dependencies
Requires Node.js >= 20 globally
Standalone bundled action (zero-install)
TONE PLAYGROUND

Customize the Output Tone

GitInk adapts to your team's voice. Select a tone and watch the same code change described differently.

src/auth/session.ts — diffread-only
diff --git a/src/auth/session.ts b/src/auth/session.ts
index a3f4c12..8b7e091 100644
--- a/src/auth/session.ts
+++ b/src/auth/session.ts
@@ -14,6 +14,28 @@ import { validateToken } from './token';
+import { SessionCache } from '../cache/session';
const AUTH_ENDPOINT = '/api/v1/auth/validate';
+const cache = new SessionCache({ ttl: 5 * 60 * 1000 });
export async function validateSession(token: string) {
+ const cached = cache.get(token);
+ if (cached) {
+ return cached;
+ }
+
const response = await fetch(AUTH_ENDPOINT, {
headers: { Authorization: `Bearer ${token}` },
});
+
+ if (response.ok) {
+ const data = await response.json();
+ cache.set(token, data);
+ return data;
+ }
+
return response.json();
}
gitink output — Professional
CORE VALUE

Built for Developer Productivity

Three core developer problems. One elegant solution.

Zero Context Switch

Keep your focus where it belongs — in your IDE. GitInk handles documentation automatically upon git commit or branch push, so you never break your flow.

Stay in flow state

Smart File Exclusion

No more analyzing lockfiles, images, or minified assets. GitInk's intelligent exclusions focus purely on logic changes, making AI analysis faster and more accurate.

Signal over noise

Conventional Commit Standards

Ensure repository compliance automatically. GitInk formats PR titles following standard commit conventions — feat:, fix:, chore:, docs: — keeping your history clean.

Always compliant
CONFIGURATION

Tailored with .gitink.json

Click a preset below to see how your .gitink.json changes — each template is ready to drop into your repo.

{ }.gitink.json
1
2
3
4
5
6
7
8
9
10
11
{
  "exclude": [
    "package-lock.json",
    "yarn.lock",
    "dist/**",
    "*.png"
  ],
  "maxDiffLength": 60000,
  "prompt": "Summarize features in bullet
    points under ## Changes."
}
JSON.gitink.json · UTF-8

Place .gitink.json in your repository root. GitInk reads it automatically — no flags needed.

Select a preset to preview its configuration:

FAQ

Frequently Asked Questions

Common questions from developers evaluating GitInk.

No. GitInk communicates directly with the official Google Gemini API which enforces strict enterprise privacy terms — your code is never used for model training. Diff payloads are transmitted over TLS and are not stored beyond the request lifecycle.

Yes. You can define your own sections, markdown layout, or tone guidelines by overriding the prompt value in .gitink.json. For example: "Summarize in bullet points under ## Changes. Always include a ## Testing section."

GitInk cleanses non-code files (lock files, images, minified assets) and truncates excessive diff logs automatically using the maxDiffLength config. Only the relevant file context is sent to Gemini AI, avoiding rate limits and keeping costs minimal.

Yes. When used as a GitHub Action, GitInk uses the GITHUB_TOKEN that GitHub automatically provides to actions — no additional setup is needed. For CLI dry-runs, no GitHub credentials are required at all.

GitInk requires Node.js >= 20 when installed globally (npm install -g gitink). When used via npx or as a GitHub Action, the bundled standalone version has zero external dependencies.