The Architecture Decisions You’re Already Making — Luminity Digital
The Great Compression  ·  Companion Dispatch  ·  Interactive Assumptions  ·  August 2026
The Great Compression

The Harness Needs a Human

Omnigent’s strongest controls presuppose an operator who is present. Where the product meets a headless seam, its answer is on record — and the assurance case built for a session with a person in it does not transfer to one without.

August 2026 Tom M. Gomez Luminity Digital 22 Min Read
Two prior dispatches read Omnigent’s controls at the pinned tag. The Intent Check Fails Open found a classifier that abstains five ways. The Gate Holds. The Judge Doesn’t. found an approval gate that is fail-closed and an authority to clear it that sits at edit level. This one asks the question both deferred: what those controls presuppose about who is present. Claims are pinned to Omnigent v0.10.0 [1], to Databricks’ launch and intent posts [2][3], to the project’s policy introduction of August 13 [4], and to managed documentation as of July 24 and July 28 [5][6].

The answer is in the founding document, and it is not hidden.

The showcase controls are prompts

Omnigent was announced on June 13, 2026 as a meta-harness sitting above the agents its authors already use — Claude Code, Codex, Pi, custom agents — with three pillars: composition, control, and collaboration [2]. Read the two control examples the launch post chose to lead with.

Launch Example 01  ·  Security

After an agent downloads a new package from npm, it should require human approval to git push [2].

Launch Example 02  ·  Cost

Ask Omnigent to pause an agent and ask to continue after every hundred dollars it spends [2].

Both terminate in a person. Not in a denial, not in a policy verdict, not in a quarantine — in a prompt. These are the canonical demonstrations of contextual policy, chosen by the authors to show what the layer is for, and each one’s final step is a human deciding.

The repository says it outright. Under the reasons to use Omnigent, the governance bullet reads: create policies to pause for your approval before risky actions, cap spend, or limit which tools an agent reaches [15]. Approval is the first clause of the first sentence the project uses to describe governing an agent. Its policy section restates the same order — policies check every action and either allow it, block it, or pause to ask you first — and the worked configuration example names its own rule approve_shell, pointing at a handler called ask_on_os_tools, alongside a budget that pairs a hard spend cap with ask thresholds described as a soft warning on the way [15].

The front page makes the same choice in pictures: the single image chosen to illustrate control is an approval prompt, its alt text describing a Bash tool call blocked by a session cost budget policy [14]. The artifact representing the control layer is a dialog box asking a person, and the surfaces built to answer it are a macOS app, an iOS app, and an Android app [14] — what you build when the answerer has to be reachable away from the workstation.

That is a coherent design for the product being described. The same post says users often have four or five agents open at once and spend their time copy-pasting between them, and that Omnigent is open source in alpha [2]. The other features named are collaboration features: invite people to view your session, comment on files in its workspace, send commands, reach the same agent from web, mobile, or a native app [2]. The repository’s own list of reasons opens on working with agents from any device including your phone, with sessions following you from terminal to browser to handset [15], and it still carries an alpha status badge [15]. This is a workstation tool for engineers working alongside agents, and it was described as one from the first day.

What the runtime confirms

The interactive assumption is not merely rhetorical. It is in the mechanics.

An approval is an elicitation round-trip. The runtime returns true only on an explicit accept, and decline, cancel, malformed payload, missing field, and timeout all resolve to a denial on the policy-spec path [7]. That scope word is load-bearing: the in-process inner-agent datamodel permits an unbounded wait, where an unanswered approval hangs rather than denying [16]. In the default mode the request is a link to a standalone approval page, and resolution requires edit-level authorization on the session [8][9].

So the gate has an answerer or it has a timeout. That claim was audited rather than assumed. At v0.10.0 no configuration, environment variable, policy parameter, or command-line flag satisfies a policy ASK without a human answering it [16]. The structural reason is the strongest part: the policy engine and all thirteen builtins contain zero references to the inner harness’s permission mode, so they cannot consult a bypass flag even if one were set [16]. The single environment variable on the path, OMNIGENT_ELICITATION_MODE, chooses between a standalone approval page and an inline form — two renderings, both requiring a person [16]. An enumeration of every OMNIGENT_ name in the repository, three hundred and seventy of them, turns up none that enables auto-approval [16], which is thoroughness rather than proof; the structural fact is what carries it.

Method  ·  How the Audit Was Run

