Together
A shared workspace for you and your AI agent to hire a real human — together. Your agent drafts the task on this page through WebMCP tools, and you decide how much rope it gets: approve each task with a click, or flip Autopilot and hand it standing authority to submit on its own while you watch. Either way, a verified human operator picks the work up live. Humans in the loop exactly where you put them.
You
human, presentread_workspace tool and drafts the formal task for you.
Work with me on this page — read my goal and draft the task for my approval.
Your agent
not connected yetShared draft empty
No draft yet. Your agent writes here with draft_task — and you can edit any field it writes, right on the page.
submit_approved_task — your click is the approval — and a waiting agent gets submitted_by_human.
Activity — who did what
The operator
human, remote & verifiedLive tasks
Approved and submitted tasks appear here with live status — including the moment a real human has seen them.
Thread with the operator
Questions before committing? You or your agent can open a message thread with the operator (message_operator) — replies land right here.
Agent capability manifest — live
7 tools registered- approvenever a tool — your click
- rejectnever a tool — your click
- grant autopilotnever a tool — your toggle
- revoke autopilotnever a tool — your toggle
All seven tools stay registered for the whole session. The gates live inside them: a call the state doesn't allow comes back as a structured refusal (isError plus an error code and the reason), so an agent learns what to do next instead of finding a tool missing. The four authority actions have no tool form at all. Every result is bounded to 8,000 serialized characters.
WebMCP inspector — every tool call on this page, live 0 calls
Exact arguments in, exact result out, for a real agent overdocument.modelContext and for the simulator alike — the same JSON the agent sees. Amber entries are simulated.
0 calls · median 0 ms · 0 refused · 0 stopped for the human
How to use this page with your agent
- Open this page in the ChatGPT desktop app's browser, or Chrome with WebMCP enabled.
- Type your goal in the You lane, in plain words.
- Ask your agent something like: "Work with me on this page — read my goal and draft the task for my approval."
- Watch it draft in the middle lane. Edit any field yourself — it's a shared document.
- When it requests approval, you click — the approval binds to the exact draft revision shown, and any edit voids it. Or grant Autopilot: standing authority with a task budget and an expiry you set. Or skip the round-trip and press Submit this draft myself — same gate, your click is the approval, and a waiting agent is told submitted_by_human. Your agent, your call.
- A verified human operator gets pinged, and you both watch the task go submitted → seen → accepted → delivered, live.
await_human until you click, then places a clearly marked simulated task on the operator board and walks it through the lifecycle. Nothing is sent to the real operator, and the inspector shows every payload.
The tools this page registers
| tool | what it does |
|---|---|
| read_workspace | Read the shared state: your goal, notes, draft, approval status, tracked tasks, operator thread. |
| draft_task | Write or revise the task draft on the page, field by field. Every field shows who wrote it last. |
| request_human_approval | Ask the human for the click. Skipped entirely when the human has granted Autopilot. |
| await_human | Block until the human acts — approve, reject, edit, note, grant or revoke Autopilot, or submit the draft themselves — or a timeout passes. A tool call resolved by an explicit human action on the page. |
| submit_approved_task | Submits the real task to the real operator. Requires either a per-task approval or standing Autopilot authority — the human chooses the regime. |
| track_task_status | Live status of workspace tasks: seen-by-operator, ETA, status history, delivery, signed receipt. |
| message_operator | Open or continue a message thread with the human operator, rendered on the page for both of you. |
The capability manifest above the inspector shows, live, which of these calls would succeed right now and which would come back as a structured refusal. Results are bounded to 8,000 serialized characters; arguments are accepted as an object or as a JSON string. Registered via document.modelContext (W3C Web Model Context draft), with navigator.modelContext fallback. Same REST endpoints as the API and the remote MCP server — one interface, three readers.