Skip to content

refactor: rename OpenRemote Control to LibreControl - #126

Merged
Pher217 merged 2 commits into
mainfrom
claude/2026-08-03-librecontrol-rename
Aug 3, 2026
Merged

refactor: rename OpenRemote Control to LibreControl#126
Pher217 merged 2 commits into
mainfrom
claude/2026-08-03-librecontrol-rename

Conversation

@Pher217

@Pher217 Pher217 commented Aug 3, 2026

Copy link
Copy Markdown
Owner

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.

Libre was 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 unlike Open, it hasn't been diluted.

Changes

Naming

  • Product: OpenRemote ControlLibreControl
  • CLI: orc-hostlibrectl
  • MCP bridge: orc-mcplibrecontrol-mcp; module orc_mcplibrecontrol_mcp
  • MCP tool + slash command: openremote_controllibrecontrol
  • Deploy stack: deploy/orc-stack/deploy/librecontrol-stack/
  • launchd labels: com.openremote.*com.librecontrol.*
  • Config dir: ~/.config/openremote-control/~/.config/librecontrol/
  • Postgres default DB: openremote_controllibrecontrol

Env 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 headersX-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 compares section 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 that backend/apps/connectors/auth.py META lookups match the five headers signing.py sends.

Test Summary

Every suite run locally after the fix:

Suite Result
backend 779 passed, 3 skipped
host-agent 274 passed
librecontrol-mcp 41 passed
messaging-gateway 44 passed (4 files)
Total 1,138 passing

Lint matching CI: ruff clean on backend and host-agent; bandit clean; gateway typecheck clean.

Residual-string sweep confirms zero stray ORC_ or openremote outside deliberate exclusions.

Deliberately NOT changed

  • github.com/Pher217/OpenRemote-Control URLs (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.
  • Historical CHANGELOG entries referencing ORC_BIND_HOST / ORC_HEADLESS_ENGINE — they describe what actually shipped at those releases; rewriting them would misrepresent history.
  • orc-pair:// URI scheme, orc_setup Django app label, orc_pair/orc_connectors management commands, and the bare orc compose project/image names. Renaming the app label would rewrite django_migrations history 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 names
  • host-agent/ — entry point orc-hostlibrectl, config dir, env vars
  • connectors/librecontrol-mcp/ — package, module, entry point, tool name, signing headers
  • connectors/messaging-gateway/ — setup-server page title, description
  • deploy/librecontrol-stack/ — launchd plists, supervisor scripts, env examples
  • README.md / CLAUDE.md / AGENTS.md / SECURITY.md / CHANGELOG.md / .github/

⚠️ Operator action required

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.env also need ORC_*LCTL_*, and the launchd services need a bootout + re-bootstrap to pick up the new com.librecontrol.* labels.

Pher217 added 2 commits August 3, 2026 22:50
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.
@Pher217
Pher217 merged commit 796cbeb into main Aug 3, 2026
8 checks passed
@Pher217
Pher217 deleted the claude/2026-08-03-librecontrol-rename branch August 3, 2026 21:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant