Skip to content

feat(conversations): Name conversations after linked issues - #2218

Open
sentry-junior[bot] wants to merge 4 commits into
mainfrom
feat/conversation-title-linked-issues
Open

sentry-junior[bot] wants to merge 4 commits into
mainfrom
feat/conversation-title-linked-issues

Conversation

@sentry-junior

@sentry-junior sentry-junior Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

A conversation that starts with "Fix this " gets a vague title like "Verify Issue 1583 and Submit PR if Valid". The title model only sees the URL, so it can't tell what the issue is about.

This adds a provider-neutral conversationTitleContext plugin hook. Before core generates a title from the first human message, it asks plugins for short facts about objects linked in that message. The title model sees those facts under "Linked objects", and the prompt tells it to name the object by number and title (for example, Fix #1583: Login fails on Safari).

The GitHub plugin implements the hook. It finds up to 3 distinct issue, pull request, and commit references (URLs, GitHub autolinks such as owner/repo#123, and prose such as "issue 1583 on getsentry/junior") and reads each title.

The hook reads through host-owned credentialed egress (ctx.egress), not a token it mints itself. Title work runs outside the Turn, so core gives it a conversation-title system actor. Egress policy, grant selection, and audit telemetry apply. The system actor gets only installation grants, never user tokens, and title work never starts authorization. Reads reuse the shared installation lease, so no extra token is minted per object.

The hook is optional and fails open. Core stops waiting after 5 seconds, ignores hooks that throw, and caps how many lines plugins can return and how long each line can be. If nothing comes back, titles are generated the same way as before. Dispatched runs, which have no human message, don't call the hook.

Note: titles from private repositories in the installation can now show up in conversation titles. Junior can already read and quote that content in replies in the same conversation, with the same installation-read grant.

The new lifecycle eval (when the first message links a tracked issue…) needs a Roach recording. I couldn't record it locally without the write token, so it will record on its first CI run.

via BYK.

--

View Junior Session in Sentry

Add a conversationTitleContext plugin hook. Core passes the first human
message to plugins and gives the returned facts to the title model under
Linked objects. The GitHub plugin reads the titles of linked issues and
pull requests with a read-only token scoped to each repository.

Co-Authored-By: BYK <burak.kaya@sentry.io>
@vercel

vercel Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
junior-docs Ready Ready Preview Oct 25, 2026 3:24pm UTC

Request Review

@sentry-evals

sentry-evals Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Sentry Evals

junior-integration

Run Status Passed Failed Errored Cost Tokens Duration
Head Failed 101 1 0 $0.85 0 309.61s

Base commit 85b8954 has no eval run to compare against.

@BYK BYK left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally it would detect anything listed here, assuming github: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/autolinked-references-and-urls

Also alternatives like:

  • Let's fix issue 1583 on getsentry/junior
  • Let's get PR 1234 fixed up

etc.

…itles

Detect issue, pull request, and commit references in the forms that
GitHub autolinks, and in prose such as "issue 1583 on getsentry/junior"
or "PR 1234". A reference without a repository uses the one repository
that the message names, or else the configured github.repo. The title
context hook now gets the plugin's config values for the Location.
Add the linked object instruction only when plugins return title context.
Other title requests then match their eval recordings again, so evals such
as the image edit case replay instead of running live.
@BYK
BYK requested a review from dcramer October 25, 2026 10:17
The title context hook minted its own installation token and called
GitHub directly. That skipped Junior's credential proxy: egress policy,
grant selection, lease reuse, and audit telemetry.

Core now gives the hook host-owned egress as a conversation-title system
actor. The GitHub hook reads issues, pull requests, and commits through
it. The system actor gets only installation grants, never user tokens,
and title work never starts authorization. Reads reuse the shared
installation lease, so title context no longer mints a token per object.

Co-Authored-By: BYK <burak.kaya@sentry.io>

This branch was successfully deployed

1 active deployment
Preview – junior-docs — 44989651 Deployed Oct 25, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk: high PR risk score: high

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant