Browser automation CLI for AI agents
docker pull vercel-labs/agent-browser
docker run -d --name agent-browser --restart always vercel-labs/agent-browser:latest
podman run -d --name agent-browser --restart always vercel-labs/agent-browser:latest
skopeo inspect docker://docker.io/vercel-labs/agent-browser:latest
oras pull vercel-labs/agent-browser:latest
docker compose up -d
# Docker Compose for building agent-browser
# Usage: docker compose -f docker/docker-compose.yml run build-linux
# docker compose -f docker/docker-compose.yml run build-windows
#
# Note: macOS builds should be done natively on macOS for compatibility.
services:
# Build for Linux platforms
build-linux:
platform: linux/amd64
build:
context: ..
dockerfile: docker/Dockerfile.build
volumes:
- ../cli:/build
- ../bin:/output
command: |
-c '
set -euo pipefail
echo "Building for Linux platforms..."
rm -f /output/agent-browser-linux-x64 /output/agent-browser-linux-arm64
echo "โ Linux x64"
cargo zigbuild --release --target x86_64-unknown-linux-gnu.2.28
cp /build/target/x86_64-unknown-linux-gnu/release/agent-browser /output/agent-browser-linux-x64
chmod +x /output/agent-browser-linux-x64
echo "โ Linux x64 done"
echo "โ Linux ARM64"
cargo zigbuild --release --target aarch64-unknown-linux-gnu.2.28
cp /build/target/aarch64-unknown-linux-gnu/release/agent-browser /output/agent-browser-linux-arm64
chmod +x /output/agent-browser-linux-arm64
echo "โ Linux ARM64 done"
echo ""
echo "โ Linux platforms built successfully!"
ls -la /output/agent-browser-linux-*
'
# Build for Windows
build-windows:
platform: linux/amd64
build:
context: ..
dockerfile: docker/Dockerfile.build
volumes:
- ../cli:/build
- ../bin:/output
command: |
-c '
set -euo pipefail
echo "Building for Windows x64..."
rm -f /output/agent-browser-win32-x64.exe
cargo build --release --target x86_64-pc-windows-gnu
cp /build/target/x86_64-pc-windows-gnu/release/agent-browser.exe /output/agent-browser-win32-x64.exe
echo ""
echo "โ Windows build completed!"
ls -la /output/agent-browser-win32-*
'
# Build for a single target
build-single:
platform: linux/amd64
build:
context: ..
dockerfile: docker/Dockerfile.build
volumes:
- ../cli:/build
- ../bin:/output
environment:
- TARGET=${TARGET:-}
- RUST_TARGET=${RUST_TARGET:-}
- BUILD_TARGET=${BUILD_TARGET:-}
- OUTPUT_NAME=${OUTPUT_NAME:-agent-browser-linux-x64}
command: |
-c '
set -euo pipefail
rust_target="$${RUST_TARGET:-}"
build_target="$${BUILD_TARGET:-}"
legacy_target="$${TARGET:-}"
normalize_rust_target() {
case "$$1" in
x86_64-unknown-linux-gnu.*)
printf "%s\n" "x86_64-unknown-linux-gnu"
;;
aarch64-unknown-linux-gnu.*)
printf "%s\n" "aarch64-unknown-linux-gnu"
;;
*)
printf "%s\n" "$$1"
;;
esac
}
derive_build_target() {
case "$$1" in
x86_64-unknown-linux-gnu.*|aarch64-unknown-linux-gnu.*)
printf "%s\n" "$$1"
;;
x86_64-unknown-linux-gnu|aarch64-unknown-linux-gnu)
printf "%s.2.28\n" "$$1"
;;
*)
printf "%s\n" "$$1"
;;
esac
}
if [ -n "$$rust_target" ]; then
rust_target="$$(normalize_rust_target "$$rust_target")"
fi
if [ -n "$$legacy_target" ]; then
if [ -z "$$rust_target" ]; then
rust_target="$$(normalize_rust_target "$$legacy_target")"
fi
if [ -z "$$build_target" ]; then
build_target="$$(derive_build_target "$$legacy_target")"
fi
fi
if [ -z "$$rust_target" ] && [ -n "$$build_target" ]; then
rust_target="$$(normalize_rust_target "$$build_target")"
fi
if [ -z "$$build_target" ] && [ -n "$$rust_target" ]; then
build_target="$$(derive_build_target "$$rust_target")"
fi
if [ -z "$$rust_target" ]; then
rust_target="x86_64-unknown-linux-gnu"
fi
if [ -z "$$build_target" ]; then
build_target="$$(derive_build_target "$$rust_target")"
fi
expected_rust_target="$$(normalize_rust_target "$$build_target")"
if [ "$$expected_rust_target" != "$$rust_target" ]; then
echo "ERROR: BUILD_TARGET ($$build_target) maps to $$expected_rust_target, but RUST_TARGET is $$rust_target"
exit 1
fi
rm -f /output/$$OUTPUT_NAME
cargo zigbuild --release --target "$$build_target"
source_path=/build/target/$$rust_target/release/agent-browser
if [ -f "$$source_path.exe" ]; then
source_path="$$source_path.exe"
fi
cp "$$source_path" /output/$$OUTPUT_NAME
chmod +x /output/$$OUTPUT_NAME 2>/dev/null || true
echo "โ Built $$OUTPUT_NAME"
'