Skip to content

Commit 70cfa82

Browse files
committed
chore(release): prepare 0.42.0
1 parent 5e50508 commit 70cfa82

8 files changed

Lines changed: 73 additions & 40 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ GitHub Releases page; `0.8.0` is the new starting line.
1515

1616
## Unreleased
1717

18+
## 0.42.0 (2026-06-12)
19+
1820
- **Adversarial branch review hardening.** A multi-agent review pass confirmed and fixed: committed-but-clean isolation worktrees are now retained (commits ahead of the creation base count as changes — they were previously orphaned on cleanup); foreground shell commands and relative-path file edits now resolve against the agent's work dir, so worktree isolation actually binds them (host exec gained a `cwd` argument); safe mode now also disables the read-only-command prompt elision; locally parallel-safe MCP/tools run in parallel in the same-step gate; worktree add/remove serializes per repo. Behavior notes: same-step tool calls without `supports_parallel` now serialize deterministically (previously fully concurrent), and text-mode error diagnostics moved to stderr — capture `2>&1` or use `--output-format stream-json` if you scraped stdout.
1921
- **The agent now knows its own permission posture.** A live permissions-state reminder renders the enforced profile, safe-mode/yolo/auto flags, mutation/network allowances, session-approved actions, and the shell gate's command-shaping rules — re-emitted exactly when the posture changes (/yolo, /auto, /trust, new approvals) instead of the model discovering policy through denied tool calls.
2022
- **Edits recover from whitespace and smart-punctuation drift.** StrReplaceFile no longer hard-fails with "old string not found" when the only mismatch is trailing whitespace, indentation, or smart quotes/dashes: a graduated line-window ladder relocates the edit, replaces the actual file slice (preserving CRLF endings), and names the relaxation it used in the tool message. Multiple fuzzy hits without replace_all still error, so ambiguity is never silently resolved.
@@ -32,6 +34,8 @@ GitHub Releases page; `0.8.0` is the new starting line.
3234
- **Inline `/command` references get acted on, not just explained away.** When a message mentions a slash command mid-sentence (e.g. "your `/goal` today is to `/plan` and build the page"), the command doesn't auto-run — but the agent no longer leads its reply by reporting it as failed. The per-turn reminder and the system prompt now steer the agent to act on the intent: call the real `EnterPlanMode` tool for `/plan` (clarified as a genuine, callable tool so models stop doubting it exists), pursue the described objective for `/goal`, load `/skill:<name>` via `ReadSkill`, and apply equivalent guidance for other commands — only surfacing how to invoke the literal command when genuinely needed.
3335
- **The "thinking" shimmer no longer runs while a foreground command does.** When the agent started a long-running foreground process — a dev server via `npm`/`docker`, a watch task — the shimmering verb spinner ("Working…/Thinking…") kept animating for the whole turn, implying the agent was busy when it was really just awaiting the subprocess. The spinner is now suppressed while any foreground tool is mid-execution; the tool card's own animated running marker (and its streaming output) carries the liveness, so the shimmer means "the agent is thinking" again and reappears the moment the command returns.
3436

37+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.42.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
38+
3539
## 0.41.0 (2026-06-11)
3640

3741
- **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.

README.md

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
5050
5151
---
5252

53-
## 🆕 What's New in 0.41.0
53+
## 🆕 What's New in 0.42.0
5454

