refactor: rename OpenRemote Control to LibreControl - #126
Merged
Conversation
Resolves a name collision with OpenRemote (openremote.io), a commercial IoT platform holding the trademark, which made this project unfindable in search and carried avoidable legal risk. - Product: OpenRemote Control -> LibreControl - CLI: orc-host -> librectl - MCP bridge: orc-mcp -> librecontrol-mcp (module orc_mcp -> librecontrol_mcp) - MCP tool + slash command: openremote_control -> librecontrol - Env vars: ORC_* -> LCTL_* (35 vars). LC_* was rejected: it collides with the POSIX locale variables (LC_ALL, LC_CTYPE, LC_TIME). - Signing headers: X-ORC-* -> X-LCTL-* on both sides of the wire - launchd labels: com.openremote.* -> com.librecontrol.* - Deploy stack: deploy/orc-stack -> deploy/librecontrol-stack - Config dir: ~/.config/openremote-control -> ~/.config/librecontrol - Postgres default DB: openremote_control -> librecontrol Also adds a "How it compares" README section positioning LibreControl against Claude Code Channels and OpenClaw. github.com/Pher217/OpenRemote-Control URLs are deliberately left unchanged until the GitHub repository itself is renamed, so no link breaks in between. BREAKING: enrolled hosts must re-run `librectl enroll` -- the Ed25519 connector key does not migrate to the new config directory.
The GitHub repository has been renamed Pher217/OpenRemote-Control -> Pher217/LibreControl, so the URLs deferred from the rename commit are now live and safe to update: CHANGELOG (19), README (6, including the shields.io stars badge whose API path is not a github.com URL), SECURITY (2), and the issue-template config (2). Also fixes the LCTL_REPO example path. Historical CHANGELOG entries still describe the slash command as /openremote-control -- that is what shipped at those releases.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Goal
Rename the project to LibreControl, resolving a collision with OpenRemote — a commercial IoT platform that holds the trademark and owns the search results for the name. The old name made the project effectively unfindable (searching for it returns only OpenRemote's org and product pages) and carried avoidable legal exposure, since the README disclaimed non-affiliation with Anthropic and OpenAI but not with the vendor whose name we were actually using.
Librewas chosen over alternatives because the naming family (LibreOffice, LibreWolf, LibreChat, LibreNMS) already signals "the open implementation of a thing you know" without having to claim it — and unlikeOpen, it hasn't been diluted.Changes
Naming
OpenRemote Control→LibreControlorc-host→librectlorc-mcp→librecontrol-mcp; moduleorc_mcp→librecontrol_mcpopenremote_control→librecontroldeploy/orc-stack/→deploy/librecontrol-stack/com.openremote.*→com.librecontrol.*~/.config/openremote-control/→~/.config/librecontrol/openremote_control→librecontrolEnv vars — all 35
ORC_*→LCTL_*, suffixes unchanged.LC_*was rejected deliberately: it collides with the POSIX locale variables (LC_ALL,LC_CTYPE,LC_TIME), which would have broken shell locale handling.Signing headers —
X-ORC-*→X-LCTL-*on both sides of the wire. The signed payload (METHOD\nPATH\nsha256hex(body)\nTIMESTAMP\nNONCE) does not include header names, so this is a pure rename with no crypto impact.README — adds a
How it comparessection positioning LibreControl against Claude Code Channels and OpenClaw, and moves the multi-agent / fleet / self-hosted differentiators into the first screen.Approach
Split across four workers on non-overlapping directory scopes in a single worktree — per-worker worktrees would only have created merge conflicts for a repo-wide rename.
Two workers reached opposite conclusions on the
X-ORC-*headers: the backend worker renamed them, the connector worker deliberately left them, each reasoning the other side owned the contract. Both component suites still passed, because each mocks its own side of the wire — this would have shipped as a runtime auth failure on every signed connector request. Caught by cross-component grep and fixed manually. Verified afterwards thatbackend/apps/connectors/auth.pyMETAlookups match the five headerssigning.pysends.Test Summary
Every suite run locally after the fix:
Lint matching CI:
ruffclean on backend and host-agent;banditclean; gatewaytypecheckclean.Residual-string sweep confirms zero stray
ORC_oropenremoteoutside deliberate exclusions.Deliberately NOT changed
github.com/Pher217/OpenRemote-ControlURLs (29 across 4 files, incl. badges and PR links). The GitHub repo has not been renamed yet; rewriting them now would create dead links. Once the repo is renamed, GitHub's permanent redirect covers the old URLs, and these get updated in a follow-up.ORC_BIND_HOST/ORC_HEADLESS_ENGINE— they describe what actually shipped at those releases; rewriting them would misrepresent history.orc-pair://URI scheme,orc_setupDjango app label,orc_pair/orc_connectorsmanagement commands, and the bareorccompose project/image names. Renaming the app label would rewritedjango_migrationshistory for every applied migration — a data migration, out of scope here.Files Changed
115 files, 24 tracked as renames with history preserved.
backend/— settings DB defaults, connector auth headers, env reads, tool + slash command nameshost-agent/— entry pointorc-host→librectl, config dir, env varsconnectors/librecontrol-mcp/— package, module, entry point, tool name, signing headersconnectors/messaging-gateway/— setup-server page title, descriptiondeploy/librecontrol-stack/— launchd plists, supervisor scripts, env examplesREADME.md/CLAUDE.md/AGENTS.md/SECURITY.md/CHANGELOG.md/.github/Enrolled hosts must re-run
librectl enroll. The Ed25519 connector key lives in the config directory that moved, and does not migrate. Your.env/librecontrol-stack.envalso needORC_*→LCTL_*, and the launchd services need abootout+ re-bootstrapto pick up the newcom.librecontrol.*labels.