一键导入
codex-tools-account-manager
Desktop tool for managing multiple Codex accounts, monitoring usage, and providing local API proxy with public access
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Desktop tool for managing multiple Codex accounts, monitoring usage, and providing local API proxy with public access
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Convert attached object images into code-only, animation-ready procedural Three.js models through guided sculpting workflow
Create and manage AI video storyboard projects with automated asset generation through Codex Storyboard workspace
Continue-thinking middleware that detects and handles reasoning truncation in Codex/OpenAI Responses-compatible APIs
Desktop manager for OpenAI Codex CLI with prompt injection, provider switching, and TOML/Auth visualization
Inject unrestricted developer mode instructions into Codex CLI (GPT-5.5) to bypass content filters
Install and use TradingCodex to build Codex-native investment research workflows with fixed-role agents, order approval gates, and local Django service plane
| name | codex-tools-account-manager |
| description | Desktop tool for managing multiple Codex accounts, monitoring usage, and providing local API proxy with public access |
| triggers | ["manage my Codex accounts","switch between Codex accounts","set up Codex API proxy","monitor Codex usage limits","create local Codex API endpoint","expose Codex API to public network","import Codex account tokens","configure Cursor with Codex proxy"] |
Skill by ara.so — Codex Skills collection.
codex-tools is a React + Tauri desktop application for managing multiple Codex accounts, monitoring usage quotas (5h/1week windows), and providing a local OpenAI-compatible API proxy. It supports account switching, automatic usage tracking, and public network exposure via cloudflared.
Primary use cases:
/v1 API proxy that routes requests through Codex accountsDownload the latest .dmg from releases:
# If you get "app is damaged" error:
sudo spctl --master-disable
sudo xattr -r -d com.apple.quarantine /Applications/Codex\ Tools.app
Download the .msi or .exe installer from releases.
Requirements: Node.js 20+, Rust stable
git clone https://github.com/170-carry/codex-tools.git
cd codex-tools
npm install
npm run tauri dev
Build production:
npm run tauri build
Method 1: OAuth Login
Method 2: Upload JSON Files
Import single or multiple .json token files:
{
"access_token": "your_access_token_here",
"refresh_token": "your_refresh_token_here",
"expires_at": 1234567890
}
Method 3: Import from Directory
Point the app to a folder containing multiple .json token files. All valid tokens will be imported in batch.
Method 4: Restore Backup
Import a previously exported accounts.json backup file.
Note: After import, the app restores your current logged-in account to avoid disrupting your active session.
Export all accounts as accounts.json for backup:
{
"accounts": [
{
"id": "account_id_1",
"access_token": "token1",
"refresh_token": "refresh1",
"plan_type": "Pro",
"usage_5h": 450,
"usage_1week": 2000
}
]
}
The UI displays:
Click "Refresh" to manually update, or wait for automatic refresh (default: every 5 minutes).
codex app CLI)Smart Switch: Click "Smart Switch" to automatically select the account with the most remaining quota in the current window.
The proxy provides an OpenAI-compatible /v1 endpoint backed by Codex accounts.
UI:
http://127.0.0.1:8787/v1 (default)Auto-start: Enable "Start proxy on app launch" in settings.
Port:
8787API Key:
Account Selection: The proxy automatically selects the account with the most remaining quota when handling requests.
# Test the proxy
curl http://127.0.0.1:8787/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "gpt-5.4",
"messages": [{"role": "user", "content": "Hello"}]
}'
import openai
openai.api_base = "http://127.0.0.1:8787/v1"
openai.api_key = "YOUR_API_KEY"
response = openai.ChatCompletion.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "Write a hello world in Rust"}]
)
print(response.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "http://127.0.0.1:8787/v1",
apiKey: process.env.CODEX_PROXY_KEY,
});
const completion = await client.chat.completions.create({
model: "gpt-5.4",
messages: [{ role: "user", content: "Explain async/await in JS" }],
});
console.log(completion.choices[0].message.content);
gpt-5.4 (recommended)gpt-5-4 (alias)Add custom models in Cursor: Settings → Models → Add or search model
Cursor blocks private IP addresses (127.0.0.1, localhost, 192.168.x.x, 10.x.x.x) when used as OpenAI base URLs.
Option 1: Cloudflared (Built-in)
https://abc123.trycloudflare.com)https://abc123.trycloudflare.com/v1gpt-5.4Option 2: Named Tunnel
Configure a named cloudflared tunnel for a persistent URL:
# cloudflared config.yml
tunnel: your-tunnel-id
credentials-file: /path/to/credentials.json
ingress:
- hostname: codex.yourdomain.com
service: http://127.0.0.1:8787
- service: http_status:404
Option 3: Remote Reverse Proxy
Deploy a reverse proxy on a public server:
# nginx.conf
server {
listen 443 ssl;
server_name codex.yourdomain.com;
location /v1 {
proxy_pass http://your-local-ip:8787/v1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
/v1gpt-5.4 and click "Add Custom Model"No configuration required. Generates a random .trycloudflare.com URL:
https://random-words-123.trycloudflare.com)Requires a Cloudflare account and tunnel setup:
Enable HTTP/2 in settings for better performance with streaming responses.
Enable in Settings → Editor:
When you switch accounts, the app will:
Enable in Settings → Integrations:
codex-tools can act as a custom provider for CC Switch:
{
"providers": [
{
"name": "codex-local",
"type": "custom",
"base_url": "http://127.0.0.1:8787/v1",
"api_key": "${CODEX_PROXY_KEY}",
"protocol": "responses"
}
]
}
The proxy follows the responses protocol for account selection and load balancing.
sudo spctl --master-disable
sudo xattr -r -d com.apple.quarantine /Applications/Codex\ Tools.app
ssrf_blocked ErrorThis means Cursor is blocking private IPs. Use a public URL via cloudflared or a reverse proxy (see "Cursor Integration").
8787 is already in use: lsof -i :8787expires_at should be in the futurecloudflared binary is installed and accessibleAccounts are stored in the Tauri app data directory:
~/Library/Application Support/com.codex-tools.app/%APPDATA%/com.codex-tools.app/~/.local/share/com.codex-tools.app/Settings are persisted in the same directory as settings.json:
{
"proxy_port": 8787,
"api_key": "your-static-key",
"auto_start_proxy": true,
"editor": "cursor",
"restart_editor_on_switch": true,
"sync_opencode": false,
"cloudflared_http2": true,
"language": "en"
}
codex-tools/
├── src/ # React frontend
│ ├── components/ # UI components
│ ├── hooks/ # React hooks
│ └── lib/ # Utilities
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── main.rs # Entry point
│ │ ├── proxy.rs # API proxy logic
│ │ ├── accounts.rs # Account management
│ │ └── cloudflared.rs # Cloudflared integration
│ └── Cargo.toml
└── package.json
src-tauri/src/main.rs:#[tauri::command]
async fn my_new_feature(param: String) -> Result<String, String> {
// Implementation
Ok(format!("Processed: {}", param))
}
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![my_new_feature])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
import { invoke } from "@tauri-apps/api/tauri";
const result = await invoke<string>("my_new_feature", { param: "test" });
console.log(result);
# Rust tests
cd src-tauri
cargo test
# Frontend tests (if configured)
npm test
Releases are automated via GitHub Actions. To trigger a release:
git tag v0.2.0
git push origin v0.2.0
Builds for macOS (Intel + ARM) and Windows will be created automatically.
MIT License. See LICENSE.