原始内容
pi-sub-aliases
Use multiple Claude and ChatGPT subscriptions in Pi without logging in and out of the
built-in anthropic and openai-codex providers.
Pi has one OAuth slot per provider id. This extension creates named provider aliases. Each alias reuses Pi's built-in OAuth flow and live model catalog, but stores credentials separately.
Example result:
anthropic-work/claude-opus-4-8
anthropic-personal/claude-sonnet-4-6
openai-codex-work/gpt-5.5
The active alias is also exposed to extension status integrations such as
pi-powerline-footer under the status key sub-aliases:
claude-work · opus-4.8
codex-work · gpt-5.5
Requirements
Tested against pi 0.80.x (the extension adapts the pi-ai 0.80 OAuth interface).
Stock @earendil-works/pi-ai does not re-export the built-in OAuth providers
(anthropicOAuth, openaiCodexOAuth) from its compat module. The installed pi-ai
must be patched to re-export them (e.g. a pi-repatch script). Without the patch,
the affected provider's aliases are skipped and reported with:
@earendil-works/pi-ai/compat does not export anthropicOAuth; run pi-repatch
Install
pi install npm:pi-sub-aliases
For local development:
pi install /absolute/path/to/pi-sub-aliases
Config
Create ~/.pi/agent/sub-aliases.json:
{
"aliases": [
{ "slug": "work", "label": "Work", "handle": "claude-work" },
{ "slug": "personal", "label": "Personal", "handle": "claude-me" },
{ "provider": "openai-codex", "slug": "work", "label": "Codex Work" }
]
}
Optional project override (merged over global config in trusted projects):
.pi/sub-aliases.json
Rules:
provideris"anthropic"(default) or"openai-codex"slugcreates the provider id:anthropic-<slug>oropenai-codex-<slug>labelis shown during OAuth login (defaults to the title-cased slug)handleis used by integrations such aspi-fusion; defaults toclaude-<slug>orcodex-<slug>per provider- later entries with the same
(provider, slug)replace earlier ones (this is how project config overrides global); the same slug may be reused across providers - handles must be unique across global and project config files
Model metadata (context window, max tokens, cost) is always cloned from Pi's live model registry at startup — never hardcoded, no config overrides.
Use
Login once per alias:
/login anthropic-work
/login openai-codex-work
Select models normally:
/model anthropic-work/claude-opus-4-8
/model openai-codex-work/gpt-5.5
pi-fusion can use handles as shorthand:
{ "model": "claude-work/opus-4.8" }
For openai-codex aliases the extension also keeps the Codex environment
(OPENAI_CODEX_*, CHATGPT_ACCOUNT_ID) in sync with the selected alias account, so
pi-sub-bar tracks the active subscription.
Migration
From pi-claude-alias
- Package renamed: replace
npm:pi-claude-aliaswithnpm:pi-sub-aliasesin~/.pi/agent/settings.json. - Config file renamed: move
~/.pi/agent/claude-alias.jsonto~/.pi/agent/sub-aliases.json(same schema;provideris optional and defaults toanthropic). There is no legacy fallback. - Footer status key renamed:
claude-alias→sub-aliases. - Provider ids are unchanged (
anthropic-<slug>), so stored OAuth credentials andmodel-router.jsonpatterns keep working — no re-login needed.
From @carlosgtrz/pi-codex-aliases
- Replace
npm:@carlosgtrz/pi-codex-aliaseswithnpm:pi-sub-aliasesand declare your Codex accounts insub-aliases.jsonwith"provider": "openai-codex". - Provider ids are unchanged (
openai-codex-<slug>), so stored OAuth credentials keep working — no re-login needed. - Model metadata is cloned live from Pi's registry, so alias models no longer drift from the built-in catalog.
Non-goals
No proxy. No router. No failover. No quota logic. Just separate OAuth slots with useful names.
Attribution
The Codex stream wrapper (src/codex-stream.ts) and Codex env sync
(src/codex-env.ts) are derived from
CarlosGtrz/carlosgtrz-pi-extensions
(MIT).