Skip to content

Code Guardian 17.17: Done Now Means: Goal Measured

Provimedia Redaktion 6 min read 10 November 2026 3 views
Vibe Coding, Code-Optimierung & Quality Gates
Code Guardian 17.17: Done Now Means: Goal Measured
Illustrative image · AI-generated

With 17.17, a task can carry a core probe: a probe that measures the goal itself. Such a task counts as done only once the core probe has been measured green. After every adjustment, the agent stops and asks whether anything else is coming. Small changes get a lighter review. A gap from 17.16, however, is not fixed, and this article explains what that means for you.

You can find the article on the earlier versions at Code Guardian 17.14 to 17.16: What's New.

What you should do now

  1. Run the installer. It backs up locally changed agent definitions before replacing them and reports them.
  2. Check whether jq is installed. Without jq, not all gates check (see below).
  3. If the Leitstand service (Claude Code) is running on your machine, restart it once and reload any open Leitstand tabs. Until then, the page and the service do not match.
  4. Create your next task with a core probe.
  5. Check commands for deleting, deploying and migrating yourself when they sit in a block followed by a redirection. The forms are listed in the last section.

What is a core probe?

The core probe is the one probe that measures the task's goal itself. New task folders can carry one.

  • aufgabe.py neu --kriterien-entfaellt now works only together with --kernprobe "<text> | lauf | <kommando>".
  • aufgabe.py abschliessen blocks as long as the core probe is red, has never been measured or is outdated.
  • If it stays red and no answer from the agent has measured it, the agent receives a [kern] line with the next input.

A red that measures nothing about the goal does not count. This applies, for example, to a program that cannot be found, a wrong pytest path or a missing test scaffold. When setting it, this ends with exit 2 and a note. When measuring, it reads "rot (Bedienfehler)" (red, operating error).

In addition, test runs of phpunit, pest, paratest and php artisan test prove nothing any more if they have not executed a single test. This also applies with exit 0. Behind wrappers such as composer test or bash -c, the tool does not detect this.

What this means for you: "Done" means the goal itself was measured, not just something around it.

Why does the agent stop after every adjustment?

After every adjustment, the agent shows what changed and how it was checked. Then it asks: "More adjustments or wrap-up?" Audit, cold review, documentation and commit then run once for the whole bundle. You start them with your word.

The Bash gates stay armed. There are exceptions:

  • In autopilot, with "no questions" and without a terminal, completion runs as before, per change.
  • Bug fixes in the DEBUG flow run straight through as before.
  • Workers controlled by an orchestrator do not stop.

What this means for you: You collect several adjustments, and audit and review run once for all of them.

Which review runs when?

The tool pruef-bedarf.py states, for each review step and with a reason, whether it is needed. Sensitive areas keep both reviews, even for a one-liner. The blocklist covers sensitive areas such as login, payment, database schema, deploy, dependencies and secrets.

SituationWhat applies
Cold review, blocklist touchedAlways runs
Cold review, more than 300 changed linesAlways runs
Pure text or pure interface under 300 linesNo cold review needed
Logic under 300 linesThe new review agent, the referee, judges from the diff alone. Without a conclusive judgment, the cold review stays necessary.
Plan reviewer, blocklist touched, plan over 40 lines or two files, or more than two consumers or more than one entry pointAlways runs
Small planIs skipped only if two blind judgments by the referee agree that it is skipped

None of this blocks. aufgabe.py abschliessen shows the need and counts each week how often a review ran below the threshold. The referee is the 15th review agent; in 17.16 there were 14.

What this means for you: Small changes without a sensitive area no longer get a large review. Sensitive changes do not get easier.

Will a gate stop me more often now?

In two places, yes.

  • A command that begins with a variable, for example $X rm -rf …, is checked as if the variable were not there. If the value is unknown in front of delete arguments, the gate asks.
  • A copy via ssh from the server's home directory to a target outside it, such as a web directory, counts as a deploy.

This was measured against a set of real commands. No command that was blocked before gets through now.

What this means for you: More questions for these two forms, but no new permissiveness.

