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.
// 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
$ curl -fsSL https://raw.githubusercontent.com/thealxlabs/conductor/main/install.sh | bashWindows (PowerShell, run as Admin)
> irm https://raw.githubusercontent.com/thealxlabs/conductor/main/install.ps1 | iexFull details on the Docs page, including manual clone instructions.
// Plugin Ecosystem
Full playback control, queue management, search, playlist editing, and device switching via the Spotify Web API.
Encrypted local markdown vault with full-text indexing, tag support, and fast fuzzy search across all your notes.
Local filesystem read, write, move, copy, search, and manage operations with sandboxed path constraints.
Remote control your Conductor from anywhere via Telegram. User-ID whitelisted — only you can access your agent.
Read, compose, send, and label Gmail via OAuth 2.0 minimal scopes. Tokens stored in your local encrypted vault.
Headless Chromium for web browsing, content extraction, form filling, and screenshot capture — fully automated.
+ shell, http, calendar, memory plugins. Full plugin reference →
DOCUMENTATION.md
Full technical reference — installation, configuration, providers, plugins, CLI, architecture, MCP, Telegram, and more.
☁ 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
$ curl -fsSL https://raw.githubusercontent.com/thealxlabs/conductor/main/install.sh | bashWindows — PowerShell (run as Admin)
> irm https://raw.githubusercontent.com/thealxlabs/conductor/main/install.ps1 | iexIf 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:
$ git clone https://github.com/thealxlabs/conductor.git
$ cd conductor
$ bash local-install.shWhat 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), runsnpm install, thennpm run buildto compile TypeScript. Links theconductorbinary globally vianpm linkwith 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.jsonin 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/mebefore saving. - Step 09 — GitHub Actions: Optional. PAT is verified against
api.github.com/user. Requiresrepo, workflow, notifications, read:userscopes. - 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
conductorentry tomcpServers. Backs up any existing config first.
System Requirements
| Requirement | Minimum | Recommended |
|---|---|---|
| Node.js | 18.x | 20.x LTS or 22.x |
| Python | 3.6 | 3.11+ (used by installer only) |
| RAM | 256 MB | 1 GB+ |
| OS | macOS 12+, Ubuntu 20.04+, Windows 11 (PowerShell 5+) | |
⚡ 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:
── 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 transportThree 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
| Path | Contents |
|---|---|
~/.conductor/config.json | Plugin 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.json | Cron/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.
| Provider | Models | Needs | Notes |
|---|---|---|---|
claude | claude-sonnet-4-5, opus-4-6, haiku | ANTHROPIC_API_KEY | Best tool-calling reliability in testing |
openai | gpt-4o, gpt-4-turbo, gpt-4o-mini | OPENAI_API_KEY | Key also used for Memory plugin embeddings |
gemini | gemini-1.5-pro, gemini-1.5-flash | GOOGLE_API_KEY | Shares OAuth session with Gmail/Calendar/Drive |
openrouter | any model on openrouter.ai | OPENROUTER_API_KEY | Access to 100+ models via one key |
ollama | llama3.2, mistral, qwen2.5, etc. | Ollama running locally | Fully offline. ollama serve must be running. |
Configure or Switch
$ 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 statusOllama (fully offline)
Install Ollama from ollama.com, then:
$ ollama pull llama3.2 # or mistral, qwen2.5, phi3, etc.
$ ollama serve # must be running before conductor starts
$ conductor ai switch ollama
$ conductor ai testllama3.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.
| Plugin | Tools | Requires | Description |
|---|---|---|---|
| spotify | 21 | Spotify app credentials | Playback, search, playlists, recommendations, devices |
| gdrive | 15 | Google OAuth | List, read, upload, share, manage Google Drive files |
| github-actions | 26 | GitHub PAT | PRs, issues, workflow runs, releases, notifications |
| cron | 14 | — | Natural language scheduling — "every day at 9am", "in 30 min" |
| n8n | 16 | n8n API key + URL | Trigger workflows, inspect executions, fire webhooks |
| vercel | 20 | Vercel token | Deployments, projects, domains, env vars, logs |
| github | 12 | GitHub PAT (optional) | Repos, search, gists, user info (some tools are unauthenticated) |
| gcal | 7 | Google OAuth | Read/write Google Calendar events |
| gmail | 8 | Google OAuth | Read, search, send, label Gmail messages |
| notion | 6 | Notion integration token | Read/write Notion pages and databases |
| x | 11 | X Bearer Token (+ OAuth for writes) | Search, timelines, post, like, delete tweets |
| notes | 8 | — | Local markdown notes — create, read, search, delete |
| memory | 5 | OpenAI key for semantic search (optional) | Persistent facts the AI remembers across sessions |
| system | 4 | — | CPU, RAM, disk, running processes via systeminformation |
| weather | 4 | — | Current conditions, forecast, hourly (uses wttr.in, no API key) |
| crypto | 5 | — | Live prices, historical data, market cap via CoinGecko |
| translate | 1 | — | Translate text between languages via MyMemory (free tier) |
| calculator | 3 | — | Math evaluation, unit conversion, percentage calculations |
| hash | 5 | — | MD5, SHA-1, SHA-256, SHA-512, bcrypt |
| url-tools | 3 | — | Fetch URL content, expand short links, check status codes |
| network | 3 | — | IP lookup, DNS resolve, ping |
| timezone | 2 | — | Convert times between timezones, list zone info |
| text-tools | 4 | — | Word count, diff, base64 encode/decode, slug generation |
| colors | 3 | — | Convert between hex/rgb/hsl, generate palettes |
| fun | 5 | — | Jokes, quotes, random facts, coin flip, dice |
Manage Plugins
$ 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 registryMachineGuid. 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
{
"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.
~/.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.
# ── 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.
Auto-configure Claude Desktop
$ conductor mcp setup # detects your OS, writes to Claude Desktop config, backs up existingOr add it manually. The config file locations:
| OS | Config path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\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
- Message @BotFather →
/newbot→ follow prompts → copy the token. - Run
conductor telegram setupand paste the token, or set it directly:conductor plugins config telegram bot_token <TOKEN> - Run
conductor telegram start - Open your bot in Telegram and send any message.
Bot Commands
| Command | What it does |
|---|---|
| /start | Initialize the bot session |
| /status | Show conductor status and enabled plugins |
| /help | List available commands |
| (any message) | Forwarded to the AI — full plugin access |
💬 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
- Go to api.slack.com/apps → Create New App → From Scratch.
- Under OAuth & Permissions, add Bot Token Scopes:
app_mentions:read,chat:write,im:history,im:read,im:write. Install to workspace and copy thexoxb-token. - Under Basic Information → App-Level Tokens, create a token with the
connections:writescope. Copy thexapp-token. - Enable Socket Mode under Settings.
- Under Event Subscriptions, subscribe to
message.imandapp_mention. - 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
$ conductor auth google # opens browser → you log in → token saved to keychainThe 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
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
$ 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 testsAdding 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.
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:
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:
$ cd ~/.conductor-src
$ npm install
$ npm run buildAI test fails / wrong API key
$ conductor ai test # shows exactly which provider + error
$ conductor ai setup # re-enter credentialsGoogle OAuth not working
$ conductor auth google # re-run the OAuth flowMCP 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.
$ 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
# 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?
$ conductor update # git pull in ~/.conductor-src + npm run buildYour 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:
$ 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.
CHANGELOG.md
Live from GitHub releases — updates automatically when new versions ship.
- 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
--jsonflag to all CLI commands
- 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
- Ollama local model support — full offline mode
- Notes, Files plugins
- OpenAI GPT-4o provider
- ProviderAdapter abstraction layer
LICENSE.md
Legal permissions and limitations for Conductor.
Apache License 2.0
Copyright © 2026 Alexander Wondwossen / TheAlxLabs
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
NOTICEfile 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
Terms of Service
Terms and conditions governing your use of the Conductor agentic orchestration framework. Last updated: January 2026.
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.
Privacy Policy
How Conductor handles your data, credentials, and communications. Last updated: January 2026.
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:
- Anthropic: anthropic.com/legal/privacy
- OpenAI: openai.com/policies/privacy-policy
- Google (Gemini): policies.google.com/privacy
- Ollama (local): No data leaves your machine. Fully offline operation.
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.readonlyfor reading email,gmail.sendfor 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.