Cookie Policy
This is a translation for convenience. In case of discrepancies, the German version prevails: deutsche Fassung.
What are cookies?
Cookies are small text files stored on your device when you visit a website. They help to remember settings, to analyse usage and to provide certain functions.
Which cookies do we use?
Strictly necessary cookies and storage entries
These cookies and storage entries are required to operate the website and the learning platform. Entries that only arise from your click (such as turning on push notifications or downloading a video) you can remove yourself by turning the function off. The start of the Purpose column says who gets an entry: “Also without an account” means visitors who have not signed in get it too, “Only with an account” means only signed-in people do. Almost all entries stay on your device; the last column names the exceptions. Legal basis: § 25(2) no. 2 TDDDG (German Telecommunications Digital Services Data Protection Act).
| Name | Purpose | Duration | Sent to our server |
|---|---|---|---|
praxis-cookie-consent | Stores your cookie decision. Not a cookie, but an entry in your browser’s local storage. It is never transmitted to our server. | Until you delete it | No |
af-locale | Remembers your chosen language so the website and the learning platform stay in the same language. A cookie, also kept in local storage. If you open the link to a team invitation, the platform sets the cookie to the language of the invitation. | 1 year | The cookie yes, it goes with every request; the local storage entry no |
__client_uat __client_uat_* | Sign-in via Clerk: a timestamp the site uses to tell whether you are signed in. Contains no sign-in details. | Up to 400 days | Yes, cookie |
__session __session_* | Sign-in via Clerk: a short-lived session token. Only set while you are signed in. | 1 year (the session token inside is valid for 60 seconds and renewed about every 50 seconds) | Yes, cookie |
__client (clerk.agile-forge.com) | Sign-in via Clerk: keeps your sign-in session on the sign-in subdomain and cannot be read by scripts (HttpOnly). Only set while you are signed in. | Limited by the browser; at most 400 days in Chrome | Yes, cookie |
__clerk_environment | Sign-in via Clerk: settings for the sign-in form. A local storage entry with no personal data. | Until you delete it | No |
praxis-theme | Remembers whether you chose the light or dark display. A local storage entry. | Until you delete it | No |
af:impulse-gast | Also without an account, in local storage (in the app as a file in the protected app folder): Your progress in the daily practices. It holds a random device ID without a name, the practices you have completed with your answers and Kai’s answers, your weekly goal, chosen paths and the language. The entry also notes whether the welcome on first launch and the set-up of the practices have already been shown. It also notes whether the last session on this device was signed in, so the app shows the right progress at launch, and, without an account, which path you are on, so the Practices tab opens it directly. Signing in removes the path note. Once you have signed in, your account ID is added as a note that the transfer has been decided (even if you decline it). The data stays on your device. If you create a new account, the completed practices with the option you chose, the weekly goal and the paths go to our server and into your account without asking you first. If you sign in to an account that already exists, this happens only once you confirm the transfer. Your own answers and Kai’s answers do not go into the account. Afterwards the platform clears these details on the device; the device ID and the notes on the welcome and the set-up stay. If you decline the transfer, the data stays on the device. In the browser you delete the entry in your browser settings; deleting your account does not remove it there. | Until you delete it | Automatically for a new account, otherwise only after you confirm the transfer |
af:uebernahme-spaeter af:impuls-einrichtung:<ID> | Only with an account, in local storage: Remembers that you postponed the transfer of your device data (seven days of rest) and that you completed or skipped the setup assistant for the daily practices. The second key contains your account ID. | Until you delete them | No |
af-meilensteine-v1:<ID> | Only with an account, in local storage: Remembers which milestone badges you have earned, so they stay even if you raise your weekly goal later. The key contains your account ID, the value the list of your badges. The entry is not sent to our server. | Until you delete it, for example through your browser data | No |
af-wochenziel-feier:<Monday> | Also without signing in, in local storage: Remembers that the message about reaching your weekly goal has already appeared this week, so it shows only once a week. The key contains the date of that Monday, the value is “1”. The entry is not personal data and is not sent to our server. | Until you delete it; older weeks are cleared by the platform when it writes the next entry | No |
af-erinnerung-karte af-erinnerung-karte-sitzung af-pfadwahl-karte af-pfad-willkommen:<path> | Also without an account, in local storage: Remembers that you dismissed the card about weekly goal and reminder or the card about choosing a path, and that you have seen the introduction to a path. The path card entry holds a time until which the card rests for seven days. af-erinnerung-karte-sitzung is kept in session storage and makes sure the reminder card appears at most once per session. | Until you delete them; af-erinnerung-karte-sitzung until you close the tab | No |
af-coach-<hint> af-coach-sitzung liga-abschluss-gesehen af:installhinweis-weg af:push-einladung-weg | Only with an account, in local storage: Remembers that you dismissed a hint so it does not come back: the tips in a lesson, the weekly wrap-up of the league, the “Praxis as an app” notice and, in the app only, the invitation to turn on notifications. af-coach-sitzung is kept in session storage and records that a tip has already appeared in this session. | Until you delete them; af-coach-sitzung until you close the tab | No |
ai-usage-<lesson> ai-eval-<lesson>-<date> | Only with an account, in local storage: Counts how many questions and assessment rounds you have asked Kai in a lesson, so the display of remaining questions is right. Assessment rounds are counted per day. The counter that enforces the limit is kept by the server independently. | Until you delete them; counters of earlier days are not cleared by the platform | No |
simulator-bestlauf:<course>:<scenario> simulator-laeufe:<course>:<scenario> simulator-letzte-lage:<course>:<scenario> | Only with an account, in local storage: Your best run per scenario in conversation practice (attitude and number of moves), figures from the last up to five runs and the starting situation you chose last. The wording of your conversations is not in it. | Until you delete them | No |
Service Worker /sw.js, cache praxis-offline-v1 | Only in the browser on praxis.agile-forge.com, not in the app: A service worker keeps the “No connection” page ready, so you see a notice during a network outage instead of an empty error page. It stores no other pages or responses. | Until you delete the website data | No |
Browser push subscription | Only with an account, after you turn it on in your profile and allow it in the browser: your browser’s push service creates a subscription (delivery address and keys). We store it with your account to send notifications. Not a cookie. | Until you turn off notifications or the subscription becomes invalid | Yes |
Origin channel
This entry is used to attribute a purchase or a registration to the channel you came through. It is created only if you agree to statistics in the cookie banner (section 25(1) TDDDG, Art. 6(1)(a) GDPR). Without your consent we do not create it, and in the app never.
| Name | Purpose | Duration | Sent to our server |
|---|---|---|---|
af-herkunft | Remembers which channel brought you here (“linkedin” or “google”, for example), not the full address. It is created when you open the first page, but only if you have agreed to statistics; if you agree later, it is created then, as far as the page still shows where you came from. Without consent it does not exist (an older entry is deleted), and in the app never. If you withdraw your consent, we delete it at once. If you buy something, that channel name is recorded with the order; if you buy as a guest without an account, it also goes to Stripe as additional order information. If you create an account, it is sent with the registration to our sign-in provider Clerk and stays on your account there; we also count it in a weekly tally per channel. Otherwise it is not transmitted to our server. A session storage entry. | Until you close the tab or withdraw your consent (the channel name on the order or the account stays there) | Only with a purchase or a registration |
Additionally in the Praxis app
The Praxis app for iPhone and Android shows the same platform inside the app. The entries above apply there, except for the statistics and marketing cookies, the origin channel (af-herkunft), the service worker and the browser push subscription, which do not occur in the app. These entries come on top. Legal basis: § 25(2) no. 2 TDDDG.
| Name | Purpose | Duration | Sent to our server |
|---|---|---|---|
af:app-push-token af:app-push-konto | Only with an account, in the app’s local storage: The push ID of this device (token) once you have turned on notifications, and the ID of the account it is registered for. The app deletes both when you sign out. | Until you sign out or turn off notifications | The token yes, it belongs to your account; the account ID no |
af:app-anmeldung-verifier af:app-anmeldung-ziel | Also without an account, in the app’s local storage: A one-time key and the destination to return to when you sign in through the system browser, for example with Google. Both are valid for ten minutes at most and are deleted after sign-in. | Ten minutes at most | The key goes along once when sign-in completes; the destination no |
af:startadresse af:offline-abgleich af:verlauf | Only in the app, in session storage: Records for this session which address the app opened at start, that the sync of saved courses ran (with your account ID) and which pages you opened in sequence (50 at most, for “Back”). | Until the app session ends | No |
af:offline:groesse:<lesson> af:offline:messbudget af:offline:netz:<lesson> | Only in the app, in local storage, technically necessary for downloading videos to watch offline: how large a video is before you download it (so the app can tell you the space it needs), how many sizes the app has checked this hour, and whether a check failed for a video, so it isn’t repeated on every visit. The values stay on your device and are deleted when you sign out. | Size: 30 days at most. Hourly counter: one hour. Note of a failed check: 24 hours at most. All: until you sign out | No |
af:suche-stand af:offline:mobil af:video:<lesson> | Only with an account, in the app’s local storage: When the search index on your device was last built (with your account ID), whether you allowed downloads over mobile data, and the second at which you stopped a video, so it continues there. | Until you delete them; af:suche-stand until you sign out | No |
App storage: impulse, notizen, erledigt-offline, kurs-<course>, kopf-<course>, pdf-<no.> | Only in the app, as files in the protected app folder, not in the device backup: your progress in the daily practices without an account (in the app instead of af:impulse-gast), saved courses with lesson texts and PDFs, your notes and progress from videos you watched offline that has not been reported yet. To view a PDF, a copy is also kept briefly in the app’s temporary folder. | Saved courses: until you remove them in the app or sign out. Notes, practice progress and progress not yet reported: until you delete your account in the app (the app then clears the storage) or delete the app | No; notes and progress go to the server as soon as the app has a connection again |
Offline videos (files .afv and index.json) | Android only, only with an account, after you have downloaded a video: encrypted video files in the private app storage, not in the backup, plus a list with title, size and expiry date. The key is kept in Android’s keystore. | Until the expiry date or until you delete them | No |
Widget data (iPhone: widget-stand in the App Group; Android: widget) | Only with a widget set up: The texts the widget shows on your home screen. With an account these are your course, the next lesson and your progress, plus the practice of the day, also without an account. | Until you sign out | No |
Device search index (Spotlight) | iPhone and iPad only, only with an account: The device search knows title, description and text of the lessons in your courses. The index is cleared when you sign out. | Until you sign out | No |
Statistics cookies (optional)
With your consent we use Google Analytics 4 to evaluate the use of this website. Google Analytics 4 processes IP addresses solely to determine the approximate location and does not store them. The former “IP anonymisation” setting no longer exists there because the truncation is built in. You may withdraw your consent at any time. Legal basis: § 25(1) TDDDG, Art. 6(1)(a) GDPR.
| Name | Provider | Purpose | Duration |
|---|---|---|---|
| _ga | Google Analytics | Distinguishes users | 2 years |
| _ga_* | Google Analytics | Session state | 2 years |
| af:registrierung-gemeldet | Agile Forge (local storage) | Records that a new sign-up has already been reported, so it is not counted twice. The value is your account ID. Only written with your consent and not sent to our server. | Until you delete it |
| af:kauf-gemeldet:<order number> | Agile Forge (local storage) | Records for each order whether the purchase was reported to Google Analytics and Google Ads, so it is not counted twice. The key contains the order number. Only written with your consent, also for a purchase without an account, and not sent to our server. | Until you delete it |
Marketing cookies (optional)
With your consent we measure whether an advertisement led to a sign-up or a course purchase (Google Ads). Without this consent no advertising cookies are set and no advertising data is transmitted to Google. This consent is separate from analytics and can be withdrawn individually at any time. Legal basis: § 25(1) TDDDG, Art. 6(1)(a) GDPR.
| Name | Provider | Purpose | Duration |
|---|---|---|---|
| _gcl_au | Google Ads | Attributes a purchase or sign-up to the advertisement you arrived through | 90 days |
| _gac_* | Google Ads | Links campaign data to the measurement | 90 days |
Services from other providers
Some services we embed can set their own entries or store them on your device. We have no influence over them, so we do not list them one by one here: the payment page from Stripe, the video player from Bunny (it runs as a frame inside our lesson pages, and the entries belong to the provider), the YouTube videos in blog posts (they load only after you click, and through youtube-nocookie.com), the bot protection from Cloudflare Turnstile on the sign-in pages and, in the app, the push service from Firebase, which can create its own identifiers on the device. For Stripe, Bunny, YouTube, Cloudflare and Firebase, the privacy policy says who operates them and where data goes.
Managing your consent
A cookie banner is shown the first time you visit this website. There you can accept only the necessary cookies, consent to everything, or select statistics and marketing individually. You may withdraw each consent separately at any time: via the “Cookie settings” link in the footer of every page or by contacting us by email: info@agile-forge.com.
Browser settings
You can also manage or block cookies directly through your browser settings. Please note that disabling all cookies may limit the functionality of the website.
Further information
More on the processing of data on this website is set out in our privacy policy.
Last updated: 18 October 2026