Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 38 additions & 28 deletions apps/docs/automations.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,8 @@ provider is connected (GitHub, GitLab, or Gitea) and the repos you care about
have configured Roomote environments. When an issue is opened or reopened,
Roomote starts a task immediately, investigates the issue, and posts a concrete
plan or clarifying questions as a comment on that issue. It does not need a
Manager Channel, does not post Slack digests, does not implement the fix, and
does not open a pull request automatically. Azure DevOps work items and
default destination, does not post Slack digests, does not implement the fix,
and does not open a pull request automatically. Azure DevOps work items and
Bitbucket issues are not covered yet.

For **Resolve PR Conflicts**, pick a schedule, PR age cap, and label. The
Expand All @@ -124,8 +124,8 @@ skips PRs older than the age cap you set.

For **Merge announcer**, connect a source-control provider and turn the toggle
on. Choose Slack, Microsoft Teams, Telegram, or Discord, then select a channel
or **DM me**. Choose **Default** to use the shared Manager Channel or normal
primary-conversation fallback. Roomote reacts to provider-deduplicated push
or **DM me**. Choose **Default** to use the deployment's default destination.
Roomote reacts to provider-deduplicated push
webhooks for each active repository's current default branch, uses the
deployment helper model to write a brief commit summary, and includes the pusher
and commit authors. Feature-branch pushes and branch deletions are ignored.
Expand All @@ -144,6 +144,12 @@ searchable list. Filter the list to **All**, **Built-in**, or **Custom** when yo
need a narrower view. Each row shows its current configuration and actions;
select **Configure** to edit an automation.

The **Default destination** at the top of the page receives reports from
automations that do not have an explicit destination. An admin can choose a
Slack or Discord channel or direct message, or an Email recipient. A destination
saved on an individual automation takes precedence, and existing custom
automations keep the destination selected when they were created.

Members can list, inspect, edit, enable or disable, delete, and run their own
custom automations. Admins can perform these actions on all custom automations,
including those without a creator. These ownership rules apply in the dashboard
Expand Down Expand Up @@ -410,12 +416,12 @@ See how channel instructions and launch criteria work together in the

## Manager automations

The manager section controls the shared Manager Channel plus recurring
manager-facing updates and suggestions.
The manager section controls the deployment's default destination plus
recurring manager-facing updates and suggestions.

| Automation | What it posts | Typical cadence |
| ---------------------------- | ---------------------------------------------------------------- | ------------------------------------------- |
| **Automation output** | The shared Manager Channel destination | Configure once |
| **Default destination** | The fallback destination for automations without their own | Configure once |
| **Weekly Manager Stats** | A weekly summary of Roomote activity | Weekly |
| **Inference Provider Usage Alerts** | Warnings when an inference-provider quota approaches exhaustion | Hourly |
| **Triage Sentry Issues** | Prioritized Sentry follow-up work | Daily or weekly |
Expand Down Expand Up @@ -443,14 +449,15 @@ than switching the report to another address or provider. Receiving these
outbound reports does not require email verification, but replying still
requires the account address to be verified and pass DMARC.

Set **Automation output** first. This is the shared Slack or Discord Manager
Channel for manager-facing posts, suggestions, summaries, and setup alerts.
Make sure the Roomote app can access the channel before you save it.
Set **Default destination** first. Choose a Slack or Discord channel or direct
message, or an Email recipient, for manager-facing posts, suggestions,
summaries, and setup alerts. Make sure Roomote can reach the destination before
you save it.

For Slack, the first account connection after app installation automatically
sets up public `#roomote-managers` if no Slack or Discord Manager Channel is
configured. Existing automation destinations are unchanged, and no automations
are enabled by channel setup. See [Slack setup](/providers/communications/slack#automatic-manager-channel)
sets up public `#roomote-managers` if no default destination is configured.
Existing automation destinations are unchanged, and no automations
are enabled by channel setup. See [Slack setup](/providers/communications/slack#automatic-default-destination)
for required permissions and retry instructions.

**Inference Provider Usage Alerts** is enabled at an hourly cadence with an 85% threshold
Expand All @@ -459,15 +466,15 @@ Roomote releases. Admins can disable it, choose a Slack, Discord, or Email desti
and set the warning threshold from 5% through 95% in 5% increments. Roomote
checks hourly, posts an alert card for each provider that crosses the threshold
in a quota cycle, and sends a fresh critical alert if the quota later reaches
100%. The automation-specific destination wins, followed by the shared Manager
Channel and then the supported primary Teams, Telegram, or Discord conversation
fallback. The check is deterministic, supports **Run now**, and never starts a
Roomote task or session.
100%. The automation-specific destination wins, followed by the default
destination and then the supported primary Teams, Telegram, or Discord
conversation fallback. The check is deterministic, supports **Run now**, and
never starts a Roomote task or session.

**Platform Issue Alerts** are enabled by default. Tasks and sessions use
them for admin-fixable platform, configuration, and access defects. Their own
Slack, Discord, or Email destination wins, followed by the shared Manager Channel. If
neither channel is configured, Roomote sends the alert directly to active
Slack, Discord, or Email destination wins, followed by the default destination.
If neither destination is configured, Roomote sends the alert directly to active
deployment admins using each admin's first linked provider in this order:
Slack, Teams, Telegram, then Discord. Admins need a linked account and must be
reachable by the bot for this fallback to work. When only some admins receive
Expand All @@ -483,14 +490,16 @@ does not replay historical announcements. Restarts, retries of the same
version, and rollbacks do not post. Patch-only updates also stay silent while
still becoming the baseline for the next comparison. An update posts when its
installed version crosses a major or minor boundary, including a patch release
such as `1.10.5` to `1.11.2`. When an update skips releases, the message selects
up to three authored highlights across the intervening changelog entries and
links to the full notes for the installed release. If that authoritative range
has no authored highlights, Roomote silently completes the announcement instead
of retrying it; missing or unreadable release data remains retryable. Leave its
destination on **Default** to use the standard automation destination, or choose
a Slack, Microsoft Teams, Telegram, or Discord channel or direct message, or
an Email identity.
such as `1.10.5` to `1.11.2`. Roomote announces the matching stable major or
minor release, using its authored summary and complete highlight list, and
links to that release's full notes. If the selected release has neither an
authored summary nor highlights, Roomote silently completes the announcement
instead of retrying it; missing or unreadable release data remains retryable.
Leave its destination on **Default** to use the standard automation destination,
or choose a Slack, Microsoft Teams, Telegram, or Discord channel or direct
message, or an Email identity. **Run now** sends a sample from the latest stable
major or minor release notes without changing the automatic announcement
baseline.
Delivery failures remain pending for retry without reposting a destination
already recorded as successful.

Expand All @@ -502,7 +511,8 @@ an already submitted report do not create duplicates.

Each automation card shows a **Reports to** line with the destination the next
run will use and which setting produced it. Reports go to the automation's own
explicit destination when one is set, otherwise to the shared Manager Channel.
explicit destination when one is set, otherwise to the deployment's default
destination.
An unavailable explicit Email destination fails closed and never enters the
fallback waterfall. If Slack is
not connected, fallback selection runs only when no destination is saved or the
Expand Down
10 changes: 5 additions & 5 deletions apps/docs/cookbook/ci-failure-auto-fix.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,33 +12,33 @@ contributor_company_url: https://roomote.dev
When CI fails on your default branch, Roomote reacts immediately. It checks
that the failure is real, reproduces the failing job inside the repository's
environment, finds the root cause, opens a PR with the fix, and posts one
summary to the Manager Channel. The team finds a green PR waiting instead of a
summary to the default destination. The team finds a green PR waiting instead of a
red branch. This is a built-in automation, so the recipe is one toggle plus
clear instructions.

- **Trigger**: Webhook
- **Setup time**: About 10 minutes
- **Requires**: Admin access, source control, Manager Channel
- **Requires**: Admin access, source control, default destination
- **Serves**: Engineers
- **Cooked By**: [Matt Rubens](https://github.com/mrubens) from [Roomote](https://roomote.dev)

## Ingredients

- [CI Failure Triage](/automations#manager-automations)
- A Manager Channel destination configured under **Automation output**
- A destination configured under **Default destination**
- An environment for every repository you want triaged. Repositories outside an environment are skipped.

## Steps

1. Set the Manager Channel under **Settings > Automations > Automation output**.
1. Set the destination under **Settings > Automations > Default destination**.
2. Enable **CI Failure Triage**.
3. Confirm each repository you care about belongs to a configured environment.
4. Use **Run now** to test the configuration, or wait for the next default-branch failure.

## Variations

- Keep experimental repositories out of environments to exclude them from triage.
- Route the summary to a dedicated `#ci-triage` channel instead of the shared Manager Channel.
- Route the summary to a dedicated `#ci-triage` channel instead of the default destination.

CI Failure Triage reacts only to failures on the default branch. It supports
GitHub Actions, GitLab Pipelines, Azure DevOps builds, Bitbucket Pipelines, and
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/cookbook/product-updates-newsletter.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ It's how we actually generate the ones we send every Friday.

- A [custom automation](/automations#custom-automations)
- An environment covering the product repositories
- The Resend MCP server configured under **Settings > Integrations**, with a Resend API key
- The Resend MCP server configured under **Integrations**, with a Resend API key
- A report destination such as `#product-updates`, so the draft lands in a replyable thread

Members can create and manage their own custom automations once the environment
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/cookbook/support-channel.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ survives triage.

## Steps

1. Connect the integrations your triage needs under **Settings > Integrations**.
1. Connect the integrations your triage needs under **Integrations**.
2. Under **Settings > Skills**, add the custom skill below and enable it for the environment your product runs in.
3. Add the escalation channel under **Settings > Automations > Auto-respond to channels** and paste the launch criteria.
4. Repost a resolved historical ticket and compare Roomote's triage with what actually happened.
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/environment-variables.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ as per-task auth tokens or workspace paths.
| `R_BULLMQ_SHUTDOWN_DRAIN_MS` | Optional | Same window for the bullmq service, which executes the session turns the queue resumes. Defaults to `R_API_SHUTDOWN_DRAIN_MS`, then `20000`. |
| `R_FAST_DURABLE_RETRY_DISABLED` | Optional | Set to `true` to keep inference retry waits in the current process instead of parking in-flight session turns durably. Durable admission remains enabled. |
| `R_CLOUD_ENABLED` | Roomote Cloud only | Deployment-managed switch for Roomote Cloud behavior, including required anonymous analytics and Cloud support integrations. Do not set this for self-hosted deployments. |
| `R_CURATED_INTEGRATIONS_DISABLED` | Optional | Operator policy for the curated **Settings > Integrations** catalog, which is enabled by default. Set to `true` and restart Roomote to prevent those integrations from being configured or used. Existing connections remain stored while disabled and become available again once the value is unset. Communications, source-control, inference, sandbox providers, and environment-defined MCP servers are unaffected. |
| `R_CURATED_INTEGRATIONS_DISABLED` | Optional | Operator policy for the curated **Integrations** catalog, which is enabled by default. Set to `true` and restart Roomote to prevent those integrations from being configured or used. Existing connections remain stored while disabled and become available again once the value is unset. Communications, source-control, inference, sandbox providers, and environment-defined MCP servers are unaffected. |
| `R_GITHUB_APP_SLUG` | GitHub setup | Primary GitHub App slug used by server-rendered setup, mentions, and GitHub integration flows. |
| `R_GITHUB_ADDITIONAL_APP_SLUGS` | Optional GitHub setup | Comma-separated additional GitHub App slugs that Roomote should trust as managed bot identities for review attribution and notifications. |
| `SETUP_TOKEN` | Required (non-local) | One-time bootstrap token that admits the first admin at `/setup`. Required on every non-local deployment — tokenless bootstrap is allowed only when `NODE_ENV` is not `production` and `R_APP_ENV` is `development`, so anything running with `NODE_ENV=production` needs it. Without it, first-admin bootstrap stays closed so nobody can claim the founding-admin slot by reaching the URL first. Optional only in local development. |
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/integration-keys.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Integration keys let a Roomote agent use an API key you hold, for one HTTPS
service, without the key ever entering chat, a prompt, a task environment, or
a transcript. You enter the key once when an agent asks for it in a Session,
under **Personal Settings → Personal integrations**, or, for administrators,
under **Settings → Integrations**. Personal integrations are available only to
under **Integrations**. Personal integrations are available only to

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This update changes the first navigation reference, but lines 55-56 still tell administrators to use Settings -> Integrations. The route is now top-level Integrations (/integrations), so this guide remains internally contradictory. Please update that remaining instruction too.

their owner; deployment-wide integrations are available to active members. The
agent works with an opaque reference or a substitute token, and Roomote's API
adds the real key on the way out. Integration keys are for HTTPS services, not
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/integrations/asana.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ inspect projects, tasks, teams, and comments during a task.

## How setup works

Admins connect Asana from **Settings > Integrations** with a shared token. After
Admins connect Asana from **Integrations** with a shared token. After
that, Roomote can use the shared connection inside tasks for the deployment.

## What to expect
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/integrations/better-stack.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ signals, or other monitoring context that already lives there.

## How setup works

Admins connect Better Stack once from **Settings > Integrations**.
Admins connect Better Stack once from **Integrations**.

## What to expect

Expand Down
2 changes: 1 addition & 1 deletion apps/docs/integrations/braintrust.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ there and you want that context available in Roomote tasks.

## How setup works

Admins enable Braintrust from **Settings > Integrations**. Each teammate then
Admins enable Braintrust from **Integrations**. Each teammate then
links their own Braintrust account from [Personal Settings](/personal-settings)
when they need it.

Expand Down
6 changes: 3 additions & 3 deletions apps/docs/integrations/custom-mcp-servers.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ OAuth client for the callback URL shown in the dialog
secret manually.

If a token refresh is rejected by the server, the connection is marked as
needing reconnection: agents get a clear error pointing at Settings, and the
needing reconnection: agents get a clear error pointing at Integrations, and the
server card shows **Connect** again.

Roomote sends the RFC 8707 `resource` indicator by default, as required by
Expand Down Expand Up @@ -85,7 +85,7 @@ When you add a remote server you choose who can use it:

- **Everyone in this deployment** (the default) shares it with every member.
Agents in every Session and task can use its tools, acting with the account
that authorized it. It appears under **Settings → Integrations**. The member
that authorized it. It appears under **Integrations**. The member
who added it and deployment admins can edit, connect, or remove it; everyone
else sees it read-only.
- **Only me** keeps it private. Only your own Sessions and tasks receive it,
Expand Down Expand Up @@ -132,7 +132,7 @@ operator-configured URLs. Redirects from custom servers are never followed.
- Any member can add a remote server and manages the ones they added.
Deployment admins manage every shared server and are the only ones who can
add local (stdio) servers. Personal servers are managed by their owner alone.
- `R_CUSTOM_MCP_DISABLED=true` disables the feature entirely: the Settings
- `R_CUSTOM_MCP_DISABLED=true` disables the feature entirely: the Integrations
section, the proxy routes, and delivery to tasks. It is independent of
`R_CURATED_INTEGRATIONS_DISABLED`, so a deployment can disable the built-in
catalog while still using its own custom servers.
Expand Down
6 changes: 3 additions & 3 deletions apps/docs/integrations/elevenlabs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Connect ElevenLabs when you want Roomote to add voice-over narration to

## How setup works

A deployment admin connects ElevenLabs once from **Settings > Integrations**
A deployment admin connects ElevenLabs once from **Integrations**
with:

- an ElevenLabs API key scoped to text-to-speech only, preferably with a credit
Expand All @@ -23,5 +23,5 @@ plane to synthesize narration; agents receive no ElevenLabs tools, and the API
key is not sent to task sandboxes.

Self-hosted operators can instead set `R_ELEVENLABS_API_KEY` and
`R_ELEVENLABS_VOICE_ID`. The connection configured in **Settings >
Integrations** takes precedence when both sources are available.
`R_ELEVENLABS_VOICE_ID`. The connection configured in **Integrations** takes
precedence when both sources are available.
Loading
Loading