From 9e60aea5fe20027faab819a19cf9e3df5036c4c3 Mon Sep 17 00:00:00 2001 From: sirily11 <32106111+sirily11@users.noreply.github.com> Date: Fri, 22 May 2026 14:37:10 +0800 Subject: [PATCH] feat: rewrite readme and claude.md --- AGENTS.md | 183 +++++++++++++++++++++++++++++----------------- CLAUDE.md | 90 +---------------------- README.md | 211 +++++++++++++++++++++++++++++------------------------- 3 files changed, 231 insertions(+), 253 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index a2247d3..127435f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,91 +1,140 @@ # AGENTS.md -This file provides guidance to Codex (Codex.ai/code) when working with code in this repository. Use english for your response +This file is the canonical guidance for coding agents working in this repository. Use English for all responses and all committed project text. ## Project Overview -RxCode is a native macOS desktop client for the Codex CLI. Written in Swift + SwiftUI with two external dependencies: SwiftTerm (terminal emulation) and Sparkle (auto-update). +RxCode is a native macOS desktop client for AI coding agents. It is written in Swift and SwiftUI, with a project-centric UI for Claude Code, Codex, and Agent Client Protocol (ACP) clients. The app includes streaming chat, permission approval flows, run profiles, Git worktree support, natural-language thread search, mobile sync, and briefing/change tracking. + +The main app target is a macOS app. The repository also contains shared Swift packages, widget/mobile-related code, website assets, and release tooling. ## Writing Rules -- All text committed to the project — code comments, commit messages, PR descriptions, log messages — must be written in **English**. +- Write code comments, log messages, commit messages, PR descriptions, documentation, and user-facing text in English. +- Keep documentation factual and current. Prefer removing duplicated guidance over maintaining the same instructions in multiple files. +- Preserve user changes. Do not revert unrelated local edits unless the user explicitly asks for that. -## Build & Run +## Build And Run ```bash -# Open in Xcode (build/run with Cmd+R) +# Open in Xcode open RxCode.xcodeproj -# CLI build +# Debug build xcodebuild -project RxCode.xcodeproj -scheme RxCode -configuration Debug build # Release build xcodebuild -project RxCode.xcodeproj -scheme RxCode -configuration Release build + +# Swift package build +swift build --package-path Packages + +# Swift package tests +swift test --package-path Packages ``` -- Minimum deployment target: macOS 26.0+ -- No test suite (UI app) -- Bundle ID: `com.idealapp.RxCode` -- External dependencies: SwiftTerm (terminal emulation), Sparkle (auto-update) +Project notes: + +- macOS app deployment target: macOS 26.0+ +- Swift tools version: 6.2 +- Main app bundle ID: `com.rxlab.RxCode` +- App-level dependencies: SwiftTerm and Sparkle +- Package dependencies: ViewInspector, Textual, and MarkdownUI + +## Repository Layout + +| Path | Purpose | +| --- | --- | +| `RxCode/` | macOS app target: app entry point, SwiftUI views, services, resources, and integrations. | +| `RxCode/App/` | `AppState`, app lifecycle, session handling, streaming, project/worktree logic, mobile sync dispatch, and agent coordination. | +| `RxCode/Services/` | Actor-based and service-oriented integrations for agents, permissions, GitHub, persistence, mobile sync, search, MCP, updates, and run profiles. | +| `RxCode/Views/` | SwiftUI UI surfaces: main workspace, chat, sidebar, inspector, settings, terminal, permissions, search, run profiles, and onboarding. | +| `Packages/Sources/RxCodeCore/` | Shared models, theme, utilities, run profile models, Git helpers, CLI session parsing, backend contracts, and reusable non-app UI primitives. | +| `Packages/Sources/RxCodeChatKit/` | Reusable chat UI, message rendering, input bar, slash commands, shortcuts, diffs, queue UI, and plan/question views. | +| `Packages/Sources/RxCodeSync/` | End-to-end encrypted sync protocol, pairing, APNs alert payloads, and mobile/desktop transport data structures. | +| `RxCodeWidget/` | Widget and Live Activity support for active work and usage information. | +| `RxCodeTests/`, `RxCodeUITests/` | App-level XCTest and UI test coverage. | +| `Packages/Tests/` | Swift package tests for core, chat kit, and sync logic. | +| `website/` | Public website and screenshot assets. | +| `scripts/` | Build, signing, notarization, Sparkle, and release automation. | ## Architecture ### Core Patterns -- **Observable AppState** (`App/AppState.swift`): `@MainActor @Observable` single state container. Manages all app state including projects, sessions, chat, and permission approvals. -- **App entry point** (`App/RxCodeApp.swift`): Defines WindowGroup (main), WindowGroup(id: "project-window") for dedicated per-project windows, Settings window, and Command menu (theme, update). -- **Actor-based services**: All services are implemented as `actor` for concurrency safety. Isolated without locks. -- **SwiftUI only**: No Storyboards or XIBs. 100% declarative UI. - -### Package Structure - -The codebase is split into two Swift packages under `Packages/`: - -| Package | Role | -| --------------- | ---------------------------------------------------------------- | -| `RxCodeCore` | Shared models, theme, utilities — no UI dependencies | -| `RxCodeChatKit` | Chat UI components (ChatView, MessageBubble, InputBarView, etc.) | - -### Service Layer (`Services/`) - -| Service | Role | -| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| `ClaudeService` | Spawns Codex CLI as a subprocess, parses stdout NDJSON stream, buffers text deltas at 50ms intervals | -| `PermissionServer` | Network framework-based local HTTP server (ports 19836–19846). Receives CLI PreToolUse hook requests and holds the connection until UI approval | -| `GitHubService` | OAuth Device Flow authentication, Keychain token storage, SSH key generation/registration, repo cloning | -| `PersistenceService` | JSON file-based persistence at `~/Library/Application Support/RxCode/`. Per-project/session directory structure | -| `MarketplaceService` | Parallel fetch of plugin catalog from 4 Anthropic GitHub repos, 5-minute cache | -| `RateLimitService` | Anthropic usage API polling, OAuth token refresh, usage tracking | -| `UpdateService` | Sparkle-based auto-update manager. Starts updater on launch; exposes `checkForUpdates()` for menu-initiated checks | -| `BashSafety` | Whitelist-based read-only command validator. Blocks mutating git/Codex/npm subcommands and write redirections | - -### Data Flow - -1. User input → `AppState.send()` → `ClaudeService.send()` spawns CLI subprocess -2. CLI stdout → NDJSON `AsyncStream` → per-event processing in `processStream()` -3. Text deltas buffered at 50ms intervals to prevent SwiftUI update thrashing -4. On tool execution: PermissionServer receives HTTP request → UI approval modal → returns response -5. On project switch: in-progress stream detached to background Task, saved to disk on completion - -### View Structure (`Views/`) - -- `MainView`: NavigationSplitView (sidebar + detail) with project tab bar -- `ProjectWindowView`: Dedicated single-project window (opened by double-clicking a project tab) -- `SettingsView`: App settings window (model defaults, appearance, etc.) -- `Chat/`: Main chat UI, message streaming, slash commands, attachments, marketplace, file diff, status line -- `Sidebar/`: Project list, session history, file tree, Git status, file preview, GitHub repo list -- `Onboarding/`: Initial setup flow, GitHub login -- `Permission/`: Risk-based (Safe/Moderate/High) tool approval modals -- `Terminal/`: SwiftTerm-based built-in terminal -- `UserManualView`: In-app user guide (Help menu). NavigationSplitView with topic list and detail. Topics: overview, projects, chat, shortcuts, slash commands, attachments, shortcut buttons, terminal, marketplace, permissions -- `InspectorMemoPanel`: Sidebar inspector panel with a rich-text (NSTextView) memo editor, persisted per project - -### Compiler Settings - -- `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor` — default MainActor isolation -- `SWIFT_APPROACHABLE_CONCURRENCY = YES` -- App Sandbox disabled (required for system integration) - -### Theme - -`Theme/ClaudeTheme.swift` + `Theme/AppTheme.swift` — terracotta accent (#D97757), light/dark mode, color palette, typography, corner radius constants (8/12/16/20) +- **Observable app state**: `RxCode/App/AppState.swift` is a `@MainActor @Observable` state container. Behavior is split across `AppState+*.swift` extensions by domain. +- **SwiftUI-only UI**: Use SwiftUI views. Do not introduce Storyboards or XIBs. +- **Actor-based services**: Services that own mutable shared state should be actors or should clearly isolate concurrency through existing patterns. +- **Backend abstraction**: Claude Code, Codex, and ACP flows share backend contracts from `RxCodeCore/Backend`. Avoid adding agent-specific branches when the shared protocol can express the behavior. +- **Package boundaries**: Keep `RxCodeCore` broadly reusable and free of app-only UI dependencies. Put chat-specific SwiftUI components in `RxCodeChatKit`, sync protocol code in `RxCodeSync`, and app orchestration in `RxCode/`. + +### Agent Runtime Services + +| Service | Role | +| --- | --- | +| `ClaudeService` | Runs Claude Code, handles process discovery, streaming, summaries, and CLI session integration. | +| `CodexAppServer` | Runs Codex app-server sessions, parses protocol events, fetches Codex models and rate limits. | +| `ACPService` | Runs ACP clients such as OpenCode or Gemini CLI, manages pooled ACP sessions, protocol I/O, model discovery, and permission bridging. | +| `ACPRegistryService` / `ACPInstallerService` | Fetches ACP registry data and installs compatible ACP client binaries. | +| `PermissionServer` | Local HTTP server for CLI permission hooks and approval handoff to the UI. | +| `MCPService` | Reads, writes, probes, and adapts MCP server configuration for supported agent runtimes. | +| `IDEServer` tools | Exposes project/thread/search/memory tools to agents through the in-app IDE MCP server. | + +### Supporting Services + +| Service | Role | +| --- | --- | +| `PersistenceService` / `ThreadStore` | JSON-backed persistence under Application Support and thread/session storage. | +| `ThreadSearchService` | On-device embedding and natural-language search over chat threads. | +| `MobileSyncService` | E2E encrypted mobile pairing, relay communication, APNs fan-out, and live sync events. | +| `RunService` / `RunProfileDetector` | Run profile execution and detection for Xcode, npm, make, and shell workflows. | +| `GitHubService` | OAuth device flow, Keychain token storage, SSH key management, repository browsing, and cloning. | +| `MarketplaceService` | Skill/plugin catalog fetching and installation support. | +| `RateLimitService` | Claude usage API polling, OAuth token refresh, and usage tracking. | +| `UpdateService` | Sparkle-based update manager. | +| `BashSafety` | Read-only command validation for agent-exposed shell helpers. | + +## Data Flow + +1. User input enters `AppState.send(in:)`. +2. `AppState` resolves the selected agent provider, model, effort, permission mode, working directory, and optional worktree. +3. The selected backend (`ClaudeService`, `CodexAppServer`, or `ACPService`) emits an `AsyncStream`. +4. `AppState+Stream.swift` processes stream events, updates chat state, tracks tools, handles permission requests, and persists messages. +5. Permission requests route through the UI and, where needed, through `PermissionServer` or ACP/Codex protocol responses. +6. Thread summaries, branch briefings, change tracking, search indexes, widgets, and mobile snapshots update from persisted session state. + +## UI Areas + +- `MainView`: main `NavigationSplitView` workspace. +- `ProjectWindowView`: dedicated single-project windows. +- `Chat/` and `RxCodeChatKit`: message list, input, slash commands, attachments, plans, questions, tool output, diffs, and status UI. +- `Sidebar/`: projects, session history, briefing, file tree, Git status, GitHub repo list, and file previews. +- `Inspector/`: changes, this-thread diff, and right-side contextual panels. +- `RunProfile/`: run configuration editor, toolbar controls, and command output inspector. +- `Settings/`: agent, ACP, MCP, mobile sync, commands, memory, appearance, and related settings. +- `Terminal/`: SwiftTerm-based terminal UI. +- `Permission/`: risk-aware approval modals and queued permission banners. +- `Search/`: global natural-language search overlay. + +## Implementation Guidelines + +- Prefer existing app services, models, theme tokens, and helper utilities over new abstractions. +- Keep UI consistent with the established SwiftUI style and `ClaudeTheme` / `AppTheme` tokens. +- Avoid blocking the main actor with process, file, network, or parsing work. +- When adding agent features, consider Claude Code, Codex, and ACP behavior unless the feature is explicitly provider-specific. +- When changing sync payloads, preserve backward/forward compatibility where possible because mobile and desktop versions can differ. +- When changing persistence formats, add migration or tolerant decoding rather than assuming all users have fresh data. +- Use `rg` for code search and inspect surrounding code before editing. + +## Testing Expectations + +- For package logic, run focused `swift test --package-path Packages` tests when practical. +- For app changes, prefer focused XCTest/UI test runs if the touched area has coverage. +- For build-sensitive changes, run `xcodebuild -project RxCode.xcodeproj -scheme RxCode -configuration Debug build`. +- If you cannot run the relevant verification, state that clearly in the final response. + +## Compiler And Platform Settings + +- `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor` is enabled for the app and relevant targets. +- `SWIFT_APPROACHABLE_CONCURRENCY = YES` is enabled for app/mobile-related targets. +- App Sandbox is disabled for the main macOS app because RxCode integrates with local developer tools and projects. diff --git a/CLAUDE.md b/CLAUDE.md index 8880918..1367124 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,91 +1,7 @@ # CLAUDE.md -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. +This repository uses `AGENTS.md` as the canonical coding-agent guidance file. -## Project Overview +Claude Code should read [AGENTS.md](AGENTS.md) before making changes. It contains the current project overview, writing rules, build commands, architecture notes, implementation guidelines, and testing expectations. -RxCode is a native macOS desktop client for the Claude Code CLI. Written in Swift + SwiftUI with two external dependencies: SwiftTerm (terminal emulation) and Sparkle (auto-update). - -## Writing Rules - -- All text committed to the project — code comments, commit messages, PR descriptions, log messages — must be written in **English**. - -## Build & Run - -```bash -# Open in Xcode (build/run with Cmd+R) -open RxCode.xcodeproj - -# CLI build -xcodebuild -project RxCode.xcodeproj -scheme RxCode -configuration Debug build - -# Release build -xcodebuild -project RxCode.xcodeproj -scheme RxCode -configuration Release build -``` - -- Minimum deployment target: macOS 26.0+ -- No test suite (UI app) -- Bundle ID: `com.idealapp.RxCode` -- External dependencies: SwiftTerm (terminal emulation), Sparkle (auto-update) - -## Architecture - -### Core Patterns - -- **Observable AppState** (`App/AppState.swift`): `@MainActor @Observable` single state container. Manages all app state including projects, sessions, chat, and permission approvals. -- **App entry point** (`App/RxCodeApp.swift`): Defines WindowGroup (main), WindowGroup(id: "project-window") for dedicated per-project windows, Settings window, and Command menu (theme, update). -- **Actor-based services**: All services are implemented as `actor` for concurrency safety. Isolated without locks. -- **SwiftUI only**: No Storyboards or XIBs. 100% declarative UI. - -### Package Structure - -The codebase is split into two Swift packages under `Packages/`: - -| Package | Role | -| --------------- | ---------------------------------------------------------------- | -| `RxCodeCore` | Shared models, theme, utilities — no UI dependencies | -| `RxCodeChatKit` | Chat UI components (ChatView, MessageBubble, InputBarView, etc.) | - -### Service Layer (`Services/`) - -| Service | Role | -| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| `ClaudeService` | Spawns Claude CLI as a subprocess, parses stdout NDJSON stream, buffers text deltas at 50ms intervals | -| `PermissionServer` | Network framework-based local HTTP server (ports 19836–19846). Receives CLI PreToolUse hook requests and holds the connection until UI approval | -| `GitHubService` | OAuth Device Flow authentication, Keychain token storage, SSH key generation/registration, repo cloning | -| `PersistenceService` | JSON file-based persistence at `~/Library/Application Support/RxCode/`. Per-project/session directory structure | -| `MarketplaceService` | Parallel fetch of plugin catalog from 4 Anthropic GitHub repos, 5-minute cache | -| `RateLimitService` | Anthropic usage API polling, OAuth token refresh, usage tracking | -| `UpdateService` | Sparkle-based auto-update manager. Starts updater on launch; exposes `checkForUpdates()` for menu-initiated checks | -| `BashSafety` | Whitelist-based read-only command validator. Blocks mutating git/claude/npm subcommands and write redirections | - -### Data Flow - -1. User input → `AppState.send()` → `ClaudeService.send()` spawns CLI subprocess -2. CLI stdout → NDJSON `AsyncStream` → per-event processing in `processStream()` -3. Text deltas buffered at 50ms intervals to prevent SwiftUI update thrashing -4. On tool execution: PermissionServer receives HTTP request → UI approval modal → returns response -5. On project switch: in-progress stream detached to background Task, saved to disk on completion - -### View Structure (`Views/`) - -- `MainView`: NavigationSplitView (sidebar + detail) with project tab bar -- `ProjectWindowView`: Dedicated single-project window (opened by double-clicking a project tab) -- `SettingsView`: App settings window (model defaults, appearance, etc.) -- `Chat/`: Main chat UI, message streaming, slash commands, attachments, marketplace, file diff, status line -- `Sidebar/`: Project list, session history, file tree, Git status, file preview, GitHub repo list -- `Onboarding/`: Initial setup flow, GitHub login -- `Permission/`: Risk-based (Safe/Moderate/High) tool approval modals -- `Terminal/`: SwiftTerm-based built-in terminal -- `UserManualView`: In-app user guide (Help menu). NavigationSplitView with topic list and detail. Topics: overview, projects, chat, shortcuts, slash commands, attachments, shortcut buttons, terminal, marketplace, permissions -- `InspectorMemoPanel`: Sidebar inspector panel with a rich-text (NSTextView) memo editor, persisted per project - -### Compiler Settings - -- `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor` — default MainActor isolation -- `SWIFT_APPROACHABLE_CONCURRENCY = YES` -- App Sandbox disabled (required for system integration) - -### Theme - -`Theme/ClaudeTheme.swift` + `Theme/AppTheme.swift` — terracotta accent (#D97757), light/dark mode, color palette, typography, corner radius constants (8/12/16/20) +This file intentionally delegates to `AGENTS.md` so agent instructions stay in one place. diff --git a/README.md b/README.md index ecc3f96..cc6de79 100644 --- a/README.md +++ b/README.md @@ -1,156 +1,169 @@ # RxCode -**The terminal was for the few. RxCode is for everyone.** +**A native macOS command center for AI coding agents.** -RxCode is a lightweight native macOS desktop client for Claude Code, Codex, and Agent Client Protocol (ACP) clients such as Gemini CLI and OpenCode. It brings the CLI agent workflow into a project-centric GUI with streaming chat, repository switching, file browsing, Git status, permissions, terminal access, and per-project notes. +RxCode brings Claude Code, Codex, and Agent Client Protocol (ACP) clients into one SwiftUI workspace. It keeps the real agent runtimes underneath, but gives them a project-first desktop UI with streaming chat, permission approvals, Git context, run commands, natural-language search, mobile sync, and briefing views. -![Platform](https://img.shields.io/badge/platform-macOS%2015.0%2B-blue) +![Platform](https://img.shields.io/badge/platform-macOS%2026.0%2B-blue) ![Swift](https://img.shields.io/badge/Swift-6.x-orange) -![Version](https://img.shields.io/badge/version-1.2.0-blue) ![License](https://img.shields.io/badge/license-Apache%202.0-green) ---- +

