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://conductor.thealxlabs.ca/install.sh | bashWindows (PowerShell, run as Admin)
> irm https://conductor.thealxlabs.ca/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. Request access →
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://conductor.thealxlabs.ca/install.sh | bashWindows — PowerShell (run as Admin)
> irm https://conductor.thealxlabs.ca/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.
Google features require beta access while verification is ongoing. Request access →
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://conductor.thealxlabs.ca/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
BETA_ACCESS.md
Google features — Gmail, Calendar, Drive — are invite-only while we complete Google's OAuth verification. All other plugins work immediately with no invite needed.
🔑 What's in Beta
All plugins work immediately after install. Google features require a one-time invite because Google's verification process is ongoing.
⚡ 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
📋 How It Works
conductor auth google or open the dashboard → click Connect Google
~/.conductor/keychain/ — AES-256-GCM encrypted on your machine. We never see them.
📬 Request Access
We review requests manually and respond within 1–3 days.
FAQ
~/.conductor/keychain/. We never see your data.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, transmit malware, violate third-party terms of service, conduct unauthorized scraping, harass any individual, or generate illegal content.
4. Third-Party Services & Integrations
Conductor connects to third-party APIs and services including Spotify, Google (Gmail, Calendar), OpenAI, Anthropic (Claude), Telegram, Slack, GitHub, and others you configure. 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. Intellectual Property
The Conductor source code and documentation are copyright © 2026 Alexander Wondwossen / TheAlxLabs, licensed under Apache 2.0. All content you create using Conductor remains entirely your own intellectual property. AlxLabs claims no ownership over your data or creations.
6. Disclaimer of Warranties
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, CONDUCTOR IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES OF ANY KIND. USE IS ENTIRELY AT YOUR OWN RISK.
7. Limitation of Liability
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, ALXLABS SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OF CONDUCTOR.
8. Indemnification
You agree to indemnify and hold harmless AlxLabs and its contributors from any claims arising out of your use of Conductor or your violation of these Terms.
9. 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. Continued use constitutes acceptance.
10. Contact & Questions
For questions about these Terms, 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 is designed as a local-first application: it runs entirely on your machine, and AlxLabs operates no servers that participate in your normal usage.
This policy applies to all versions of Conductor distributed via the official GitHub repository at github.com/thealxlabs/conductor.
2. Information We Do Not Collect
AlxLabs does not collect, process, store, or transmit any of the following: personal identifiable information, conversation history or agent outputs, API keys and authentication tokens, usage analytics and telemetry, crash reports, IP addresses, device fingerprints, location data, or your files. Nothing.
3. Local Data Storage
All persistent data created by Conductor is stored in ~/.conductor/ on your local filesystem — config, encrypted credentials, notes, and logs. Delete this directory at any time to fully and permanently remove all Conductor data. No remote deletion required.
4. AI Provider Interactions
Your prompts go directly from your machine to your chosen AI provider (Anthropic, OpenAI, Google, or Ollama locally) using your own API key. AlxLabs is not an intermediary and has no visibility into these calls.
5. Google OAuth & Third-Party Service Tokens
OAuth access tokens and refresh tokens are stored exclusively in your local AES-256-GCM encrypted keychain. They are never transmitted to AlxLabs. Revoke access at any time: myaccount.google.com/permissions
6. Security Practices
AES-256-GCM encryption for all keychain credentials. No plaintext credential storage. Sandboxed file access within user-defined path constraints. While we implement strong local security, no software can guarantee absolute security — you remain responsible for securing your machine and master password.
7. Your Rights & Data Control
All data is in ~/.conductor/. Delete with rm -rf ~/.conductor/. Notes and configs are plain files — copy them wherever you need. Revoke third-party access directly in those services' account settings.
8. Changes to This Policy
Material changes will be communicated via a commit to the GitHub repository. Continued use constitutes acceptance of the revised policy.
9. Contact
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.