Run work on the correct device. Start Codex sessions where the files are. Move files between devices. Monitor the complete compute fleet.
Quick start · Tailscale setup · Security · Documentation · Commercial use
Important
Orchestra is source-available software for noncommercial use. The PolyForm Noncommercial License 1.0.0 permits evaluation, education, personal projects, and qualifying nonprofit use. Business use requires written permission and separate terms from One Man Labs.
Many users control several computers with scripts, dashboards, SSH aliases, and shared folders. Orchestra replaces these separate tools with one control layer.
Use Orchestra to do these tasks:
- See the status of each device.
- Select the device that must do the work.
- Start a Codex session in the correct workspace.
- Approve sensitive operations.
- Move files and artifacts.
- Monitor hardware and jobs.
- Control device power.
Orchestra Core coordinates the fleet. Each Orchestra Agent controls its local files, credentials, processes, and compute.
Orchestra is for homelabs and private compute fleets. It supports macOS, Windows, Linux, NAS devices, GPU computers, and Raspberry Pi gateways.
The images use synthetic data. They do not show a real fleet. Read the screenshot procedure for more information.
| Area | Functions |
|---|---|
| Fleet control | Topology, groups, sites, hardware, trust, maintenance, and bulk selection |
| Codex | Remote sessions, approvals, tools, skills, MCP, plugins, goals, reviews, and session transfer |
| Jobs | Scheduling, pipelines, conditions, retries, time limits, approvals, and cancellation |
| Files | Restricted browsing, restartable transfer, integrity checks, history, and NAS storage |
| Operations | Telemetry, alerts, diagnostics, audit data, backups, and update control |
| Power | Wake-on-LAN, sleep, restart, shutdown, lock, logout, and idle rules |
| Clients | Electron, responsive PWA, macOS menu bar, and native iOS |
| Hardware | Work Louder Codex Micro controls, lights, dial, joystick, and push-to-talk |
| Interfaces | REST, OpenAPI, TypeScript SDK, Python SDK, MCP, webhooks, and plugins |
| Deployment | Docker Compose, Kubernetes, launchd, systemd, and native Agent packages |
flowchart LR
C[Desktop / PWA / iOS] -->|HTTPS + scoped token| CORE[Orchestra Core]
CORE <-->|authenticated WebSocket| A1[Agent: workstation]
CORE <-->|authenticated WebSocket| A2[Agent: GPU node]
CORE <-->|authenticated WebSocket| A3[Agent: NAS or gateway]
A1 --> CODEX[Local Codex app-server]
A2 --> JOBS[Local jobs and tools]
A3 --> DATA[Local or mounted storage]
TS[Tailscale tailnet] --- C
TS --- CORE
TS --- A1
TS --- A2
TS --- A3
- Core owns fleet identity, state, scheduling, policy, approvals, audit data, enrollment, and routing.
- Agents own local execution, files, credentials, previews, telemetry, and power control.
- Clients show Orchestra Canvas and send requests to Core.
- Tailscale gives private network access.
- Orchestra still uses its own authentication and authorization.
Read Architecture for protocol and trust-boundary data.
- Node.js 22 or a newer version
- npm 10 or a newer version
- Git
- Native build tools for
node-pty - Codex on each device that runs Codex sessions
- Tailscale for the recommended private setup
Docker is optional. Xcode is necessary only for the iOS client.
Use this procedure for an evaluation on one computer.
git clone <repository-url>
cd orchestra
npm install
npm run devThe development application starts a local Core and Agent. The device appears after the Agent connects.
To start the browser client, use this command:
npm run dev:webdev:web permits access without authentication only through the local Vite proxy. Do not use this option with a shared endpoint.
To add synthetic devices, use this command:
FLEET_TOKEN='<development-recovery-token>' npm run dev:simulator -- --count 8 --prefix demo-nodeThe simulator cannot do real file, power, desktop, or Codex operations.
For an isolated documentation system, use this command:
npm run demo:readmeThis command uses temporary state and unused loopback ports. It removes the temporary state when it stops.
Keep Orchestra on a private tailnet. Do not use router port forwarding. Do not use Tailscale Funnel for Core.
Install Tailscale on Core, all Agent devices, and all client devices. Make sure that the devices can connect to each other.
Use Tailscale grants to limit access to Core and Agent services.
npm install
npm run buildopenssl rand -hex 32
openssl rand -base64 32Use the first value for FLEET_TOKEN. Use the second value for FLEET_MASTER_KEY.
Keep both values in a password manager or another secret store. Do not put real values in source files, screenshots, issues, or chat logs.
Keep Core on loopback. Let Tailscale Serve supply private HTTPS.
FLEET_HOST='127.0.0.1' \
FLEET_PORT='4780' \
FLEET_PUBLIC_URL='https://fleet-core.example-tailnet.ts.net' \
FLEET_TOKEN='<recovery-token>' \
FLEET_MASTER_KEY='<vault-key>' \
npm run start:coreIn a different administrator shell, use these commands:
tailscale serve --bg 4780
tailscale serve statusMake sure that the reported URL is equal to FLEET_PUBLIC_URL.
Make a short-life, one-use enrollment token:
curl --fail-with-body \
-H 'Authorization: Bearer <recovery-token>' \
-H 'Content-Type: application/json' \
-d '{"label":"worker enrollment","role":"worker","expiresInSeconds":900,"maxUses":1}' \
https://fleet-core.example-tailnet.ts.net/api/v2/enrollment/tokensUse the returned token one time on the Agent device:
FLEET_CORE_URL='https://fleet-core.example-tailnet.ts.net' \
FLEET_ENROLLMENT_TOKEN='<one-time-enrollment-token>' \
FLEET_DEVICE_ROLE='worker' \
FLEET_PROJECT_ROOTS='/path/to/projects,/path/to/mounted-storage' \
npm run start:agentThe Agent gets a device credential and stores it in its private state directory.
Enter the Core HTTPS URL in Desktop or iOS. Use a restricted API token for normal work. Keep the recovery token for emergency administration.
Read Web client deployment if the PWA has a separate host.
The repository contains a native SwiftUI client in apps/ios. It uses iOS navigation, Keychain storage, device authentication, QR enrollment, and WebSocket reconnection.
The client supports these functions:
- Fleet status and telemetry
- Device power controls
- Job control and output
- Codex sessions and approvals
- Alerts and notifications
- Manual and QR enrollment
Read the iOS installation guide.
The macOS application can use the Work Louder Codex Micro. The device can select sessions, answer approval requests, change session modes, start push-to-talk, and run configured actions.
Open Settings → Codex Micro to enable it. macOS can ask for Input Monitoring, Microphone, and Speech Recognition access.
Codex Micro controls do not bypass Core policy, Agent limits, or operating-system permissions.
Orchestra includes a native menu-bar interface. It shows fleet health, devices, jobs, approvals, alerts, Codex sessions, power controls, and Tailscale exit-node controls.
If the optional codexbar command is present, Orchestra reads its JSON output. Orchestra keeps quota and reset data. It discards account identity data.
Read the menu-bar guide.
| Target | Guide |
|---|---|
| Docker Compose or NAS | Operations and NAS |
| Kubernetes | Kubernetes file |
| Native Agent packages | Agent installation |
| Synology user service | Synology installation |
| Raspberry Pi gateway | Raspberry Pi |
| Native iOS client | iOS |
| macOS menu bar | Menu bar |
Orchestra controls real computers. Use these safety rules:
- Keep Core behind Tailscale or an equivalent private network.
- Use HTTPS for traffic that leaves loopback.
- Use restricted API tokens for clients and automation.
- Keep the recovery token out of normal use.
- Give each Agent only the necessary project roots.
- Use short-life, one-use enrollment tokens.
- Set and back up
FLEET_MASTER_KEY. - Enable destructive power operations only where necessary.
- Send audit records to separate storage when strong retention is necessary.
Read Security design, Operations, and Security policy before production use.
Do not commit these files or values:
.envfiles- API, recovery, enrollment, device, Tailscale, cloud, or webhook tokens
- Private keys and signing identities
- State files, device credentials, backups, or logs
- Screenshots with private names, paths, addresses, or tokens
Check all staged changes before each push:
git status --short
git diff --cached --check
git diff --cached
npm run audit:publicationIf a secret enters Git history, revoke it immediately. Then, remove it from the history.
Copy .env.example for local use. Copy deploy/.env.example for Compose.
| Variable | Purpose |
|---|---|
FLEET_CORE_URL |
Core URL for Agents and clients |
FLEET_PUBLIC_URL |
Core URL used during enrollment |
FLEET_TOKEN |
Recovery credential |
FLEET_MASTER_KEY |
Key for encrypted secrets and backups |
FLEET_ENROLLMENT_TOKEN |
One-use Agent enrollment token |
FLEET_PROJECT_ROOTS |
Local roots that an Agent can access |
FLEET_ALLOWED_ORIGINS |
Browser origins that Core permits |
FLEET_ALLOW_POWER_ACTIONS |
Agent permission for destructive power operations |
Read Operations for all production settings.
npm run typecheck
npm test
npm run build
PYTHONPATH=sdks/python/src python3 -m unittest discover -s sdks/python/tests -vRun the complete check with this command:
npm run verifyCI checks TypeScript on macOS, Windows, and Linux. It also tests the Python SDK and builds the Core and Agent images.
apps/desktop Electron application
apps/ios Native SwiftUI client
apps/menubar-macos Native macOS menu-bar client
packages/core Control plane and state
packages/agent Local execution and device control
packages/shared Protocol and data types
packages/mcp MCP gateway
packages/sdk TypeScript SDK
packages/plugin-sdk Plugin contracts
packages/simulator Development-only Agents
sdks/python Python SDK
deploy Deployment files
docs Technical documentation
- Architecture
- Security design
- Production operations
- Web client
- MCP gateway
- Development
- Integration limits
Orchestra V2 is in active development. Core uses one active process and a JSON state file. Distribution packages are unsigned development files. Some external integrations contain only an adapter or metadata boundary.
Read Integration limits before production use.
The product name is Orchestra. Some internal names remain unchanged for upgrade compatibility. These names include @fleet/*, FLEET_*, com.fleetcanvas.*, and Fleet Canvas.
Do not change these names without a migration plan.
Read CONTRIBUTING.md before you submit a change. Report security problems as specified in SECURITY.md.
Copyright 2026 One Man Labs.
Orchestra uses the PolyForm Noncommercial License 1.0.0. It is not open source under the OSI definition.
Copies and changed versions must keep the Required Notice and attribution. Business use requires a written agreement with One Man Labs.
Read Commercial licensing and Notices.