Against a local clone of the repository checked out at the release tag, not against rendered pages. Files were read in full and their blob hashes recorded at retrieval. The claims first verified at v0.9.0 were re-checked by comparing blob hashes across the two tags rather than by re-reading. Negative findings come from pattern searches across the whole tree, with every command and its result count recorded — including the searches that returned nothing.

That is the limit worth stating plainly: a pattern search establishes that something was not found in the paths searched, never that it does not exist. Which is why the load-bearing claim here is the structural one — the policy engine cannot consult the harness’s permission mode at all — rather than the absence of a matching string.

They closed one, too, and the code says so in its own words. A stray ASK reaching the native hook now maps to deny rather than the older defer, and the comment gives the reason: defer returned control to the harness’s permission mode, which acceptEdits or bypassPermissions would auto-approve, re-opening the very bypass this closes [16]. A non-interactive approval path existed and was deliberately removed. The repository’s own test calls the server-side hold the native anti-bypass [16]. That deserves saying plainly: they found their own bypass and shut it.

The default they chose for waiting says the rest. An unanswered ASK times out after eighty-six thousand four hundred seconds — one day — and the comment explains why: an ASK is a human-in-the-loop gate and should outlive a user stepping away [17]. The same comment names the other case in the same breath, telling headless and unattended agents that want a fast fail-closed to override the value per policy or spec-wide [17]. The default is tuned for a person who walked off to lunch. The unattended operator is told to change it.

Then look at what the engine does to make that person’s life tolerable. A per-session cost approval is routed to the root conversation so approving once covers the whole spawn tree, because a sub-agent runs as its own conversation and would otherwise re-prompt [10]. A per-user daily approval persists to that user’s day record so the checkpoint will not prompt them again that day, including from their other sessions [10]. Both behaviors are approval-fatigue engineering. Daily prompt suppression is engineering for human approval fatigue; it is not evidence of an unattended control path.

Two more details from the front page point the same way. Contextual policies are now summarized there as stateful spend caps, model routing, and risk-based escalation [14] — two of the three are cost functions, and the third is escalation, which terminates in someone. And the sandbox is pitched as the way to run YOLO mode safely [14]. That is the honest name for operating without approvals, and the substitute offered is operating-system isolation rather than a stricter policy. Where the human is absent, containment moves to the sandbox.

The nudge that discards the substrate

One built-in deserves separate attention, because it sits across the seam between interactive hygiene and governance continuity.

detect_task_switch watches for a session drifting to a new task and recommends starting a fresh one, since a long session carries irrelevant context and costs more [11]. As developer advice that is correct. As governance, it is a recommendation to discard session state — and session state is the substrate every contextual policy in the product depends on. The accumulated legs of an injection pattern, the recorded first-message intent, the spend so far: all of it is scoped to the session.

So the same product contains a policy that accumulates state to reason about a session’s history, and a policy that suggests ending the session when its history gets long. Neither is wrong on its own terms. Together they mean the governance record’s lifetime is bounded by a workflow convenience, and the boundary is one a user is nudged toward rather than one an operator sets.

What the product does when nobody is there

The strongest evidence for this dispatch is not that Omnigent assumes a human. It is what the product does at the exact points where it knows one is absent.

Sub-agent workers launch in a headless pane. The repository states the problem in its own words: no human can answer an approval card there, so every edit, write, or shell command that prompts stalls the worker [18]. The resolution was to pass bypass flags to the inner command-line tool — bypassPermissions for Claude, –dangerously-bypass-approvals-and-sandbox for Codex, –yolo for Cursor and Kimi, –dangerously-skip-permissions for Antigravity [18]. For Codex and Cursor this is on by default, opt-out rather than opt-in [18].

Read what that is. Confronted with an operating mode that has no human in it, the product’s answer was to switch off the consent gate belonging to the tool underneath — by default, for two of five harnesses. The containment that replaces it is stated too: full bypass is the only non-stalling stance for the headless seam, because the container is the real boundary [18].

This is not a policy-engine bypass, and the distinction matters. A policy ASK on a bypassed session still parks server-side for a person, and the hook deliberately returns no opinion so the harness’s own permission system still runs — the source says emitting an allow there would collapse two independent gates, the deployment’s policy gate and the user’s consent gate, into one, and that the policy layer must not silence the user’s consent [16]. The design keeps them separate. It is the default posture of the inner gate that changes when nobody is watching.