What else is new?

  • Goal link: The tool todo_ziel.py assigns open items to the goals from .goals/index.json. The task list shows items without a goal, and the session start names the goal.
  • Leitstand: The new "Git" tab shows, per project, branches and worktrees, which session is working on what and what is not yet in main. It only reads, needs no network and changes nothing.
  • CodeGuardMaster: It shows a notification on the machine when a question to you has been open for a long time or a core probe has been red for a long time. On macOS it uses osascript, on Linux notify-send, otherwise only the file meldungen.md.
  • Migration detector: It reports dropForeign, dropUnique and dropPrimary as [constraint]. With an empty down(), [irreversible] is added, exit 1.
  • design-beweis: It measures protected pages via Basic Auth using CG_DESIGN_HTTP_USER and CG_DESIGN_HTTP_PASS, only to its own address. You pass an app session with --sitzung.
  • session-orchestrator: Each session can carry a freely worded role (rolle setzen selbst "<text>", at most five lines). It survives compaction. After /clear it is usually gone.

The Claude package now counts 5 modes, 7 gates, 15 hooks, 22 detectors, 31 skills, 15 review agents and 82 tools.

Which fixes are included?

These are fixes, not new capabilities:

  • The DECISION GATE shows the question dialog again after quotation marks have just been replaced. Until now, the question was passed through without a dialog.
  • The migration detector used to report Alembic migrations silently as "nothing found". Now they show up as UNSEEN and turn the run red. Their content is not yet evaluated.
  • If jq was missing, the installer used to say that nothing would be checked at all. That was not true. The warning now states what applies: the four command gates for deleting, deploying, migrating and secrets in a commit keep blocking. The others do not check at all without jq, including the write gate for unattended runs. The message names 11 of 15.
  • The JS test detector now really mutates files with special characters in the name, for example pages/[id].vue. Before, the run without mutation counted as passed.
  • The JS and PHP test detectors end a mutation run without a readable report with exit 2 ("Mutation nicht gemessen", mutation not measured) instead of exit 0.
  • In Claude Code's auto mode, autopilot does not become active. The documentation now says so.

What changes for Codex users?

The Codex edition gets the core probe, the stop point, the stricter gates and the fixes to the detectors. It also has design-beweis (not separately re-measured under Codex), PATHEXT and the Austrian legal notice. Differences from Claude Code:

  • There is no referee. For logic, the limit there is 100 lines.
  • The plan reviewer is skipped for small plans: at most two consumers, one entry point, no blocklist.
  • The stop point is skipped "in a run without a terminal with approvals switched off".
  • The session-orchestrator, and with it the per-session roles, does not exist in the Codex package.
  • The Leitstand "Git" tab, CodeGuardMaster, the [kern] line, the goal hint at session start, the jq warning, the note on auto mode and the DECISION GATE fix belong only to the Claude edition.
  • The Codex greeting names 81 tools.

Which gaps remain open?

These are the most important open gaps. More are listed in the changelog in the customer portal.

  • Commands in a block followed by a redirection: The 17.16 article announced that this gap would be fixed in the follow-up release. That did not happen in 17.17. Re-measured: the gates for deleting, deploying and migrating behave there as in 17.16. They still do not recognize such commands in every form. There is no new date. For commands of this form, do not rely on the gates; check them yourself before you approve them. These are the forms meant:
    { befehl; } < eingabe
    ( befehl ) < eingabe
    while read zeile; do befehl; done < eingabe
    if bedingung; then befehl; fi < eingabe
  • Autopilot and stop point: If autopilot is armed, the hint does not hide the stop point by itself. The exception appears only in the hint text.
  • CodeGuardMaster: If a run hangs, the service does not start a second one on macOS. The hang does not report itself.

What this means for you: Acceptance is tied more closely to the goal, and review follows the size of the change. A gap in the gates remains open, and you check it yourself.

You can find more about the product on the product page.

Sources

  • Code Guardian 17.17 changelog (Claude package and Codex package), in the customer portal

As of: 10 November 2026

Share this article

Stay up to date

Get the latest articles, insights and industry updates straight to your inbox.

Unsubscribe at any time. See our privacy policy.

Decide for yourself what Google shows you

Google lets you choose which sources appear more prominently in your search results: in Top Stories and in AI answers. Two clicks, and you see the sites you trust.

Add provimedia.de to my preferred sources

Checks You Can't Skip

The skill package for Claude Code and OpenAI Codex: seven gates stand before every deploy, migration, new dependency, data-based claim, finding, decision question and legal text. One company license, unlimited developers across your organization.