github Gentleman-Programming/gentle-ai v2.7.0

4 hours ago

v2.7.0 — We Count, We Assess, We Ask Less of You

v2.7.0 is main at 4e4470b3, 100 non-merge commits after v2.6.0, published through the v2.7.0-rc.1 promotion source. That cut is deliberate: two later merges (#4327, #4344) change how agents are allowed to run remote commands, and we want to live with them a little longer before they reach a stable. They ship next.

Provenance: this release contains the 4e4470b3 bytes. ci.yml is green on that exact commit. checksums.txt covers all six archives, including gentle-ai-review-provider-contract-1.2.0.tar.gz and gentle-ai-release-provenance-v1.tar.gz, and its Minisign signature carries the trusted comment repo=Gentleman-Programming/gentle-ai;tag=v2.7.0. The Windows Full Suite was red on this commit for test-only reasons; the fix landed on main right after (#4348, #4351) and ships in the next release.

What's new

Gentle AI now counts how many people use it, and tells you exactly what it sends

Until now we had no idea how many installs were out there. We wanted a number we could show, without turning the tool into something that watches you. So the rule is simple: the first time you run install, update, or sync after upgrading, Gentle AI prints one line saying it will send anonymous usage statistics, and sends nothing. From then on it sends one "I exist" event per installation and at most one "still here" heartbeat per day.

What is in an event: the version, your operating system and CPU type, which agents and components you installed, whether receipt-driven development is on, and a few counters (syncs, reviews, SDD phases). What is never in an event: file paths, repository names, user names, machine names, or your IP address, which the collector does not even store. Every field is a fixed choice from a list, so there is nowhere for free text to leak in. The sending happens in a separate background process with a three-second budget, so it can never slow down or break the command you ran.

Turn it off any time with gentle-ai telemetry disable, or by setting DO_NOT_TRACK, GENTLE_AI_TELEMETRY=0, or CI=true. A machine that opted out never even writes a telemetry file. gentle-ai telemetry status shows you what applies, and docs/telemetry.md lists every field. The collector that receives the events and the Grafana dashboard that reads them live in this repository too (cmd/gentle-telemetry, deploy/telemetry/), so anyone can audit the whole path. (#4309, #4310, #4317, #4313, #4319)

The review tells you how risky a change is before anything starts

Receipt-driven development used to be all or nothing: either a full four-lens review ran, or you got nothing. Now gentle-ai review assess --json looks at a change and answers one question, "how careful should we be with this?", with passive, medium, or high, without opening a review or touching anything (#4297, #4295).

The orchestrator guidance in every supported agent uses that answer to decide how much checking a delegated task deserves (#4298, #4296). When the review switch is on and the review closes, the worker who wrote the code runs the checks and the native review is the independent pair of eyes. When the switch is off, or you said "not this time" to the review prompt, the risk tier decides whether a separate verifier runs at all (#4305, #4304). Small, harmless changes stop paying for ceremony they do not need; risky ones still get two sets of eyes.

SDD archive writes the final spec for you

Closing an SDD change used to leave the "canonical" spec as a manual merge of your delta into the main document. gentle-ai sdd-archive-compose now does that composition natively, and the archive phase calls it, so the spec that lands in openspec/specs/ is produced by the tool, deterministically, every time (#4232).

Fewer dead ends in the review lifecycle

A recurring complaint was a review that stops and tells you to do something impossible. Several of those closed loops are gone:

  • If your agent host cannot run one of the reviewer roles, it can now say so, and the review moves on instead of offering the same slot forever (#4274, #3442).
  • Whether a validator "could not decide" is now a typed field the tool reads, not a sentence it tries to interpret, so a confident verdict is never mistaken for an inconclusive one (#4273, #4266).
  • When a finding's cause cannot be traced to your change, it is downgraded per finding, and when the evidence itself is degraded the review fails closed rather than guessing (#4261).
  • A review you started on committed changes resumes correctly after new commits land, and a correction is always tied to a real earlier state (#4265, #4213).
  • When the managed assets on disk are older than the binary, status tells you so and prints the exact sync command instead of failing somewhere later (#4242).

Breaking changes

None. Every previously published contract artifact stays byte-frozen under its digest pin, the provider contract bundle stays at 1.2.0, and capabilities/v2.5, status/v7, consent/v3, and start/v4 are unchanged. Telemetry is new behavior, not a changed one: it is on by default, announces itself once, and is switched off with one command.

Upgrade now

brew upgrade gentle-ai

Run gentle-ai sync after upgrading. It refreshes the managed assets, including the new risk-aware delegation guidance in every agent, and it is where you will see the one-line telemetry notice.

What was fixed

Review lifecycle

  • Changed-line accounting and reviewer context now account for renamed files, so a rename no longer looks like a giant rewrite (#4249).
  • The Claude refuter agent ships without tools, as designed; it reads evidence, it does not run things (#4251).
  • Binary image assets are classified as passive, so adding a logo no longer escalates a review (#4207).
  • A member call named exec no longer counts as a process boundary, which was inflating risk for ordinary code (#4211).
  • Trace persistence and repair truncation are reported instead of silently swallowed (#4244), and the correction-plan self-check is bound to the frozen target (#4221).
  • A failed regression verdict can only escalate when it names the regression (#4220).
  • Git ownership refusals are checked before status picks a contract, so the message you get is the real cause (#4252).
  • Recovery after an invalidated current-changes authority works on the same target (#4236), status inventory is scoped by lineage (#4239), and a bound STATUS re-entered from a sibling worktree fails closed instead of crossing lineages (#4216).
  • Transient lock-creation failures on macOS are retried instead of aborting (#4277), and git releases before 2.38 are tolerated (#4257).
  • Pi keeps its authentication locator across the review relay (#4166), and the negotiated start guidance names the --consent relay flag it expects (#4254).

SDD

  • Session carriers are validated before any owned write (#4307), and task failures always continue in scope (#4322).
  • The canonical preflight is projected into Claude's workflow and every other runtime, so the same rules apply everywhere (#4299, #4300, #4303, #3676, #4294).
  • sdd-attempt acquire accepts --expected-revision, zero-line attempts that were invalidated are refunded instead of charged (#4225), and settle obligations are keyed on the objective you recorded (#4248).
  • The intended-untracked selection cap was raised, and every refusal in that area now names a route you can actually complete (#4237, #4222, #4215).
  • Attempt output reports whether max_changed_lines came from the default (#4247), and rules.apply / rules.verify survive across model tiers (#4233).

Install, sync, update

  • OpenCode: managed writes are separated from layered runtime reads, an ownership marker prevents JSON/JSONC duplication, and "Configure Models" picks the config that is actually in effect. Thanks to @pablon for the whole chain (#4315).
  • OpenCode SDD profiles persist, and default model assignments no longer bleed into each other (#4269).
  • Engram rollback no longer depends on the install path (#4281), and the direct Claude MCP entry is skipped when the Engram plugin is already enabled (#4278).
  • A failed apply keeps its original error even when rollback also fails, the skills component no longer drags SDD along (#4230), and a shared GGA config survives while another installed agent still uses it (#4228).
  • Install state persistence is coordinated across the TUI, closing a race that could lose a setting (#4158).

Windows

  • Review launches on Windows rebuild the batch command line and correct a target-identity echo (#4235), classify RAR filesystems and repair private directories (#4253), and the git process-tree launch is hardened and gated in CI (#4218).

Docs

  • The README was restructured around the brand, with the about-the-author section indexed and the version advisory pointed at stable v2.6.0 (#4184 and follow-ups). This release's own README facts land on main right after the cut.

Numbers

100 non-merge commits since v2.6.0 from seven contributors. At publication, 631 issues are open.

Install

brew install Gentleman-Programming/tap/gentle-ai

or

go install github.com/gentleman-programming/gentle-ai/v2/cmd/gentle-ai@v2.7.0

Signed platform archives below: linux_amd64, linux_arm64, darwin_amd64, darwin_arm64, plus gentle-ai-review-provider-contract-1.2.0.tar.gz and gentle-ai-release-provenance-v1.tar.gz. checksums.txt is signed with the release Minisign key (checksums.txt.minisig); see docs/release-signing.md for verification. Windows installs from source with go install.

Full changelog: v2.6.0...v2.7.0

Don't miss a new gentle-ai release

NewReleases is sending notifications on new releases.