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.

🌐

Offline Capable

Pair with Ollama for a fully offline setup. Local plugins — notes, files, shell — work without any internet connection whatsoever.

// Get Running in 2 Minutes

⚡ Quick Install

The one-liner handles Node.js dependency checking, directory setup, and launches the interactive 14-step configuration wizard.

macOS / Linux

bash
$ curl -fsSL https://raw.githubusercontent.com/thealxlabs/conductor/main/install.sh | bash

Windows (PowerShell, run as Admin)

powershell
> irm https://raw.githubusercontent.com/thealxlabs/conductor/main/install.ps1 | iex

Full details on the Docs page, including manual clone instructions.

// Plugin Ecosystem

spotify 18 tools · stable

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

play/pausequeuesearchplaylists
notes 12 tools · stable

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

createsearchencryptindex
files 11 tools · stable

Local filesystem read, write, move, copy, search, and manage operations with sandboxed path constraints.

readwritesearchmanage
telegram 8 tools · stable

Remote control your Conductor from anywhere via Telegram. User-ID whitelisted — only you can access your agent.

remotechatsecure
gmail 9 tools · beta

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

readcomposelabels
browser 7 tools · beta

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

scrapenavigatescreenshot

+ shell, http, calendar, memory plugins. Full plugin reference →

Legal Terms of Service Privacy Policy Apache 2.0 License

☁ Installation

Conductor is a TypeScript project that compiles to Node.js. It requires Node.js 18+, npm, and Python 3.6+ (used by the installer for config file merging). 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://raw.githubusercontent.com/thealxlabs/conductor/main/install.sh | bash

Windows — PowerShell (run as Admin)

powershell
> irm https://raw.githubusercontent.com/thealxlabs/conductor/main/install.ps1 | iex

If you have the source / modified the code

Use local-install.sh instead — it builds from your current directory and links it globally without cloning from GitHub:

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

What the installer actually does

The installer is a self-contained bash script (install.sh) with 15 interactive steps. Each step is skippable. Here's what happens in order:

  • Step 01 — Preflight: Checks for Node.js ≥18, npm, Python 3, git, curl. Creates ~/.conductor/{keychain,plugins,logs} with 0700 permissions.
  • Step 02 — Install & Build: Clones the repo to ~/.conductor-src (or updates if already there), runs npm install, then npm run build to compile TypeScript. Links the conductor binary globally via npm link with a fallback to ~/.local/bin.
  • Step 03 — AI Provider: Choose Claude, OpenAI, Gemini, OpenRouter, Ollama, or skip. API keys are encrypted immediately using AES-256-GCM and stored in the keychain — never written to config.json in plaintext.
  • Step 04 — Memory Plugin: Enabled by default. Uses keyword search unless you also provide an OpenAI key, which enables semantic (vector) search.
  • Step 05 — Google Services: Enables Gmail, Google Calendar, and Google Drive plugins. Auth happens separately via conductor auth google, which opens a browser OAuth flow.
  • Step 06 — Notion: Optional. Verifies your integration token against the Notion API before saving.
  • Step 07 — X (Twitter): Optional. Read-only (Bearer Token) or full write access (Bearer + OAuth 1.0a). Bearer token is verified against the API.
  • Step 08 — Spotify: Optional. Requires a Client ID and Access Token from your Spotify Developer App. Token is verified against /v1/me before saving.
  • Step 09 — GitHub Actions: Optional. PAT is verified against api.github.com/user. Requires repo, workflow, notifications, read:user scopes.
  • Step 10 — Vercel: Optional. Token verified against api.vercel.com/v2/user. Supports team scope configuration.
  • Step 11 — n8n: Optional. Works with self-hosted or n8n Cloud. Verifies API key against /api/v1/health.
  • Step 12 — Notes & Scheduler: Always enabled. Zero config — notes go to ~/.conductor/notes/, cron state to ~/.conductor/scheduler.json.
  • Step 13 — Telegram Bot: Optional. Token verified against api.telegram.org/bot.../getMe. The bot username is confirmed before saving.
  • Step 14 — Slack Bot: Optional. Requires a Bot OAuth Token (xoxb-) and App-Level Token (xapp-) from api.slack.com/apps.
  • Step 15 — MCP for Claude Desktop: Auto-detects the Claude Desktop config path for your OS and writes the conductor entry to mcpServers. Backs up any existing config first.

System Requirements

RequirementMinimumRecommended
Node.js18.x20.x LTS or 22.x
Python3.63.11+ (used by installer only)
RAM256 MB1 GB+
OSmacOS 12+, Ubuntu 20.04+, Windows 11 (PowerShell 5+)
The installer is idempotent — if it fails midway, just re-run it. It will update your existing source and skip already-configured steps.

⚡ How It Works

Conductor is a TypeScript application. When you run conductor start (or send a message via Telegram/Slack), it spins up an AI conversation loop that has 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

Every message you send goes through the same pipeline:

request flow
── Input ───────────────────────────────────────────────── CLI prompt / Telegram message / Slack mention / MCP call ↓ ── AIManager.chat() ────────────────────────────────────── Conversation history + all enabled plugin tool schemas sent to your configured provider (Claude / GPT / Gemini / Ollama) ↓ ── Model responds ──────────────────────────────────────── If stop_reason = "tool_use" → PluginManager.execute(tool, args) If stop_reason = "end_turn" → return text to user ↓ (loop back if tool was called) ── Output ──────────────────────────────────────────────── Final text response delivered back to the transport

Three Ways to Use It

  • MCP Server: Run conductor mcp start. Claude Desktop, Cursor, or any MCP client connects and sees all your enabled plugins as native tools. This is the most powerful mode — the AI in your editor gains access to your Spotify, Gmail, GitHub, etc.
  • Telegram Bot: Run conductor telegram start. Chat with your Conductor from anywhere on your phone. The bot polls the Telegram API — no inbound ports needed.
  • Slack Bot: Run conductor slack start. Uses Socket Mode — mention the bot or DM it in your workspace. Full plugin access, same as the other modes.

What gets stored where

PathContents
~/.conductor/config.jsonPlugin state, AI provider choice, feature flags. No secrets.
~/.conductor/keychain/AES-256-GCM encrypted credential files (.enc). One file per service/key pair. Permissions 0700.
~/.conductor/notes/Your local markdown notes (created by the Notes plugin).
~/.conductor/logs/Activity logs from the database layer.
~/.conductor/scheduler.jsonCron/scheduled task state.
~/.conductor-src/The cloned source code and compiled dist/. This is what the conductor binary runs.

⬡ AI Providers

Conductor supports five AI backends. All are implemented in src/ai/ and share the same interface via AIManager. Switch at any time — your plugins and tool schemas don't change.

ProviderModelsNeedsNotes
claudeclaude-sonnet-4-5, opus-4-6, haikuANTHROPIC_API_KEYBest tool-calling reliability in testing
openaigpt-4o, gpt-4-turbo, gpt-4o-miniOPENAI_API_KEYKey also used for Memory plugin embeddings
geminigemini-1.5-pro, gemini-1.5-flashGOOGLE_API_KEYShares OAuth session with Gmail/Calendar/Drive
openrouterany model on openrouter.aiOPENROUTER_API_KEYAccess to 100+ models via one key
ollamallama3.2, mistral, qwen2.5, etc.Ollama running locallyFully offline. ollama serve must be running.

Configure or Switch

bash
$ conductor ai setup # interactive setup wizard for any provider $ conductor ai switch claude # hot-swap to Claude $ conductor ai switch ollama # switch to local Ollama $ conductor ai test # send a test message to verify the connection $ conductor ai list # show all configured providers and their status

Ollama (fully offline)

Install Ollama from ollama.com, then:

bash
$ ollama pull llama3.2 # or mistral, qwen2.5, phi3, etc. $ ollama serve # must be running before conductor starts $ conductor ai switch ollama $ conductor ai test
For reliable tool-calling with Ollama, use llama3.1, llama3.2, mistral-nemo, or qwen2.5. Smaller models may not follow tool schemas correctly.

⬣ Plugins