55-
- **Goal-driven execution: new `/goal`, `/best-practices`, and `/learn` commands.** `/goal <objective>` sets a persistent thread goal the agent pursues across turns, restarts, and compaction until it is verifiably complete — with an evidence-based completion audit, a root-only `UpdateGoal` tool to mark it `complete`/`blocked`, and opt-in `goal.auto_continue` to loop automatically toward it. `/best-practices` (alias `/bp`) injects engineering-discipline guidance now also shipped always-on in the default prompt, and `/learn` distills session lessons into per-project memory.
56-
- **Statusline v2: a full redesign of the shell footer.** Colored segments with a gradient context bar, working spinner, live token speed, session cost/budget, thinking-effort badge, git diff counts, elapsed time, and a clock — all fail-closed and tunable via the new `/statusline` command (persisted under `[tui.statusline]`), with ASCII fallback and narrow-width graceful degradation.
57-
- **Agentic orchestration hardening.** Parallel subagents and background tasks get distinctive codenames, foreground `RunAgents` batches run concurrently and roll up child RISKS/BLOCKERS, the review pipeline decomposes large diffs and adversarially verifies every finding, and restricted-profile subagents are now offline, secret-scrubbed, and workspace-jailed by default — enforced at execution time, not just prompted.
58-
- **TUI polish.** Flicker-free streaming on synchronized-output terminals, inline ghost-completion for slash commands, monotonic tool-call rows, shell error briefs that surface the failing command's output, and no more transient `<invalid>` flashes or raw-mode hangs on exit.
55+
- **Parallel coding agents are truly isolated.** `isolation="worktree"` is now enforced, not just recorded: each background write agent runs in its own git worktree of HEAD and reports its worktree path with a diff summary so changes merge deliberately, while foreground shell commands and relative-path edits resolve against the agent's own work dir. Worktrees with commits ahead of their base are retained instead of orphaned, and worktree add/remove serializes per repo.
56+
- **The agent knows its own permission posture — and stops asking when it shouldn't.** A live permissions-state reminder renders the enforced profile, safe-mode/yolo/auto flags, mutation/network allowances, and shell-gate rules, re-emitted exactly when the posture changes. Provably read-only commands (`ls`, `git status`) no longer interrupt the root agent with an approval dialog, via a fail-closed positive allowlist.
57+
- **Edits recover from whitespace and smart-punctuation drift.** `StrReplaceFile` no longer hard-fails when the only mismatch is trailing whitespace, indentation, or smart quotes/dashes — a graduated line-window ladder relocates the edit, preserves CRLF endings, and names the relaxation it used. Ambiguous fuzzy matches still error rather than silently resolving.
58+
- **MCP servers are controllable.** Per-server `enabledTools`/`disabledTools` arrays in `mcp.json` scope a noisy server down to the tools you want, and a new `mcp.client.startup_timeout_ms` (default 30s) means a hung server can no longer stall every turn — `/mcp` now shows one actionable line per failed server.
59+
- **Quality of life.** `/model` switches now carry the conversation forward via a plain-text summary instead of starting fresh; typo'd config keys warn with their dotted path and source file (`PYTHINKER_STRICT_CONFIG=1` escalates to a startup error); project-scope hooks load only after `/trust`; the in-app updater recovers from Homebrew's untrusted-tap refusal; `/export` redacts secret-named values; inline `/command` references get acted on; and the thinking shimmer no longer animates while a foreground command runs.
5960

60-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.41.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
61+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.42.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
6162

6263

6364
---
@@ -147,7 +148,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
147148

148149
| Platform | Recommended install | Artifact source |
149150
|---|---|---|
150-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.41.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.42.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151152
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
152153
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
153154
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -175,7 +176,7 @@ pythinker # start the interactive TUI
175176

176177
### 🪟 Windows — native installer
177178

178-
`PythinkerSetup-0.41.0.exe` is a signed* Inno Setup wizard. Installs per-user
179+
`PythinkerSetup-0.42.0.exe` is a signed* Inno Setup wizard. Installs per-user
179180
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
180181
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
181182
the change. **No UAC prompt.**
@@ -186,13 +187,13 @@ irm https://pythinker.com/install.ps1 | iex
186187
187188
# Or manually download the installer + checksum from the Releases page,
188189
# verify with Get-FileHash, then run:
189-
.\PythinkerSetup-0.41.0.exe
190+
.\PythinkerSetup-0.42.0.exe
190191
191192
# Open a fresh PowerShell
192193
pythinker --version
193194
```
194195

195-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.41.0.exe /ALLUSERS`
196+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.42.0.exe /ALLUSERS`
196197
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
197198

198199
**Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -250,26 +251,26 @@ attached to every GitHub Release.
250251

251252
```sh
252253
# Debian / Ubuntu (x86_64)
253-
sudo dpkg -i pythinker-code_0.41.0_amd64.deb
254+
sudo dpkg -i pythinker-code_0.42.0_amd64.deb
254255
sudo apt-get install -f # only if dpkg reports missing deps
255256

