Jan 2024 – Oct 2026 · data as of 2026-10-19

How Raycast's Review Loop Leaks Extensions

PRs to the Raycast Store more than doubled between 2024 and 2026, the same period coding agents went mainstream. PRs to existing extensions still merge quickly. New extensions increasingly stall: most contributors respond to the first review comments, often Greptile's, then stop after the next round of review. Others sit as drafts that were never marked ready, or wait weeks for one of the two maintainers who review them.

This report follows that loop (open a PR, get review comments, push fixes, get re-reviewed) and shows where contributors drop out of it. As an author of 18 original extensions and contributor to 23 others, I have substantial first-hand knowledge of this loop.

The queue

More PRs, and more of them drafts.

2.1×more PRs

899 a quarter on average in 2024; 1,924 in the first three quarters of 2026

1 in 6never marked ready

new submissions in 2026-H1 that stayed drafts, so they never entered the review queue (267 of 1,529)

Review

Where the rounds go.

2 in 3got a maintainer reply

of new submissions the stale bot closed in 2026; most contributors had responded to earlier review comments

27%mechanical

of Greptile's review comments fall in categories a local script could check

What to change

Five changes to make, ordered by cost-benefit ratio

Each is sized against 2026-H1, when 1,529 new-extension submissions were opened and 572 merged.

1

Put Greptile's rules in the repo

Reach: Every PRCost: Low

Move Greptile's custom rules into a .greptile/ folder in raycast/extensions, Greptile's recommended setup: version-controlled, reviewed in PRs, readable by contributors and their agents. Ship the deterministic rules as a local check.

Trade-off. The rules become public, so people can write to them; rule changes go through PR review, which adds process and an audit trail.

2

Replace the PR checklist with checks

Reach: Every PRCost: Low

The five checkboxes are the contributor's self-attestations. Two are file checks a script can verify, and the build half of a third is already run by CI. Move those to CI and keep what only the contributor knows: a Store search, a promise to mark ready, testing the build in Raycast, which platforms they tested on (macOS, Windows, or both), a screencast, and whether they can respond to review. If the contributor couldn't test on one platform, a needs Windows tester (or macOS) label asks a volunteer to try it there.

Trade-off. CI checks need upkeep; the checkboxes cost nothing to maintain, but nothing enforces them.

3

Make the draft step impossible to miss

Reach: 1 in 6 new submissionsCost: Low

In 267 of 1,529 submissions, the PR was never marked ready. Have raycastbot comment on a quiet draft that review starts when it's marked ready, print the same in ray publish output, and stop automatic Greptile reviews on drafts (#32497, triggerOnDrafts: false) so marking it ready triggers one clean Greptile review.

Trade-off. Drafts lose automatic early feedback; contributors who want it can ask Greptile with a comment.

4

Steer duplicates before they're built

Reach: 1 in 4 new submissionsCost: Medium

In 353 of 1,529 submissions, a maintainer or Greptile told the contributor a similar extension already exists, and redirects rarely turn into contributions: of 460 unmerged submissions across the window where a reviewer linked a specific Store extension, 33 (7%) were followed by a merged PR from the same contributor to that extension. Move the search earlier: show matching Store extensions when a contributor starts a new extension, and have a bot ask what they want to change and propose how to add it to the existing extension first. If the need is different enough, the submission passes that gate and proceeds as a new extension. The docs would also need to cover how to extend someone else's extension for an unusual need, which today takes back-and-forth and deep platform knowledge.

Trade-off. A step before every new submission, which contributors can read as a barrier; owners of existing extensions get more PRs to review. Transferring ownership is the other route, but it's delicate when the current owner is still around.

5

Pause the stale clock while Raycast reviews

Reach: 368 stale-closed after reviewCost: Medium

