diff --git a/memory/.reflection-state.json b/memory/.reflection-state.json new file mode 100644 index 0000000..5030a65 --- /dev/null +++ b/memory/.reflection-state.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "last_run": "2026-07-02T02:57:34Z", + "processed": { + "2026-04-12.002212.md": { + "md5": "7bc1c971149fdd04f528e432fd8a1e16", + "processed_at": "2026-07-02T02:57:34Z" + }, + "2026-04-12.003747.md": { + "md5": "17fafffbfc6735c777b2fc71fdd463d2", + "processed_at": "2026-07-02T02:57:34Z" + }, + "2026-04-24.075643.md": { + "md5": "894d58fc7e390bb6af39e71d5219cc3f", + "processed_at": "2026-07-02T02:57:34Z" + } + } +} diff --git a/memory/decisions.md b/memory/decisions.md index 44906e9..5d28577 100644 --- a/memory/decisions.md +++ b/memory/decisions.md @@ -79,3 +79,11 @@ Claude Code reads `ANTHROPIC_API_KEY` for its credential regardless of provider. ## Decouple WezTerm theme name from profile name via `wezterm-theme` file Profile names changed (e.g. `oreillyit` → `oreillyit-anthropic`) but the WezTerm theme table still keys on the old short names. Each profile dir ships a one-line `wezterm-theme` file that maps the new profile name to the theme key, so WezTerm theme emission can fire immediately after profile selection without renaming themes. + +## Driver→model_id mapping and context-window facts + +Reference facts baked into `claude-profile`: `haiku → claude-haiku-4-5-20251001`, `sonnet → claude-sonnet-4-6`, `opus → claude-opus-4-6`, `opus-1m → claude-opus-4-6[1m]`. Sonnet 4.6 has a fixed 200k context window with no extended-context option; `opus-1m` denotes Opus running with the 1M-token window. + +## claude-profile state files live under `$CLAUDE_CONFIG_DIR` + +`active-mode.env` (current mode/driver), `last-mode` (picker default, falls back to `quick`), and `presets.yaml` (per-profile) all live under `$CLAUDE_CONFIG_DIR`. The path is stable across `/clear`, so `active-mode.env` survives and is read by both the CLAUDE.md session-start (project auto-select) and `statusline.sh`. Known v1 limitation: parallel sessions against the same profile race on `active-mode.env` (last writer wins). diff --git a/memory/log/2026-04-24.075643.md b/memory/log/2026-04-24.075643.md new file mode 100644 index 0000000..427b22d --- /dev/null +++ b/memory/log/2026-04-24.075643.md @@ -0,0 +1,19 @@ +# Session Log -- 2026-04-24 + +## Summary +Simplified claude-profile by removing the provider selection phase and time horizon question. Provider config now embedded in profile directories via `provider.env`. Also moved WezTerm theme emission to fire immediately after profile selection. + +## Decisions +- Decision: Embed provider config in profiles via `provider.env` rather than shared YAML files -- Rationale: profiles are already the natural isolation boundary; different providers = different profiles. Eliminates an entire interactive phase. +- Decision: Hardcode Anthropic driver→model_id mapping, use `provider.env` only for non-Anthropic -- Rationale: Anthropic is the default path and needs zero config. Only non-standard providers need extra config. +- Decision: Decouple WezTerm theme name from profile name via `wezterm-theme` file -- Rationale: profile names changed (e.g., `oreillyit` → `oreillyit-anthropic`) but WezTerm theme table still uses old names. One-line file in profile dir maps the new name to the theme key. +- Decision: Always use `ANTHROPIC_API_KEY` as the env var for non-Anthropic provider keys -- Rationale: Claude Code reads this env var; simplifies provider.env to not need a configurable key name. + +## Gotchas Discovered +- **[claude-profile]** Symptom: `CLAUDE_TIME_HORIZON` was asked interactively and written to `active-mode.env` but never consumed by any downstream tool -- Fix: removed entirely (dead code) +- **[claude-profile]** Symptom: `CLAUDE_PROVIDER` in `active-mode.env` was only read by the statusline for non-Anthropic short-name display -- Fix: removed from both; provider distinction is now at the profile level + +## Key Context +- 41 dryrun tests pass after all changes +- Files outside the repo were also updated: `~/.claude/status/statusline.sh` (removed CLAUDE_PROVIDER parsing), `~/.claude-*/wezterm-theme` files created, `~/.claude-oreillyit-minimax/provider.env` created +- The `custom-claude-skills/skills/switch-mode/SKILL.md` was updated to remove CLAUDE_PROVIDER and CLAUDE_TIME_HORIZON from its active-mode.env template diff --git a/memory/process-lessons.md b/memory/process-lessons.md index 42fd89f..60fc038 100644 --- a/memory/process-lessons.md +++ b/memory/process-lessons.md @@ -39,3 +39,11 @@ The Edit tool tracks which files have been explicitly read via the Read tool — ## `/context` "Memory files" aggregates two distinct systems The "Memory files" category reported by `/context` combines project `CLAUDE.md` instructions and auto-memory `MEMORY.md`. They have different purposes (project conventions vs cross-session learnings) and live in different places. When auditing context size, check both rather than assuming a single source. + +## Grep all consumers before removing or keeping a launcher field + +Before keeping an interactive prompt or launcher-written env var, grep every consumer across the filesystem (`grep -r CLAUDE_TIME_HORIZON ~`). Two vars (`CLAUDE_TIME_HORIZON`, `CLAUDE_PROVIDER`) accumulated in `active-mode.env` unused; auditing consumers revealed the dead code and pointed to every downstream file needing a matching edit (skill templates, statusline). + +## Resolved: claude-profile ↔ CLAUDE.md / statusline integration questions + +Open questions from the 2026-04-12 design session are now resolved: (1) CLAUDE.md session-start reads `active-mode.env` and auto-selects the project from cwd or `CLAUDE_PROJECT`, skipping the interactive picker; (2) the status-line script is bash at `~/.claude/status/statusline.sh` (not in any git repo, changes are live immediately); (3) mode switching became the `/switch-mode` slash command / `switch-mode` skill, not a hook-matched literal phrase. Still open: MiniMax M2 agentic-CLI availability and the token-budget comparison for the inverted architecture (tracked in FUTURE.md, not memory).