Plugins live in src/plugins/builtin/. Each one is a TypeScript class that implements the Plugin interface: a list of tool definitions (name, description, JSON Schema input) and a handle(toolName, args) function. The AI sees every enabled plugin's tools 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 — "every day at 9am", "in 30 min"
n8n16n8n API key + URLTrigger workflows, inspect executions, fire webhooks
vercel20Vercel tokenDeployments, projects, domains, env vars, logs
github12GitHub PAT (optional)Repos, search, gists, user info (some tools are unauthenticated)
gcal7Google OAuthRead/write Google Calendar events
gmail8Google OAuthRead, search, send, label Gmail messages
notion6Notion integration tokenRead/write Notion pages and databases
x11X Bearer Token (+ OAuth for writes)Search, timelines, post, like, delete tweets
notes8Local markdown notes — create, read, search, delete
memory5OpenAI key for semantic search (optional)Persistent facts the AI remembers across sessions
system4CPU, RAM, disk, running processes via systeminformation
weather4Current conditions, forecast, hourly (uses wttr.in, no API key)
crypto5Live prices, historical data, market cap via CoinGecko
translate1Translate text between languages via MyMemory (free tier)
calculator3Math evaluation, unit conversion, percentage calculations
hash5MD5, SHA-1, SHA-256, SHA-512, bcrypt
url-tools3Fetch URL content, expand short links, check status codes
network3IP lookup, DNS resolve, ping
timezone2Convert times between timezones, list zone info
text-tools4Word count, diff, base64 encode/decode, slug generation
colors3Convert between hex/rgb/hsl, generate palettes
fun5Jokes, quotes, random facts, coin flip, dice

Manage Plugins

bash
$ conductor plugins list # show all plugins + enabled status $ conductor plugins enable spotify # enable a plugin $ conductor plugins disable notion # disable a plugin $ conductor plugins config spotify access_token <TOKEN> # set a credential $ conductor plugins config github_actions token <PAT>

🔒 Security

Every credential you enter — API keys, OAuth tokens, bot tokens — is encrypted before being written to disk. The raw value never touches config.json.

Keychain Implementation

The keychain is implemented in src/security/keychain.ts. The encryption scheme:

  • Algorithm: AES-256-GCM with a random 12-byte IV per write. Authentication tag is stored alongside the ciphertext.
  • Key derivation: scrypt(machineId, sha256('conductor:keychain:v1'), 32, {N:16384, r:8, p:1})
  • Machine ID: Read from /etc/machine-id (Linux), ioreg IOPlatformUUID (macOS), or the Windows registry MachineGuid. Falls back to a random UUID stored in ~/.conductor/keychain/machine_secret.
  • Storage format: v2:<iv_hex>:<auth_tag_hex>:<ciphertext_hex> — one file per credential, named <service>.<key>.enc.
  • Consequence: Copying ~/.conductor/keychain/ to another machine produces unreadable files. Credentials are hardware-bound.

What is and isn't in config.json

~/.conductor/config.json — example (no secrets here)
{ "ai": { "provider": "claude" }, "plugins": { "installed": ["memory", "notes", "cron", "spotify"], "enabled": ["memory", "notes", "cron", "spotify"] }, "telegram": { "enabled": true } }

The actual Telegram bot token lives at ~/.conductor/keychain/telegram.bot_token.enc — never in the JSON.

Never share or back up your ~/.conductor/keychain/ directory. The files are useless on any other machine but contain your encrypted secrets. Report security issues privately via GitHub Security Advisories — not public issues.

⌨ CLI Reference

After installation, conductor is available globally. Implemented in src/cli/ using Commander.js.

all commands
# ── Status & diagnostics ────────────────────────────────── $ conductor status # full health check: AI, plugins, credentials # ── AI provider management ──────────────────────────────── $ conductor ai setup # interactive wizard to configure a provider $ conductor ai switch <name> # switch active provider (claude/openai/gemini/etc) $ conductor ai test # send a test prompt to verify the connection $ conductor ai list # show all configured providers # ── Plugin management ───────────────────────────────────── $ conductor plugins list # show all plugins and enabled/disabled state $ conductor plugins enable <p> # enable a plugin $ conductor plugins disable <p> # disable a plugin $ conductor plugins config <plugin> <key> <value> # set a credential # ── MCP server ──────────────────────────────────────────── $ conductor mcp start # start MCP server (stdout = protocol, stderr = logs) $ conductor mcp setup # auto-write Claude Desktop config $ conductor mcp status # check server health + list registered tools # ── Telegram bot ────────────────────────────────────────── $ conductor telegram start # start long-poll bot (blocks terminal) $ conductor telegram setup # configure bot token interactively $ conductor telegram status # verify token + check bot info # ── Slack bot ───────────────────────────────────────────── $ conductor slack start # start Slack Socket Mode bot (blocks terminal) $ conductor slack setup # configure Bot OAuth + App-Level tokens # ── Google OAuth ────────────────────────────────────────── $ conductor auth google # browser OAuth flow for Gmail/Calendar/Drive/Gemini # ── Maintenance ─────────────────────────────────────────── $ conductor update # git pull + rebuild