Raycast's maintainers are the gate, so time a PR spends waiting on a maintainer shouldn't count against the contributor. When maintainer review slows (a maintainer is away, the queue spikes), the stale bot closes PRs for inactivity that isn't the contributor's. Of 368 submissions the stale bot closed after a maintainer reply, in 271 the contributor had responded to earlier review comments and a reviewer commented last; in 185 of those, the contributor's last commit or comment came before the first maintainer reply. They addressed Greptile's comments, waited, and didn't come back after the maintainer's review. Have raycastbot apply an awaiting review label when the contributor pushes after review comments, exempt it from the stale bot, and restart the clock when a maintainer replies. Pair it with a complete checklist in the maintainer's first review, so it's the last round.

Trade-off. Paused PRs can pile up in the maintainers' queue. A clock that always runs makes contributors shepherd their work forward; pausing only while the PR waits on a maintainer keeps that pressure on the contributor's turns.

Timeline

What changed, and when

Each event below also appears, by its icon, on the month-by-month charts, when it falls in the range shown. Toggle the layers to declutter, or narrow the charts to the Greptile era.

Months from 2026-09 on are provisional: those PRs haven't been open long enough to be stale-closed.
Volume

Twice the PRs, more than twice the new extensions

2024 was flat at about 300 PRs a month. Growth starts in late 2025 and holds through 2026: 6,418 PRs in the first nine and a half months of 2026, against 3,594 in all of 2024. New-extension submissions grew fastest, from 1,021 in 2024 to 2,420 so far in 2026.

September 2026 is the busiest month in the data (889 PRs), the first full month after Raycast 2.0 launched on August 25. Volume also rose after Windows opened to extension developers in September 2025 and around the Windows public beta in November. The data shows the timing; it can't show what caused it.

PRs opened per month

Human-authored PRs by type, by month opened.

Show as table
Outcomes

PRs to existing extensions still merge. New extensions increasingly don't.

PRs to existing extensions merge about 80–92% of the time across the whole window. For new extensions the merge rate fell from 57% to 37%, and the share the stale bot closed nearly tripled, from 16% to 43%.

Contributors closing their own submissions held at 16–27% through 2026-Q2 (resubmissions counted once). Closures by anyone else (maintainers, extension owners or other accounts) stayed under 10% in every quarter. The growth is almost entirely in stale-bot closes.

The 2026-Q3 drop to 24% is partly the stale bot's longer clock (25 + 7 days from June 2) and partly that September's PRs haven't had time to go stale. October is too new to read.

How PRs opened each month ended

Counts by month opened. Resubmitted new-extension PRs are counted once, under the final PR. Click a series to hide it.

Show as table

Merge and auto-close rates

Share of submissions opened that month, new vs. existing extensions.

Show as table
Why they close

Inside the loop: why new submissions get auto-closed

New submissions the stale bot closed fall into three groups. In 2026, nearly two thirds had a maintainer reply first (503 of 799: 211 of 338 in Q1, 157 of 286 in Q2, 135 of 175 in Q3). In most of those the contributor had responded to earlier review comments (often Greptile's) and a reviewer commented last: 143 of the 211 in Q1, 128 of 157 in Q2. Cases where the contributor pushed or replied last and was waiting on a reviewer were small (9–26 a quarter in 2026).

About a quarter were never marked ready for review (22–39% of stale-bot closes each quarter since 2025-Q2). ray publish opens the PR as a draft, and review starts when it's marked ready; maintainers only occasionally comment on drafts (none of 2026-H1's 267 never-ready submissions got a maintainer reply). Through February 2025, contributors opened 1–8% of PRs a month as drafts; from 2025-Q2 through 2026-Q3 it's 57–68% a quarter. 17–24% of new submissions from 2025-Q2 through 2026-Q2 were never marked ready, against under 1% in 2024. The stale bot doesn't exempt drafts.

The rest were marked ready and never got a comment or review from a maintainer: 36 in 2026-Q1 and 58 in 2026-Q2, when maintainer review was slowest. Many more PRs are drafts at close than were never ready: maintainers often convert a PR back to draft while they wait for fixes.

