## Agent State and System Prompt
This PR aims to improve the agent by rewriting the way the state is
constructed, as described in `system_prompt.md`, new state consists of:
1. Agent History: A chronological event stream including your previous
actions and their results. This may be truncated or partially omitted.
2. Agent State: Includes the ultimate goal provided by the user, current
progress, and relevant contextual memory.
3. Browser State: Contains current URL, open tabs, interactive elements
indexed for actions, visible page content, and (sometimes) any visual
context provided by screenshots or page snapshots.
4. Read State: If your previous action involved reading a file or
extracting content (e.g., from a webpage), the full result will be
included here. This data is **only shown in the current step** and will
not appear in future Agent History. You are responsible for saving or
interpreting the information appropriately during this step.
Please refer to `system_prompt.md` for explanation of what the model
gets in its context. The PR rewrites the `MessageManager` to achieve the
displaying of this state. This helps maintaining a better state as the
model always sees a constant number of messages: system prompt, example
tool calls, and current state.
## File System
The model now has access to a File System it can interact with so that
it can make a plan, write intermediate results, etc.
1. Agent is initialized with two files `todo.md` and `results.md`. First
one is used so that the model can plan and the contents of this document
is always displayed in agent's state. Second one is so that model can
accumulate results for long tasks. File system is always displayed in
Agent State in format:
file_name — num_lines lines
2. Model is allowed to use 3 functionalities, `write_file`,
`append_file`, and `read_file`. We should improve the descriptions of
these functions. Finally, there should be an option to "edit a string"
(Replace line `"{content}"` to `"{new_content}"`.
3. Currently, for safety reasons, agent can ONLY create files in format
`{file_name}.{md|txt}` and cannot create subdirectories or go back. This
makes sure that agent's
4. The file system is currently launched in a temporary directory with a
random uuid - this can be changed so that we just use `tempfile`'s
temporary file and temporary directory functionality, stored in memory
and to be deleted when program terminates.
6. Optionally, the user might want to keep the results saved in the
directory so there should be an option to set a directory which will not
be deleted at the end.
7. Finally, the agent is not allowed to be initialized in an existing
directory. This is to make sure that files written in a previous do not
impact a new agent's behavior accidentally. However, this is annoying as
it requires the user to delete the directory between multiple runs.
## AgentBrain
AgentBrain object has a new thinking field - need to make sure that this
is taken care of in the entire codebase, saved/displayed when necessary.
## AgentResult
AgentResult object has 2 new fields, `memory` which is what will be
added to Action History that the agent will see and `update_read_state`,
a boolean that determines whether the action should result in updating
the read state. This is used for actions such as `extract_content` and
`read_file`, where the model should see the content of the file once but
file contents shouldn't remain in history forever.
## Details and Next Steps
1. Currently browser state is capped at 10k characters - this is very
primitive and should be changed with a smarter semantic processing
layer.
2. I think we want to permanently include file system in the Agent -
this feature seems very important. So the controller functions for using
a file system should be moved from agent into controller.
3. We should add a function call for sending user a message with the
results before calling `done` - this is simply more clean and more
intuitive for the model.
4. Save the current page as PDF file should directly use the file
system.
5. Currently, there seems to be a bug with `append_file`, should be
fixed.
6. Not all language models seem to work with current version - for
example, maybe we should get rid of `current_state` field.
7. Get rid of langchain and do our own LLM calls for better tractability
and more control over what goes into the LLM.
I think there are a lot more things to be addressed regarding this PR,
but this is all I could gather.
Enable AI to control your browser 🤖
🌐 Browser-use is the easiest way to connect your AI agents with the browser.
💡 See what others are building and share your projects in our Discord! Want Swag? Check out our Merch store.
🌤️ Skip the setup - try our hosted version for instant browser automation! Try the cloud ☁︎.
Quick start
With pip (Python>=3.11):
pip install browser-use
For memory functionality (requires Python<3.13 due to PyTorch compatibility):
pip install "browser-use[memory]"
Install the browser:
playwright install chromium --with-deps --no-shell
Spin up your agent:
import asyncio
from dotenv import load_dotenv
load_dotenv()
from browser_use import Agent
from langchain_openai import ChatOpenAI
async def main():
agent = Agent(
task="Compare the price of gpt-4o and DeepSeek-V3",
llm=ChatOpenAI(model="gpt-4o"),
)
await agent.run()
asyncio.run(main())
Add your API keys for the provider you want to use to your .env file.
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
AZURE_OPENAI_ENDPOINT=
AZURE_OPENAI_KEY=
GOOGLE_API_KEY=
DEEPSEEK_API_KEY=
GROK_API_KEY=
NOVITA_API_KEY=
For other settings, models, and more, check out the documentation 📕.
Test with UI
You can test browser-use using its Web UI or Desktop App.
Test with an interactive CLI
You can also use our browser-use interactive CLI (similar to claude code):
pip install browser-use[cli]
browser-use
Demos
Task: Add grocery items to cart, and checkout.
Prompt: Add my latest LinkedIn follower to my leads in Salesforce.
Prompt: Read my CV & find ML jobs, save them to a file, and then start applying for them in new tabs, if you need help, ask me.'
https://github.com/user-attachments/assets/171fb4d6-0355-46f2-863e-edb04a828d04
Prompt: Write a letter in Google Docs to my Papa, thanking him for everything, and save the document as a PDF.
Prompt: Look up models with a license of cc-by-sa-4.0 and sort by most likes on Hugging face, save top 5 to file.
https://github.com/user-attachments/assets/de73ee39-432c-4b97-b4e8-939fd7f323b3
More examples
For more examples see the examples folder or join the Discord and show off your project. You can also see our awesome-prompts repo for prompting inspiration.
Vision
Tell your computer what to do, and it gets it done.
Roadmap
Agent
- Improve agent memory to handle +100 steps
- Enhance planning capabilities (load website specific context)
- Reduce token consumption (system prompt, DOM state)
DOM Extraction
- Enable detection for all possible UI elements
- Improve state representation for UI elements so that all LLMs can understand what's on the page
Workflows
- Let user record a workflow - which we can rerun with browser-use as a fallback
- Make rerunning of workflows work, even if pages change
User Experience
- Create various templates for tutorial execution, job application, QA testing, social media, etc. which users can just copy & paste.
- Improve docs
- Make it faster
Parallelization
- Human work is sequential. The real power of a browser agent comes into reality if we can parallelize similar tasks. For example, if you want to find contact information for 100 companies, this can all be done in parallel and reported back to a main agent, which processes the results and kicks off parallel subtasks again.
Contributing
We love contributions! Feel free to open issues for bugs or feature requests. To contribute to the docs, check out the /docs folder.
🧪 How to make your agents robust?
We offer to run your tasks in our CI—automatically, on every update!
- Add your task: Add a YAML file in
tests/agent_tasks/(see theREADME therefor details). - Automatic validation: Every time we push updates, your task will be run by the agent and evaluated using your criteria.
Local Setup
To learn more about the library, check out the local setup 📕.
main is the primary development branch with frequent changes. For production use, install a stable versioned release instead.
Swag
Want to show off your Browser-use swag? Check out our Merch store. Good contributors will receive swag for free 👀.
Citation
If you use Browser Use in your research or project, please cite:
@software{browser_use2024,
author = {Müller, Magnus and Žunič, Gregor},
title = {Browser Use: Enable AI to control your browser},
year = {2024},
publisher = {GitHub},
url = {https://github.com/browser-use/browser-use}
}