Telegram-based remote AI coding automation server
Project description
Remote AI Coder
Run Claude Code, Codex, or Gemini on your local development machine by sending a Telegram message. Remote AI Coder isolates each request in a Git worktree, commits the result on a separate branch, and reports the outcome back to Telegram.
English: this document · 한국어: README.ko.md
[!WARNING] This is a local automation tool with access to AI CLIs, Git, and your filesystem. Keep it private, use Telegram allowlists, and do not expose the server or admin UI to the public internet.
What You Get
- Telegram as a lightweight remote control for local coding agents.
- One Telegram bot per registered project, with project-scoped allowlists and settings.
- Request-specific Git worktrees, branch creation, commit, push, and result notifications.
- Claude, Codex, and Gemini runners behind the same job flow.
- Local admin UI for project setup, advanced settings, logs, and conversation memory.
- Read-only
plan:andask:modes when you want analysis without commits.
Quick Start
Install the CLI:
pip install remote-coder
Before the first package release, install from source:
pip install git+https://github.com/maroomir/remote-coder.git
Check your local tools, then start everything:
remote-coder doctor
remote-coder up
Open http://127.0.0.1:8000/, add your first project, and message the project bot in Telegram. remote-coder up runs the server, starts the ngrok tunnel, registers webhooks, and refreshes the Telegram command menu. Use remote-coder up --no-tunnel when you only want the local server.
Requirements
- Python 3.11+
ngrokor another HTTPS tunnel for Telegram webhooks- One Telegram bot token per project
- Allowed Telegram Chat IDs, and optionally User IDs
- At least one local AI CLI:
claude,codex, orgemini - A local Git repository to automate
How It Works
Telegram message
-> FastAPI webhook /telegram/webhook/{sha256-prefix16}
-> project-bound bot instance and allowlist check
-> command parser or natural-language confirmation
-> JobManager
-> Git worktree
-> Claude / Codex / Gemini runner
-> branch, commit, push, and Telegram result
Each project uses its own bot. The webhook path contains the first 16 hex characters of SHA-256(bot token), never the raw token. Natural-language jobs show the target project, branch, model, and mode before running, then wait for confirmation.
Everyday Commands
| Command | Purpose |
|---|---|
/start, /help |
Open the menu or command help |
/model |
View or change the chat's default model |
/status [job_id] |
Inspect recent or specific jobs |
/branch [name] |
Show or switch the bound project's local branch |
/pull |
Fetch remotes and pull the current branch |
/rebase [branch] |
Rebase and fast-forward a completed branch into main or master |
/pr [branch] |
Create a GitHub PR with gh |
/fix ... |
Rework a previous job's commit message or source |
/monitor ... |
Inspect model, memory, branch, worktree, code, or project status |
/clear ... |
Clean managed branches, worktrees, or conversation memory |
/stop [job_id] |
Cancel a queued or running job |
/init |
Reset chat-local model and pending confirmations |
Natural-language examples:
Fix the login validation bug with model: codex
plan: outline the migration before changing code
/ask what test command does this repo use?
수정: 방금 작업에서 README 문구만 더 간결하게 바꿔줘
Configuration
Day-to-day setup happens in the local admin UI. Files live under REMOTE_CODER_HOME, defaulting to ~/.remote-coder:
projects.jsonstores project records, bot tokens, allowlists, root paths, and default models.advanced_settings.jsonstores global behavior such as timeouts, sandbox mode, language, worktree retention, and memory limits.worktrees/<project>/contains managed job worktrees and logs.
Useful overrides: REMOTE_CODER_HOME, PROJECTS_CONFIG_PATH, CONVERSATION_DB_PATH, and JOB_DB_PATH.
Security Notes
- Treat
~/.remote-coder/projects.jsonas a secret; bot tokens are stored in plain text. - Keep the admin UI on localhost.
- Do not paste secrets or sensitive code into Telegram messages.
- Dangerous runner modes such as Claude
--dangerously-skip-permissions, Gemini--approval-mode yolo, and Codexdanger-full-accesscan modify local files. - See
SECURITY.mdbefore publishing, exposing, or sharing a deployment.
More Docs
- Multi-bot setup and migration:
docs/multi-bot-setup.md - AI runners:
docs/ai-runners.md - Read-only worktree troubleshooting:
docs/read-only-workspace.md - Contributing:
CONTRIBUTING.md
Development
conda env create -f environment.yml
conda activate remote-coder
python -m pip install -e ".[dev]"
remote-coder up --no-tunnel --reload
Run the test suite:
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 conda run -n remote-coder pytest -q -p pytest_asyncio.plugin -p respx.fixtures
License: Apache License 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file remote_coder-0.4.3.tar.gz.
File metadata
- Download URL: remote_coder-0.4.3.tar.gz
- Upload date:
- Size: 187.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
80648f2f91808800776076251cdf5d1ee65188455065855112d7c626f38c1d8a
|
|
| MD5 |
b155a1fb79a6b2e3b5c837e6ee589f36
|
|
| BLAKE2b-256 |
a8ade506ffdbce840885e30e75186f0f1aa19074e65a6ebf04ba9f3b8ca89fec
|
Provenance
The following attestation bundles were made for remote_coder-0.4.3.tar.gz:
Publisher:
release.yml on maroomir/remote-coder
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
remote_coder-0.4.3.tar.gz -
Subject digest:
80648f2f91808800776076251cdf5d1ee65188455065855112d7c626f38c1d8a - Sigstore transparency entry: 1766964379
- Sigstore integration time:
-
Permalink:
maroomir/remote-coder@f0665bb001bcb5b255020c895dd945bb0366e496 -
Branch / Tag:
refs/tags/v0.4.3 - Owner: https://github.com/maroomir
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f0665bb001bcb5b255020c895dd945bb0366e496 -
Trigger Event:
push
-
Statement type:
File details
Details for the file remote_coder-0.4.3-py3-none-any.whl.
File metadata
- Download URL: remote_coder-0.4.3-py3-none-any.whl
- Upload date:
- Size: 167.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9de3cc1f987246a87be7e6a050f0ca561ece3463fcb60509544af6a1a0e7bdf9
|
|
| MD5 |
ed3e5f45d4ccc1f481cdc40bd637171a
|
|
| BLAKE2b-256 |
851b0ed597cd4b1f90aec3c67abf06389c8f02fbc35fbdf7519d99934d5d88ef
|
Provenance
The following attestation bundles were made for remote_coder-0.4.3-py3-none-any.whl:
Publisher:
release.yml on maroomir/remote-coder
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
remote_coder-0.4.3-py3-none-any.whl -
Subject digest:
9de3cc1f987246a87be7e6a050f0ca561ece3463fcb60509544af6a1a0e7bdf9 - Sigstore transparency entry: 1766965654
- Sigstore integration time:
-
Permalink:
maroomir/remote-coder@f0665bb001bcb5b255020c895dd945bb0366e496 -
Branch / Tag:
refs/tags/v0.4.3 - Owner: https://github.com/maroomir
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f0665bb001bcb5b255020c895dd945bb0366e496 -
Trigger Event:
push
-
Statement type: