Notte provides session profiles that persist cookies, localStorage, IndexedDB, and other browser state across invocations. This means you can log in once and reuse that authenticated state for subsequent automation runs.
How session profiles work:
- Create a session with a named profile
- Navigate and log in (manually or via an agent)
- The session state is saved when the context-managed session exits
- On the next invocation, reference the same profile - all cookies and storage are restored
Example:
from notte_sdk import NotteClient
client = NotteClient()
profile = client.profiles.create(name="my-saas-login")
vault = client.Vault(vault_id="example-creds")
# First run: log in and save browser state to the profile
with client.Session(profile={"id": profile.profile_id, "persist": True}) as session:
agent = client.Agent(session=session, vault=vault, max_steps=15)
agent.run(task="Log into app.example.com")
# Later run: reuse the authenticated state
with client.Session(profile={"id": profile.profile_id, "persist": False}) as session:
agent = client.Agent(session=session, max_steps=10)
result = agent.run(
task="Navigate to the billing page and extract the current plan details"
)What gets persisted:
- Cookies (including httpOnly and secure cookies)
- localStorage and sessionStorage
- IndexedDB data
- Service worker registrations
- Authentication tokens in browser storage
Security:
- Profile data is encrypted at rest
- Profiles are scoped to your account - no cross-tenant access
- Combine with Secret Vaults for credential injection
- SOC 2 Type II certified infrastructure
Use cases:
- Maintain login state for recurring data extraction jobs
- Reduce repeated login steps in recurring workflows
- Keep separate authenticated profiles for separate accounts or workflows
Docs at docs.notte.cc/concepts/sessions.