Skip to content
Development
Skill

/accounts

Manage multiple Claude Code accounts: add, list, check, launch, and install shell aliases for 10+ isolated CLAUDE_CONFIG_DIR profiles.

From plugin
vexjoy-agent
44363 skills198 agents12 commands83 hooks

Claude Code

$ npx -y skills add notque/vexjoy-agent --skill accounts --agent claude-code

SKILL.md

accounts.SKILL.md
name: accounts
description: "Manage multiple Claude Code accounts: add, list, check, launch, and install shell aliases for 10+ isolated CLAUDE_CONFIG_DIR profiles."
version: 1.0.0
user-invocable: true
argument-hint: "[add <name>|list|check|launch <name>|link [<name>]|install-aliases|remove <name>]"
allowed-tools:
  - Read
  - Bash
  - Edit
routing:
  triggers:
    - "multiple accounts"
    - "multiple claude accounts"
    - "CLAUDE_CONFIG_DIR"
    - "claude account"
    - "switch accounts"
    - "account alias"
    - "claude login"
    - "c1 c2 aliases"
    - "claude max account"
    - "manage accounts"
    - "add claude account"
  pairs_with:
    - deploy
  category: meta
  not_for: "API key rotation (use secrets management), Anthropic billing (use the web console)"

Accounts Skill

Manages multiple Claude Code accounts using isolated `CLAUDE_CONFIG_DIR` directories. One directory per account keeps auth tokens, session history, and settings separate. Shell aliases let the user pick an account before Claude Code starts — no `/logout`/`/login` needed.

Script: `scripts/manage-accounts.py`. Registry: `~/.claude-accounts/accounts.json`.

Quick reference

| Task | Command | |------|---------| | Add an account | `python3 scripts/manage-accounts.py add <name>` | | Add with a named alias | `python3 scripts/manage-accounts.py add work --alias cwork` | | List all accounts | `python3 scripts/manage-accounts.py list` | | Validate all accounts | `python3 scripts/manage-accounts.py check` | | Launch an account | `python3 scripts/manage-accounts.py launch <name>` | | Share skills, agents, commands from `~/.claude` | `python3 scripts/manage-accounts.py link [<name>]` | | Register toolkit hooks in every account's `settings.json` | `./install.sh` (vexinstall `apply`; see `docs/installer-layout.md`) | | Install/update aliases | `python3 scripts/manage-accounts.py install-aliases` | | Preview alias changes | `python3 scripts/manage-accounts.py install-aliases --dry-run` | | Remove an account | `python3 scripts/manage-accounts.py remove <name>` |

Setup flow for 10+ accounts

1. Add accounts

python3 scripts/manage-accounts.py add work --alias cwork
python3 scripts/manage-accounts.py add personal --alias cpersonal
python3 scripts/manage-accounts.py add max1 --alias cm1
# … repeat for as many accounts as needed

Use named aliases (`cwork`, `cpersonal`) rather than sequential ones (`c1`, `c2`) — named aliases are self-documenting and you won't need `list` to remember which is which.

Each `add` creates `~/.claude-accounts/<name>/`, assigns the alias, installs aliases into your shell config, and links the account's `skills/`, `agents/`, and `commands/` to `~/.claude`.

How the toolkit reaches every account

`./install.sh` installs once into `~/.claude`. Every account dir holds symlinks to `~/.claude/skills`, `~/.claude/agents`, and `~/.claude/commands`, so each skill exists once and every account sees the same set. Run `link` (no name means all accounts) to repair an account made before this, or one where Claude Code created its own `skills/` dir. `link` moves non-conflicting content, such as `skills/synced/<account-id>/`, into `~/.claude` first. It stops and reports on a real conflict.

2. Log in to each account

After `add`, the script prints a login command. Run it once per account:

CLAUDE_CONFIG_DIR=~/.claude-accounts/work claude
# inside Claude Code: /login
# exit, then repeat for each account

3. Verify

python3 scripts/manage-accounts.py list
python3 scripts/manage-accounts.py check

`list` shows every account including the default `~/.claude` one. `check` validates that each registered account has credentials and shares the toolkit dirs.

4. Use

Reload your shell once, then use aliases from any terminal:

cwork            # opens Claude Code with the 'work' account
cpersonal        # opens Claude Code with the 'personal' account
cwork --resume   # resumes the last session for the 'work' account

Shell alias format

**Fish** (`~/.config/fish/config.fish`):

function cwork
    set -lx CLAUDE_CONFIG_DIR "~/.claude-accounts/work"
    claude --dangerously-skip-permissions --chrome --remote-control --system-prompt="." $argv
end

**Bash/Zsh** (`~/.bashrc` / `~/.zshrc`):

alias cwork='CLAUDE_CONFIG_DIR="~/.claude-accounts/work" claude --dangerously-skip-permissions --chrome --remote-control --system-prompt="."'

`install-aliases` also writes `cm0`, which starts the default profile (`~/.claude`). It runs `env -u CLAUDE_CONFIG_DIR claude ...`: it clears an inherited value and never sets one, because setting `CLAUDE_CONFIG_DIR` (even to `~/.claude`) moves Claude's state off `~/.claude.json` and breaks the default login. `cm0` is reserved; `add` rejects it.

Every alias and `launch` pass `DEFAULT_CLAUDE_ARGS` from `scripts/manage-accounts.py` before your own arguments. Edit that tuple and re-run `install-aliases` to change them.

The managed block is idempotent — re-run `install-aliases` any time to sync after adding accounts. Use `--dry-run` to preview changes before writing:

python3 scripts/manage-accounts.py install-aliases --dry-run --shell fish

Manual alternative (2 accounts only)

If you have exactly two accounts and prefer not to use the script:

# ~/.config/fish/config.fish
function cwork
    set -lx CLAUDE_CONFIG_DIR "$HOME/.claude-accounts/work"
    claude $argv
end
function cpersonal
    set -lx CLAUDE_CONFIG_DIR "$HOME/.claude-accounts/personal"
    claude $argv
end

Create dirs and log in manually:

mkdir -p ~/.claude-accounts/work ~/.claude-accounts/personal
CLAUDE_CONFIG_DIR=~/.claude-accounts/work claude   # /login
CLAUDE_CONFIG_DIR=~/.claude-accounts/personal claude  # /login

Notes

  • Accounts share the same Claude Code binary and one vexjoy-agent install in `~/.claude`.
  • Usage limits are per-subscription — no automatic failover between accounts.

-

Read more
@notque
Ships withvexjoy-agent

Essays and writing behind this toolkit live at vexjoy.com. VexJoy Agent connects plain-English requests to specialist agents, skills, and workflows. /do selects the knowledge and tools needed for your task.

44363 skills198 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
443
Star history of notque/vexjoy-agent on GitHub, a chart by star-history.com

Other skills on vexjoy-agent.

assessment

assessment

Assessment: read-only inspection, codebase overview, value analysis, health checks, ADR consultation, decision analysis,…

@notque@notqueInstall Skill
business-ops

business-ops

Business operations: strategy, technology, growth, competitive intelligence, support, finance, HR, legal, operations, sales,…

@notque@notqueInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills11d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about accounts.

Which coding agents can use accounts?
accounts installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.