How it works
Nine contracts, one hot key, and one rule under all of it: a cat never chases a toy its owner crossed out.
A cat's day, step by step
- You adopt it and write it down. A name, a personality in your own words, and a tick against each of the five categories: chase this, never touch that. All of it goes on chain, in Personality, before the cat owns anything.
- It gets a bed. The house asks the cat's wallet who it belongs to, and turns away any wallet without both a personality and a name. There is no bed for a cat nobody has described, and none for a cat nobody has named. The name is how you tell whose cat is whose, above its head in the house and beside every token it ever launches. Names are unique, and a name is written once and never changes again.
- It spots a toy. The model is shown your words and only the toys you allowed, and picks one. Field.sow then asks Personality.permits and reverts if the answer is no. Three layers guard that choice, and only the last one, on chain, has the final word.
- It proposes three ideas. As soon as the toy is spotted, the cat comes up with three different token ideas in that category, each with a name, a ticker, a line about it and a logo it drew. They appear on My cats straight away.
- You pick one. Choose the idea you like, add your own X link and website if you want, and keep the cat's logo or upload your own. Then approve it, on chain. Nothing launches without your yes, and you can say it any time before the catch gets away, even before the toy is ready.
- It stalks. For three quarters of the wait the cat is already crouched over its toy: eighteen hours of its twenty-four, or nine of twelve while boosted by $MEOWGENTS. That is the stalking.
- It pounces. When the toy is ready and you have approved an idea, that exact idea becomes a token on the launchpad its owner chose, launched by the cat's own wallet and paid for out of the cat's own ETH. The catch carries the logo, the line the cat wrote, and your links or ours. Every cat hunts alone: there are no alliances here and nothing to earn by teaming up.
- Or it gets away. An unanswered round gets away: a toy left ready to pounce for twenty-four hours without an approved idea is lost, and the cat's bed has to be tidied before it can spot anything else. Nothing is ever launched on its own to save it.
What it will and won't chase
This is the promise the whole house is built around, so it is checked three times, each one harder to get past than the last:
- The menu. When your cat picks its next toy, the model is shown your words and only the categories you ticked. A toy you crossed out is not on the menu at all.
- The check before signing. If an answer names anything else anyway, the runtime refuses it before a transaction is signed.
- The check on chain. Field.sow asks Personality.permits whether this cat may chase this category, and reverts if the answer is no. This one is the final word. The first two stop a cat from trying; this one is why it cannot succeed, whoever holds the key.
Tastes are not a switch you can flip on a whim, either. The personality behind them has a week-long cooldown between changes, and it travels with the cat. The one thing you can change freely is what you point it at, and that list can never widen what it is allowed to chase.
The name is written once
You name a cat when you adopt it, and that name can never be changed: not by you, not by whoever buys the cat from you, and not by us. setName refuses a second call, even one setting the same string again.
An earlier version allowed renaming, on the reasonable-sounding grounds that a name is only a label and nobody should wear a typo forever. That was wrong in one specific way. A catch is permanent and carries its cat's name, so a name that can move afterwards means the record of who launched what can be rewritten: build a reputation, sell the cat, and the buyer keeps the history under a name of their own choosing.
The cost of that is real and it is yours to carry. Mistype it and you are stuck with it, which the adoption page says plainly before you sign anything. Names are unique whatever the capitalisation, and a name once claimed is never released and never taken by somebody else.
The name travels on the launch rather than being looked up afterwards, so a token keeps its cat's name even if that cat is later sold. A shortened address anywhere a name belongs means the page could not find one, never that the cat has none.
The five categories
Fixed in the contract, the same for everybody, and nobody can add a sixth. They are not things anyone creates. They are the subjects a cat may launch tokens about, and each owner picks which of them theirs is allowed to chase.
In the house each category is drawn as a toy, so you can see across the whole room what every cat is after. The toy is only the picture; the category is what the token is about. These definitions are the same words the model is given when it picks a toy, so what you read here is exactly what your cat was told.
| Category | What it covers | For example |
|---|
How often a cat pounces
There is one kind of cat. Every cat spots a new toy every twenty-four hours, so it brings you one round of ideas a day. Nobody chooses a faster cat at adoption, and nobody can buy one.
| Cat | Spots a toy every | Rounds a day |
|---|---|---|
| Every cat | 24h | 1 |
| Boosted by $MEOWGENTS | 12h | 2 |
Field.sow enforces it and reverts on anything sooner. It is not a rate limit in a script somewhere, and not a setting the operator can raise for a cat it likes.
The wait is counted from the moment a cat spots its toy, not from when it pounces. That is deliberate, and it is the difference between a boosted cat bringing in two rounds a day and one bringing in a round every eighteen hours. A toy is always ready with time to spare, so the cooldown is the thing that runs out, never the stalking.
It is a cooldown, not a calendar day. An earlier version counted toys against the UTC day, which sounds the same and is not: it resets at midnight, so a cat could spot a toy at 23:59 and another a minute later, and twice a month somebody would get a launch they had not paid for. A cooldown is the same distance from wherever it starts.
Holding $MEOWGENTS adds one round a day, to one cat at a time. Every ten million you hold is a slot, and you point each slot at a cat you own. That cat goes from one toy every twenty-four hours to one every twelve, and each toy is ready proportionally sooner.
You can tell a boosted cat in the house: it sits in a warm glow, and a cat without a slot behind it does not. The glow means "boosted by $MEOWGENTS" and nothing else, and it goes out when the boost does.
Ten million boosts one cat. Twenty million boosts two. It does not boost every cat the wallet happens to hold. You choose which on My cats, and you can change your mind once a day. Without that limit one holding could be walked from cat to cat so that whichever was about to spot a toy was always the boosted one, which is every cat boosted for the price of one.
It is rented, not owned. The balance is read every single time the question is asked, from the wallet that holds the cat, so selling the $MEOWGENTS puts the cat back to one round a day from its very next toy. Sell down from two slots to one and the cat you named first keeps its boost; the chain does not have to choose and you are not left with neither. That is deliberate, and it is the reason a holding is allowed to affect the pace at all: a pace somebody could buy permanently would quietly make every cat already adopted worth less than its owner paid.
None of it is switched on yet. $MEOWGENTS has not been launched and the treat jar is not pointed at anything, so Silo.boosted answers false for everybody and every cat runs at one round a day. The cat house reads the real state off the chain; this page describes the design.
What stalking is
A toy is not ready the moment a cat spots it. Stalking is the wait in between, and only a toy that is ready to pounce can become a token. It is the creeping and crouching you watch happen in the house.
It lasts three quarters of the cat's own cooldown, not a fixed number of hours. A cat stalks for eighteen hours of its twenty-four, or nine of twelve while boosted by $MEOWGENTS. Worked out rather than set, because one constant cannot serve both: six hours was most of a fast cat's cycle and a quarter of a slow one's, which left the slow one on an empty bed for eighteen hours a day and made the whole house look abandoned to anybody who opened the page at the wrong moment. The last quarter is slack, so a cat that is ready is never waiting on a daemon tick to be allowed to spot its next toy.
Nothing ticks. Field stores when a toy was spotted and when it will be ready, and works out the rest from the clock every time it is asked, so a cat keeps stalking whether or not anybody is running and there is no stored stage a stalled process could leave behind. Stalking costs nothing. There is no stalking transaction and nobody pays for a cat to crouch.
There used to be an extra step on the way: four times per toy, a transaction that took half an hour off the clock. That is gone. The cooldown always ran out long after the toy was ready, so it never bought a single extra pounce and cost gas every day to buy nothing. Removing it took five per cent off what the house costs to run and changed nothing anybody could see.
Stalking and the cooldown are different clocks, and it is worth keeping them apart. Stalking is how long this toy takes. The cooldown is how long until the cat may spot the next one. Because a toy is ready well within either cooldown, a cat always finishes its stalk with time to spare and then waits.
Why a catch gets away
Because nothing launches without its owner's yes, and a round nobody answers has to end somewhere. It is also because a stopped house and a quiet house otherwise look identical. Every process can report healthy while doing nothing at all, and a project that stores its stages rather than working them out will happily show you a frozen room as a lively one. Here the stage is computed from the clock every time anybody asks, so a room of sleeping cats and toys that got away is what an outage looks like from the outside. It is the cheapest alarm there is: the front page.
Where it launches
Each cat points at one launchpad and its owner picks which. You choose when you adopt it, and you can change it whenever you like from My cats. Unlike the pace, this is a setting and not a purchase.
Three are built: Pons V2, Flap and letscash. A new one is only added once it is built and tested, because registering one on chain is permanent.
That permanence is the point of the whole arrangement. A launchpad's address is written once when the house registers it, and there is no way to change it afterwards at any privilege level. The house can retire a launchpad and add another; it can never re-point one your cat has already chosen. Retiring refuses a pounce rather than redirecting it, and refuses before the bed is cleared, so a cat whose launchpad was retired keeps its toy.
The daemon can only build one launchpad's calldata, so it reads which one a cat chose before it encodes anything and skips (by name) any cat pointed somewhere it cannot write for. Sending the wrong launchpad a payload would not fail loudly; it would do nothing and report success, with the bed already cleared.
What you point a cat at
You can give each cat up to five contract addresses (tokens whose taste you want it to take seriously) and edit that list at any time, as often as you like, from My cats. It is read at the moment your cat decides and never cached, so a change takes effect at its very next toy.
References are taste, not permission. One cannot widen what a cat may chase: Field.sow still asks Personality.permits and still refuses a category you did not tick. That is exactly why this list is freely editable while the personality behind it has a week-long cooldown: a taste you can rewrite the moment something pumps is a weathervane, but a list of what you admire is meant to move.
The cat is told to take the taste and leave the token. Handing a model five successful tokens with no framing is handing it five things to copy, which is how you get a house that launches the same coin with a different animal on it.
An address with no code on it is refused, along with duplicates and the cat's own wallet. Those cannot answer to a name, and would reach the model as a hex string pretending to be a reference. Pointing at a rival, at something dead, or at something your cat is not allowed to chase are all opinions, and none of them are the contract's business.
And what it is told to avoid
Alongside your references, a cat is shown what is trending on the launchpad right now, as the crowd to avoid, which is the opposite of how a trending list is normally used. It is built from the chain's own logs rather than anybody's API: every launch, then every buy, bucketed by curve and ranked by distinct buyers rather than volume. Pons launches against tokenised equities as well as ETH, so adding the amounts together would sum dollars and shares and call the result a ranking.
Every name in that list was written by a stranger, and a launch is cheap enough that launching a token named to instruct whatever reads trending lists is a real idea rather than a theoretical one. So those labels are flattened to short single lines and fenced off as things that exist rather than as instructions. And underneath that sits the part that does not depend on the model behaving at all, which is the check on chain.
What the operator can and cannot do
One hot key spots toys, tidies beds and pounces on everybody's behalf, because a cat that needed its owner awake would not be much of a cat. What that key cannot do is the part worth saying plainly:
- It cannot pick a toy your cat was not told to like.
- It cannot move a cat's ETH anywhere except two places: the launchpad, as the launch fee, and back to itself, as the gas that launch cost. That second one is capped by the owner, can never exceed the gas actually measured, and only happens on a toy that is ready to pounce.
- It cannot choose where a launch goes. Your cat does, from the launchpads this house has registered, and a registered launchpad's address can never be changed afterwards by anybody. The module checks the calldata byte by byte and refuses anything that is not a launch the chosen launchpad accepts.
- It cannot send a launch's creator fees anywhere but your cat. Every launch names the cat that made it as the recipient, which is checked in the same byte-by-byte scan.
- It cannot rename your cat, and neither can you: a name is written once and nobody at any privilege level can write it again.
- It cannot change what your cat is pointed at as taste, and it cannot take your cat's ETH out to you or to anyone: a withdrawal answers to the wallet holding the cat and to nothing else.
- It cannot do any of this after you pause pouncing for your cat, which you can do at any time, and which costs your cat nothing but its ability to pounce.
Who pays for a pounce
A launch is two separate costs, and they are easy to mix up. The launchpad charges a fee of 0.0005 ETH, which goes to pons. Separately, the transaction has to deploy a token and a bonding curve, which is about 4.4 million gas (measured, on a fork, against the real launchpad), and that goes to the network.
The operator signs the pounce, so the operator fronts that gas. Left there, the house would subsidise every token it launched by more than the fee itself. So the house can charge it back to the cat, out of the cat's own wallet, at the gas price of that exact transaction: never more than the gas actually measured, never more than the cap the owner set, and only ever on a toy that is ready to pounce.
That charge is currently switched off and the house is paying the gas. So a launch costs a cat the launchpad's fee and nothing else. The exact figure, both parts of it, is read off the chain on the adoption page rather than written into a sentence here: gas moves, the fee can move, and the cap is a setting, so a number typed onto this page is a number that quietly stops being true.
Spotting a toy is not billed. It is 2.5% of a cycle, and adding a second money-moving path to collect it would cost more in risk than it saves in gas.
Every launch waits for your yes
Nothing launches without your yes. There is no setting that lets a cat launch on its own, and a round you leave unanswered is never launched to save it. As soon as your cat spots a toy it proposes three ideas, and they wait on My cats until you pick one.
- Pick one of the three. Each has a ticker, a name, a line about it, the cat's own reason in its own words, and a logo it drew. An idea marked fallback came from the cat's rotation because no model answered, and says so.
- Add your links, if you like. An X link and a website. Leave either empty and the token gets the house's X account and its own row on Catches. Whatever you enter is written into the token forever, so the page checks it before anything is sent.
- Keep the cat's logo, or upload your own. A PNG, JPEG, WEBP or GIF up to 2 MB. Your wallet signs a free message (no transaction) to prove you own the cat, and the picture is pinned to IPFS.
- Approve it. One transaction to LaunchApprovals records exactly which idea you said yes to, with your links and logo. You can change your pick or withdraw it until the cat pounces. Once it launches, the token is permanent.
When the toy is ready and your approval matches one of the ideas, the cat launches exactly that idea. If it matches none (because the launchpad or pair changed and the ideas had to be fingerprinted again), the page says so, and you approve again. A round nobody approves gets away when its time runs out.
Honest about where the check lives: your approval is an on-chain record anybody can read, and it is the house's launcher that reads it before every launch and launches nothing without it. The launch contract itself does not look at it, so the record is what lets anybody see that every token launched was one its owner said yes to.
What a catch carries
A token is more than a name and a ticker. Every launch a cat makes also carries a logo (the one the cat drew for that idea, or the owner's own), a description the cat wrote, and links: the owner's, or ours.
The logo is drawn from the token's own idea (catnip on a token called Catnip), and each one is in a different style. Thirty-two of them: linocut, claymation, stained glass, risograph, each with its own palette. The style is picked from the token's identity rather than at random, so a launch can be reproduced from its own record. The first version gave every launch one house look, and three tokens in it was obvious that a house whose art is identikit reads as a house whose tokens are.
What never varies is the part that is not taste: one centred subject, no lettering, legible at the size a launchpad actually shows it. Gibberish letters beside a real ticker read as a scam.
If no picture can be made (no key, a slow afternoon, an outage), the house draws its own emblem from the toy and the cat's wallet instead. A launch is never held up for a logo. A toy stays ready to pounce for twenty-four hours and then gets away, and a missing picture is not worth losing a catch over.
Unless its owner gave their own when approving, the website on a token is that token's own row on the Catches page, so anybody who finds it on the launchpad can come back and read what the cat was thinking when it picked that toy, and the X account is the house's.
Why it chose that
Every time a cat spots a toy and every time it pounces, the model is asked for one sentence in the cat's own voice, and those sentences are kept rather than printed to a terminal and lost. You can read them one click from any row, on Catches, on Top cats, and on My cats.
This is the one thing on the site the chain cannot vouch for, and it is labelled that way. When no model answers, the cat picks a toy anyway on a deterministic fallback whose “sentence” is a template, and presenting that as reasoning would be this site inventing a mind. So every entry says where it came from, and a catch with no entry shows no button at all rather than an empty quote.
What a cat earns
Every token a cat launches carries a creator fee, charged on each trade and paid to whoever the launch named as its recipient. Every launch here names the cat that made it. That is not a preference: the launchpad gives the right to collect a token's fees to the address the launch declared and to nobody else, so naming anything else would hand your cat's earnings away permanently.
Collecting is one transaction that sweeps a token's fees out of its curve, claims them, and splits them. Most of it stays with your cat, and the house keeps a fixed share. That split is a constant in the contract with no setter at any privilege level, so it cannot be changed later, on you or on anybody who buys your cat from you.
The share is taken from what arrived, measured across that one transaction, never from your cat's balance. ETH you sent it to pay for launches is not revenue and nothing here can touch it. Anybody may trigger a collection, including you, so getting your fees never depends on us running anything.
One thing worth knowing, because it is unusual. The launchpad opens every launch with a tax on buying that starts near 99% and decays to nothing within about three seconds, to make racing a launch unprofitable. What it collects is not burned: it joins the trading fee and reaches the creator. So if somebody tries to snipe your cat's token in the first second, most of what they spend lands in your cat's wallet.
Your cat, its wallet, and selling it
Your cat is the NFT. Its name, its tastes, its pace, its wallet and every catch on its record belong to the token, so whoever holds the NFT has the cat, and selling the NFT sells the cat whole.
ETH you send a cat is yours to take back at any moment. No notice, no timelock, no pause, and it works mid-stalk. The withdrawal is on My cats, it goes to the wallet that holds the cat, and nobody but that wallet can trigger it.
Selling a cat empties its wallet to you, the seller, first, in the same transaction as the transfer. Without that, somebody could list a cat showing ETH inside, take payment, and drain it in the same block.
A cat's wallet holds ETH and nothing else today. USDG and the tokenised stocks are planned and the panel is built for them: a token's own decimals() is read rather than assumed, because eighteen is usual and not universal and a withdrawal built on the wrong figure sends a millionth or a million times what was meant. A token that will not answer is shown but cannot be withdrawn from there.
What a cat can launch against
Pons launches tokens paired against more than ETH (tokenised equities and USDG among them), and the adoption page lists every pair currently in use, read from the launchpad's own launch events rather than from a list somebody typed. Cats launch against ETH only.
The rest are shown dimmed because this is not one setting away, and the reason is worth stating plainly. The launch is not the problem: the module checks a launch for two things, the cat's own address and the tax, and never looks at what it is paired against. What breaks is everything after. Fee collection measures the wallet's ETH balance, so fees paid in a token would report as nothing collected (silently, with no error), and every market figure on this site decodes a trade's other leg as ETH, so a Top cats table across them would be summing dollars and shares.
Fixing that cannot be a patch. A cat's wallet is fixed to one module when it is created and there is no way to switch it afterwards, for anybody. That is the same immutability that lets this page promise the house can never redirect a launch. So a wallet that understood token fees would have to be a new kind of cat, in a new collection, and every cat adopted so far would stay as it is. It is a decision about a second version of this house rather than a setting somebody can turn on, and it is not being made today.
$MEOWGENTS and the treat jar
$MEOWGENTS will launch on the same launchpad the cats use, and it does one job: it buys speed, one cat at a time. Every ten million held is a slot you point at a cat you own, and that cat gets one extra round a day, a toy every twelve hours instead of every twenty-four. Twenty million boosts two cats. You choose which, and may change once a day.
It is held, never spent. There is no burn and nothing to pay into the jar: spotting a toy costs nothing and always will. The balance is read at the very moment a cat spots its toy, so a boost follows the tokens rather than the wallet that once had them. Sell them and the cat is back to one round a day from its next toy. The cat house shows where the jar stands right now.
What is not finished
Nothing is deployed yet: the nine contracts are written and tested, but the house is not open. What follows is what is still missing, or still true and uncomfortable, said here rather than left for somebody to discover.
- No independent review of the contracts, and every cat's wallet is built to hold real money. This is the one to weigh before you fund a cat.
- $MEOWGENTS has not been launched. When it is, its address appears in the header, and the treat jar still has to be armed against it before any boost slot exists.
- Nobody has used this yet. Every path is tested, but a stranger's wallet finds things a test suite does not.
- Creator fees are collected by a transaction somebody has to send. Anyone may send it and it can only move money to your cat and the house, but until one is sent your fees sit in the launchpad's escrow rather than in your cat's wallet.
- There is no alerting. Catches getting away on the front page is the alerting.