AGENTS.md@apps/lemon_computer_use · git:20261015.6f41aa2 · 2026-10-15 · sha256 60e0667bb611d0b5

AGENTS.md@apps/lemon_computer_use git:20261015.6f41aa2A

Immutable. This exact content never changes and is served at /api/v1/blob/60e0667bb611d0b5.

# LemonComputerUse contributor guide

`lemon_computer_use` lets Lemon agents operate native apps through LCU. LCU and
the original runtime own computer-use behavior; this app is transport,
approval routing and lifecycle. See [README](README.md) and the
[tool reference](../../docs/tools/computer-use.md).

## Boundaries

- Dependencies are `lemon_core`, `lemon_agent`, `lemon_ai`. Tools and the
  prompt section register through the platform registries; `coding_agent` must
  not name this app.
- Use LCU's shared client (`<lcu-root>/adapters/client.mjs`) from the bridge.
  Do not reimplement the MCP session, approval deadlines or the agent-host
  guard, and do not expose host-only tools (`turn_ended`,
  `js_add_node_module_dir`) to the model.
- Opt-in only. Disabled, start no process and register nothing.

## Invariants

- One bridge, one in-flight operation: an approval request belongs to the call
  in flight and must name its session/turn when the runtime supplies them.
- Real identities: session = Lemon session id, turn = run id. Never reuse an
  ended turn id; end turns on `:run_completed` or session exit.
- Approvals go through `ExecApprovals` and fail closed: errors, unknown scopes,
  malformed or non-native-app requests cancel. Lemon's own apps are declined.
  Never write LCU's always-allowed store.
- The bridge gets a minimal environment (no provider credentials or `LEMON_*`)
  and the account's real home. Results are forwarded unchanged and untrusted.
- A bridge crash fails in-flight calls as possibly applied; never retry them.

## Verification

From the umbrella root: `scripts/test path apps/lemon_computer_use/test`
(fake bridge in `test/support`, needs `node`). The live Calculator smoke needs
LCU and the ChatGPT app: add `--include computer_use_live`.