Skip to main content

browseable

browseable is a Unix-style CLI backed by a local daemon that keeps browser sessions alive between commands.

What it does

  • API 1 (elements): given a session, list interactable form/navigation elements.
  • API 2 (action): given a session, perform an action (click, type, or interact).

The daemon holds browser + page state so each CLI command is short-lived.

Install

uv sync
uv run playwright install chromium

Quick start

# Optional convenience.
alias browseable='uv run browseable'

# 1) start daemon
browseable daemon start

# 2) create a session (returns session ID)
browseable session create https://example.com/signup

# 3) list elements for that session
browseable elements <session_id>

# 4) focus an element
browseable action <session_id> click 2

# 5) type into an element
browseable action <session_id> type 3 "my@email.com"

# 6) open interactive browser window for the same session
browseable action <session_id> interact

# 7) close session + stop daemon
browseable session close <session_id>
browseable daemon stop

Commands

browseable daemon start|run|status|stop
browseable session create <url>
browseable session close <session_id>
browseable elements <session_id> [--json]
browseable action <session_id> click <element_or_index> [--timeout-ms]
browseable action <session_id> type <element_or_index> <text> [--timeout-ms]
browseable action <session_id> interact [--timeout-ms]

interact focuses the session in a real browser window. If daemon started headless, interact promotes the session into a headed browser context.

BROWSEABLE_DAEMON_URL can override the daemon address if needed.

Daemon JSON API

The daemon exposes local HTTP endpoints:

  • POST /sessions with {"url":"..."} -> create session.
  • GET /sessions/<session_id>/elements -> list interactable elements.
  • POST /sessions/<session_id>/actions with {"action":"click"|"type","element_id":"...","text":"..."}.
  • POST /sessions/<session_id>/actions with {"action":"interact"} -> promote/focus session in a headed browser window.
  • DELETE /sessions/<session_id> -> close session.

E2E Example

Run the telemetry register flow:

uv run scripts/e2e_telemetry_register.sh

GitHub Workflows

  • /.github/workflows/ci.yml: compile + CLI smoke checks on push/pull_request.
  • /.github/workflows/publish-testpypi.yml: manual publish to TestPyPI.
  • /.github/workflows/publish-pypi.yml: publish to PyPI on v* tags (or manual dispatch).

How to Publish to PyPI

  1. Create package projects:
  2. Configure Trusted Publishing on each project:
    • Owner/repo: your GitHub repo.
    • Workflow file:
      • TestPyPI: .github/workflows/publish-testpypi.yml
      • PyPI: .github/workflows/publish-pypi.yml
    • Environment name:
      • TestPyPI: testpypi
      • PyPI: pypi
  3. Test release on TestPyPI by running Publish to TestPyPI (workflow dispatch).
  4. Release to PyPI:
    • Bump version in pyproject.toml.
    • Commit and push.
    • Tag and push vX.Y.Z (must match pyproject.toml version).
  5. Verify install:
python -m pip install browseable==0.1.1

Optional Manual Publish (No GitHub Actions)

uv build
uvx twine check dist/*
uvx twine upload dist/*

For manual upload, create a PyPI API token and use TWINE_USERNAME=__token__ and TWINE_PASSWORD=<token> (or ~/.pypirc).

Metadata

Release files for browseable 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for browseable 0.1.0
File Size Uploaded Provenance
browseable-0.1.0.tar.gz 13.1 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for browseable 0.1.0
File Interpreter ABI Platform
browseable-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.6 kB

Release files / browseable-0.1.0.tar.gz

Download URL browseable-0.1.0.tar.gz
Size 13.1 kB
Tags Source
SHA-256 checksum
How to use checksums
1e4e6398f22a885519c86e4a7d62abdbcce6bd2fc34f32884b0e56b199066e3e
BLAKE2b-256 checksum
How to use checksums
d85a6ee5a44edb67d5768a3284c2765e9ba95e8367b672fa5b5642a85b68ae52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 21, 2026.

Transparency log

Release files / browseable-0.1.0-py3-none-any.whl

Download URL browseable-0.1.0-py3-none-any.whl
Size 13.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fc8cc69f17ef02dd2037068de630f94543a27655ee9d4c927149bc43da561aac
BLAKE2b-256 checksum
How to use checksums
051f6b73527adabd5d0e687242790ab72894f7c2ba3f2dce9a213859434e1e52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 21, 2026.

Transparency log

Security for browseable 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for browseable-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page