Local apps

A Local App is a static HTML and JavaScript interface hosted by an agent. It can present a focused view of work, collect input, or offer controls for a particular workflow. The app's files live under that agent's apps/ directory; users open it through a logical app route.

An app may also be a static site or an uncompressed, single-threaded Unity Web build. A root index.html is enough when no manifest.json exists: the runtime derives metadata in memory without changing the build output. An explicit manifest still controls metadata and custom entry pages; a broken manifest is an error, not a reason to guess another entry.

For example, a documentation agent could host a review queue with a button to request a fresh link check. The app presents the queue and sends the request. The agent performs the authorized work and reports the result.

How apps fit with other surfaces

The Web GUI is a general client for managing Holon. A Local App is an agent-owned interface for a narrower purpose. Its static files are separate from the GUI implementation.

A skill tells an agent how to carry out a workflow. A tool executes an operation. An app can provide a human interface to that workflow, but it does not replace either the skill or the tool. Hosting a "Run checks" button does not create a new runtime capability.

Requests and events

The browser SDK exposes the app's context, a request method, and an event stream. Context identifies the app, its owning agent, and session state. A request submits structured input to the agent. Events expose app-related runtime activity.

In the review-queue example, a successful request response confirms that the request was accepted. It does not mean the link check passed, or even that the agent has finished handling it. The interface must distinguish accepted, pending, and completed work and display actual results when available.

The current event stream reports requests being enqueued and processing starting. It does not stream completed business results or all agent activity. An app must obtain the outcome through the result surface appropriate to its workflow rather than displaying "complete" when processing starts. Replay is bounded, so after a disconnect, check work state rather than assuming a missing event means nothing happened. See Results and artifacts.

Identity, sessions, and authority

App routes identify an agent and app without exposing the Agent Home path. They are logical addresses, not independent access credentials.

Hosted apps share the runtime's origin and authenticated browser session. The SDK uses that existing session; it grants no extra authority. Requests preserve their App provenance. Neither a button label nor the app owner's agent ID makes submitted text an operator instruction.

The host enforces contained, non-hidden file paths and a configurable per-file size limit (64 MiB by default). It does not impose an extension allowlist or a platform Content Security Policy by default. Operators may configure a complete App CSP; browser CORS and any app-supplied CSP still apply. These settings do not change Web GUI or Explorer sandbox policy. With a running daemon, holon config set and holon config unset persist these settings through the existing configuration API and schedule reload. After a successful reload, subsequent App requests use the new settings; in-flight streams retain their acquired policy. Direct configuration-file edits do not automatically reload; offline settings take effect on daemon startup or restart. They also do not provide separate browser origins or isolation between mutually untrusted apps. Review app code before hosting it in a session that can access the control plane.

Cross-agent actions remain subject to the runtime's authority checks. The SDK does not supply a separate permission system or bypass those checks.

When to use one

Use a Local App when a small persistent interface makes an agent's work easier to inspect or request. For general agent administration, the Web GUI or CLI may already provide what you need. For unattended integration, use the HTTP control plane rather than requiring a browser app to stay open.

Next steps