Skip to main content

Bridge a local Codex CLI session to Telegram on macOS.

Project description

teledex

teledex is a macOS CLI bridge that lets you operate a local codex workflow from Telegram.

It runs as a local process on your Mac, binds to a single Telegram chat with a one-time pairing code, forwards messages to codex, and sends the replies back to Telegram.

What It Does

  • Pair one Telegram chat to one local bridge instance with a one-time code
  • Forward Telegram text messages to codex
  • Keep multi-turn context by resuming the same Codex thread between messages
  • Inject a global Memory.md file into every Codex request
  • Support Telegram inline buttons for approval-like and plan-question interactions
  • Accept Telegram image uploads and pass local file paths into Codex
  • Accept Telegram voice messages and transcribe them with faster-whisper
  • Show Telegram typing... while Codex is still working

How It Works

teledex does not drive the interactive Codex TUI anymore.

Instead, it uses:

  • codex exec --json for the first request
  • codex exec resume <thread_id> --json for later requests

This avoids TUI rendering issues and keeps the conversation state inside a Codex thread.

Requirements

  • macOS
  • Python 3.11+
  • A working local codex CLI installation
  • A Telegram bot token
  • Optional: faster-whisper if you want voice transcription

Install

Install from PyPI:

pip install teledex-cli
uv tool install teledex-cli

Install from local source for development:

python3 -m venv .venv
source .venv/bin/activate
pip install -e .[dev]
uv venv
source .venv/bin/activate
uv pip install -e '.[dev]'

Optional voice transcription support:

pip install -e .[faster-whisper]
uv pip install -e '.[faster-whisper]'

First-Time Setup

Run:

teledex init

The setup wizard asks for:

  • Telegram bot token
  • Codex command
  • Workspace root
  • Global memory file
  • State file path
  • Session storage directory
  • Voice transcription backend
  • Whisper model

Configuration is stored in:

~/.teledex/config.json

Global Memory

Every Codex request includes the contents of a global memory file before the user message.

Default path:

~/.teledex/Memory.md

Use it for durable context such as:

  • who the user is
  • preferred response style
  • project conventions
  • persistent reminders for the bridge

Run

Start the bridge:

teledex run

If the bridge is not paired yet, it prints a one-time pairing code locally. Send that code to the Telegram bot from the chat you want to authorize.

Telegram Usage

After pairing, you can:

  • send plain text to talk to Codex
  • upload images
  • upload voice messages
  • tap inline buttons for structured replies

Built-in bot commands:

/help
/status
/start_session
/interrupt
/reset

CLI Commands

teledex init
teledex run
teledex status
teledex unpair

Notes

  • The bridge authorizes exactly one Telegram chat at a time.
  • Memory.md is global, not per-project.
  • The bridge strips proxy and conflicting CODEX_* environment variables before invoking Codex.
  • Voice transcription is optional; if disabled, voice files are still saved locally but not transcribed.

Publishing

PyPI publishing is handled by the GitHub Actions workflow at .github/workflows/publish.yml.

Before the first release, configure PyPI Trusted Publishing so this repository is allowed to publish without a long-lived API token.

Release process:

  1. Update the version in pyproject.toml.
  2. Commit the version change to main.
  3. Create a Git tag that matches the package version exactly, for example 0.1.0.
  4. Push the tag and create a GitHub Release from that tag.
  5. When the GitHub Release is published, the workflow builds the package and uploads it to PyPI.

Versioning convention:

  • pyproject.toml uses the canonical package version, for example 0.1.0.
  • Git tags use the exact same version string, for example 0.1.0.
  • The GitHub Release tag and pyproject.toml version should always match exactly.

Example:

pyproject.toml -> version = "0.1.0"
git tag        -> 0.1.0
GitHub Release -> 0.1.0
PyPI release   -> 0.1.0

Development

Run tests:

.venv/bin/pytest

Current test suite covers config, state, prompt composition, output cleaning, and interaction parsing.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

teledex_cli-0.1.0.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

teledex_cli-0.1.0-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

Details for the file teledex_cli-0.1.0.tar.gz.

File metadata

  • Download URL: teledex_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for teledex_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ef99b09fd30268f98f087d5b5ce9efcc4de97663408391a9194ac1c7c672e500
MD5 417c1dff5c1f37e66ab63ad46da71720
BLAKE2b-256 5a868cf6760d39ad1ed14a6703adf1e20315d8e3cc522c751a69cebbb7510911

See more details on using hashes here.

Provenance

The following attestation bundles were made for teledex_cli-0.1.0.tar.gz:

Publisher: publish.yml on garethng/teledex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file teledex_cli-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: teledex_cli-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for teledex_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dc6348ec17aea71280804d3710a30a8076a4eeaf2eea72ffe161b9540b57799d
MD5 f9d4f8e9da85182de4cf26082e689f2e
BLAKE2b-256 f1f95d47bf6b2b8beb9bd3dda1c72dda05a2e24894251150a9ef77f813dbc5a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for teledex_cli-0.1.0-py3-none-any.whl:

Publisher: publish.yml on garethng/teledex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page