+ RxCode showing an active coding session with a diff and streaming response +

+ +## Why RxCode + +AI coding agents are powerful, but their best workflows are still scattered across terminal sessions, editor windows, branch checkouts, and chat history. RxCode keeps those pieces in one native Mac app: + +- Choose Claude Code, Codex, or an ACP client per session. +- Run commands and project tasks without leaving the editor. +- Work with multiple agents at the same time, backed by Git worktrees. +- Search all sessions with natural language. +- Let Apple's Foundation Model handle lightweight local summarization tasks when available. +- Review what changed through a persistent briefing and change-tracking panel. +- Pair RxCode Mobile through end-to-end encrypted sync. ## Screenshots -![RxCode Screenshot](docs/screenshot.png) +| Workspace | Native macOS UI | +| --- | --- | +| Active RxCode coding session | RxCode native macOS workspace | ---- +| ACP clients | Run commands | +| --- | --- | +| RxCode ACP client session | RxCode run profile controls and command output | -## Why RxCode? +| Open in editor | Track changes | +| --- | --- | +| RxCode editor menu with Cursor, VS Code, Zed, Xcode, Finder, Terminal, and Warp | RxCode thread change-tracking panel | -The terminal is a wall. For most people who aren't developers, it's a closed door — install a CLI, generate SSH keys, approve every tool call without a real preview of what it's about to do. None of that is hard for engineers; all of it is hard for everyone else. The terminal was for the few, and it still is. +## Agent Runtime Support -RxCode was built so my non-developer coworkers could use Claude Code, Codex, and ACP-compatible clients without learning a shell first. It doesn't reinvent the agent. It talks to the real runtimes underneath: `claude` for Claude Code, the Codex app-server through the `codex` CLI for Codex sessions, and ACP clients installed from the public registry. Your existing CLI setup stays the source of truth when you bring your own runtime. What sits on top is a native Mac app: +RxCode supports both first-party CLI agents and ACP-compatible runtimes: -- Approval modals that surface the actual diff before any tool runs, with risk-aware Allow / Allow Session / Deny options. -- Per-project windows you can run in parallel — switch tabs, double-click to spin off a window, keep streams alive in the background. -- Drag-and-drop attachments, smart paste for images, file paths, URLs, and long text. -- GitHub OAuth that handles SSH key setup for you, so `git clone` just works. -- An inspector with a file tree, Git status, embedded terminal, and a per-project memo pad. +- **Claude Code**: stream chats, approve tools, inspect diffs, and keep Claude Code sessions attached to project history. +- **Codex**: run Codex in the same workspace with model, effort, permission, and usage controls. +- **OpenCode and more ACP clients**: install and run compatible clients such as OpenCode, Gemini CLI, and other registry agents. +- **Cursor and editor handoff**: open projects and files in Cursor, VS Code, Zed, Xcode, JetBrains IDEs, Finder, Terminal, or Warp. -Same agents, no terminal required. +

+ RxCode Settings window showing ACP client registry installation +

---- +## Run Commands Inside RxCode -## What RxCode Adds +Run profiles let you keep repeatable project commands close to the chat. Define build, test, dev-server, or custom shell tasks, launch them from the toolbar, and inspect output inside RxCode instead of switching to a separate terminal. -| RxCode feature | Why it matters | -|---------------|----------------| -| **Native macOS app** | Built with SwiftUI, not Electron. The current v1.2.0 release is about 5.6 MB to download and about 13 MB unpacked, without bundling a browser runtime. | -| **Claude Code, Codex, and ACP support** | Choose the agent runtime per session. RxCode detects installed `claude` and `codex` binaries, surfaces available models, and also runs ACP-compatible clients such as Gemini CLI and OpenCode. | -| **ACP registry installer** | Browse the public ACP registry from Settings, install compatible clients directly, and add registry agents to the chat model picker without manual setup. | -| **Project-centric workspace** | Register multiple local repositories, switch between them from project tabs, or open a project in its own window for parallel sessions. In-progress streams keep running in the background while you switch. | -| **Custom slash commands** | Add, edit, disable, import, and export custom slash commands. Built-in commands can be edited locally, while JSON import/export stays custom-only. | -| **Shortcut buttons** | Create quick buttons for prompts or terminal commands you run repeatedly. Terminal-command shortcuts can launch directly into RxCode's interactive terminal popup. | -| **Built-in file explorer with Git status** | Browse and search project files, toggle hidden files, preview or edit files, inspect Git status, and switch branches from the sidebar. | -| **Rich-text memo pad per project** | Keep project-specific notes in the inspector panel with headings, lists, checkboxes, links, and Markdown copy/paste support. | -| **Embedded terminal** | Use a SwiftTerm-based terminal in the inspector, plus interactive terminal popups for commands such as `/config`, `/permissions`, and `/model`. | +The app also includes a SwiftTerm-powered terminal for interactive work, slash-command flows, and quick command shortcuts. ---- +## Concurrent Chatting With Git Worktrees -## Features +RxCode is built for parallel agent work. You can open multiple project windows, keep streams running in the background, and attach sessions to Git worktrees so each agent can work on an isolated branch. -| Feature | Description | -|---------|-------------| -| **Streaming Chat** | Real-time Claude Code, Codex, and ACP client conversations with Markdown rendering, tool call visualization, diff views, and error bubbles for failed empty responses. | -| **Multi-Project Workspace** | Register local folders or GitHub repositories, switch freely, and keep per-project session history. | -| **Dedicated Project Windows** | Double-click a project tab to open it in an independent window and work across multiple repositories at once. | -| **Per-Session Controls** | Choose model, permission mode, and effort level per session from the chat toolbar. Defaults are configurable in Settings. | -| **Permission Modes** | Ask, Accept Edits, Plan, Auto, and Bypass modes mirror Claude Code's permission model and can be changed from the toolbar. | -| **Permission Management** | Risk-based approve/deny UI with Allow, Allow Session, Deny, and 5-minute auto-deny handling. | -| **Effort Levels** | Auto, Low, Medium, High, XHigh, and Max reasoning controls for each session. | -| **Model Selection** | Claude Code aliases, Codex models, and ACP-advertised models with localized descriptions, including Opus, Sonnet, Haiku, 1M context, plan variants, GPT coding models, and client-provided model lists. | -| **File Attachments** | Drag-and-drop files and images. Smart paste detects images, file paths, URLs, and long text. | -| **Attachment Auto-Preview Settings** | Toggle automatic preview chips separately for URLs, file paths, images, and long text. | -| **Slash Commands** | Built-in and custom command system with built-in command edits/toggles and custom-command JSON import/export. | -| **Shortcut Buttons** | Configurable quick-access buttons for frequent prompts and terminal commands. | -| **Message Queue** | Queue messages while Claude is responding; cancel queued items with ESC or the remove button. | -| **Status Line** | Project path, model, 5-hour and 7-day rate limits, context usage, and response time at a glance. | -| **Built-in Terminal** | SwiftTerm-powered inspector terminal with reset support, plus full interactive terminal sheets. | -| **File Explorer** | Project file tree with search, hidden-file toggle, syntax-highlighted preview, file editing, and `@path` insertion. | -| **Git Status** | Sidebar Git status summary with changed-file counts, branch display, and local/remote branch switching. | -| **GitHub Integration** | OAuth device flow, Keychain token storage, SSH key management, repository browsing, and cloning. | -| **Memo Panel** | Per-project rich-text memo pad with headings, lists, checkboxes, links, and persistent storage. | -| **Skill Marketplace** | Browse and install OpenAI Agent Skills and compatible skill catalogs from Settings, refreshed with a 5-minute cache and enabled for supported coding agents. | -| **Themes and Font Controls** | Six accent themes plus independent font size controls for the interface and message area. | -| **Focus Mode** | Optional focused chat layout that can be enabled from Settings. | -| **Notifications** | Optional system notifications with response previews while RxCode is in the background. | -| **Localization** | Full English and Korean UI. | -| **User Guide** | Built-in in-app help guide accessible from the toolbar and Settings. | -| **Auto-update** | Sparkle-based update checking on launch, with manual checks from the app menu. | - ---- +That makes it practical to ask one agent to update UI, another to fix tests, and another to inspect implementation details while the main repository stays readable. -## Requirements +## Natural-Language Global Search -- **macOS 26.0** or later -- At least one supported agent runtime installed and authenticated: - - **[Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)** - - **Codex CLI** - - **ACP-compatible clients**, installed from Settings -> ACP Clients -> Registry or configured externally -- **Xcode with Swift 6.2+ toolchain** for building the current source tree +Use the global search overlay to find prior agent work by meaning, not only by exact text. RxCode indexes local thread history on device, ranks results semantically, and can surface matching snippets from archived and active sessions. ---- +## Local Lightweight AI With Apple Foundation Model -## Installation +When Apple's Foundation Model is available, RxCode can use the local LLM for lightweight tasks such as session titles, response summaries, notification summaries, and commit-message suggestions. Larger coding turns still run through the selected agent runtime. + +## Briefing And Change Tracking + +The briefing section keeps you oriented when several sessions are moving at once. It summarizes what changed, keeps branch-level context visible, and pairs with the thread change panel so you can see files, additions, deletions, and session outcomes without reopening every chat. + +

+ RxCode thread review panel listing files changed by an agent session +

+ +## Mobile App + +RxCode Mobile mirrors the desktop workspace over an end-to-end encrypted sync channel and is designed to support the same core workflows as the desktop app. From your phone you can browse projects, search threads, start or follow agent sessions, review briefings, manage synced desktop context, and preview a website running on the host machine through the in-app browser. -1. Download the latest `RxCode-x.y.z.zip` from the [Releases](https://github.com/ttnear/RxCode/releases) page. -2. Unzip and move `RxCode.app` to your `Applications` folder. -3. Launch `RxCode.app`. +| Projects | Search | New session | +| --- | --- | --- | +| RxCode Mobile projects list | RxCode Mobile natural-language thread search | RxCode Mobile starting a new agent thread | -### First Launch on macOS 26 +| Live chat | Host preview | Briefing | +| --- | --- | --- | +| RxCode Mobile live agent conversation | RxCode Mobile in-app browser previewing a host website | RxCode Mobile briefing view | -macOS 26 blocks the first launch of any downloaded app, even notarized ones, and routes approval through System Settings instead of the old right-click -> Open flow. +## Coming Soon: RxCoding Agent -When you see **"Apple could not verify 'RxCode.app' is free of malware..."**: +RxCoding Agent is a planned UI-first coding agent built purely in Swift. It will use the endpoint you provide to code through RxCode's native interface, while keeping the app's project browser, permission flow, run profiles, briefings, and mobile sync as the control surface. -1. Click **Done** on the dialog. -2. Open **System Settings -> Privacy & Security**. -3. Scroll to the Security section and click **Open Anyway** next to `RxCode.app`. -4. Confirm with your password or Touch ID. +## More Features -After this one-time approval, RxCode launches normally. The app is signed with a Developer ID certificate and notarized by Apple. This prompt is standard macOS behavior, not a security warning specific to RxCode. +| Feature | Description | +| --- | --- | +| **Permission approvals** | Risk-aware approvals for tool calls, with diff previews where available. | +| **MCP configuration** | Configure MCP servers for supported agents from Settings. | +| **GitHub integration** | OAuth device flow, Keychain token storage, SSH key management, repository browsing, and cloning. | +| **File explorer** | Browse files, preview content, edit files, inspect Git status, and insert paths into prompts. | +| **Session controls** | Choose agent, model, effort, and permission mode per session. | +| **Menu bar status** | Monitor active work and Claude Code or Codex usage without opening the main window. | +| **Shortcut buttons** | Save frequent prompts and terminal commands as one-click actions. | +| **Skill marketplace** | Browse and install compatible coding-agent skills from Settings. | +| **Themes and fonts** | Customize accent themes and interface or message font sizes. | + +

