Condukt is a cross-platform agent framework and coding agent.
It ships as three surfaces from one repository:
- An Elixir library for OTP-native agents with sub-agents, MCP, sandboxes, network policy, redaction, compaction, and HTTP routes.
- A terminal CLI that runs the same agent loop in Rust with a ratatui TUI,
slash commands, an ACP backend, and headless
execfor scripts and CI. - A browser package (
@tuist/condukt) that ships the portable session as WebAssembly so any page can host an agent that only inherits the tools it explicitly registers.
A marketing and documentation site lives under web/ and serves both
the install story and the public docs. The same Message history and
ToolDefinition shape crosses every surface, so the same conversation can move
between them when a host chooses to do so.
Use Condukt when agents should live inside your OTP system. Add it to
mix.exs:
def deps do
[
{:condukt, "~> 1.5"}
]
enddefmodule MyApp.ProjectAgent do
use Condukt
@impl true
def model, do: "anthropic:claude-sonnet-4-20250514"
@impl true
def system_prompt do
"You help maintain this repository. Prefer concrete findings and patches."
end
@impl true
def tools, do: Condukt.Tools.coding_tools()
operation :release_notes,
input: %{
type: "object",
properties: %{version: %{type: "string"}},
required: ["version"]
},
output: %{
type: "object",
properties: %{
title: %{type: "string"},
highlights: %{type: "array", items: %{type: "string"}}
},
required: ["title", "highlights"]
},
instructions: "Draft release notes from the git history and project files."
endRead the library documentation on HexDocs.
Install the terminal coding agent globally with mise:
mise use -g github:tuist/conduktRun condukt, then type /connect and follow the sign-in flow. Once
connected, type a request and press Enter. Use / to browse the available
commands. If you already signed in to Pi with OpenRouter, import its access
credential without printing it:
condukt import-pi-credentialsFor scripts and continuous integration, run one task without the terminal interface:
condukt exec "Run the test suite and summarize any failures"condukt -p "..." is a shorthand, and a prompt can also arrive on standard
input. The command uses the saved OpenRouter credential, or
CONDUKT_OPENROUTER_API_KEY when set. Pass --verbose to show tool activity
on standard error and --json for a machine-readable final response.
Add the npm package to a JavaScript or TypeScript application:
npm install @tuist/conduktimport {createAgent, createHttpInference} from "@tuist/condukt"
const agent = await createAgent({
inference: createHttpInference({model: "openrouter/auto"}),
tools: [{
name: "read_page",
description: "Read the public content on this page",
parameters: {type: "object", properties: {}},
execute: () => document.querySelector("main").innerText,
}],
})The page supplies both the inference configuration and the tool allowlist. The public Condukt site demonstrates the same package against a Phoenix endpoint that signs developers in with OpenRouter and proxies the completion request.
condukt/
├── lib/ # Elixir library
├── native/ # Rust NIFs (bashkit, microsandbox, egress)
├── cli/ # Rust workspace for the terminal CLI
│ └── crates/
│ ├── condukt/ # binary
│ ├── condukt-inference/
│ ├── condukt-openrouter/
│ ├── condukt-protocol/
│ ├── condukt-session/
│ ├── condukt-tools/
│ └── condukt-wasm/
├── web/ # Phoenix marketing site, documentation source, browser endpoint
│ └── priv/docs/ # single source for docs and the ExDoc extras
├── packages/condukt/ # @tuist/condukt npm package
├── infra/ # Helm chart and cluster configuration for the site
└── .github/workflows/ # CI for library, CLI, and web
All documentation lives in web/priv/docs. Read it on
the site, which covers the coding agent, the
Elixir library, and the Rust and browser surfaces. The Elixir pages are also
published to HexDocs alongside the
API reference.
MIT License. See LICENSE for details.
