A topic is a standing X search with its own feed and its own bell. Add one in the alerts tab (🔔), or search in find and press watch it to turn what you typed into one.
New in v0.0.17
X only knows how to notify you about people. Alerts is the other half: watch a subject — a cashtag, a hashtag, a phrase, a whole query — and ct goes and finds who is talking about it, including the accounts you have never heard of. See alerts & topics for the full control surface.
$SOL OR #solana, "depeg" -filter:replies, min_faves:50. The query is sent to X exactly as typed, so anything you tuned in X's search box works unchanged.
Watch a fast-moving subject every minute and a slow one every three hours. Rounds are capped either way, so impatient topics get picked more often rather than costing more.
One per topic per batch, not one per post, with a per-topic only over N likes threshold. Every match still lands in the feed; the threshold only governs what interrupts you.
The network tab is gone — its button sits next to the peer readout it changes, and its diagnostics moved under Settings → Network.
Click the frozen post inside a note and it opens in ct's post view — conversation, metrics, media — instead of sending you to a tab on X.
Still here from v0.0.12: the encrypted wallet, ctSwaps and the buy actions beside stock cashtags on X — each has its own section below.
The wallet
The embedded EVM wallet is install-wide and encrypted in the extension’s background process. A password unlocks it for a short session; activity extends that session, and an alarm locks it again even when the panel is closed.
- create
- Choose a password, write down the recovery phrase once, then confirm that the backup is safe before using the wallet.
- import
- Restore from a recovery phrase or private key. Secrets are encrypted before they are stored.
- accounts
- Derive, rename and switch accounts without changing your X persona. Wallet accounts belong to the install; ct identities remain per X account.
- export
- Requires the password again, even if the wallet is unlocked. Never paste a recovery phrase or private key into a site you do not control.
Your browser profile is the vault. ct has no account recovery service. Keep the recovery phrase offline before funding the wallet.
ctSwaps
Open the swap tab, choose what you pay and receive, then enter an amount. ct asks the chain for a quote after a short pause and shows the selected venue, route, expected output, fee and slippage before anything is signed.
- Unlock the embedded wallet and make sure it holds the input asset plus enough native token for gas.
- Pick tokens or paste a token address. The picker separates your balances, curated tokens and tokenized stocks.
- Review the quote. Quotes expire quickly; ct refreshes stale numbers rather than signing an old price.
- Approve spending when required, then confirm the swap. The history and progress toast follow pending, confirmed and failed transactions.
The panel does not invent a route. It sends the reviewed quote for execution so the displayed output and the transaction use the same on-chain decision.
Launchpad
The launchpad creates coins priced in a real stock. Instead of pairing against ether or a stablecoin, a launch is paired against a tokenized equity — NVDA, AAPL, SPY, CRWV, 194 of them — so the coin's price is quoted in shares, and its dollar value moves with the stock even when the pair price does not. Ether is available as a pair too.
- Name the coin, upload a logo, and pick the equity it is priced in.
- Shape the curve: an opening market cap, a breakout, and how the supply is spread between them. The chart you are about to create is drawn before anything is signed, along with the cost to clear each band.
- Optionally buy into your own launch in the same transaction, so there is no block where the pool sits un-bought.
- Launch. The token, the pool and the locked liquidity are created in one transaction.
Every pool the launchpad creates is locked at creation: liquidity can never be withdrawn, there is no migration step and no second chart, governance and the timelock are both 0xdead, and there is no vesting, premine or balance cap. One market, tradeable from the first block, permanently.
The launchpad deploys no contract of its own. It encodes calls to Doppler modules already live on Robinhood Chain, so a launch adds no new trust assumption and nothing in the interface can hold your funds. That Airlock is shared infrastructure, though — other front ends use the same modules — so the feed shows every stock-paired launch on the chain and marks the ones made here.
Fees & $CT
Every swap in a launched pool pays a 1% fee to the pool. It is split three ways, written into the pool when it is created, and never changes afterwards:
- 80% — the creator. Paid in both currencies, accruing continuously, claimable forever by the address that launched the coin.
- 15% — ct. The interface's share, and the whole of what ct earns from a launch.
- 5% — Doppler. A floor the protocol enforces on every pool built with its modules. It cannot be reduced or redirected.
80% of ct's share buys and burns $CT. That is 12% of every swap fee — the 80% of the 15% ct receives — bought on the open market and burned. The remaining 20% of ct's share, 3% of the fee, pays for running the launchpad: the index, the pinning, the hosting.
Nothing about that is retroactive and nothing is discretionary at the pool level: the split lives in the pool's own beneficiary list, so anyone can read what a given coin pays and to whom.
Fees arrive in both sides of the pair — the coin and the equity it is priced in — depending on which way trades went, and they are not converted for you. Claiming and being paid are the same transaction, and it only ever pays the caller: nobody can claim on your behalf, and nobody can take your share by claiming first.
Coins launched before this split was introduced were created at 95% creator / 5% Doppler and keep those terms permanently. The launchpad reads each pool's own split from the chain rather than assuming one.
Install
Two builds exist. The Chrome Web Store build is reviewed and updates itself — start there unless you specifically want to test new work.
From the Chrome Web Store
Add it, then pin it: click the puzzle-piece icon in Chrome's toolbar and pin ct, so it's one click away. Open x.com and click the ct icon — the side panel opens on the right.
The alpha build, from GitHub
The alpha runs ahead of the store: newest features, rougher edges. It installs unpacked, which means you keep the folder and Chrome loads it from there on every start.
- Clone or download monemetrics/ct-extension, and keep the folder somewhere permanent.
- Open
chrome://extensionsand switch on Developer mode, top right. - Click Load unpacked and select the folder — the one with
manifest.jsondirectly inside it.
Unpacked extensions never auto-update. To take a new version, git pull into
the same folder and press the reload icon on ct's card in chrome://extensions.
Chrome treats the two builds as separate extensions. Each gets its own ID, its own storage and its own settings. Installing one never updates or replaces the other, and they cannot see each other's frens, notes or keys.
Run one at a time. Before switching, export your frens list and your notes from the build you're leaving (Settings → Identity & privacy, and Backup at the foot of the notes tab), then import both into the other one.
Brave, Edge, Opera, Arc and Vivaldi all run the same build — only the extensions URL differs. Firefox and Safari are not supported: ct is Manifest V3 and uses offscreen documents and the side panel API, which don't exist there.
First run
ct starts empty, and it fills up from your own browsing. Open x.com and scroll for a few minutes — every post X sends your browser is captured, normalised and stored locally. Nothing is fetched from anywhere else.
Once you've visited x.com/home on the Following tab at least once, ct
can also pull new posts in the background with no tab open. That's Settings →
Identity & privacy → Pull new posts; it replays your own timeline request against
your own session, so X sees the traffic it would have seen anyway, just less of it.
If the feed stays empty: the default rules show frens only, and you have no frens yet. Add a few, or switch that key off in the tuner to see everything captured.
The tour
A fresh install has a problem documentation can't fix: liking from the panel replays a
request X only issues when a human presses the heart, so on day one the like button is
wired up and inert. The graph is empty until you find +ct, and broadcasting wants a
wallet. The tour walks those prerequisites in order — seven steps in three acts,
shown as a tour n/7 chip in the titlebar, a card above the feed, and a sheet
with every step in it.
- act I · see
- Scroll x.com once so ct has posts, then add your first fren with +ct.
- act II · teach
- Like and repost once on x.com — that's what teaches ct the gesture and brings the panel's own buttons to life — then write a note.
- act III · broadcast
- Start the node, make a wallet and write the phrase down, then hold 100,000 $CT and send one broadcast.
Progress is read from reality, not from the tour. Each step is judged on state that exists for its own reasons — your recorded templates, your graph, your wallet — so nothing has to be done "through" the tour to count, and someone who used ct for a week before this shipped opens it already at 5/7. Once ticked, a step stays ticked.
Pause it and progress keeps accruing; restart clears the ticks and most re-tick on the next read. The sheet opens any step regardless of what's done, so you can read ahead.
The feed
The tuner at the top of the feed is the whole point of ct: it is the ranking, and it is yours to change. Every key applies instantly and nothing is remembered anywhere but here.
- sort
- time is newest first. trust puts your closest people at the top and uses recency only to break ties. heat ranks by likes, reposts and replies, damped by age so nothing stays pinned for days.
- show
- What gets through at all — replies, reposts, quotes. frens only is the big one: switch it off to see every account ct has captured rather than just your graph.
- peers
- What the ct network may put in this feed. pooled posts are ones another peer captured and shared — you never loaded them on X yourself. casts are live broadcasts, interleaved with the posts. Both are on by default; switch them off and the feed is built from nothing but what this browser saw. Turning casts off here doesn't stop them arriving — comms still has every one.
- from
- The lowest trust tier that still gets through. Picking one includes every tier above it.
- type
- What a post carries: text is anything with no media and no link, links means it points off X. Pressing several asks for any of them; pressing none lets everything through. A repost is judged by the post it repeats.
- last
- Drops anything older. ct is a realtime tool — posts past the window are pruned, not archived.
The readout beside the tuner shows network, wallet and X identity health, and the signal bars show how many posts survive your filters. If the bars drop to nothing, the filters are the reason, not the capture.
Every card carries the actions you'd expect — like, repost, note, and ⊘ mute, which is a standing decision rather than a filter and lives in moderation.
Threads
Open any post and ct shows the conversation around it: the chain of posts above it and the replies below, fetched from X on demand rather than waiting for capture to happen across them. Follow a reply and it becomes the post you're reading, with its own thread around it.
Everything in a thread is a real ct card — like and repost work on each one (once ct has learned those gestures), notes attach to them, and a muted account is missing from the thread just as it is from the feed.
Threads are fetched per post and cached briefly, so re-opening one costs nothing against your X request budget. Refresh the sheet to ask X again.
Frens & trust tiers
Your graph is separate from who you follow on X. Every tier sits above plain following — none of them is a mute — and the tier decides how far someone's posts outrank everyone else's when you sort by trust, and how far down you can filter.
- following
- Watching them. Posts show up, ranked lowest.
- trusted
- The default for anyone you add. Their activity is worth seeing.
- fren
- Inner circle. Floats to the top of the feed.
Adding people
Press +ct beside the follow button on anyone's profile on x.com, or use the search box in the frens tab to pick from accounts ct has already captured. New frens land on trusted.
ct can also add people automatically when you switch on X post notifications for them — the bell is the strongest interest signal X exposes. That's optional, it happens once per account, and removing someone afterwards sticks.
The graph is keyed on X's numeric account id, not the handle, so it survives a rename. Someone added by handle alone shows as unresolved until ct sees a post of theirs.
Find
Free search over everything ct has captured — post text, author, $cashtags and #hashtags, including quoted and reposted text. Several words all have to match.
Search deliberately ignores the feed rules. The reason you look something up is usually that a filter hid it, so applying the tuner here would hide the result you came for.
Find searches your own archive, not X. When the answer is "ct has never seen this", press watch it — the same words become an alert topic, and ct goes and searches X for them instead.
Alerts & topics
X notifies you about accounts. Alerts notifies you about subjects. A topic is a
standing X search with its own feed and its own bell — $SOL OR #solana,
"depeg" -filter:replies, from:someone min_faves:50. Add one in
the alerts tab (🔔), or from watch it in find.
This matters for the case account notifications cannot reach at all: during something fast-moving, most of the posts worth seeing are written by people you do not follow and have never heard of.
Where a topic's posts come from
Two directions, and the second is the one that makes it work while you are not looking:
- searching
- ct replays X's own search for the topic in the background, on a rotation. This is the half that reaches strangers, and the half that costs requests against your X session.
- capture
- Every post ct takes in anyway — your home timeline, your frens, ordinary browsing, posts other peers pooled — is matched against every topic on the way in. This costs nothing, so a matching post from a fren appears the moment it lands rather than at the next search.
Posts a topic pulls in are ordinary captured posts: they join the corpus, they are searchable in find, and a card that came from the pool still says so on its face.
The query
The query is X's search syntax and is sent to X exactly as typed, so a query you
tuned in X's own search box works here unchanged. Quotes for a phrase, OR
between alternatives, - to exclude, brackets to group, plus
min_faves:, from:, lang: and
-filter:replies.
A few operators only X can evaluate — until:, geocode:. The
composer tells you when your query contains one, because for those the free half above
goes quiet and the topic only fills when it searches.
Cadence
Every topic carries its own check interval, from every minute to every three hours, set from the topic's edit. Leave it on default and it follows Settings → Alerts, which also means it moves when you change that setting rather than staying pinned to whatever the default was the day you made it.
Setting everything to a minute does not multiply the requests. A round searches a fixed
number of topics, most-overdue first, so a fast topic is simply picked more often than a
slow one. A paused topic (◌) stops searching but keeps collecting from
capture — the right setting for a subject you care about, just not today.
Notifications
Per topic, and coalesced: one notification per topic per batch rather than one per post, with a floor between them. Each topic also carries an only over N likes threshold, which is the setting that makes watching a busy hashtag survivable — every match still lands in the topic feed, the threshold only decides what is allowed to interrupt you.
Settings → Alerts has a master switch that silences every bell at once without un-arming each topic. The toolbar icon carries the total unread either way, so you can turn every notification off and still have a number to come back to.
ct needs to have seen X run a search once. ct replays X's own requests rather than pretending to be a client it isn't, so until one search has happened on x.com, topics can collect from capture but cannot search. Run one search there and every topic works from then on — the alerts tab says so if you haven't.
Notes
Notes are ct's answer to bookmarks, which fail for a simple reason: a bookmark is a link to content X still owns. Delete the post, edit it, or lose the account, and the bookmark is a dead row — and there was never anywhere to write down why you saved it.
A ct note carries what you wrote, when you wrote it, and — for a note on a post — a frozen copy of that post: its text, author, media and counts as they stood at that moment. The original being edited or deleted leaves your note intact.
Writing one
- on a profile
- Press +note beside the follow button on x.com, or on any row in the frens and find tabs.
- on a post
- Press in the post's action bar on x.com, or on any card in the feed.
- already written
- The button shows a count once notes exist —
3— and opening it shows what you said last time before you add more.
Finding them again
The notes tab searches everything you've written, filters by tag, and groups three ways: by time to read a week back, by tag to follow a theme end to end, or by who — which ranks accounts by how often you've written about them, and is the only view of your own attention that exists anywhere.
Notes are filed under an account's numeric X id, so a rename doesn't orphan them, and a note on someone's post files under that person too — everything you've written about somebody stays together.
Backup
At the foot of the notes tab: json writes everything including the frozen posts and is what an import reads; md writes a plain Markdown archive for reading anywhere else. Import merges by note, keeps the most recently edited version, and can never delete a note you already have.
Unlike captured posts, notes are never pruned. The post corpus is a cache of X and expires on the retention window you set; notes are the one thing in ct that only you could have produced.
Muting & moderation
Two different mutes, because there are two different kinds of person to be rid of. Both lists live in Settings → Moderation, and both belong to the X account you were signed in as when you added to them.
- an X account
- The ⊘ mute button on any post. It hides everything that account wrote, everywhere in ct — the feed, threads, and the copies peers contributed to the pool — so someone you never followed can't reach you through the network either. Nothing is disconnected and nothing already captured is deleted, so unmuting brings their posts straight back.
- a peer
- The mute button on any broadcast. Closer to a block than a hide: that peer is disconnected and stays disconnected until you unmute them, direct messages included.
Muted accounts are keyed on X's numeric id rather than the handle, so a rename doesn't quietly unmute anyone. Muting is local: it changes what your client shows and accepts, and says nothing to anyone else about who you muted.
Comms & the network
ct clients can talk to each other directly over WebRTC — signed broadcasts to everyone, and direct messages to one peer. Nothing routes through a server that can read it, and nothing is stored after it expires.
This layer does not depend on X. Once peers can reach the ct network, broadcasts and direct messages keep working during an X outage. Browsers use configurable beacons to discover one another, then libp2p carries traffic over direct or relayed peer connections; you can remove the shipped beacons and run your own.
Clients can also pool the posts they captured, so you see posts you never loaded yourself. Sending is Share captured posts in Settings → Network, and it's off until you turn it on. What goes out is posts — never your likes, follows, or a record of what you read. Receiving is the pooled posts key in the tuner, on by default; switch it off and the feed is only what this browser saw on X. Pooled cards say so on their face — a post from a peer is never dressed as one you loaded yourself.
Connecting is the button in the titlebar, beside the dot and the peer count it changes. It starts and stops the node for this session; whether ct joins automatically at startup is Join the p2p network in Settings → Network, where the node state, the peer list and your addresses also live.
Beacons
Two browsers cannot find each other unaided, so ct ships relay beacons that introduce peers and carry traffic until a direct connection forms. You can replace them with your own in Settings → Network.
Who can publish
Anyone can connect and read. Broadcasting is the scarce verb: it requires a signed pass for a wallet holding at least 100,000 $CT. The tokens are not spent or approved. Each receiving peer verifies the pass, the sender signature and the wallet balance for itself, so no central moderator decides who cleared the gate.
Direct messages are online-only Noise-encrypted libp2p streams. Broadcasts expire after 30 minutes; the comms view is a live room, not a permanent public archive.
Muting
The mute button on any broadcast disconnects that peer and keeps them disconnected until you unmute them in Settings → Moderation. Muting an X account is a separate thing — see muting & moderation.
Broadcast identities are self-asserted. A signature proves which peer key sent a message, not which human owns an X account.
$CT and the broadcast gate
Reading is open to everyone. Broadcasting requires holding 100,000 $CT in a linked wallet — an open publish verb on a gossip network is a spam surface, and the gate is the only thing standing on it.
Linking signs a plain message that binds your wallet to your ct peer key. It never spends, approves or moves tokens, and holding is all that's checked. Signing happens on ct.42069.gg/link.html rather than inside the extension, because wallets don't inject a provider into extension pages.
Unless the wallet is ct's own. When the embedded wallet holds the threshold, ct mints and stores the pass itself — no page opens and nothing is confirmed, because it is your key rather than another extension's. It never replaces a pass you linked yourself, it is verified before it is stored exactly as a pasted one is, and Settings → Network → Use ct’s own wallet turns it off. The privacy cost is the same either way: a pass publishes a link between that wallet address and your peer id.
$CT is also what the launchpad buys back. Of the 15% of swap fees ct takes from every launch, 80% buys $CT on the open market and burns it — 12% of every fee paid in any pool launched here. See fees for the full split.
- chain
- Robinhood Chain (4663)
- contract
0x63EcF3a907049bD6A5cf25a90842c9a7c66c4Ef2- supply
- 1,000,000,000 — all of it in the pool.
Every node enforces its own gate. Turning it off in your settings only changes what you accept — it cannot open the gate for anyone else, and it's worth doing when testing against a local beacon where nobody holds anything.
Your data
Everything ct holds — captured posts, your graph, your notes, your keys, your settings — lives in the browser profile on this machine. There is no ct account and no server holding a copy, which also means nothing is recoverable if you delete the extension.
- posts
- A cache of X, pruned on the retention window in the tuner. Shared between X accounts signed in to the same browser, since they're public data.
- frens, notes, keys
- Per X account. Two personas signed in to one browser keep separate graphs, separate notes and separate signing keys, and ct follows whichever account X is showing.
- backups
- Frens and notes both export to a file and merge back in. That's how you move to another browser or machine — and why an install is disposable.
Uninstalling from chrome://extensions deletes all of it. Take your backups
first. Full detail on what is stored and what leaves your device is in the
privacy policy.
When something looks wrong
- empty feed
- frens only is on by default and you may have no frens yet. Switch it off, or lower the tier floor and raise the age window.
- feed stopped
- X allows a fixed number of requests per 15 minutes, shared with your own browsing. ct pauses polling rather than erroring, and Settings → Stats shows what's left and when it resets.
- no peers
- Check the network is on in Settings → Network, then use Full reload — beacons are only read when the node is built, so editing them needs a restart.
- can't broadcast
- The gate needs a valid pass for the peer key you're running as. Switching X account changes that key, so each persona links its wallet once.
- posts from people you don't know
- Peers pool what they captured. Turn off pooled posts in the tuner's peers row for a feed built only from what this browser saw, or mute the account with ⊘ to be rid of it everywhere.
- someone is missing
- Check Settings → Moderation — a muted X account is hidden in the feed and in threads, and the mute belongs to the X account you were signed in as when you set it.
Still stuck, or found a bug? The Telegram group is the fastest way to reach us, and issues go on GitHub.
← Back to ct.42069.gg