v0.9 · Open Source · Apache 2.0 Licensed
Agentic Orchestration Framework

Automate Everything

Conductor unifies AI providers, local tools, and external APIs into a single intelligent agent you control. Natural language. Zero cloud lock-in. Runs on your machine.

GitHub ↗
25+
Plugins
150+
Tools
5
AI Backends
0
Telemetry

// What Conductor Is

Agentic Loop

Multi-step reasoning with iterative tool invocation. Conductor thinks, calls tools, processes results, and loops — automatically — until the task is done.

🔌

Plugin-Driven

Each capability is a self-contained plugin exposing typed JSON Schema tool definitions. No glue code — the AI layer discovers and uses tools natively.

🔒

Local-First Security

AES-256-GCM encrypted credential vault. Zero cloud telemetry. No AlxLabs servers in the request chain. Your data, your machine, your rules.

🔀

Provider Agnostic

Claude, GPT-4o, Gemini 1.5, and Ollama — all behind a unified ProviderAdapter. Switch AI backends in one command without touching your plugins.

📡

Multi-Transport

Same agent, multiple interfaces: interactive CLI, REST API, Telegram bot remote, and MCP server for IDE integration. All run simultaneously.

🖥️

Web Dashboard

Full-featured browser dashboard — files, processes, notes, terminal, logs, credentials, plugins, and Docker. Command palette, keyboard shortcuts, live metrics.

// Get Running in 2 Minutes

⚡ Quick Install

macOS / Linux

bash
$ curl -fsSL https://conductor.thealxlabs.ca/install.sh | bash

Windows (PowerShell, run as Admin)

powershell
> irm https://conductor.thealxlabs.ca/install.ps1 | iex

// Plugin Ecosystem

spotify18 tools · stable

Full playback control, queue management, search, playlist editing, and device switching via the Spotify Web API.

play/pausequeuesearchplaylists
notes12 tools · stable

Encrypted local markdown vault with full-text indexing, tag support, and fast fuzzy search across all your notes.

createsearchencryptindex
gmail9 tools · beta

Read, compose, send, and label Gmail via OAuth 2.0 minimal scopes. Tokens stored in your local encrypted vault. Request access →

readcomposelabels
system4 tools · stable

CPU, RAM, disk, and running processes via systeminformation. Powers the dashboard's live metrics and process manager.

cpumemoryprocesses
github-actions26 tools · stable

PRs, issues, workflow runs, releases, notifications — full GitHub coverage from a single PAT.

ciprsissues
browser7 tools · beta

Headless Chromium for web browsing, content extraction, form filling, and screenshot capture — fully automated.

scrapenavigatescreenshot
Legal Terms of Service Privacy Policy Apache 2.0 License

🖥️ Overview

Launch with conductor dashboard. The dashboard is a single-page app served locally — no cloud, no external dependencies. Everything talks to your local Conductor API.

bash
$ conductor dashboard # opens at http://localhost:4242 $ conductor dashboard --port 8080 # custom port

The dashboard auto-generates a one-time auth token stored in ~/.conductor/config.json. The token is required for all API calls — the dashboard is not publicly accessible.

⌨️ Keyboard Shortcuts

Navigate the dashboard entirely from the keyboard. No mouse required for any common action.

⌘K / Ctrl+K Command Palette

Jump to any page, run a shell command (prefix >), or search notes (prefix @). Filters in real-time.

g o/t/f/p/n/s/l/c Navigation

Vim-style two-key navigation. g o = Overview, g t = Tasks, g l = Logs, g c = Credentials, etc.

