Skip to content

lossyrob/telex

Repository files navigation

Telex

A CLI-first message fabric for AI agent sessions: durable addresses, typed messages with answerback liveness, and an auditable record over SQLite (local, zero-config) or Postgres (networked, with or without Microsoft Entra auth).

One small binary, telex. Carries its own usage instructions for agents: run telex skill.

The repository also ships a Copilot CLI plugin marketplace (.github/plugin/) whose plugin lives under copilot/plugin/ (plugin.json + hooks.json + bootstrap skill). All Copilot-specific content is nested under copilot/ (COPILOT.md, the bridge/ source, and plugin/), so the repository root stays harness-neutral with room for future sibling harness plugins. The plugin maps Copilot session env into generic telex session inputs, handles non-destructive sessionEnd, and guards turn-end re-arming.

Documentation

Full documentation (install, concepts, guides, and the generated CLI reference) is at https://lossyrob.github.io/telex/.

Install

macOS / Linux:

curl -fsSL https://raw.githubusercontent.com/lossyrob/telex/main/install.sh | sh

Windows (PowerShell):

irm https://raw.githubusercontent.com/lossyrob/telex/main/install.ps1 | iex

With Rust (any platform):

cargo install --git https://github.com/lossyrob/telex --features entra

Or grab a prebuilt binary from Releases.

Release installs use a versioned layout with a stable launcher, so upgrades and rollback do not disrupt in-flight processes. See Upgrading the binary in the guide.

Quickstart

telex skill                          # print the usage guide (also embedded for agents)
export TELEX_SESSION_ID=quickstart   # PowerShell: $env:TELEX_SESSION_ID = "quickstart"
telex --address me send --to me --body "hello"   # from resolves to `me`
telex --address me inbox --all                   # read it back

No manual server setup and no config required. The first daemon-backed verb auto-spawns a per-user local exchange for the default local SQLite store at ~/.telex/telex.db. See the Quickstart for a two-session walkthrough.

For agents

Tell your agent: "set up telex: run telex skill." The binary self-describes, so the agent learns to attach to an address, wait for messages, disposition them, and message peers. To hand an agent a specific assignment in one command:

telex skill --address workstream:proj/node:issue-215

In Copilot CLI, install/use the telex plugin and bind with push delivery so messages arrive as turns (no waiter to run or re-arm):

copilot plugin marketplace add lossyrob/telex
copilot plugin install telex@telex
telex --address workstream:proj/node:issue-215 copilot attach --copilot-bridge --description "<work>"
# enable Copilot Extensions under `/experimental` so `extensions_reload` is available,
# then run that tool once; delivered telex messages arrive as turns.
telex --address workstream:proj/node:issue-215 copilot detach   # tear down when done

telex wait remains the generic pull primitive for scripts, CI, and non-extension harnesses. Marketplace install is the supported plugin channel (the plugin lives under copilot/plugin). See the Copilot CLI push delivery guide for CC-observer opt-in (--wake-on-cc), the session-env mapping, teardown, and compatibility notes.

Watch the line (TUI)

telex-console is a separate, read-only terminal UI for watching the fabric live — a feed of every message, an address directory with occupancy, and threaded transcripts with dispositions. It reuses the core library in-process, so the telex binary itself stays dependency-light.

cargo install --git https://github.com/lossyrob/telex telex-console
telex-console                         # the configured default backend
telex-console --backend local         # a configured backend, by name
telex-console --db ~/.telex/telex.db  # or point at a specific SQLite store

For an Entra Postgres backend, build the console with --features entra (like the core binary). Read-only by design — it never holds a lease or changes state. See telex-console/README.md.

Networked backends

Add a Postgres backend once; then select it by name (or make it the default):

# Azure Postgres with Entra (telex fetches the token itself; uses `az login`,
# or `--entra-cred managed` on a devbox/VM with a managed identity):
telex backend add prod \
  --postgres "host=myserver.postgres.database.azure.com port=5432 user=me@example.com dbname=postgres sslmode=require" \
  --entra --schema telex --default

telex backend list
telex --backend prod send --to node:x --body "hi"

Secrets are referenced (--entra, --password-env, --password-command), never stored in the config file. See the networked Postgres guide.

How it works

A durable address is the responsibility being served; a per-user local exchange daemon owns SQLite presence, lease heartbeats, delivery buffering, and local IPC; a session attaches once to register an in-memory station for its stable TELEX_SESSION_ID; wait is a one-shot daemon client that receives one message and exits; ack is the explicit durable consumed mark. If the daemon restarts, the next verb reconnects, re-registers on NeedsAttach, and continues against the retained delivery buffer.

Learn more

About

A simple message fabric for AI agent sessions

Resources

License

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors