You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* fix: brew tap-trust recovery, antenna boot blink, export secret redaction
Three independent fixes to the updater, welcome banner, and session export.
Homebrew untrusted-tap recovery:
- Homebrew 5.0's HOMEBREW_REQUIRE_TAP_TRUST refuses third-party taps until
`brew trust <tap>` is run once, so the in-app updater's `brew upgrade`
failed with only a generic "run manually" hint. Parse both the hard
"Refusing to load ... from untrusted tap" refusal and the soft
"Skipping ... not trusted" warning; on an interactive terminal, offer to
run `brew trust` and retry the upgrade once, otherwise print the exact
remediation. Also handles the silent-no-op case where an untrusted tap is
skipped during `brew update`. Documented in both READMEs.
Antenna boot animation:
- Replace the welcome logo's infinite SGR slow-blink with a bounded boot
animation: blink the antenna ball 7 times after the banner prints, then
pin it steady. Gated to real terminals tall enough to keep the antenna
row on screen; skipped under reduced motion and non-TTY. E2E PTY helper
runs with reduced motion so the animation adds no latency there.
Export secret redaction:
- A tool result (grep/cat over a .env) could surface a secret value into the
exported transcript in plaintext. Add a conservative redact_secrets() that
replaces the value of secret-named keys (password/token/api_key/secret/...)
with [REDACTED], wired as a chokepoint in both the markdown and YAML export
builders. Non-secret keys (token_count, usernames, ports) are untouched.
* docs: add changelog entries for updater, export redaction, antenna blink
* test: document benign-keys behavior of redact_secrets
Keys where the secret hint is not immediately before the separator
(token_count, access_key_id) must not be redacted. Lock that intentional
behavior in per CodeRabbit's suggestion on #120.
* test: make brew-warning string concatenation explicit
GitHub code-quality flagged implicit string concatenation of adjacent
literals inside the list arguments to _homebrew_untrusted_tap (a common
missing-comma footgun). Use explicit '+' so the single-line intent is
unambiguous to readers and the scanner.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,10 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
16
16
## Unreleased
17
17
18
+
-**The in-app updater recovers from Homebrew's untrusted-tap refusal.** Homebrew 5.0 (`HOMEBREW_REQUIRE_TAP_TRUST`) refuses to load formulas from third-party taps until `brew trust <tap>` is run once, which made the in-app `brew upgrade` fail with only a generic "run manually" hint. The updater now detects both the hard `Refusing to load … from untrusted tap` refusal and the soft `Skipping … not trusted` warning, offers to run `brew trust pythoughts-labs/pythinker` and retry the upgrade once on an interactive terminal, and otherwise prints the exact remediation. It also catches the silent no-op where an untrusted tap is skipped during `brew update` and `brew upgrade` exits 0 without advancing the version.
19
+
-**Session exports redact secrets surfaced by tool output.** A tool result (e.g. `grep`/`cat` over a `.env`) could write a secret value into an exported transcript in plaintext. `/export` now redacts the value of secret-named keys (`password`, `token`, `api_key`, `secret`, …) to `[REDACTED]` in both the markdown and YAML formats, while leaving non-secret keys such as `token_count`, usernames, and ports intact.
20
+
-**The welcome logo's antenna blinks a fixed number of times on launch, then settles.** Replaces the terminal's indefinite slow-blink with a bounded boot animation — the antenna ball blinks seven times after the banner prints and then holds steady. It is skipped under reduced motion, on non-interactive output, and when the terminal is too short to keep the antenna row on screen.
21
+
18
22
## 0.41.0 (2026-06-11)
19
23
20
24
- **New `/goal` command — goal-driven execution that loops until verified.** `/goal <objective>` sets a persistent thread goal the agent pursues across turns, restarts, and context compaction until it is verifiably complete. It kicks off immediately with a success-criteria derivation prompt and is re-injected each turn with fidelity rules (no scope-shrinking, no easier-to-test substitutes) and an evidence-based completion audit — completion may only be claimed after every requirement is proven against current state. The new root-only `UpdateGoal` tool marks the goal `complete` (after that audit) or `blocked` (after a strict three-strike audit) and stops the reminders; opt-in `goal.auto_continue` (new config table, default off, `max_continuations` 1–10, capped at 3) drives automatic continuation turns toward the goal until it is marked, a tool call is rejected, or the cap is reached, with a wrap-up instruction on the final continuation. Subcommands: `view`, `pause`, `resume`, `clear`. Objectives are injected as untrusted data, never as higher-priority instructions.
0 commit comments