Skip to main content

TeLLMphone ☎️

Let your LLMs call each other.

Claude Code, asked for a second opinion, places a TeLLMphone call to codex on its own: codex (as grumpy-reviewer) delivers a verdict, and Claude relays it with its own take

TeLLMphone is a local MCP server that lets coding agents place calls to each other, or to another headless session of the same agent with a different personality or model. Claude Code can ring Codex, Gemini, or Grok with a question about the current project and get an answer back, keep that conversation going across multiple turns, or leave a voicemail for the next agent session to pick up. Conversations survive interruptions on both sides, and the callee can be given a saved personality and a specific model.

The second opinion you want is usually installed on the same machine, one terminal over — and you're tired of being the copy-paste layer between two AIs. Now they can just call each other.

Currently supports Claude Code, Codex, Gemini, and Grok; other agents can be added as plugins.

Requirements

  • macOS or Linux
  • Python 3.11+ and uv
  • The agent CLIs you want to connect (claude, codex, agy, grok), installed and logged in

Install

uv tool install tellmphone   # or: pipx install tellmphone
tellmphone install

install registers the MCP server with every agent CLI it finds — via claude mcp add, codex mcp add, grok mcp add, or Gemini's shared MCP config — and sets the config needed for non-interactive tool approval where the CLI requires it. It is idempotent; rerun it if you move the checkout. tellmphone uninstall removes the registrations (it does not delete ~/.tellmphone/).

Usage

You talk to your agent; your agent works the phone. In a Claude Code session:

Call codex and get a second opinion on this migration. Use the grumpy-reviewer personality.

Claude will place the call, relay the answer, and can keep the thread going with follow-ups. In the other direction, start a Codex session in the same project and ask it to check its messages.

That's what the demo above shows: Claude, asked for a second opinion, places the call itself and then argues with the answer. You can also work the phone yourself:

tellmphone call codex "Sanity-check the file locking in src/store.py." --personality grumpy-reviewer
tellmphone reply "Fair. Would any of it break on Windows?"
tellmphone messages
tellmphone show call-7f3k9q2m
tellmphone gc --days 30

The tools the agents get:

Tool What it does
call Send a message to an agent about a project. Optional personality and model. Starts a live turn, or leaves it as voicemail.
reply Follow up on an existing call. The callee resumes with full context.
check_messages List unread messages and open calls for a project.
hang_up Close a call. The transcript is kept.
phonebook List available agents and personalities.

How it works

┌─────────────┐   MCP (stdio)   ┌──────────────────┐   headless CLI   ┌─────────────┐
│ Claude Code │ ──────────────► │   TeLLMphone     │ ───────────────► │ codex exec  │
│  (caller)   │  call/reply/…   │   switchboard    │  spawn / resume  │  (callee)   │
└─────────────┘                 └──────────────────┘                  └─────────────┘

There is no daemon. Each agent runs its own TeLLMphone instance over stdio; shared state lives under ~/.tellmphone/. A live call records the message, spawns one detached callee turn (codex exec, claude -p, agy --print, grok -p) in the project directory, and returns the stable call id. When the turn finishes, its answer lands in the caller's mailbox. Replies start another one-shot turn and resume the callee's native session where the CLI exposes one. If a native session is lost or not available, the stored transcript is replayed into a fresh one. Callees run in their CLI's read-only/sandboxed mode unless you allowlist a project for writes, and a hop limit keeps agents from chaining calls indefinitely.

The internals lean into the name: the switchboard routes calls, the phonebook lists who you can dial, a busy line means the callee is still thinking, voicemail holds messages for agents that aren't running, and the hop limit stops two agents from playing telephone forever.

Details, including the security model, are in docs/DESIGN.md.

Configuration

~/.tellmphone/config.toml:

[defaults]
timeout_s = 300   # how long the CLI waits for a live turn before returning ringing
max_hops = 2      # agent-to-agent chain depth limit

# default model per callee; a call's explicit model argument wins.
# Use whatever model ids your CLI accepts.
[agents.codex]
model = "gpt-5.5"

# standing write grant; callees run read-only unless a project is
# allowlisted here or the caller passes write=true for a specific call
[permissions."/path/to/project"]
write = true

The file is optional — everything has a sensible default. For one-off delegation you don't need it at all: a top-level caller can pass write=true on a single call (--write on the CLI). Agents that are themselves callees can't grant write, so access never spreads down an agent-to-agent chain.

Personalities are Markdown files with a small frontmatter block (name, description) followed by the system prompt. Twelve builtins ship with the package and update with it — critics (grumpy-reviewer, security-auditor, sycophancy-cop), thinking partners (rubber-duck, devils-advocate, architect, the-algorithm, transaction-cost-accountant), and builders (debugger, test-engineer, evidence-engineer, tiny-hacker); your own live in ~/.tellmphone/personalities/. A user file with the same name as a builtin replaces it, and one with disabled: true hides it. Callers select personalities by name and never send system prompts inline.

Data

Call records and transcripts live under ~/.tellmphone/projects/. Transcripts contain whatever flowed through the conversation, which for a coding agent usually includes your code. Everything is plain JSON owned by your user; delete a call directory (or all of ~/.tellmphone/) to purge.

Development

uv sync
uv run pytest

The test suite runs against fake claude/codex/agy/grok executables, so it needs neither CLI installed nor network. From a checkout, uv run tellmphone install registers your development version with your agents.


TeLLMphone is a project powered by The California Open Source Company. Licensed under Apache 2.0.

Download files

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

Source Distribution

tellmphone-0.2.0.tar.gz (695.0 kB view details)

Uploaded Source

Built Distribution

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

tellmphone-0.2.0-py3-none-any.whl (46.0 kB view details)

Uploaded Python 3

File details

Details for the file tellmphone-0.2.0.tar.gz.

File metadata

  • Download URL: tellmphone-0.2.0.tar.gz
  • Upload date:
  • Size: 695.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tellmphone-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3b06f1514d0a82b072f8ab577c82594b6bca5934f07e13ec91c7787c6a84ecbd
MD5 4dee195f7171928c66049a1351a948b3
BLAKE2b-256 8928344dab2ae0914b89697e39b534f5c50b7cdf9b10bdb9f91b6577ad97f438

See more details on using hashes here.

Provenance

The following attestation bundles were made for tellmphone-0.2.0.tar.gz:

Publisher: publish.yml on CaliforniaOpenSource/tellmphone

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

File details

Details for the file tellmphone-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: tellmphone-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 46.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tellmphone-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7d6e1ad453ec9647cf85f24e5928382c83cd58d1dc301f9d4f4c9eaa87912872
MD5 d8ad95ef1555db8bbabee99bfd1257cb
BLAKE2b-256 79db4d24a8d5f6ce3a06004ea95ac182611d7449d3835f429b18c859efeadc47

See more details on using hashes here.

Provenance

The following attestation bundles were made for tellmphone-0.2.0-py3-none-any.whl:

Publisher: publish.yml on CaliforniaOpenSource/tellmphone

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

Release history Release notifications | RSS feed

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

This release

0.2.0 This release

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page