Introducing Graphite Reviewer

Your AI code review companion

Get immediate, actionable feedback on every pull request with Graphite’s codebase-aware AI.

Merge PRs faster

Graphite Reviewer automatically catches bugs and errors before human reviewers, letting your team spend less time on code review, and more time on building.

Enforce quality & consistency

Customize Graphite Reviewer with repo-specific AI prompts and regex rules to enforce best practices across your entire team.

Keep your code private & secure

Graphite Reviewer doesn't store or train on your team's code - your data remains yours. Learn more about our AI data policy.

Catch common mistakes

Your second pair of eyes

Graphite Reviewer automatically scans opened PRs for bugs, logical errors, and other technical pitfalls.

Graphite Reviewer comment suggesting best practices
Best practices
A Graphite Reviewer comment correcting a copy-paste error
Copy/paste errors
A Graphite Reviewer comment correcting a logic inconsistency
Logic inconsistencies
A Graphite Reviewer comment correcting a spelling mistake
Spelling mistakes

Zero set up

Enable Graphite Reviewer in any repo with the click of a button, and instantly start receiving codebase-specific feedback on new pull requests—no setup required.

Instant feedback

Graphite Reviewer gives authors immediate, actionable feedback, letting you squash bugs in their PRs before teammates get a chance to review them. Reviewers can then focus on the big picture rather than looking for typos and stylistic nits.

More signal, less noise

Other AI bots hallucinate and create noisy comments. Graphite Reviewer is calibrated to catch real bugs and deliver smarter, targeted feedback with fewer false positives.

Get Started

Enable Graphite Reviewer to start turbocharging your code review process. Start your 30 day free trial today.

Stats
PRs Reviewed
143k+
Noisy or unhelpful comment rate
<3%
Coming soon

Custom rules

Define & enforce custom patterns specific to your codebase.

snake-case-everything
Capitalize Every Word In Heading
prefer no double ternary statements
don’t hardcode URLs
use only hex codes
do not prefix typescript enums with T
prefer active voice in copy
camelCase

Personalized AI review prompts

Best practices are hard to express with regex alone. Graphite Reviewer can read your team's code style rules in plain English and ensures that every PR follows them.

Regex matching to enforce security requirements

Flag specific patterns to keep your team compliant and avoid merging secrets & other vulnerabilities.
42+export const updateBaseBranchIfNecessary = async ({
43+ pr,
44+ newMergeBase,
45+ actor,
46+ serverContext,
47+}: {
48+ pr: PrToRebase;
49+ newMergeBase: string;
50+ actor: GithubCachedActorWithHost;
51+ serverContext: TServerContext;
52+}) => {
53+ const { owner, repo, number } = pr;
54
55+ const skipUpdateBaseBranchIfUnchanged =
56+ await serverContext.clients.statsig.checkOrgBasedFlagDeprecated({
57+ configName: "skip_update_base_branch_if_unchanged",
58+ orgGithubLogins: [owner],
59+ splog: serverContext.splog,
60+ });
61
62+ if (skipUpdateBaseBranchIfUnchanged) {
63+ const freshPr =
64+ await serverContext.clients.githubCache.pullRequests.getFreshPrAndCache({
65+ githubClient,
66+ owner,
67+ repo,
68+ number,
69+ source: "REBASE_UPDATE_BASE_BRANCH",
70+ config: {
71+ await: true,
72+ },
73+ });
74
75+ if (freshPr && freshPr.baseRef.name === newMergeBase) {
76+ return;
77+ }
78+ }
79
80+ const sleepSeconds = await determineSleepTime({ owner, serverContext });
81+ await sleep({ seconds: sleepSeconds });
82
83+ serverContext.splog.verbose({
84+ message: `Updating PR base branch after rebase`,
85+ tags: { pr, newMergeBase },
86+ });
87
88+ await updatePrBase({
89+ owner,
90+ repo,
91+ prNumber: pr.number,
92+ base: newMergeBase,
93+ githubClient,
94+ context: serverContext,
95+ });
96+};
97
98+export async function rebasePullRequest({
99+ pr,
100+ actor,
101+ newMergeBase,
102+ stackJobId,
103+ gitClient,
104+ serverContext,
105+}: {
106+ pr: PrToRebase;
107+ actor: GithubCachedActorWithHost;
108+ newMergeBase: string;
109+ stackJobId: string;
110+ gitClient: GitClient;
111+ serverContext: TServerContext;
112+}): Promise<RebaseResult> {
113+ const rebaseStartTime = DateTime.now();
114+ const rebaseResult = await gitClient.rebaseUnmergedRange({
115+ headBranch: pr.headBranch,
116+ trunkBranch: newMergeBase,
117+ });
118
119+ const durationMs = startTime
120+ .diff(DateTime.now())
121+ .as("milliseconds");
122
123+ serverContext.splog.verbose({
124+ message: `Rebase completed in ${rebaseDurationMs}ms`,
125+ tags: {
126+ rebaseDurationMs,
127+ pr,
128+ newMergeBase,
129+ },
130+ });
131
132+ if (rebaseResult !== "SUCCESS") {
133+ serverContext.splog.warn({
134+ message: `Failed to rebase ${pr.owner}/${pr.repo}#${pr.number}`,
135+ tags: {
136+ pr,
137+ newMergeBase,
138+ rebaseResult,
139+ },
140+ });
141+ return { result: rebaseResult };
142+ }
Graphite ReviewerSparkle
Graphite Reviewerjust now
The calculation of durationMs is incorrect. It's currently calculating the duration from the current time to the start time, which will result in a negative duration. To fix this, swap the order of the arguments in the diff() method: DateTime.now().diff(startTime)
Spotted byGraphite Reviewer
Is this helpful?
👍
👎
Contextual to your code

Codebase awareness

Define & enforce custom patterns specific to your codebase.

Full-context feedback

Graphite Reviewer uses RAG (Retrieval-Augmented Generation) on your team's past pull requests to ensure that every piece of feedback makes sense in the context of your codebase.

Raise the code quality bar

Maintain consistent code patterns and quality standards across your entire codebase.

Ramp up new hires faster

Accelerate onboarding by providing personalized, contextual feedback on every pull request new engineers submit.

An image of Graphite Reviewer's feature that shows past PRs most similar to yours

Similar PRs

Graphite presents you with the past PRs most similar to yours, giving you historical context on every code change.

FAQ

Frequently asked questions

Still have questions? Reach out to our team.

Testimonials

What others have to say

See what other engineers have said about Graphite Reviewer

"
Graphite’s AI Code Review is very high signal, unlike other tools on the market. It found a months old bug in our codebase, that no human engineer could spot and so far, every highlighted issue has been a real problem.
Konrad Komorowski, Software Engineer
Isometric
"
We're seeing it comment on nits that we definitely would have missed, which is fantastic for improving our code quality.
Saket Gejji, CTO
Game Theory
"
It's actually impressive.
Cory Decker, CTO
Soar Energy Solutions
"
Graphite Reviewer has been great for us! It does a fantastic job at finding real problems with our code and not delivering a lot of noise.
Ruven Chu, Software Engineer
Goody
"
Graphite's AI Reviewer is a handy teammate who checks the PR quickly and saves your hours before merging your change. With this instant boost, development process time could decrease dramatically and ensure code quality level. Suggesting teams who aim for speed.
Ali Andaç, Software Engineer
Lasso MD
"
It's really fast (it caught things before our CI did). It caught things before PR reviewers did.
Reggie Escobar, Software Engineer
Soar Energy Solutions
"
I’ve been using it for two weeks now and have to say, while it has only triggered a handful of times, each time has been an incredibly helpful insight on something I overlooked as well as other members of my team.
Adam Walker, Co-Founder & CEO
Voxel Games
"
Graphite’s AI Code Review is very high signal, unlike other tools on the market. It found a months old bug in our codebase, that no human engineer could spot and so far, every highlighted issue has been a real problem.
Konrad Komorowski, Software Engineer
Isometric
"
We're seeing it comment on nits that we definitely would have missed, which is fantastic for improving our code quality.
Saket Gejji, CTO
Game Theory