[ Collapse Sidebar

Toggle sidebar between full (220px) and icon-only (40px) mode with a smooth CSS transition.

? Shortcuts Help

Show the full keyboard shortcuts reference overlay from anywhere in the dashboard.

n New Task

When on the Tasks page, instantly focus the new task input field.

Ctrl+L Clear Terminal

Clear the terminal output from anywhere on the System page. Works like a real shell.

📄 Pages

PageWhat it doesKey features
OverviewLive metrics dashboardCPU/memory sparklines, uptime, AI provider badge, live log tail, quick actions
TasksTodoist integrationAdd/complete/delete tasks, priority filter, project filter, relative due dates, bulk actions
FilesLocal filesystem browserBrowse, read, edit, create, delete files. Clickable breadcrumb path segments. Hidden file toggle.
ProcessesSystem process managerSortable columns, search/filter, kill with confirm, CPU highlight for high-usage processes, auto-refresh
NetworkNetwork overviewLoad average sparkline (1m/5m/15m), established connections, interface info
SystemSystem toolsTerminal with history persistence, screenshot, clipboard read/write, apps list, env vars, Git status, Docker, Cron
NotesLocal markdown notesCreate/edit/delete notes, search by title and content, word count, markdown preview, auto-save with debounce
PluginsPlugin managerEnable/disable plugins, credential status per plugin, config schema display
CredentialsCredential vaultSet/delete API keys, Google OAuth connect/disconnect, status badges
LogsLive SSE log streamLevel filter with counts, text search with highlight, pause/resume, export as .txt, auto-scroll toggle
SettingsConfigurationAI provider selection, model config, security toggles, version info, dashboard token reveal

🐛 Bug Fixes (v0.9.1)

These issues were identified in the initial dashboard release and are fixed in v0.9.1:

FIXED
Note editor double-encoding — HTML entities like < were appearing in notes. Fixed by using textContent instead of innerHTML for note body content.
FIXED
Note auto-save on blur — Every time you clicked away from the note editor it fired a PUT request, even if nothing changed. Now uses 500ms debounce with a dirty-tracking flag.
FIXED
File editor unsaved changes lost silently — Navigating away while editing a file discarded all changes without warning. Now shows a confirmation dialog before leaving.
FIXED
Sparkline renders at 0px width on first drawsvg.clientWidth returned 0 before paint. Fixed by wrapping first draw in requestAnimationFrame.
FIXED
Log buffer O(n) shift_logLines.shift() was called on every SSE message on a 2000-item array. Replaced with bulk splice to amortize the cost.
FIXED
Security checkboxes reflect stale state — Checkboxes read from a cached config object that could diverge from the server. Now re-fetches /api/config after every save.
FIXED
Process search filter lost after auto-refresh — The search filter was correctly applied on input but cleared on every 5-second auto-refresh. Now re-applied after every loadProcesses() call.

✨ QoL Features (v0.9.1)

Quality-of-life improvements shipped alongside the bug fixes:

Command Palette

⌘K/Ctrl+K from anywhere. Navigate pages, run shell commands (> prefix), search notes (@ prefix). Real-time filtering.

Shell History Persistence

Shell history saved to localStorage (max 100 entries) and restored on next session. Arrow-key navigation still works.

Log Text Search

Filter log lines by text with real-time highlight. Amber-colored match highlighting. Works alongside the level filter.

Log Level Counts

Filter buttons now show live counts: ERROR (3) WARN (12) — updated as new SSE events arrive.

Log Export

Download currently filtered log lines as conductor-logs.txt with a single click.

Note Search

Search input above the note list filters by title and content in real-time.

Note Word Count

Live word count shown in the note editor toolbar. Updates as you type.

Note Markdown Preview

Toggle between edit and preview mode. Renders bold, italic, headings, lists, and inline code without any external library.

Relative Due Dates

Task due dates shown as "Today", "Tomorrow", "3 days", "2 weeks" instead of raw ISO strings. Color coding preserved.

Bulk Task Actions

Checkbox column on Tasks page. Select multiple tasks, then complete or delete all selected in one click.

Sortable Process Table

Click any column header (PID, CPU%, MEM%, COMMAND) to sort. Sort direction indicator arrow. Default: CPU% descending.

Collapsible Sidebar

Press [ or click the toggle button to collapse sidebar to 40px icon-only mode. Smooth 200ms CSS transition.

AI Provider Badge

Overview page System card now shows the active AI provider (e.g. claude · claude-sonnet-4-6).

Dynamic Page Title

document.title updates on every navigation: Conductor — Logs, Conductor — Files, etc.

Clickable Breadcrumb

Each path segment in the file browser is clickable — jump to any ancestor directory without using the back button.

Favicon

Inline SVG favicon — orange "C" on a rounded rect. No external request, renders in all modern browsers.

✅ Shipped — v0.9.0

DONE

MCP Server

Full Model Context Protocol implementation. Claude Desktop, Cursor, and any MCP client can connect and use all enabled plugins as native tools.

DONE

Web Dashboard

Single-page control plane at localhost:4242. Files, processes, notes, terminal, logs, credentials, plugins, Docker, Git, and network tools.

DONE

AES-256-GCM Keychain

Machine-keyed encrypted credential storage. All API keys and tokens hardware-bound to the installing machine.

DONE

25+ Builtin Plugins

Spotify, GitHub, Notion, Vercel, n8n, Gmail, Calendar, Drive, Telegram, Slack, X, HomeKit, and 15+ utility plugins.

DONE

Multi-Provider AI

Claude, OpenAI, Gemini, OpenRouter, and Ollama behind a unified interface. Hot-swap with one command.

DONE

One-liner Installer

15-step interactive installer for macOS, Linux, and Windows. Idempotent — safe to re-run.

🔧 In Progress — v0.9.1

IN PROGRESS

Dashboard QoL + Bug Fixes

Command palette, keyboard shortcuts, note markdown preview, log text search, sortable process table, relative due dates, collapsible sidebar, and 7 bug fixes. Full list →

IN PROGRESS

Google OAuth Verification

Submitting Gmail and Drive scopes for Google verification. Once approved, Google features become available to all users without an invite. Current estimated timeline: 2–4 weeks.

IN PROGRESS

Plugin Marketplace

Community plugin registry at conductor.thealxlabs.ca/registry.json. conductor install <plugin> to pull and install external plugins.

📋 Planned — v1.0

PLANNED

Plugin Sandboxing

Isolate plugin execution so a broken plugin can't crash the main Conductor process. V8 isolates or worker threads.

PLANNED

Conversation History Summarization

Auto-summarize old messages when conversation history exceeds 30 messages, instead of silently dropping context.

PLANNED

Database Migrations

Schema versioning for the SQLite database so updates don't break existing installations.

PLANNED

Dashboard Light Mode

CSS variable-based theme toggle. Dark by default, light available for bright environments.

PLANNED

AI Ask on Overview

Quick single-shot AI input directly on the dashboard overview page for fast queries without opening a full chat.

PLANNED

Pinned Notes

Star/pin notes to keep them at the top of the note list regardless of recency.

PLANNED

Conductor Pro

Optional paid tier for GitHub Sponsors — priority support, early access to new plugins, and a "Conductor Pro" badge in the dashboard. Core product stays free and open-source forever.

☁ Installation

Conductor requires Node.js 18+, npm, and Python 3.6+. The interactive installer handles everything else — cloning, building, linking the conductor CLI globally, and walking you through 15 setup steps.

macOS / Linux

bash
$ curl -fsSL https://conductor.thealxlabs.ca/install.sh | bash

Windows — PowerShell (run as Admin)

powershell
> irm https://conductor.thealxlabs.ca/install.ps1 | iex

From source

bash
$ git clone https://github.com/thealxlabs/conductor.git $ cd conductor $ bash local-install.sh

System Requirements

RequirementMinimumRecommended
Node.js18.x20.x LTS or 22.x
Python3.63.11+ (installer only)
RAM256 MB1 GB+
OSmacOS 12+, Ubuntu 20.04+, Windows 11
The installer is idempotent — re-run it anytime to update or fix a broken install.

⚡ How It Works

When you run conductor start or send a message via Telegram/Slack, it spins up an AI conversation loop with access to every tool exposed by your enabled plugins. You talk to it in plain English — it decides which tools to call, calls them, processes the results, and responds.

The Agent Loop

request flow
── Input ────────────────────────────────────────────── CLI / Telegram / Slack / MCP / Dashboard ↓ ── AIManager.handleConversation() ──────────────────── History (30 msgs) + all enabled plugin tool schemas → current AI provider (Claude / GPT / Gemini / Ollama) ↓ ── Model responds ──────────────────────────────────── tool_use → PluginManager.execute(tool, args) → loop end_turn → return text to user

Three Ways to Use It

  • MCP Server: conductor mcp start — Claude Desktop, Cursor, or any MCP client connects and sees all enabled plugins as native tools.
  • Telegram Bot: conductor telegram start — Chat from your phone. Long-poll, no inbound ports needed.
  • Web Dashboard: conductor dashboard — Full control plane at localhost:4242. See Dashboard docs →

⬡ AI Providers

Five AI backends, all behind the same interface. Switch at any time — plugins don't change.

ProviderModelsNeedsNotes
claudeclaude-sonnet-4-6, opus-4-6, haikuANTHROPIC_API_KEYBest tool-calling reliability
openaigpt-4o, gpt-4-turbo, gpt-4o-miniOPENAI_API_KEYAlso used for Memory embeddings
geminigemini-1.5-pro, gemini-1.5-flashGOOGLE_API_KEYShares OAuth with Gmail/Calendar/Drive
openrouterany model on openrouter.aiOPENROUTER_API_KEY100+ models via one key
ollamallama3.2, mistral, qwen2.5, etc.Ollama running locallyFully offline
bash
$ conductor ai setup # interactive setup wizard $ conductor ai switch claude # hot-swap provider $ conductor ai test # verify connection

⬣ Plugins

25+ builtin plugins in src/plugins/builtin/. Each exposes typed tool definitions — the AI discovers and uses them automatically.

PluginToolsRequiresDescription
spotify21Spotify app credentialsPlayback, search, playlists, recommendations, devices
gdrive15Google OAuthList, read, upload, share, manage Google Drive files
github-actions26GitHub PATPRs, issues, workflow runs, releases, notifications
cron14Natural language scheduling
n8n16n8n API key + URLTrigger workflows, inspect executions
vercel20Vercel tokenDeployments, projects, domains, env vars, logs
gmail8Google OAuthRead, search, send, label Gmail messages
gcal7Google OAuthRead/write Google Calendar events
notes8Local markdown notes
memory5OpenAI key (optional)Persistent cross-session context
system4CPU, RAM, disk, processes
weather4Current + forecast via wttr.in (no key)
x11X Bearer TokenSearch, timelines, post, like, delete
homekit6Homebridge URLSmart home control via Homebridge

🔒 Security

Every credential is encrypted before being written to disk. The raw value never touches config.json.

  • Algorithm: AES-256-GCM with a random 12-byte IV per write. Auth tag stored alongside ciphertext.
  • Key derivation: scrypt(machineId, sha256('conductor:keychain:v1'), 32, {N:16384, r:8, p:1})
  • Machine ID: /etc/machine-id (Linux), IOPlatformUUID (macOS), registry MachineGuid (Windows).
  • Storage: v2:<iv_hex>:<auth_tag_hex>:<ciphertext_hex> — one file per credential.
  • Consequence: Credentials are hardware-bound. Copying keychain to another machine produces unreadable files.
Never share your ~/.conductor/keychain/ directory. Report security issues via GitHub Security Advisories.

⌨ CLI Reference

all commands
$ conductor status # full health check $ conductor dashboard # open web dashboard at :4242 $ conductor ai setup # configure AI provider $ conductor ai switch <name> # switch provider $ conductor ai test # test connection $ conductor plugins list # list all plugins $ conductor plugins enable <p> # enable plugin $ conductor plugins disable <p> # disable plugin $ conductor mcp start # start MCP server $ conductor mcp setup # auto-write Claude Desktop config $ conductor telegram start # start Telegram bot $ conductor slack start # start Slack bot $ conductor auth google # browser OAuth for Google $ conductor update # git pull + rebuild

⬡ MCP Server

Conductor implements the Model Context Protocol. When you run conductor mcp start, every enabled plugin's tools are registered as MCP tools.

Important: MCP mode uses stdout as the protocol stream. Internal logs redirect to stderr.

Auto-configure Claude Desktop

bash
$ conductor mcp setup # detects OS, writes config, backs up existing
OSConfig path
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json

✈ Telegram Bot

Uses long polling — no inbound port or webhook needed. The bot runs on your machine and polls Telegram's servers.

  1. Message @BotFather/newbot → copy the token.
  2. Run conductor telegram setup and paste the token.
  3. Run conductor telegram start
  4. Open your bot in Telegram and send any message.
No user ID whitelist by default — anyone who finds your bot can chat with it. Keep the bot username private.

💬 Slack Bot

Uses Socket Mode — no public URL required. Everything runs over a persistent WebSocket from your machine.

Run the guided setup: conductor slack setup

Requires: Bot Token (xoxb-) with scopes app_mentions:read, chat:write, im:history, im:read, im:write and App-Level Token (xapp-) with connections:write.

🔑 Google OAuth

Gmail, Google Calendar, Google Drive, and Gemini all share the same Google OAuth session.

bash
$ conductor auth google # opens browser → log in → token saved to keychain

Google features require beta access while verification is ongoing. Request access →

The google-creds.json file contains the OAuth client ID and secret. It is in .gitignore — do not commit it.

🛠 Development

bash
$ npm run dev # tsx watch — restarts on changes $ npm run build # tsc — compile to dist/ $ npm test # node test-all.mjs --skip-auth

Adding a Plugin

Create a file in src/plugins/builtin/ implementing the Plugin interface, then register it in src/plugins/builtin/index.ts. It appears in all interfaces automatically.

🔧 Troubleshooting

conductor: command not found

~/.zshrc or ~/.bashrc
export PATH="$HOME/.local/bin:$PATH"

MCP not appearing in Claude Desktop

Run conductor mcp setup then fully quit and relaunch Claude Desktop. If conductor isn't in Claude Desktop's PATH, use the full path in the config file:

bash
$ which conductor # note the full path, use it in claude_desktop_config.json

Reset everything

bash
$ rm -rf ~/.conductor # wipe everything including keychain $ curl -fsSL https://conductor.thealxlabs.ca/install.sh | bash

? FAQ

Is anything sent to AlxLabs servers?

No. Zero telemetry. API calls go directly from your machine to the service (Anthropic, Spotify, Google, etc). AlxLabs is not in the request chain.

Can I run it completely offline?

Yes — set conductor ai switch ollama, run ollama serve, and use local plugins only (notes, calculator, hash, text-tools, etc).

How do I update?

bash
$ conductor update # git pull in ~/.conductor-src + npm run build
v0.9.1 latest
2026
  • Command palette (⌘K/Ctrl+K) — navigate, run shell, search notes
  • Keyboard navigation — g+key shortcuts, [ sidebar toggle, ? help overlay
  • Log text search with amber highlight, level counts, and .txt export
  • Note markdown preview, search, word count, and debounced auto-save
  • Sortable process table columns, bulk task actions, relative due dates
  • Collapsible sidebar with smooth transition, AI provider badge on overview
  • Dynamic document.title, favicon, clickable file breadcrumb
  • Note editor double-encoding bug (innerHTML → textContent)
  • Note save fired on every blur even with no changes
  • File editor discarded unsaved changes without warning
  • Sparkline first draw at 0px width
  • Log ring buffer O(n) shift on every SSE message
  • Security checkboxes reflected stale cached config
  • Process search filter lost after auto-refresh
v0.9.0
2026
  • MCP server with full plugin tool exposure
  • Web dashboard — files, processes, notes, terminal, logs, credentials, plugins, Docker
  • Gmail & Calendar beta plugins via OAuth 2.0
  • Hot-swap AI providers with conductor ai switch
  • Fixed Spotify token refresh race condition
  • Fixed shell plugin path traversal edge cases
  • Added --json flag to all CLI commands
v0.8.0
2026
  • Telegram bot with user ID whitelisting
  • AES-256-GCM keychain
  • Google Gemini 1.5 provider
  • Fixed notes full-text index rebuild on large vaults

Install

Credentials needed

Tools ()

↗ View source on GitHub
Loading registry…

🔑 What's in Beta

STABLE All 20+ non-Google plugins — available now, no waitlist
BETA Gmail · Google Calendar · Google Drive — invite required

⚡ How the Auto-Allow Works

When you request access, we don't manually add you — it happens automatically. Here's the exact flow:

01 You submit the form with your Gmail address
02 Our server receives the request and calls the Google API Console API using a service account with Editor access on our GCP project
03 Your email is added to the OAuth app's test users list — this takes about 30 seconds
04 Run conductor auth google or click Connect Google in the dashboard — it works immediately
Temporary limit: Google caps test user lists at 100 accounts. Once we complete OAuth verification (in progress), this limit goes away and everyone gets access automatically — no invite needed.

📋 What Beta Gets You

  • Gmail — Read, compose, send, and label emails through natural language
  • Google Calendar — Create, update, and query events across all your calendars
  • Google Drive — Create, read, and manage files through conversation
  • One-click connect — OAuth flow in the dashboard, no extra setup required
Privacy: Tokens stay in ~/.conductor/keychain/ — AES-256-GCM encrypted on your machine. We never see them.

📬 Request Access

Processed automatically — usually within 60 seconds.

FAQ

Why is there a 100 user limit?
Google caps unverified OAuth apps at 100 test users. We're going through verification now — once approved, this limit disappears and Google features open to everyone.
How long does it take?
The auto-allow usually completes within 60 seconds. You can try connecting Google immediately after submitting.
Can I use Conductor without joining?
Yes — all non-Google plugins (Claude, GitHub, Spotify, Notion, Telegram, etc.) work immediately with no restrictions.
Is my data stored anywhere?
No. Tokens are AES-256-GCM encrypted in ~/.conductor/keychain/. We only store your email to add it to the test users list.

Apache License 2.0

Copyright © 2026 Alexander Wondwossen / TheAlxLabs

Plain English: Use it, modify it, ship it, sell it — just keep the copyright notice and license file. No warranty provided.

Licensed under the Apache License, Version 2.0. Full text at apache.org/licenses/LICENSE-2.0

  • Commercial use — use in commercial products and services
  • Modification — fork it, build on top of it
  • Distribution — distribute original or modified copies
  • No source disclosure required — unlike GPL, you don't have to open-source your modifications
Plain English: Conductor is free, open-source software. You're responsible for what your instance does. We make no warranties. Your data stays on your machine.

1. Acceptance

By installing or using Conductor you agree to these Terms. Continued use after updates constitutes acceptance.

2. Description

Conductor is open-source local-first software. AlxLabs operates no cloud servers in connection with normal operation. Licensed under Apache 2.0.

3. User Responsibilities

You are solely responsible for all actions taken by your Conductor instance. You agree to comply with all applicable laws and not use Conductor for unauthorized access, malware distribution, or illegal activity.

4. Third-Party Services

Conductor connects to third-party APIs. Your use of each is governed by that service's own terms. AlxLabs is not affiliated with or liable for any third-party service.

5. Disclaimer of Warranties

CONDUCTOR IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES OF ANY KIND. USE IS ENTIRELY AT YOUR OWN RISK.

6. Limitation of Liability

TO THE MAXIMUM EXTENT PERMITTED BY LAW, ALXLABS SHALL NOT BE LIABLE FOR ANY DAMAGES ARISING FROM YOUR USE OF CONDUCTOR.

Bottom line: Conductor collects nothing. No telemetry, no analytics, no crash reports. Everything lives on your machine. AlxLabs has zero visibility into your usage or data.

1. What We Don't Collect

AlxLabs does not collect, process, store, or transmit: personal identifiable information, conversation history, API keys, usage analytics, crash reports, IP addresses, device fingerprints, or your files. Nothing.

2. Local Data

All persistent data is stored in ~/.conductor/ on your local filesystem. Delete this directory to fully remove all Conductor data. No remote deletion required.

3. AI Provider Interactions

Your prompts go directly from your machine to your chosen AI provider using your own API key. AlxLabs is not an intermediary.

4. Google OAuth Tokens

OAuth tokens stored exclusively in your local AES-256-GCM encrypted keychain. Never transmitted to AlxLabs. We only store your email address when you request Google beta access. Revoke: myaccount.google.com/permissions