Skip to content

Rename to TeamRouter (tracking) #72

Description

@MagicalTux

This project was originally named TeamClaude, but considering Anthropic's general attitude toward protecting what is a fairly common first name, and the possibility TeamClaude could be useful for other use cases, I'm considering renaming the project and open to ideas.

Main concepts include routing and transparent proxying.

Activity

  1. teocns commented on Jul 4, 2026

    @teocns
    Contributor

    I think adopting some non-brandable name like claude-multilogin won't be an issue given there are thousands of other claude-<whatever> repositories.

  2. roderik commented on Jul 6, 2026

    @roderik

    Or add codex support and make it teamagent? <- hidden feature request ;)

  3. jfarre20 commented on Jul 6, 2026

    @jfarre20

    CARL - Code Agent Routing Layer

  4. MagicalTux commented on Jul 7, 2026

    @MagicalTux
    MemberAuthor

    I like this a lot. CARL.

  5. vanseed commented on Jul 28, 2026

    @vanseed

    Claude-LB,Simple and clear

  6. teocns commented on Jul 28, 2026

    @teocns
    Contributor

    Another brilliant one claude-multiauth since multilogin can conflict with https://multilogin.com/

  7. nova28 commented on Sep 6, 2026

    @nova28
    Contributor

    Hi @MagicalTux, with the new #246 not sure you should be looking into the project name again and/or extend the support to other vendors.

  8. ak2k commented on Sep 11, 2026

    @ak2k
    Contributor

    As another suggestion, perhaps team-router.

    Two things to know before picking it. The GitHub org isn't available, and it belongs to a product that already uses the name (it has a user-feedback repo and teamrouter.com); a 2025 repo, eeshhwaq/TeamRouter, is also an LLM proxy for teams. On the other hand the npm names team-router and teamrouter are unpublished, and I assume you'd keep the repo on KarpelesLab, where the scope covers it.

  9. MagicalTux commented on Sep 29, 2026

    @MagicalTux
    MemberAuthor

    Rename plan: TeamClaude → TeamRouter

    The name is decided: TeamRouter (teamrouter in every machine-readable place, TeamRouter in prose). The rename is done across several releases so that nothing anyone has installed, scripted or configured breaks on the day it lands. This issue is the tracker; the checklists below are updated as PRs merge.

    Where the name lives today

    A survey of master (152 files mention it; nothing here is a guess, each item is a place code or a user reads the name):

    Surface Today Who depends on it
    npm package @karpeleslab/teamclaude every npm install -g, the self-updater (PKG_NAME in src/updater.js), README badges
    CLI binary / shell alias teamclaude; alias --install writes alias claude='teamclaude run' (marker # teamclaude alias) every user, every rc file
    Config, state, crash log ~/.config/teamclaude.json, .state.json, crash log next to it; TEAMCLAUDE_CONFIG override every install
    MITM certificates teamclaude-ca.pem, teamclaude-leaf.pem/.key in the config dir; CA subject TeamClaude Local CA every MITM user has this CA in an OS/browser trust store
    Environment variables 26 TEAMCLAUDE_* (_CONFIG, _HOST, _DISABLE_AUTOUPDATE, the timeouts and tunables) service units, Docker, nix module, user shells
    HTTP control plane /teamclaude/status, /reload, /switch, /disable, /priority, /threshold, /quota, /probe, /dashboard, /mcp status/attach/dashboard, Docker HEALTHCHECK, claude mcp add … /teamclaude/mcp, users' own scripts and samplers (#475 runs one)
    Log prefix [TeamClaude] on ~200 lines, asserted by tests anyone grepping journals
    Services systemd teamclaude.service, launchd com.karpeleslab.teamclaude, log at ~/.local/state/teamclaude.log / ~/Library/Logs/teamclaude.log service install users
    Container ghcr.io/karpeleslab/teamclaude (name derived from github.repository), Dockerfile labels, /data/teamclaude.json compose files, k8s manifests
    Nix flake outputs packages.teamclaude, apps.teamclaude, nixosModules.teamclaude; module services.teamclaude.* with user/group/StateDirectory defaults teamclaude NixOS users; the StateDirectory default decides /var/lib/teamclaude
    GitHub KarpelesLab/teamclaude; issue links baked into source comments and docs; npm Trusted Publisher bound to repo name + publish.yml contributors, CI, publishing
    Docs & UI README, docs/*.md, screenshots, dashboard <title>, localStorage keys (teamclaude-dashboard-theme), TUI/terminal title, help text readers
    Internal identifiers teamclaudeRef(), test fixtures, tc-acct pin prefix, TC_ACCT nobody outside the repo

    Things that deliberately do not change: the config file format and keys (none contain the name), account ids and the state file format, the TC_ACCT / /tc-acct/ pin (still reads fine, and it is in users' shells), user-chosen header names such as x-teamclaude-project (they are the operator's own config), and the CA subject on existing installs (a regenerated CA would force everyone to re-trust it; only a freshly generated CA gets the new name).

    Decisions

    • npm: unscoped teamrouter. This is a community project with many outside contributors, not a KarpelesLab-internal one, so it leaves the @karpeleslab scope. teamrouter is reserved (placeholder 0.0.1 published 2026-09-29); npm's similar-name rule then blocks team-router for everyone, so the near-miss cannot be taken either.
    • GitHub: stays under KarpelesLab, renamed to KarpelesLab/teamrouter. The TeamRouter org is taken by an unrelated product, and GitHub redirects the old repo URL, git remotes included, so the rename is cheap. The repo rename happens in phase 2 together with the container image, since GHCR's image name follows github.repository.
    • Versioning. Phase 1 ships in 1.x. Phase 2, where the new name becomes canonical, is 2.0.0: nothing stops working, but the default install, the default paths and the package name all change, and a major is how that is announced. Removals wait for 3.0.
    • Compatibility window. Every old name keeps working through all of 2.x. The teamclaude binary, the TEAMCLAUDE_* variables and the /teamclaude/* routes are removed no earlier than 3.0, with the cheap ones (/teamclaude/*, config-path fallback, TEAMCLAUDE_CONFIG) possibly kept for good since they cost one line each.

    Phase 0 — reserve and prepare (no release)

    • Publish teamrouter@0.0.1 to npm as a placeholder (README pointing here, no code). Done 2026-09-29. team-router needs no placeholder: npm refuses it as "too similar to existing package teamrouter", for anyone, now that teamrouter exists.
    • Add a Trusted Publisher on npm for teamrouter: owner KarpelesLab, repo teamclaude for now, workflow publish.yml. Done 2026-09-29 (npm trust github, publish + stage publish, same as the old package). After the repo rename in phase 2, update the publisher of both packages to repo teamrouter, or the first publish after the rename fails with an OIDC claim mismatch.
    • Retitle this issue and pin it.

    Phase 1 — the new name works everywhere, the old one stays canonical (1.2.0)

    Implemented in #483.

    Goal: a user, a script or a service can address the proxy as teamrouter before anything is renamed, so phase 2 changes only defaults.

    • src/brand.js: one module holding the display name, the CLI name, the package name, the env prefix, the route prefix, the config basename, the service names and the log prefix, plus the legacy values. Every later phase is an edit here plus the code that reads it.
    • Environment: a single envVar('CONFIG') helper that reads TEAMROUTER_CONFIG first and TEAMCLAUDE_CONFIG second, applied to all 26 variables (tests included). Documented as "TEAMROUTER_*, or TEAMCLAUDE_* until 3.0".
    • HTTP: /teamrouter/* served identically to /teamclaude/* for every control route, the dashboard and the MCP endpoint; the loopback/key gates and the attach/status clients unchanged. The proxy's own clients keep calling /teamclaude/* this phase (so a 1.2 CLI still talks to a 1.1 server).
    • Config path: ~/.config/teamrouter.json is used when it exists, otherwise ~/.config/teamclaude.json; state, crash log and certificates follow the config's basename. No file is moved yet.
    • package.json bin gains teamrouter next to teamclaude (same entry point). Help text mentions both.
    • Docs: a "Renaming to TeamRouter" section in README linking here, and the new spellings listed beside the old ones where they are introduced.

    Phase 2 — TeamRouter becomes canonical (2.0.0)

    • package.json: name teamrouter, description, repository and bug URLs; publish.yml publishes teamrouter; README badges and install line.
    • Old package: @karpeleslab/teamclaude's last release is a shim whose bin/teamclaude execs the teamrouter package it depends on, and whose updater installs teamrouter globally (and uninstalls itself) when it finds it is a global install of the old name. Then npm deprecate @karpeleslab/teamclaude "renamed to teamrouter". src/updater.js's PKG_NAME and its "run manually" hints move to the new name.
    • Log prefix [TeamRouter], dashboard title, TUI/terminal title, help text, service unit descriptions — one sweep, tests updated with it. Release notes say the prefix changed, for anyone grepping logs.
    • Defaults flip: new installs get ~/.config/teamrouter.json, teamrouter-ca.pem etc., teamrouter.service / com.karpeleslab.teamrouter, ~/.local/state/teamrouter.log. Existing installs keep being found through the phase-1 fallback.
    • teamrouter migrate: renames config, state, crash log and certificate files to the new basenames (the CA's contents are untouched, so trust stores stay valid), rewrites the shell alias line, and, when an old service unit is installed, installs the new one with the same config path and removes the old. Idempotent; prints what it did. service install on 2.0 does the unit part on its own when it finds the old unit.
    • Shell alias: alias --install writes teamrouter run under a new marker and removes a line under the old marker.
    • GitHub repo renamed to KarpelesLab/teamrouter; IMAGE_NAME in docker.yml now resolves to ghcr.io/karpeleslab/teamrouter; for the length of 2.x the workflow also pushes the same image to ghcr.io/karpeleslab/teamclaude. Dockerfile labels, /data/teamrouter.json default (with the old path still honoured through TEAMCLAUDE_CONFIG), healthcheck on /teamrouter/status, entrypoint messages.
    • Nix: outputs packages.teamrouter / apps.teamrouter / nixosModules.teamrouter with the teamclaude names kept as aliases; module services.teamrouter with mkRenamedOptionModule from services.teamclaude. The user/group/StateDirectory defaults change only for a system that never set the old options; a renamed option carries its old default so /var/lib/teamclaude keeps working.
    • npm Trusted Publisher records updated to the renamed repo (see phase 0) before the 2.0.0 tag.
    • Docs, README, screenshots, docs/assets: full sweep. Old names appear only in the compatibility section and in the migration guide.
    • Migration guide: docs/migrating-from-teamclaude.md — what changed, what still works, what migrate does, the Docker and Nix specifics.

    Phase 3 — deprecation window (2.x)

    • teamclaude binary prints one notice per day ("this command is now teamrouter") and otherwise works.
    • Config found only at the old path: one notice per start suggesting teamrouter migrate.
    • TEAMCLAUDE_* read with a one-time notice; /teamclaude/* served silently.
    • The proxy's own clients (status, attach, dashboard, MCP hint) switch to /teamrouter/*.
    • Old container image tag stops being pushed at the end of the window (announced in release notes two minors ahead).
    • Internal identifiers (teamclaudeRef, test fixtures, comments) renamed opportunistically as files are touched; no dedicated sweep.

    Phase 4 — removal (3.0.0)

    • Drop the teamclaude bin, the old alias marker handling, the old service-unit detection and migrate's file renames (a 2.x release exists for anyone who needs them).
    • Decide per item whether the free ones stay: /teamclaude/*, TEAMCLAUDE_CONFIG, the old config-path fallback. Default position: keep them, they cost nothing.
    • Remove the compatibility section from the docs; keep the migration guide.

    Risks worth naming

    • Self-update across the package boundary is the one step that can strand people: an old global install only ever runs npm install -g @karpeleslab/teamclaude@latest. The shim release must be published before the first teamrouter release is announced, and be tested against a real global install on Linux and macOS, root and non-root, since updater.js handles both.
    • Trusted Publishing is bound to the repo name; the rename and the publisher update must be one coordinated step, with no version bump merged in between.
    • The CA: never regenerate an existing CA during migration. Renaming the file is safe; a new subject is not.
    • Nix StateDirectory: changing the default silently moves /var/lib/teamclaude for anyone who relied on the default. The renamed-option carry-over above is what avoids it, and it needs a test in the flake check.
  10. changed the title [-]Thinking of a new name[/-] [+]Rename to TeamRouter (tracking)[/+] on Sep 29, 2026
  11. pinned this issue on Sep 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions