Indent Review
Other code reviewers create more work. Indent Review does it for you.
Indent Review is what AI code review should be: it gives feedback like your best teammates would, fixes what it finds, and gets better over time

Load team conventions
Load team conventions
Load team conventions
Load team conventions
Extremely in-depth review
Extremely in-depth review
Extremely in-depth review
Extremely in-depth review
High-signal feedback only
High-signal feedback only
High-signal feedback only
High-signal feedback only
Fixes automatically applied
Fixes automatically applied
Fixes automatically applied
Fixes automatically applied
System rules
Always use design tokens for colors, never plain hexcodes
Always use semantic values in components
Never introduce spacing values that aren't in the design system
Ran 9 commands, Searched 5 patterns, Read 17 files
Posted 4 comments
Indent Code is addressing 3 comments



indent
bot
commented
indent
bot
left a comment
Author
Partial token adoption: The boxShadow property mixes token and hardcoded values. The first shadow layer correctly uses --shadow-color-sm, but the second layer contains a raw oklch value, bypassing the design system. ( src/components/Tooltip.tsx line 112)
Change proposed by
Indent Code
112
-
0 10px 24px -4px oklch(0.25 0.02 260 / 0.18)
112
-
0 10px 24px -4px var(--shadow-color-lg)
Accept change
Reject

Load team conventions
Extremely in-depth review
High-signal feedback only
Fixes automatically applied
System rules
Always use design tokens for colors, never plain hexcodes
Always use semantic values in components
Never introduce spacing values that aren't in the design system
Ran 9 commands, Searched 5 patterns, Read 17 files
Posted 4 comments
Indent Code is addressing 3 comments

indent
bot
commented
indent
bot
left a comment
Author
Partial token adoption: The boxShadow property mixes token and hardcoded values. The first shadow layer correctly uses --shadow-color-sm, but the second layer contains a raw oklch value, bypassing the design system. ( src/components/Tooltip.tsx line 112)
Change proposed by
Indent Code
112
-
0 10px 24px -4px oklch(0.25 0.02 260 / 0.18)
112
-
0 10px 24px -4px var(--shadow-color-lg)
Accept change
Reject
A great code review is…
Instant: reviews complete within minutes of a PR being opened

2 min ago
2 min ago
Add rate limiting to /api/upload #847
Opened 2 minute ago
Open
ash-uxi
wants to merge 2 commits into
main
from
indent-bot/pr-review-workflow-75833f62
1 min ago
1 min ago

Indent
bot
left a comment 1 minute ago
Summary
There are a couple failing CI checks, but they're not related to this PR, so we can ignore them. The real issue is that we haven't updated the tests according to the new functionality. More details below:
▶︎
●
frontend / tests (push)
•
Autofix
▶︎
●
backend / typecheck (push)
•
Autofix
▶︎
●
backend / lint (push)
•
Autofix

2 min ago
Add rate limiting to /api/upload #847
Opened 2 minute ago
Open
ash-uxi
wants to merge 2 commits into
main
from
indent-bot/pr-review-workflow-75833f62
1 min ago

Indent
bot
left a comment 1 minute ago
Summary
There are a couple failing CI checks, but they're not related to this PR, so we can ignore them. The real issue is that we haven't updated the tests according to the new functionality. More details below:
▶︎
●
frontend / tests (push)
•
Autofix
▶︎
●
backend / typecheck (push)
•
Autofix
▶︎
●
backend / lint (push)
•
Autofix

2 min ago
Add rate limiting to /api/upload #847
Opened 2 minute ago
Open
ash-uxi
wants to merge 2 commits into
main
from
indent-bot/pr-review-workflow-75833f62
1 min ago

Indent
bot
left a comment 1 minute ago
Summary
There are a couple failing CI checks, but they're not related to this PR, so we can ignore them. The real issue is that we haven't updated the tests according to the new functionality. More details below:
▶︎
●
frontend / tests (push)
•
Autofix
▶︎
●
backend / typecheck (push)
•
Autofix
▶︎
●
backend / lint (push)
•
Autofix

