Condukt header

Hex.pmHexDocsCIHex.pm downloadsLicenseGitHub starsLast commit

Condukt is a cross-platform agent framework and coding agent.

It ships as three surfaces from one repository:

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.

Library

Use Condukt when agents should live inside your OTP system. Add it to mix.exs:

def deps do
[
{:condukt, "~> 1.5"}
]
end
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.

CLI

Install the terminal coding agent globally with mise:

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:

condukt import-pi-credentials

For 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.

Browser

Add the npm package to a JavaScript or TypeScript application:

npm install @tuist/condukt
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, 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.

License

MIT License. See LICENSE for details.