Skip to content

v0.11.0

Latest

Choose a tag to compare

@github-actions github-actions released this 14 Oct 17:55
· 17 commits to main since this release
Immutable release. Only release title and notes can be modified.
3263f59

LETS stops policing the model. Earlier releases asked at nearly every step: commit?, send?, proceed?, confirm? Each question cost the owner attention, and none of them protected against anything worse than a mistake that could be fixed in the next commit. This release keeps a gate only where the harm cannot be undone or leaves the machine, and gives back to Claude Code what it already does natively. It is a minor release: the approval model changes, and two v0.10.0 subsystems are retired.

One table decides what asks you first: LETS_GATES

The always-on rules now hold one gate table with three levels. standard is the default. It asks before a PR merge, a force-push, a destructive operation, a push or PR outside a typed /lets:done, a task close outside /lets:done, posting outside the repo, acting in another project, and a release. Everything local and reversible runs and is reported in one line. /lets:commit commits, create-task creates after a duplicate check, /lets:done commits its own CHANGELOG entry, and the "Proceed?" panels of plan, opinion, backlog and team print a line and continue. minimal also lets /lets:done merge the task's own PR once every check is green. strict keeps LETS as before. A command you typed is the approval for what it names. What does not move at any level: a plan never runs itself, a deviation still stops, and no permission or launch mode ever lowers the level.

Sessions talk through Claude Code's own messaging

/lets:orc no longer types a message into another terminal, where it arrived as text in your prompt. It sends with the harness's SendMessage, by session name, and says what actually happened: sent, held for approval in <name>, refused, expired or NOT SENT. It never resends on its own. Who sent an inbound message is decided in Go from the harness envelope, never by the model. The new lets peers sender checks that the message's socket belongs to the one live session with that name, and fails closed otherwise. A sender verified that way gets its question answered inside what was already agreed, at most three replies until you speak. Every push, merge and close still asks. Orchestrators are now whatever you named the session, and a worker reaches its orchestrator by name, even in another repo.

Rules a quarter of the size

lets-rules.md rode along in every turn and every subagent at 62 KB. The always-on core is now at most 16 KB, and nothing that guards a gate was cut. Procedures a command needs at one step load at that step, as protocol skills and files. The 14 read-only analyst agents no longer receive your CLAUDE.md and project rules. The ones that audit those files, or cite them, read them on purpose. Every session also gets one statement of who does what: the skeptic for decisions others rely on, the architect for plan changes, an implementer for delegated code.

Teams on native names, launched in the mode you choose

The members registry is gone. Claude Code's ListAgents judges who is live, and the run record and the team file hold the rest. A new team's lead is named <repo>-<callsign>-lead, and a callsign is unique per repository. A new key, LETS_LAUNCH_MODE, sets how the workers and leads LETS launches start: default, auto or all-in. Per-launch flags override it. all-in is only ever your explicit choice and announces itself. Claude Code holds messages between sessions that run in different permission classes, so set the key to the class your orchestrator runs in.

Also in this release

  • Delegated /lets:execute agents can write their report files again. Claude Code refuses a subagent's .md whose name starts with report, so execute report names no longer start that way.
  • agent-report resolves each expected report to one answer and keeps a partial report.
  • Writes to the shared .lets/ no longer prompt in a worktree.
  • /lets:done no longer opens a duplicate PR.
  • "PR only, keep open" keeps the task open on every path.
  • A board's branch: template is honoured without id:.

Upgrading

Run /lets:update, then restart the session, because agents and rules resolve at session start. /lets:init now asks for the gate level. Unset counts as standard, never lower. lets members and lets peers frame / tell / wait / role are stubs that keep a v0.10.0 plugin working for one release. They are removed in the next one.