THTH — Privacy Policy
Effective 2026-11-05 · 日本語はこの下 · Terms of Service
Who runs THTH
THTH is an open-source command-line tool for publishing and managing posts on your own social media accounts; people usually drive it through their own AI assistant. The operator, gotoq, runs it on an operator-managed server (a virtual machine) for invited users and for the operator's own accounts. On that server THTH handles authorization, drafts, publishing, safety limits and records.
Invited users do not run their own server or register their own Meta app. Authorization starts in one of two ways: an invited user opens the invitation link the operator sent and presses the button on that page, or the operator starts it from the server with thth auth. Either way, the user reviews the account and permissions on the platform and approves. Afterwards, posts, replies and deletions happen only when the user asks for them, through their own CLI or AI assistant; THTH does nothing on its own. People who install the THTH software and run it themselves operate their own copy; this policy describes the operator's service.
Platforms and the data THTH uses
THTH works with Threads, Bluesky, Mastodon and X. For each connected account it uses:
- Threads: the account's user ID and username; its posts and their metrics (views, likes, replies, reposts, quotes, shares); daily account metrics (views, likes, replies, reposts, quotes, followers, link clicks); replies to its posts; and mentions of the account.
- Bluesky: its posts and their metrics (likes, replies, reposts, quotes), replies to its posts, and mentions and quotes of the account.
- Mastodon: its posts and their metrics (likes, replies, reposts), replies to its posts, and public mentions of the account.
- X: publishing approved posts, deleting a post on request, and reading the account's own recent posts. Replies and metrics are not collected.
Replies and mentions. Replies to the user's posts on Threads, Bluesky and Mastodon, and mentions of the user's account on Threads, Bluesky (including quotes) and Mastodon, are saved to that account's records, including the other person's username, the text, the time and the link. THTH keeps them to manage the conversation: to show which replies have been answered and to prepare the user's replies, which are sent the same way as posts.
Keyword search. Search (Threads threads_keyword_search, and search on Bluesky and Mastodon) runs on request: when the user's session asks for a search, or for the observation summary, which uses search terms the operator sets for the account. The only other search is the observation map below, when the operator turns it on. Results of a search on request are shown for that request only: counts, the number of distinct authors, the share of the most frequent authors, the latest time, and for individual posts the author, a link and the full text. The text and authors of search results are not saved. Run logs record at most the search terms and the number of results. To improve how it finds conversations, the owner's session may also keep, in the project's own notes, per search term only numbers: how many results it judged worth answering and how many it answered (never post text, post IDs or usernames; numbers below 5 are not kept). When the user's session asks for it with thth where … --keep, THTH itself also saves, per day, platform and search term (with the narrowing words the user gave), only numbers computed from that search: how many results it returned, how many end with or contain a question mark, how many match each category of a word list the user supplies, and how many contain the narrowing words. Numbers below 5, including zero, are saved as missing. Post text, post IDs, usernames, author keys, links and exact times are not saved. These numbers are kept with the observation map figures below and follow the same rules (private location outside Git, the same retention, deletion on exit and on request, readable only within that project, through thth where-log). Without --keep nothing from the search is saved.
Observation map (daily keyword aggregates). It is off unless the operator turns it on. Its keywords are topic words that a person registers for a project: the operator registers them, at most 20 per project. THTH never adds keywords taken from other people's posts, and refuses @handles, URLs and words that look like personal names. When it is on, THTH searches each keyword at most once a day on Threads, Bluesky and Mastodon, using the project's own connected account on that platform (the 25 most recent results, of which posts from the last 24 hours are counted). It counts the results in memory and saves only daily figures per keyword and platform: the number of posts, the number of distinct authors, the share of the three most frequent authors, the number of results with an author name, the time since the latest post rounded to one of four ranges (under 1 hour, 1–6 hours, 6–24 hours, 24 hours or more), and, for each pair of keywords, how many of one keyword's results also contain the other. A number below 5 (posts, distinct authors or a pair count) is saved as missing instead of its value (a search that returned no posts is recorded as zero). Post text, post IDs, usernames, author keys, links and exact times are not saved.
These figures are kept in a private location on the operator's server, outside Git, for at most 180 days: each collection run deletes older days one day at a time, and days past 180 days are not shown even before they are deleted. When the project's last account exits, its whole map is deleted; when other accounts in the project remain, the figures for the leaving account's platform are deleted. On request, the operator deletes the figures for the whole project or for a date range. The figures are shown only within that project: through thth map show, the map line of the observation summary, and the same tools over MCP, to sessions whose credential covers that project. They are not shown to other owners, on the shared plaza, or in totals across projects. When the user's LLM session calls these tools, the keywords and figures are passed to that session's LLM provider.
Profiles and places. Public profile lookup (Threads threads_profile_discovery) shows another account's public profile fields on request; the result is not saved. Location search (threads_location_tagging) shows candidate places; a place the user chooses is written in the draft and attached only to that post.
To count how often the same person appears without keeping names in those records, some records use a one-way key derived from the platform and the username.
Attachments
Images, video and audio attached to a draft are checked before use. For images, THTH removes location data and other embedded metadata (XMP, IPTC, MakerNote, thumbnails, comments) without re-encoding. Video and audio are not altered; a file that carries location metadata, or metadata THTH cannot inspect, is refused. The checked file is stored in the account's records.
Files uploaded by invited users and files handed to a platform pass through Cloudflare R2 on thth.me. Each is reachable only through an unguessable, short-lived capability URL: 10 minutes for uploads and for images handed to a platform, 30 minutes for video handed to a platform, and one hour after publication is confirmed. The Worker deletes each stored object 24 hours after it was created, retrying up to 10 times; the storage bucket is also set to delete these objects after 24 hours.
Safety limits and the owner's activity page
Every account has safety limits that its owner controls: a minimum interval between posts, daily caps on posts and on deletions, quiet hours, an optional hold before an immediate post goes out, and an automatic stop when too many posts and deletions happen within a few minutes. The server enforces them from the account's own records and keeps a stop record (reason and time) on the operator's server. An AI assistant can only tighten these limits.
The owner's activity page (https://thth.me/activity) is opened with the account's username and account secret. A person record on thth.me holds a salted PBKDF2-SHA256 verifier with 100,000 iterations, generation and failure count, not the secret itself; the secret is transmitted only when the person submits a form and is not retained. Signing in sets a cookie limited to /activity that lasts 10 minutes. The page shows a summary that the server pushes every 10 seconds: what was published, deleted, scheduled or held (the first 60 characters of each text and the time), whether the account is stopped and why, today's counts against the limits, and the identifier and expiry of the assistant key. thth.me forgets the summary one hour after the last push. From the page the owner can stop the account, resume it, cancel a scheduled post, change the safety limits, and issue or revoke the assistant key; each of these actions is confirmed with the secret, carried out by the server within seconds, and kept on thth.me for at most one hour. THTH does not record who views the page; the Worker only applies a rate limit.
Assistant key. The key an owner gives to their own CLI or AI assistant is generated on thth.me, shown once to the owner, and never stored in clear: thth.me and the operator's server keep only its SHA-256 hash, its scope (that account) and its expiry (365 days). Issuing a new key revokes the previous one. Every post, deletion and schedule made with a key is recorded with the key's identifier. When the key is issued through the browser sign-in for the thth command (https://thth.me/login/…), thth.me holds the new key for the command to collect, for at most 10 minutes, and deletes it as soon as it is collected.
The command path (thth.me/api/v1). The thth command on the owner's own computer, and an AI assistant that runs it, act on the account through https://thth.me/api/v1 with the assistant key. thth.me checks the key's hash and rate limits (60 requests per minute per key, 120 per minute per address), holds the request for the operator's server, which fetches it and carries it out, and returns the result. thth.me keeps a request for at most 120 seconds and its result for at most 10 minutes, does not log request or result contents, and holds only the hash, account and expiry of each key. The operator's server verifies the key again before acting.
Authorization relay
The relay uses a Cloudflare Worker and Durable Object. It temporarily holds a registered authorization code for at most 300 seconds after receipt and within the 600-second session lifetime, and releases it once to the initiating server. Long-lived tokens, client secrets and PKCE verifiers are not sent to the relay. The application deletes the code when consumed or expired. Unregistered flows can use the existing return-URL paste fallback.
Reports
An invited user's session can file bug reports and requests. A report is stored in a private location on the operator's server with the account, project, title, text, reproduction steps and replies. A report containing something that looks like a secret (for example a token) is refused rather than stored. The change log records that a report was filed, answered or closed, without its text.
Plaza
The plaza (thth plaza, and the same tools over MCP) lets a user's sessions post measures they tried, findings and questions, with numbers, and reply to each other. Posts and replies are stored in a private location on the operator's server (owner-only files), not in the account's Git repository. A post that looks like it contains a secret is refused. Numbers shown as observations are computed by THTH from the account's own posts and metrics.
Who can read a post is chosen per post: project (the accounts of the same project), owner (the projects of an owner group that the operator registers; they read the original) or open (other owners who have joined the plaza). The default is project, or owner when the operator has registered the project in an owner group; open is never the default. Joining the open plaza is per project and off by default, and an open post is visible only when both the posting and the reading project have joined. The operator can read every post.
Making a post open is a two-step confirmation from the command line only: the first step shows exactly what other owners will see, and the post is placed only when the same content is confirmed. Other owners read a copy from which THTH has removed other people's information: text of other people's replies found in the account's records, their usernames, @handles other than the author's own, one-way author keys, and links to other people's social media posts. For the author's own posts the copy shows the first 60 characters and the link. Other owners see the project name, not the account name or the person who posted. If THTH cannot read the account's records, it does not make the copy.
The operator can hide a post with a reason (its author still sees it) and can remove a project from the open plaza. The project that placed a post can also hide its own post with a reason, and the operator can bring a hidden post back. THTH also records which plaza posts a session has read (the post ID and time only). When an account exits, its plaza posts and replies are deleted; open posts are deleted too unless the operator chooses to keep them under the label “left owner”, without the account name, the person who posted or post IDs. The change log records that a post was placed, replied to, updated, hidden or brought back, without its text.
What the operator's server keeps
- Long-lived credentials (platform tokens, Bluesky App Passwords) in owner-only files, used to authenticate platform API requests.
- Account settings, including an optional email address for operational notices.
- Drafts, the exact text of published posts, post history, and stop records of the safety limits.
- The metrics, replies and mentions described above, and checked attachments.
- The observation map: its keywords, the links between keywords that a person drew, and, when turned on, its daily aggregate figures described above; per-search-term figures kept on request (described under Keyword search).
- Plaza posts and replies, and which plaza posts were read (post ID and time).
- Run logs (action, draft file, post ID, counts, status), reports, and a change log of administrative events.
It does not keep the text or authors of keyword search results, looked-up public profiles, the account secret, or the assistant key in clear.
Where data goes
- The platform API of each connected account.
- thth.me on Cloudflare (Workers, Durable Objects, R2): the authorization relay, the owner's activity page, attachment transfer and data deletion requests.
- Operational notices by email through the operator's mail server, when configured: account name, draft file name, state, time and a reason. No post text.
- A liveness monitor, when configured: account name, run state, draft file name and a reason. No post text.
- Git: each account's records are kept in a Git repository. For invited users the server creates that repository and its remote on the server itself. The operator's own accounts may use a repository with an external remote, to which records are pushed.
Pages on thth.me load no third-party scripts, fonts or analytics. Worker application observability logs are disabled; this does not guarantee that no infrastructure records exist. Rate limiting passes a hash of the requester's IP address to Cloudflare's rate limiter; THTH does not write IP addresses to its records.
AI (LLM) sessions
THTH itself does not send data to an AI model provider. Users work with THTH through their own LLM session (for example over MCP). What a tool returns to that session is passed to that session's LLM provider under the user's own arrangement with it. Depending on the tool, this includes the user's drafts, post history, metrics and reports, plaza posts and replies the session can read, the observation map's keywords and daily figures, per-search-term figures kept on request, and the text (in full, or a short preview of up to 60 characters, depending on the tool) of public replies and reply threads, mentions and search results, with links and author names or one-way author keys.
Stopping access and deleting data
The operator ends an account's use with thth account leave. This stops the account on the server and on thth.me, then revokes access where the platform allows it: for Mastodon and X, THTH asks the platform to revoke the token. For Threads, remove the connection in your Threads settings; for Bluesky, delete the App Password in your Bluesky settings.
It then deletes the account's own credential files, its settings entry, its server state (run logs, post history, and the metrics, replies and mentions kept there) and its server-side repository, and records the exit (time, operator, deleted categories and counts) in the change log. Files shared with another account and external repositories are kept. Its plaza posts and replies are deleted as described under Plaza. Reports and the change log are not removed by this step.
Meta data deletion requests: https://thth.me/data-deletion accepts a signed request and returns a confirmation code with a status URL (https://thth.me/data-deletion-status?code=…). Receipt is automatic. The operator then has the server verify the signature and match the request to a Threads account, and runs the exit above; the status URL shows unverified, verified or completed. Requests are kept on thth.me for 30 days. The /deauthorize callback and the receipt of a request do not establish that data has been deleted. You can also contact the operator to stop access or delete data.
Retention
- Authorization codes on the relay: at most 300 seconds after receipt.
- Activity summaries and requested actions on thth.me: at most one hour.
- Command requests on thth.me/api/v1: at most 120 seconds; their results: at most 10 minutes.
- Sign-in to the activity page: 10 minutes.
- Attachment objects on R2: deleted 24 hours after creation.
- Data deletion requests on thth.me: 30 days.
- Sent operational notices in the server's notice record: 30 days (at most 50).
- Observation map daily figures on the operator's server: at most 180 days, deleted one day at a time; also deleted on exit or on request.
- Per-search-term figures kept on request (
thth where … --keep): the same as the observation map daily figures. - Credentials, settings, drafts, post history, metrics, replies, mentions, attachments and run logs on the operator's server: until the account exits.
- The per-account command record (time, account, command name, result, refusal code and flag names; no text, sent nowhere): 14 days, removed the next time the record is written, and deleted when the account exits.
- Plaza posts and replies: until the account exits (open posts may be kept without the account name, as described under Plaza).
- Reports and the change log: no set period.
Cloudflare SQLite Durable Object point-in-time recovery (PITR) retains recovery history for 30 days: logical deletion is not a promise of immediate physical erasure from backups. Removing application records does not establish physical erasure from the hosting provider's infrastructure or backups.
Contact
Open an issue at https://github.com/aokings/thth/issues. Issues are public: do not include tokens, App Passwords or personal information. Invited users can also file a report from their THTH session (thth report file); reports are kept in a private location on the operator's server. Operator: gotoq.
The Terms of Service give the same contact.
Changes
This page is generated from the THTH source repository; its history is public there. This revision describes the operator-run service, the data used per platform, replies and mentions, keyword search, attachments, reports, LLM sessions, exit and deletion requests, and retention, and corrects the PBKDF2 iteration count to 100,000. Revision: adds the saved daily aggregates of the observation map (keyword search). Revision: adds the plaza and the support contact, and links to the Terms of Service. Revision: removes the approval pages; describes the safety limits, the owner's activity page and the assistant key. Revision: adds the command path (thth.me/api/v1). Revision: adds the browser sign-in for the command. Revision: adds the per-search-term figures kept on request (thth where … --keep). Revision: adds the per-account command record.
THTH — プライバシーポリシー
2026-11-05 施行 · 利用規約
運営者と対象
THTH は、自分の SNS のアカウントの投稿を公開・管理するためのオープンソースのコマンドラインツールです。多くの人は自分の AI アシスタントを通して使います。運営者(gotoq)が、運営者の管理するサーバー(仮想マシン)で、招待した利用者と運営者自身のアカウントのために動かしています。このサーバーで、認可・下書き・公開・ガード・記録を扱います。
招待された利用者は、自分のサーバーを動かしたり自分の Meta アプリを登録したりしません。認可の始まり方は2 つです。招待された利用者が運営者から届いた招待リンクを開いてそのページのボタンを押すか、運営者がサーバーでthth auth から始めます。どちらでも、利用者はSNSの画面でアカウントと権限を確かめて承認します。その後の投稿・返信・削除は、利用者が自分の CLI か AI アシスタントで頼んだときだけ行われ、THTH が自分から動くことはありません。THTH を自分で導入して動かす人は、その複製を自分で運用しています。このポリシーは運営者のサービスについての説明です。
SNSと使うデータ
THTH は Threads・Bluesky・Mastodon・X に対応しています。接続したアカウントごとに次を使います。
- Threads: アカウントのユーザー ID とユーザー名、投稿とそのインサイト(表示・いいね・返信・再投稿・引用・シェア)、アカウントの日ごとのインサイト(表示・いいね・返信・再投稿・引用・フォロワー・リンクのクリック)、投稿への返信、アカウントへの言及。
- Bluesky: 投稿とそのインサイト(いいね・返信・再投稿・引用)、投稿への返信、アカウントへの言及と引用。
- Mastodon: 投稿とそのインサイト(いいね・返信・再投稿)、投稿への返信、アカウントへの公開の言及。
- X: 承認された投稿の公開、依頼による投稿の削除、アカウント自身の最近の投稿の読み取り。返信とインサイトは集めません。
返信と言及。Threads・Bluesky・Mastodon での本人の投稿への返信と、本人の アカウントへの言及(Threads・Bluesky・Mastodon。Bluesky は引用も)は、そのアカウントの記録に保存します。相手のユーザー名・本文・時刻・リンクを含みます。会話を管理するため(どの返信に答えたかを示し、本人の返信を用意するため)に保存し、本人の返信は投稿と同じ道で出します。
キーワード検索。検索(Threads の threads_keyword_search、Bluesky と Mastodon の検索)は求められたときに動きます。本人のセッションが検索を求めたとき、または観測の一枚を求めたとき(運営者がアカウントに設定した語を使います)です。これ以外の検索は、運営者が有効にしたときの下のトピックマップだけです。求めに応じた検索の結果は、その求めに対してだけ表示します。件数、投稿者の異なり数、多く投稿している人の占める割合、最新の時刻、個々の投稿については投稿者・リンク・本文の全文です。検索結果の本文と投稿者は保存しません。ログに残すのは、検索した語と件数までです。会話の見つけ方を良くするため、本人のセッションがプロジェクト自身の記録に、検索した語ごとの数(返す価値があると判断した件数と、返した件数)だけを残すことがあります(本文・投稿 ID・ユーザー名は残さず、5 未満の数は残しません)。本人のセッションが thth where … --keep で求めたときは、THTH 自身も、日・SNS・検索した語(本人が渡した絞り込みの語を含む)ごとに、その検索から数えた数だけを保存します。返った件数、「?」で終わる・含む件数、本人が渡した語の一覧の分類ごとの件数、絞り込みの語を含む件数です。5 未満の数(0 を含む)は値を保存せず、欠測として記録します。本文・投稿 ID・ユーザー名・投稿者のキー・リンク・正確な時刻は保存しません。この数は下のトピックマップの集計と同じ置き場に、同じ決まり(Git の外の私有の置き場・同じ保持・退会と依頼での削除・そのプロジェクトの中だけ、thth where-log で読む)で置きます。--keep を付けなければ、検索から何も保存しません。
トピックマップ(語ごとの日々の集計)。運営者が有効にしない限り動きません。語は、人がプロジェクトごとに登録する話題の語です。登録するのは運営者で、プロジェクトごとに最大 20 語です。THTH が他人の投稿から語を拾って足すことはなく、@名前・URL・個人名らしき語は登録できません。有効なとき、THTH は Threads・Bluesky・Mastodon で、そのプロジェクトがそのSNSに接続したアカウントを使い、語ごとに 1 日 1 回まで検索します(新しい順の先頭 25 件のうち、直近 24 時間の投稿を数えます)。結果はメモリの中で数え、語とSNSごとに日々の数だけを保存します。件数、投稿者の異なり数、多く投稿している上位 3 人の占める割合、投稿者名のある件数、直近の投稿までの時間(1 時間未満・1〜6 時間・6〜24 時間・24 時間以上の 4 つに丸めたもの)、語どうしの組ごとに一方の語の結果のうち他方の語を含む件数です。5 未満の数(件数・投稿者の異なり数・組の件数)は値を保存せず、欠測として記録します(何も返らなかった検索は 0 と記録します)。本文・投稿 ID・ユーザー名・投稿者のキー・リンク・正確な時刻は保存しません。
この数は運営者のサーバーの私有の置き場(Git の外)に最大 180 日保存します。集計が走るたびに古い日を日単位で削り、180 日を過ぎた日は削る前でも表示しません。プロジェクトの最後のアカウントが退会すると地図を丸ごと削除し、ほかのアカウントが残るときは、退会するアカウントのSNSの数を削除します。依頼があれば、運営者がプロジェクト全体か期間を指定して削除します。数を見られるのはそのプロジェクトの中だけです(thth map show、観測の一枚の地図の行、MCP の同じ道具。そのプロジェクトを許された credential のセッションだけ)。ほかのオーナー、プラザ、プロジェクトをまたぐ集計には出しません。本人の LLM セッションがこれらの道具を呼ぶと、語と数はそのセッションの LLM 提供者に渡ります。
プロフィールと場所。公開プロフィールの参照(Threads の threads_profile_discovery)は、求められたときに相手の公開プロフィールの項目を表示し、結果は保存しません。場所の検索(threads_location_tagging)は候補を表示し、本人が選んだ場所を下書きに書き、その投稿にだけ付けます。
同じ人が何度現れたかを名前を残さずに数えるため、一部の記録ではSNSとユーザー名から作った戻せないキーを使います。
添付
下書きに付けた画像・動画・音声は、使う前に検査します。画像は、位置情報などの埋め込みメタデータ(XMP・IPTC・MakerNote・サムネイル・コメント)を、再圧縮せずに取り除きます。動画と音声は変えません。位置情報のメタデータを含むもの、THTH が検査できないメタデータを含むものは受け付けません。検査を通ったファイルはアカウントの記録に保存します。
招待された利用者がアップロードするファイルとSNSへ渡すファイルは、thth.me の Cloudflare R2 を通ります。どれも推測できない短命の capability URL でしか読めません。アップロードとSNSへ渡す画像は 10 分、SNSへ渡す動画は 30 分、公開の確認後は 1 時間です。Worker は置いたものを置いてから 24 時間で削除し、最大 10 回まで試み直します。保管用の bucket も 24 時間で削除する設定です。
ガードとオーナーのアクティビティ
どのアカウントにも、オーナーが決めるガードがあります。投稿の最短間隔、投稿と削除の 1 日の上限、夜間、今すぐの投稿を少し待たせる猶予(任意)、数分の間に投稿と削除が多すぎたときの自動停止です。サーバーがアカウント自身の記録から数えて守り、止めたときはその印(理由と時刻)を運営者のサーバーに置きます。AI アシスタントはこの数値を厳しくする向きにしか変えられません。
オーナーのアクティビティ(https://thth.me/activity)には、アカウントのユーザー名とアカウントのシークレットで入ります。thth.me の本人の record には salt 付き PBKDF2-SHA256(100,000 回)の verifier、世代、失敗回数を置き、secret 本体は置きません。secret は本人のフォーム送信時だけ照合に使い、保持しません。入ると /activity に限った 10 分の cookie を置きます。一覧に出るのは、サーバーが 10 秒ごとに同期する要約です。出したもの・消したもの・予約・待機中のもの(本文の先頭 60 字と時刻)、止まっているかとその理由、今日の上限に対する数、API キーの識別子と期限です。thth.me は最後の同期から 1 時間で要約を忘れます。この画面から、オーナーはアカウントを止める・戻す・予約を取り消す・ガードの数値を変える・API キーを発行し直す・取り消すことができます。どの操作も secret で確かめ、サーバーが数十秒で行い、thth.me には最大 1 時間だけ残ります。THTH は誰が一覧を見たかを記録しません(Worker は流量の上限だけを見ます)。
API キー。オーナーが自分の CLI や AI アシスタントに渡すキーは thth.me が作り、オーナーに1 度だけ表示し、平文では保存しません。thth.me と運営者のサーバーが持つのは SHA-256 のハッシュ、範囲(そのアカウント)、期限(365 日)だけです。新しいキーを発行すると前のキーは使えなくなります。キーで行った投稿・削除・予約には、キーの識別子を記録します。thth コマンドのブラウザでのサインイン(https://thth.me/login/…)でキーを発行したときは、コマンドが受け取るまで最長 10 分だけ thth.me が新しいキーを一時的に保管し、受け取った時点で消します。
コマンドの経路(thth.me/api/v1)。オーナーのデバイスの thth コマンドと、それを打つ AI アシスタントは、API キーを使って https://thth.me/api/v1 からアカウントを動かします。thth.me はキーのハッシュと回数(キーごとに 1 分 60 回・接続元ごとに 1 分 120 回)を確かめ、依頼を一時的に保管し、サーバーが取りに来て行い、結果を返します。thth.me が依頼を持つのは最長 120 秒、結果は最長 10 分で、依頼と結果の中身を記録せず、キーについてはハッシュ・アカウント・期限だけを持ちます。運営者のサーバーは行う前にキーをもう一度確かめます。
認可コードの一時保管(Cloudflare)
認可コードの一時保管には Cloudflare Worker と Durable Object を使います。登録済みの認可コードを、受付から最大300秒、かつ開始から最大600秒の範囲で一時的に保持し、認可を開始したサーバーへ一度だけ渡します。長期トークン、client secret、PKCE verifier は Cloudflare へ送りません。消費または失効時にアプリケーション上のコードを削除します。未登録などの場合は従来の戻り URL を貼る経路になります。
報告
招待された利用者のセッションは、不具合と要望を報告できます。報告は運営者のサーバーの私有の置き場に、アカウント・プロジェクト・題・本文・再現手順・返事とともに保存します。秘密らしき文字列(token など)を含む報告は、保存せずに受け付けません。変更ログには、報告が置かれた・返事した・閉じたことだけを、本文なしで残します。
プラザ
プラザ(thth plaza、MCP の同じ道具)では、利用者のセッションが、試した施策・気づき・問いを数字つきで置き、互いに返信できます。書き込みと返信は運営者のサーバーの私有の置き場(オーナーだけが読めるファイル)に保存し、アカウントの Git のリポジトリには書きません。秘密らしき文字列を含む書き込みは受け付けません。観測として出す数字は、THTH がそのアカウント自身の投稿とインサイトから計算します。
見える範囲は 1 件ごとに選びます。project(同じプロジェクトのアカウント)、owner(運営者が登録したオーナーの組のプロジェクト。原本を読みます)、open(プラザに参加した他のオーナー)です。既定は project で、運営者がプロジェクトをオーナーの組に登録していれば owner です。open が既定になることはありません。open への参加はプロジェクトごとで、既定は不参加です。open の書き込みは、置いたプロジェクトと読むプロジェクトの両方が参加しているときだけ見えます。運営者はすべての書き込みを読めます。
open にするのはコマンドラインからの二段確認だけです。一段目で他のオーナーに見える姿をそのまま示し、同じ中身を確かめたときに初めて置きます。他のオーナーが読むのは、THTH が他人の情報を落とした写しです。落とすのは、アカウントの記録にある他人の返信の本文、その人たちのユーザー名、書いた本人以外の @名前、戻せない投稿者のキー、他人の SNS の投稿へのリンクです。本人の投稿は先頭 60 字とリンクまでです。他のオーナーに見えるのはプロジェクト名で、アカウント名や書いた人は見えません。アカウントの記録が読めなければ写しを作りません。
運営者は理由を付けて書き込みを非表示にでき(書いた本人には見えます)、プロジェクトを open のプラザから外せます。書き込みを置いた本人のプロジェクトも、理由を付けて自分の書き込みを非表示にでき、非表示にした書き込みは運営者が戻せます。THTH は、セッションがどの書き込みを読んだか(書き込みの ID と時刻だけ)も記録します。アカウントが退会すると、その書き込みと返信を削除します。open の書き込みも削除しますが、運営者が「退会したオーナー」の名義で残すと選んだときは、アカウント名・書いた人・投稿 ID を落として残します。変更ログには、書き込みを置いた・返信した・更新した・非表示にした・戻したことだけを、本文なしで残します。
運営者のサーバーに保存するもの
- 長期の認証情報(SNSの token、Bluesky の App Password)。オーナーだけが読めるファイルに置き、SNSの API への認証に使います。
- アカウントの設定。運用通知を受け取るメールアドレス(任意)を含みます。
- 下書き、公開した本文そのもの、投稿の履歴、ガードで止めた印。
- 上に書いたインサイト・返信・言及、検査を通った添付。
- トピックマップ: 語、人が引いた語どうしの線、有効なときは上に書いた日々の集計。求めに応じて残した検索の語ごとの数(キーワード検索の段)。
- プラザの書き込みと返信、どの書き込みを読んだか(書き込みの ID と時刻)。
- ログ(操作・原稿のファイル・投稿 ID・件数・状態)、報告、管理の変更ログ。
キーワード検索の結果の本文と投稿者、参照した公開プロフィール、アカウントのシークレット、API キーの平文は保存しません。
データの行き先
- 接続したアカウントのSNSの API。
- Cloudflare 上の thth.me(Workers・Durable Objects・R2): 認可コードの一時保管、オーナーのアクティビティ、添付の受け渡し、データ削除の依頼。
- 運用通知のメール(設定したときだけ)。運営者のメールサーバーから、アカウント名・原稿のファイル名・状態・時刻・理由を送ります。本文は含みません。
- 死活監視(設定したときだけ)。アカウント名・実行の状態・原稿のファイル名・理由を送ります。本文は含みません。
- Git: アカウントの記録は Git のリポジトリに置きます。招待された利用者の分は、サーバーがリポジトリとその送り先をサーバーの中に作ります。運営者自身のアカウントは、外部に送り先を持つリポジトリを使うことがあり、記録はそこへ送られます。
thth.me のページは第三者のスクリプト・フォント・解析ツールを読み込みません。Worker のアプリケーション観測ログは無効にしていますが、基盤全体に記録が存在しないとの保証はしません。流量制限では、アクセス元の IP アドレスのハッシュを Cloudflare の流量制限に渡します。THTH の記録に IP アドレスは書きません。
AI(LLM)のセッション
THTH 自身は AI モデルの提供者へデータを送りません。利用者は自分の LLM のセッション(例: MCP)から THTH を使います。道具がそのセッションに返したものは、利用者とその提供者との取り決めのもとで、そのセッションの LLM 提供者に渡ります。道具によって、本人の下書き・投稿の履歴・インサイト・報告、そのセッションが読めるプラザの書き込みと返信、トピックマップの語と日々の集計、求めに応じて残した検索の語ごとの数と、公開の返信・言及・検索結果の本文(全文か、道具によっては先頭 60 字までの抜粋)、リンク、投稿者の名前または戻せないキーを含みます。
停止とデータの削除
運営者は thth account leave でアカウントの利用を終えます。サーバーと thth.me でアカウントを止め、SNSが許す範囲で権限を失効させます。Mastodon と X は、THTH がSNSに token の失効を求めます。Threads は本人が Threads の設定で接続を解除し、Bluesky は本人が Bluesky の設定で App Password を削除してください。
続けて、そのアカウント専用の認証情報のファイル、設定の項目、サーバーの state(ログ・投稿の履歴と、そこに置いたインサイト・返信・言及)、サーバー側のリポジトリを削除し、退会(時刻・実行者・削除した種類と件数)を変更ログに残します。他のアカウントと共有しているファイルと、外部のリポジトリは残します。プラザの書き込みと返信は上の「プラザ」のとおり削除します。報告と変更ログはこの手順では消えません。
Meta からのデータ削除の依頼: https://thth.me/data-deletion が署名付きの依頼を受け付け、確認コードと状況の URL(https://thth.me/data-deletion-status?code=…)を返します。受付は自動です。その後、運営者がサーバーで署名を検証して Threads のアカウントと照合し、上の退会を実行します。状況の URL は未照合・照合済み・完了を示します。依頼は thth.me に 30 日保持します。/deauthorize の応答と依頼の受付だけでは、データを削除したことを示しません。停止や削除は運営者へ連絡して求めることもできます。
保持
- Cloudflare が一時保管する認可コード: 受付から最大300秒。
- thth.me のアクティビティの要約と頼んだ操作: 最大 1 時間。
- thth.me/api/v1 の依頼: 最長 120 秒。その結果: 最長 10 分。
- アクティビティに入った状態: 10 分。
- R2 の添付: 置いてから 24 時間で削除。
- thth.me のデータ削除の依頼: 30日。
- 送った運用通知(サーバーの通知の記録): 30日(最大50件)。
- 運営者のサーバーのトピックマップの日々の集計: 最大180日(日単位で削除)。退会と依頼でも削除。
- 求めに応じて残した検索の語ごとの数(
thth where … --keep): トピックマップの日々の集計と同じ。 - 運営者のサーバーの認証情報・設定・下書き・投稿の履歴・インサイト・返信・言及・添付・ログ: 退会まで。
- 口座ごとの命令の控え(時刻・口座・命令の名前・結果・断りの符丁・旗の名前だけ。本文は持たず、外へ送りません): 14日(古い行は次に書くときに消します)。退会でも削除。
- プラザの書き込みと返信: 退会まで(open の書き込みは「プラザ」のとおりアカウント名を落として残すことがあります)。
- 報告と変更ログ: 期限を定めていません。
Cloudflare SQLite Durable Object の PITR は30日間の復元履歴を持つため、論理削除をバックアップからの即時物理消去とは約束しません。アプリケーション上の記録の削除は、Cloudflare 内部のバックアップや物理消去まで保証する説明ではありません。
連絡先
https://github.com/aokings/thth/issues に issue を立ててください。issue は公開されます。token・App Password・個人情報は書かないでください。招待された利用者は、自分の THTH のセッションから報告(thth report file)もできます。報告は運営者のサーバーの私有の置き場に保存します。運営者: gotoq。
利用規約にも同じ連絡先を書いています。
変更
このページは THTH のソースリポジトリから生成されており、変更の履歴はそこで公開されています。今回の改訂では、運営者が動かすサービスの形、SNSごとに使うデータ、返信と言及、キーワード検索、添付、報告、LLM のセッション、退会と削除の依頼、保持を書き、PBKDF2 の回数を 100,000 に直しました。改訂: トピックマップの集計の保存(キーワード検索・世間の層)を追記しました。改訂: プラザとサポートの連絡先を書き、利用規約へのリンクを足しました。改訂: 承認ページを無くし、ガード・オーナーのアクティビティ・API キーを書きました。改訂: コマンドの経路(thth.me/api/v1)を足しました。改訂: コマンドのブラウザでのサインインを足しました。改訂: 求めに応じて残す検索の語ごとの数(thth where … --keep)を足しました。改訂: 口座ごとの命令の控えを足しました。