Contributor runsray publish PR opened1,274 as drafts · 255 ready Marked ready1,262 (83%) ReviewGreptile reviews within minutesmaintainer reply: median 14 days Merged572 (37%) review comments → contributor pushes fixes → repeat in 353 of 1,529, a maintainer or Greptile pointed to a similar extension Never marked ready: 267 162 closed as drafts by the stale bot105 closed by the contributor Closed by a person 193 by the contributor35 by a maintainer Closed by the stale bot after ready: 462 94 never got a maintainer reply 368 had a maintainer reply before closing: 271 had responded; a reviewer commented last (185 of them last acted before a maintainer replied) 55 never responded · 42 were waiting on a reviewer
The submission loop for new extensions opened January–June 2026 (1,529). Red boxes are stale-bot closes. Every submission ends in Merged or in exactly one of the bottom boxes. By outcome: 572 merged, 624 closed by the stale bot, 298 closed by the contributor, 35 closed by a maintainer.

Drafts

Share of all PRs opened as drafts; share of new submissions never marked ready; share of auto-closed new submissions never marked ready.

Show as table

New submissions the stale bot closed, by what happened first

Never-ready PRs never entered the review queue. The rest did.

Show as table
What didn't ship

Original extensions that died on the vine

Ten new extensions that contributors built, reviewers commented on, and that closed unmerged. Each was substantial (thousands of lines) and the contributor responded to at least one round of review comments. How much each overlaps what's in the Store varies; the cards say. In seven, a maintainer redirected the contributor to an existing extension.

Across the whole window, in 460 unmerged submissions a reviewer (a maintainer or Greptile) linked a specific Store extension; 33 of those contributors (7%) later had a PR to it merged. That counts only the first linked extension, so it's a rough measure, not a precise one. The extensions contributors were sent to are often small: Perry has 69 downloads, 7TV Emotes Search 31, Amp Dash X 99.

2026-07 · Closed by the stale bot

Five commands for Amp, the coding agent: start a thread, capture a window into a thread, track running threads from the menu bar.

A maintainer redirected it to Amp Dash X (99 downloads). That extension's author replied that it is "super basic and won't get any future updates", offered to transfer ownership, and after the auto-close asked maintainers to reconsider.

TickTick Cloud

#30286
2026-08 · Closed by the stale bot

TickTick for Windows: OAuth sign-in, six task commands and three AI tools, with tests.

A maintainer redirected it to TickTick+ (164 downloads). Both TickTick+ and TickTick (25,304 downloads) list macOS only, so Windows users still have no TickTick extension.

Coolify Ops

#24709
2026-01 · Closed by the contributor

14 commands covering the full Coolify API: applications, deployments, databases, services, servers.

Another contributor, then a maintainer, pointed to the existing Coolify extension (612 downloads), and its owner confirmed it's actively maintained and invited contributions. The contributor kept it for private use and closed the PR: "I'll be just using it privately for now then and if there's time consider contributing!"

PostgreSQL

#31117
2026-09 · Closed by the contributor

A Postgres client with schema browsing, history, saved connections, and Raycast AI tools with read-only transactions and row limits.

A maintainer praised the safety work and pointed to Perry (69 downloads). The contributor wanted a separate extension and closed the PR.

Mac Updater

#28319
2026-05 · Closed by the stale bot

One view for updates from Homebrew casks and formulae, the Mac App Store, Sparkle, Electron, GitHub releases, npm, pip and Ruby gems.

The contributor fixed Greptile's first round of findings within a day, including a real shell-injection path. Later findings were still open when a maintainer pointed to App Updates (741 downloads) and Brew, and App Updates' author left the call to the team; no maintainer decision came before the stale bot closed it.

AI Costs Dashboard

#27793
2026-05 · Closed by the stale bot

Local spend tracking for Claude Code, Codex and Amp.

A maintainer requested changes once and the contributor didn't reply; the stale bot marked it stale 25 days later and closed it a week after that. Agent Usage, a usage and quota monitor that shipped in February 2026, has drawn 50 merged PRs from 24 authors; local spend tracking is a related but separate need.

LM Studio Chat

#29328
2026-07 · Closed by the stale bot

Chat with local models through LM Studio's API, no cloud dependency.

A maintainer pointed to a different LM Studio PR already in the queue, which merged; that extension has 213 downloads. Ollama AI, another way to chat with local models, has 42,591 downloads.

Limitless

#17939
2025-03 · Closed by the stale bot

Browse and analyze Limitless Pendant transcripts with Raycast AI.

A maintainer asked the contributor to address Greptile's suggestions; it stalled when the contributor ran out of time, even after the maintainer pinged them on X and two other contributors offered to help. There is still no Limitless extension in the Store.

Ramadan

#25613
2026-02 · Closed by the stale bot

Suhoor and Iftar times, a 30-day calendar and a menu-bar countdown, from a first-time contributor.

Another contributor, then a maintainer, pointed to Adhan Time (1,210 downloads) within hours. The contributor agreed to contribute there instead; no PR followed.

Emotecast

#30619
2026-08 · Closed by the stale bot

One search across 7TV, BetterTTV and FrankerFaceZ emotes, with sizing and animation handling.

A maintainer asked the contributor to work on 7TV Emotes Search (31 downloads) instead. The stale bot closed it a month later.

Velocity

Once ready, new extensions waited three weeks in the first half of 2026

Existing-extension PRs got faster: median time to merge fell from 1.5 days to under one, and the first reply from a maintainer or the extension's owner comes within a day, often within hours.

New extensions, measured from when the PR was marked ready for review (or from creation, for PRs opened ready), waited a median of 4.8 days for a maintainer's first comment or review in 2024-Q1 and 22 days in 2026-Q2, among PRs that got a reply. In that quarter 66% of ready new submissions had no maintainer reply within 21 days, the stale bot's clock until June 2. In 2026-Q3 the median fell back to 12 days and that share to 10%.

For two years the queue was one maintainer deep: pernielsentikaer made 99% of maintainer review actions in 2024 and 95% in 2025. In 2026 a second maintainer, 0xdhrv, made 63% of them.

Days to merge and to first human reply (median)

New extensions are measured from when the PR was marked ready for review. For new extensions the first reply is a maintainer's; for existing extensions, a maintainer's or the extension owner's. Medians cover PRs that got a reply.

Show as table

Ready new submissions with no maintainer reply within 21 days

Includes PRs that never got a reply: closed PRs, plus open ones ready for at least 21 days. 21 days is the stale bot's clock for most of the window.

Show as table
Greptile

Greptile arrived in February 2025 and has reviewed nearly everything since

Greptile's first review was on February 17, 2025 (#17128). It reviewed 48% of PRs opened in 2025-Q1 (it also reviewed some January PRs late), about 85% from 2025-Q2 through 2026-Q2, and 96–100% since July 2026. On new PRs since July 2026 its median time to first review is under 10 minutes.

Its mean confidence score rose from 3.3 in 2025-Q3, when it started publishing one, to about 4.4 out of 5 in mid-2026. Either contributors' PRs got cleaner or Greptile's scale moved; the data can't separate the two. Review rounds aren't charted: Greptile edits one summary comment in place, so contributors' pushes after the first review leave no separate record.

Coverage

Share of PRs with any Greptile review.

Show as table

Confidence score

Mean of Greptile's first confidence score per PR, from mid-2025 when it started publishing one.

Show as table
Friction

Authors answer the first round. The second one loses them.

The share of submissions with review comments that closed unmerged without the contributor ever replying fell from about 12% in 2024 to about 4% in 2026. The share that closed unmerged for any reason stayed in a similar range: 27–34% across 2024, 24–31% from 2025-Q2 through 2026-Q2. These describe what happened, not why; the data can't show whether Greptile's comments changed anyone's mind.

What grew is the pattern in the section above: a contributor responds to the first review comments, often Greptile's, and doesn't come back after the next review. With maintainer replies taking three weeks in early 2026, each extra round costs most of the stale bot's window.

Extension owners leave less of the review feedback over time (15% of submissions in 2024, 6–8% in 2026), because more of the volume is new extensions, which have no owner yet.

Where feedback comes from

Share of submissions that got review comments from each source before closing.

Show as table

Dropout after feedback

Of submissions that got review comments, the share that closed unmerged, and the share that closed unmerged with no reply from the contributor.

Show as table
What Greptile flags

About a quarter of what Greptile flags is mechanical

The data holds 36,571 inline review comments (findings) from Greptile on 7,625 PRs. That's a floor: a few PRs with very long review threads were truncated at collection. Clustered by keyword, the biggest themes are behavior bugs specific to the extension, cleanup, CHANGELOG format and error handling.

27% of findings fall in mechanical categories: CHANGELOG format, screenshots, hand-typed preferences, package.json fields, lint config, dependencies and localization. On new extensions their contributors abandoned, it's 31%. Findings Greptile itself tagged as logic or P0/P1 are excluded from the mechanical set. 67% of PRs with findings got at least one mechanical finding, and 17% got only mechanical ones. This is a keyword classification, not a hand-validated one.

Each mechanical theme is a rule Greptile applies the same way across PRs. Raycast's public Copilot rubric fully covers two of those themes: CHANGELOG format and localization.

ThemeFindingsPRsIn public rubricExample
Behavior bugs and edge cases116424555–path variable not quoted - breaks with spaces
Cleanup: unused code, logging, naming, duplication52392081–missing newline at end of file
CHANGELOG entry or {PR_MERGE_DATE} format34763082✓Use `{PR_MERGE_DATE}` placeholder instead of hardcoded date
Error handling (showFailureToast, try/catch, unhandled)33991470✓Could be simplified using showFailureToast from @raycast/utils
package.json metadata (title, categories, platforms, $schema)18451373partlyMissing subtitle - consider adding 'FuelIX' for consistency with other commands
Hand-typed preferences or arguments (use generated types)16621329–Remove manual `Preferences` interface - it's auto-generated in `raycast-env.d.ts`
Raycast API idioms (getFavicon, launchCommand, trash, hooks)15651134partlyUse Raycast's built-in `trash()` method instead of `unlinkSync` for safer file deletion.
Security: injection, secrets, unsafe shell1486980–<a href="#"><img alt="security" src="https://greptile-static-assets.s3.amazonaws.com/badges/Security.svg?v=2" align="top"></a> Shell injecti
Type safety (any, unsafe casts)980782–Use strict equality (`===`) instead of loose equality (`==`) for better type safety
Lint / formatting config (ESLint, Prettier)904782partlyUse the default `eslint.config.js` template instead of `.eslintrc.json`:
Performance and re-renders899669–All references to SupermemoryAPIError need to be updated to CognimemoAPIError
Localization / non-English text731355✓Spanish comment should be in English.
Other641449–
Screenshots / metadata folder561523partlyMove image from media/ to metadata/ folder for store submission
Dependencies, lock files, fetch polyfills552478partlyRemove `node-fetch` import - `fetch` is built-in global in Node 21+
Docs and README435367partlyThis image should be in the metadata folder since it's used in README
Windows / cross-platform compatibility382272–Incorrect capitalization: `windows` should be `Windows`
AI tools / ai.yaml configuration172149✓Consider adding `ai` and `tools` fields with `evals` since this is an AI-powered extension
Duplicates

A quarter of new submissions overlap something already in the Store

Two imperfect signals over the same submissions:

  • Reviewer signal: a maintainer or Greptile linked an existing Store extension or said one exists (code blocks, schema URLs and generic "already exists" phrases excluded). That held for 15% of new submissions in 2024-Q1 and 22–31% across the first three quarters of 2026.
  • Name signal: the new folder shares a rare lead word (naming three or fewer extensions) with an older one: about 20% in 2026.

