ccdeck

Repair Claude and Codex logins across machines

ccdeck's Local network repairs an expired Claude Code or Codex login from another of your machines: pair the two decks on one network, tick the login on both, and within about a minute it is copied back from the machine where it still works.

Claude Code and Codex Checked against ccdeck 3.81.3 on

You will

The film’s lines, in order: Two or three machines. A claude login a week, on the machine you are not sitting at. They find each other and ask to pair. Nothing is shared until you tick it. An expired login is copied back within a minute. Your machines repair each other’s expired logins. It ends on the ccdeck logo, npx ccdeck, “Logins that repair each other.” and ccdeck.dev.

Demo data Your machines repair each other’s expired logins over the local network. Claude and Codex logins, between decks you paired. Drawn as a reconstruction of the deck.

Before you start

Steps

  1. Open Local network on each machine

    Press A, or click the Accounts icon at the top of the stripe on the left. Click Local network, at the panel's foot: Claude's side and Codex's open the same view.

    The Local network view in the Accounts panel. Its header has a back chevron, the title Local network, a map button, a chain-link button, a sliders button and a close button. Below, the switch Sync with paired decks is on, a line reads no deck paired yet, and a paragraph says no other deck has turned up yet, followed by How it works and a Watch · 30 s link.
    Demo data The network status was supplied to the page for this picture.

    Check that Sync with paired decks is on; clicking it on opens the dialog of step 2.

    More about what the deck sends

    While the switch is on, the deck announces its name, fingerprint and port every 30 seconds on UDP port 45317, where every machine on the network can hear it. It also listens for other decks on a TCP port of its own.

    The buttons at the top of the view carry no text: hover over one for its tooltip.

  2. Tick the logins this machine may hand out

    Click the sliders button at the top of the view. Under Share these accounts, click the box of each login this machine may hand out, then Done.

    The dialog This deck on the network. Under Name, appear as travel-laptop and the fingerprint 3f1-a07-c42-9be with copy. Under Share these accounts, two lists: Claude, with me@home.example unticked and work@studio.example ticked, and Codex, with me@home.example unticked. Then two switches: Show paired decks which of these this deck is using, on, and Send the login this deck is using too, on, with the warning The other machine renews its copy even when idle, and whichever renews it second is signed out. Under Pairing, Pair new decks only by invite is off; under Automatic pairing, Ask every deck this one finds and Say yes to every deck that asks are both on. The footer says Changes are saved as you make them, beside a Done button.
    Demo data Only the Claude login work@studio.example is ticked. The network status was supplied to the page for this picture.

    Do this on both machines: a login ticked on one deck arrives on every deck paired with it.

    A paired deck can copy any login you tick, and add here the ones ticked on it. Decks on one network pair on their own: on a network you do not own, turn off Say yes to every deck that asks.

    More about this dialog
    • appear as is this machine's name on other decks: its hostname until you change it. You compare the fingerprint under it in step 3.
    • A login renews once: of two machines on one copy, the second to renew is signed out. The login in use goes out too, and the deck does not warn when a paired deck uses it. Turn off Send the login this deck is using too to keep it until this deck switches away; ticked, it reads in use here · not sent.
    • An account you leave unticked is never named to another deck.
    • A ticked login's row in the Accounts panel carries a share mark naming the decks it is offered to.
    • With Show paired decks which of these this deck is using off, paired decks read current account hidden.
    • Auto-switch, if it is on, can move to a login a paired deck adds here.
  3. Let the two decks pair

    As shipped, nothing to click: within a minute or two, the other machine appears in the list.

    Where Say yes to every deck that asks is off, A deck wants to pair opens instead: click Accept only if its fingerprint matches the other machine's.

    More about a pairing request

    The name and the address come from the other deck; the fingerprint is the key it proved it holds. The other machine shows its own under This deck on the network.

    Decline has the focus, so a stray Enter shares nothing, and declining tells the other deck no. Closing the dialog with × or Esc answers later: the request stays in the Local network view as a row, with accept and decline.

  4. Let an expired login come back

    When a login is rejected here, its row says Login expired. If a paired deck ticks a working copy, the next round copies it here, unless that deck keeps the login it is using. For Codex, this repairs a login copied between the decks, not one you signed in to on each machine.

    Click the other deck's row to see what the next round will do, or why the last one failed.

    The dialog for studio-desktop. This deck runs 3.81.3 on macOS 26.1, arm64; studio-desktop runs 3.81.3 on Windows 11, x64, on another account. Between them, 192.0.2.27:50371, on this network, all logins fine, just now. One lane: work@studio.example, with an arrow from studio-desktop, an amber dot at this deck's end and a green one at studio-desktop's, and the note expired here, repairs next round. A key reads from studio-desktop, and from this deck, to every paired deck, with change. Then Paired Nov 1, 2026, 3d ago, the fingerprint 8d2-5e1-b30-47c, and the buttons Check now and Unpair.
    Demo data work@studio.example has expired here and works on studio-desktop. The network status was supplied to the page for this picture.

    A working login is never replaced. When every online deck's copy of a Claude login has expired, its row says Login expired on all online decks: sign in again on one machine that ticks it, and the next round brings it to the others.

    More about rounds
    • Rounds run once a minute. To ask now, click Check now in the deck's dialog, or the broadcast button at the top of the view.
    • However they paired, a login ticked on one deck is added where missing and repaired where expired. A Codex login that arrives becomes a Codex account of its own. A login that arrives is ticked here too if it came from a deck you accepted, added by address or paired by invite; what a deck that paired on its own brings is not ticked here.
    • Decks that tick the same Claude login share its usage readings, read by one deck: hover over the reading's age to see which.
    • The copy is the other machine's own export, carried sealed to this deck and imported here.
    • An account you remove here can come back the same way, so untick it on that deck first.
  5. Reach a deck that does not turn up

    Decks on two subnets, a guest network or a VPN do not hear each other. Click the chain-link button to open Add a deck.

    The dialog Add a deck. Under By address, an empty field with the placeholder 192.168.1.5:54340, the line This deck calls that address until somebody there accepts, and this deck's own address, 192.0.2.14:52914, with copy. Under With an invite, make one to send, an empty field reading paste one you were sent, and the line Pasting one pairs both decks on the spot — nobody has to accept.
    Demo data The network status was supplied to the page for this picture.
    • By address: type the address the other deck's Add a deck prints, then click add.
    • With an invite: click make one to send, then copy, and send the text. On the other machine, paste it and click join.

    Anyone who has an invite can pair with that deck. It lasts ten minutes and works once.

    More about reaching a deck
    • This deck calls an address you add until somebody there accepts. Its row starts as trying….
    • Whoever pastes an invite dials. When one machine cannot be reached from outside, paste the invite on that machine and make it on the other.
    • If joining fails, the message under the field says why. An invite that has run out needs a fresh one. When nothing answered, make the invite on this machine and paste it on the other.
    • With Tailscale, This deck on the network has a Tailscale section. Click the switch beside Look for my devices to find the decks on your other machines over Tailscale, wherever they are. Only machines signed in to your own Tailscale account are asked, or answered, without a click.
  6. Unpair a deck

    Hover over the deck's row, or move to it with Tab, and click unpair. Then click confirm within four seconds.

    Unpairing and unticking take nothing back. The other deck keeps the logins it has. Only signing in again at Anthropic revokes a login, on every machine.

    More about unpairing

    Unpairing stops future rounds with that deck. The pairing switches do not pair it again: if it asks, the request waits for you. In the deck's dialog, the buttons are Unpair, then Confirm unpair.

If something goes wrong

There is no Local network row

The Accounts panel has not read claude-swap's accounts yet. On its Claude side, click + in the header and sign in, or wait for claude-swap to install.

The view still says “No other deck yet”

Check that Sync with paired decks is on at both ends. If a line under it names a VPN or Tailscale exit node, allow local network access there, or use Add a deck.

The Local network row says “nothing can get in”

This machine's firewall drops what other decks send. Paste an invite made on the other machine: whoever pastes dials out. Or click or let them find this deck on their own under the switch, and follow it.

A paired row says “no answer”

The other machine is off, asleep, or drops what this deck sends. If its announcements arrive, its dialog names two ports to allow there.

Something else? See Troubleshoot ccdeck: status, logs, port and hooks.

Next

All guides Troubleshoot Local network in the README