Privacy Policy
Last updated: 2026-10-12
In this document, "we" means 세컨드스테이지 (secondstage), the maker of Supertamer. Our address is 702-501, 7F, 29 Donong-ro, Namyangju-si, Gyeonggi-do, Republic of Korea.
This website
This site has no sign-in, no forms and no payment. It runs no analytics and no advertising scripts. The only thing it leaves in your browser is one cookie (NEXT_LOCALE) that remembers the language you chose, and it's removed when you close the browser. The site runs on Fly.io, so your IP address reaches Fly.io when you visit.
Downloads
Mac builds are downloaded from the GitHub releases page. GitHub sees that download and handles it under its own privacy policy.
What the app stores
Boards, tasks and notes are saved in a SQLite file on your Mac. No Supertamer server stores them, and there's no account to sign up for. Sync between your own Macs uses your Apple ID's private iCloud database. Apple holds that data and we can't read it. Attachments stay on the Mac you added them on.
What leaves your Mac
What you send to an agent goes to that agent's model provider, and so does the board content sent along when a session starts. That runs through the agent CLI and account you already use, so the provider handles it under its own policy.
Relay server. While the app runs, it keeps your Mac connected to our relay server, relay.supertamer.com, so your iPhone and your other Macs can find your Mac and open its sessions from anywhere. Relay is on by default. What your Mac and the other device send each other is end-to-end encrypted, so the relay can't read it.
Turning relay off. Click "Turn off relay" in Settings › Pair device. Your Mac then stops connecting to the relay, and your iPhone and other Macs can't reach it until you turn relay back on. While relay is off, the app doesn't make a pairing QR code.
What the relay sees. It sees IP addresses, an ID for your Mac that stays the same on every connection, the ID of each connection, the timing of connections and messages, message sizes, and the public keys exchanged to set up encryption. Fly.io, which hosts the relay, sees the same. The relay keeps these in memory and doesn't write them to disk, apart from the error logs described next.
Logs and how long they're kept. The relay doesn't log normal connections. Some errors make it write a log entry, which can include your Mac's ID, connection IDs, the message it was forwarding (encrypted, or a public key), or the full request, which carries the IP address it came from. Fly.io keeps these logs for seven days. The relay's metrics are counts and sizes, such as open connections and bytes passed on, with no IP addresses or IDs, and Fly.io keeps them for about 15 days. We don't send the logs anywhere else.
Who processes it, and where. Fly.io, Inc. (compliance@fly.io) hosts the relay and processes this data on our behalf. Each time a device connects, the connection goes over the internet to the Fly.io edge server nearest that device, which may be in another country. TLS ends there, but the end-to-end encryption stays intact. Fly.io then forwards the connection to one of the relay's two machines, in Tokyo, Japan, or Ashburn, Virginia, US. Fly.io, a US company, keeps the logs and metrics described above in its own systems. It doesn't say which country those systems are in. For data from the EU, the UK and Switzerland that goes to the United States, Fly.io takes part in the EU-U.S. Data Privacy Framework, its UK Extension and the Swiss-U.S. Data Privacy Framework.
Why, and on what basis. We use this data to connect your devices to your Mac, and the error logs to find and fix faults in the relay. For people in the EU and the UK, the legal basis is our legitimate interest in letting your devices reach your Mac without extra setup and in keeping the relay working. To object, turn relay off at any time.
Anonymous usage data
The app sends anonymous usage data to PostHog, an analytics service. It is on by default. The app tells you once, the first time it runs, and you can turn it off at any time in Settings › Data & sync › "Send anonymous usage data". Turning it off stops sending immediately and deletes anything still waiting to be sent.
What is sent. Each record is an event name from a fixed list and a few values from fixed choices or ranges. There are 27 event names, in seven groups:
- Lifecycle: the app's first launch on this Mac, each launch, and a daily summary of how long the app was in front and how many times it came to the front (as ranges, once a day).
- Onboarding: which step of the first-run setup was completed.
- Screens: which screen was opened (Home, a board, a task, all tasks, a group, a project, Deleted, Sessions, Settings) and how you got there (sidebar, title bar, command palette, deep link, shortcut, breadcrumb), which Settings section was opened, and which overlay was opened (command palette, quick panel, shortcut sheet, find bar, conversation window, floating task detail).
- Features: which feature was used (for example search, pinning a task, changing a task's status, writing a Journal entry, editing the State Note, adding a milestone or a resource, creating a group or a project, using a template, freezing or deleting a board, attaching or detaching a session, opening or archiving a workspace, switching to the kanban view, exporting, backing up) and from where (menu, shortcut, command palette, a button). For search, only the number of results as a range. For a resource, only whether it was a file, a folder or a link.
- Friction: a session that failed to start and the reason (no backend, cancelled, missing board, already held, host not registered, other), a session error dialog and its kind, a write the app refused and the rule that refused it, a request between the window and the app that failed and its error code, iCloud sync entering a retry state and its category, the database failing to open, the beta-expired screen, and an update prompt (shown, installed, skipped).
- Quality and sessions: a crash or hang that macOS reported, a failed database open, how long the app took to start (as a range), an Agent Session starting (which agent: Claude, Codex, Gemini or other; embedded or remote; with or without a task) and ending (finished, failed, disconnected or terminated, and its length as a range), an agent appending a result to a task (and its status hint), and an agent creating tasks (how many, as a range).
- Work shape: a task being created (by you or by an agent; the length of its title and body as ranges; whether it has a prompt; whether it is a subtask), a task being closed (done or cancelled; its age, its number of subtasks and whether a session ever worked on it, as ranges), a board being created (blank or from a template), and a daily count of boards, open tasks, groups and projects (as ranges).
Every record also carries the time it happened, the app version and build number, whether it is a beta or a release build, the macOS major version, a random install ID, and a random record ID so that a record sent twice is counted once.
What is never sent. The titles or bodies of tasks, boards, documents or groups; file paths; repository or branch names; prompts; session text; search queries; the app's internal identifiers; your name or your Mac's name; your Mac's model, screen size or language.
The install ID. When the app first runs it makes a random ID and keeps it on this Mac. The ID is not derived from your account, your hardware or your name, and PostHog builds no person profile from it. It only lets the records from one install be counted as one install. Turning the switch off and on again does not change it; reinstalling the app does.
IP address and location. PostHog is set to discard the client IP address, so your IP is not stored with the records. Before discarding it, PostHog derives a country-level location from it, and that country is kept.
Where it is stored and for how long. PostHog, Inc. stores the records on PostHog Cloud EU, on servers in Frankfurt, Germany, and processes them on our behalf. Records are kept for up to seven years and then deleted. We see them only as aggregates and event lists in PostHog's dashboards.
The full list. Every event name and every value it can carry:
All 27 events
Values in every record: app_version (version and build, e.g. 1.0 (82)), channel (beta / release), os_major (macOS major version), distinct_id (the install ID), uuid (the record ID), timestamp (when it happened), $lib (always supertamer), $process_person_profile (always false, so PostHog builds no person profile).
| Event | When | Values |
|---|---|---|
app.first_launched | The first launch on this install | none |
app.launched | Each launch | none |
app.daily_usage | Once a day, for the previous day | foreground: <10m / 10-60m / 1-4h / 4h+ · activations: 1-5 / 6-20 / 21+ |
onboarding.step_completed | A first-run setup step was completed | step: chat_window / device_profiles / first_group |
screen.viewed | The main screen changed | screen: home / board / board_task / all_tasks / group / group_tasks / project / deleted / sessions / settings · via: sidebar / titlebar / palette / deep_link / shortcut / breadcrumb / other |
settings.section_viewed | A Settings section was opened | section: general / appearance / shortcuts / notifications / permissions / about / agent_sessions / data_sync / deleted / advanced / sessions_native |
overlay.opened | An overlay was opened | overlay: command_palette / quick_panel / shortcut_sheet / find_bar / conversation_window / floating_task_detail |
feature.used | A feature was used | feature: search / task_pin / task_unpin / task_status_set / task_priority / task_reorder / task_label / task_prerequisite / journal_append / state_note_edit / state_note_proposal_apply / state_note_proposal_dismiss / document_edit / milestone_create / resource_add / group_create / project_add / template_instantiate / template_save / board_freeze / board_abandon / board_archive / session_attach / session_detach / workspace_open / workspace_archive / agent_disconnect / agent_archive / sessions_detach / kanban_view / find / export / backup / sync_resend · via: menu / shortcut / palette / screen · detail (per feature): journal_append → note / meeting; resource_add → file / folder / url; task_status_set → todo / inProgress / postponed / done / cancelled; search → result count 0 / 1-5 / 6+; workspace_open → workspace / agent |
session.start_failed | A session failed to start | reason: no_backend / cancelled / missing_board / already_held / host_not_registered / other |
session.alert_shown | A session error dialog was shown | kind: start / connect / resume / terminate / other_device / not_reopenable |
write.refused | The app refused a write | kind: notFound / invalidArgument / conflict / cycleDetected / depthLimitExceeded / prerequisitesNotMet / liveLimitReached / needsUserNotLowerable / concurrentClaims / schemaMismatch / backendUnavailable / adapterFailure |
bridge.error | A request between the window and the app failed | code: unknownMethod / invalidParams / databaseUnavailable / internal / timeout |
sync.retrying | iCloud sync entered a retry state | category: account / network / temporaryService / other |
database.failed_shown | The database could not be opened and the full-screen error was shown | kind: failed / diagnosed |
beta.expired_shown | The beta-expired screen was shown | none |
update.prompted | An update prompt was shown, or answered | action: shown / installed / skipped |
quality.crash_reported | macOS delivered a crash or hang diagnostic | kind: crash / hang |
quality.database_open_failed | The database failed to open | none |
quality.launch_duration | From process start to the first screen | bucket: <1s / 1-3s / 3-10s / >10s |
session.started | An Agent Session started | agent: claude / codex / gemini / other · backend: embedded / remote · has_task: yes / no |
session.ended | An Agent Session ended | outcome: finished / failed / disconnected / terminated · duration: <5m / 5-30m / 30m-2h / >2h |
agent.result_appended | An agent appended a result to a task | status_hint: finished / review / needsInput |
agent.tasks_created | An agent created tasks (one tool call) | count: 1 / 2-5 / 6+ |
task.created | A task was created | by: user / agent · title_length: <=20 / 21-60 / 61+ · body: none / <=200 / 201-1000 / 1000+ · has_prompt: yes / no · is_subtask: yes / no |
task.completed | A task was set to done or cancelled | status: done / cancelled · age: <1d / 1-7d / 7-30d / 30d+ · subtasks: 0 / 1-3 / 4-9 / 10+ · had_session: yes / no |
board.created | A board was created | via: blank / template |
inventory.snapshot | Once a day, at the first launch | boards: 0 / 1-3 / 4-10 / 11+ · open_tasks: 0 / 1-10 / 11-50 / 51+ · groups: 0 / 1 / 2-3 / 4+ · projects: 0 / 1-3 / 4+ |
Feedback and email
When you submit the feedback form or write to team@supertamer.com, what you send reaches us.
The feedback form. Send Feedback in the app opens a Google form in your browser. One field is already filled in with the app's version, build number, channel (beta or release) and macOS version, and you can see and change it before you submit. The app itself sends nothing. When you submit the form, we get your answers, those app details, and your email address if you chose to leave one.
Email. When you write to team@supertamer.com, we get your email address, your message and any attachments, and our replies stay in the same thread.
Reviews. The form asks whether we may quote you. Only if you say yes do we publish your words on supertamer.com, along with your name and job title if you chose to include them. Ask us and we'll take it down.
Why, and on what basis. We use this to reply to you, fix the problems you report, improve the app, and publish the reviews you allowed. For people in the EU and the UK, the legal basis is our legitimate interest in answering you and improving the app. For a published review it is your consent, which you can withdraw at any time.
How long we keep it. We keep form answers and email for one year after our last exchange with you, then delete them. A published review stays up until you ask us to take it down. Ask at team@supertamer.com and we'll show you any of it, or delete it sooner.
Who processes it, and where. Google LLC holds both. Form answers are in Google Forms and the Google Sheets file linked to it, and the mailbox for team@supertamer.com is on Google Workspace. What you send goes over the internet to Google the moment you submit the form or send the email, and Google processes it on our behalf. Google, a US company, can store it in data centres in the United States or other countries. For data from the EU, the UK and Switzerland that goes to the United States, Google LLC takes part in the EU-U.S. Data Privacy Framework, its UK Extension and the Swiss-U.S. Data Privacy Framework.
Your data
We can't read anything you write in the app, so we have none of it to show you or delete. The exception is what you send us yourself through the feedback form or by email, described above. The relay's error logs can hold an encrypted piece of it, along with IP addresses and your Mac's ID, and Fly.io keeps those logs for seven days. The anonymous usage records described above carry the random install ID, not your name, account or email. What you sent to an agent is held by that agent's provider. You can export one board as Markdown, or everything as a single JSON file. If this policy changes, we'll update this page and its date.
Privacy officer
Our privacy officer is our founder, SEONGGWON MIN (민성권), reachable at founder@supertamer.com.
Questions go to founder@supertamer.com.
