Skip to main content
Wildo.ai Coming soon

Coding agents

Choose what a run may approve

Apply an explicit permission policy to the requests a coding agent sends to Wildo.

A run policy distinguishes edit requests, their locations and command execution.

Choose what a run may approve

An agent’s permission mode should not be the only explanation of what it may do. Wildo gives a run an explicit policy and uses it to answer the agent’s permission requests.

You choose the kinds of work the run can approve. The task’s declared locations provide a separate check, and the run records the decisions made along the way.

Example — Allow file edits without approving commands

A focused change needs edits to declared source files. A reads-and-edits policy can approve those requests while refusing shell execution. A task that needs to run commands requires a different, deliberate choice.

For engineers

Set the ceiling in the ACP execution profile referenced by the coding-agent binding. This is a selected configuration fragment; the profile also needs the provider, runner, authentication and environment settings described in coding-agent setup.

executionProfiles: {
  'reviewed-edits-acp': {
    // Other required execution-profile settings belong here.
    permissionCeiling: AgentClientProtocol_PermissionCeiling.AUTO_ACCEPT_READS_AND_EDITS,
  },
},

AgentClientProtocol_PermissionCeiling is exported by @wildo-ai/external-connectors-models. The agent binding must name this profile. After changing application configuration, run wildo config sync and verify the companion is using the updated profile before dispatch.

Match the policy to the work

CeilingRequests the client can approve
PROMPT_ALWAYSNone in this unattended runner; it denies rather than opening an interactive prompt.
AUTO_ACCEPT_READSDeclared read, search, fetch and think operations.
AUTO_ACCEPT_EDITSDeclared edit, delete and move operations.
AUTO_ACCEPT_READS_AND_EDITSBoth of those sets.
UNRESTRICTEDAll tool kinds, including execution and unclassified requests.

These are tool-kind policies. Reads and edits are different sets, not successive levels of the same permission. An invocation override retains only operations admitted by both policies. Requesting reads from an edit-only profile therefore grants neither reads nor edits; it cannot turn the override into new access. Leaving the override absent retains the profile’s policy.

Follow an individual decision

The runner applies the ceiling first, then the task’s location predicate, then selects an acceptable one-time approval. The following selected source shows the separate scope and approval steps after the ceiling has passed:

if (options.isPermittedLocation && locations.some((path) => !options.isPermittedLocation!(path))) {
  record(false, ACPPermissionDecisionReason.LOCATION_OUT_OF_SCOPE);
  return { allowed: false };
}

const once = rawOptions.find((entry) => isRecord(entry) && entry.kind === 'allow_once');
if (isRecord(once) && typeof once.optionId === 'string') {
  record(true, ACPPermissionDecisionReason.ALLOWED_ONCE);
  return { allowed: true, optionId: once.optionId };
}
record(false, ACPPermissionDecisionReason.NO_SELECTABLE_OPTION);
return { allowed: false };

The runner does not select an allow_always option that could change later decisions. Its bounded decision record includes the declared tool kind, locations, offered options and result. Direct client filesystem writes also check the edit ceiling and the location predicate, even if the agent sends no permission request first. Read-only policies do not advertise client write support; attempts to use it are still refused and recorded.

Check whether the provider can participate

The provider contract declares whether the agent raises permission requests before mutation. Dispatch checks that declaration and the composed environment. A restrictive ceiling is refused when those guards cannot fire; a conditionally escalating provider needs its configuration pointer present in the child environment.

UNRESTRICTED deliberately permits that broader execution. It does not create a filesystem sandbox. An agent performing its own I/O without callbacks, or an allowed shell command declaring no locations, does not receive a per-file scope check from these permission decisions. Inspect the resulting changes and run warnings as well as the configured policy.

The host-side admission probe tests refusal against an actual filesystem result. Use the supported arguments shown by the installed CLI before evaluating a new adapter or configuration:

wildo acp probe --help

A provider declaration tells dispatch how to proceed; a probe checks the behavior behind it. Re-evaluate that behavior when the adapter or its host configuration changes.

Building a B2B product or an internal tool?

Wildo is not self-service yet. Tell us what you have in mind and we will say plainly whether it fits, and what happens next.