Skip to content

Projects, Profiles and Sessions

A Project owns its Session membership, chat, actions, model preference and tab order. Public session creation requires project_id. Current-page calls require a Project or Session selector; the frontmost native window does not supply API scope. Browser-state owners are private and cannot span Projects.

A Profile is a reusable configuration template. Every new Session<number> owns independent browser state by default, even when created from the same Profile. Shared state requires an explicit group choice at creation. Only explicitly grouped Sessions share cookies, site data, configuration, browser identity and routing. A Profile name or matching display name does not establish membership.

Use POST /v1/sessions with project_id and an optional Profile selection to create an independent Session. To start an explicit shared set, supply group_id:"new". To join one, supply project_id and an existing group_id in that same Project. Public browser management uses Session IDs. There are no public group resource or reset APIs.

GET /v1/sessions lists sessions; GET /v1/sessions/{id} reads one. Resources include Project ownership and configuration metadata. group_id is present only for explicitly shared state; an independent Session need not have one. Treat all IDs as opaque and use the complete Session ID for browser operations. A missing Session returns a structured error instead of selecting another tab.

PATCH /v1/sessions/{id} accepts proxy_alias as a saved alias or null for a direct connection. This changes the targeted Session’s copied configuration without editing its source Profile. Explicitly grouped Sessions share the route; independent Sessions remain unchanged. Session IDs and browser data are preserved. A loaded browser uses REL’s pending-configuration Reload flow. See assigning a proxy for the bottom-panel UI.

Profile edits apply to future Sessions. Explicit configuration reapply uses POST /v1/sessions/{id}/reapply with an optional profile_id and include_shared_sessions when applying to an explicit shared set. It preserves Session IDs, navigation and browser data. It does not reset cookies or reseed Profile data. Native close actions archive Sessions and hide an owner when its last active Session is archived. Restore the same Session IDs and retained browser data in Settings → Archived Sessions. Archives expire after seven days or sooner when retained data exceeds 1 GB; the oldest are deleted first. See archiving and cleanup. Archived IDs are absent from active Session listings and browser operations; restore them in Settings before using them again. DELETE /v1/sessions/{id} remains permanent and removes its private owner after the final registered Session is deleted, without creating a replacement tab. Deleting an active member preserves data still used by archived siblings.

Browser fingerprint controls are scoped to that Session’s state owner. Selecting the graphics override without device_surfaces preserves native device memory and storage-quota reporting in workers while applying the graphics policy. With graphics selected, canvas_noise_mode: "native" preserves native 2D canvas readbacks in windows and workers, including OffscreenCanvas. It does not disable the WebGL profile, WebGL readback policy, or WebGPU policy. Use canvas_noise_mode: "deterministic" to enable a bounded horizontal scale for 2D canvas text, stable within the Session and shared by windows and workers. Text drawing and horizontal measurements use the same tiny scale (at most three parts per million). Eligible solid, unfiltered text, including translucent fills, also varies antialias coverage during painting through a glyph layer, bounded to one eight-bit alpha step. Fully covered glyphs preserve the requested paint opacity, and transparent pixels remain exact. Gradients, strokes, effects, printing, wide-gamut float16 and out-of-gamut paint coverage retain native behavior. The extra glyph layer can add rendering cost. Clear pixels, caller-supplied ImageData, and PNG readbacks retain their actual rendered values; REL does not add noise while reading pixels. WebGL reads and exports also preserve actual framebuffer values, including clear colors and rectangle/packing variants. Curated WebGL profiles standardize identity and capabilities; they no longer add per-seed pixel noise. Configured unmasked vendor and renderer strings retain the underlying native GPU query, with the existing extension and context-loss behavior. Configured screen dimensions describe the display, while outer window dimensions retain Chromium’s actual host-window geometry. Neither control resizes the page viewport. To apply canvas noise while keeping WebGL and WebGPU native, select graphics, set graphics_profile: "native", and use canvas_noise_mode: "deterministic". The native graphics profile leaves WebGL identity, extensions, and readbacks unchanged, including PNG exports from WebGL-rendered canvases, and preserves native WebGPU adapter exposure. Canvas noise in this mode applies to 2D contexts. It is valid on every supported platform. canvas_noise_mode: "native" with this profile leaves both canvas and WebGL native.

The hardware_concurrency override reports the same selected CPU thread count in windows, frames, dedicated workers, nested workers, shared workers, and service workers. It operates independently of graphics and device surfaces. Selected User-Agent client-hint metadata also follows the Session into worker identity and request preferences.

With audio selected, audio_noise_mode: "deterministic" standardizes omitted real-time AudioContext sample rates to 48 kHz. The UI calls this Standardized (48 kHz); the stored mode name is retained for compatibility. Explicit rates and their validation, offline rendering, oscillator signals, buffers, silence, and analyser reads stay native. This is a shared rate cohort, not per-seed PCM variation. audio_noise_mode: "native" retains device-preferred default rates. Audio operates independently of graphics and device surfaces.

These settings do not guarantee that a fingerprinting service assigns a new visitor identity: other device signals can remain equal across independent Sessions and proxy exits.

CLI, SDK and MCP adapters must be able to express the required scope. Inspect the installed adapter’s schema and use an explicit existing session_id when appropriate. Do not send legacy group labels, infer membership from Profile names or rely on obsolete reset helpers. If an adapter cannot express a required Project/group selection, report that capability gap or use the supported RPC request; do not invent compatibility behavior.

For a running or failed browser operation, use browser diagnostics before discarding its Session. Unknown cookie seed history, exit identity or response provenance remains unknown; template reuse is not evidence of continuity.