Sno Station
Sno Station is your agents' workstation: open-source software that turns the AI agents you already run into one squad on your own machine. Two heads are better than one, and they get better with every
Use several Claude and ChatGPT/Codex subscription accounts in Paseo: choose one per agent, switch a chat to another account, and see every account's limits
Translation pending
PluginsTypeScript · JavaScriptGitHub @dutchakdevOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Use several Claude and ChatGPT/Codex subscription accounts in Paseo. Choose an account for each agent, switch the account of an existing chat, and see the limits of every saved account.
Listed in the Paseo plugin directory and on paseo.cafe.
/account name, the switch button the chat offers when a limit runs out, or automatic switching in that case, if you turn it on./account work in a chat, or pick Make “Work” the Codex default in the Command Center (⌘K).The interface is in English. Reset dates use the viewing device's local time zone. See installation for remote hosts and verification for the scope of recorded testing.
Paseo plugins are trusted, unsandboxed code with the daemon user's access to files, processes, credentials, and network. Account Switcher reads your Claude and Codex sign-ins to identify accounts and check their limits, and checking limits sends no model messages. The only message it sends to an agent is Continue., after you switch from the row a used-up limit adds to the chat, or after an automatic switch that followed a failed turn. The commands below target the local daemon; for another host, see remote daemons.
On Paseo 0.11.0 or a later release, including 0.12, 0.13 and 0.14, install the reviewed version from the plugin directory:
paseo plugin add dutchakdev/account-switcher
npm gets a new version before the directory approves it:
paseo plugin install npm:paseo-plugin-account-switcher
Paseo 0.8 to 0.10 and the 0.11.0 betas refuse the manifest's icon field. They can stay on 0.5.0, the last release for them, installed from GitHub. Paseo then runs the manifest's dependency and build steps on the daemon:
paseo plugin install dutchakdev/paseo-plugin-account-switcher --ref v0.5.0
To review or change the source first, install a local checkout.
paseo plugin ls account-switcher shows running, then open Accounts in the sidebar or Accounts and limits in the Command Center. An app without Paseo's current screen API shows the same Accounts through the older surface API.Select Add, choose a provider, name the account, and select Add and sign in. The official CLI runs in the background; the plugin opens a sign-in dialog without creating a terminal or workspace.
| Where you use Paseo | How to open sign-in |
|---|---|
| Desktop app | The dialog tries to copy the link. Paste it into your usual browser; Copy link retries copying. |
| Web or native mobile client | The dialog tries to open the browser. Open browser and Copy link remain available. |
If clipboard access is unavailable, expand Show sign-in link and copy its selectable text.
#, into Authorization code and select Finish sign-in.After sign-in, the plugin verifies the account and refreshes its limits. To check again, use Check sign-in in the account's ⋯ menu. Enter passwords only on the provider's official page.
Closing the dialog leaves Continue sign-in on the account. Cancel sign-in stops the process before releasing the profile. While sign-in is active, the account cannot be applied, made the default, or deleted. A failed start leaves the account available for Retry sign-in without creating a duplicate. Plugin reloads stop pending sign-ins; start again afterward.
The ⋯ menu contains refresh, check sign-in, default, sign-in, rename, and remove actions. Account rows show identity, default status, and counts of current and pending agents.
A new Claude or Codex agent starts on its provider's default account. It starts on another signed-in account of the same provider only when the provider's own data shows the default would fail:
The replacement is the account with the largest percentage left in its tightest account-wide window; accounts without limit data come after the measured ones. Percentages do not compare the size of different plans. If every account is ruled out, the agent starts on the default, as before. Choosing an account for a chat yourself always takes precedence, and nothing changes when no default is set.
To keep the default binding, for example when one provider holds both work and personal subscriptions, choose Always use the default under that provider in Accounts. New agents then start on the default or not at all, as in 0.6.0. Start on another account is the initial choice; the control appears once a provider has a default and more than one account.
Limits come from the plugin's last reading, so creating an agent does not wait for a provider's limits. It does run the official sign-in check for the default, and for each further account it tries.
Before signing in again, switch agents away from that profile. To remove a managed account, clear its default and all current or pending selections first. Removal asks for confirmation. Archived agents retain their account binding for resume; restore and switch them before removing the account. Current CLI accounts cannot be removed.
Type /account in the message field followed by an account name, or default for the provider's default account. An account literally named Default takes precedence over the keyword. Names match without regard to case, and a unique beginning is enough: /account sec finds Second. Several matches or none report the accounts to choose from.
/account applies it at once./account alone, or the account already in use, opens the switcher.The Command Center (⌘K) lists Make “name” the Claude default and Make “name” the Codex default for every signed-in account that is not already its provider's default.
The chat records the account in a quiet line:
These lines live in the daemon's memory, like other plugin timeline rows: they stay through reconnects and refetches, but not a daemon restart. They are best effort: when the host refuses a line, the switch still stands and the plugin log records why.
You can select an account during a response, but it is never applied automatically. Cancel selection clears it. All accounts opens the full account list.
Apply reloads the agent through Paseo while preserving its native session ID. The plugin confirms the new account only after startup confirmation and successful reload. If a switch fails once the reload has started, it attempts to restore the previous account. A switch refused before that, for example because the agent is responding or the account needs sign-in, changes nothing, and the selection stays for a later Apply. Account not confirmed means the running account could not be established; select an account and apply again.
Plans differ in the models they offer. A free ChatGPT plan, for example, refuses a model that only paid plans have, and the agent's next message fails with model_not_found. For Codex, the plugin reads each account's models with its limits; when the selected account's plan does not offer the agent's model, the dialog says so before Apply and lists the models it does offer. Claude does not report its models this way, so the dialog shows no such warning for Claude.
Different agents can use different accounts in parallel. Avoid sending from another client during Apply: Paseo's native reload has no atomic lock against a concurrent message, which could be interrupted.
When a Claude or Codex turn ends because its account's limit is used up, the plugin reads the agent's account again. Codex reports such a turn as failed. Claude reports it as completed, like any other turn, so for a completed Claude turn the plugin first looks at its last reading of the account and reads again only when that already shows the account used up; an ordinary turn costs no provider request. The chat gets a row only if the new reading proves the account is used up: an account-wide limit such as the 5-hour or weekly window is at 100% with its reset still ahead, or Codex reports that ordinary usage is not allowed. Other failures, such as a network error, a tool failure, a plan without the agent's model, or a limit of a single model, add nothing. A Claude account with extra usage turned on keeps answering past a full 5-hour window, paid from its monthly spend allowance; while that allowance has room, a completed Claude turn adds nothing. One used-up account gets one row: later turns on the same account before the same reset add none, and the next time it runs out it is offered again.
The offered account is the one a new agent would try instead: a signed-in account of the same provider, not in the middle of a sign-in, not used up, and for Codex with a plan that offers the agent's model. If several qualify, the one with the most room is offered. Agents on Current CLI are included. An agent started while no Paseo app was open, by a schedule or paseo run, is included too: the plugin confirms its account from the launcher's startup receipt first. An agent whose account nothing confirms gets no row. Nothing is offered while account switching is off for that provider (Enable in Accounts).
The button switches the chat through the same checks as Apply and /account (the agent is idle, no permission request is pending, the new account is confirmed at startup), then sends the agent Continue. The row follows: Switching from Work to Second…, then Switched from Work to Second. If the switch is refused or fails, the row says Could not switch to Second with the reason:
To skip the click, set When a limit runs out during a chat to Switch automatically under a provider in Accounts. The control appears for a provider with more than one account, and the default is Offer a switch. The chat then switches and continues by itself, and the row reads Switched automatically from Work to Second. After a completed Claude turn the plugin switches but does not send Continue., because the turn may really have finished; the row reads Switched automatically from Work to Second. Your next message runs on Second. The plugin limits this to one automatic switch per turn and three per agent per hour, and never moves an agent back to an account it left within that hour; when a limit stops it, the chat shows the usual offer instead. Like the other chat lines, these rows live in the daemon's memory and are best effort.
Each account shows all reported limit windows, including zero usage. Measured windows show used and remaining percentages and a reset countdown. Codex usage-based workspace plans show their monthly credit allowance as a limit, with the credits left; Claude enterprise seats show their monthly spend allowance the same way. Expand details for exact local reset times, durations, fetch/check timestamps, and windows without data.
Monitoring sends no model messages. The official CLIs own authentication and token refresh; a native Codex limits request may refresh its token. A Claude access token expires when no Claude session uses the account for several hours. Before a limits check finds it expired, the plugin runs claude -p /usage --no-session-persistence under that account, at most every 10 minutes. This local command lets the CLI renew the token, with no model message and no saved session. Sign in again appears only when the CLI cannot renew it. See monitor details for scheduling, identity verification, and cache behavior.
The plugin also reports to Paseo's own Usage view, as the source Account Switcher. A daemon without usage sources skips this; Accounts shows the same limits.
Plugin directory, npm, and Git installations update with paseo plugin update account-switcher, which shows the new revision and asks for approval.
Before disabling or removing the plugin, select Disable in Accounts to restore the original provider commands. Removal does not delete the separately stored account data. See update and removal for a local checkout, the full steps, and recovery.
This project supports same-provider switching with subscription accounts. Switching is manual, except for the opt-in automatic switch after a turn stopped on a used-up limit. Rotating accounts to spread usage, API-key authentication, and Claude-to-Codex transfers are outside its scope. Provider authentication and limit formats can change with CLI versions; unsupported data is shown as unavailable.
Automated tests cover the implementation with synthetic accounts and provider responses. They do not establish real A → B → A switching, compaction, child-session behavior, or rewind for your accounts. Recorded checks and remaining live verification are in verification.
Licensed under the MIT License. See third-party notices for bundled dependencies.