About a third of reviewer-flagged submissions also match on name.

A hand-check of 30 name matches found 14 were the same service. That's the precision of this sample, not a correction factor. Same service doesn't always mean the contributor should have contributed instead: maintainers merged sidecar-display and diskutil-mac as separate extensions.

New-extension submissions and likely duplicates

Two imperfect signals over the same submissions: a maintainer or Greptile linked or named an existing extension, and the new folder shares a rare name with an older one.

Show as table
Hand-check of 30 name matches
PRNew folderMatchedVerdictNote
#17396diskutil-macdiskutilsame serviceBoth wrap diskutil; merged as a separate extension
#17671snake-case-generatorsnakedifferentText case tool vs. a game
#17868logseq-extension-prologseqsame serviceSecond Logseq extension; auto-closed
#17910pkg-swapr-pkg-searchdifferentnpm commands vs. R packages
#17979geminiraycast-geminisame serviceGoogle Gemini already in the Store
#18247prompt-chain-managerprompt-stashdifferentSame category only
#18287movie-quicklooktmdbdifferentMatched on the word "movie"
#18456mistral-ai-internalmistralsame serviceMistral already in the Store
#18582tana-paste-for-raycasttanasame serviceTana already in the Store
#18763daily-sitesmy-daily-logdifferentMatched on the word "daily"
#19712mcp-server-managermcpsame serviceClosed by a maintainer
#20438days-leftdays-until-christmasdifferentMatched on the word "days"
#22187fathomfathom-analyticsdifferentFathom meetings vs. Fathom Analytics: same name; different products
#22390micro-snitch-logsmicroblogdifferentMatched on "micro"
#22688steam-account-switchersteamsame serviceNew feature for an existing service
#24531django-docsdjangopackagesdifferentDifferent sites in one ecosystem
#25040raycast-gh-copilot-usagegh-picdifferentMatched on "gh"
#25510dustdust-ttsame serviceDust already in the Store
#25981copilot-chatcopilot-workspacedifferentDifferent GitHub products
#26060number-researchnumber-factsdifferentDifferent sites
#26237cider-controlcidersame serviceCider already in the Store
#27791cron-job-managercron-managersame serviceNear-identical purpose
#29373salesforce-workbenchsalesforce-searchsame serviceSame service; different feature
#29572sidecar-displaysidecarsame serviceMerged as a separate extension anyway
#29737aerospace-control-centeraerospacesame serviceClosed by a maintainer
#29938gif-makergif-searchdifferentMatched on "gif"
#30086don-t-break-the-chainidonthavespotifydifferentTitle-token false match
#30152ai-status-checkstatus-nerddifferentMatched on "status"
#30787dev-tools-brdev-serversdifferentMatched on "dev"
#30846grok-bot-directgrok-aisame serviceGrok already in the Store
Popularity

Most extensions are small, and a few carry the Store

The Store lists 3,437 extensions with 14.7 million downloads between them. The median extension has 230 downloads. The top 1% (34 extensions) account for 44% of all downloads and the top 10% for 87%; the bottom half accounts for 0.9%. Google Translate, Spotify Player, Visual Studio Code and Linear each passed 400,000.

Newer extensions have fewer downloads, and they've also had less time to collect them: the median extension published in 2022 has 1,356 downloads, 2024 has 325 and 2026 has 30. A single snapshot can't separate age from demand. This is a snapshot from the Store's public listing data on the same day as the PR data.

Extensions and downloads by download band

Share of the 3,437 Store extensions in each band, and the share of all downloads they account for.

Show as table

Median downloads by year published

Older extensions have had longer to collect downloads.

Show as table
Most active

The most active extensions follow the agent wave

Model Context Protocol Registry had 157 merged PRs since January 2025 from 134 different authors, mostly PRs adding MCP servers to the registry. It's the clearest example of an extension built for contributions. Skills is the opposite shape: 54 merged PRs, 40 of them from two authors. Counts are merged PRs labeled for the extension, by merge month.

By contributors, the community-maintained giants lead: GitHub lists 46 accounts in the Store (owner, author and contributors, past and present) and drew 48 distinct PR authors in this window; Spotify Player 42 and 45; Visual Studio Code 32 and 27.

Merged PRs per month, top 10 extensions since 2025

The top five are on; switch others on to compare.

Show as table
Most merged PRsSince Jan 2025Last 3 mo.
1Model Context Protocol Registry model-context-protocol-registry156105
2Slack slack5513
3GitHub github5316
4Skills skills537
5Todoist todoist493
6Agent Usage agent-usage4923
7Spotify Player spotify-player475
8Bitwarden Vault bitwarden425
9Apple Reminders apple-reminders4018
10Brew brew3914
11Dokploy dokploy3735
12Linear linear3513
13Claude Usage (ccusage) ccusage333
14Visual Studio Code visual-studio-code-recent-projects327
15Arc arc309
16Obsidian obsidian3010
17GitLab gitlab274
18Browser Bookmarks browser-bookmarks279
19Zed zed-recent-projects275
20Forked Extensions forked-extensions274
Most contributorsIn StorePR authors 2024–26Downloads
1GitHub4648212,929
2Spotify Player4245496,065
3Visual Studio Code3227417,018
4Arc2831254,260
5GitLab242123,484
6Todoist233498,158
7Jira222868,926
8Browser Bookmarks222468,496
9Obsidian2124178,259
10Amazon AWS211611,110
11Notion2017283,773
12ChatGPT2020263,542
13Linear1827406,513
14Coffee1826155,159
15Bitwarden Vault181867,643
The decision

Should Raycast publish the Greptile rules?

Yes, as a check contributors run, with clear expectations about what it fixes. It addresses the mechanical quarter of findings, and every round it saves matters when a maintainer reply can take three weeks. It doesn't fix the review wait or the draft step.

