minimax-401-diagnostic
Diagnose MiniMax 401 auth errors in AO workers. A redacted or invalid MINIMAX_API_KEY is one possible cause; verify current provider errors and configuration before identifying the cause or changing settings.
- License 许可
- MIT
- 最近更新
- 2026-11-14
- Stars
- ★ 6
- Forks
- 0
01 前言 Front Matter
- name
- minimax-401-diagnostic
- context
- A redacted or invalid MINIMAX_API_KEY in the launchd configuration is one known cause of 401 errors. A /login prompt may follow a provider 401, but verify the current response and configuration before concluding that credentials or model routing caused it. Do not swap models as a substitute for diagnosis.
- description
- Diagnose MiniMax 401 auth errors in AO workers. A redacted or invalid MINIMAX_API_KEY is one possible cause; verify current provider errors and configuration before identifying the cause or changing settings.
- when_to_use
- Use when: (1) an AO worker tmux pane shows 'Please run /login · API Error: 401' or 'login fail: carry the API secret key', (2) worker is stuck waiting for input despite having 'minimax' model config, (3) /ms surfaces another 401 incident. Do NOT use for general auth issues — this skill is specifically for the MiniMax proxy 401 + /login prompt stall pattern.
- allowed-tools
- [ "Bash", "Read", "Write", "Edit" ]
02 资源文件 4
- 参考文档_sudowork_meta.json293 B
- 脚本scripts/cloud_media.py4.9 KB
- 脚本scripts/requirements-cloud.txt33 B
- 脚本scripts/subtitles.mjs4.6 KB
03 SKILL.md 正文
MiniMax 401 Diagnostic
Common symptom pattern
This sequence is one possible failure pattern; verify each step from current provider output and worker configuration.
- AO worker starts → hits MiniMax proxy → proxy returns
401 Unauthorized - Claude Code intercepts 401 → shows
/loginprompt in tmux pane - Worker appears to hang ("waiting for input") but is actually blocked on
/login tmux capture-paneshows:Please run /login · API Error: 401orlogin fail: carry the API secret key in the 'Authorization' field- Config shows
agent: minimaxormodel: MiniMax-M2.7— this alone does not establish the cause
Quick Diagnosis
Step 0 — Plist template check (do this FIRST)
# Check for unsubstituted @VAR@ tokens in the installed plist
# If any exist, bash expands them to empty → 401 on every API call
python3 - "$HOME/Library/LaunchAgents/ai.agento.lifecycle-all.plist" <<'EOF'
import plistlib, re, sys
content = open(sys.argv[1]).read()
vars = re.findall(r'@[A-Z_][A-Z0-9_]*@', content)
if vars:
print(f'BAD: Unsubstituted tokens: {sorted(set(vars))}')
else:
print('OK: No unsubstituted @VAR@ tokens')
EOF
# If BAD: re-run setup to regenerate plist with real env vars:
bash scripts/setup-launchd.sh lifecycle
# Then verify:
bash scripts/test-launchd-env.sh
Unsubstituted @VAR@ tokens establish that the plist template was not rendered.
Use the repository's launchd setup workflow, then continue diagnosis if the
401 persists.
python3 - "$HOME/Library/LaunchAgents/ai.agento.lifecycle-all.plist" <<'EOF'
import plistlib, re, sys
with open(sys.argv[1], "rb") as source:
data = plistlib.load(source)
variables = re.findall(r"@[A-Z_][A-Z0-9_]*@", str(data))
key = data.get("EnvironmentVariables", {}).get("MINIMAX_API_KEY", "")
print("BAD: unsubstituted plist template tokens" if variables else "OK: no template tokens")
if key == "__OPENCLAW_REDACTED__":
print("BAD: MINIMAX_API_KEY is the redacted sentinel")
elif key:
print("OK: MINIMAX_API_KEY is configured; value not displayed")
else:
print("BAD: MINIMAX_API_KEY is missing")
EOF
Do not print the plist or retrieve the keychain item's value. For safe credential handling, follow cloud-ops-credential-guard and the repository's launchd setup workflow.
Full Diagnostic Steps
Step 1: Capture the worker's tmux pane
# Find the tmux session for the stuck worker
tmux list-sessions | grep <worker-name>
# Capture the stuck state
tmux capture-pane -pt <session>:0.0 -S -100
Look for: Please run /login, API Error: 401, login fail, MINIMAX_API_KEY
Step 2: Check the plist's MINIMAX_API_KEY without displaying it
python3 - "$HOME/Library/LaunchAgents/ai.agento.lifecycle-all.plist" <<'EOF'
import plistlib, sys
with open(sys.argv[1], "rb") as source:
data = plistlib.load(source)
key = data.get("EnvironmentVariables", {}).get("MINIMAX_API_KEY", "")
if key == "__OPENCLAW_REDACTED__":
print("BAD: redacted sentinel")
elif key:
print("OK: configured; value not displayed")
else:
print("BAD: missing")
EOF
Step 3: Check keychain for the real key
# Check presence without leaking credential to terminal
security find-generic-password -s MINIMAX_API_KEY >/dev/null 2>&1 && echo "Keychain: MINIMAX_API_KEY present" || echo "Keychain: MINIMAX_API_KEY missing"
This check reports presence only. Never retrieve or print the keychain value.
Step 4: Fix — use the repository's launchd setup workflow
# Use the repository's launchd setup to repair the service configuration
bash scripts/setup-launchd.sh lifecycle
Do not copy a credential into a plist or shell variable manually. Follow the repository's launchd setup workflow and the credential-handling rules in cloud-ops-credential-guard.
Step 5: Reload the launchd service
launchctl bootout gui/$(id -u)/ai.agento.lifecycle-all
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.agento.lifecycle-all.plist
launchctl kickstart -k gui/$(id -u)/ai.agento.lifecycle-all
Step 6: Verify workers recover
sleep 5
pgrep -f "lifecycle-worker" | wc -l # Should show 12+ workers
tmux list-sessions | grep ao- # Should show active sessions, not stuck on /login
Verify Before Changing the Model
You might see model: MiniMax-M2.7 in the config and think "just switch to Claude Opus." A model change does not establish or repair the cause of an authentication error. First:
- Verify that the current provider response is a 401 and identify which route returned it.
- Confirm the active worker configuration and credential-presence status without displaying credential values.
- Change model routing only when the current configuration and provider evidence show it is the cause.
Anti-Patterns
- WRONG:
ao spawn --agent codexto "fix" the 401 — masks the symptom, wrong model for the task - WRONG:
export MINIMAX_API_KEY=...in a running shell — doesn't fix the launchd service's env - WRONG: Changing
modelin agent-orchestrator.yaml without evidence that routing is the cause - WRONG: Killing and respawning the worker without fixing the plist — it will hit the same 401 immediately
Recurring Incident History
| Date | Worker | Manifestation | Root Cause |
|---|---|---|---|
| 2026-04-15 | PRs #454, #453, #452, #450, #444 | 5 PRs stuck with 401 | __OPENCLAW_REDACTED__ in plist |
| 2026-05-01 | ao-4449 (PR #511) | /login + 401, stuck at "Brewed for 3m 13s" |
__OPENCLAW_REDACTED__ in plist |
Files to Check
~/Library/LaunchAgents/ai.agento.lifecycle-all.plist— MINIMAX_API_KEY valuescripts/setup-launchd.sh— how MINIMAX_API_KEY is substituted into the plist~/.hermes_prod/config.yaml— MiniMax credential source
Claim Class
This skill covers a recurring credential-related failure pattern. Verify the current error and active configuration before applying its remediation.
04 同仓库更多 Skills
instinct
Use when the user invokes /instinct or /in, or asks to "message Instinct", "ask Instinct", "tell Instinct", "check Instinct", or read replies from the configured peer assistant. iMessage first, WhatsApp Web as fallback.
hr
Compatibility alias for history-resume; produce the same fresh-state, provenance-aware resume briefing.
history-resume
Resume briefing for the current repository branch or worktree using fresh state and admitted history sources.
grok
Alias for the canonical grokbot browser conversation workflow; /grok talks to the Grok bot the same way /dot talks to Dot.
codexa-bench
Compare `codexa` and normal `codex` on a fair split of comparable work by default; use `--strict` for duplicate runs of the exact same task.
frontend-design
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.