Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions apps/web/app/(main)/agents/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
countFilesByKind,
getAgentDefinitionBlock,
getAgentInstallSummaryDescription,
getAgentJobIntentLede,
getAgentMetaDescription,
getAgentMetadataTitle,
getAgentOgImageAlt,
Expand Down Expand Up @@ -172,6 +173,7 @@ async function AgentDetailContent({ agent }: { agent: AgentWithAuthor }) {
const moreFromAuthorCount = authorAgents.filter(
(a) => a.id !== agent.id,
).length
const jobIntentLede = getAgentJobIntentLede(agent.slug)

return (
<main className="mx-auto w-full min-w-0 max-w-4xl px-4 pt-10 pb-28 sm:pb-10">
Expand Down Expand Up @@ -210,6 +212,11 @@ async function AgentDetailContent({ agent }: { agent: AgentWithAuthor }) {
/>
</Suspense>
</div>
{jobIntentLede ? (
<p className="mt-2 text-muted-foreground text-sm">
{jobIntentLede}
</p>
) : null}
<div className="mt-3 flex flex-wrap items-center gap-x-4 gap-y-1 text-muted-foreground text-sm">
{agent.authorUsername ? (
<Link
Expand Down
17 changes: 17 additions & 0 deletions apps/web/lib/agent-detail.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,16 @@ export function getAgentInstallSummaryDescription({
}
}

// Job-intent title for the code-reviewer play only. Other slugs keep the
// name-based budget logic below. Length is 48 so ` · evex` stays ≤ 60.
const CODE_REVIEWER_METADATA_TITLE =
'Eve PR review agent - install @evex/code-reviewer'

export function getAgentMetadataTitle(agent: AgentWithAuthor): string {
if (agent.slug === 'code-reviewer') {
return CODE_REVIEWER_METADATA_TITLE
}

const installTitle = `${agent.name} - install @evex/${agent.slug}`
if (installTitle.length <= METADATA_TITLE_BUDGET) {
return installTitle
Expand All @@ -108,6 +117,14 @@ export function getAgentMetadataTitle(agent: AgentWithAuthor): string {
return agent.name
}

// Single lede under the agent H1. code-reviewer only; other slugs render none.
export function getAgentJobIntentLede(slug: string): string | null {
if (slug === 'code-reviewer') {
return 'PR review agent for Eve.'
}
return null
}

// Replace `[text](destination)` with `text`, including destinations that use
// balanced parentheses (e.g. Wikipedia-style `Function_(mathematics)` URLs).
function stripMarkdownLinks(value: string): string {
Expand Down
41 changes: 40 additions & 1 deletion apps/web/tests/agent-detail.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
countFilesByKind,
getAgentDefinitionBlock,
getAgentInstallSummaryDescription,
getAgentJobIntentLede,
getAgentMetaDescription,
getAgentMetadataTitle,
getAgentOgImageAlt,
Expand Down Expand Up @@ -100,6 +101,30 @@ describe('getAgentMetadataTitle', () => {
expect(getAgentMetadataTitle(agent)).toBe('Short - install @evex/short')
})

it('overrides the title for code-reviewer only', () => {
const agent = makeAgent({
name: 'Code Reviewer',
slug: 'code-reviewer',
title: 'Code Reviewer',
})
expect(getAgentMetadataTitle(agent)).toBe(
'Eve PR review agent - install @evex/code-reviewer',
)
expect(getAgentMetadataTitle(agent).length).toBeLessThanOrEqual(
METADATA_TITLE_BUDGET,
)
})

it('keeps the name-based pattern for other agents', () => {
const agent = makeAgent({
name: 'Eve Agent Builder',
slug: 'eve-agent-builder',
})
expect(getAgentMetadataTitle(agent)).toBe(
'Eve Agent Builder - install @evex/eve-agent-builder',
)
})

it('never exceeds the metadata length budget', () => {
const agent = makeAgent({
name: 'A very long agent display name that keeps going',
Expand All @@ -119,6 +144,16 @@ describe('getAgentMetadataTitle', () => {
})
})

describe('getAgentJobIntentLede', () => {
it('returns the code-reviewer lede only', () => {
expect(getAgentJobIntentLede('code-reviewer')).toBe(
'PR review agent for Eve.',
)
expect(getAgentJobIntentLede('eve-agent-builder')).toBeNull()
expect(getAgentJobIntentLede('short')).toBeNull()
})
})

describe('getAgentMetaDescription', () => {
it('strips inline Markdown markers from the SERP description', () => {
const agent = makeAgent({
Expand Down Expand Up @@ -394,7 +429,11 @@ describe('registry agent titles fit the rendered title tag', () => {

expect(rendered.length).toBeLessThanOrEqual(METADATA_TITLE_MAX_LENGTH)
expect(title).not.toContain('| evex')
expect(title.startsWith(agent.name)).toBe(true)
if (agent.slug === 'code-reviewer') {
expect(title).toBe('Eve PR review agent - install @evex/code-reviewer')
} else {
expect(title.startsWith(agent.name)).toBe(true)
}
})
}
})
Expand Down
4 changes: 2 additions & 2 deletions registry/code-reviewer/registry.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"name": "code-reviewer",
"type": "registry:item",
"title": "Code Reviewer",
"description": "Review GitHub pull requests from a native GitHub App channel. Mention `@code-reviewer` on a pull request to publish a GitHub review with inline comments, optional suggestion blocks, and Upstash-backed rate limiting for public repositories.",
"description": "Eve agent that reviews GitHub pull requests. Mention @code-reviewer on a PR to publish a GitHub review with inline comments on bugs and regressions, not style.",
Comment thread
cursor[bot] marked this conversation as resolved.
"categories": [
"coding"
],
Expand Down Expand Up @@ -92,7 +92,7 @@
"slug": "code-reviewer",
"category": "coding",
"createdAt": "2026-06-20T00:00:00.000Z",
"updatedAt": "2026-07-04T00:00:00.000Z",
"updatedAt": "2026-08-20T00:00:00.000Z",
"docs": {
"overview": [
"Code Reviewer is an eve agent that reviews GitHub pull requests when someone mentions @code-reviewer in a PR comment or a review thread. It runs behind a native GitHub App channel: GitHub delivers the comment webhook to your deployed eve app at /eve/v1/github, and the agent replies by publishing a real GitHub review with inline comments anchored to the diff.",
Expand Down
Loading