2 min ago
Add rate limiting to /api/upload #847
Opened 2 minute ago
Open
ash-uxi
wants to merge 2 commits into
main
from
indent-bot/pr-review-workflow-75833f62
1 min ago

Indent
bot
left a comment 1 minute ago
Summary
There are a couple failing CI checks, but they're not related to this PR, so we can ignore them. The real issue is that we haven't updated the tests according to the new functionality. More details below:
▶︎
●
frontend / tests (push)
•
Autofix
▶︎
●
backend / typecheck (push)
•
Autofix
▶︎
●
backend / lint (push)
•
Autofix
Exhaustive: all related code, earlier changes, and stored info are considered

Considered 147 files, 23 previous PRs, and 4 months of history
Read:
src/api/upload.ts
Read:
src/middleware/rateLimit.ts
git log:
Last modified by @sarah 12 days ago
Search:
Found 8 matches across 6 files
Observation:
review from PR #792, discussion about Redis approach
Read:
src/config/limits.ts
This PR adds rate limiting but there's an existing rate limiter in middleware. Checking if they're compatible and looking at how the team has handled this pattern before.
Grep:
Found in api.test.ts, integration/upload.test.ts

Considered 147 files, 23 previous PRs, and 4 months of history
Read:
src/api/upload.ts
Read:
src/middleware/rateLimit.ts
git log:
Last modified by @sarah 12 days ago
Search:
Found 8 matches across 6 files
Observation:
review from PR #792, discussion about Redis approach
Read:
src/config/limits.ts
This PR adds rate limiting but there's an existing rate limiter in middleware. Checking if they're compatible and looking at how the team has handled this pattern before.
Grep:
Found in api.test.ts, integration/upload.test.ts

Considered 147 files, 23 previous PRs, and 4 months of history
Read:
src/api/upload.ts
Read:
src/middleware/rateLimit.ts
git log:
Last modified by @sarah 12 days ago
Search:
Found 8 matches across 6 files
Observation:
review from PR #792, discussion about Redis approach
Read:
src/config/limits.ts
This PR adds rate limiting but there's an existing rate limiter in middleware. Checking if they're compatible and looking at how the team has handled this pattern before.
Grep:
Found in api.test.ts, integration/upload.test.ts

Considered 147 files, 23 previous PRs, and 4 months of history
Read:
src/api/upload.ts
Read:
src/middleware/rateLimit.ts
git log:
Last modified by @sarah 12 days ago
Search:
Found 8 matches across 6 files
Observation:
review from PR #792, discussion about Redis approach
Read:
src/config/limits.ts
This PR adds rate limiting but there's an existing rate limiter in middleware. Checking if they're compatible and looking at how the team has handled this pattern before.
Grep:
Found in api.test.ts, integration/upload.test.ts
High signal: concise, practical feedback that your team won’t tune out


Indent
bot
The error handler returns the full user object including email and created_at . On a 500, this leaks PII to the client.
needs to be authenticated
👍 6
🚀 4

Indent
bot
getOrgMembers() runs inside the loop. One query per team. With 50 teams, that's ~2s added latency. A single batch query would fix this.
👍 3
🎉 5

Indent
bot
webhook.payload.repository is undefined for org-level events like member_added. This .split() will throw a TypeError on those webhooks.
👍 5


Indent
bot
The error handler returns the full user object including email and created_at . On a 500, this leaks PII to the client.
needs to be authenticated
👍 6
🚀 4

Indent
bot
getOrgMembers() runs inside the loop. One query per team. With 50 teams, that's ~2s added latency. A single batch query would fix this.
👍 3
🎉 5

Indent
bot
webhook.payload.repository is undefined for org-level events like member_added. This .split() will throw a TypeError on those webhooks.
👍 5


Indent
bot
The error handler returns the full user object including email and created_at . On a 500, this leaks PII to the client.
needs to be authenticated
👍 6
🚀 4

Indent
bot
getOrgMembers() runs inside the loop. One query per team. With 50 teams, that's ~2s added latency. A single batch query would fix this.
👍 3
🎉 5

Indent
bot
webhook.payload.repository is undefined for org-level events like member_added. This .split() will throw a TypeError on those webhooks.
👍 5


Indent
bot
The error handler returns the full user object including email and created_at . On a 500, this leaks PII to the client.
needs to be authenticated
👍 6
🚀 4

Indent
bot
getOrgMembers() runs inside the loop. One query per team. With 50 teams, that's ~2s added latency. A single batch query would fix this.
👍 3
🎉 5

Indent
bot
webhook.payload.repository is undefined for org-level events like member_added. This .split() will throw a TypeError on those webhooks.
👍 5
An Indent Review is even better.
You'll come back to ready-to-merge changes, not just comments.
1
PR opened
Update repo sync to handle warnings separately
Open
ash-uxi
wants to merge 1 commit into
main
from
indent-bot/pr-review-workflow-75833f62
2
Feedback received

Indent
bot
left a comment 12 minutes ago
3 potential issues found
Output redirect conflict
2>&1 merges stderr into stdout — warning check unreachable
python_modules/prime_server/exponent_server/core/services/e2b/sandbox•py
659
651
+
await write_update_script(sandbox)
660
652
+
update_result = await sandbox.commands.run(
661
666
+
f"/tmp/update_repo.sh /root/{repository.github_repo_name} 2>&1",
666
653
+
f"/tmp/update_repo.sh /root/{repository.github_repo_name}",
3
Issues addressed automatically
Indent
bot
left a comment
Author
⛔ 3 issues found. Addressing feedback…
Indent Code is working...
Indent Code is working...
Indent Code is working...
Indent Code is working...
Indent Code is working...
Indent Code is working...
4
Changes merged 5x faster
Worked for 1 mins
+1
Worked for 3 mins
+8
-3
Worked for 8 mins
+18
-26
Update repo sync to handle warnings separately
Merged
ash-uxi
merged 1 commit into
main
from
indent-bot/pr-review-workflow-75833f62

python_modules/prime_server/models/incident_event.py
32
-
incident_id = sa.Column(sa.Text, nullable=False)
32
+
incident_id = sa.Column(sa.Text, nullable=False, unique=True)

jsegaran
Commented 15 minutes ago
@indent check our prod data to see if any of it could violate this new constraint

indent
bot
commented 12 minutes ago
I checked prod and found 23 duplicate incident_id values. Two options, let me know which one you'd like to proceed with.
Loosen: make it unique per
(tenant_id, incident_id)(or partial unique for non-resolved), depending on intent.Backfill: merge duplicates (pick canonical row, re-point FKs, delete extras) then add the unique constraint.

python_modules/prime_server/models/incident_event.py
32
-
incident_id = sa.Column(sa.Text, nullable=False)
32
+
incident_id = sa.Column(sa.Text, nullable=False, unique=True)

jsegaran
Commented 15 minutes ago
@indent check our prod data to see if any of it could violate this new constraint

indent
bot
commented 12 minutes ago
I checked prod and found 23 duplicate incident_id values. Two options, let me know which one you'd like to proceed with.
Loosen: make it unique per
(tenant_id, incident_id)(or partial unique for non-resolved), depending on intent.Backfill: merge duplicates (pick canonical row, re-point FKs, delete extras) then add the unique constraint.

python_modules/prime_server/models/incident_event.py
32
-
incident_id = sa.Column(sa.Text, nullable=False)
32
+
incident_id = sa.Column(sa.Text, nullable=False, unique=True)

jsegaran
Commented 15 minutes ago
@indent check our prod data to see if any of it could violate this new constraint

indent
bot
commented 12 minutes ago
I checked prod and found 23 duplicate incident_id values. Two options, let me know which one you'd like to proceed with.
Loosen: make it unique per
(tenant_id, incident_id)(or partial unique for non-resolved), depending on intent.Backfill: merge duplicates (pick canonical row, re-point FKs, delete extras) then add the unique constraint.

python_modules/prime_server/models/incident_event.py
32
-
incident_id = sa.Column(sa.Text, nullable=False)
32
+
incident_id = sa.Column(sa.Text, nullable=False, unique=True)

jsegaran
Commented 15 minutes ago
@indent check our prod data to see if any of it could violate this new constraint

indent
bot
commented 12 minutes ago
I checked prod and found 23 duplicate incident_id values. Two options, let me know which one you'd like to proceed with.
Loosen: make it unique per
(tenant_id, incident_id)(or partial unique for non-resolved), depending on intent.Backfill: merge duplicates (pick canonical row, re-point FKs, delete extras) then add the unique constraint.

python_modules/prime_server/models/incident_event.py
32
-
incident_id = sa.Column(sa.Text, nullable=False)
32
+
incident_id = sa.Column(sa.Text, nullable=False, unique=True)

jsegaran
Commented 15 minutes ago
@indent check our prod data to see if any of it could violate this new constraint

indent
bot
commented 12 minutes ago
I checked prod and found 23 duplicate incident_id values. Two options, let me know which one you'd like to proceed with.
Loosen: make it unique per
(tenant_id, incident_id)(or partial unique for non-resolved), depending on intent.Backfill: merge duplicates (pick canonical row, re-point FKs, delete extras) then add the unique constraint.
Responds like a teammate
Tag @indent in any comment thread to get its input, tell it to remember something, or ask it for changes
Follows custom rules
Increase review quality for everyone by telling Indent about your team’s style and patterns.

Custom rules
These rules are automatically included in every Agent conversation
Frontend
3 rules
-
- Data fetching via React Query; no ad-hoc useEffect fetches
-
- Use the shared design system components first; don’t hand-roll buttons/modals
-
- No non-null assertions (!) in app code; handle the null case or narrow the type
Backend
2 rules
-
- Prefer SQLAlchemy 2.0 style (select(), Session.execute) over legacy .query()
-
- Error handling: map known failures to typed HTTP errors
Database
1 rule
-
- Any new constraint/index must include a preflight query to check for existing prod violations
Add rule

Custom rules
These rules are automatically included in every Agent conversation
Frontend
3 rules
-
- Data fetching via React Query; no ad-hoc useEffect fetches
-
- Use the shared design system components first; don’t hand-roll buttons/modals
-
- No non-null assertions (!) in app code; handle the null case or narrow the type
Backend
2 rules
-
- Prefer SQLAlchemy 2.0 style (select(), Session.execute) over legacy .query()
-
- Error handling: map known failures to typed HTTP errors
Database
1 rule
-
- Any new constraint/index must include a preflight query to check for existing prod violations
Add rule

Custom rules
These rules are automatically included in every Agent conversation
Frontend
3 rules
-
- Data fetching via React Query; no ad-hoc useEffect fetches
-
- Use the shared design system components first; don’t hand-roll buttons/modals
-
- No non-null assertions (!) in app code; handle the null case or narrow the type
Backend
2 rules
-
- Prefer SQLAlchemy 2.0 style (select(), Session.execute) over legacy .query()
-
- Error handling: map known failures to typed HTTP errors
Database
1 rule
-
- Any new constraint/index must include a preflight query to check for existing prod violations
Add rule

Custom rules
These rules are automatically included in every Agent conversation
Frontend
3 rules
-
- Data fetching via React Query; no ad-hoc useEffect fetches
-
- Use the shared design system components first; don’t hand-roll buttons/modals
-
- No non-null assertions (!) in app code; handle the null case or narrow the type
Backend
2 rules
-
- Prefer SQLAlchemy 2.0 style (select(), Session.execute) over legacy .query()
-
- Error handling: map known failures to typed HTTP errors
Database
1 rule
-
- Any new constraint/index must include a preflight query to check for existing prod violations
Add rule

Custom rules
These rules are automatically included in every Agent conversation
Frontend
2 rules
-
- Data fetching via React Query; no ad-hoc useEffect fetches
-
- Use the shared design system components first; don’t hand-roll buttons/modals
-
- No non-null assertions (!) in app code; handle the null case or narrow the type
Backend
2 rules
-
- Prefer SQLAlchemy 2.0 style (select(), Session.execute) over legacy .query()
-
- Error handling: map known failures to typed HTTP errors
Database
1 rule
-
- Any new constraint/index must include a preflight query to check for existing prod violations
Add rule

Observations
Patterns Indent discovers from your code and conversations
・
Uses early returns to reduce nesting
Source: Positive response
·
Approved 2 days ago
·
Applied in 34 reviews
・
Imports React hooks individually
Source: Code patterns
·
Approved 3 days ago
·
Applied in 12 reviews
・
Prefers const assertions for literal types
Source: Ignored comments
·
Approved 3 days ago
·
Applied in 28 reviews
・
Prefers kebab-case for file naming
PR #847
·
Pending approval
Approve
Reject

Observations
Patterns Indent discovers from your code and conversations
・
Uses early returns to reduce nesting
Source: Positive response
·
Approved 2 days ago
·
Applied in 34 reviews
・
Imports React hooks individually
Source: Code patterns
·
Approved 3 days ago
·
Applied in 12 reviews
・
Prefers const assertions for literal types
Source: Ignored comments
·
Approved 3 days ago
·
Applied in 28 reviews
・
Prefers kebab-case for file naming
PR #847
·
Pending approval
Approve
Reject

Observations
Patterns Indent discovers from your code and conversations
・
Uses early returns to reduce nesting
Source: Positive response
·
Approved 2 days ago
·
Applied in 34 reviews
・
Imports React hooks individually
Source: Code patterns
·
Approved 3 days ago
·
Applied in 12 reviews
・
Prefers const assertions for literal types
Source: Ignored comments
·
Approved 3 days ago
·
Applied in 28 reviews
・
Prefers kebab-case for file naming
PR #847
·
Pending approval
Approve
Reject

Observations
Patterns Indent discovers from your code and conversations
・
Uses early returns to reduce nesting
Source: Positive response
·
Approved 2 days ago
·
Applied in 34 reviews
・
Imports React hooks individually
Source: Code patterns
·
Approved 3 days ago
·
Applied in 12 reviews
・
Prefers const assertions for literal types
Source: Ignored comments
·
Approved 3 days ago
·
Applied in 28 reviews
・
Prefers kebab-case for file naming
PR #847
·
Pending approval
Approve
Reject

Observations
Patterns Indent discovers from your code and conversations
・
Uses early returns to reduce nesting
Source: Positive response
·
Approved 2 days ago
·
Applied in 34 reviews
・
Imports React hooks individually
Source: Code patterns
·
Approved 3 days ago
·
Applied in 12 reviews
・
Prefers const assertions for literal types
Source: Ignored comments
·
Approved 3 days ago
·
Applied in 28 reviews
・
Prefers kebab-case for file naming
PR #847
·
Pending approval
Approve
Reject
Improves on its own
Indent Review learns and updates its knowledge based on every piece of feedback it makes and sees
Spend a few minutes to save weeks
Spend a few minutes to save weeks
Spend a few minutes to save weeks
Spend a few minutes to save weeks
1
Connect your GitHub repo
Connect your GitHub repo
Connect your GitHub repo
Connect your GitHub repo
One-click signup and setup
One-click signup and setup
One-click signup and setup
One-click signup and setup
2
Indent Review gets to work
Indent Review gets to work
Indent Review gets to work
Indent Review gets to work
Indent starts looking at recent PRs
Indent starts looking at recent PRs
Indent starts looking at recent PRs
Indent starts looking at recent PRs


Agents
Local Agent
Cloud Agent
Database Agent
PR Review Agent
Incident Response
Resources
Documentation
Blog
Company
Careers
README
Privacy policy
LInks
X.com


Agents
Local Agent
Cloud Agent
Database Agent
PR Review Agent
Incident Response
Resources
Documentation
Blog
Company
Careers
README
Privacy policy
LInks
X.com


Agents
Local Agent
Cloud Agent
Database Agent
PR Review Agent
Incident Response
Resources
Documentation
Blog
Company
Careers
README
Privacy policy
LInks
X.com


Agents
Local Agent
Cloud Agent
Database Agent
PR Review Agent
Incident Response
Resources
Documentation
Blog
Company
Careers
README
Privacy policy
LInks
X.com


Agents
Local Agent
Cloud Agent
Database Agent
PR Review Agent
Incident Response
Resources
Documentation
Blog
Company
Careers
README
Privacy policy
LInks
X.com