# Share OpenHands Output — Get It Out of the Sandbox

Canonical: https://commareports.com/agents/share-openhands-output
Published: 2026-09-05

> OpenHands works inside a container whose filesystem disappears when the session ends. Publishing to a URL is the only exit that survives the runtime — over MCP or one REST call.

# Share what OpenHands produced

OpenHands runs in a sandbox, which is the right design and an awkward one for
output. The agent clones the repo, runs the tests, works out why the migration
fails on Postgres 16, writes it all down — inside a container that is not your
machine and, by default, does not exist ten minutes later.

Mounting a volume gets the file out. It does not get the _document_ out: a file
on a host disk still has no address, no access setting and nobody to read it.

## Publishing is the exit that works

OpenHands takes MCP servers in its configuration, and the sandbox only needs
outbound HTTPS to reach one. Add Comma with the endpoint and a token from
[API tokens](/docs/api-tokens) — see [MCP setup](/mcp) for the shape — and the
agent can publish from inside the container.

Then say so in the task, or in the standing instructions the runtime carries:

```md
Work happens in the sandbox; results do not stay there. When you finish a
document a human needs — an investigation, a plan, a test analysis — publish it
to Comma as an HTML report and return the URL as your final answer.
```

## Headless is the case that matters

An interactive OpenHands session at least has you watching the terminal. A
headless run on a schedule has nobody:

```bash
COMMA_API_TOKEN=... python -m openhands.core.main \
  -t "Reproduce issue 412, diagnose it, publish the write-up to Comma and \
      return only the URL."
```

The container exits, the workspace evaporates, and the thing that survives is a
page. If you would rather not own the scheduler, see
[routines](/docs/routines); if the run belongs in a pipeline, see [CI](/ci).

## Why a page rather than a mounted file

- **It has an address** you can paste into the issue the run was about.
- **It renders faithfully** in a sandboxed iframe — logs, tables, diffs.
- **It has a comment thread** anchored to the finding — see
  [commenting on HTML](/comment-on-html).
- **The agent can read the replies** on the next run through the same server.

## Worth knowing

- **Scope hard.** A sandboxed agent with a broad token is the worst of both
  designs. `reports:write` and nothing more — see
  [scoped tokens](/agents/scoped-tokens-for-ai-agents).
- **5 MB of HTML** per report body.
- **Rate limits are per token**, so a runaway loop is bounded.

## Try it

Free — unlimited reports, commenters and revisions.

**[See MCP setup →](/mcp)**

### Related

- [Where should my agent post?](/agents/where-should-my-agent-post)
- [Share Devin output](/agents/share-devin-output) ·
  [Share Jules output](/agents/share-jules-output)
- [CI & pipelines](/ci) · [The API](/docs/api)
