Development preview · Linux first

Give agents an interface to the computer.

Your applications already have a language.
Let agents speak it — through typed operations,
explicit permissions, and native APIs.

Open source. Local first. You bring the agent.

01 / A CLEARER PATHINTENT → INTERFACE → ACTION
One computer. Many interfaces.Native applicationsAccessibilityBrowsersMCP providers

Less guessing.
More understanding.

A computer is more than a picture of a screen. Work with the objects, operations and boundaries already inside it.

01 / DISCOVER

Ask what’s possible.

Discover the operations an application exposes. Start with its native API, not a guess at the right pixel.

02 / ADDRESS

Know what you mean.

Use typed inputs and current references. Ambiguous or stale targets should stop an action, not become a lucky guess.

03 / AUTHORIZE

Keep the boundaries.

A requested action still has to pass policy. Changing the frontend must not change what an agent is allowed to do.

Conceptual illustrations. Not product screenshots or a live execution.

The command path

From discovery
to a typed request.

A command has a contract. A target has an identity. An action needs authority. Follow the path before it reaches an application.

Inside the interface
INTERACTIVE GUIDE · NOT A LIVE SESSION

Ask what is available.

Inspect the environment, then look for a control by application, role and name.

computerctl · discover
computerctl doctor
computerctl --json capabilities list

computerctl --json ui find \
  --app org.gnome.TextEditor \
  --role button --name Save

Discovery is not a permission grant.

Read the operation first.

A command describes its inputs and authority requirements before an agent asks to use it.

computerctl · inspect
# Inspect the contract before invoking it
computerctl commands describe ui.invoke

One registry. The same contract for every frontend.

Act on a current reference.

Use the reference discovery returned, with an action the target actually advertises.

computerctl · invoke
# Replace this placeholder with a current ref
computerctl ui invoke \
  'ui:<reference from this session>' \
  --action click

A failed mutation never silently switches to a more privileged route.

YOUR AGENTCLI · MCP · Recipes
SemwrightPolicy · References · Audit
PROVIDER RUNTIMENative APIs · Drivers · MCP

Select a step to explore the request. These examples never connect to your computer.

The tools you know.
A different way in.

Deep application APIs where they exist. Desktop semantics where they help. One place to understand the limits.

An intention
is not a permission.

An agent can ask. That does not mean it should be able to act. Semwright makes the distinction part of the execution path.

Observe first.

Observation is the default. Clipboard contents, capture, input and mutations require their own permissions.

No silent escalation.

Switching between CLI, MCP, recipes or providers does not create a more privileged route.

A person approves.

Sensitive actions can require an external operator. The requesting agent cannot approve itself.

Start small.
See the whole path.

Build from source in a disposable Linux environment. Run the fake-backend smoke test before connecting real applications.

Rust core Local-first Explicit permissions
CLI · invocation example
# Inspect before you act
computerctl commands describe ui.invoke

# Use a current reference from discovery
computerctl ui invoke \
  'ui:<reference from this session>' \
  --action click

Replace the illustrative reference with one returned by your own session. The request still needs policy authority.

Before you
get started.

The docs go deeper. The boundaries stay visible.

Is Semwright another AI agent?

No. Semwright is the interface an agent calls, not the model that decides what to do. It exposes capabilities and mediates execution. You bring the agent.

Why not just give an agent a shell?

A shell is useful, but usually inherits the user’s full authority. Semwright is built around narrower operations, scoped references, explicit permissions and a common audit path. An unrestricted shell granted separately can bypass those limits.

Is this only an MCP server?

MCP is one frontend. The CLI, inspector and recipes use the same broker. Application drivers and federated MCP providers extend the capability catalogue without becoming separate authorization paths.

What can I use today?

The development source is available for Linux. Start with a disposable account and the fake-backend smoke test. Application and desktop coverage is experimental and version-specific; the compatibility guide separates code, test evidence and live availability.

Will Windows and macOS be supported?

Cross-platform support is part of the product direction. Linux is the first host. This site does not present Windows or macOS as currently supported.

The computer has more to say.
Give your agent a way in.

Explore the architecture. Try the source. Help build what comes next.