RTS Agents is 1 dashboard to access all your coding agents and Github repos across all your service providers and devices
It supports:
- Local CLI-backed agents: Gemini CLI, Claude Code CLI, Codex CLI, and Cursor CLI (reads local session files and can start new sessions).
- Cloud agents: Jules, Cursor Cloud Agents, OpenAI (Codex via Assistants/Threads), and Claude (Anthropic Messages API).
- AI Powered Github Utilities: browse your repositories, view open PRs, open PR details, use agents to resolve merge conflicts, and merge PRs without having to jump between sites
- Unified task list across providers (Gemini, Jules, Cursor, Codex, Claude CLI, Claude Cloud)
- Search + filtering by provider and status
- Pagination for large task sets
- Auto-refresh (polling) with configurable interval
- Task completion notifications (in-app toast + sound when a task transitions to completed)
- Click a task card to view provider-specific details, such as:
- Cursor: conversation transcript
- Jules: activity timeline + PR output (when available)
- Gemini CLI: lightweight message history extracted from session JSON files
- Codex: thread messages and run history
- Claude CLI / Cloud: message history (local sessions or tracked cloud conversations)
Create tasks from the UI, with provider-specific options:
- Jules: choose connected repo source + branch, optionally auto-create PR
- Cursor Cloud: choose repository + ref/branch, optionally auto-create PR
- Gemini CLI: choose a local Git repo path, start a detached
geminiCLI session - Codex: create a new OpenAI thread (tracked locally in the app), prompt-only (repo optional)
- Claude CLI: start a detached
claudeCLI session in a local repo - Claude Cloud: prompt-only (no repository required)
When configured with a GitHub token, you can:
- List your GitHub repositories (sorted by updated time)
- View open PRs for a repo
- Open PR details
- Merge a PR
- Mark a draft PR ready for review
The repository includes a mobile-optimized Progressive Web App (PWA) in the mobile-webapp/ directory.
- Remote Control: View connected desktop instances and dispatch tasks to them via Cloudflare KV.
- Unified Dashboard: View and filter tasks across all providers, similar to the desktop app.
- Cloud Agents: Create and monitor tasks for cloud providers (Jules, Cursor, Codex, Claude Cloud) directly from your phone.
- GitHub: View repositories and branches (read-only).
- No Local Execution: It cannot run local CLI tools (Gemini/Claude CLI) directly. Instead, it dispatches these tasks to your running desktop instances.
- Requires Cloudflare KV: Syncing between desktop and mobile requires Cloudflare KV configuration.
- Read-Only Device Status: It views other devices but does not register itself as a compute node.
- Navigate to the directory:
cd mobile-webapp - Install dependencies:
npm install
- Start development server:
Or build for production:
npm run dev
npm run build
- Node.js: recommended Node 18+ (Electron 28 runtime)
- npm (bundled with Node)
- Git (required for cloning and for the in-app “Update & Restart” feature)
Optional, depending on features you use:
- Gemini CLI (for Gemini local sessions + creating Gemini tasks)
- Claude Code CLI (for Claude local sessions + creating Claude CLI tasks)
git clone <YOUR_REPO_URL>
cd <YOUR_REPO_FOLDER>
npm ciIf you do not have a lockfile or prefer standard install:
npm installProduction-style start (build minified CSS, then launch Electron):
npm run startDeveloper mode (Tailwind CSS watch + Electron):
npm run devThis app stores provider credentials in a local Electron settings store. You can configure keys in Settings → API Command Keys.
- Used for: listing sessions, listing sources/repos, creating sessions, reading activities
- Where it’s sent:
https://jules.googleapis.com/v1alpha/... - Header:
X-Goog-Api-Key: <key> - How to get it: from your Jules console / configuration (the app UI hints “Jules console settings”)
- Used for: listing agents, reading agent details, listing repositories, creating agents
- Where it’s sent:
https://api.cursor.com/v0/... - Auth: HTTP Basic Auth with the API key as the username (empty password)
- How to get it: from Cursor settings (the app UI hints “cursor.com/settings”)
- Used for: creating threads, fetching thread/runs/messages for tracked threads
- Where it’s sent:
https://api.openai.com/v1/... - Header:
Authorization: Bearer <key> - Note: uses
OpenAI-Beta: assistants=v2 - How to get it: from OpenAI API keys (the app UI hints “platform.openai.com/api-keys”)
- Used for: sending a prompt via the Anthropic Messages API
- Where it’s sent:
https://api.anthropic.com/v1/messages - Header:
x-api-key: <key> - How to get it: from the Anthropic console (the app UI hints “console.anthropic.com”)
- Used for:
- Listing your repos
- Listing PRs and branches
- Fetching PR details
- Merging PRs
- Marking PRs ready for review (GraphQL mutation)
- Where it’s sent:
https://api.github.com/...andhttps://api.github.com/graphql - Header:
Authorization: token <token> - Recommended scopes (classic PAT):
repo(private repo access + merge)read:user(safe default for/user)
- How to get it: GitHub settings → developer settings → personal access tokens (the app UI hints “github.com/settings/tokens (classic)”)
These providers are not configured via API key inside this app. They rely on locally-installed CLIs and their session folders.
- Detected by: existence of a Gemini data directory under your home directory:
- Windows example:
C:\Users\<you>\.gemini\tmp
- Windows example:
- Starts tasks by running (detached):
gemini -p "<prompt>" -y-pprompt/headless mode-yauto-approve actions
- Project selection:
- In Settings, add GitHub Repository Paths (folders that contain your Git repos)
- The New Task modal will list repos found under those paths (directories containing
.git)
If Gemini shows as “not installed”:
- Ensure you have installed Gemini CLI and that you’ve run it at least once so it creates its home folder.
- Ensure
geminiis available on yourPATH(the app will rungemini/gemini.cmddepending on OS).
- Detected by: existence of a Claude data directory under your home directory:
- Windows example:
C:\Users\<you>\.claude\
- Windows example:
- Reads local sessions from:
~/.claude/projects/...(or equivalent on Windows)
- Starts tasks by running (detached):
claude -p "<prompt>" --allowedTools "Read,Edit,Bash"
If Claude CLI shows as “not installed”:
- Ensure Claude Code CLI is installed and that you’ve run it at least once so it creates its home folder.
- Ensure
claudeis available on yourPATH(the app will runclaude/claude.cmddepending on OS).
- Install dependencies (
npm ci) - Start the app (
npm run devornpm run start) - Open Settings and configure what you need:
- Add API keys for any cloud providers you want to use (Jules, Cursor, Codex, Claude Cloud, GitHub)
- Add GitHub Repository Paths so the app can find local repos for Gemini CLI / Claude CLI tasks
- Optional: add Gemini CLI Paths if you keep Gemini projects/sessions in additional locations
- Go back to Dashboard and click SYNC to refresh.
npm run start: build minified Tailwind CSS and launch Electronnpm run dev: Tailwind CSS watch + launch Electronnpm run dev:headless: run a lightweight headless device (no Electron UI) that registers to Cloudflare KV, pulls keys, and executes queued remote tasksnpm run test: Jest unit + integration testsnpm run test:e2e: Playwright E2E tests (optimized for headless Linux withxvfb-maybe)
The provided test:e2e script uses env and xvfb-maybe, which are typically not available on Windows.
On Windows, install browsers and run Playwright directly:
npx playwright install
npx playwright test- Electron main process:
main.js- Owns provider services and IPC handlers
- Polling emits
agents:refresh-tickevents to the renderer
- Preload bridge:
preload.js- Exposes a safe
window.electronAPIto the renderer viacontextBridge
- Exposes a safe
- Renderer UI:
src/renderer/app.js- Dashboard UI + Settings + New Task modal + GitHub view
- Provider services:
src/main/services/*.jsgemini-service.js(local session discovery + start session)claude-service.js(local session discovery + Anthropic API + start CLI session)jules-service.js(Jules API)cursor-service.js(Cursor Cloud API)codex-service.js(OpenAI Assistants/Threads; tracks created threads locally)github-service.js(GitHub REST + GraphQL for “ready for review”)
- Persistence:
electron-storeviasrc/main/services/config-store.js- Stores API keys, polling settings, repo paths, filters, and tracked Codex/Claude cloud IDs locally.
- Open Settings and use the provider’s TEST button.
- Confirm your key/token is valid and has the necessary permissions.
- Ensure the CLI is installed and available in
PATH. - Run the CLI once manually to create its home directory under your user profile.
The app runs git pull in the current working directory and then relaunches.
- Ensure the app is running from a git clone with a configured remote
- Ensure
gitis installed and available inPATH - Ensure your environment has permission to pull from the remote
- API keys are stored locally using
electron-storewith a built-in encryption key in the app. This provides basic at-rest obfuscation but should not be treated as a substitute for OS-level security. - Prefer tokens with the minimum scopes needed, especially for GitHub.