Let agents delegate to the competition.
Codex wasn't built to delegate to Claude. Claude wasn't built to delegate to
Codex. dlgt was.
Once, everyone wanted an AI CEO, AI engineers, and an entire agent fleet. Most of those products made a splash and disappeared. The useful part was simpler: pick the frontier model you like, use the subagents already built into its harness, and call the other side when it has something useful to add.
dlgt fills that one gap. It lets Codex use Claude and Claude use Codex.
From Codex:
codex "Install and verify dlgt. Fetch https://combinatrix.ai/dlgt/installation.md with curl and follow its instructions."From Claude:
claude "Install and verify dlgt. Fetch https://combinatrix.ai/dlgt/installation.md with curl and follow its instructions."These are agent-executable installation instructions. The same source powers the human-readable installation page and the raw Markdown guide fetched by the agent. The agent should not report completion after installing only the binary: the embedded skill must match the copies installed for Codex and Claude, and a counterpart Session must complete a simple delegated task through dlgt.
Then ask either agent normally — neither prompt mentions dlgt. The installed skill invokes it automatically, picks the counterpart model, and leaves effort to the harness default unless you request one:
codex -m gpt-5.6-sol "Create a great game. Ask Fable to review it."
claude --model claude-fable-5 "Think of 10 funny jokes. Ask Sol at xhigh effort to review them."No fleet to configure. No invented org chart. The harness you chose stays in
charge and uses dlgt when it needs a counterpart.
Install the latest published dlgt release on macOS or Linux. The installer
detects the platform, verifies the GitHub Release checksum, installs the
user-writable binary, and registers the embedded skill for every installed
Codex or Claude harness:
curl -fsSL https://raw.githubusercontent.com/combinatrix-ai/dlgt/main/install.sh \
| sh -s -- --skill both
export PATH="$HOME/.local/bin:$PATH"The README uses --skill both deliberately so following it always installs the
embedded skill at both ${CODEX_HOME:-$HOME/.codex}/skills/dlgt/SKILL.md and
$HOME/.claude/skills/dlgt/SKILL.md; it does not depend on automatic harness
detection. Install a specific release with --version v<version>, or narrow
registration explicitly with --skill codex or --skill claude. The normal
installation path does not require Rust, Cargo, or a source checkout. See the
full installation instructions
for supported targets and verification steps.
dlgt runs Codex and Claude as live, addressable local Sessions. Each
Session owns one harness process, one PTY, one terminal screen, and at most one
active execution.
- Provider lifecycle hooks report readiness and completion.
- Sessions survive across commands and follow-up prompts.
- JSON output and JSONL RPC make delegation automatable.
- State, events, results, and bounded terminal history stay local.
- The leader sees the counterpart's result and decides what to use.
dlgt is not a planner, company simulator, workflow language, or multi-agent
framework. It is the bridge between two competing harnesses.
tmux send-keys— the leader pollscapture-paneand burns tokens on screen dumps, or you script UI heuristics that break on a spinner.claude -p/codex exec— every call is a cold start that throws away context, and headless runs sometimes aren't covered by your subscription.dlgt— completion is a lifecycle event, follow-ups keep their Session context, the managed PTY returns JSON instead of screen scrapes, and it runs on the plan you already pay for.
After installing dlgt, create a Claude Session and wait for its review:
dlgt new \
--title "Claude review" \
--harness claude \
--model claude-fable-5 \
--effort high \
--cwd . \
--wait \
--timeout 15m \
-- "Review this repository. Return findings and trade-offs only."Create a Codex Session:
dlgt new \
--title "Codex review" \
--harness codex \
--model gpt-5.6-luna \
--effort xhigh \
--cwd . \
-- "Review the implementation and report correctness risks."The command returns a Session ID such as ses_7K3M9Q2X:
dlgt wait ses_7K3M9Q2X --timeout 15m
dlgt send ses_7K3M9Q2X --wait --timeout 15m -- "Review the revision"
dlgt restart ses_7K3M9Q2X
dlgt show ses_7K3M9Q2X
dlgt scrollback ses_7K3M9Q2X --lines 100
dlgt attach ses_7K3M9Q2X
dlgt stop ses_7K3M9Q2XThe first client command starts the local daemon automatically.
Store reusable launch profiles in ~/.config/dlgt/config.toml, or point
DLGT_CONFIG at another file:
[profiles.fable-review]
harness = "claude"
model = "claude-fable-5"
effort = "high"
harness_options = ["permission-mode=auto"]
clean_env = truedlgt launches both Harnesses auto-approved by default so delegation never
blocks on permission prompts. Opt out per Session with --no-auto-approve or
per Profile with auto_approve = false.
Set DLGT_HOME to relocate the versioned runtime sockets. Set DLGT_SOCKET to
override only the current version's socket. Session state is held in memory by
the daemon that owns the Harness processes; after that daemon exits, use the
returned provider_session_id for provider-native lookup or resume.
Contributor builds must name the dlgt binary explicitly:
cargo build --bin dlgt
cargo build --release --bin dlgt
cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo test
cargo build --bin dlgt && tests/smoke.sh
npm ci
npm run docs:buildRun dlgt skill to print the agent-facing contract embedded from
assets/dlgt-skill.md. The binary has no runtime
dependency on an installed skill directory.
For a source-built or otherwise preinstalled binary, register that exact embedded skill without downloading another release:
sh install.sh --register-skills-from target/release/dlgt --skill bothThe PTY and attach architecture is derived from the private umux project.
