moltbootee
v0.1.0
Published
Standalone multi-provider coder CLI for Qwen and Gemini.
Maintainers
Readme
Moltbootee
Moltbootee is a standalone Node.js CLI for authenticating with Qwen or Gemini and sending coding prompts from the same terminal UX.
Why it differs from Qwen-portal-OAUTH.md
The markdown spec in this workspace describes an older OAuth authorization-code flow with a localhost callback such as http://127.0.0.1:7777/oauth/callback.
When I verified the current live implementation on March 7, 2026, Qwen Code was using a different flow:
- Device-code OAuth at
https://chat.qwen.ai/api/v1/oauth2/device/code - Token polling at
https://chat.qwen.ai/api/v1/oauth2/token - Browser authorization at
https://chat.qwen.ai/authorize?... - Model access through an OpenAI-compatible endpoint, typically
https://dashscope.aliyuncs.com/compatible-mode/v1
Moltbootee follows the current live flow so the CLI is actually usable.
Fast start
node ./bin/molty.jsIf molty is linked onto your PATH, typing just molty starts the interactive chat shell immediately.
molty also supports multiple stored accounts. In the interactive shell, Tab then A cycles to the next stored account.
If Gemini gemini-3-pro-preview is temporarily out of capacity, Moltbootee automatically retries with the next built-in Gemini model instead of dropping the whole shell.
Providers
qwen: Qwen OAuth device-code login pluscoder-modelgemini: Google OAuth localhost callback plus Gemini CLI-style Code Assist models such asgemini-3-pro-preview
Examples:
moltbootee login
moltbootee login gemini
moltbootee login qwen
moltbootee login --provider gemini
moltbootee chat --model gemini-3-pro-preview "Explain this stack trace"
moltbootee models --provider geminiCommands
node ./bin/moltbootee.js help
node ./bin/moltbootee.js login
node ./bin/moltbootee.js login gemini
node ./bin/moltbootee.js login --provider gemini
node ./bin/moltbootee.js login --account work
node ./bin/moltbootee.js accounts
node ./bin/moltbootee.js account use work
node ./bin/molty.js
node ./bin/moltbootee.js models
node ./bin/moltbootee.js chat "Explain this bug"
node ./bin/moltbootee.js skill debug "Find the bug in this stack trace"
node ./bin/moltbootee.js agent reviewer "Review this function"
node ./bin/moltbootee.js skills
node ./bin/moltbootee.js agents
node ./bin/moltbootee.js doctor
node ./bin/moltbootee.js logoutIf you want the command on your PATH, run:
npm.cmd linkThen use:
moltbootee login
moltbootee login gemini
moltbootee login --provider gemini
moltynpm.cmd link now exposes both commands:
moltbootee: full command surfacemoltybootee: alias formoltbooteemolty: chat-first shortcut
Multiple accounts
Accounts are stored in the same OAuth file and one account is marked active.
Examples:
moltbootee login --account personal
moltbootee login --provider gemini --account google
moltbootee login --account work
moltbootee accounts
moltbootee account use work
moltbootee chat --account personal "review this script"Inside molty:
/login geminilogs into Gemini and switches the session/login qwenlogs into Qwen and switches the session/logoutremoves the current account session/accountslists stored accounts/accountshows the current one/account use workswitches directly/provider geminiswitches the session providerTabthenAcycles to the next stored account
Built-in skills
Moltbootee now ships with built-in reusable task skills:
builddebugreviewrefactortestdocsshellsecurityperformanceapiuigitsqlexplain
Use them like:
moltbootee skill debug "Why is this promise never resolving?"
moltbootee chat --skill review "Review this Express middleware"Built-in agents
Moltbootee also includes agent personas:
coderarchitectreviewerdebuggertest-engineerdevopssecurityfrontendbackenddatateacherproduct
Use them like:
moltbootee agent architect "Design a plugin system"
moltbootee chat --agent security "Threat model this OAuth callback flow"Interactive shell
Inside molty, use slash commands:
/help/accounts/account [id]/login [provider]/logout [id]/provider [id]/skills/agents/use-skill <id>/use-agent <id>/model <id>/model qwen/model gemini/model flash/stream on|off/system <text>/status/doctor/history/save [file.md]/clear/retry/models/exit
Storage
OAuth credentials are stored at:
~/.moltbootee/oauth.jsonExample structure:
{
"version": 3,
"active_account_id": "work",
"accounts": {
"work": {
"account_id": "work",
"label": "work",
"provider": "qwen",
"access_token": "....",
"refresh_token": "....",
"token_type": "Bearer",
"expires_at": 1772861575000,
"resource_url": "https://dashscope.aliyuncs.com/compatible-mode",
"created_at": "2026-03-07T10:00:00.000Z",
"updated_at": "2026-03-07T10:00:00.000Z"
}
}
}Request format
Qwen uses the OpenAI-compatible POST /chat/completions shape:
{
"model": "coder-model",
"messages": [
{
"role": "user",
"content": "Write a tokenizer in Rust"
}
],
"stream": true,
"temperature": 0.2
}The CLI sends:
Authorization: Bearer <access_token>Content-Type: application/json
Gemini uses the same Google OAuth and Code Assist backend shape as the official Gemini CLI, including generateContent and streamGenerateContent against https://cloudcode-pa.googleapis.com/v1internal.
Notes
- The model alias
qwen-portal/coder-modelis accepted and normalized tocoder-model. gemini-3-pro-preview,gemini-3-flash-preview,gemini-2.5-pro,gemini-2.5-flash, andgemini-2.5-flash-liteare built in as official Gemini CLI model ids.moltbootee login geminiandmoltbootee login qwenare shorthand for provider-specific login.- In
molty,/model qwenand/model geminiswitch provider and default model together. - If the access token is near expiry, Moltbootee refreshes it automatically.
- If refresh fails with an invalid refresh token, the CLI clears the local token file and requires a new login.
moltywith no arguments drops directly into the prettier interactive shell.