+ RxCode Settings window showing MCP server configuration + RxCode menu bar extra showing usage and session progress +

+ +## Requirements + +- macOS 26.0 or later +- At least one supported agent runtime: + - [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code) + - Codex CLI + - An ACP-compatible client installed from Settings or configured externally +- Xcode with the Swift 6.2+ toolchain to build from source + +## Installation ---- +1. Download the latest RxCode release from [GitHub Releases](https://github.com/rxtech-lab/rxcode/releases). +2. Move `RxCode.app` to `Applications`. +3. Launch RxCode and connect your agent runtimes from Settings. -## Build from Source +If macOS blocks the first launch, open **System Settings -> Privacy & Security** and choose **Open Anyway** for `RxCode.app`. + +## Build From Source + +Open the project in Xcode: ```bash open RxCode.xcodeproj ``` -For a CLI build: +Build from the command line: ```bash xcodebuild -project RxCode.xcodeproj -scheme RxCode -configuration Debug build ``` -For tests: +Create a release build: ```bash -xcodebuild test -project RxCode.xcodeproj -scheme RxCode -destination 'platform=macOS' -swift test --package-path Packages +xcodebuild -project RxCode.xcodeproj -scheme RxCode -configuration Release build ``` -For a signed release ZIP, use the release scripts under `scripts/`. - ---- - ## Project Structure | Path | Purpose | -|------|---------| -| `RxCode/` | macOS app target: app entry point, views, services, resources, and integrations. | -| `Packages/Sources/RxCodeCore/` | Shared models, theme, utilities, Git helpers, and pure core logic. | +| --- | --- | +| `RxCode/` | macOS app target with SwiftUI views, services, resources, and integrations. | +| `Packages/Sources/RxCodeCore/` | Shared models, theme, utilities, sync protocol, and core logic. | | `Packages/Sources/RxCodeChatKit/` | Reusable chat UI, message rendering, input bar, slash commands, shortcuts, diffs, and status line. | +| `RxCodeWidget/` | Widget and Live Activity surfaces for active work and usage. | | `RxCodeTests/` | App-level XCTest coverage. | -| `Packages/Tests/` | Swift Testing coverage for core utilities. | -| `release_notes/` | Human-readable release notes used for publishing. | +| `Packages/Tests/` | Swift package tests. | +| `website/` | Public website and screenshot assets used by this README. | | `scripts/` | Build, notarization, Sparkle signing, and release automation. | ---- - ## License -Apache License 2.0. See the [LICENSE](LICENSE) file for details. +Apache License 2.0. See [LICENSE](LICENSE) for details.