Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
457 commits
Select commit Hold shift + click to select a range
dd35c2f
feat(web): add team pages and session scope controls (#2164)
open-inspect[bot] Sep 30, 2026
fcea950
feat(web): open diffs in the main column beside the session sidebar (…
ColeMurray Sep 30, 2026
5be3545
test(modal-infra): validate SDK arguments with protobuf contracts (#2…
ColeMurray Sep 30, 2026
ec52d46
fix: preserve participant identity and Better Auth authority (#2165)
ColeMurray Sep 30, 2026
3b0b575
fix(web): use shared dropdowns for composer workspace controls (#2171)
ColeMurray Sep 30, 2026
19e7993
fix(web): use inline session visibility controls (#2173)
ColeMurray Oct 1, 2026
c05c6e0
fix(control-plane): quiet team reads and complete subscribe capabilit…
ColeMurray Oct 1, 2026
70b8ca4
fix(web): keep team context and scope refresh isolated (#2176)
ColeMurray Oct 1, 2026
ef4f737
fix(deps): override sharp to ^0.35.4 for libvips/libheif advisories (…
rhlsthrm Oct 1, 2026
3789205
fix: restrict directory emails and remove team activity (#2175)
ColeMurray Oct 1, 2026
eb50181
fix: require team session membership and remove ownership moves (#2184)
ColeMurray Oct 1, 2026
68e6331
chore(deps): bump hono from 4.13.5 to 4.13.12 in the npm_and_yarn gro…
dependabot[bot] Oct 1, 2026
9c2e3c8
feat(control-plane): add team-scoped secrets (#2179)
ColeMurray Oct 1, 2026
85295cf
fix: tighten team session collaborator and archive follow-ups (#2186)
ColeMurray Oct 1, 2026
2ea6607
refactor: move collaborator eligibility query into UserStore (#2187)
ColeMurray Oct 1, 2026
f1cf069
fix: supply Modal restore credentials from the control plane (#2178)
ColeMurray Oct 1, 2026
2cb8b44
feat: add team repository grants and access checks (#2181)
ColeMurray Oct 1, 2026
45a0b0b
feat(control-plane): scope installation tokens to session repositorie…
ColeMurray Oct 1, 2026
5015e10
feat(web): move media into Info as collapsible Artifacts (#2199)
ColeMurray Oct 1, 2026
b98a378
refactor: extract sandbox watchdog effects (COL-246) (#2172)
ColeMurray Oct 1, 2026
499f348
docs: correct modal-vm provider and recovery guidance (#2200)
ColeMurray Oct 2, 2026
9b398dc
fix(web): use shared Select component on team page dropdowns (#2204)
ColeMurray Oct 2, 2026
8fa13d6
test: verify integrated sandbox lifecycle boundaries (COL-247) (#2203)
ColeMurray Oct 2, 2026
d343cac
feat: add team-owned environments (#2205)
ColeMurray Oct 2, 2026
4f6efd1
feat: add team-owned automations (#2206)
ColeMurray Oct 2, 2026
df93dac
fix(control-plane): require team membership for sandbox child actions…
rhlsthrm Oct 2, 2026
4664486
fix(control-plane): commit team mutations with their audit rows (#2124)
rhlsthrm Oct 2, 2026
27dfc9f
fix(web): let team members leave a team from settings (#2121)
rhlsthrm Oct 2, 2026
756d0dc
fix(web): refresh composer team policy after settings change (#2189)
rhlsthrm Oct 2, 2026
f289e8b
fix(sandbox-runtime): fail turns whose text exceeds the event limit (…
rhlsthrm Oct 2, 2026
b8c9a80
fix(types): validate message repository row casts (#2207)
ColeMurray Oct 2, 2026
9ccd3bd
fix: require active-author membership for team child spawns (#2213)
ColeMurray Oct 2, 2026
d0a470e
fix(web): keep team pages open after slug renames (#2215)
ColeMurray Oct 2, 2026
452b0b9
fix: start archive preservation before awaiting status projection (#2…
ColeMurray Oct 2, 2026
1c691ec
fix(control-plane): keep a reserved capture while its own deadline ho…
rhlsthrm Oct 2, 2026
864525d
feat: add session source and user attribution analytics (#2218)
ColeMurray Oct 3, 2026
5abc1fb
feat: enforce team boundaries for Slack channels (#2183)
ColeMurray Oct 3, 2026
530d2d0
chore(deps): bump urllib3 from 2.7.0 to 2.8.0 in /packages/sandbox-im…
dependabot[bot] Oct 3, 2026
84a6384
feat(web): autosave session visibility and child-session scope (#2232)
ColeMurray Oct 3, 2026
1a08d57
test: reduce redundant suites while preserving coverage (#2230)
ColeMurray Oct 3, 2026
21eb41f
feat(web): navigate expanded artifacts with arrow keys (#2234)
ColeMurray Oct 3, 2026
29bb988
feat(control-plane): route GitHub work by team and repository ID (#2225)
ColeMurray Oct 3, 2026
006e7c9
fix(web): hide loaded automation list after 403/404 refetch (#2219)
rhlsthrm Oct 3, 2026
87756a1
fix(web): omit unchanged repositories when editing an environment (#2…
rhlsthrm Oct 3, 2026
3b66a3f
feat(web): reorganize analytics into an overview and tabs (#2233)
ColeMurray Oct 3, 2026
026b34d
fix(web): disable wrangler keep_names so next-themes' script runs (#2…
rhlsthrm Oct 3, 2026
aab3d13
fix(control-plane): require sessions.create to create automations (#2…
ColeMurray Oct 3, 2026
34fc771
fix(sandbox-runtime): disable Claude Code file-based auto memory (#2239)
ColeMurray Oct 3, 2026
0dcad19
feat(web): persist unsent prompt drafts across page reloads (#2237)
ColeMurray Oct 3, 2026
0df5f5c
feat(control-plane): add Linear team bindings (#2235)
ColeMurray Oct 3, 2026
2ffffd1
fix(web): persist composer team selection in localStorage (#2240)
ColeMurray Oct 3, 2026
c567c5f
feat: correlate sandbox event processing and acknowledgements (#2211)
ColeMurray Oct 3, 2026
a8fcb88
feat: add classification reasoning effort for OpenAI classifiers (#2243)
ColeMurray Oct 3, 2026
9fd0348
perf: run coverage across parallel CI shards (#2238)
ColeMurray Oct 3, 2026
a146005
feat: add Claude SDK trajectory logging to sandbox runtime (#2210)
ColeMurray Oct 3, 2026
387d33f
fix(web): use shared Select for team channel binding dropdowns (#2245)
ColeMurray Oct 3, 2026
1c02f73
perf: shard control-plane coverage across CI runners (#2247)
ColeMurray Oct 3, 2026
914ad74
feat: diagnose sandbox event loss and heartbeat delays (#2228)
ColeMurray Oct 3, 2026
1fdbd90
fix: harden Terraform plan capture and PR comments (#2246)
ColeMurray Oct 3, 2026
fc516d9
fix(web): keep cached target catalogs through transient errors (#2248)
ColeMurray Oct 3, 2026
2617b02
fix(control-plane): arm heartbeat deadline while awaiting reconnect (…
ColeMurray Oct 3, 2026
420d68a
fix(control-plane): re-authorize automation launches with full guard …
ColeMurray Oct 3, 2026
523d4ef
fix: queue GitHub autofix feedback during recovery holds (#2250)
ColeMurray Oct 3, 2026
d120e46
fix(slack-bot): preserve threads during binding lookup outages (#2252)
ColeMurray Oct 3, 2026
e2f03f2
fix: revoke Slack team-session access on channel unbind (#2253)
ColeMurray Oct 4, 2026
4fb40ec
chore(web): ban native selects and migrate to shared Select (#2256)
ColeMurray Oct 4, 2026
4fd643c
fix: record shadow denials for session lists and WebSockets (#2255)
ColeMurray Oct 4, 2026
d53df53
fix(web): make session visibility saves and cascades reliable (#2254)
ColeMurray Oct 4, 2026
a05d417
feat: add persistent scoped session memory (#2214)
ColeMurray Oct 4, 2026
be36560
docs: update guides for team-owned resources and access (#2217)
ColeMurray Oct 4, 2026
4d98ad1
refactor(web): move personal memory toggle to settings, group sidebar…
ColeMurray Oct 4, 2026
c3c3320
fix: use server capabilities for Teams UI (#2258)
ColeMurray Oct 4, 2026
818a259
docs: consolidate Teams changelog entries (#2262)
ColeMurray Oct 4, 2026
1f9ff86
fix: restrict team session defaults to team or workspace (#2260)
ColeMurray Oct 4, 2026
3abc4be
test(web): fix flaky slack over-limit routing rules timeout (#2264)
ColeMurray Oct 4, 2026
80fd4cc
docs: condense Teams content in authorization guide (#2265)
ColeMurray Oct 4, 2026
d605e35
fix: reply and resolve inline threads in autofix prompt (#2266)
ColeMurray Oct 4, 2026
9bc6a4e
fix(control-plane): resume pending modal-vm lookups on alarm (#2267)
ColeMurray Oct 4, 2026
82aba91
chore(ci): add scoped Dependabot version updates (#2269)
ColeMurray Oct 4, 2026
26649ca
ci: run coverage suites only when their inputs change (#2271)
ColeMurray Oct 4, 2026
9091f57
fix(web): return focus to timeline file links after closing diffs (#2…
ColeMurray Oct 4, 2026
14d0eac
feat(github-bot): support !model and !reasoning flags in mentions (#2…
ColeMurray Oct 4, 2026
556f20a
docs: add changelog entry for GitHub model override flags (#2283)
ColeMurray Oct 4, 2026
d3e533e
chore(deps): bump mypy from 1.19.1 to 2.3.1 in /packages/modal-infra …
dependabot[bot] Oct 4, 2026
2ce49bc
chore(deps-dev): bump lint-staged from 16.4.0 to 17.6.0 (#2276)
dependabot[bot] Oct 4, 2026
7678552
chore(deps-dev): bump @testing-library/jest-dom from 6.9.1 to 7.0.1 (…
dependabot[bot] Oct 4, 2026
954b9f2
chore(deps): bump the actions group across 1 directory with 7 updates…
dependabot[bot] Oct 4, 2026
73d14de
feat(linear-bot): allow choosing the Claude Agent harness for Linear …
ColeMurray Oct 4, 2026
01d1ab5
feat: expose webhook invocation IDs and status endpoint (#2270)
ColeMurray Oct 4, 2026
300f267
fix(types): validate unsafe row casts (#2113)
open-inspect[bot] Oct 4, 2026
b5bb5df
docs: add changelog entries for memory, drafts, and redesigns (#2287)
ColeMurray Oct 4, 2026
31f2afa
fix(web): reset shutdown banner recovery state per phase (#2268)
ColeMurray Oct 4, 2026
8000ed5
fix(docs): align Fumadocs upgrades on one core version (#2288)
ColeMurray Oct 4, 2026
b413e50
chore: upgrade Prettier and apply required formatting (#2289)
ColeMurray Oct 4, 2026
e364a7e
fix(control-plane): re-drive pending prompt after connect timeout (#2…
ColeMurray Oct 4, 2026
365d678
feat: enable burstable Modal VM CPU and memory requests (#2292)
ColeMurray Oct 6, 2026
2e626cc
fix(control-plane): preview team session memories as their team (#2293)
rhlsthrm Oct 6, 2026
46766e3
feat(github-bot): support Claude Agent harness selection (#2299)
ColeMurray Oct 7, 2026
5d7d110
feat(slack-bot): choose the Claude Agent harness for Slack sessions (…
ColeMurray Oct 8, 2026
8642fd4
fix(classifier): send tool_choice auto and no temperature (#2306)
ankitkr Oct 8, 2026
3c7668a
fix(types): replace unsafe casts with validated parsing (#2329)
ColeMurray Oct 11, 2026
2b21fee
fix(control-plane): apply profile claims to known bot actors (#2324)
ColeMurray Oct 11, 2026
7130e57
refactor(cache-store): ttlMs option with strict TTL validation (#2330)
ColeMurray Oct 11, 2026
1e5524b
feat(memories): search shared memories and their scope picker (#2332)
vaibhavmalik Oct 13, 2026
c31f3d8
test(control-plane): await WebSocket close in integration teardown (#…
ColeMurray Oct 13, 2026
0e9c609
fix(slack-bot): render agent replies as Markdown in Slack (#2313)
vaibhavmalik Oct 13, 2026
6e541f3
fix(shared): strip Slack broadcasts last in sanitizeAgentText (#2339)
ColeMurray Oct 13, 2026
243a86f
fix(web): write URL search params shallowly without in-flight trackin…
ColeMurray Oct 13, 2026
1bcac4d
test: cover PR snapshot lifecycle mapping (#2335)
ColeMurray Oct 13, 2026
31d1999
feat(control-plane): continue a session from webhooks with sessionKey…
ColeMurray Oct 13, 2026
46fd05a
feat(web): preview Markdown files in the changes panel (#2343)
ColeMurray Oct 14, 2026
318b02f
fix: refuse incompatible Linear and GitHub harness/model launches (#2…
ColeMurray Oct 14, 2026
e745035
feat(sandbox-runtime): add native Codex harness (#2344)
ColeMurray Oct 14, 2026
6a63baf
feat(sandbox-images): bake the Codex CLI into sandbox images (#2345)
ColeMurray Oct 14, 2026
3f807c6
feat(shared): add codex to the harness catalog (#2346)
ColeMurray Oct 14, 2026
7a24f15
test(control-plane): give the memory candidate-bound test a 30s timeo…
ColeMurray Oct 14, 2026
95091ae
feat(control-plane): broker OpenAI connected-account access for Codex…
ColeMurray Oct 14, 2026
f072945
feat(control-plane): admit and run Codex sessions (#2348)
ColeMurray Oct 14, 2026
710f070
feat(web): select Codex in the session and automation UI (#2349)
ColeMurray Oct 14, 2026
348e6a4
chore(deps): bump source-map-js from 1.2.1 to 1.2.2 (#2356)
dependabot[bot] Oct 14, 2026
d63f364
chore(deps-dev): bump proxy-addr from 2.0.7 to 2.0.8 (#2355)
dependabot[bot] Oct 14, 2026
74f4a68
chore(deps): bump multidict from 6.7.0 to 6.9.1 in /packages/modal-in…
dependabot[bot] Oct 14, 2026
c33a965
chore(deps): bump multidict from 6.7.1 to 6.9.1 in /packages/daytona-…
dependabot[bot] Oct 14, 2026
430f7d2
chore(deps-dev): bump smol-toml from 1.8.0 to 1.9.1 (#2354)
dependabot[bot] Oct 14, 2026
b1c3800
fix(sandbox-runtime): project Codex events faithfully and guard threa…
ColeMurray Oct 14, 2026
574f33e
fix(deps): bump sharp override to ^0.35.5 (#2359)
ColeMurray Oct 14, 2026
4086183
fix(deps): bump mermaid to ^12.2.0 for katex and lodash-es fixes (#2361)
ColeMurray Oct 14, 2026
3114d22
fix(deps): bump undici override to ^7.29.1 (#2360)
ColeMurray Oct 14, 2026
254e6b0
fix(deps): override postcss-selector-parser to ^7.1.6 (#2362)
ColeMurray Oct 14, 2026
fd65a5d
fix(slack-bot): confirm LLM-picked no-repository target (#2365)
ColeMurray Oct 14, 2026
c40ce32
fix: retain webhook follow-up idempotency (#2368)
ColeMurray Oct 15, 2026
1213d63
fix: honor Codex reasoning in GitHub and Linear integrations (#2370)
ColeMurray Oct 15, 2026
4916966
Fix Codex model override effort fallback at dispatch (#2369)
ColeMurray Oct 15, 2026
6b8daad
fix(sandbox-runtime): account fresh Codex thread usage (#2367)
ColeMurray Oct 15, 2026
4244611
fix: drop held prompts after pre-claim failures (#2366)
ColeMurray Oct 15, 2026
74ecd13
refactor: make sandbox tool registry vendor-neutral (#2381)
ColeMurray Oct 15, 2026
9878fef
refactor: share Claude and Codex supervisor staging (#2380)
ColeMurray Oct 15, 2026
ffb84c3
fix: verify sandbox tool imports without vendor SDKs (#2382)
open-inspect[bot] Oct 15, 2026
099f5fb
feat: mark all Needs attention sessions as read (#2379)
ColeMurray Oct 15, 2026
ea4168a
fix(slack-bot): refuse launches on disabled models (#2309)
ColeMurray Oct 15, 2026
7cff8a6
feat: add a draft condition and ready for review event for PR automat…
himynameisjonas Oct 15, 2026
6dd3353
feat: define generated file contracts and completion extraction (#2316)
ColeMurray Oct 15, 2026
4960d1d
fix(slack-bot): offer the classifier's match as a quick pick (#2303)
ankitkr Oct 15, 2026
c525f26
feat: improve startup latency and SQL failure metrics (#2385)
ColeMurray Oct 15, 2026
c443ad5
fix(auth): name the missing Email permission on GitHub 403 (#2327)
lab1207 Oct 15, 2026
0c00b1b
fix(web): omit unchanged repositories when editing an automation (#2222)
rhlsthrm Oct 15, 2026
a905df3
feat(classifier): support Claude in Amazon Bedrock (#2307)
ankitkr Oct 15, 2026
c33bc21
fix(control-plane): settle unconfirmed routine sandbox checkpoints (#…
ColeMurray Oct 15, 2026
68a38b7
refactor: isolate Home launch preferences and transaction (#2383)
ColeMurray Oct 15, 2026
02a6bbf
Keep repository override controls consistent (#2311)
ColeMurray Oct 15, 2026
9199021
docs: add Simplified Chinese README (#2420)
ColeMurray Oct 15, 2026
03ab2bd
feat(web): render rich child session status results (#2424)
ColeMurray Oct 15, 2026
48447fa
fix(e2b): expose web terminal on create and resume (#2410)
ColeMurray Oct 15, 2026
824d678
fix(control-plane): preserve dispatch deadlines when breaker reset fa…
ColeMurray Oct 16, 2026
e750374
chore(deps-dev): bump @opennextjs/cloudflare from 1.19.11 to 1.20.2 (…
dependabot[bot] Oct 20, 2026
f381b47
Keep global repository picker UI consistent (#2432)
ColeMurray Oct 20, 2026
6f87751
fix: handle fatal reports after sandbox reconnects (#2398)
ColeMurray Oct 20, 2026
9aa839d
fix: guide agents to propose durable memories (#2396)
ColeMurray Oct 20, 2026
5f729d3
fix(slack): order activity refreshes before completion (#2402)
ColeMurray Oct 20, 2026
34b9f44
fix: reject concurrent sandbox pushes for the same branch (#2405)
ColeMurray Oct 20, 2026
a4c3de3
feat(web): let label conditions exclude labels in the automation form…
himynameisjonas Oct 20, 2026
9eee5a4
fix(web): retain confirmed titles in loaded sidebar pages (#2404)
ColeMurray Oct 20, 2026
ed8f776
fix(control-plane): let Autofix act on approvals with inline comments…
ColeMurray Oct 20, 2026
bc2fd65
docs: add changelog entries for Codex and recent features (#2441)
ColeMurray Oct 20, 2026
5860772
chore(deps): bump aiohttp from 3.14.3 to 3.14.4 in /packages/modal-in…
dependabot[bot] Oct 20, 2026
9c4b560
chore(deps-dev): bump @opennextjs/cloudflare from 1.19.11 to 1.20.2 i…
dependabot[bot] Oct 20, 2026
164e47c
chore(deps): bump wrangler, esbuild, and Cloudflare test tooling (#2443)
ColeMurray Oct 20, 2026
728c97d
chore(deps-dev): bump lint, format, and test tooling (#2442)
ColeMurray Oct 20, 2026
9c87305
chore(deps): bump hono, ws, cron-parser, and aws-sdk (#2444)
ColeMurray Oct 20, 2026
e133497
chore: remove OpenComputer sandbox provider (#2450)
ColeMurray Oct 20, 2026
d594ab0
Reduce duplicate repository scope settings markup (#2451)
ColeMurray Oct 20, 2026
3738574
refactor(web): share operator tag input across condition editors (#2439)
ColeMurray Oct 21, 2026
de47b08
chore(deps): bump next, react, radix-ui, and fumadocs (#2445)
ColeMurray Oct 21, 2026
4f0b401
chore(deps): bump aiohttp from 3.14.3 to 3.14.4 in /packages/daytona-…
dependabot[bot] Oct 21, 2026
68f31f2
fix: run TS scripts without a flag and typecheck erasable syntax (#2455)
ColeMurray Oct 21, 2026
5a37aa7
chore(deps): bump @anthropic-ai/sdk to 0.133 (#2446)
ColeMurray Oct 21, 2026
a243de9
fix(control-plane): fail the prompt a held heartbeat save leaves behi…
ColeMurray Oct 21, 2026
12ec2ac
feat(web): show pull request state on session search results (#2461)
ColeMurray Oct 21, 2026
cfe11d4
feat(sandbox-runtime): surface Codex errors and warnings (#2460)
ColeMurray Oct 21, 2026
5476ce0
feat(sandbox-runtime): show Codex plan updates as tasks (#2459)
ColeMurray Oct 21, 2026
a3ed43a
docs: correct lifecycle hook credential scope (#2463)
ColeMurray Oct 21, 2026
f4220ec
chore(deps): bump Codex CLI to 0.163.0 (#2465)
ColeMurray Oct 21, 2026
de41b73
feat: mark a parent session and its children read at once (#2464)
ColeMurray Oct 21, 2026
3c49d88
refactor(classifier): separate protocol handling from bot policy (#2387)
ColeMurray Oct 21, 2026
3c90cbe
feat: let administrators merge duplicate member accounts (#2477)
ColeMurray Oct 22, 2026
776c771
feat(sandbox): add Boat as a sandbox provider (#2458)
ColeMurray Oct 22, 2026
0ad7622
feat(sandbox): prebuilt images for the Boat provider (#2478)
ColeMurray Oct 22, 2026
ad6c9a9
perf(sandbox): overlap boot steps that never depended on each other (…
ColeMurray Oct 23, 2026
cf2aae3
perf(boat): start the runtime from the create request (#2483)
ColeMurray Oct 23, 2026
d75a4ec
feat(sandbox): link Boat sandboxes to their dashboard page (#2481)
ColeMurray Oct 23, 2026
d8e8385
chore(deps): bump dompurify from 3.4.16 to 3.4.17 (#2480)
dependabot[bot] Oct 23, 2026
a2d74a9
chore(deps): bump opentelemetry-api from 1.44.0 to 1.45.1 in /package…
dependabot[bot] Oct 23, 2026
96fa18d
chore(deps): bump certifi from 2026.1.4 to 2026.10.19 in /packages/mo…
dependabot[bot] Oct 23, 2026
153b36c
fix(boat): stage the tunnel env file under /tmp for the setup script …
ColeMurray Oct 23, 2026
d05f9dd
fix(boat): keep the launcher lock in /tmp so a quick resume finds the…
ColeMurray Oct 23, 2026
11af44f
feat(boat): send name, visibility and ports with the create (#2492)
ColeMurray Oct 23, 2026
b3e036c
fix(sandbox-images): override toml to 5.0.1 in image npm locks (#2488)
ColeMurray Oct 23, 2026
3be3e71
chore(deps): bump zod from 4.4.3 to 4.6.6 (#2494)
dependabot[bot] Oct 23, 2026
063a610
fix(deps): bump vitest to 4.1.12 and override glob for node-minify (#…
ColeMurray Oct 23, 2026
c69ef93
fix(deps): bump certifi and opentelemetry-api in remaining uv locks (…
ColeMurray Oct 23, 2026
784adee
Reduce duplicated confirmation dialog markup (#2476)
ColeMurray Oct 23, 2026
3325882
chore(deps): bump zod from 4.6.6 to 4.6.7 (#2496)
dependabot[bot] Oct 24, 2026
e69611f
fix(vercel): confirm snapshots returned while the source stops (#2471)
ankitkr Oct 24, 2026
a2da7e5
fix(vercel): create sandboxes non-persistent (#2474)
ankitkr Oct 24, 2026
fc445ad
feat(sandbox-runtime): price Codex turns from the models.dev catalog …
ColeMurray Oct 24, 2026
3f73163
feat(web): use skeletons for automations list and run history (#2501)
ColeMurray Oct 24, 2026
0d3a710
feat(web): use skeletons for session list loading states (#2500)
ColeMurray Oct 24, 2026
1f771f5
feat(web): use skeletons for automation page loading (#2502)
ColeMurray Oct 24, 2026
a6264cf
feat(web): use skeletons for settings loading states (#2504)
ColeMurray Oct 24, 2026
dd7e1fe
feat(web): duplicate an automation from its detail page (#2499)
ColeMurray Oct 24, 2026
d146e4d
feat(web): render Mermaid diagrams in assistant messages (#2407)
ColeMurray Oct 24, 2026
da2186d
feat: add an All view for shared memories (#2503)
ColeMurray Oct 24, 2026
1d51f4f
perf: scope shared memory search to authorized partitions (#2507)
ColeMurray Oct 24, 2026
0ad9a35
fix(types): validate migration row casts (#2357)
ColeMurray Oct 24, 2026
012e1d2
feat: run the Codex harness on every sandbox provider (#2508)
ColeMurray Oct 24, 2026
b1add96
feat: retry scheduled runs whose launch fails before the prompt (#2510)
ColeMurray Oct 25, 2026
593a6a2
fix: fail the boot prompt when a fatal report opens the breaker (#2509)
ColeMurray Oct 25, 2026
1abec51
chore(ci): keep Dependabot out of generated image locks (#2511)
ColeMurray Oct 25, 2026
edbd7af
chore(deps): bump modal-infra Python deps except modal (#2512)
ColeMurray Oct 25, 2026
1994002
chore(deps): refresh sandbox image Python locks (#2513)
ColeMurray Oct 25, 2026
a48864f
chore(deps): bump claude-agent-sdk to 0.2.168 (#2514)
ColeMurray Oct 25, 2026
70873a5
refactor: extract automation scheduler Slack service (#2520)
ColeMurray Oct 25, 2026
e06d0e8
feat: bulk approve, reject, archive and restore memories (#2515)
ColeMurray Oct 25, 2026
8ecc9c5
refactor: unify fatal-report recovery with the alarm result (#2516)
ColeMurray Oct 25, 2026
fc5e75e
refactor: extract automation session and run launch services (#2521)
ColeMurray Oct 25, 2026
9d95eba
refactor: extract automation invocation and recovery services (#2522)
ColeMurray Oct 25, 2026
b409602
fix: skip fresh-boot typechecks and cache control-plane checks (#2524)
ColeMurray Oct 25, 2026
56faa61
refactor: extract automation event handlers (#2523)
ColeMurray Oct 25, 2026
77467ed
refactor: standardize scheduler runtime dependencies (#2526)
ColeMurray Oct 25, 2026
36cbdce
fix: prune superseded Boat base snapshots after deploy (#2525)
ColeMurray Oct 25, 2026
3970dd7
refactor: define explicit continuation policy classes (#2527)
ColeMurray Oct 25, 2026
2f94142
refactor: share GitHub event outcome accounting (#2529)
ColeMurray Oct 25, 2026
8150ff4
refactor: consolidate session continuity service (#2530)
ColeMurray Oct 25, 2026
9f7a377
test: isolate scheduler completion collaborators (#2531)
ColeMurray Oct 25, 2026
c140429
feat: add one-shot scheduled automations (#2411)
ColeMurray Oct 25, 2026
3508f18
refactor: define automation launch admission service (#2532)
ColeMurray Oct 25, 2026
2223e45
fix: shorten unattended sandbox inactivity timeout (#2528)
ColeMurray Oct 25, 2026
fe8e544
fix: migrate Boat snapshots to saved-snapshots API (#2533)
ColeMurray Oct 25, 2026
e2379a4
fix: materialize inbox eligible sessions (#2534)
ColeMurray Oct 26, 2026
ef38e33
fix: fetch sidebar inbox before team memberships load (#2537)
ColeMurray Oct 26, 2026
6d9ecbb
perf: start picker reads from the stored session target (#2540)
ColeMurray Oct 26, 2026
4b9777a
docs: add changelog entries for recent features (#2543)
ColeMurray Oct 26, 2026
2193349
fix: remove redundant web API session lookups (#2539)
ColeMurray Oct 26, 2026
0eb6b7e
docs: cover one-shot schedules and launch retries in AUTOMATIONS.md (…
ColeMurray Oct 26, 2026
efd7091
docs: note Mermaid diagrams in assistant responses (#2549)
ColeMurray Oct 26, 2026
2b48a3a
docs: document duplicating an automation (#2548)
ColeMurray Oct 26, 2026
01663c9
feat(sandbox-runtime): show Codex sub-agents as tasks (#2467)
ColeMurray Oct 26, 2026
88a66a5
feat: add opt-in web and session placement settings (#2542)
ColeMurray Oct 26, 2026
0c7bc0d
fix: cache repository branches and parallelize GitHub pagination (#2538)
ColeMurray Oct 26, 2026
7ebfbbf
chore: sync fork with upstream (ColeMurray/background-agents)
jasoncuriano Oct 26, 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
  •  
  •  
  •  
129 changes: 83 additions & 46 deletions .claude/skills/onboarding/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Use TodoWrite to create a checklist tracking these phases:

1. Initial setup questions
2. Repository setup
3. Credential collection (Cloudflare, Vercel, Modal, Anthropic)
3. Credential collection (Cloudflare, Vercel if selected, Modal, Anthropic)
4. GitHub App creation (+ Google OAuth if enabled)
5. Slack App creation (if enabled)
6. Security secrets generation
Expand All @@ -28,8 +28,9 @@ Use TodoWrite to create a checklist tracking these phases:
9. Post-deployment Slack setup (if enabled)
10. Post-deployment GitHub Bot setup (if enabled)
11. Web app deployment
12. Verification
13. CI/CD setup (optional)
12. Workspace Owner bootstrap
13. Verification
14. CI/CD setup (optional)

## Phase 1: Initial Questions

Expand All @@ -44,14 +45,21 @@ Use AskUserQuestion to gather:
1. **Directory location** - Where to create the project (default: current directory or
~/workplace/open-inspect-{suffix})
2. **GitHub account** - Which account/org hosts the private repo
3. **Deployment name** - A globally unique identifier for URLs (e.g., their GitHub username, company
name, or the random suffix generated above). Explain this creates URLs like
`open-inspect-{deployment_name}.vercel.app` and must be unique across all Vercel users.
4. **Slack integration** - Yes or No
5. **GitHub bot integration** - Yes or No (automated PR reviews and comment-triggered actions)
6. **Sign-in providers** - GitHub, Google, or both. At least one is required.
7. **Prerequisites confirmation** - Confirm they have accounts on Cloudflare, Vercel, Modal,
Anthropic
3. **Deployment name** - A unique identifier for deployment URLs (e.g., their GitHub username,
company name, or the random suffix generated above); Vercel project URLs must be globally unique.
4. **Web platform** - Vercel (default) or Cloudflare Workers. If Cloudflare, ask whether to use a
custom domain; if so, collect the hostname and Cloudflare zone ID. Derive one canonical web app
URL from this choice and the deployment name using Step 3 of `docs/GETTING_STARTED.md`; use it
for both OAuth callbacks and the GitHub App homepage.
5. **Slack integration** - Yes or No
6. **GitHub bot integration** - Yes or No (automated PR reviews and comment-triggered actions)
7. **Sign-in providers** - GitHub, Google, or both. At least one is required.
8. **Admission mode** - Restricted (collect the allowed GitHub usernames, exact verified emails,
email domains, and/or GitHub orgs) or explicitly open to any authenticated user (no allowlists).
Validate the chosen providers and admission mode against the compatibility table and allowlist
rules in Step 5 of `docs/GETTING_STARTED.md` before proceeding.
9. **Prerequisites confirmation** - Confirm they have Cloudflare, Modal, Anthropic, and GitHub
accounts, plus Vercel only if selected above.

## Phase 2: Repository Setup

Expand All @@ -61,7 +69,7 @@ Execute these commands (substitute values from Phase 1):
mkdir -p {directory_path}
gh repo create {github_account}/open-inspect-{name} --private --description "Open-Inspect deployment"
cd {directory_path}
git clone git@github.com:ColeMurray/open-inspect.git .
git clone git@github.com:ColeMurray/background-agents.git .
git remote rename origin upstream
git remote add origin git@github.com:{github_account}/open-inspect-{name}.git
git push -u origin main
Expand All @@ -82,21 +90,22 @@ Tell the user:
`*.YOUR-SUBDOMAIN.workers.dev`
- **API Token**: Create at https://dash.cloudflare.com/profile/api-tokens with template "Edit
Cloudflare Workers" + permissions for Workers KV Storage (Edit), Workers R2 Storage (Edit), D1
(Edit)
(Edit), Queues (Edit). For a Cloudflare web app with a custom domain, also grant zone-level
Workers Routes (Edit).

### R2 Bucket

Check wrangler login status, then create bucket:

```bash
wrangler whoami
wrangler r2 bucket create open-inspect-{name}-tf-state
wrangler r2 bucket create open-inspect-terraform-state
```

Tell user to create R2 API Token at R2 → Overview → Manage R2 API Tokens with "Object Read & Write"
permission.

### Vercel
### Vercel (Only If Selected In Phase 1)

- **API Token**: https://vercel.com/account/tokens
- **Team/Account ID**: Settings → "Your ID" (even personal accounts have one, usually starts with
Expand Down Expand Up @@ -126,25 +135,25 @@ user selected GitHub:

1. Go to https://github.com/settings/apps → "New GitHub App"
2. **Name**: `Open-Inspect-{YourName}` (globally unique)
3. **Homepage URL**: The deployed web app URL for the selected platform:
- Vercel: `https://open-inspect-{deployment_name}.vercel.app`
- Cloudflare workers.dev: `https://open-inspect-web-{deployment_name}.{subdomain}.workers.dev`
- Cloudflare custom domain: `https://{your-custom-domain}`
3. **Homepage URL**: The canonical web app URL from Phase 1
4. **Webhook**: Uncheck "Active"
5. If GitHub sign-in is selected, set the **Callback URL** (under "Identifying and authorizing
users"): `{deployed-web-app-url}/api/auth/callback/github`
users"): `{canonical-web-app-url}/api/auth/callback/github`
- **CRITICAL**: The origin must exactly match the Homepage URL selected above.
6. **Repository permissions**: Contents (Read & Write), Pull requests (Read & Write), Metadata
(Read-only), and Issues (Read & Write) only if the GitHub bot is enabled. Pull requests
permission also authorizes creating and applying labels to session-created pull requests;
labeling does not require Issues permission.
7. If GitHub sign-in uses email/domain admission, set **Account permissions**: Email addresses
(Read-only)
8. Create app, note **App ID**
9. If GitHub sign-in is selected, generate a **Client Secret** and note the **Client ID** and
**Client Secret**. Otherwise leave both Terraform values empty.
10. Generate **Private Key** (downloads .pem file)
11. Install app on account, note **Installation ID** from URL
(Read-only). If the GitHub bot is enabled, also grant Actions (Read-only), Checks (Read-only),
and Issues (Read & Write). Pull requests permission also authorizes creating and applying labels
to session-created pull requests; labeling does not require Issues permission.
7. If GitHub organizations are allowlisted, set **Organization permissions**: Members (Read-only).
Existing Apps need the permission change approved on their installations.
8. If GitHub sign-in is enabled, set **Account permissions**: Email addresses (Read-only). Every
GitHub sign-in requires a verified email, regardless of admission mode. Existing Apps need the
permission change approved on their installations.
9. Create app, note **App ID**
10. If GitHub sign-in is selected, generate a **Client Secret** and note the **Client ID** and
**Client Secret**. Otherwise leave both Terraform values empty.
11. Generate **Private Key** (downloads .pem file)
12. Install app on account, note **Installation ID** from URL

After receiving the .pem path, convert to PKCS#8:

Expand All @@ -162,10 +171,8 @@ Guide user:

1. https://console.cloud.google.com/apis/credentials → "Create Credentials" → "OAuth client ID"
2. **Application type**: Web application
3. **Authorized redirect URI**:
`https://open-inspect-{deployment_name}.vercel.app/api/auth/callback/google` (or your
`*.workers.dev` web URL if `web_platform = "cloudflare"`)
- **CRITICAL**: Must match deployed web URL exactly!
3. **Authorized redirect URI**: `{canonical-web-app-url}/api/auth/callback/google`
- **CRITICAL**: Must match the web URL from Phase 1 exactly!
4. OAuth consent screen: request only `openid`, `email`, `profile` scopes (non-sensitive — no Google
verification review required)
5. Note **Client ID** and **Client Secret**
Expand All @@ -174,8 +181,6 @@ Then in `terraform.tfvars`:

- Set `google_client_id` and `google_client_secret` (both required together; leave both empty to
disable)
- Add at least one entry to `allowed_emails` (exact addresses, e.g. `pm@gmail.com`) or
`allowed_email_domains`. Prefer `allowed_emails` for shared domains like gmail.com.
- If Google is the only sign-in provider, leave `github_client_id` and `github_client_secret` empty.
Keep the GitHub App ID, private key, and installation ID configured for repository access.

Expand Down Expand Up @@ -204,20 +209,19 @@ to Slack. Reinstall the app whenever either scope is added to an existing instal
```bash
echo "token_encryption_key: $(openssl rand -base64 32)"
echo "repo_secrets_encryption_key: $(openssl rand -base64 32)"
echo "internal_callback_secret: $(openssl rand -base64 32)"
echo "nextauth_secret: $(openssl rand -base64 32)"
echo "modal_api_secret: $(openssl rand -hex 32)"
echo "github_webhook_secret: $(openssl rand -hex 32)" # Only if GitHub bot enabled
```

## Phase 7: Terraform Configuration

Create `terraform/environments/production/backend.tfvars`:
Create `terraform/environments/production/backend.tfvars`. The bucket is already fixed as
`open-inspect-terraform-state` in `backend.tf`; do not override it here:

```hcl
access_key = "{r2_access_key}"
secret_key = "{r2_secret_key}"
bucket = "open-inspect-{name}-tf-state"
endpoints = {
s3 = "https://{cloudflare_account_id}.r2.cloudflarestorage.com"
}
Expand All @@ -226,10 +230,24 @@ endpoints = {
Create `terraform/environments/production/terraform.tfvars` with all collected values. Set:

```hcl
web_platform = "{vercel_or_cloudflare_from_phase_1}"
enable_durable_object_bindings = false
enable_service_bindings = false
```

If Phase 1 selected a Cloudflare custom domain, also set `cloudflare_custom_domain` and
`cloudflare_zone_id` to the collected hostname and zone ID. Leave both unset otherwise. If Vercel
was not selected, leave `vercel_api_token` and `vercel_team_id` unset (not empty strings).

Set `enable_slack_bot = false` if Slack was declined in Phase 1; Terraform defaults it to `true`. If
Slack was selected, set `enable_slack_bot = true`, `slack_bot_token`, and `slack_signing_secret` to
the collected values.

Write the restricted-mode comma-separated Phase 1 answers to `allowed_users`,
`allowed_email_domains`, `allowed_emails`, and `allowed_github_orgs`; leave unused inputs empty and
set `unsafe_allow_all_users = false`. For explicitly open mode, leave all four lists empty and set
`unsafe_allow_all_users = true`. Use Step 5 of `docs/GETTING_STARTED.md` for the admission contract.

If GitHub bot is enabled, also set:

```hcl
Expand Down Expand Up @@ -315,8 +333,8 @@ After Terraform deployment, guide user:
3. **Webhook URL**:
`https://open-inspect-github-bot-{deployment_name}.{subdomain}.workers.dev/webhooks/github`
4. **Webhook secret**: Enter the `github_webhook_secret` value
5. Under **Subscribe to events**, check: **Pull requests**, **Issue comments**, **Pull request
review comments**
5. Under **Subscribe to events**, check: **Pull requests**, **Issues**, **Issue comments**, **Pull
request reviews**, **Pull request review comments**, **Check suites**, **Workflow runs**
6. Save changes

### Find Bot Username
Expand All @@ -332,30 +350,49 @@ terraform.tfvars.

## Phase 11: Web App Deployment

For the Cloudflare choice from Phase 1, Terraform deploys the web app; no manual step is needed. For
Vercel, deploy from the repository root:

```bash
npx vercel link --project open-inspect-{deployment_name}
npx vercel --prod
```

## Phase 12: Verification
## Phase 12: Bootstrap the Workspace Owner

After the web app is deployed, guide the intended Owner through Step 9 of `docs/GETTING_STARTED.md`.
Obtain their canonical user ID after sign-in; run `npm run rbac:bootstrap-owner` from the repository
root as a dry run, execute only if ready, and verify by rerunning the dry run. Follow Step 9 for
commands and refusal/no-op handling.

## Phase 13: Verification

From the repository root:

```bash
curl https://open-inspect-control-plane-{deployment_name}.{subdomain}.workers.dev/health
curl https://{workspace}--open-inspect-api-health.modal.run
curl -I "$(terraform output -raw web_app_url)"
curl "$(terraform -chdir=terraform/environments/production output -raw modal_health_url)"
curl -I "$(terraform -chdir=terraform/environments/production output -raw web_app_url)"
```

Present a deployment summary table. Instruct the user to test: visit the web app, sign in with each
configured provider, create a session, and send a prompt.

## Phase 13: CI/CD Setup (Optional)
## Phase 14: CI/CD Setup (Optional)

Ask if user wants GitHub Actions CI/CD. If yes, use `gh secret set` for all required secrets.
Ask if user wants GitHub Actions CI/CD. If yes, follow the "Set Up CI/CD (Optional)" section of
`docs/GETTING_STARTED.md` for the required variables and secrets, including the Phase 1 admission
mode and allowlists. CI uses the same `open-inspect-terraform-state` R2 bucket as local Terraform.

## Error Handling

- **"redirect_uri is not associated"**: Callback URL mismatch - update GitHub App settings
- **Durable Object errors**: Must follow two-phase deployment
- **"At least one access control allowlist must be configured"**: Set an appropriate `allowed_*`
Terraform value or the explicit Phase 1 open-access choice; check Step 5 of
`docs/GETTING_STARTED.md` and the corresponding CI variables/secrets.
- **Queue creation or binding permission errors**: Grant Account | Queues | Edit to the Cloudflare
API token and rerun `terraform apply`.
- **Slack bot not responding**: Check Event Subscriptions URL verified, bot invited to channel,
reinstall if scopes changed
- **GitHub bot not responding**: Check webhook URL, secret, `enable_github_bot = true`, and
Expand Down
Loading
Loading