diff --git a/.changeset/fast-automation-session-model.md b/.changeset/fast-automation-session-model.md
deleted file mode 100644
index 985dcff3d..000000000
--- a/.changeset/fast-automation-session-model.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'roomote': patch
----
-
-Honor custom automation model and reasoning overrides for the Fast session across initial and resumed turns, without applying them to delegated coding tasks.
diff --git a/.changeset/fast-reaction-supersession.md b/.changeset/fast-reaction-supersession.md
deleted file mode 100644
index df333f1ae..000000000
--- a/.changeset/fast-reaction-supersession.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@roomote/web': patch
----
-
-Emoji reactions and web platform events (setup kickoffs, input responses) no longer supersede a Fast turn that is parked for an inference retry or waiting to resume after an interruption. Every inline admission used to discard the conversation's older pending turn rows on the assumption that a newer human message stands in for the earlier request; a reaction or platform event does not, so the earlier question was silently dropped and its retry notice was turned into an interruption message. Those turns now keep their row and resume once the conversation is idle again, and a turn's entry and settle reconciles leave a retry notice alone while another durable row for the conversation is still pending, so the resumed run edits it into the answer instead of posting beside a false interruption. Typed human messages still supersede as before.
diff --git a/.changeset/runtime-build-identity.md b/.changeset/runtime-build-identity.md
deleted file mode 100644
index 3db11aa90..000000000
--- a/.changeset/runtime-build-identity.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'roomote': patch
----
-
-Include the running build's commit SHA and dev/prod deployment label alongside the release version in assistant prompts.
diff --git a/.changeset/session-wakeups.md b/.changeset/session-wakeups.md
deleted file mode 100644
index b1f47e47f..000000000
--- a/.changeset/session-wakeups.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@roomote/web': minor
----
-
-Fast Sessions can schedule a message to themselves with the new `manage_wakeups` tool. Ask Fast to "remind me in twenty minutes" or "check every ten minutes whether CI is green" and it creates a wakeup for that Session; when it fires, Fast picks the conversation back up with its history in context, does what was asked, and replies on the surface the Session lives on. One-shot wakeups always reply, recurring ones stay quiet unless there is news and cancel themselves when the monitored condition resolves. Wakeups are scoped to the conversation, need no administrator, are capped at ten per Session, and are cancelled when the Session is archived. Firing is durable: each occurrence is claimed on the row, a delayed queue job is only a hint, and a recovery sweep re-adds lost hints.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8ee260fa7..cf5695b7b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,68 @@
This file tracks product releases for Roomote (single monorepo version). Automated release entries are prepended by `pnpm run version`.
+## 1.4.0 (2026-09-08)
+
+Roomote 1.4 brings reminders, clearer shared Sessions, and richer video evidence together with easier automation setup and more reliable everyday work.
+
+### Highlights
+
+- Schedule reminders and bounded monitoring in a Session, see upcoming wakeups above the composer, and cancel them when they are no longer needed.
+- Follow shared work through current-viewer avatars, recognizable task identities, and inspectable task reports.
+- Share task recordings as native Slack videos and opt into higher-frame-rate capture for motion-heavy demos.
+- Keep automation work in continuous Sessions, set up a Slack manager channel more easily, and choose GPT-6 Astra through additional providers.
+
+### Minor changes
+
+- Enable GPT-6 Astra through Vercel AI Gateway, GitHub Copilot, or OpenCode Zen alongside existing providers, subject to the connected account's model access. Existing model defaults remain unchanged.
+- Expand Session tool exchanges to inspect image questions and results, instructions sent to delegated tasks, and incoming task reports. Consistent robot identities and task links make handoffs easier to follow, and expanded task inspections include the latest submitted report with secret redaction rather than unrelated assistant messages.
+- OpenCode subagents can make one further nested delegation or consultation, allowing depth-two assistance while preserving each role's existing tool permissions.
+- Custom automations now run through Sessions, report delegated results together with actionable suggestions, and keep accepted suggestions in their originating Session and, on Slack, its report thread, including suggestions published directly by Fast reports. Configured environments are delegation preferences rather than guaranteed sandbox launches. Configure a report destination for chat delivery; otherwise results remain in the web Session without an owner-DM fallback. Runs use the creator's credentials, automations without a creator need an admin to re-save them, and Run now reports queued rather than a launched task ID.
+- Ask a Fast Session for a reminder or recurring check, including whole-second delays, and receive results in the same conversation. Fast can offer a specific, bounded follow-up when it can verify an outstanding outcome, scheduling it after you accept; explicit monitoring requests need no additional opt-in. Ongoing-process monitoring stays quiet without news and stops at the agreed bound or earlier when resolved or no longer actionable. Upcoming wakeups show countdowns above the Session composer and can be cancelled by the Session owner or an admin. Wakeups require no administrator to schedule, are limited to ten per Session, and are cancelled when the Session is archived; delivery is best effort rather than an exact-time guarantee.
+- See other people viewing a Session through header avatars and name tooltips; your own avatar is omitted, and the indicator disappears when you are the only viewer.
+- Connecting a Slack account can set up a public #roomote-managers channel when no Manager Channel is configured, without enabling automations or replacing explicit report destinations. Existing Slack apps need updated permissions, reinstallation, and an account reconnect to use automatic channel setup.
+- Fast replies can deliver task recordings as native Slack videos, with authorized viewer links when delivery is unavailable. Motion-heavy demos can opt into native recording up to 60 FPS while ordinary recordings remain at 30 FPS. Existing Slack installations need the new files:write permission, and higher-FPS capture requires the updated recording runtime.
+
+### Patch changes
+
+- Automation avatars no longer show glaring white backgrounds in dark mode, while retaining their light-mode appearance.
+- Azure sandboxes enable idle suspension by default and refresh the policy when reused, resumed, or restored. The policy follows the configured timeout, normally five hours; an explicit zero retains the opt-out.
+- Web transcripts hide newly marked runtime navigation messages already represented by task cards while preserving ordinary conversation links.
+- Previously uploaded artifacts remain available when a replacement upload is interrupted; unversioned task and Session lookups return the latest completed upload while explicit-version reads retain their existing behavior.
+- Completed visual proof is no longer reported as timed out while subsequent review or pull request delivery continues.
+- USD costs use consistent thousands separators, and Task Info refreshes inference costs when opened and while visible instead of leaving stale totals on screen.
+- Device-code connections can recover after a failed authorization dialog is closed and reopened, including GitHub Copilot, ChatGPT, and xAI connections.
+- Discord automation threads accept directed follow-ups without another mention, thread replies avoid invalid inline reply references, and coding-task links clearly identify newly started work.
+- Honor custom automation model and reasoning overrides for the Fast session across initial and resumed turns, without applying them to delegated coding tasks.
+- Fast retains follow-up messages sent during response closeout for the next turn, while reactions and platform events no longer discard parked questions or turn their retry notices into false interruptions.
+- Merge announcements recover uniquely matched signed pull request screenshot URLs after redaction so images remain available without relaxing safe-fetch restrictions.
+- Session board cards and long labels stay within mobile layouts, composer suggestion hints no longer overlap typed text, and mobile suggestion buttons use a shorter Accept label while desktop retains the keyboard hint. Automations uses more of the available screen width.
+- Pull request feedback triage uses its configured queue retries after preparation failures instead of unnecessarily waiting for scheduled recovery.
+- Provider qualification verifies a real structured tool call, rejecting misleading response text while accepting fragmented streamed function names and compatible local servers that require required-tool selection instead of named-function selection. Thanks to @DarthAffe for reporting [#1862](https://github.com/RooCodeInc/Roomote/issues/1862).
+- Review handoffs resolve the acting user or human owner when messaging linked tasks instead of failing solely because the token lacks user context.
+- Sentry triage uses the requested accessible organization, projects, and time scope rather than assuming internal project names or implicit defaults, and asks for clarification when the scope is ambiguous.
+- New Sessions start correctly after resetting the model picker to Default.
+- Keep Slack's working indicator aligned with the active Session turn, including durable retry waits and pauses between streamed replies while tools run. Late titles and stale turn cleanup no longer clear a newer turn's indicator, and settlement waits for pending stream operations. Background delegated tasks retain their separate activity indicators.
+- Streamed output preserves UTF-8 characters split across chunks instead of replacing multibyte characters with corrupted text.
+- Native tool activity shows clear read, edit, and skill-loading labels instead of treating result text as a tool name. Edit receipts identify a filename or file count, with consistent wording across running, completed, failed, and expanded activity. Grouped edit headers continue counting edit calls rather than distinct files.
+- Correct Telegram custom automation setup guidance to explain that chat replies continue the automation Session, matching existing behavior.
+- Discord and Telegram show native typing activity while Roomote thinks and uses tools during an active Session turn, including after intermediate replies.
+- Slack provider-error notices show a compact warning and safe error message instead of repeating recovery instructions and the task link.
+- Desktop Session and Task panels open and close smoothly while preserving surviving panel state and focus, and status text uses a consistent, slower shimmer. Manual resizing stays immediate, and reduced-motion preferences are respected.
+- Roomote can choose screenshots, video, both, or no visual evidence according to what best demonstrates the work, without requiring an explicit video request.
+- Environment-backed tasks can push and create or update pull requests in other deployment-active GitHub repositories on the same GitHub App installation, without requiring those repositories in the prepared workspace.
+- MCP OAuth client registrations remain reusable through token expiry and reauthorization, with a 90-day inactivity window renewed by successful authorization exchanges and refreshes. Token lifetimes remain unchanged.
+- Fix Monday account linking and token refresh failing with an invalid OAuth resource request.
+- Reduce unexpected web logouts with 30-day sessions and reliable rolling renewal that updates both the browser cookie and database expiry.
+- Settings stop repeatedly retrying failed model saves, restore saved values when available, and show a clear error. Saved Slack automation destinations remain visibly selected, and the Pull request delivery selector has an accessible name.
+- Include all server-local-day pull requests in PR analytics on non-UTC deployments, matching task and cost reporting.
+- Clarify that Roomote should not assign people work or commit them to plans without authorization, while remaining proactive about its own authorized work.
+- Include the running build's commit SHA and deployment label alongside the release version in assistant prompts, explicitly reporting unavailable commit metadata as unknown.
+- Brain-enabled host backups fail clearly when the index database cannot be checked, rather than reporting success with a potentially incomplete backup.
+- Stable sandbox workers can be selected through the release-list fallback when GitHub blocks tag lookup.
+- Make Doctor warn about whitespace-only Slack and Microsoft authentication configuration instead of reporting it as configured.
+- Update qs to 6.16.0 to address denial-of-service and array-limit-bypass vulnerabilities in query and form parsing dependencies.
+
## 1.3.2 (2026-09-06)
Roomote 1.3.2 fixes integration tool schema errors that can prevent Fast conversations from responding.
diff --git a/apps/docs/automations.mdx b/apps/docs/automations.mdx
index 826eda96e..b0c41d055 100644
--- a/apps/docs/automations.mdx
+++ b/apps/docs/automations.mdx
@@ -139,11 +139,17 @@ teammates can start from the report. Asking only for a summary or list of action
items keeps those actions as report text. Launchable suggestions require a chat
report destination. Each suggestion can select its own named environment,
**All repositories**, or **Fast** target, so one report can offer follow-ups for
-different workspaces and execution modes. Runs scoped to **All repositories**
-pin each suggestion to a concrete repository, then start it in a matching named
-environment when one is available. Those runs prepare every active repository,
-so they can take longer in large deployments. Use a named environment when the
-automation only needs a specific repository set.
+different workspaces and execution modes. Repository-specific suggestions from
+**All repositories** runs start in a matching named environment when one is
+available. Choosing **All repositories** is a delegation preference, not a
+request to prepare every repository on every run. Use a named environment when
+the automation only needs a specific repository set.
+
+Suggestions can accompany the Session's report after a delegated task finishes,
+not just its initial response. Accepting one keeps the follow-up in the
+originating Session, so earlier findings remain in context. In Slack, launches
+reuse that Session's report thread when it is available. Thread or topic
+placement on other providers depends on the provider and execution target.
Admins can also choose **Custom schedule** and enter either a standard
five-field cron expression or a natural-language schedule such as “weekdays at
@@ -154,8 +160,8 @@ Custom schedules do not support seconds or cron macros.
Every run is a Session. On each due tick, Roomote opens a Session for the run
and hands it the prompt exactly as if a teammate had typed it. The Session
answers from integrations when that is enough, and delegates a normal task when
-repository or workspace work is needed, launching it in the preferred
-environment when one is set. Delegated tasks report back to the Session, and
+repository or workspace work is needed, using the preferred environment as a
+routing hint when one is set. Delegated tasks report back to the Session, and
the Session is what talks to the report destination.
Runs deliver to every custom-automation report destination: Slack, Discord,
@@ -169,21 +175,22 @@ the active provider installation, conversation, and linked user before
resuming. Runs with no report destination remain stored Sessions and do not
post to chat.
-Runs execute as the automation's creator. An automation whose creator no longer
-exists fails until an administrator re-saves it.
+Runs execute as the automation's creator. An automation without a creator
+cannot run until an administrator re-saves it.
A run can skip or fail before execution when its configuration or launch state
-prevents it from starting. A failure always reaches the report destination: a
-run that cannot start, or whose delegated task fails, posts one short note
-there, so a broken automation is noticed rather than silently skipped.
+prevents it from starting. When the report destination is reachable, startup or
+delegated-task failures are reported there. If the destination is disconnected
+or cannot be resolved, check the automation's latest run error in the dashboard.
When a report destination is set, Roomote uses that conversation for actionable
or important findings, meaningful completed results, blockers, and questions
that need input. Routine success, healthy status, and no-change results stay
silent unless the automation prompt explicitly asks for a report in those
-cases. The first message starts a thread, later updates continue that same
-thread, and you can reply there to talk to the task. There is no progress
-chatter in between. Without a destination, the run happens silently and its
-results appear only in the task view.
+cases. In Slack, the first report starts a thread and later updates continue
+that thread. On other providers, updates use the run's conversation or topic.
+Reply to the report to continue the Session. There is no progress chatter in
+between. Without a destination, the run happens silently and its
+results remain in its stored web Session, including any delegated task cards.
Unless the prompt asks for a different presentation, custom automation reports
lead with the result, stay concise, and use short Markdown headings and bullets
@@ -205,9 +212,24 @@ are not accepted.
Use **Run now** on an enabled automation to test it immediately. Each card has
its own run state, so starting one custom automation does not prevent you from
-running another. A queued result confirms that Roomote accepted the run, not
-that it completed; follow its task, Session, or configured report destination
-for the final result.
+running another. A queued result confirms that Roomote accepted a Session turn,
+not that a coding task launched or the work completed. A task ID is not promised
+at this point; follow the Session or configured report destination for the final
+result and any delegated tasks.
+
+### Upgrading to 1.4
+
+Existing custom automations now use this Session-first flow. Review prompts
+that assumed a sandbox would always start: specify the repository work you need,
+and check the preferred environment. Their model override now controls Fast;
+delegated coding tasks use an explicitly selected model or the deployment coding
+default instead.
+
+Set an explicit report destination if you want chat delivery. Without one, the
+run stays in a stored web Session rather than falling back to the owner's direct messages.
+Existing automations with a creator do not need to be re-saved just to upgrade;
+only creatorless automations require an administrator to re-save them before
+they can run. Use **Run now** to verify the prompt, routing, and destination.
The deployment cap is 25 custom automations.
diff --git a/apps/docs/communications.mdx b/apps/docs/communications.mdx
index a46f23f15..36985de2c 100644
--- a/apps/docs/communications.mdx
+++ b/apps/docs/communications.mdx
@@ -64,9 +64,10 @@ suggestion reactions.
When the suggestion is not pinned to an execution target, Fast-capable chat
surfaces start it in Fast so Roomote can answer or delegate as needed. A pinned
environment, repository-only surface, or provider without Fast support starts
-the coding task directly. The launch starts in a fresh provider thread or topic
-where the provider supports one, while remaining connected to the Session that
-produced the report.
+the coding task directly. Suggested work remains connected to the Session that
+produced the report. In Slack, suggestions with an available origin Session
+continue in its report thread. Thread or topic placement for other launches
+depends on the provider and execution target.
## React to Roomote replies
diff --git a/apps/docs/fast-sessions.mdx b/apps/docs/fast-sessions.mdx
index af5d2e5e7..9c2b49112 100644
--- a/apps/docs/fast-sessions.mdx
+++ b/apps/docs/fast-sessions.mdx
@@ -99,6 +99,13 @@ generated title that updates as the Session evolves. Replies appear as the
model writes them, then settle into the saved message once the reply is
delivered.
+Expand a tool receipt to inspect the request and result, including messages sent
+to delegated tasks, reports received from them, and image-inspection questions
+and answers. Task-message receipts link to the source or destination task by
+title, with its ID as a fallback. Details are sanitized for display; internal
+event metadata is not exposed. A running receipt may show its input before a
+result arrives.
+
Fast sessions can also render presentational widgets such as status cards,
tables, and plans directly in the transcript. Widget HTML is sanitized and
sandboxed in the web view. Chat surfaces receive a concise text preview and a
@@ -151,19 +158,44 @@ or a direct message still requires a response.
## Reminders and monitors
A Session can schedule a message to itself. Ask Fast to "remind me in twenty
-minutes", "check every ten minutes whether CI is green", or "every weekday at
-nine, summarize the open pull requests", and it creates a wakeup for that
-Session. When the wakeup fires, Fast picks the conversation back up with its
-full history in context, does what was asked, and replies on the same surface
+minutes", "check every ten minutes whether CI is green, up to six times", or
+"every weekday at nine, summarize the open pull requests", and it creates a
+wakeup for that Session. When the wakeup fires, Fast picks the conversation back
+up with its full history in context, does what was asked, and replies on the same surface
the Session lives on: the transcript in the dashboard, or the originating Slack,
Discord, Teams, or Telegram thread.
-A one-shot wakeup is a reminder and always replies. A recurring wakeup is a
-monitor and stays quiet unless it has something to report, such as a change, a
-result, a blocker, or a decision you need to make. When the monitored condition
-resolves, Fast tells you and cancels the wakeup itself. You can also ask Fast to
-list or cancel wakeups at any time; archiving a Session cancels all of its
-wakeups.
+Reporting policy is separate from the schedule. One-shot wakeups default to
+replying every run; recurring wakeups default to replying only when there is
+something notable, such as a change, a result, a blocker, or a decision you need
+to make. Ongoing-process checks can be one-shot or recurring and stay quiet
+without news. Ask for a reply on every run when you want a recurring reminder
+or report instead. When a monitored condition resolves, Fast tells you and
+cancels any remaining checks. You can also ask Fast to list or cancel wakeups
+at any time; archiving a Session cancels all of its wakeups.
+
+In the dashboard, active scheduled wakeups appear above the Session composer,
+ordered by their next run. Each row shows the wakeup's name and a countdown.
+**Due soon** means the scheduled time has arrived, not that the check has run
+or completed. The Session owner or an admin can use the row's **Cancel wakeup**
+control to stop it; other viewers can see the schedule but cannot cancel it
+from this list.
+
+Fast can proactively offer a follow-up when an ongoing process has a concrete
+unresolved outcome worth checking and it has verified that available tools can
+check it. The offer names the outcome, evidence source, timing, and stop bound.
+Fast waits for your acceptance before scheduling; an explicit request to monitor
+already gives that permission. Before scheduling, it rechecks access and reuses
+an equivalent active check rather than duplicating monitoring or notifications.
+
+For ongoing-process monitoring, Fast uses a one-shot check or sets a finite run
+count or end time on a recurring schedule at any cadence, without automatic
+renewal. It stops earlier if the outcome resolves, the check becomes irrelevant,
+or it loses the capability to verify the outcome. Missing evidence or reaching
+the bound without evidence of resolution is not success. This is how Fast is
+instructed to manage monitors, not a scheduler restriction on every recurring
+wakeup: explicitly requested recurring reminders or reports can remain unbounded
+where the scheduling limits below allow it.
Wakeups belong to the conversation and do not require an administrator. A
Session may hold up to ten active wakeups, intervals range from one second to
diff --git a/apps/docs/file-attachments.mdx b/apps/docs/file-attachments.mdx
index 8840c78e2..78666abb0 100644
--- a/apps/docs/file-attachments.mdx
+++ b/apps/docs/file-attachments.mdx
@@ -83,9 +83,11 @@ preference does not convert arbitrary uploads or replace existing artifacts.
Task recordings remain available as uploaded artifacts. In Slack, you can ask
Roomote to share a selected recording as a native video file, including one from
-an earlier task. This requires the Slack app's `files:write` permission;
-existing installations need reinstall or workspace admin reapproval after the
-scope is added. See [Slack setup](/providers/communications/slack).
+an earlier task in the current Session. This requires the Slack app's
+`files:write` permission; existing installations need reinstall or workspace
+admin reapproval after the scope is added. See
+[Slack video replies](/providers/communications/slack#video-replies)
+for recording ownership and size limits.
WebM recordings are converted to MP4 for Slack delivery without replacing the
original artifact. If conversion or upload fails, or native delivery is not
diff --git a/apps/docs/integrations/sentry.mdx b/apps/docs/integrations/sentry.mdx
index 3d63d153e..614ad2a53 100644
--- a/apps/docs/integrations/sentry.mdx
+++ b/apps/docs/integrations/sentry.mdx
@@ -23,6 +23,28 @@ Sentry gives Roomote incident and performance context during a task. It can also
support scheduled read-only Sentry triage. The final decision, code change, and
review still happen in the normal task and repository flow.
+## Scope a triage request
+
+Name the Sentry organization, projects or workloads, time window, and relevant
+environments. For example: "Triage checkout errors in the storefront project
+in our Sentry organization over the last 24 hours, production only."
+Roomote discovers accessible scope and asks for clarification when the target
+or window is missing or ambiguous instead of assuming project names or scanning
+other organizations. Include multiple organizations only when you want them
+scanned, and preserve any region-specific Sentry URL in your request.
+
+Triage scans stay read-only. Ask explicitly for follow-up work and identify the
+eligible repository or environment if you want findings turned into execution;
+otherwise recommendations stay in the report. Specify a report destination and
+whether clean scans should stay quiet. Access or scope blockers are reported
+rather than treated as a clean result.
+
+The built-in **Triage Sentry Issues** [automation](/automations) supplies its own
+schedule-derived scan window and configured project scope. Leaving its project
+slugs blank selects all projects available to the configured connection; it
+does not restore an implicit project list for ad hoc or custom triage requests.
+Roomote still asks which organization to use if that selection is ambiguous.
+
## Recipes using this
- [Triage customer issues](/cookbook/support-channel)
diff --git a/apps/docs/models.mdx b/apps/docs/models.mdx
index eb882dc8f..be2cae36a 100644
--- a/apps/docs/models.mdx
+++ b/apps/docs/models.mdx
@@ -4,6 +4,8 @@ icon: brain
description: Choose inference providers, enable task models, and tune model roles for different kinds of Roomote work.
---
+import { IntegrationName } from '/snippets/integration-name.jsx';
+
Models decide how Roomote thinks through a task.
The sandbox provider gives a Roomote agent a sandbox to work in. The inference
@@ -74,11 +76,11 @@ These connections use metered API billing or a provider-managed gateway:
| [MiniMax](/providers/inference/minimax) | MiniMax API key | MiniMax account |
| [Moonshot AI (Kimi)](/providers/inference/moonshot-ai) | Kimi Open Platform key | Moonshot Open Platform balance |
| [OpenAI](/providers/inference/openai) | OpenAI API key | OpenAI API project |
-| [OpenCode Zen](/providers/inference/opencode) | OpenCode API key | OpenCode account |
+| | OpenCode API key | OpenCode account |
| [OpenRouter](/providers/inference/openrouter) | OpenRouter API key | OpenRouter balance and key limit |
| [Requesty](/providers/inference/requesty) | Requesty API key | Requesty organization |
| [Together AI](/providers/inference/together-ai) | Together AI API key | Together AI account |
-| [Vercel AI Gateway](/providers/inference/vercel-ai-gateway) | AI Gateway API key | Vercel team |
+| | AI Gateway API key | Vercel team |
| [xAI](/providers/inference/xai) | xAI API key | xAI API team |
| [Z.AI](/providers/inference/zai) | Regional Z.AI platform key | Z.AI or BigModel API balance |
@@ -90,7 +92,7 @@ general API balance:
| Provider | Connection | Usage behavior |
| --- | --- | --- |
| [ChatGPT Subscription](/providers/inference/chatgpt) | OpenAI device authorization | ChatGPT plan windows |
-| [GitHub Copilot](/providers/inference/github-copilot) | GitHub device authorization | Copilot plan allowance |
+| | GitHub device authorization | Copilot plan allowance |
| [Kimi for Coding](/providers/inference/kimi-for-coding) | Kimi membership key | Coding membership allowance |
| [OpenCode Go](/providers/inference/opencode-go) | OpenCode API key | Go plan allowance |
| [xAI Grok Subscription](/providers/inference/xai-subscription) | xAI account authorization | SuperGrok or eligible X plan allowance |
@@ -131,6 +133,13 @@ off, and they cannot be deleted while their provider stays connected — turn a
model off to stop using it. To go beyond the recommended set, add any model by
its slug from the add-model field.
+**GPT-6 Astra** is also recommended through [Vercel AI Gateway](/providers/inference/vercel-ai-gateway),
+[GitHub Copilot](/providers/inference/github-copilot), and
+[OpenCode Zen](/providers/inference/opencode). Connect the provider, enable Astra
+in **Available Models**, and assign it to a role or select it for a Session or
+task. Adding these routes does not change existing model defaults; access still
+depends on the connected provider account or plan.
+
### Recommended default models
Providers also carry recommended defaults for the model roles below — for
@@ -333,6 +342,12 @@ inspect a repository workspace, post to chat, or launch, message, or cancel
tasks. Fast remains responsible for the user-facing answer and any execution it
delegates.
+OpenCode allows two levels of subagents: the main agent can delegate to a
+subagent, which can make one further nested delegation or consultation. This
+does not permit unbounded recursion or expand a role's permissions. Fast
+consultants still cannot inspect a repository workspace or control tasks;
+Fast owns any workspace-backed execution.
+
## Choosing models
Start by choosing for reliability, then optimize for cost and speed once tasks
diff --git a/apps/docs/providers/communications/slack.mdx b/apps/docs/providers/communications/slack.mdx
index 1779d0369..55e02dd9b 100644
--- a/apps/docs/providers/communications/slack.mdx
+++ b/apps/docs/providers/communications/slack.mdx
@@ -157,10 +157,17 @@ grant the installed bot this permission.
## Video replies
Roomote can share selected task recordings as native Slack video files in the
-conversation. Ask for the recording from a task, including an earlier task, and
-Roomote can recover its uploaded artifact and share it without recording again.
+conversation. Ask for the recording from a task associated with the current
+Session, including an earlier task in that Session, and Roomote can recover its
+uploaded artifact and share it without recording again. Native delivery is
+limited to uploaded recordings from that Session's task runs, not arbitrary
+recordings from other Sessions.
Uploading a task artifact alone does not automatically post it to Slack.
+The recording must be no larger than 50 MiB. When conversion is needed, the
+converted file must also fit within 50 MiB. Larger recordings use an artifact
+viewer link instead of a native Slack attachment.
+
For WebM recordings, delivery converts a copy to MP4 for Slack playback while
preserving the original task artifact. If permissions, conversion, or upload
prevent native delivery, Roomote shares only an artifact viewer link, without
diff --git a/apps/docs/providers/inference/github-copilot.mdx b/apps/docs/providers/inference/github-copilot.mdx
index a8fe2e3e7..416cd7eb6 100644
--- a/apps/docs/providers/inference/github-copilot.mdx
+++ b/apps/docs/providers/inference/github-copilot.mdx
@@ -1,6 +1,6 @@
---
title: GitHub Copilot
-icon: 'https://unpkg.com/@lobehub/icons-static-svg@1.94.0/icons/githubcopilot.svg'
+icon: 'https://api.iconify.design/simple-icons:githubcopilot.svg?color=currentColor'
description: Use models included with an eligible GitHub Copilot account in Roomote.
---
@@ -18,6 +18,11 @@ if the account does not have access yet.
No API key or environment variable is required. Roomote stores the OAuth record
and exposes supported models with the `github-copilot/` prefix.
+GPT-6 Astra is available as `github-copilot/gpt-6-astra`. Enable it in
+**Settings > Models** and assign it to a role or select it for a task or Session.
+Existing defaults stay unchanged. Availability depends on your Copilot plan and
+organization's model-access policy.
+
## Cost behavior
Requests use the connected Copilot plan. For qualifying legacy annual Pro and
diff --git a/apps/docs/providers/inference/opencode.mdx b/apps/docs/providers/inference/opencode.mdx
index f3c9685f1..4cd10ba01 100644
--- a/apps/docs/providers/inference/opencode.mdx
+++ b/apps/docs/providers/inference/opencode.mdx
@@ -1,6 +1,6 @@
---
title: OpenCode Zen
-icon: 'https://unpkg.com/@lobehub/icons-static-svg@1.94.0/icons/opencode.svg'
+icon: 'https://api.iconify.design/simple-icons:opencode.svg?color=currentColor'
description: Use OpenCode's routed Zen model service with Roomote.
---
@@ -26,6 +26,11 @@ Roomote exposes routed Zen models under the `opencode/` prefix and adds a recomm
set after connection. The preset can use inexpensive routed models for helper
work and stronger models for coding, planning, vision, and review.
+GPT-6 Astra is available as `opencode/gpt-6-astra`. Enable it in
+**Settings > Models** and assign it to a role or select it for a task or Session.
+Existing defaults stay unchanged, and the Zen account must have access and
+sufficient balance for the model.
+
## Cost behavior
OpenCode applies the pricing rules shown for Zen and the routed
diff --git a/apps/docs/providers/inference/vercel-ai-gateway.mdx b/apps/docs/providers/inference/vercel-ai-gateway.mdx
index 932c35c4e..37817592e 100644
--- a/apps/docs/providers/inference/vercel-ai-gateway.mdx
+++ b/apps/docs/providers/inference/vercel-ai-gateway.mdx
@@ -1,6 +1,6 @@
---
title: Vercel AI Gateway
-icon: 'https://unpkg.com/@lobehub/icons-static-svg@1.94.0/icons/vercel.svg'
+icon: 'https://api.iconify.design/simple-icons:vercel.svg?color=currentColor'
description: Route Roomote model calls through Vercel AI Gateway.
---
@@ -26,6 +26,10 @@ Roomote exposes supported models under the `vercel//` prefix and
adds a recommended cross-vendor set. Apply the recommended mapping or choose
models individually for each role.
+GPT-6 Astra is available as `vercel/openai/gpt-6-astra`. Enable it in
+**Settings > Models** and select it for the work you want it to handle; existing
+defaults stay unchanged. Your Vercel gateway must allow access to that model.
+
## Cost behavior
Vercel records gateway usage and applies the billing terms, budgets, and
diff --git a/apps/docs/providers/source-control/github.mdx b/apps/docs/providers/source-control/github.mdx
index d6f990e09..fbab623ee 100644
--- a/apps/docs/providers/source-control/github.mdx
+++ b/apps/docs/providers/source-control/github.mdx
@@ -198,11 +198,13 @@ installation. Requests default to the repository mapped to the task:
- list accessible GitHub Projects V2, inspect an issue or pull request's Status,
and update an existing project item's single-select Status field
-An environment-backed task can also create or update pull requests in another
-active GitHub repository connected to the same GitHub App installation, even
-when that repository is not part of the environment workspace. Roomote rejects
-inactive repositories, repositories connected through another provider, and
-repositories that belong to a different GitHub App installation.
+An environment-backed task can also push branches and create or update pull
+requests in another active GitHub repository connected to the same GitHub App
+installation, even when that repository is not part of the environment
+workspace. This write access does not automatically add the repository to the
+prepared workspace. Roomote rejects inactive repositories, repositories
+connected through another provider, and repositories that belong to a different
+GitHub App installation.
Read-only requests, creations, and additive label actions run directly. Before
editing, replacing, assigning, clearing, moving, or deleting an item, Roomote
diff --git a/apps/docs/tasks.mdx b/apps/docs/tasks.mdx
index ac39be512..3480c3248 100644
--- a/apps/docs/tasks.mdx
+++ b/apps/docs/tasks.mdx
@@ -102,10 +102,17 @@ look for:
- commands, tests, or checks it ran
- logs or errors it used to make decisions
-- screenshots or live previews for UI changes
+- screenshots, recordings, or live previews for UI changes
- a diff or pull request for code changes
- a clear explanation when something could not be verified
+Roomote chooses screenshots, recordings, both, or no visual proof according to
+what best demonstrates the work. Screenshots suit stable appearance; recordings
+can show motion and interactions, even when you did not explicitly ask for a
+video. Roomote skips visual proof when it would not add useful evidence. Judge
+the evidence against the stated result rather than requiring a recording for
+every change.
+
Visual proof should use genuine application, authentication, database, and
backend state when practical. When an artifact instead uses disclosed simulated
state to make a UI reachable, treat it as evidence only for the rendered
diff --git a/package.json b/package.json
index c3f39879c..8ca73dfff 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "roomote",
- "version": "1.3.2",
+ "version": "1.4.0",
"license": "FCL-1.0-ALv2",
"packageManager": "pnpm@10.29.3",
"engines": {