# 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 1. **Install the symlink** (if not already done): ```bash ln -sf "$HOME/dev/claude/small-scripts/scripts/claude-profile" "$HOME/sbin/claude-profile" ``` 2. **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] chat` format - `~/.claude-oreillyit/active-mode.env` has `CLAUDE_PROVIDER=anthropic-haiku` 3. **MiniMax launch test:** `claude-profile oreillyit --mode quick --provider minimax-sonnet`. Verify: - Claude starts and is responsive - `ANTHROPIC_BASE_URL` is set to MiniMax endpoint (check via a "what model are you?" prompt) 4. **If anything's off**, `tests/test-claude-profile.sh` is the fast feedback loop ## Adding new providers Drop a new `data/claude-profile/providers/.yaml` file. For third-party providers: - Decrypt credentials and store the raw token in `~/.claude-secrets/-auth-token` - Provider YAML needs: `base_url`, `api_key_env`, `api_key_file`, and any `extra_env` flags the provider requires ## Remaining follow-ups (from FUTURE.md) 1. **`bg-model-call` wrapper** — `deep` and `hybrid` modes reference it but it doesn't exist yet. Own spec + script entry. 2. **`switch mode` skill** — mid-session re-pick writes new `active-mode.env` for 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.md` is also not git-tracked** — changes there are also immediately live. - **`CLAUDE_CONFIG_DIR` must be exported** by claude-profile before `exec claude`. The statusline hook inherits it from the claude process environment. - **`read -rp` under `set -e` exits silently if stdin is not a TTY.** The picker guards all interactive reads with `[[ -t 0 ]]`. See `memory/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.