Switch between Claude Code accounts and clear developer caches, from the macOS menu bar.
# Add to your Claude Code skills
git clone https://github.com/RamitVishwakarma/JanusLast scanned: 9/29/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-09-29T10:25:25.451Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how Janus compares with popular alternatives.
Janus is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by RamitVishwakarma. Switch between Claude Code accounts and clear developer caches, from the macOS menu bar. It has 123 GitHub stars.
Yes. Janus passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/RamitVishwakarma/Janus" and add it to your Claude Code skills directory (see the Installation section above).
Janus is primarily written in Swift. It is open-source under RamitVishwakarma on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh Janus against similar tools.
No comments yet. Be the first to share your thoughts!
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
A small macOS app for people who keep more than one Claude Code or Codex account, and who have noticed how much disk the tools they use every day quietly hold onto.

One click moves the live session, and the account it displaces is saved first.
It does three things, one tab each:
With Homebrew:
brew install --cask --no-quarantine ramitvishwakarma/tap/janus
Or download the latest .dmg from
Releases, open it,
and drag Janus to Applications. The build is universal, covering Apple silicon
and Intel.
The app is signed ad-hoc rather than with a paid Apple Developer certificate, so
macOS quarantines it on first launch and says the developer cannot be verified.
--no-quarantine tells Homebrew to skip that flag. After a download by hand,
clear it once:
xattr -dr com.apple.quarantine /Applications/Janus.app
open /Applications/Janus.app
To have it start with the Mac, add it under System Settings → General → Login Items, or:
osascript -e 'tell application "System Events" to make login item \
at end with properties {path:"/Applications/Janus.app", hidden:true}'
Needs the Xcode Command Line Tools (xcode-select --install). Xcode itself is
not required.
git clone https://github.com/RamitVishwakarma/Janus.git
cd Janus
./build.sh
open Janus.app
Janus cannot sign in for you, so the first account has to be signed in already. Press Save current account and it is captured.
For the second: sign out of Claude Code, sign in as the other account, come back,
and press Save current account again. From then on both are in the list and
switching between them is one click, or ⌘S from the menu bar.

The menu bar item shows which account is live. The window shows both accounts with how much of their five-hour and weekly limits each has spent. That is the number to look at when the decision you are making is which account has room left.
Claude Code asks Anthropic for your limits while a session is running and writes the answer into its own settings file. Janus reads that file for nothing, which is what every row shows to begin with. For the account that is signed in, those figures are as current as your last session. For an account that is not, they are whatever it had spent at the moment you switched away — frozen, and increasingly wrong the longer it sits there.
Refresh goes and asks. It calls Anthropic's usage endpoint once per account,
with the tokens that account already has saved, and shows what comes back. That
is the only network request Janus makes for Claude, it goes nowhere but
api.anthropic.com and platform.claude.com, and nothing is sent that is not
the account's own credentials. The Codex tab's equivalent is described under
Codex. The line under each pair of bars says which of the two you are
looking at, so a fetched figure and a three-day-old one are never confusable.
Two things happen on their own, without the button:
A limit past its reset shows a dash until it has been fetched. Guessing at the replacement would be worse than admitting there isn't one yet.
Saved accounts are renewed as needed: an access token that has expired is refreshed before the usage request, and the tokens that come back are written into the vault before anything else is attempted with them. The signed-in account's token is never renewed by Janus, because a running Claude Code session is holding it, and rotating it underneath that session is how a sign-in that was working stops working. Claude Code keeps that one fresh itself.
A signed-in Claude Code session is two things on disk:
| Part | Where it lives |
|---|---|
| OAuth tokens | Keychain entry Claude Code-credentials |
| Everything else | ~/.claude.json |
Switching is just moving that pair. Janus copies the live pair into storage
under the account it belongs to, then writes the other account's saved pair into
place. Saved tokens go into the login keychain under the service Janus;
saved settings go to ~/Library/Application Support/Janus/, readable only
by you.
Three things follow from that, and are worth knowing before you trust it:
Every switch fetches the replacement session before it touches anything live, and saves the session it is about to displace before overwriting it. If a step fails, say a declined keychain prompt or a missing saved session, the Mac is left signed into the account it was already signed into.
Signing in outside the app is handled too. If the live account is not one Janus knows about, it is saved as a new account rather than overwritten, because those credentials exist nowhere else.
The Codex tab does for Codex what the Claude tab does for Claude Code. It works the way codex-switcher does, by swapping one file:
| Part | Where it lives |
|---|---|
| The whole sign-in, tokens included | ~/.codex/auth.json (or $CODEX_HOME/auth.json) |
Saved sign-ins go into the login keychain under the service Janus Codex, one
entry per account holding that account's entire auth.json; the list of accounts
is ~/Library/Application Support/Janus/Codex/roster.json. The live file is
written owner-only (0600) and renamed into place, so Codex never reads half of
one.
To add accounts: save the one Codex is signed into, delete ~/.codex/auth.json,
run codex login as the next one, and save that too. Do not use codex logout
for this. It revokes the sign-in at OpenAI, so the copy Janus just saved stops
working with it. Deleting the file tells OpenAI nothing. ChatGPT sign-ins are listed by
email with their plan beside it, and the same email in two workspaces, a
personal plan and a team plan say, is two accounts. API-key sign-ins work too,
listed by the key's last four characters.
Things specific to Codex:
auth.json. One that is still running keeps the
account it started with, and can write it back over the one you switched to.
Janus says so after a switch when it can see Codex running.chatgpt.com for each
account's five-hour and weekly limits, the request Codex makes for /status,
renewing a saved account's tokens at auth.openai.com first if they have run
out. The signed-in account is never renewed, for the same reason as on the
Claude side.cli_auth_credentials_store = "keychain"), there is no
auth.json to swap, and the tab will say nobody is signed in.The Storage tab measures a fixed list of cache directories: package managers, build caches, browser and editor caches. Two rules keep it boring:
FileManager.trashItem moves things to the Trash.