53 commits since v0.3.65. 84 files changed, +7943 / -3582 lines.
✨ Features
824d955cDirect model switching everywhere:/models <provider/model>switches directly on every channel (#467)8c9daf66Apply-to-scope selector: choose session or global scope for direct model switches (#468)549e1f6cHeadless model switching:opencrabs session set-modelfor non-interactive use (#465)91c0fce0force_default on reload: pushes the default provider/model pair to all sessions (#466)f9ed6748Config drift warnings: startup warnings when a config value silently drifts (#477)c9d315e6Native rich blocks on Telegram: final responses render as native rich blocks, fixing fence mangling (#476)03a37312Flow header wall-clock duration: finished/failed/timeout states carry the total turn time (#486)cb080298Bash comments as flow status: line-start comments in a bash command surface as live flow status (#488)e8d5e701Full status preview: the status preview uses the whole last human-readable line, no truncation (#487)0c419e31Per-group open mode: opt-inopen = trueso a trusted group serves all members (#495)c32a24b9Skill candidates from tool sequences: RSI detects recurring tool sequences as skill candidates (#504)333e540fSlash commands from repeated asks: RSI proposes slash commands from repeated user requests (#504)816da9a4RSI staleness indicator: mission-control staleness indicator plus a provider-creation fallback (#469)
🔧 Fixes
f830b50cMid-turn slash command runs: a slash command landing mid-turn injects as its own directive, not a foldable follow-upaddc9d40Status-first live header: the live flow header leads with the status message, bold, count and duration italic (#509)0449c27aAtomic reaction turn claim: the reaction handler claims the turn viatry_begin_turn(#508)8520724bAtomic turn claim: follow-ups can no longer fork a parallel turn (#501)8447e8cfText answers a pending question: a mid-turn text message resolves a blockedfollow_up_question(#500)4753f659Smarter loop-break: nudge before breaking identical tool-call loops, catch interleaved repeats (#507)1d52cfccRetry transient model errors: temporary model-unavailability 4xx now classified as retryable (#505)97b4a266No re-proposing settled skills: RSI stops re-proposing already applied or rejected skills and commands (#502)aa06a08dUnified separator: single•bullet everywhere, the·middle-dot dropped (#499)14cedfd4Live-only preview: the activity preview no longer sticks to the settled Finished header (#498)00bb3eb3/start in the menu: onboarding is discoverable from the Telegram command menu (#497)5c37fee1Headless tools execute:run/agent --auto-approveroute through the real tool loop (#492)223761cfMid-turn narration folds: narration joins the flow block instead of a standalone bubble (#490)22f2a780Resume narration folds: the resume streaming placeholder is gated on an open flow block (#490)d266f72bFolded narration capped: a length cap keeps the flow block compact (#489)de8bd62eStatus from raw command: bash status comments read from the raw command, not the decorated hint (#488)86434a5bFollow-ups keep the block: mid-turn follow-ups no longer shred the flow block (#475)1e343780Reaction sees the answer: the folded answer is reclaimed before the reaction decision (#478)4ed8ea28Fences disqualify rich: code fences disqualify the native rich markdown path (#476)6655e161Fence disqualification reverted: tables render rich again (#476 revert)f66806edCollapsed summary shows progress: latest-activity preview in the collapsed rich flow summary0d0d90b1Phantom completion hardening: closed anchor evasions and verb gaps behind live fake completions (#463, #464)4b35f880Rust 1.97 clippy clean: cleared the new stable clippy lints
📖 Documentation
d016c06bfix the staledetach_flow_for_followupcomment to match #475 behavior (#496)f483b268drop the staleworking_directoryconfig key, note per-session cwd (#479)dfde946fdocument the #461 model-switching family in the README7c842b45add direct file links to the README documentation section0db045d2add Context7 config and documentation references858f5761add the morning-recap cron template script
🧹 Miscellaneous
1498a6d6refactor(telegram): move the unified delivery path to delivery.rs (#471 phase 4)0552e728refactor(telegram): resume rides the shared deliver_final_response (#471 phase 3)4a511c4erefactor(telegram): extract deliver_final_response from handle_message (#471 phase 2)b5e619d8refactor(telegram): move crash-recovery resume to resume.rs (#471 phase 1)3f1ef23drefactor(telegram): move keyboard builders to keyboards.rs (#471 phase 1)392c5adarefactor(telegram): move send helpers to intermediates.rs (#471 phase 1)6c68ac86refactor(telegram): move incoming-media helpers to media.rs (#471 phase 1)2e030adfrefactor(telegram): move markdown/HTML transforms to markdown.rs (#471 phase 1)fa6ffd24refactor(telegram): move flow-block machinery to flow.rs (#471 phase 1)3d5c7378refactor(telegram): one shared post-loop display drain for both handlers (#470)
📊 Stats
- 53 commits since v0.3.65
- 84 files changed, +7943 / -3582 lines
- Tests/clippy not run this pass (skipped per request)
Full Changelog: v0.3.65...v0.3.66