letta-ceki
Letta toolkit for Ceki — drive a real Chrome session from your Letta agent.
Killer combo. Letta's archival memory + Ceki's profile export = browser sessions that remember themselves across agent restarts. Log in once on Monday, your agent walks straight into the dashboard on Friday — no cookies stored in your code, no second login.
Install
pip install letta-ceki
The squat alias ceki-letta is reserved by the same project and depends on letta-ceki — both resolve to the same symbols.
Architecture
Variant C — structural toolkit. Eleven self-contained Python functions that the Letta agent's own LLM plans across:
| Tool | What it does |
|---|---|
ceki_rent_browser |
Rent a real Chrome session and return its session_id. |
ceki_navigate |
Open a URL. |
ceki_click |
Click at viewport coordinates. Mouse jitter ON by default. |
ceki_type |
Type into the focused element. Cadence + jitter ON by default. |
ceki_scroll |
Scroll by delta_y pixels. |
ceki_screenshot |
PNG of the current viewport as base64. |
ceki_snapshot |
Screenshot + drained chat messages from the provider. |
ceki_chat_send |
Send a chat message to the human provider (captcha / OTP). |
ceki_stop |
End the session — always call this when done. |
ceki_export_profile |
Killer: export cookies/storage/fingerprint to Letta memory. |
ceki_restore_profile |
Killer: restore a saved profile into a fresh rent. |
There is no server-side NL endpoint and no LLM lives inside this package — your Letta agent's own model does the planning.
Register the tools in your Letta workspace
import os
os.environ["CEKI_API_KEY"] = "your_ceki_key" # https://ceki.me dashboard
os.environ["LETTA_TOKEN"] = "your_letta_token" # https://app.letta.com/settings/api-keys
from letta_ceki import register_all
tool_ids = register_all()
print(f"Registered {len(tool_ids)} tools.")
Then attach the tools to your agent in the Letta UI, or programmatically:
from letta_client import Letta
client = Letta(token=os.environ["LETTA_TOKEN"])
client.agents.update(agent_id="your_agent_id", tool_ids=list(tool_ids.values()))
The killer combo — persistent sessions
Tell your agent in its persona prompt:
After a successful login, always call ceki_export_profile.
On a fresh rent for a previously-logged-in site, always call
ceki_restore_profile before navigating.
That is the entire setup. Now every login the agent performs is durable:
# Run A — agent logs into your.example.com, then:
ceki_export_profile(session_id, profile_name="your-example")
# Letta restarts. Memory survives.
# Run B — fresh rent on a new browser:
ceki_restore_profile(session_id, profile_name="your-example")
# → cookies, localStorage, sessionStorage, fingerprint all restored
ceki_navigate(session_id, "https://your.example.com/dashboard")
# → already authenticated
See examples/persistent_session.py for an end-to-end runnable demo.
Use responsibly
Use only on sites you own or have authorization to operate on (your own apps, your own dashboards, public data within site Terms of Service, accessibility audits you're responsible for).
License
MIT.
Metadata
Release files for letta-ceki 0.1.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 | Provenance | Actions |
|---|---|---|---|---|
| letta_ceki-0.1.0.tar.gz | 13.2 kB | Without provenance | Details for letta_ceki-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| letta_ceki-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for letta_ceki-0.1.0-py3-none-any.whl |
Total release size: 21.9 kB
Release files / letta_ceki-0.1.0.tar.gz
| Download URL | letta_ceki-0.1.0.tar.gz |
|---|---|
| Size | 13.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c4037a7e6e0cfcbc136b3ee7dc970b9adc6dc0e7f9287f59de09f9a721415c5e
|
|
BLAKE2b-256 checksum How to use checksums |
6cdbbb33979920fdd707cafb3f78b45ad5370689763596fd339485204f0a5329
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / letta_ceki-0.1.0-py3-none-any.whl
| Download URL | letta_ceki-0.1.0-py3-none-any.whl |
|---|---|
| Size | 8.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
02412ef5ae23b5f981de3589fe01eccf2a8b9f2ce2fe3ddb8caab8dd9f6760c0
|
|
BLAKE2b-256 checksum How to use checksums |
29308c79ac3f994797f7ee6de6f49eca49ec8812ccde9ae1be09446a2918b263
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Security for letta-ceki 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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.