Packages
condukt
1.9.0
1.10.0
1.9.1
1.9.0
1.8.0
1.7.0
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.1
1.4.0
1.3.0
1.2.1
1.2.0
1.1.0
1.0.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.0
A framework for building AI agents in Elixir
Current section
Files
Jump to
Current section
Files
README.md
<p align="center">
<img src="docs/assets/readme-header.png" alt="Condukt header" width="300" />
</p>
<p align="center">
<a href="https://hex.pm/packages/condukt"><img src="https://img.shields.io/hexpm/v/condukt.svg" alt="Hex.pm" /></a>
<a href="https://hexdocs.pm/condukt/"><img src="https://img.shields.io/badge/docs-hexdocs-blue.svg" alt="HexDocs" /></a>
<a href="https://github.com/tuist/condukt/actions/workflows/condukt.yml"><img src="https://github.com/tuist/condukt/actions/workflows/condukt.yml/badge.svg" alt="CI" /></a>
<a href="https://hex.pm/packages/condukt"><img src="https://img.shields.io/hexpm/dt/condukt.svg" alt="Hex.pm downloads" /></a>
<a href="LICENSE"><img src="https://img.shields.io/hexpm/l/condukt.svg" alt="License" /></a>
<a href="https://github.com/tuist/condukt/stargazers"><img src="https://img.shields.io/github/stars/tuist/condukt?style=flat" alt="GitHub stars" /></a>
<a href="https://github.com/tuist/condukt/commits/main"><img src="https://img.shields.io/github/last-commit/tuist/condukt.svg" alt="Last commit" /></a>
</p>
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 `exec` for 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/`](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.
## Library
Use Condukt when agents should live inside your OTP system. Add it to
`mix.exs`:
```elixir
def deps do
[
{:condukt, "~> 1.5"}
]
end
```
```elixir
defmodule 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."
end
```
Read the [library documentation on HexDocs](https://hexdocs.pm/condukt/overview.html).
## CLI
Install the terminal coding agent globally with [mise](https://mise.jdx.dev/):
```sh
mise use -g github:tuist/condukt
```
Run `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:
```sh
condukt import-pi-credentials
```
For scripts and continuous integration, run one task without the terminal
interface:
```sh
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.
## Browser
Add the npm package to a JavaScript or TypeScript application:
```sh
npm install @tuist/condukt
```
```js
import {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.
## Repository layout
```
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
```
## Documentation
All documentation lives in `web/priv/docs`. Read it on
[the site](https://condukt.tuist.dev/docs), which covers the coding agent, the
Elixir library, and the Rust and browser surfaces. The Elixir pages are also
published to [HexDocs](https://hexdocs.pm/condukt/overview.html) alongside the
API reference.
## License
MIT License. See [LICENSE](LICENSE) for details.