Introduces provider files (`data/claude-profile/providers/*.yaml`) that bundle model ID, API base URL, API key source, and extra env vars. Phase 2.5 (provider selection) added between mode selection and launch, with a default derived from the mode's driver field so existing Anthropic usage is unchanged. Ships 5 providers: anthropic-haiku/sonnet/opus/opus-1m and minimax-sonnet. MiniMax token decrypted from agent-runtimes SOPS env, stored at ~/.claude-secrets/minimax-auth-token. Adding new providers = one YAML file, no script changes. 58 dryrun tests passing (up from 37). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.0 KiB
3.0 KiB
claude-profile engagement modes
Status
Provider support added. 58 dryrun assertions passing. MiniMax token provisioned. NOT yet exercised in a real claude launch.
What's done
| Component | State |
|---|---|
| Profile + mode + provider picker (phases 1-3) | Done, 58 dryrun assertions passing |
5 mode files with escalates_to frontmatter |
Done |
| 5 provider files (4 Anthropic + minimax-sonnet) | Done (data/claude-profile/providers/) |
active-mode.env written on every launch |
Done (includes CLAUDE_PROVIDER) |
| MiniMax token decrypted + stored | Done (~/.claude-secrets/minimax-auth-token, 600 perms) |
statusline.sh — [Sonnet→Opus] deep · topic format |
Done (reads CLAUDE_CONFIG_DIR/active-mode.env) |
Root CLAUDE.md — auto-select project from cwd or CLAUDE_PROJECT |
Done |
Preset support (presets.yaml) |
Done (example at data/claude-profile/presets.yaml.example) |
Next session — recommended order
- Install the symlink (if not already done):
ln -sf "$HOME/dev/claude/small-scripts/scripts/claude-profile" "$HOME/sbin/claude-profile" - Real-launch test — Anthropic first:
claude-profile oreillyit --mode chat(press Enter to accept default anthropic-haiku). Verify:- Mode body appears in system prompt
- Status bar shows
[Haiku] chatformat ~/.claude-oreillyit/active-mode.envhasCLAUDE_PROVIDER=anthropic-haiku
- MiniMax launch test:
claude-profile oreillyit --mode quick --provider minimax-sonnet. Verify:- Claude starts and is responsive
ANTHROPIC_BASE_URLis set to MiniMax endpoint (check via a "what model are you?" prompt)
- If anything's off,
tests/test-claude-profile.shis the fast feedback loop
Adding new providers
Drop a new data/claude-profile/providers/<name>.yaml file. For third-party providers:
- Decrypt credentials and store the raw token in
~/.claude-secrets/<provider>-auth-token - Provider YAML needs:
base_url,api_key_env,api_key_file, and anyextra_envflags the provider requires
Remaining follow-ups (from FUTURE.md)
bg-model-callwrapper —deepandhybridmodes reference it but it doesn't exist yet. Own spec + script entry.switch modeskill — mid-session re-pick writes newactive-mode.envfor the next/clear. Lower priority.
Key gotchas
- statusline.sh is not in any git repo — lives at
~/.claude/status/statusline.sh. Changes are live immediately; no commit needed. - Root
~/dev/claude/CLAUDE.mdis also not git-tracked — changes there are also immediately live. CLAUDE_CONFIG_DIRmust be exported by claude-profile beforeexec claude. The statusline hook inherits it from the claude process environment.read -rpunderset -eexits silently if stdin is not a TTY. The picker guards all interactive reads with[[ -t 0 ]]. Seememory/gotchas-bash.md.- MiniMax token is in
~/.claude-secrets/— gitignored, plaintext, 600 perms. The SOPS-encrypted version in agent-runtimes is for container agents only.