Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2534 commits
Select commit Hold shift + click to select a range
3dd2d21
build(deps-dev): bump @storybook/react-vite from 10.5.0 to 10.5.8 (#1…
dependabot[bot] Aug 19, 2026
03ddca4
build(deps): bump @agentclientprotocol/codex-acp from 1.1.7 to 1.2.0 …
dependabot[bot] Aug 19, 2026
6aaef29
build(deps): bump better-auth from 1.6.25 to 1.6.28 (#11516)
dependabot[bot] Aug 19, 2026
a2bf936
feat(workspaces): sign the workspace login handoff and gate readiness…
cryppadotta Aug 19, 2026
f27c0ee
build(deps): bump open from 11.0.0 to 11.0.1 (#11517)
dependabot[bot] Aug 19, 2026
59c4b5a
build(deps): bump @base-ui/react from 1.6.0 to 1.7.0 (#11518)
dependabot[bot] Aug 19, 2026
536d588
build(deps): bump @cursor/sdk from 1.0.24 to 1.0.28 (#11520)
dependabot[bot] Aug 19, 2026
51a843e
fix(cli): accept renumbered migration journal order (#11684)
cryppadotta Aug 19, 2026
e1df4c6
fix(workspaces): keep deferred seed databases reliable (#11706)
cryppadotta Aug 19, 2026
e0d46d1
test(workspaces): fix runtime provision metadata assertion (#11707)
cryppadotta Aug 19, 2026
8b2dbd9
chore(deps): open one dependabot PR per major update (#11709)
nickyleach Aug 19, 2026
ec8d7dd
build(deps): bump ws from 8.21.1 to 8.21.3 (#11729)
dependabot[bot] Aug 19, 2026
98298cb
build(deps-dev): bump tsx from 4.23.1 to 4.23.12 (#11722)
dependabot[bot] Aug 19, 2026
6eb0739
build(deps-dev): bump tailwindcss from 4.3.2 to 4.3.3 (#11718)
dependabot[bot] Aug 19, 2026
81c9fdc
build(deps): bump react-router-dom from 7.18.1 to 7.18.2 (#11715)
dependabot[bot] Aug 19, 2026
05e89db
build(deps): bump react-i18next from 17.0.10 to 17.0.11 (#11711)
dependabot[bot] Aug 19, 2026
61b4fc0
build(deps-dev): bump @storybook/addon-a11y from 10.5.4 to 10.5.8 (#1…
dependabot[bot] Aug 19, 2026
e0b6452
feat(auth): normalize agent login in the sandbox onto one session tab…
nickyleach Aug 19, 2026
a5f3ac6
chore(lockfile): refresh pnpm-lock.yaml (#11737)
github-actions[bot] Aug 19, 2026
233be4b
feat: parallelize sandbox file-sync behind a provider opt-in capabili…
nickyleach Aug 19, 2026
e0e503e
fix(server): make blockers-resolved wake dedup level-triggered (#11732)
nickyleach Aug 19, 2026
433b1eb
build(deps): bump @aws-sdk/client-s3 from 3.1106.0 to 3.1111.0 (#11714)
dependabot[bot] Aug 19, 2026
bd059a0
fix(workspaces): make managed runtimes reliable across restarts (#11740)
cryppadotta Aug 19, 2026
8161244
feat(sandbox): add opt-in duplex command-stream foundation (capabilit…
nickyleach Aug 19, 2026
01ddc26
fix(routines): clear transient execution failures (#9689)
cryppadotta Aug 19, 2026
1b259d7
build(deps): bump radix-ui from 1.6.4 to 1.6.7 (#11726)
dependabot[bot] Aug 19, 2026
2eb9a09
fix(runtime): adopt surviving shell-command services (#11744)
cryppadotta Aug 19, 2026
b8a7608
feat(environments): expose boot-relevant drift attribution in the cus…
nickyleach Aug 19, 2026
d5416fd
fix(runtime): route sandbox git-bundle export through native syncOut …
nickyleach Aug 19, 2026
faab262
feat(sandbox): add a duplex transport for Daytona behind a default-of…
nickyleach Aug 20, 2026
b5a3a86
feat(release): bootstrap new npm packages with a placeholder publish …
devinfoley Aug 20, 2026
7c8064d
test(runtime): assert order-independent port invariants for concurren…
nickyleach Aug 20, 2026
5a1ce7a
fix(server): stamp built commit into service.version (#11748)
nickyleach Aug 20, 2026
cbe6395
fix(ui): task chat composer clears on send; align carets and composer…
scotttong Aug 20, 2026
b495398
build(deps): bump react and @types/react (#11721)
dependabot[bot] Aug 20, 2026
6bf8f1d
build(deps): bump react-dom and @types/react-dom (#11712)
dependabot[bot] Aug 20, 2026
ed1db31
build(deps): bump @agentclientprotocol/claude-agent-acp from 0.66.0 t…
dependabot[bot] Aug 20, 2026
a9d1f74
fix(workspaces): seed managed worktrees when the base checkout has no…
nickyleach Aug 20, 2026
e1ce7a5
build(deps): bump @assistant-ui/react from 0.14.14 to 0.15.14 (#11725)
dependabot[bot] Aug 20, 2026
416a273
build(deps): bump jsdom and @types/jsdom (#11717)
dependabot[bot] Aug 20, 2026
e826188
refactor(settings): unify settings and speed up exports (#11789)
cryppadotta Aug 20, 2026
1d0e826
feat(acpx/ui): adapter-declared capabilities for verbose streaming ba…
devinfoley Aug 20, 2026
54b8bec
build(deps): bump pino-http from 10.5.0 to 11.0.0 (#11716)
dependabot[bot] Aug 20, 2026
933749e
test(server): deflake postgres teardown and pinned exposure port (#11…
devinfoley Aug 20, 2026
b83e14a
fix(runtime): stop the readiness probe from stealing the guest exposu…
nickyleach Aug 20, 2026
233c12f
feat: add kimi-local adapter for Kimi Code CLI (CLI + ACP engines) (#…
hawikk Aug 20, 2026
726a3ee
chore(lockfile): refresh pnpm-lock.yaml (#11786)
github-actions[bot] Aug 20, 2026
de9645a
fix(ui): surface live runtime status in the task-chat tail before the…
devinfoley Aug 20, 2026
cb0009b
fix: preserve recovery retries across restarts (#11817)
cryppadotta Aug 20, 2026
f674f2c
build(deps): bump chokidar from 4.0.3 to 5.0.0 (#11720)
dependabot[bot] Aug 20, 2026
67ce516
build(deps): bump googleapis from 164.1.0 to 174.0.1 (#11723)
dependabot[bot] Aug 20, 2026
c2cfd55
fix: exclude thought text from automatic issue comments (#11801)
nearfolk Aug 20, 2026
3d6afde
build(deps): bump @clack/prompts from 0.11.0 to 1.7.0 (#11724)
dependabot[bot] Aug 20, 2026
733ffbf
build(deps-dev): bump @vitejs/plugin-react from 4.7.0 to 6.0.5 (#11710)
dependabot[bot] Aug 20, 2026
0fa318b
feat(artifacts): bridge Markdown work products into the document revi…
nguyenm7 Aug 21, 2026
db4defd
feat: operator-configurable settings visibility via PAPERCLIP_HIDDEN_…
devinfoley Aug 21, 2026
fd106c6
ci(commitperclip): remove the security gate that filed a draft adviso…
aaymeloglu Aug 21, 2026
16149a7
ci(release): give npm publish visibility polling a 10-minute budget (…
devinfoley Aug 21, 2026
773a9da
fix: preserve plugin detail-tab deep links and bridge the real JSX ru…
nguyenm7 Aug 21, 2026
3abe9e2
build(deps): bump zod from 3.25.76 to 4.4.3 (#11719)
dependabot[bot] Aug 21, 2026
599ad70
ci(release): raise npm publish visibility budget to 10 minutes per pa…
devinfoley Aug 21, 2026
9af1e75
fix(server): handle the runtime service exit persist when a parent ro…
nickyleach Aug 21, 2026
33eb68b
fix(server): end the duplex route on the pre-bind bounds when frames …
nickyleach Aug 21, 2026
38d8f37
fix(build): enforce Node 24 across Paperclip (#11792)
nickyleach Aug 21, 2026
a7e689b
feat(ui): rename "Agent mode" to "Auto mode" and show full work-mode …
scotttong Aug 21, 2026
1746783
fix(kimi): align package with Node 24 policy (#11890)
nickyleach Aug 21, 2026
917d235
chore(lockfile): refresh pnpm-lock.yaml (#11867)
github-actions[bot] Aug 21, 2026
5bc6031
fix(server,ui,claude-local): verify auth on the adapter Test lane and…
nickyleach Aug 21, 2026
0148c2c
test(server): cover buffered duplex chunk drain after a late listener…
nickyleach Aug 21, 2026
adfbe2d
feat(environments): refer to the managed default environment by name,…
devinfoley Aug 21, 2026
6959089
Fix remote-only workspace base refs and pre-adapter retry loops (#11892)
nickyleach Aug 21, 2026
fbd20b2
fix(grok-local): stop defaulting --permission-mode to dontAsk (#11898)
devinfoley Aug 21, 2026
417336f
fix(workspaces): attach PR preparation to existing branches (#11703)
cryppadotta Aug 21, 2026
14027df
fix(workspaces): read process cwd on macOS so port-owner adoption wor…
tf00185077 Aug 21, 2026
3d366ba
Rebuild the onboarding agent arc on the prototype's step design (#11905)
tonio-alucema Aug 21, 2026
2491306
feat(commitperclip): surface the Co-Authored-By trailers a squash mer…
tonio-alucema Aug 21, 2026
35b5105
chore(lockfile): refresh pnpm-lock.yaml (#11915)
github-actions[bot] Aug 22, 2026
dc5b070
fix(runtime): guard empty Bash 3.2 array expansion (#11891)
scotttong Aug 22, 2026
3ff636b
Drop the mission step from the wizard arc (#11935)
tonio-alucema Aug 22, 2026
10d2781
feat(sandbox): add the duplex bridge broker, gated transport selectio…
nickyleach Aug 22, 2026
f572e08
fix(recovery): stop automatic stranded-task takeovers (#11961)
cryppadotta Aug 22, 2026
cc42a67
fix(adapter-utils): extend the duplex fail-closed run disposition to …
nickyleach Aug 22, 2026
141b815
fix(adapter-utils): enforce the duplex frame size bound on encode in …
nickyleach Aug 22, 2026
c505039
fix(daytona-duplex): chunk host-to-sandbox writes and make a transpor…
nickyleach Aug 22, 2026
05b35d4
feat(duplex): bound aggregate duplex route resource consumption with …
nickyleach Aug 23, 2026
8db826d
fix(issues): cycle-aware issue_blockers_resolved after terminal reset…
zach-hermes Aug 23, 2026
16b59c9
feat(adapter-utils): stream duplex bridge bodies as sequenced chunks …
nickyleach Aug 23, 2026
63df7ad
feat(login): use the login pseudo-terminal for Codex device login and…
nickyleach Aug 23, 2026
ae6761e
fix(server): authorize agent resume through direct grants (#12047)
cryppadotta Aug 23, 2026
627eef7
fix(plugins): retry errored plugins at boot instead of leaving them d…
devinfoley Aug 23, 2026
c62bb4b
feat: environment delete with agent reassignment and consented sandbo…
devinfoley Aug 23, 2026
c7f4bc1
fix: survive transient sandbox exec failures in the callback bridge w…
devinfoley Aug 23, 2026
633e102
fix: verify issue-update writes instead of inferring success (#12051)
devinfoley Aug 23, 2026
fc9e9b7
fix: stop teaching agents to curl literal {id} route templates (#12061)
devinfoley Aug 24, 2026
a14e51d
refactor(environment): classify environment capabilities from static …
nickyleach Aug 24, 2026
88a0f88
Brand lockup, no idle env-check card, no Mission row (#12074)
tonio-alucema Aug 24, 2026
41bf5ca
docs(runner): define architecture and compatibility (#12084)
cryppadotta Aug 24, 2026
fdbc691
feat(runner): add PRP v1 schemas and fixtures (#12087)
cryppadotta Aug 24, 2026
3708779
chore(lockfile): refresh pnpm-lock.yaml (#12090)
github-actions[bot] Aug 24, 2026
b2d1673
Add TypeScript PRP replay contracts (#12091)
cryppadotta Aug 24, 2026
87d68f4
fix: harden the sandbox bridge gateway against crashes and queue wedg…
devinfoley Aug 24, 2026
0dfa0fb
ci: refresh general-server shard duration manifest (#12075)
devinfoley Aug 24, 2026
83fefaa
fix(grok_local): do not warn when the default model sentinel is unava…
devinfoley Aug 24, 2026
6b20cc9
Add local fake runner supervision (#12095)
cryppadotta Aug 24, 2026
b76e36d
Add durable PRP transport and recovery (#12100)
cryppadotta Aug 24, 2026
dc62118
chore(lockfile): refresh pnpm-lock.yaml (#12094)
github-actions[bot] Aug 24, 2026
4ffa8de
Add Codex provider bridge to Paperclip Runner (#12111)
cryppadotta Aug 24, 2026
23048f1
Add canonical semantic action catalog to Paperclip Runner (#12121)
cryppadotta Aug 24, 2026
42b8f7a
feat(runner): authorize semantic tool dispatch (#12126)
cryppadotta Aug 24, 2026
d157324
refactor: disambiguate the Telemetry and Observability data paths (#1…
nickyleach Aug 24, 2026
ae9711d
docs(release): re-date the 2026.818.0-beta.1 stable notes to v2026.82…
devinfoley Aug 25, 2026
890ab9a
feat(release): thorough notes skeletons — nest each PR's summary at c…
devinfoley Aug 25, 2026
14867bd
test(release-smoke): follow the mission-less onboarding reorder (#12135)
devinfoley Aug 25, 2026
fa40a1b
docs(release): canonicalize stable notes for v2026.824.0 (#12139)
devinfoley Aug 25, 2026
faad235
fix(cli): materialize the managed install before the onboarding servi…
devinfoley Aug 25, 2026
0a01444
test(release-smoke): cover the background-service leg of onboarding (…
devinfoley Aug 25, 2026
8d714c2
fix(cli): skip the foreground-start prompt after the service starts (…
devinfoley Aug 25, 2026
b6854e6
refactor(adapter-utils): rename EffectiveSandboxCapabilities to Effec…
nickyleach Aug 25, 2026
ffff1fe
feat(runner): define package API and verification boundary (#12129)
cryppadotta Aug 25, 2026
0f0e544
fix(cli): open dashboard after onboarding service starts (#12164)
cryppadotta Aug 25, 2026
445547c
feat(duplex): run the Daytona sandbox callback bridge over Node HTTP/…
nickyleach Aug 25, 2026
02a9840
refactor(adapter-utils): clean up the HTTP/2 bridge request-body boun…
nickyleach Aug 25, 2026
2862e18
refactor(adapter-utils): remove the retired duplex_v1 sandbox bridge …
nickyleach Aug 25, 2026
30f9888
build(deps-dev): bump storybook from 10.5.5 to 10.5.10 (#11884)
dependabot[bot] Aug 25, 2026
b858fc7
build(deps): bump @codemirror/view from 6.43.8 to 6.43.9 (#11879)
dependabot[bot] Aug 25, 2026
b67dced
build(deps): bump @agentclientprotocol/codex-acp from 1.2.0 to 1.6.2 …
dependabot[bot] Aug 25, 2026
4fb0978
build(deps): bump googleapis from 174.0.1 to 176.0.0 (#11889)
dependabot[bot] Aug 25, 2026
50e3246
build(deps): bump @assistant-ui/react from 0.15.14 to 0.15.16 (#11888)
dependabot[bot] Aug 25, 2026
41726ae
build(deps): bump react-resizable-panels from 4.12.2 to 4.12.3 (#11872)
dependabot[bot] Aug 25, 2026
a68af9e
build(deps-dev): bump @storybook/addon-a11y from 10.5.8 to 10.5.10 (#…
dependabot[bot] Aug 25, 2026
ab4c494
build(deps): bump @aws-sdk/client-s3 from 3.1111.0 to 3.1115.0 (#11876)
dependabot[bot] Aug 25, 2026
1d3195b
build(deps-dev): bump esbuild from 0.28.1 to 0.28.2 (#11882)
dependabot[bot] Aug 25, 2026
3c328a7
build(deps): bump @mdxeditor/editor from 3.55.0 to 4.2.1 (#11870)
dependabot[bot] Aug 25, 2026
3a841e1
build(deps-dev): bump @types/supertest from 6.0.3 to 7.2.1 (#11878)
dependabot[bot] Aug 25, 2026
5db8ce3
fix(docker): make tini PID 1 in the server image so adopted orphans a…
zannis Aug 25, 2026
0286854
build(deps-dev): bump @storybook/react-vite from 10.5.8 to 10.5.10 (#…
dependabot[bot] Aug 25, 2026
bef9288
build(deps): bump @agentclientprotocol/claude-agent-acp from 0.69.0 t…
dependabot[bot] Aug 25, 2026
f64123b
build(deps-dev): bump @storybook/addon-docs from 10.5.8 to 10.5.10 (#…
dependabot[bot] Aug 25, 2026
18ba239
build(deps): bump @pierre/diffs from 1.2.11 to 1.3.5 (#11875)
dependabot[bot] Aug 25, 2026
0b01593
build(deps): bump lucide-react from 0.577.0 to 1.32.0 (#11885)
dependabot[bot] Aug 25, 2026
4d2af73
feat(runner): add native persistence contracts (#12169)
cryppadotta Aug 25, 2026
c5382b3
build(deps-dev): bump vite from 6.4.3 to 8.2.2 (#11887)
dependabot[bot] Aug 25, 2026
69e8585
build(deps): bump better-auth from 1.6.28 to 1.7.0 (#11886)
dependabot[bot] Aug 25, 2026
86fe933
chore(lockfile): refresh pnpm-lock.yaml (#12174)
github-actions[bot] Aug 25, 2026
9964b03
feat(runner): add hidden server PRP coordinator (#12176)
cryppadotta Aug 25, 2026
d9f759b
chore(lockfile): refresh pnpm-lock.yaml (#12178)
github-actions[bot] Aug 25, 2026
1fc4591
build(deps): bump commander from 13.1.0 to 15.0.0 (#11877)
dependabot[bot] Aug 25, 2026
3e28d64
fix(plugin-worker-manager): queue and replay pre-bind login pseudo-te…
nickyleach Aug 25, 2026
d2b9765
feat(ui): offer enabling a skill for agents at install time (#12136)
devinfoley Aug 25, 2026
5af49cb
feat(server): CEO agents get the core paperclip skills by default (#1…
devinfoley Aug 25, 2026
11f6c75
feat: dedicated import pause reason with visible paused-assignee noti…
devinfoley Aug 25, 2026
868e210
feat(ui): post-import landing CTAs on every outcome branch (#12143)
devinfoley Aug 25, 2026
fcb84d4
feat: already-imported transfer error names the landed company (#12144)
devinfoley Aug 25, 2026
18b6c78
feat(server): de-duplicate imported company names (#12145)
devinfoley Aug 25, 2026
79b464b
fix(server): surface skill materialization failures instead of droppi…
devinfoley Aug 25, 2026
243430f
feat: agents see the company skill library at runtime (#12147)
devinfoley Aug 25, 2026
397de98
feat(runner): add flagged Codex execution adapter (#12188)
cryppadotta Aug 25, 2026
9fc2f59
feat(ui): dashboard banner for paused imported agents with Resume all…
devinfoley Aug 25, 2026
6880213
fix(adapter-utils): honor .gitignore for referenced-project staging (…
nickyleach Aug 25, 2026
d866ff3
fix(adapter-utils): report real transferred bytes for project sync, g…
nickyleach Aug 25, 2026
822e0ae
fix(adapter-utils): move the workspace-restore merge lock to an insta…
nickyleach Aug 25, 2026
802f2af
refactor(adapter-utils): delete the dead duplex body-chunk protocol c…
nickyleach Aug 25, 2026
0cedb45
build(deps-dev): bump typescript from 5.9.3 to 7.0.2 (#11880)
dependabot[bot] Aug 25, 2026
29d1204
perf(gateway): remove the whole-body string round trip on the HTTP/2 …
nickyleach Aug 25, 2026
a5c2add
fix(adapter-utils): repair referenced-source ignore resolution type b…
devinfoley Aug 25, 2026
9c03443
feat: hideable company settings pages, with import floored on cloud-m…
devinfoley Aug 25, 2026
ca02d24
fix(ui): keep the installed service worker fresh on parked tabs (#12198)
devinfoley Aug 25, 2026
dc30dc4
fix(setup-token): pin the start guard to the served adapter (#12179)
nickyleach Aug 26, 2026
821573e
refactor(adapter-utils): extract the shared workspace-restore teardow…
nickyleach Aug 26, 2026
6524d2b
fix(dev): honor --data-dir isolation (#12193)
cryppadotta Aug 26, 2026
a9d0927
fix(adapters): restore Paperclip skill for legacy runners (#12225)
cryppadotta Aug 26, 2026
198fc8b
fix(adapter-utils): harden the referenced-project ignore scan (#12214)
nickyleach Aug 26, 2026
6c7c0fd
fix(db): stop the postgres driver from crashing the process on a writ…
devinfoley Aug 26, 2026
8ed1f51
fix(scripts): silence pnpm DEP0169 at provisioning install call sites…
nickyleach Aug 26, 2026
8ef39fe
refactor(db): drop the vendored postgres teardown patch (reverts #122…
devinfoley Aug 26, 2026
8f1e3cf
feat(observability): add opt-in Sentry error monitoring for the serve…
nickyleach Aug 26, 2026
381b763
chore(lockfile): refresh pnpm-lock.yaml (#12232)
github-actions[bot] Aug 26, 2026
75b6d22
fix(recovery): make silent-run detection UI-only (#12242)
cryppadotta Aug 26, 2026
039a547
fix(adapter-utils): make SSH env-lab fixture teardown deterministic (…
nickyleach Aug 26, 2026
4277ecb
fix(adapter-utils): terminate the remote process-session wrapper dete…
nickyleach Aug 26, 2026
06cd21e
fix(observability): declare the optional OpenTelemetry peer dependenc…
nickyleach Aug 27, 2026
e628cf3
fix(adapter-utils): harden the wrapper birth-time probe with exclusiv…
nickyleach Aug 27, 2026
9c57c0f
chore(lockfile): refresh pnpm-lock.yaml (#12252)
github-actions[bot] Aug 27, 2026
24d639a
feat(daytona): add transparent zstd-3 compression to the file-mapping…
nickyleach Aug 27, 2026
eb86fcd
The agent, drawn as itself (#12274)
tonio-alucema Aug 27, 2026
d785b19
test(server): fix the pre-bind race in the byte-ledger ceiling test (…
nickyleach Aug 27, 2026
4d82f5e
copy: unify user-facing "company" wording to "organization" (#12243)
scotttong Aug 27, 2026
1de105c
fix(observability): pin the Sentry browser SDK and gate the optional …
nickyleach Aug 27, 2026
1ba7b2c
chore(lockfile): refresh pnpm-lock.yaml (#12310)
github-actions[bot] Aug 27, 2026
949e975
docs(sandbox-providers): state the sandbox security boundary (#12286)
nickyleach Aug 27, 2026
c8a136f
Restore a single Lexical copy so the rich editor renders (#12317)
devinfoley Aug 27, 2026
2a3c86f
fix(ui): keep the rich editor available for angle-bracket prose (#12290)
devinfoley Aug 27, 2026
c9df0e2
chore(lockfile): refresh pnpm-lock.yaml (#12318)
github-actions[bot] Aug 27, 2026
67f9867
fix(interactions): deliver question answers durably (#12307)
cryppadotta Aug 27, 2026
b06034d
Write mode-constrained inbound files directly to their target (#12320)
nickyleach Aug 27, 2026
d27998a
Check the declared Lexical range with semver rules (#12319)
devinfoley Aug 27, 2026
325041c
fix(assets): accept identity-provider characters in image upload name…
devinfoley Aug 27, 2026
e34ed98
Let operators hide the Provider vaults and Proposals tabs (#12284)
devinfoley Aug 27, 2026
8f195c2
Let operators supply defaults for selected instance settings (#12285)
devinfoley Aug 27, 2026
7551b63
Remove the instance Heartbeats settings page (#12282)
devinfoley Aug 27, 2026
a4f1b3c
Move company invites into a tab of the Members page (#12289)
devinfoley Aug 27, 2026
76f7019
feat(server): derive hosted-tenant issue prefixes from the company na…
devinfoley Aug 27, 2026
7b91fe9
Hide host-path and execution-engine surfaces in managed-sandbox-only …
devinfoley Aug 27, 2026
bc1a215
Remove the company brand color and per-company attachment limit (#12291)
devinfoley Aug 27, 2026
bdd8f1b
Repair the drizzle snapshot so generate emits no spurious migration (…
devinfoley Aug 27, 2026
666f5a6
fix(server): make the wake-claim lease test deterministic (#12331)
nickyleach Aug 27, 2026
036600d
fix(db): close test database clients before the embedded Postgres clu…
nickyleach Aug 27, 2026
3d9be6f
refactor(daytona): simplify the inbound file-sync path (#12329)
nickyleach Aug 27, 2026
17ebcc6
refactor(daytona): simplify the login session-home create (#12348)
nickyleach Aug 27, 2026
4436cf0
Render the onboarding agent arc's real steps in Storybook (#12369)
tonio-alucema Aug 27, 2026
b7fd6c5
fix(server): load the costs-service route module graph once per file …
nickyleach Aug 28, 2026
7895f7f
Install the declared Sentry server package into the hosted image (#12…
nickyleach Aug 28, 2026
dc7a1a0
fix(adapter-utils): skip the remote session close when the duplex cha…
nickyleach Aug 28, 2026
8316ceb
Add the Better Auth issuer column so signup and sign-in work (#12396)
devinfoley Aug 28, 2026
7b73b08
ci: enforce migration order against PR target (#12433)
cryppadotta Aug 28, 2026
dbf0525
Follow the current onboarding arc in the release smoke (#12423)
devinfoley Aug 28, 2026
5f1e25c
test(server): load the company-skills route module graph once per fil…
nickyleach Aug 28, 2026
07b6816
ci: add trusted reusable PR workflow (#12436)
cryppadotta Aug 28, 2026
d9fc93d
ci: synchronize trusted PR policy (#12438)
cryppadotta Aug 28, 2026
c916af0
ci: call trusted PR workflow (#12439)
cryppadotta Aug 28, 2026
3b295b0
fix(ci): validate equivalent PR merge refs (#12441)
cryppadotta Aug 28, 2026
de00d78
ci: pin equivalent merge validation (#12442)
cryppadotta Aug 28, 2026
47bd4d4
docs: point section 11 at the renamed implementation plan (#11677)
melbinjp Aug 28, 2026
b88fadb
fix(ci): emit one runner route (#12444)
cryppadotta Aug 28, 2026
c75507f
ci: pin single runner route output (#12445)
cryppadotta Aug 28, 2026
5ac66b3
fix(ci): validate the workflow merge ref (#12447)
cryppadotta Aug 28, 2026
5a9c06a
ci: pin workflow merge ref validation (#12448)
cryppadotta Aug 28, 2026
c119c4b
fix(ci): validate the PR base snapshot (#12449)
cryppadotta Aug 28, 2026
66e1c0d
ci: pin PR base snapshot validation (#12450)
cryppadotta Aug 28, 2026
d9449e6
feat(onboarding): sign in to an agent provider during onboarding (#12…
nickyleach Aug 28, 2026
b2752b2
fix(adapter-utils): allow process sessions without birthtime (#12451)
nickyleach Aug 28, 2026
8da49d6
fix(ci): make runner image tests deterministic (#12452)
cryppadotta Aug 28, 2026
d6b33d6
fix(ci): route trusted stacked PRs to AWS (#12455)
cryppadotta Aug 28, 2026
e48e0bd
ci: activate trusted stacked PR routing (#12456)
cryppadotta Aug 28, 2026
7b199fc
fix(ci): validate stacked PR merge refs (#12457)
cryppadotta Aug 28, 2026
c594811
ci: activate stacked merge validation (#12458)
cryppadotta Aug 28, 2026
f929355
ci: allow validated stacked base advances (#12459)
cryppadotta Aug 28, 2026
30ac5e1
ci: activate live stacked base validation (#12460)
cryppadotta Aug 28, 2026
f9c3251
ci: ignore stale PR API base snapshots (#12462)
cryppadotta Aug 28, 2026
f173ee0
ci: activate stale base handling (#12463)
cryppadotta Aug 28, 2026
e127faa
fix(adapter-utils): bound the ACP startup handshake and fence the aba…
nickyleach Aug 28, 2026
1da6b37
fix(ci): regenerate stale stacked lockfiles (#12461)
cryppadotta Aug 28, 2026
a3b78f9
fix(cli): make embedded-Postgres tests survive runner contention (#12…
nickyleach Aug 28, 2026
64b7dce
refactor(adapter-utils): replace the process-wide byte ledger with ro…
nickyleach Aug 28, 2026
ad474ab
fix(server): load the mocked module graph once in the closed-workspac…
nickyleach Aug 28, 2026
40d8cbc
ci: activate stacked lockfile regeneration (#12464)
cryppadotta Aug 29, 2026
cec675f
test(server): load the agent-permissions route module graph once per …
nickyleach Aug 29, 2026
a20a494
feat: add Grok device login to the sandbox login panel (#12469)
nickyleach Aug 29, 2026
35fca95
chore(lockfile): refresh pnpm-lock.yaml (#12484)
github-actions[bot] Aug 29, 2026
d7ff895
chore: add @forgottendev to CODEOWNERS (#12501)
cryppadotta Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
377 changes: 377 additions & 0 deletions .agents/skills/check-pr/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,377 @@
---
name: check-pr
description: >
Check a GitHub, GitLab, or Perforce PR/MR/CL for review comments, failing
checks, and PR-body gaps. Use when asked to inspect, fix, or prepare a change
for submission.
license: MIT
compatibility: Requires git and gh (GitHub CLI), glab (GitLab CLI), or p4 (Perforce CLI) installed and authenticated.
metadata:
author: greptileai
version: "1.3"
allowed-tools: Bash(gh:*) Bash(glab:*) Bash(git:*) Bash(p4:*)
---

# Check PR

Analyze a pull request (GitHub), merge request (GitLab), or shelved changelist (Perforce) for review comments, status checks, and description completeness, then help address any issues found.

## Inputs

- **PR/MR/CL number** (optional): If not provided, detect the PR/MR for the current branch, or the default pending changelist for p4.

## Instructions

### 0. Detect platform

First check if the user is working in a Perforce depot by looking for a `.p4config` file or `P4CLIENT`/`P4PORT` environment variables:

```bash
# Check for Perforce environment
if p4 info >/dev/null 2>&1; then
VCS="perforce"
else
# Fall back to git remote detection
REMOTE_URL=$(git remote get-url origin)
if echo "$REMOTE_URL" | grep -qi "gitlab"; then
VCS="gitlab"
else
VCS="github"
fi
fi
```

For self-hosted GitLab instances whose hostname doesn't contain "gitlab", the user can override by passing `--vcs gitlab` as an input. For Perforce, the user can override by passing `--vcs perforce`.

### 1. Identify the PR/MR/CL

If a number was provided, use it. Otherwise, detect it:

**GitHub:**
```bash
gh pr view --json number,headRefName,headRefOid -q '{number: .number, branch: .headRefName, head: .headRefOid}'
```

**GitLab:**
```bash
glab mr view --output json | jq '.iid'
```

**Perforce:**
```bash
# List pending changelists for the current user/client
p4 changes -s pending -u $P4USER -c $P4CLIENT
```

Key field differences between platforms:
- GitHub: `number`, `headRefName`, `headRefOid`
- GitLab: `iid`, `source_branch`, `sha`
- Perforce: changelist number (CL), `shelved` files for in-review CLs

### 2. Fetch PR/MR/CL details

**GitHub:**
```bash
gh pr view <PR_NUMBER> --json title,body,state,reviews,comments,headRefName,headRefOid,statusCheckRollup
OWNER_REPO=$(gh repo view --json nameWithOwner -q .nameWithOwner)
gh api "repos/$OWNER_REPO/pulls/<PR_NUMBER>/comments"
gh api --paginate "repos/$OWNER_REPO/issues/<PR_NUMBER>/comments?per_page=100"
```

GitHub PRs are also issues, so general PR comments live on the issue comments endpoint. Greptile may edit a single general PR comment on each review cycle instead of creating a new review or comment. Always inspect the latest Greptile-authored general comment by `updated_at`, including any "Prompt to fix all with AI" section, before concluding that the PR is clear.

**GitLab:**
```bash
glab mr view <MR_IID> --output json
# Fetch discussions (inline diff comments are type "DiffNote"; general comments have null type)
glab api "projects/:fullpath/merge_requests/<MR_IID>/discussions"
```

For GitLab, paginate discussions if needed (add `?per_page=100&page=N`).

**Perforce:**
```bash
# Get changelist description, files, and status
p4 describe -s <CL_NUMBER>

# Get shelved files (for in-review CLs)
p4 describe -S <CL_NUMBER>

# Get the diff of the shelved changelist
p4 diff2 //...@=<CL_NUMBER> //...@=<CL_NUMBER>

# List review comments (if using p4 review workflow)
p4 review -c <CL_NUMBER>
```

Key Perforce CL fields:
- `Change`: changelist number
- `Status`: `pending`, `submitted`, `shelved`
- `Description`: the CL description / commit message
- `Files`: list of files in the CL

### 3. Wait for pending checks

Before analyzing, ensure all status checks have completed. If any checks are `PENDING` or `IN_PROGRESS` (GitHub) / `running` or `pending` (GitLab), poll every 30 seconds until all checks reach a terminal state.

**GitHub:** poll `statusCheckRollup` from `gh pr view`.

**GitLab:**
```bash
glab api "projects/:fullpath/merge_requests/<MR_IID>/pipelines"
```
Pipeline statuses: `running`, `pending`, `success`, `failed`, `canceled`, `skipped`. Poll until no pipeline has `running` or `pending` status.

**Perforce:** Perforce doesn't have built-in CI checks natively. If the team uses a review tool (Swarm, etc.) or an external CI triggered by shelve events, check the relevant system. Otherwise, proceed to analysis immediately.

### 4. Require a fresh Greptile review for the current head

For GitHub PRs, do not treat an existing Greptile review, comment, or summary as current unless it is tied to the PR's exact current `headRefOid`. This is especially important after pushing a new commit to an existing PR: a Greptile review on an older commit is stale, even if the PR still has a Greptile comment or prior review.

Fetch the current head SHA immediately before the Greptile gate:

```bash
HEAD_SHA=$(gh pr view <PR_NUMBER> --json headRefOid -q .headRefOid)
```

Then inspect check-runs for that commit and require a completed Greptile run:

```bash
OWNER_REPO=$(gh repo view --json nameWithOwner -q .nameWithOwner)
GREPTILE_CHECKS=$(gh api "repos/$OWNER_REPO/commits/$HEAD_SHA/check-runs?per_page=100" \
--jq '[.check_runs[] | select(.name | test("greptile"; "i"))]')

# A run only counts as a valid fresh pass when it has completed AND concluded cleanly.
# GitHub check-run conclusions: success, neutral, skipped, failure, timed_out,
# cancelled, action_required, stale. Treat success/neutral as clean;
# everything else (especially failure and action_required) must block.
FRESH_GREPTILE_COMPLETED=$(echo "$GREPTILE_CHECKS" \
| jq '[.[] | select(.status == "completed")] | length')
FRESH_GREPTILE_CLEAN=$(echo "$GREPTILE_CHECKS" \
| jq '[.[] | select(.status == "completed" and (.conclusion | IN("success","neutral")))] | length')
FRESH_GREPTILE_BLOCKING=$(echo "$GREPTILE_CHECKS" \
| jq '[.[] | select(.status == "completed" and ((.conclusion | IN("success","neutral")) | not))] | length')

if [ "$FRESH_GREPTILE_COMPLETED" = "0" ]; then
echo "Blocked: no completed Greptile review/check is tied to current PR head $HEAD_SHA."
echo "Request a fresh Greptile review against this head before marking the PR check done."
echo "Suggested trigger: gh pr comment <PR_NUMBER> --body \"@greptile review\""
exit 1
fi

if [ "$FRESH_GREPTILE_BLOCKING" != "0" ] || [ "$FRESH_GREPTILE_CLEAN" = "0" ]; then
echo "Blocked: Greptile completed on head $HEAD_SHA but did not conclude clean"
echo "(conclusion was failure/action_required/timed_out/cancelled/stale, or no clean run exists)."
echo "Address the findings, push, and re-run Greptile until it concludes success/clean on the new head."
exit 1
fi
```

If a Greptile check exists for the current head but is still pending or in progress, wait for it with the same polling pattern used by `greploop` rather than proceeding from older review material. If no Greptile check appears for the current head after a reasonable wait, report the PR as blocked on a fresh Greptile review for `HEAD_SHA` and stop. Do not mark the check complete from PR comments, PR reviews, or Greptile summaries that cannot be associated with the current head SHA.

For GitLab installations with Greptile integration, apply the same freshness rule against the MR's current head SHA:

```bash
# 1. Get the MR's current head SHA
MR_SHA=$(glab mr view <MR_IID> --output json | jq -r '.sha // .diff_refs.head_sha')

# 2. Find the latest pipeline for that EXACT sha, then the Greptile job within it.
LATEST_PIPELINE_ID=$(glab api "projects/:fullpath/merge_requests/<MR_IID>/pipelines" \
| jq -r --arg sha "$MR_SHA" '[.[] | select(.sha == $sha)] | sort_by(.id) | last | .id // empty')

if [ -n "$LATEST_PIPELINE_ID" ]; then
GREPTILE_JOBS=$(glab api "projects/:fullpath/pipelines/$LATEST_PIPELINE_ID/jobs" \
| jq --arg sha "$MR_SHA" '[.[] | select(.name | test("greptile"; "i"))
| {name, status, pipeline_sha: $sha}]')
else
GREPTILE_JOBS='[]'
fi

GREPTILE_JOB_SUCCESS=$(echo "$GREPTILE_JOBS" \
| jq '[.[] | select(.status == "success")] | length')
GREPTILE_JOB_BLOCKING=$(echo "$GREPTILE_JOBS" \
| jq '[.[] | select(.status != "success")] | length')

# 3. If Greptile integrates via MR notes instead of a CI job, require the newest
# Greptile note to reference the current head sha and report a clean review.
GREPTILE_NOTES=$(glab api "projects/:fullpath/merge_requests/<MR_IID>/discussions?per_page=100" \
| jq --arg sha "$MR_SHA" '[.[].notes[]
| select(.author.username | test("greptile"; "i"))]
| sort_by(.updated_at // .created_at)')
GREPTILE_NOTE_CLEAN=$(echo "$GREPTILE_NOTES" \
| jq --arg sha "$MR_SHA" 'if length == 0 then 0
elif ((last.body // "") | contains($sha) and test("Confidence Score:[[:space:]]*5/5|Confidence:[[:space:]]*5/5|\\b5/5\\b"; "i") and (test("Prompt To Fix|blocking issue|failed|action required"; "i") | not)) then 1
else 0 end')

if [ "$GREPTILE_JOB_SUCCESS" = "0" ] && [ "$GREPTILE_NOTE_CLEAN" = "0" ]; then
echo "Blocked: no successful Greptile job or completed-clean current-head Greptile note is tied to MR head $MR_SHA."
exit 1
fi

if [ "$GREPTILE_JOB_BLOCKING" != "0" ]; then
echo "Blocked: at least one Greptile job for MR head $MR_SHA did not succeed."
exit 1
fi
```

Block completion if, for `MR_SHA`, there is (a) no Greptile job or note at all (missing), (b) the newest Greptile job/note is tied to a different sha (stale), or (c) the Greptile job status is not `success`. A completed Greptile result for a different SHA is stale and must block completion.

For Perforce installations with Greptile integration, apply the same rule using the CL's current shelved-revision identity and the Greptile webhook/review artifact tied to it; a Greptile result for an earlier shelf is stale and must block completion.

### 5. Analyze the PR/MR

Once all checks are complete, evaluate these areas:

#### A. Status Checks

- Are all CI checks passing?
- If any are failing, identify which ones and the failure reason.

#### B. PR/MR Description

- Is the description complete and follows team conventions?
- Are all required sections filled in?
- Are there TODOs or placeholders that need updating?

#### C. Review Comments

- Inline code review comments that need addressing
- Look for bot review comments (e.g. from `greptile-apps[bot]` on GitHub, or the Greptile bot user on GitLab, linters, etc.)
- Human reviewer comments
- **Perforce:** review comments from `p4 review` or external review tools

#### D. General Comments

- Discussion comments on the PR/MR
- For GitHub, check the issue comments endpoint and use `updated_at` to catch bot comments edited in place. Greptile's latest edited summary can contain actionable items even when there are no new inline comments.
- Bot comments (deploy previews, etc.) - usually informational
- **Perforce:** CL description should include a clear summary, affected files rationale, and testing notes

### 6. Categorize issues

For each issue found, categorize as:

| Category | Meaning |
|---|---|
| **Actionable** | Code changes, test improvements, or fixes needed |
| **Informational** | Verification notes, questions, or FYIs that don't require changes |
| **Already addressed** | Issues that appear to be resolved by subsequent commits |

### 7. Report findings

Present a summary table:

| Area | Issue | Status | Action Needed |
|------|-------|--------|---------------|
| Status Checks | CI build failing | Failing | Fix type error in `src/api.ts` |
| Review | "Add null check" - @reviewer | Actionable | Add guard clause |
| Description | TODO placeholder in test plan | Actionable | Fill in test plan |
| Review | "Looks good" - @teammate | Informational | None |

### 8. Fix issues (if requested)

If there are actionable items:

1. Switch to the PR/MR's branch (git) or ensure files are open in the correct CL (Perforce) if not already.
2. Ask the user if they want to fix the issues.
3. If yes, make the fixes, then:

**GitHub/GitLab:** commit and push:
```bash
git add <files>
git commit -m "address review feedback"
git push
```

**Perforce:** open files for edit, make changes, and re-shelve:
```bash
p4 edit <file>
# make changes
p4 shelve -f -c <CL_NUMBER>
```

### 9. Resolve review threads

After addressing comments, resolve the corresponding review threads.

**Perforce** - Perforce does not have a native "resolve thread" concept. Instead, mark comments as addressed by updating the CL description or by responding in the review tool being used (Swarm, etc.). If using `p4 review`:

```bash
# Mark files as reviewed after addressing feedback
p4 review -c <CL_NUMBER>
```

**GitHub** - fetch unresolved thread IDs (paginate if needed - see [the GraphQL reference](references/graphql-queries.md)):

```bash
gh api graphql -f query='
query($cursor: String) {
repository(owner: "OWNER", name: "REPO") {
pullRequest(number: PR_NUMBER) {
reviewThreads(first: 100, after: $cursor) {
pageInfo { hasNextPage endCursor }
nodes {
id
isResolved
comments(first: 1) {
nodes { body path }
}
}
}
}
}
}'
```

If `hasNextPage` is true, repeat with `-f cursor=ENDCURSOR` to get remaining threads.

Then resolve threads that have been addressed or are informational:

```bash
gh api graphql -f query='
mutation {
resolveReviewThread(input: {threadId: "THREAD_ID"}) {
thread { isResolved }
}
}'
```

Batch multiple resolutions into a single mutation using aliases (`t1`, `t2`, etc.).

**GitLab** - fetch unresolved discussions (see [the GitLab API reference](references/gitlab-api.md)):

```bash
glab api "projects/:fullpath/merge_requests/<MR_IID>/discussions?per_page=100"
```

Filter for discussions where `"resolved": false`. Collect each discussion's `id`.

Resolve each discussion individually (GitLab has no batch resolution):

```bash
glab api --method PUT \
"projects/:fullpath/merge_requests/<MR_IID>/discussions/<DISCUSSION_ID>" \
--field resolved=true
```

Repeat for each unresolved discussion ID.

### 10. Multiple PRs/MRs/CLs

If checking a chain of PRs/MRs/CLs, process them sequentially.

**Perforce** - to check multiple changelists at once:
```bash
p4 changes -s pending -u $P4USER -c $P4CLIENT -l
```

## Output format

Summarize:
- PR/MR/CL title or description and current state
- Platform detected (GitHub / GitLab / Perforce)
- Status checks summary (passing/failing/pending) - or N/A for Perforce
- Total issues found
- Actionable items with descriptions
- Items that can be ignored with reasons
- Recommended next steps
Loading