loom (Python SDK)
Python client library for the loom browser-automation daemon.
Prerequisites
The SDK talks to a running loom-daemon over a Unix socket. Install
loom (CLI + daemon + chromium pin) first via Homebrew, cargo install,
or the install script — see the
main README. Then start
the daemon:
loom serve
Install
pip install mentiora-loom
The distribution is named mentiora-loom; it still imports as loom
(import loom). Requires Python ≥ 3.11.
Quick start (sync)
import loom
with loom.Session.create() as session:
receipt = session.navigate("https://example.com")
print(receipt.action_hash)
Quick start (async)
import asyncio
import loom
async def main():
async with await loom.AsyncSession.create() as session:
receipt = await session.navigate("https://example.com")
print(receipt.action_hash)
asyncio.run(main())
What the SDK exposes
Session/AsyncSession— session lifecycle (create / close / abort / kill / replay / inspect / validate / export).Session.{navigate, click, type_text, select, hover, scroll, wait, evaluate, screenshot, snapshot}— every web action surface.- Admin RPCs:
kill_session(session_id, ...)(force-terminate without a handle),daemon_health(deep=...)(operational snapshot). - Receipt + summary types in
loom.types—Receipt,SessionInfo,SessionInspection,DiffReport,ExportInfo,ValidationResult,GrantInfo,SchemaRegistry,LoomErrorCode. - Typed errors:
LoomError,LoomRPCError,LoomConnectionError,LoomTokenError.
Cancellation (async only)
AsyncSession supports transparent cancellation via standard asyncio
primitives. Wrap a call in asyncio.wait_for or cancel its enclosing
task and the SDK fires a request.cancel envelope at the daemon, then
re-raises asyncio.CancelledError so TaskGroup / asyncio.timeout
keep working:
import asyncio
import loom
async with await loom.AsyncSession.create() as s:
try:
await asyncio.wait_for(s.navigate("https://example.com"), timeout=5.0)
except asyncio.TimeoutError:
# SDK already sent request.cancel before the timeout re-raised.
...
Sync Session is single-in-flight by design — there is no cancellation
hook. For cancellable work, reach for AsyncSession.
Connection details
Session.create() defaults work when a single user runs the daemon on
their own machine. Override per-call if needed:
session = loom.Session.create(
socket_path="/var/run/loom/loom.sock", # custom daemon socket
token="...", # explicit HELLO-token
profile="standard", # or "safe", "full"
network_mode="live", # the only mode (see below)
seed=42, # determinism seed
)
Network mode: page traffic is always live
network_mode accepts exactly one value, "live" (the default).
Page traffic is always fetched live from the network — loom records the
manifest hash chain and per-request metadata, not page-network
responses. Response bodies are never captured, so HAR exports contain
request entries without bodies, and replay re-executes the recorded
actions rather than serving recorded responses. Any other value
("recorded", "mixed", "replay") is rejected at
Session.create() with invalid_network_mode.
License
Apache-2.0. See the main repository for details.
Metadata
Release files for mentiora-loom 0.15.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mentiora_loom-0.15.0.tar.gz | 36.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mentiora_loom-0.15.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 61.1 kB
Release files / mentiora_loom-0.15.0.tar.gz
| Download URL | mentiora_loom-0.15.0.tar.gz |
|---|---|
| Size | 36.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
be304a0424ce0faba2bd282894a1cae0db5be95c8b87ab58c0d8536328f896d5
|
|
BLAKE2b-256 checksum How to use checksums |
c3b0007a1ef1298b24fcf1dbf5499d7a7df241c0075ce7468dd05cbb0428a789
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / mentiora_loom-0.15.0-py3-none-any.whl
| Download URL | mentiora_loom-0.15.0-py3-none-any.whl |
|---|---|
| Size | 24.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3f00df04bd536913b3f964556837c8dff1dd589d57d8f7d6751818f12ce4b5ef
|
|
BLAKE2b-256 checksum How to use checksums |
fa1c588dcab58b2d9fe50f781aeede8bf6fbdd5bfbe9067659271e120c837709
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|