Package Exports
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (remote-opencode) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
remote-opencode
Control your AI coding assistant from anywhere β your phone, tablet, or another computer.
remote-opencode is a Discord bot that bridges your local OpenCode CLI to Discord, enabling you to interact with your AI coding assistant remotely. Perfect for developers who want to:
- π± Code from mobile β Send coding tasks from your phone while away from your desk
- π» Access from any device β Use your powerful dev machine from a laptop or tablet
- π Work remotely β Control your home/office workstation from anywhere
- π₯ Collaborate β Share AI coding sessions with team members in Discord
How It Works
βββββββββββββββββββ Discord API βββββββββββββββββββ
β Your Phone / β ββββββββββββββββΊ β Discord Bot β
β Other Device β β (this project) β
βββββββββββββββββββ ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β OpenCode CLI β
β (your machine) β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Your Codebase β
βββββββββββββββββββThe bot runs on your development machine alongside OpenCode. When you send a command via Discord, it's forwarded to OpenCode, and the output streams back to you in real-time.
Table of Contents
- Installation
- Quick Start
- Discord Bot Setup
- CLI Commands
- Discord Slash Commands
- Usage Workflow
- Configuration
- Troubleshooting
- Development
- License
Installation
Prerequisites
- Node.js 22+ β Download
- OpenCode CLI β Must be installed and working on your machine
- Discord Account β With a server where you have admin permissions
Install via npm
# Global installation (recommended)
npm install -g remote-opencode
# Or run directly with npx
npx remote-opencodeInstall from source
git clone https://github.com/RoundTable02/remote-opencode.git
cd remote-opencode
npm install
npm run build
npm link # Makes 'remote-opencode' available globallyQuick Start
# Step 1: Run the interactive setup wizard
remote-opencode setup
# Step 2: Start the Discord bot
remote-opencode startThat's it! Now use Discord slash commands to interact with OpenCode.
Discord Bot Setup
The setup wizard (remote-opencode setup) guides you through the entire process interactively:
- Opens Discord Developer Portal in your browser
- Walks you through creating an application, enabling intents, and getting your bot token
- Generates the invite link automatically and opens it in your browser
- Deploys slash commands to your server
Just run remote-opencode setup and follow the prompts β no manual URL copying needed!
π Manual setup reference (click to expand)
If you prefer manual setup or need to troubleshoot:
- Create Application: Go to Discord Developer Portal, create a new application
- Enable Intents: In "Bot" section, enable SERVER MEMBERS INTENT and MESSAGE CONTENT INTENT
- Get Bot Token: In "Bot" section, reset/view token and copy it
- Get Guild ID: Enable Developer Mode in Discord settings, right-click your server β Copy Server ID
- Invite Bot: Use this URL format:
https://discord.com/api/oauth2/authorize?client_id=YOUR_CLIENT_ID&permissions=2147534848&scope=bot+applications.commands
CLI Commands
| Command | Description |
|---|---|
remote-opencode |
Start the bot (shows setup guide if not configured) |
remote-opencode setup |
Interactive setup wizard β configures bot token, IDs |
remote-opencode start |
Start the Discord bot |
remote-opencode deploy |
Deploy/update slash commands to Discord |
remote-opencode config |
Display current configuration info |
Discord Slash Commands
Once the bot is running, use these commands in your Discord server:
/setpath β Register a Project
Register a local project path with an alias for easy reference.
/setpath alias:myapp path:/Users/you/projects/my-app| Parameter | Description |
|---|---|
alias |
Short name for the project (e.g., myapp, backend) |
path |
Absolute path to the project on your machine |
/projects β List Registered Projects
View all registered project paths and their aliases.
/projects/use β Bind Project to Channel
Set which project a Discord channel should interact with.
/use alias:myappAfter binding, all /opencode commands in that channel will work on the specified project.
/opencode β Send Command to AI
The main command β sends a prompt to OpenCode and streams the response.
/opencode prompt:Add a dark mode toggle to the settings pageFeatures:
- π§΅ Auto-creates a thread for each conversation
- β‘ Real-time streaming β see output as it's generated (1-second updates)
- βΈοΈ Interrupt button β stop the current task if needed
- π Session persistence β continue conversations in the same thread
/work β Create a Git Worktree
Start isolated work on a new branch with its own worktree.
/work branch:feature/dark-mode description:Implement dark mode toggle| Parameter | Description |
|---|---|
branch |
Git branch name (will be sanitized) |
description |
Brief description of the work |
Features:
- π³ Creates a new git worktree for isolated work
- π§΅ Opens a dedicated thread for the task
- ποΈ Delete button β removes worktree and archives thread
- π Create PR button β automatically creates a pull request
This is perfect for working on multiple features simultaneously without branch switching.
/code β Toggle Passthrough Mode
Enable passthrough mode in a thread to send messages directly to OpenCode without slash commands.
/codeHow it works:
- Run
/codein any thread to enable passthrough mode - Type messages naturally β they're sent directly to OpenCode
- Run
/codeagain to disable
Example:
You: /code
Bot: β
Passthrough mode enabled for this thread.
Your messages will be sent directly to OpenCode.
You: Add a dark mode toggle to settings
Bot: π Prompt: Add a dark mode toggle to settings
[streaming response...]
You: Now add a keyboard shortcut for it
Bot: π Prompt: Now add a keyboard shortcut for it
[streaming response...]
You: /code
Bot: β Passthrough mode disabled.Features:
- π± Mobile-friendly β no more typing slash commands on phone
- π§΅ Thread-scoped β only affects the specific thread, not the whole channel
- β³ Busy indicator β shows β³ reaction if previous task is still running
- π Safe β ignores bot messages (no infinite loops)
/autowork β Toggle Automatic Worktree Creation
Enable automatic worktree creation for a project. When enabled, new /opencode sessions will automatically create isolated git worktrees.
/autoworkHow it works:
- Run
/autoworkin a channel bound to a project - The setting toggles on/off for that project
- When enabled, new sessions automatically create worktrees with branch names like
auto/abc12345-1738600000000
Example:
You: /autowork
Bot: β
Auto-worktree enabled for project myapp.
New sessions will automatically create isolated worktrees.
You: /opencode prompt:Add user authentication
Bot: [Creates thread + auto-worktree]
π³ Auto-Worktree: auto/abc12345-1738600000000
[Delete] [Create PR]
π Prompt: Add user authentication
[streaming response...]Features:
- π³ Automatic isolation β each session gets its own branch and worktree
- π± Mobile-friendly β no need to type
/workwith branch names - ποΈ Delete button β removes worktree when done
- π Create PR button β easily create pull requests from worktree
- β‘ Per-project setting β enable/disable independently for each project
Usage Workflow
Basic Workflow
Register your project:
/setpath alias:webapp path:/home/user/my-webappBind to a channel:
/use alias:webappStart coding remotely:
/opencode prompt:Refactor the authentication module to use JWTContinue the conversation in the created thread:
/opencode prompt:Now add refresh token support
Mobile Workflow
Perfect for when you're away from your desk:
- π± Open Discord on your phone
- Navigate to your bound channel
- Use
/opencodeto send tasks - Watch real-time progress
- Use the Interrupt button if needed
Pro tip: Enable passthrough mode with /code in a thread for an even smoother mobile experience β just type messages directly without slash commands!
Team Collaboration Workflow
Share AI coding sessions with your team:
- Create a dedicated Discord channel for your project
- Bind the project:
/use alias:team-project - Team members can watch sessions in real-time
- Discuss in threads while AI works
Worktree Workflow (Parallel Features)
Work on multiple features without conflicts:
Start a new feature:
/work branch:feature/auth description:Implement OAuth2 loginWork in the created thread:
/opencode prompt:Add Google OAuth providerWhen done, create a PR: Click the Create PR button
Clean up: Click Delete to remove the worktree
Configuration
All configuration is stored in ~/.remote-opencode/:
| File | Purpose |
|---|---|
config.json |
Bot credentials (token, client ID, guild ID) |
data.json |
Project paths, channel bindings, session data |
config.json Structure
{
"discordToken": "your-bot-token",
"clientId": "your-application-id",
"guildId": "your-server-id"
}data.json Structure
{
"projects": [
{ "alias": "myapp", "path": "/Users/you/projects/my-app", "autoWorktree": true }
],
"bindings": [
{ "channelId": "channel-id", "projectAlias": "myapp" }
],
"threadSessions": [ ... ],
"worktreeMappings": [ ... ]
}| Field | Description |
|---|---|
projects[].autoWorktree |
Optional. When true, new sessions auto-create worktrees |
Troubleshooting
Bot doesn't respond to commands
- Check bot is online: Look for the bot in your server's member list
- Verify permissions: Bot needs these permissions:
- Send Messages
- Create Public Threads
- Send Messages in Threads
- Embed Links
- Read Message History
- Redeploy commands:
remote-opencode deploy
"No project set for this channel"
You need to bind a project to the channel:
/setpath alias:myproject path:/path/to/project
/use alias:myprojectCommands not appearing in Discord
Slash commands can take up to an hour to propagate globally. For faster updates:
- Kick the bot from your server
- Re-invite it
- Run
remote-opencode deploy
OpenCode server errors
- Verify OpenCode is installed:
opencode --version - Check if another process is using the port
- Ensure the project path exists and is accessible
Session connection issues
The bot maintains persistent sessions. If you encounter issues:
- Start a new thread with
/opencodeinstead of continuing in an old one - Restart the bot:
remote-opencode start
Bot crashes on startup
- Check Node.js version:
node --version # Should be 22+
- Verify configuration:
remote-opencode config
- Re-run setup:
remote-opencode setup
Development
Run from source
git clone https://github.com/RoundTable02/remote-opencode.git
cd remote-opencode
npm install
# Development mode (with ts-node)
npm run dev setup # Run setup
npm run dev start # Start bot
# Build and run production
npm run build
npm startRun tests
npm testProject Structure
src/
βββ cli.ts # CLI entry point
βββ bot.ts # Discord client initialization
βββ commands/ # Slash command definitions
β βββ opencode.ts # Main AI interaction command
β βββ code.ts # Passthrough mode toggle
β βββ work.ts # Worktree management
β βββ setpath.ts # Project registration
β βββ projects.ts # List projects
β βββ use.ts # Channel binding
βββ handlers/ # Interaction handlers
β βββ interactionHandler.ts
β βββ buttonHandler.ts
β βββ messageHandler.ts # Passthrough message handling
βββ services/ # Core business logic
β βββ serveManager.ts # OpenCode process management
β βββ sessionManager.ts # Session state management
β βββ sseClient.ts # Real-time event streaming
β βββ dataStore.ts # Persistent storage
β βββ configStore.ts # Bot configuration
β βββ worktreeManager.ts # Git worktree operations
βββ setup/ # Setup wizard
β βββ wizard.ts # Interactive setup
β βββ deploy.ts # Command deployment
βββ utils/ # Utilities
βββ messageFormatter.ts
βββ threadHelper.tsLicense
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request