Building agents that do work for users
Your agent needs to use customer portals, admin panels, CRMs, booking systems, vendor sites, or other browser-only software on a user's behalf.
Jelly turns Chromium into a compact, inspectable tool surface for agents: discover semantic browser operations progressively, batch ordered actions, verify outcomes, and preserve evidence without publishing every browser primitive at once.
Jelly documenting Jelly. This video was generated by Jelly itself from a real Chromium session. After each browser action, Jelly waits for the page to settle, captures the resulting state, labels what happened, and assembles the steps into this self-documenting trace.
Jelly is for teams whose product or internal automation has to use third-party web apps as part of the job. Log in, move through multi-step flows, upload or download files, change records, and keep going when the page changes.
Your agent needs to use customer portals, admin panels, CRMs, booking systems, vendor sites, or other browser-only software on a user's behalf.
Finance, support, onboarding, procurement, and back-office workflows often span tools with weak APIs or no useful API at all.
You want shared browser behavior for inspection, actions, verification, files, failures, and human handoff instead of rebuilding it in every agent.
Open a vendor portal, apply filters, export a report, wait for the download, verify the file, and hand it to the next step.
Find an account in an internal admin tool, change a status or setting, and verify that the new state is visible before continuing.
Create or update records across SaaS and partner portals, upload required files, and check each step before moving on.
Navigate JavaScript-heavy pages, read structured content, follow links, and save screenshots or downloads when evidence matters.
Have an agent execute a user flow, assert the expected page state, and keep screenshots or files from the run for review.
Run until authentication, approval, or a human decision is needed, hand off, then inspect the resulting state and continue.
The useful part is not another click command. It is keeping enough state and structure around the browser action for an agent to continue without guessing.
Read content, discover interactive elements, inspect forms, links, images, tabs, accessibility state, and network activity.
Wait for or assert URLs, text, visibility, image readiness, downloads, and other conditions the next step depends on.
Register screenshots and downloads with paths, metadata, integrity checks, and verification context.
Use typed failures to decide when to inspect again, route elsewhere, stop, or ask a human for help.
Move repeated sequences into guarded routines when they need branching, loops, recovery, HITL, or explicit cleanup.
Use Jelly directly from the CLI or expose the small-surface MCP Agent API: progressive schema discovery, ordered browser calls, retained events, and an explicit large-surface compatibility mode.
If you control the flow and a normal browser script is enough, use the simpler tool. Jelly is not trying to replace that.
If the model only needs basic browser controls, a smaller tool surface may be the better fit.
Jelly is useful when the agent needs current state, checks, files, recovery, routines, or human handoff across several browser steps.
A successful tool call means Jelly performed the browser action. It does not automatically mean the application reached the intended state.
When later work depends on a fact, wait for it or assert it explicitly instead of carrying an assumption forward.
Screenshots and downloads can be registered with the run instead of becoming anonymous files on disk.
Jelly exposes browser state, failures, and workflow controls. Your agent or routine still decides what to do with them.
No. Call individual tools directly. Move a sequence into a routine when branching, recovery, HITL, or reuse makes that worthwhile.
No. Jelly does not choose goals or plan the task. It handles browser instrumentation and execution.
Use HITL for the human step, then re-inspect the browser and continue from the resulting state.
Start with the tool schemas and direct calls. The deeper reliability and routine model is there when the workflow actually needs it.
The fastest way to evaluate Jelly is to run it, inspect a page, perform one action, and verify the result.
$ git clone https://github.com/FabioFlorey/jelly.git $ cd jelly $ ./quickstart.sh # inspect the setup without changing anything $ ./quickstart.sh --dry-run