And in one place Omnigent answers a gate itself. A Cursor session launched with –yolo, –force, or -f has lingering in-pane prompts auto-accepted by Omnigent’s runner, which sends the keystroke. It is carefully bounded — only while the pane shows Cursor’s accept hint, capped at three attempts, falling back to a human-visible card on any uncertainty, and questions are excluded because a question is human input rather than a gate a y can answer [19]. The documentation is candid about what it costs: because a gate answered this way is never seen by a human, the accept logs the tool name and an argument preview at info level, and that line is the only record Omnigent approved the call [19].

One log line. Readers of the prior dispatch will recognize the shape — an operational record standing in for a decision record.

Figure 01  ·  The Round-Trip, and Three Ways Absence Is Handled
THE APPROVAL ROUND-TRIP policy raises ASK elicitation to a person explicit accept proceeds Only an explicit accept returns true. WHEN NOBODY IS THERE · THREE HANDLERS waits, then denies the default wait is one day, so the gate outlives a user stepping away the inner prompt goes off headless workers launch with the underlying tool’s consent gate disabled the gate answers itself one bounded case accepts in place; a log line is the only record
Only an explicit accept returns true. The three handlers are what the product does at the points where it knows nobody is there — wait then deny, disable the inner tool’s prompt, or answer the gate in place.

What Databricks says about the unattended case

To their credit, they draw the distinction themselves. In the intent-authorization post, an interactive agent gets its intent from a human at the start of the session; an autonomous agent gets its intent pinned at design time in the agent spec, immutable at runtime [3]. That is two operating modes, honestly labeled.

Three things need separating before that distinction can carry any weight, because they are routinely collapsed. Autonomous initiation means the agent starts and proceeds without a human prompting each step. Unattended execution means no human is present during the run. Human-unavailable execution means no human can be reached at the moment a control needs one. Autonomous initiation does not imply the third: an autonomous agent may perfectly well pause and wait for an asynchronous approval, and nothing in this dispatch says otherwise. But if it does, the control’s guarantee has become conditional on someone being reachable — which is a different property from a control that holds whether or not anyone is.

Figure 02  ·  Three Terms, Separated
autonomous initiation starts without a human prompting each step unattended execution nobody present during the run human-unavailable execution nobody reachable when a control needs one Autonomous initiation does not imply the innermost case. An autonomous agent may pause and wait for an asynchronous approval. But then the control’s guarantee has become conditional on someone being reachable — a different property from one that holds whether or not anyone is.
Autonomous initiation does not imply that no human can be reached. The distinction decides whether a control’s guarantee is structural or conditional, and it is the one this dispatch turns on.

And the autonomous mode is stronger in exactly one respect. Spec-declared policies return with a null id and cannot be patched or deleted through the session-policy API [12], so the design-time intent really is immutable — the finding the prior dispatch credited.

But immutability is not the whole control surface. On the unattended path, what remains of the three verdicts? Allow and deny are predicates and they work without anyone present. Ask is the verdict that requires an answerer. And the classifier that decides whether to raise an ask abstains five ways, including when no model client is configured [13]. So for an agent running unattended, the effective surface is deterministic predicates plus a judgment control that fails open, and the human-in-the-loop layer — the part that is genuinely well built — holds only while someone is reachable. That makes its guarantee conditional rather than structural.

Figure 03  ·  The Control Surface by Operating Mode
attended unattended ALLOW predicate holds ALLOW predicate holds DENY predicate holds DENY predicate holds ASK judgment gate answered ASK judgment gate conditional the classifier that raises ASK abstains five ways same five, and nothing on the other end
Allow and deny are predicates and hold either way. Ask is the verdict that requires an answerer, and the classifier that decides whether to raise it abstains on five conditions in both modes. What differs is whether anything is on the other end.

And execution without a locally present operator is not hypothetical in this product. The repository offers cloud sandboxes on Modal or Daytona, described as requiring no laptop, with the server provisioning a sandbox per session as a managed host [15]. That makes running without a local operator first-class and documented — while the sentence describing what governance means still ends in your approval. It does not remove the human; it relocates them. Which is precisely why the approval surfaces are a web UI, a desktop app, and two mobile apps: the answerer has to be reachable from somewhere other than the machine doing the work.

The assurance case does not transfer. It was built for a session with a person in it.

Where the collaboration model points

The permission model tells the same story from a third direction.