⬡ MCP Server

Conductor implements the Model Context Protocol using @modelcontextprotocol/sdk. When you run conductor mcp start, every enabled plugin's tools are registered as MCP tools. Claude Desktop, Cursor, VS Code with MCP support — any compatible client can connect and call them.

Important: MCP mode uses stdout as the protocol stream. Conductor's internal logs are redirected to stderr in this mode. Don't pipe other output to stdout while MCP is running.

Auto-configure Claude Desktop

bash
$ conductor mcp setup # detects your OS, writes to Claude Desktop config, backs up existing

Or add it manually. The config file locations:

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
claude_desktop_config.json
{ "mcpServers": { "conductor": { "command": "conductor", "args": ["mcp", "start"] } } }

Restart Claude Desktop after saving. Your enabled Conductor plugins appear as tools in the conversation.

✈ Telegram Bot

Implemented in src/bot/telegram.ts using telegraf. Uses long polling — no inbound port or webhook URL needed. The bot runs on your machine and polls Telegram's servers.

Setup

  1. Message @BotFather/newbot → follow prompts → copy the token.
  2. Run conductor telegram setup and paste the token, or set it directly: conductor plugins config telegram bot_token <TOKEN>
  3. Run conductor telegram start
  4. Open your bot in Telegram and send any message.

Bot Commands

CommandWhat it does
/startInitialize the bot session
/statusShow conductor status and enabled plugins
/helpList available commands
(any message)Forwarded to the AI — full plugin access
There is no user ID whitelist by default — anyone who finds your bot can chat with it. If your bot token leaks, revoke it immediately via @BotFather and issue a new one. Consider keeping the bot username private.

💬 Slack Bot

Implemented in src/bot/slack.ts using @slack/bolt in Socket Mode. No public URL or webhook required — everything runs over a persistent WebSocket connection from your machine to Slack.

Setup in Slack

  1. Go to api.slack.com/appsCreate New App → From Scratch.
  2. Under OAuth & Permissions, add Bot Token Scopes: app_mentions:read, chat:write, im:history, im:read, im:write. Install to workspace and copy the xoxb- token.
  3. Under Basic Information → App-Level Tokens, create a token with the connections:write scope. Copy the xapp- token.
  4. Enable Socket Mode under Settings.
  5. Under Event Subscriptions, subscribe to message.im and app_mention.
  6. Run: conductor slack start

Or run the guided setup: conductor slack setup

🔑 Google OAuth

Gmail, Google Calendar, Google Drive, and the Gemini AI provider all share the same Google OAuth session. Authentication is handled in src/utils/google-auth.ts and src/config/oauth.ts.

Authenticating

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

The OAuth flow requests only the scopes needed for your enabled plugins. Tokens are stored encrypted in ~/.conductor/keychain/google.access_token.enc and refreshed automatically.

Revoke access at any time: myaccount.google.com/permissions

The google-creds.json file in the root of the repo is the OAuth client configuration (Client ID + Secret). Do not share or commit this file. It is already in .gitignore.

🛠 Development

Conductor is TypeScript compiled with tsc. The source is in src/, compiled output goes to dist/.

Dev workflow

bash
$ npm run dev # tsx watch — restarts on file changes $ npm run build # tsc — compile to dist/ $ npm start # node dist/cli/index.js $ npm test # node test-all.mjs --skip-auth (skips OAuth-requiring tests) $ npm run test:full # includes auth-requiring tests

Adding a Plugin

Create a new file in src/plugins/builtin/ that implements the Plugin interface, then register it in src/plugins/builtin/index.ts. It will automatically appear in all interfaces (MCP, Telegram, Slack) without any other changes.

src/plugins/builtin/myplugin.ts — minimal structure
import { Plugin, PluginTool } from '../manager.js'; export class MyPlugin implements Plugin { name = 'myplugin'; description = 'Does something useful'; getTools(): PluginTool[] { return [{ name: 'myplugin_greet', description: 'Greets a person', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Name to greet' } }, required: ['name'] } }]; } async handle(toolName: string, args: Record<string, any>) { if (toolName === 'myplugin_greet') { return { message: `Hello, ${args.name}!` }; } throw new Error(`Unknown tool: ${toolName}`); } }

Then add new MyPlugin() to the array in src/plugins/builtin/index.ts. Run npm run build and it's live.

🔧 Troubleshooting

conductor: command not found after install

The installer tries npm link, then global install, then falls back to ~/.local/bin/conductor. If nothing worked, check the install output. To add ~/.local/bin to PATH manually:

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

Then source ~/.zshrc or open a new terminal.

Build failed during install

Run the build manually to see the full error:

bash
$ cd ~/.conductor-src $ npm install $ npm run build

AI test fails / wrong API key

bash
$ conductor ai test # shows exactly which provider + error $ conductor ai setup # re-enter credentials

Google OAuth not working

bash
$ conductor auth google # re-run the OAuth flow

MCP not appearing in Claude Desktop

Run conductor mcp setup to rewrite the config. Then fully quit and relaunch Claude Desktop (not just close the window — quit from the menu bar on macOS). Check that conductor is in your PATH — Claude Desktop has its own environment and may not inherit your shell PATH.

bash — test if Claude Desktop can find conductor
$ which conductor # note the full path # then edit claude_desktop_config.json to use the full path: # "command": "/Users/you/.local/bin/conductor"

Telegram bot not responding

Check conductor telegram status. The most common issue is an expired or invalid token. Create a new one with @BotFather using /mybots → your bot → API Token → Regenerate, then update: conductor plugins config telegram bot_token <NEW_TOKEN>

Reset everything

bash
# Wipe config only (keeps keychain) $ rm ~/.conductor/config.json # Wipe everything including encrypted credentials $ rm -rf ~/.conductor # Reinstall from scratch $ curl -fsSL https://raw.githubusercontent.com/thealxlabs/conductor/main/install.sh | bash

? FAQ

Is anything sent to AlxLabs servers?

No. Conductor has zero telemetry. Your API calls go directly from your machine to whichever service you're calling (Anthropic, Spotify, Google, etc). AlxLabs is not in the request chain.

Can I run it completely offline?

Yes, with Ollama. Set conductor ai switch ollama, make sure ollama serve is running, and use only local plugins (notes, calculator, hash, text-tools, etc). Plugins that call external APIs (Spotify, Gmail, GitHub, etc.) still need internet for those APIs — but Conductor itself doesn't.

What happens when I update?

bash
$ conductor update # git pull in ~/.conductor-src + npm run build

Your config and keychain are untouched. If there are breaking config changes, the release notes will say so.

Can multiple people use one instance?

Conductor is designed as a single-user local agent. The Telegram and Slack bots don't have multi-user access control built in — anyone who can reach the bot can interact with it.

The Spotify token expired

Spotify access tokens expire after 1 hour. You need to get a new one from your Spotify Developer Dashboard and update it:

bash
$ conductor plugins config spotify access_token <NEW_TOKEN>

How do I report a bug?

Open an issue on GitHub. Run conductor status first and include the output — it shows plugin health, AI config, and version info in one shot.

v0.9.0 latest
2026
  • MCP server with full plugin tool exposure
  • Browser plugin (headless Chromium)
  • 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 plugin with user ID whitelisting
  • AES-256-GCM keychain — all secrets encrypted at rest
  • Google Gemini 1.5 provider
  • Fixed notes full-text index rebuild on large vaults
v0.7.0
2026
  • Ollama local model support — full offline mode
  • Notes, Files plugins
  • OpenAI GPT-4o provider
  • ProviderAdapter abstraction layer

Apache License 2.0

Copyright © 2026 Alexander Wondwossen / TheAlxLabs

Plain English: Use it, modify it, ship it, sell it, include it in commercial products — just keep the copyright notice and the license file. Contributors also grant you patent rights. No warranty provided.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this software except in compliance with the License. You may obtain a copy of the License at:

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

What Apache 2.0 Allows

  • Commercial use — use Conductor in commercial products and services
  • Modification — fork it, change it, build on top of it
  • Distribution — distribute original or modified copies
  • Patent grant — contributors grant you a royalty-free patent license for their contributions
  • Private use — use it internally without publishing changes

What You Must Do

  • Include a copy of the Apache 2.0 license in any distribution
  • Retain all copyright, patent, trademark, and attribution notices
  • State significant changes made to the source files
  • Include a NOTICE file if the original project has one

What Apache 2.0 Does NOT Require

  • You do not have to open-source your modifications (unlike GPL)
  • You do not have to use the same license for your own work built on top
Plain English Summary: Conductor is free, open-source software. You can use it for anything legal. You're responsible for what your instance does. We make no warranties and carry no liability. Your data stays on your machine.

1. Acceptance of Terms

By downloading, cloning, installing, or otherwise initializing Conductor onto your local hardware or any computing environment, you ("User") agree to be bound by these Terms of Service ("Terms"). These Terms constitute a legally binding agreement between you and Alexander Wondwossen / TheAlxLabs ("AlxLabs," "we," "us"). If you do not agree to all of these Terms, you must not install or use the software.

Your continued use of Conductor following any update to these Terms constitutes acceptance of the revised Terms. We will communicate material changes via the GitHub repository at github.com/thealxlabs/conductor.

2. Description of Software

Conductor is an open-source, local-first autonomous agent framework that orchestrates AI providers, operating system tools, and third-party APIs through a unified natural language interface. It runs exclusively on your own hardware; AlxLabs does not operate any cloud servers, relay infrastructure, or data processing services in connection with Conductor's normal operation.

The software is distributed free of charge under the Apache License, Version 2.0. Commercial use, modification, and redistribution are permitted subject to the conditions of that license. A copy of the license is available at apache.org/licenses/LICENSE-2.0.

3. User Responsibilities & Acceptable Use

You are solely responsible for all actions taken by your Conductor instance, including any commands issued to AI providers, shell plugins, external APIs, or local filesystems. You agree to:

  • Operate Conductor in full compliance with all applicable local, national, and international laws and regulations
  • Obtain all necessary authorizations and credentials before connecting third-party services or APIs
  • Secure your local configuration files, API keys, and encrypted keychain against unauthorized access
  • Use the software only for lawful purposes that do not infringe upon the rights of any third party

You expressly agree not to use Conductor to:

  • Gain unauthorized access to systems, networks, or accounts ("hacking," credential stuffing, brute-force attacks)
  • Transmit malware, ransomware, spyware, or other malicious code
  • Violate any third-party terms of service, including but not limited to those of Spotify, Google, Anthropic, OpenAI, or Telegram
  • Conduct automated scraping or data harvesting in violation of a website's robots.txt or terms of service
  • Harass, stalk, threaten, or harm any individual or group
  • Generate, distribute, or store illegal content of any kind

4. Third-Party Services & Integrations

Conductor connects to third-party APIs and services including, but not limited to: Spotify, Google (Gmail, Calendar), OpenAI, Anthropic (Claude), Telegram, Slack, GitHub, and any other services you configure via plugins. Your use of each such service is governed exclusively by that service's own terms of service and privacy policy.

AlxLabs is not affiliated with, endorsed by, or responsible for any third-party service. We are not liable for service outages, API changes, rate limiting, account suspensions, data loss, or any other consequence arising from your use of third-party integrations through Conductor.

When you provide API credentials to Conductor, those credentials are stored locally in your AES-256-GCM encrypted vault (~/.conductor/). They are never transmitted to AlxLabs servers.

5. Intellectual Property

The Conductor source code, documentation, and associated assets are copyright © 2026 Alexander Wondwossen / TheAlxLabs and are licensed under the Apache License 2.0. You may use, modify, and redistribute the software in accordance with that license.

All content you create, store, or process using Conductor — including notes, workflows, configurations, and agent outputs — remains entirely your own intellectual property. AlxLabs claims no ownership, license, or rights of any kind over your data or creations.

"Conductor" and the associated logo/mark are trademarks of TheAlxLabs. You may not use these marks to imply endorsement of a product or service without written permission.

6. Open-Source Contributions

Contributions to Conductor via pull requests, issues, or other means are subject to the project's contribution guidelines and the Contributor License Agreement (CLA) implicit in the Apache 2.0 license. By submitting a contribution, you represent that you have the right to grant the licenses described in the Apache 2.0 license and that your contribution does not infringe any third-party intellectual property rights.

7. Disclaimer of Warranties

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, CONDUCTOR IS PROVIDED "AS IS" AND "AS AVAILABLE," WITHOUT ANY EXPRESS, IMPLIED, STATUTORY, OR OTHER WARRANTIES OF ANY KIND, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT.

AlxLabs does not warrant that: (a) the software will meet your requirements; (b) the software will be uninterrupted, timely, secure, or error-free; (c) results obtained from use of the software will be accurate or reliable; or (d) any errors in the software will be corrected. Use of Conductor is entirely at your own risk.

8. Limitation of Liability

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL ALXLABS, ITS CONTRIBUTORS, OR ANY AFFILIATED PARTIES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT LIMITED TO PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; BUSINESS INTERRUPTION; OR LOSS OF GOODWILL) ARISING OUT OF OR IN CONNECTION WITH YOUR USE OF — OR INABILITY TO USE — CONDUCTOR, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

Some jurisdictions do not allow the exclusion of certain warranties or limitation of liability for certain damages. In such jurisdictions, AlxLabs's liability is limited to the greatest extent permitted by law.

9. Indemnification

You agree to indemnify, defend, and hold harmless AlxLabs and its contributors from and against any claims, liabilities, damages, losses, and expenses — including reasonable attorneys' fees — arising out of or in any way connected with your use of Conductor, your violation of these Terms, or your violation of any third party's rights.

10. Governing Law & Dispute Resolution

These Terms shall be governed by and construed in accordance with the laws of the jurisdiction in which AlxLabs is established, without regard to conflict of law principles. Any dispute arising from these Terms or your use of Conductor shall first be addressed through good-faith negotiation. If unresolved, disputes shall be submitted to binding arbitration or the competent courts of the applicable jurisdiction.

11. Changes to Terms

AlxLabs reserves the right to modify these Terms at any time. Material changes will be communicated via a commit to the GitHub repository with a clear description of what changed. Your continued use of Conductor after any update constitutes your acceptance of the revised Terms. If you disagree with a change, you should stop using the software.

12. Contact & Questions

For questions about these Terms of Service, please open an issue or discussion on the official GitHub repository:

github.com/thealxlabs/conductor

These Terms of Service were last updated in January 2026 and apply to all versions 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, data, or conversations.

1. Overview & Local-First Commitment

This Privacy Policy describes how Alexander Wondwossen / TheAlxLabs ("AlxLabs," "we," "us") approaches data handling in connection with the Conductor open-source software ("Conductor," "the Software"). Conductor is designed as a local-first application: it runs entirely on your machine, and AlxLabs operates no servers that participate in your normal usage of the software.

This policy applies to all versions of Conductor distributed via the official GitHub repository at github.com/thealxlabs/conductor. If you access a Conductor instance operated by a third party, that party's privacy policy governs instead.

2. Information We Do Not Collect

AlxLabs does not collect, process, store, or transmit any of the following:

  • Personal identifiable information (PII) — name, email address, phone number, or any identity data
  • Conversation history or agent outputs — your prompts and AI responses are processed locally only
  • API keys and authentication tokens — credentials you configure are stored in your local encrypted vault
  • Usage analytics and telemetry — no session data, feature usage stats, or event tracking of any kind
  • Crash reports and error logs — errors are printed to your local terminal only
  • IP addresses and network identifiers — we have no server infrastructure to log these
  • Device fingerprints and hardware identifiers — no device-level tracking whatsoever
  • Location data — Conductor does not request or infer your geographic location
  • Files and documents — files you process through the files plugin stay on your local filesystem

3. Local Data Storage

All persistent data created by Conductor is stored in a single directory on your local filesystem: ~/.conductor/. This includes:

  • Configuration files — AI provider settings, plugin configuration, and feature flags (config.json)
  • Encrypted credential vault — API keys and OAuth tokens, encrypted with AES-256-GCM using a key derived from a master password you set during installation (keychain.enc)
  • Notes vault — any notes you create via the notes plugin, stored as local markdown files with full-text index
  • Conversation logs — if enabled, conversation history is stored locally for context continuity only

You have complete control over this directory. Delete ~/.conductor/ at any time to fully and permanently remove all Conductor data from your system. No remote deletion or deregistration is required.

4. AI Provider Interactions

When you use Conductor with a cloud AI provider (Anthropic Claude, OpenAI GPT-4o, Google Gemini), your prompts and conversation context are sent directly from your machine to that provider's API using your own API key. These interactions are governed by the respective provider's privacy policy:

AlxLabs is not an intermediary in these API calls and has no visibility into your conversations with AI providers.

5. Google OAuth & Third-Party Service Tokens

When you optionally connect Google services — Gmail, Google Calendar — via OAuth 2.0, the following applies:

  • Conductor requests only the minimum OAuth scopes required for the specific operations you enable (e.g., gmail.readonly for reading email, gmail.send for sending)
  • OAuth access tokens and refresh tokens are stored exclusively in your local AES-256-GCM encrypted keychain (~/.conductor/keychain.enc)
  • Tokens are never transmitted to AlxLabs; all token refresh operations happen directly between your machine and Google's OAuth servers
  • You can revoke Conductor's Google access at any time via myaccount.google.com/permissions

The same token handling applies to other OAuth-integrated services such as Spotify and Slack. All credentials remain local.

6. Third-Party Plugin Communications

Conductor's plugin system enables direct communication between your machine and third-party services. When active plugins connect to external APIs, those communications are subject to the respective service's own privacy policies:

  • Spotify — playback and playlist data sent to the Spotify Web API using your credentials
  • Telegram — messages relayed through Telegram's Bot API using your bot token
  • GitHub — repository interactions via GitHub's REST API using your personal access token
  • Any other configured plugin — follows the same pattern: direct machine-to-service, credentials local

AlxLabs has no visibility into these plugin interactions. We are not a data processor for any third-party service you connect to Conductor.

7. Website & GitHub

This website (the Conductor landing page) may be hosted via standard static hosting infrastructure. Standard server access logs — IP address, browser user agent, pages accessed — may be collected by the hosting provider. AlxLabs does not use cookies, tracking pixels, third-party analytics scripts, or advertising networks on this site.

If you interact with the Conductor GitHub repository (opening issues, submitting pull requests, starring the repo), GitHub's own privacy policy governs that data: GitHub Privacy Statement.

8. Children's Privacy

Conductor is not directed at children under the age of 13 (or the applicable age of digital consent in your jurisdiction). We do not knowingly collect personal information from children. If you believe a child has provided personal information in connection with this software, please contact us via GitHub so we can address the situation appropriately.

9. Security Practices

Conductor implements the following security measures to protect locally stored data:

  • AES-256-GCM encryption for all credentials stored in the keychain — authenticated encryption that detects tampering
  • Master password derivation — the encryption key is derived from a master password you set; it is never stored in plaintext
  • No plaintext credential storage — API keys and tokens are never written to unencrypted config files
  • Sandboxed file access — the files plugin operates within user-defined path constraints to prevent inadvertent system-wide access

While we implement strong local security practices, no software can guarantee absolute security. You remain responsible for securing your machine, your master password, and physical access to your device.

10. Your Rights & Data Control

Because Conductor stores no data on AlxLabs servers, traditional "data subject request" processes (access, deletion, portability) are managed entirely by you at the local level:

  • Access your data: All data is in ~/.conductor/ — inspect it at any time
  • Delete your data: Run rm -rf ~/.conductor/ to permanently remove all Conductor data
  • Export your data: Notes and configs are plain files; copy them wherever you need
  • Revoke third-party access: Revoke OAuth permissions directly in the respective service's account settings

If you are located in the European Economic Area (EEA), the United Kingdom, or another jurisdiction with applicable data protection law, these rights may also be available to you with respect to any data processed by third-party services you connect through Conductor. Contact those services directly to exercise such rights.

11. Changes to This Policy

We may update this Privacy Policy to reflect changes in our software, legal requirements, or best practices. Material changes will be communicated via a commit to the GitHub repository. The "Last updated" date at the top of this page reflects when the most recent revision was made. Continued use of Conductor following an update constitutes your acceptance of the revised policy.

12. Contact

Questions, concerns, or requests related to this Privacy Policy? Please open an issue or discussion on the official GitHub repository:

github.com/thealxlabs/conductor

This Privacy Policy was last updated in January 2026 and applies to all versions of Conductor distributed via the official repository.