For publishing the rules

  • 27% of findings, and 31% on abandoned new extensions, fall in mechanical categories. A local check could catch many before the first push instead of one round later.
  • Most stale-bot closes after a maintainer reply are contributors who did one round of fixes and stopped after the next review. Fewer rounds means fewer chances to stop.
  • It runs today. The deterministic rules already run locally in about 40 ms in preflight.mjs, calibrated against 35 real extensions. Greptile supports committing rules to a .greptile/ folder, so the review bot and contributors would read the same file. A contributor has already opened a .greptile/config.json PR (#32498) for the draft setting.
  • Coding agents follow a rules file they can read. They can't follow rules they can't see.

Against, or not enough

  • A document alone didn't move the numbers. After the Copilot rubric was published on August 29, 2025, the CHANGELOG share of Greptile findings rose (5.5% to 12.0%, by finding date) instead of falling.
  • A quarter of the new extensions the stale bot closed were never marked ready. No rules file fixes that.
  • Behavior bugs, security and judgment calls make up most findings. No rules file catches those.
  • Raycast would have to keep a public copy in sync with Greptile's config.

Recommendation

Publish the rules as a script contributors run before pushing, next to the rubric. Expect it to cut some review rounds, not to fix dropout on its own.

Then shorten the loop after a maintainer's review. The largest group of stale-bot closes on new extensions is contributors who responded to earlier review comments and didn't come back after the next review. A complete checklist in the maintainer's first review, so it is the last round, matters more than any single rule.

Fix the draft step. In a quarter of stale-bot closes, the PR was never marked ready. A raycastbot comment on a quiet draft explaining that review starts when it is marked ready, or a line at the end of ray publish output, costs little.

Watch the clock. In 2026-Q2, 66% of ready new submissions had no maintainer reply within 21 days. Pausing the stale bot while a contributor is waiting on a maintainer would stop closures for inactivity that isn't the contributor's. The June 2026 move to 25 + 7 days was a step in that direction.

A checklist worth checking

Running npm run publish (which calls ray publish) opens the Store PR with Raycast's pull request template. The Today card is that template's checklist: five boxes the contributor ticks on every PR, which nothing verifies. These days it adds little compared with what a checklist could catch. The Proposed card is an alternative.

Today

  • I read the extension guidelines
  • I read the documentation about publishing
  • I ran npm run build and tested this distribution build in Raycast
  • I checked that files in the assets folder are used by the extension itself
  • I checked that assets used in the README are located outside the metadata folder if they were not generated with our metadata tool

All five are the contributor's self-attestations. Two say "I read the docs." The third bundles a build, which CI already runs, with testing in Raycast, which only a person can do. The last two are file checks a script can do. None address what loses new extensions in this data: drafts never marked ready, duplicates, and the review loop.

Proposed

  • New extension? I searched the Store for this service. If something similar exists, I explain below why this should be separate (different platform, unmaintained, different scope), or I'm contributing to it instead.
  • I tested the production build in Raycast.
  • I tested on macOS / Windows. If I couldn't test on both, I've asked for a tester on the other platform below, and raycastbot adds a needs Windows tester or needs macOS tester label.
  • I'll mark this PR Ready for review when it's done. Drafts aren't reviewed. A PR with no activity for 25 days is marked stale and closed 7 days later.
  • I attached a screencast or screenshots of what changed.
  • I can respond to review within two weeks, or I've said so below.

Move to CI, no checkbox: build and lint, the deterministic Greptile rules (CHANGELOG format, screenshots, generated preference types, package.json fields), unused files in assets, README asset paths (allowing images generated by the metadata tool).

Method

How this was measured

Every PR opened on raycast/extensions from January 1, 2024 to October 18, 2026 (15,078 PRs), collected through GitHub GraphQL with timelines, reviews and comments. Monthly totals match the reference counts for January 2024 – June 2025 exactly. 12 bot-authored PRs are excluded. Connections were capped (50 reviews, 30 comments per review, 100 comments per PR), so a handful of very long threads are incomplete.

Auto-closed
closed unmerged by raycastbot, with the status: stalled label or the inactivity message. raycastbot also closes every merged PR, so the closer alone isn't enough. 1,932 PRs. GitHub's live search finds 2,030 closed PRs with the stalled label: 1,907 of them are in that set, and 123 were closed by a person while stalled. The other 25 auto-closes lost the label afterward.
Submission
new-extension PRs from the same author for the same folder are one submission, ending at its first merge and scored by its last PR; a package.json added to a folder that already exists is an update.
Feedback
a Greptile review, or a non-approval review or comment from a Raycast maintainer (COLLABORATOR or MEMBER), the extension owner (named in raycastbot's 🔔 ping), or another contributor requesting changes, before the PR closed, across every PR in the submission.
Contributor replied
a comment, review or force-push by the PR's author, or a commit authored by them.
Ready
replayed from draft transitions; a PR that opened ready counts from creation, one that opened as a draft from its first ready-for-review event. A submission is ever-ready if any of its PRs was.
Maintainer reply (human reply in the data)
a comment or review from a maintainer or the extension's owner. For new extensions that's a maintainer: owners appear on 10 of 5,948 new-extension PRs.

Months from mid-September 2026 on are provisional: those PRs can't be stale-closed yet. The stale clock changed five times in the window (table below), so compare auto-close rates across clock changes with care. An independent review by Codex checked these definitions against the code and every number on this page against the data; four rounds of its corrections are applied.

In effectStale + close (days)Auto-closes under it
Jan 2024 – Feb 25, 202514 + 7291
Feb 25 – Mar 26, 202521 + 1414
Mar 26 – Dec 20, 202514 + 7514
Dec 20, 2025 – Jan 15, 202615 + 303
Jan 15 – Jun 2, 202614 + 7685
Jun 2, 2026 – now25 + 7425