256257
# Debian / Ubuntu (ARM64)
257-
sudo dpkg -i pythinker-code_0.41.0_arm64.deb
258+
sudo dpkg -i pythinker-code_0.42.0_arm64.deb
258259

259260
# Fedora / RHEL / openSUSE (x86_64)
260-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.x86_64.rpm
261-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.x86_64.rpm.sha256
262-
sha256sum -c pythinker-code-0.41.0.x86_64.rpm.sha256
261+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm
262+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.x86_64.rpm.sha256
263+
sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256
263264
# Fedora / RHEL:
264-
sudo dnf install ./pythinker-code-0.41.0.x86_64.rpm
265+
sudo dnf install ./pythinker-code-0.42.0.x86_64.rpm
265266
# openSUSE:
266-
sudo zypper install ./pythinker-code-0.41.0.x86_64.rpm
267+
sudo zypper install ./pythinker-code-0.42.0.x86_64.rpm
267268

268269
# Fedora / RHEL (aarch64)
269-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.aarch64.rpm
270-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.41.0/pythinker-code-0.41.0.aarch64.rpm.sha256
271-
sha256sum -c pythinker-code-0.41.0.aarch64.rpm.sha256
272-
sudo dnf install ./pythinker-code-0.41.0.aarch64.rpm
270+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm
271+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.42.0/pythinker-code-0.42.0.aarch64.rpm.sha256
272+
sha256sum -c pythinker-code-0.42.0.aarch64.rpm.sha256
273+
sudo dnf install ./pythinker-code-0.42.0.aarch64.rpm
273274
```
274275

275276
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -278,8 +279,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
278279
**Verify before install:**
279280

280281
```sh
281-
sha256sum -c pythinker-code_0.41.0_amd64.deb.sha256 # Debian/Ubuntu
282-
sha256sum -c pythinker-code-0.41.0.x86_64.rpm.sha256 # Fedora/RHEL
282+
sha256sum -c pythinker-code_0.42.0_amd64.deb.sha256 # Debian/Ubuntu
283+
sha256sum -c pythinker-code-0.42.0.x86_64.rpm.sha256 # Fedora/RHEL
283284
```
284285

285286
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /

docs/en/guides/getting-started.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Run the native installation script to complete the installation. The canonical e
3131
curl -fsSL https://pythinker.com/install.sh | bash
3232

3333
# Pin a specific version
34-
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.41.0
34+
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.42.0
3535

3636
# Custom prefix (defaults to $HOME/.local)
3737
curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
@@ -44,7 +44,7 @@ On Windows, run the PowerShell bootstrap. It downloads the native installer, ver
4444
irm https://pythinker.com/install.ps1 | iex
4545
```
4646

47-
You can also download `PythinkerSetup-0.41.0.exe` manually from the [latest release](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
47+
You can also download `PythinkerSetup-0.42.0.exe` manually from the [latest release](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
4848

4949
Verify the installation:
5050

docs/en/release-notes/breaking-changes.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ This page documents breaking changes in Pythinker Code releases and provides mig
44

55
## Unreleased
66

7+
## 0.42.0 (2026-06-12)
8+
9+
No configuration or session-data breaking changes. Two behavior changes may affect scripted or automated use:
10+
11+
- **Text-mode error diagnostics now go to stderr.** Previously they were interleaved on stdout. If you scrape `pythinker` stdout in text mode for error text, capture `2>&1` or switch to `--output-format stream-json`.
12+
- **Project- and local-scope hooks now require trusting the project.** A cloned repo's `.pythinker/config.toml` hooks no longer auto-run at session start — run `/trust` once per project to record a durable decision (stored user-side in `trusted_projects.json`). Until then, those hooks are stripped with a warning naming the fix.
13+
714
## 0.41.0 (2026-06-11)
815

916
No breaking changes. This release is compatible with 0.40.1 user configuration, native installs, and session data.

0 commit comments

Comments
 (0)