Overview
Add in Chrome extensions to your Steel sessions.
Steel’s Extensions system is currently in beta and is subject to improvements, updates, and changes. If you have feedback, join our Discord or open an issue on GitHub.
Steel's extensions are designed to enhance the functionality of Steel sessions by providing additional features and capabilities. These extensions can be used to automate tasks, enhance security, and improve the overall agent experience. They can be installed through the API for your organization and attached to any session.
Extensions have long been a part of the browser ecosystem, since the release of Internet Explorer version 4 in 1997, users have been able to create their own extensions and make their browser their own. With the advent of agentic browsing and browser agents, extensions have gained a whole new light. Allowing thousands of agents to extend their own browser sessions with custom functionality.
Getting Started
Before extensions can be used in a browser session, they must first be uploaded either with a .zip/.crx file or downloaded from the Chrome Web Store.
All extensions are stored globally against your organization. You only need to upload them once. The supported formats include .zip and .crx
Upload Extension From File
The extensions uploaded have a couple of requirements. They need a preliminary manifest.json file to define the extension's metadata and functionality. This file should include details such as the extension's name, version, and any permissions required.
curl -X POST https://api.steel.dev/v1/extensions \
-H "steel-api-key: YOUR_API_KEY_HERE" \
-F "file=@extensions/recorder/recorder.zip"
await client.extensions.upload({
file: fs.readFileSync('extensions/recorder/recorder.zip')
});
with open("extensions/recorder/recorder.zip", "rb") as file:
client.extensions.upload(
file=file
)
Upload Extension from Chrome Web Store
Go to the Chrome Web Store and click on the extension you want to upload. Copy the URL and include it in the request below
curl -X POST https://api.steel.dev/v1/extensions \
-H "steel-api-key: YOUR_API_KEY_HERE" \
-F "url=https://chromewebstore.google.com/detail/.../..."
await client.extensions.upload({
url: "https://chromewebstore.google.com/detail/.../..."
});
client.extensions.upload(
url="https://chromewebstore.google.com/detail/.../..."
)
Once they are installed for your organization, you can inject them into your sessions.
Injecting Extensions into a Session
You can inject specific extensions into your sessions based on the extensionId
field or you can pass all_ext
to inject all extensions from your organization.
curl -X POST https://api.steel.dev/v1/sessions \
-H "Content-Type: application/json" \
-H "steel-api-key: YOUR_API_KEY_HERE" \
-d '{
"extensionIds": ['all_ext']
}'
# -d '{
# "extensionIds": ['extensionId_1', 'extensionId_2']
# }'
const session = await client.sessions.create({
extensionIds: ['all_ext'] // extensionIds=['extensionId_1', 'extensionId_2']
});
client.sessions.create(
extension_ids=['all_ext'] # extension_ids=['extensionId_1', 'extensionId_2']
)
And now your sessions have extensions!
These extensions will be injected into the Steel browser session that then runs with that session. Extensions are loaded and initialized when the session starts. They can communicate with the session using the Chrome DevTools Protocol (CDP) and interact with the browser environment.
Updating Extensions From File
After using your extensions, you can update them by uploading a new version of the extension. You will need to specify the extensionId
of the extension you want to update.
curl -X PUT https://api.steel.dev/v1/extensions/{extensionId} \
-H "Content-Type: application/json" \
-H "steel-api-key: YOUR_API_KEY_HERE" \
-F "file=@extensions/recorder2/recorder2.zip"
await client.extensions.update("{extensionId}",{
file: fs.readFileSync("extensions/recorder2/recorder2.zip")
});
with open("extensions/recorder2/recorder2.zip", "rb") as file:
client.extensions.update("{extensionId}",
file=file
)
Updating Extensions From Chrome Web Store
You will need to specify the extensionId
of the extension you want to update
curl -X PUT https://api.steel.dev/v1/extensions/{extensionId} \
-H "steel-api-key: YOUR_API_KEY_HERE" \
-F "url=https://chromewebstore.google.com/detail/.../..."
await client.extensions.update({
url: "https://chromewebstore.google.com/detail/.../..."
});
client.extensions.update("{extensionId}",
url="https://chromewebstore.google.com/detail/.../..."
)
Seeing your Extensions
To see your organization's installed extensions, you can use the GET /v1/extensions
endpoint.
curl -X GET https://api.steel.dev/v1/extensions \
-H "Content-Type: application/json" \
-H "steel-api-key: YOUR_API_KEY_HERE"
const extensions = await client.extensions.list();
extensions = client.extensions.list()
Deleting an Extension
To delete one of your organization's installed extensions, you can use the DELETE /v1/extensions/{extensionId}
endpoint.
curl -X DELETE https://api.steel.dev/v1/extensions/{extensionId} \
-H "Content-Type: application/json" \
-H "steel-api-key: YOUR_API_KEY_HERE"
await client.extensions.delete("{extensonId}")
client.extensions.delete("{extensionId}")
Deleting all Extensions
To delete all of your organization's installed extensions, you can use the DELETE /v1/extensions/
endpoint.
curl -X DELETE https://api.steel.dev/v1/extensions \
-H "Content-Type: application/json" \
-H "steel-api-key: YOUR_API_KEY_HERE"
await client.extensions.deleteAll()
client.extensions.deleteAll()