Provider selection phase removed; Anthropic driver→model_id is now hardcoded in the script and non-Anthropic profiles supply provider.env (MODEL_ID, ANTHROPIC_BASE_URL, ANTHROPIC_API_KEY_FILE). Test suite baseline changes 58 → 41 assertions: the 17 dropped assertions covered the removed provider-yaml selection phase, not retained behaviour. Includes refactor-derived memory: decisions (provider architecture, driver enforcement via --model), bash gotchas (read -rp under set -e, never eval user config), process lessons.
3.5 KiB
3.5 KiB
claude-profile engagement modes
Status
Provider selection removed. Model config embedded in profiles via provider.env. 41 dryrun assertions passing.
What's done
| Component | State |
|---|---|
| Profile + mode picker (phases 1-2) | Done, 41 dryrun assertions passing |
5 mode files with escalates_to frontmatter |
Done |
provider.env for non-Anthropic profiles |
Done (~/.claude-oreillyit-minimax/provider.env) |
| Driver→model_id hardcoded for Anthropic | Done (haiku/sonnet/opus/opus-1m) |
active-mode.env written on every launch |
Done (no longer includes CLAUDE_PROVIDER or CLAUDE_TIME_HORIZON) |
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) |
COLORTERM=truecolor exported before launch |
Done |
Architecture change: providers → profiles
Previously, provider selection was a separate interactive phase (profile → mode → provider). Now:
- Anthropic profiles need no extra config — the driver (from mode frontmatter) maps directly to an Anthropic model ID
- Non-Anthropic profiles put a
provider.envfile in their profile directory withMODEL_ID,ANTHROPIC_BASE_URL,ANTHROPIC_API_KEY_FILE, and any extra env vars - Different providers = different profiles (e.g.,
oreillyit-anthropicvsoreillyit-minimax)
Next session — recommended order
- Install the symlink (if not already done):
ln -sf "$HOME/dev/claude/projects/small-scripts/scripts/claude-profile" "$HOME/sbin/claude-profile" - Real-launch test — Anthropic:
claude-profile oreillyit-anthropic --mode chat. Verify:- Mode body appears in system prompt
- Status bar shows
[Haiku] chatformat ~/.claude-oreillyit-anthropic/active-mode.envhas noCLAUDE_PROVIDERorCLAUDE_TIME_HORIZON
- MiniMax launch test:
claude-profile oreillyit-minimax --mode quick. 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
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. provider.envusesANTHROPIC_API_KEY_FILE— the script reads the file and exportsANTHROPIC_API_KEY. The env var name is alwaysANTHROPIC_API_KEY(not configurable per-provider).