Managed Omnigent offers two levels when sharing a session: Read and Edit [5]. Edit is described as full control — send messages, open shells, edit files in the host file system, rename the session — with the caution that an editor can run shell commands and modify files on the host through the agent, and can also view your other session chats [5]. That is a model designed for colleagues, not for services. The repository is blunter still: a teammate can co-attach to a running session, and their messages execute on your machine [15].

There is a corollary worth stating precisely. Every elicitation resolver reachable in production is human-driven — the resolve route, the events route, a Slack button, the REPL, and the Python SDK client [16]. But the SDK client is an authenticated API client, so anyone holding an edit-level credential can script an accept. That is not a bypass mode; it is an authorized client doing what an authorized person’s client does. It means “a human answered” is guaranteed by credential custody rather than by the gate — which is the same boundary the prior dispatch found when the approver’s identity was spent on the access check and never carried into the resolution.

There is also a question about what an approver approves. The human’s decision is a boolean, accept or decline; when the elicitation carries a schema, the form content is machine-filled from that schema rather than chosen by the person [16]. The consent is real. Its granularity is coarser than the artifact it authorizes. And the project’s own policy introduction tells operators they can simply ask the agent to add a policy, because coding agents receive the tools to do it [4].

There is also a disclosure surface that only makes sense among collaborators. The engine exposes a read-only evaluation path so a read-level participant can run the policy engine against a hypothetical action and see what the decision and its pending writes would be, without writing anything [10]. Multi-user accounts are opt-in as well, enabled by a single environment variable, which the Docker deploy sets for you [15]. A default local server therefore runs without accounts at all — reachable only on the local network, which is the mitigation, and also the assumption. The current release adds a warning that names the failure of that assumption in its own words: a single-user server bound to a non-local interface will serve unauthenticated requests as the local user to anyone who can reach the address [20]. Credit where due — v0.10.0 added the warning, not the exposure. But read next to a resolve route that gates on edit level, it describes a configuration in which requests are served as the local user, so any reachable party inherits that effective authority — including the authority to answer an approval. For a teammate diagnosing why the agent got blocked, that is a good feature. As a property of a governance substrate, it means a principal who cannot act can still probe the control surface — which is a reasonable trade in a shared workstation and a different conversation entirely in a multi-tenant production deployment.

The Hard Claim

Omnigent’s strongest controls presuppose an operator who is present. The gate is an elicitation answered by a person; its fail-closed behavior on timeout is what happens when nobody is. The fatigue engineering — root-scoped approvals, per-user daily suppression — exists because a human is being asked repeatedly. The task-switch nudge treats session state as disposable, which is right for a developer’s context window and wrong for a governance record. And the sharing model grants shell and file access to editors, because editors are colleagues.

And where the product meets an operating mode with no human in it, its answer is on record: switch the inner tool’s consent gate off by default for two harnesses, tell unattended operators to shorten a timeout tuned for someone stepping away, and in one bounded case send the accept keystroke itself with an info-level log line as the only record. None of that is a defect. It is a well-matched design for a developer tool that still describes itself as alpha [14], was described as one on day one, and the authors labeled the autonomous mode separately rather than pretending one surface serves both.

The category error belongs to the reader who takes the human-in-the-loop story as an enterprise governance substrate for unattended agents. On that path the approval layer holds only while someone is reachable, the intent classifier abstains, and what remains is predicates plus immutable spec policy. That is a narrower guarantee than the one the demonstrations imply, and it is the one an unattended fleet can rely on unconditionally.

The general form is worth stating, because it outlives this product. A control’s assurance claim is conditional on the operating assumptions required for that control to execute. Change the assumptions and the assurance case has to be rebuilt, not inherited. Compression is what makes this easy to miss: one harness, one policy layer, one vocabulary — and two operating modes whose control semantics are not the same.

Change the Operating Assumptions and the Assurance Case Has to Be Rebuilt, Not Inherited.

If you are moving an agentic control design from an attended pilot into unattended production and want a practitioner conversation, the calendar is open.

Start the conversation
The Great Compression  ·  Omnigent Cluster  ·  Companion Dispatches
Dispatch  ·  Published Constraint Is Not Control
Dispatch  ·  Published Swapping the Model Swaps the Control
Dispatch  ·  Published The Intent Check Fails Open
Dispatch  ·  Published The Gate Holds. The Judge Doesn’t.
Dispatch  ·  Now Reading The Harness Needs a Human
References & Sources
The Great Compression — Foundation Series  ·  11 Posts  ·  March–May 2026

Share this:

Like this:

Like Loading…