← Back to the journal

Runtime approvals vs assistant confirmation vs auto-approve

A practical explanation of how GoWork separates runtime approvals, assistant confirmations, and auto-approve: one governs execution-layer permission, one guards high-impact semantic boundaries, and one removes low-value prompts for routine steps.

If you have seen runtime approvals, assistant confirmation, and auto-approve in GoWork, the easiest mistake is assuming they are just three names for the same control. They are not. The short answer is: runtime approvals decide whether an execution step may actually proceed at the tool layer, assistant confirmation decides whether a high-impact action needs explicit user intent, and auto-approve decides whether routine steps should keep interrupting the user. They live at different layers.

This is one of the first sources of confusion when teams start using execution-oriented assistants in real work. Some people assume that “auto-approve on” means no approvals of any kind will ever appear again. Others treat a blocked runtime action as if the assistant itself “refused” to continue. In reality, the three mechanisms protect different boundaries: one is about execution channels, one is about semantic risk, and one is about default interaction friction.

If you already read Auto-approve does not mean unlimited authority, Why AI assistants should answer task status in chat, and How to answer task status questions without retriggering execution, this article completes the picture by separating all three concepts clearly: who is blocking the step, why it is blocked, when the block should disappear, and when it should not disappear at all.

The short answer: these are three different gates, not synonyms

You can remember them like this:

  1. Runtime approvals: the execution layer asks whether a mutating step may proceed;
  2. Assistant confirmation: the assistant decides that a step crosses a high-impact boundary and needs explicit user intent;
  3. Auto-approve: routine reads, writes, and commands stop asking for permission every few seconds.

So these are not alternate labels for one mechanism. They are three separate control layers: execution-layer permission, assistant-level judgment, and default interaction policy.

What problem do runtime approvals solve?

Runtime approvals answer one question: may this concrete execution step actually run?

Typical examples include:

  • running a command;
  • writing or modifying files;
  • invoking tools that change state;
  • continuing a runtime action that may have side effects.

At that level, the system is not really debating business meaning. It is asking whether the execution path itself is allowed to go through. In other words, runtime approvals care less about “is this strategically the right thing?” and more about “this step has real side effects—should it be allowed to land?”

What does assistant confirmation solve instead?

Assistant confirmation answers a different question: even if the system technically can do this, has the action crossed a semantic boundary that should require explicit user intent?

Common examples:

  • deleting files or directories;
  • formally publishing instead of saving a draft;
  • sending a message to another conversation or channel;
  • submitting a form or pressing an irreversible confirm button;
  • making a result public instead of just continuing internal work.

Here the block is not mainly about whether the tool can execute. It is about whether the assistant should interpret the current instruction as enough authority for an outward, destructive, or irreversible action. That makes assistant confirmation much closer to a semantic safety belt than an execution gate.

What does auto-approve actually change?

Auto-approve changes the default interaction pattern: routine execution stops asking for permission step by step.

That usually covers actions such as:

  • reading files, logs, and configs;
  • editing code, scripts, and content;
  • running checks, builds, and tests;
  • continuing the obvious next step in the same task;
  • doing a necessary verification readback after a write.

The value of auto-approve is not that the system suddenly loses all boundaries. The value is that the assistant stops dragging the user back into the loop for low-risk routine work. For an execution-first product like OmniGoAI's GoWork, that matters a lot: users want the task completed, not a stream of tiny permission prompts.

The real difference: who decided the task should pause?

The easiest way to separate these three concepts is to ask who initiated the pause.

Runtime approvals: the execution layer paused

The runtime or tool layer is asking:

  • may this command run?
  • may this write happen?
  • may this state-changing tool call proceed?

The keyword here is execution permission.

Assistant confirmation: the assistant paused

The assistant is asking:

  • even if I can do this technically, is it a high-impact move?
  • did the user authorize this scope clearly enough in this run?
  • am I stopping because this could become an accidental delete, accidental publish, or accidental outward action?

The keyword here is semantic boundary.

Auto-approve: routine steps no longer pause by default

Auto-approve is not an extra blocker. It is a way to remove low-value pauses.

It answers questions like:

  • should normal file edits still ask every time?
  • should ordinary command execution still require repeated prompts?
  • may the assistant continue the obvious next step of the same goal?

The keyword here is friction reduction.

Why can runtime approvals or assistant confirmation still appear when auto-approve is on?

Because auto-approve does not flatten every layer of risk.

Situation 1: the execution system still has its own permission rules

Even when the user wants fewer interruptions, a runtime may still preserve its own approval boundary for state-changing actions. Auto-approve can reduce a lot of routine friction, but it does not automatically mean every execution channel has removed its own gate.

Situation 2: some actions should never be silently absorbed into routine auto-approve

Think about formal publishing, cross-conversation delivery, data deletion, or third-party form submission. The problem with these steps is not that they interrupt flow. The problem is that if they are wrong, the blast radius is much larger than ordinary rework. That is why assistant confirmation may still appear even with auto-approve enabled.

This is also why Where do GoWork scheduled-task notifications go? and How scheduled tasks should report results back keep separating internal execution from external delivery: internal progress can become smoother, but outward impact still needs clear authority.

How do the three work together? Two common scenarios

