v3.29.0
ruvnet/ruflov3.29.0Jul 14, 2026by ruvnet
AI Summary
A minor release improving the statusline promo UX and performing a critical security key rotation.
Key Highlights
- New CLI subcommands 'ruflo funnel accept' and 'ruflo funnel open' for promo control.
- Statusline row improvements including OSC 8 hyperlinks and readable domain suffixes.
- Windows console-flash mitigations via 'windowsHide' and increased cache TTL.
- Security: Rotated helpers-signing key (RUFLO_HELPERS_PUBKEY v2) after accidental leak.
- Shortened promo disclosure grace period from 72h to 24h.
New Features
- Funnel CLI subcommands
- Statusline hyperlink UX
- Helpers signing key rotation
Full Release Notes
## Highlights **Two new user-facing CLI subcommands** to control the statusline promo row: - **`ruflo funnel accept`** — skip the 24h disclosure grace so promo rotation starts immediately on the next render (instead of waiting a full day after first-render). - **`ruflo funnel open`** — open the currently-shown promo URL in your default browser. Terminal-independent, so it works on hosts that don't route clicks to the terminal's link handler (VS Code integrated terminal, some Windows configs, etc.). **Statusline row 3 (promo) improvements:** - Whole row wrapped in one OSC 8 hyperlink — click anywhere on the row opens the URL. - Visible `(domain)` suffix so the destination is readable and copyable even where OSC 8 doesn't render. - Bright-white bold styling on the "manage: <command>" tail so it visually reads as "shell command to type". - Ellipsis on truncation instead of silent mid-word chop. **Windows console-flash mitigations** (partial — the primary cause is upstream at [anthropics/claude-code#70200](https://github.com/anthropics/claude-code/issues/70200); we mitigate what our own subprocess calls contribute): - `windowsHide: true` on 3 subprocess spawn sites: statusline CLI delegation, statusline safeExec helper, hook-handler detached background refresh. - Statusline cache TTL bumped 60s → 300s, so the outer wrapper spawn (Claude Code's, not ours) fires ~5× less often. Promo/insight rotation still runs on its own tighter 20s clock. - New ruflo tracking issue: **#2669** (mirrors upstream #70200, #14828, #66540). ## Security **Helpers-signing key rotated** (`RUFLO_HELPERS_PUBKEY` v2). The previous private key was accidentally captured in a Claude Code session transcript today. Mitigation done at rotation time: - New Ed25519 keypair generated. - Old GCP Secret Manager version **destroyed** (not just disabled). - New pubkey baked into `src/init/helper-signing.ts` and `scripts/verify-helpers.mjs`. - Helpers manifest re-signed with the new key before publish. **Upgrade urgency:** Users on ruflo ≤ 3.28.0 still trust the OLD (now-leaked) pubkey. An attacker with the leaked key could forge a helpers manifest that verifies on those old installs. **Upgrade to v3.29.0 as soon as possible** — new installs pick up the new pubkey and validate only manifests signed with the new key. ## Compatibility - Semver **MINOR** (3.28.0 → 3.29.0) — additive CLI subcommands, no breaking changes. - Key rotation is atomic per-version — no dual-pubkey transition needed. Each CLI version's baked pubkey validates the manifest shipped with that same version. ## PRs merged - **#2671** — feat(funnel,statusline): accept + open subcommands, whole-row-clickable promo, Windows flash mitigations - **#2673** — security: rotate helpers-signing key (RUFLO_HELPERS_PUBKEY v2) ## Tracking issues - **#2669** — Windows cmd/console flash (upstream anthropics/claude-code#70200) ## Install ```bash npx ruflo@latest init # or npm install -g @claude-flow/cli@3.29.0 ```