cycls.Web().auth(...) for
agents, or to @cycls.app(auth=...) for apps, and the rest follows: sign-in
pages, protected routes, per-user storage and context.user.
deploy or run.
Clerk
The hosted default. No configuration needed to get started.one_tap=True needs Google enabled in Clerk with custom credentials, and every
agent origin listed in that OAuth client’s authorized JavaScript origins.Any OIDC provider
sub as the user id.
Firebase and GCP Identity Platform
firebase.tenant to org_id, so multi-tenant projects get the same
workspace semantics as Clerk organizations.
The user object
context.user is None when no provider is set. In apps, the same object comes
from the auth dependency:
Protecting your own routes
What auth switches on
Auth switches on more than a login screen. Without a provider, an agent serves an anonymous chat and the state routers are not installed. With one, you also get:- per-user chats, files and key-value storage under
/workspace/<user_id>/ - share links and forking
- team workspaces
- connectors, since a grant belongs to a person or a team
- plan and feature gating through
user.plananduser.features
Plans
The Cycls-hosted Clerk app emits values likeu:free_user and o:free_org,
where the prefix says whether the plan is a user plan or an organization plan,
and cycls_pass for paid subscribers. Your own tenant can emit anything.
Next
Workspaces
Personal and team workspaces, and how data is partitioned.