Scenario 1: fixing a bug in a project

The user says: “Stop asking. Just fix it.”

What normally happens is:

  • auto-approve lets you read code, edit files, and run tests without repeating low-value prompts;
  • runtime approvals may still be the last execution-layer gate before a specific command or write lands;
  • assistant confirmation usually does not appear for ordinary repair steps.

But if the next step becomes:

  • deleting a whole directory;
  • overwriting production data;
  • sending results to another group automatically;

then you have entered a higher-impact zone. At that point assistant confirmation may reappear, because the problem is no longer just “continue fixing the bug.” It is now “have you been explicitly authorized to do this outward or irreversible action?”

Scenario 2: running a content pipeline and formally publishing

If the user only says “finish processing the article,” a safe default may be to write, review, and prepare the article.

If the user explicitly says:

  • publish directly to Zhihu, CSDN, Juejin, and CNBlogs;
  • this instruction itself is the authorization;
  • do not stop for another confirmation during execution;

then the assistant has in-run preauthorization for the formal publishing step. In that case:

  • auto-approve makes routine editing, checking, and building smoother;
  • runtime approvals still cover concrete execution-layer permission;
  • assistant confirmation does not need to re-ask whether those named publish actions may proceed.

So the right model is: preauthorization covers the named high-impact action, auto-approve covers routine steps, and runtime approvals cover execution-layer permission.

When should you blame the runtime, and when should you blame the assistant?

This distinction matters a lot in practice.

Signals that point more to a runtime approval issue

  • a tool or command is waiting to be allowed to run;
  • the block happens right before execution;
  • the user already clearly asked for the step, but the system still wants approval for the side effect;
  • the real question is “may this execute?” rather than “should this be interpreted as authorized?”

Signals that point more to an assistant confirmation issue

  • the action is outward, destructive, or irreversible;
  • the user's words only cover “continue,” not a high-impact scope;
  • the assistant cannot safely expand a vague instruction into a publish, delete, or send action;
  • the real question is “would this cross a boundary?” rather than “can the tool run?”

Once teams separate those two failure modes, debugging gets much easier.

A practical framework: three quick questions

When someone asks, “Why is this asking for approval again?”, go through these three questions.

Question 1: Who initiated the pause?

  • the runtime or tool layer → check runtime approvals first;
  • the assistant itself → check semantic boundaries and high-impact scope;
  • neither, and routine steps keep interrupting → check whether auto-approve is off or not covering this path.

Question 2: Is this a routine execution step or a high-impact action?

  • routine execution is closer to auto-approve coverage;
  • high-impact action is closer to assistant confirmation.

Question 3: Did the user explicitly authorize this exact scope in this run?

  • if the action type and target scope were clearly named, a high-impact step may be covered by preauthorization;
  • if the user only said “continue” or “handle it,” that usually should not expand into formal publishing, external messaging, or data deletion.

Those three questions explain most “why is this still asking?” cases surprisingly well.

The three most common mistakes

Mistake 1: treating runtime approvals and assistant confirmation as the same layer

They are not. One is mainly about execution permission. The other is mainly about semantic authorization.

Mistake 2: assuming auto-approve means no confirmation of any kind will ever appear again

The better model is: routine steps should mostly stop asking, but high-impact boundaries and some execution-layer gates can still remain.

Mistake 3: reading “continue” as blanket authorization for every possible next action

“Continue” often covers normal task progress. It usually does not automatically cover public publishing, external delivery, destructive changes, or irreversible submission.

FAQ

FAQ 1: Can runtime approvals, assistant confirmation, and auto-approve replace one another?

No. They govern different layers: runtime approvals guard execution, assistant confirmation guards semantic boundaries, and auto-approve changes the default prompt behavior for routine work.

FAQ 2: Why do I still occasionally see a confirmation after turning on auto-approve?

Usually because the step has reached a high-impact boundary or because the execution layer still keeps its own permission gate for the specific side effect. Auto-approve removes low-value prompts. It does not erase every boundary.

FAQ 3: When can a high-impact action proceed without another confirmation?

When the user clearly names both the action type and the target scope in the current run—for example, “publish directly to Zhihu, CSDN, Juejin, and CNBlogs; this instruction itself is the authorization.” That is preauthorization, not something auto-approve infers on its own.

FAQ 4: If a team keeps confusing the three, what rule should they standardize first?

Start with one sentence: auto-approve is for routine progress, assistant confirmation is for high-impact boundaries, and runtime approvals are for whether the execution layer may actually carry the step out. Once those layers are separated, authorization discussions become much easier.

If you want an execution-oriented assistant that asks fewer useless questions without flattening the boundaries that matter, the goal is not to remove every confirmation. The goal is to make these three layers explicit. That is how users understand what they really authorized, why a step was blocked, and how better instructions can reduce friction without broadening risk. For more on GoWork's execution model, continue with the GoWork assistant overview, auto-approve boundaries, and the GoWork download page.

#GoWork#auto-approve#runtime approvals

More from the journal

9 min

Why assistants should check run archives before probing live systems

When a user asks what happened last time, the safest move is usually to inspect the run archive first, not to probe the live system again. This article explains why execution archives answer historical questions better, and how GoWork turns that into a practical workflow.

Read