corpus
the corpus is Grok Bot charters published as plain text in public GitHub repositories, snapshot 2026-09-04. the strict corpus is the source set minus 3 repositories that are not the unit of analysis (skill libraries and directories of "set up a new bot for me" setup prompts). this is not a census of public Grok Bot templates. install-link directories are excluded because their configuration text lives on x.ai, which this project never fetches.
strict corpus: 1596 charters from 86 repositories, inclusion 40 to 3000 words, english only, one charter = one bot role description a person could paste into a bot profile. full corpus (the 3 excluded repositories added back) is 2282 charters and is used only as a robustness line in the report, never on the check page.
every source is pinned to a commit sha resolved on the snapshot date and fetched as a tarball by that sha. api.github.com and x.ai were never contacted. all charters are english: the detectors, their token lists and the hand labels are english only, and results on any other language are not reliable.
source set: 89 repositories were read in total: the curated lists' own picks plus 253 repositories linked from the two discovery lists, of which 171 were excluded by the standing exclusion classes (code tools, connectors, bridges, installers, link directories, documentation), 8 could not be fetched, and 74 were fetched and put through the same inclusion test. every repository is pinned to a commit sha. sampling frame: charters published in repositories linked from two curated awesome-lists. no code search was used.
sources
| repository | branch | commit sha | status in strict corpus | charters |
|---|---|---|---|---|
| AmitMirgal/orgbot-hub | main | 7f65a8011fa119c1ab4321d4437170bd6f8d3ea1 | in corpus | 1 |
| Chakhdz/grok-bot-token-saver | master | fe82eb28665bdef430020999f448013e8491a203 | in corpus | 1 |
| EndeavorYen/grok-bot-skills | main | d1a0e777842821a95bcdab6c88c1a5ae37d0d194 | in corpus | 14 |
| GlobalTC/steer | main | 2423bf4d347b6ec6c2208d7d5aa9ef6973e9c600 | in corpus | 3 |
| HAEGONG/grok-bot-profiles | main | 6f3d07e566008175486228a509bd8461e5efb85f | in corpus | 12 |
| HammeredSmithy/bull-trade | main | 11feb72876a9572746527521fe05e4cc48f00abd | in corpus | 28 |
| Heyvhuang/werewolf-gamemaster | main | 2f18703f30815a295d52f6c09812a076e8354329 | in corpus | 1 |
| HxHippy/grok-bot-arch | main | b7c44ba488f4da42d0006a3c126e597ac5a7d465 | in corpus | 0 |
| KinGao294/grok-bot-orange-book | main | 1f689f8c7c9143dcdbdbd6ae631f9bdcd8572b23 | in corpus | 0 |
| Logos52/grok-bot-packets | main | 20903e2a2830010345f7227e1fa685c3722c8f9b | in corpus | 19 |
| Octo-o-o-o/grok-job-kit | main | 90894b2f42723dcae6e25c3e5252f1bfedec6019 | in corpus | 10 |
| OpulentiaAI/gtm-agent-automations | main | 568371d0b5c5c0ed28597dcc93ac5b6ce938967f | in corpus | 262 |
| PROJECT-073-X/grok-bot-workforce | main | 9786f76311c88ad3f12b9ec87ba995d9f994e332 | in corpus | 1 |
| PramodDutta/botskills | main | abe793060a7e7ad18e89e1f254e4ad0806556354 | in corpus | 119 |
| Steltic/steltic_grokbot | main | a76d5f315509b3a7c488844c6f1f0dfbb932785b | in corpus | 1 |
| Uncle-Gizmo/grok-bot-info | main | e927c1836f80134c898ec94a40d2ce635c6c910a | in corpus | 1 |
| WeSs1982/echo-chief-of-staff | main | 874dc50ec41637233f21bbc0f5256b938afa8b98 | in corpus | 0 |
| WebDevJasonCameron/ExploreGrokBot | main | 58fe3532ccbd3aecf8af06ea4a3706ac659d8f8c | in corpus | 5 |
| YannisKiefer/grokbot-x | main | cade7d95e2b60c2c60c53648d4d10ba87ae18443 | in corpus | 10 |
| ZeroPointRepo/GrokBotDev | main | d2aa69f8640e2ccef42f4b11b664e234c34c211d | in corpus | 137 |
| ZooHero500/plays | main | 65fbafc806431ed079a03a03ad474710f65ad31f | in corpus | 110 |
| a70win-wq/usegrokbot | main | 49c1dd3182ed14d1d76a99be4034ce153323b2ca | in corpus | 1 |
| aaravarr/openbot | main | b694d788b1e558112d0443943b1e0ba740075d92 | in corpus | 3 |
| andrewkittridge/grokory | main | 193608e9304de658a77e218c73fea02f41136867 | in corpus | 4 |
| banana2556/cursor-grokbot-helper | main | 19af0152c015848d5a10bfe1c85d9143bef08929 | in corpus | 0 |
| bcharleson/grokbot-peekaboo | main | 862172e0abfe15c1abf1efc538545fc5f214bb18 | in corpus | 1 |
| codejunkie99/rosterroom | main | a7ec5620c85ec19b1d1ac22321ccce531455484f | in corpus | 80 |
| composio-community/awesome-grok-bots | main | d732af02159bc2cc8f350422aaf09908822c2882 | in corpus | 20 |
| cs68614-hash/awesome-grokbot-templates | main | 577e696d4a7c128760a7952636c2d10cccfcc9ca | in corpus | 0 |
| dadamingmax/Grok-Bot-Setup-and-Usage-Guide | main | ad3f3fbb2ae40582379910710a5521d715e72f8c | in corpus | 0 |
| danielvegac/grok-bot-startup-services-outbound | main | 2ba35f365daa6eb7cf9cc7d52f6597b24c9aff24 | in corpus | 4 |
| ddhjy/grok-bot-hub | main | 37e4ce343bee7cd05a972b1efda218232e525142 | in corpus | 0 |
| divo12/awesome-grok-bot-templates | main | 184d4cc50c34899c00d21ba87ce2eb82da887c27 | in corpus | 10 |
| dragosroua/grok-bot-add-plugin | main | 80459c4543d2845492fc64dc2ddc4a366e8564fd | in corpus | 6 |
| ellelion/botteams | main | e478f8de0d6ee32b985dcb8c08d1d0fd5232bf9d | in corpus | 70 |
| enderzcx/grok-bot-switch | main | c612786ef8ec5e70c67fc691fea85cee1f06e724 | in corpus | 0 |
| ethanolivertroy/grokbot-cloudflare-inbox | main | 9c994514f37738482186b4c422c875f573b4ed98 | in corpus | 2 |
| fantomsuj/grokbot | main | 7cf5d3d97d8df426f63a40b06dd408379fa5dc11 | in corpus | 0 |
| function1st/PhoneZero | main | 98a72eb9456477ba3985d4f7a7dc0a22c22c50d2 | in corpus | 11 |
| galleonlabs/hypergrok-trading-desk | main | 0274d9e2429ff68bef4fd05099deb3f0899fe593 | in corpus | 27 |
| hariou/technocore-grokbot-ja | master | a442d32a6a6394826616407be9f8c20136e23e5f | in corpus | 1 |
| hesreallyhim/awesome-claude-code | main | db4db53566d757e31d75536627747fcaef01d7f1 | in corpus | 0 |
| jaredtrichard/grok-factory | main | 2e9f8e55935e9ec3cb8c1fa823c64bd043c4351b | in corpus | 10 |
| jaredtrichard/grok-research | main | 957bf951721ba0004b7c8d61559d44810e3e6666 | in corpus | 4 |
| jaskirat1616/grok-skills | main | dfadd540f887c3834e9043a29e9ff402b48aaf66 | in corpus | 186 |
| jay-sahnan/growth-grok-bots | main | 8cf16436859e2dd3a47f40f1d328052f5a6e3c85 | in corpus | 0 |
| jblack4vols/grok-bot | main | 6f284805b7351e8022d3286624290d13cc3c5293 | in corpus | 2 |
| jeremybrasher/grokbot-skills | main | fa7d4587d50a589b46ed9c3576b5f340549e49a3 | in corpus | 92 |
| jinank/great-grokbots | main | 1c318bf616d89574cc1ecde8758cf0c1950badd6 | in corpus | 0 |
| kunchenguid/grok-ship | main | ae1f5a787e544dcec69b819370615b2fcbef0eab | in corpus | 7 |
| kwakseongjae/awesome-grok-bot | main | 1023020613037e354c4526ec8ff2a26549566125 | in corpus | 3 |
| kydlikebtc/awesome-grokbot | main | 00304a366a46657b43c2bdc061f3b69fa0f1db48 | in corpus | 2 |
| lazerusrm/botrouter | main | 118f909ab0e4e16f15d8b932ced562d65f1dba38 | in corpus | 1 |
| lroolle/awesome-grokbot-templates | main | a12c2684a994b17647841b882d89d27550323805 | in corpus | 0 |
| lsj210001/crew-contract | main | 06d24e73f55e6550bcc53d9a8bebea80c6170b0b | in corpus | 0 |
| lureilly1/botjobs | main | 76e9a0e7491730d067d38c51385718b2232d244a | in corpus | 0 |
| mKay00/grok-bot-second-brain | master | dfa5d1dc83e34f9a93346c703334027d030d8876 | in corpus | 11 |
| mahathir69/technocore-safe | main | 96d7006d351a7d7de0130aecfb5c00c3a1a3722c | in corpus | 3 |
| maplefukku/grok-bot-ops | main | c3e54f9e078698b4195abf9a130ed43ba8d4e3be | in corpus | 1 |
| matsutouya/note-kojo | main | fbf79e2c3c5a60544e6fc3ba5a87105132568c55 | in corpus | 0 |
| matteoantoci/firstmate | master | dc26ad39f5584f23c8408478c6799c2bd69b0a1f | in corpus | 2 |
| mergisi/awesome-grokbot | main | 6210f2034c5737d1be100e227c8d308d9757ecf4 | in corpus | 113 |
| mostdesign01-sudo/grokbot-use-cases | main | 9cdb036e17099a6f08784219cfba5294a03883a6 | in corpus | 0 |
| mozilla/diversity | master | 5e612f24d537b5e7b80ae0aa730c32e499b68db4 | in corpus | 10 |
| mtrxdev/build-brief | main | c158ee5333d956b18efc11be187e558485b6684b | in corpus | 3 |
| napiermd/heavy-lift-cloud-agents | main | 3ebcbd91d5d2b0ab69f7f178570d3c24f07ae484 | in corpus | 1 |
| nescafe2009/dsh-grokbot | main | 8a3b70813fe5aa720ecddd940d65ec8d58acd771 | in corpus | 0 |
| njpatel/omabot | main | 801cb4b1dc3d20e75b43094aed36c3703e3f72e5 | in corpus | 0 |
| noam99moyal-sudo/podcast-summary-bot | main | f9b8e871de6880646ff5ad2b6e2a0464dcd44b4f | in corpus | 1 |
| novusordos666/grokbot-outreach-agent-team | main | 4ea1fd613329f66a4c51c2f0c231afd0b471a18c | in corpus | 6 |
| owenisas/grokbot-openai | main | bd2e81fe991f699d0d2482d665fef32be1088131 | in corpus | 0 |
| p10ns11y/botify | main | 8e249c3b84262f5c1eaadd1aa7441de5e28f7df5 | in corpus | 2 |
| pacifico-1106/grokbot-control-plane | main | 4162e5218537d3b3c6213a48195a556b01d3676c | in corpus | 1 |
| palehonk0-o/grokbot-market-memory | main | 9314e92d77b86c94df6e023e106c76927a91106d | in corpus | 6 |
| quolu/plaude | main | 7c18750f39df0ee5591c9fdacca6b9781dfd1890 | in corpus | 0 |
| richard7463/askgrokwallet | main | bc46298b059352171490390584fd895d92649a48 | in corpus | 1 |
| rockyzhuo/grok-bot-blue-book | main | ebb28026a630e70be8e3da578cf85d5919ed5e19 | in corpus | 0 |
| s-hiraoku/grok-bot-playbook | main | 306c7a12019b2e5aa6457f9f3607e8ff5692c689 | in corpus | 0 |
| shrdgn/grokbot-skills | main | ab16e780a80ce74c701022dec726f9174e625f79 | in corpus | 74 |
| steve228uk/grok-bot-shopping | main | c0a52b214e594973cf149aff3ad23068ef59c3ce | in corpus | 4 |
| swcstudiospace/PumpGrok | main | d16963a007b285f1a62687f7fc61c5506583559b | in corpus | 32 |
| tal-giladi/grokbot-field-guide | main | cbdb6b1895f25b5adb2767622860ba33e35c32d2 | in corpus | 1 |
| thomasbek3/hermes-bot-kit | master | 13b446128ee2831d4a1bfa29bfabe0f772ed80c6 | in corpus | 1 |
| tiankonglan/awesome-grok-bot-template | main | 826c52a67c816c7c1321f761d27219ff639afa99 | in corpus | 0 |
| vercel/vercel-plugin | main | 7b0a6f61b254b0149bb644cadfb588a5c46df0c2 | in corpus | 41 |
| zhulin025/LaoA-GrokBot | main | 527c3b5746bed34da3a6d4f9747e483c84534a41 | in corpus | 0 |
| Anil-matcha/awesome-grok-bot | master | 2412bacefee2cdc31ceb526443ad780a89a2a2cd | dropped: not the unit of analysis | 0 |
| aaron-he-zhu/aaron-marketing-skills | main | 33dc05b0eeac3f78f4621ff898a1b84c04a65bda | dropped: not the unit of analysis | 0 |
| elie222/botdirectory.ai | main | badedc0c985bf3e021634e3d7823ded02cd5545e | dropped: not the unit of analysis | 0 |
| RongleCat/awesome-grok-bot | main | e8af8ee56813e891657e63dafda90b5755ac021d | discovery only, no charters | 0 |
| majiayu000/awesome-grok-bot | main | f7f692c71a6379f3849ad2df5bdf2e310b974268 | discovery only, no charters | 0 |
the eight rules and the publication gate
each rule is a pure function over the normalized english charter text, the same code that runs in your browser on the check page. every rule was checked against 60 charters labelled by hand, blind, before the detector output was read. two gates: gate a is three-way agreement (true / false / unclear), gate b is agreement on true against not-true, both at 0.85. rows: 1 clears gate a, corpus-wide counts publishable. 2 fails a, clears b, only the corpus true count is publishable. 3 fails both but never invents a true, so the corpus true count is a lower bound. 4 fails everything, sample only. only rows 1 to 3 appear on the check page.
| rule | what it asks | gate a | gate b | precision on true | row | number reported |
|---|---|---|---|---|---|---|
| R1 approval gate | require a human yes before an irreversible action | 0.567 | 0.817 | 0.880 | 4 | sample only: 30 of n = 60, 95% interval 0.377 to 0.623 |
| R2 state file | keep a state file across runs | 0.633 | 0.733 | 0.786 | 4 | sample only: 24 of n = 60, 95% interval 0.286 to 0.526 |
| R3 silence rule | allow an empty run to send nothing | 0.833 | 0.950 | 0.923 | 2 | 378 of 1596 (corpus true count only) |
| R4 ownership boundary | state what the bot does not touch | 0.767 | 0.767 | 0.796 | 4 | sample only: 43 of n = 60, 95% interval 0.592 to 0.815 |
| R5 stop condition | define when the run is finished | 0.817 | 0.817 | 0.932 | 4 | sample only: 49 of n = 60, 95% interval 0.701 to 0.894 |
| R6 undisclosed capability | name every tool the bot uses in its role statement | 0.517 | 0.517 | 0.326 | 4 | sample only: 14 of n = 60, 95% interval 0.144 to 0.354 |
| R7 visible secret | carry no key, token, private key or internal host in the text | 1.000 | 1.000 | - | 1 | 0 of 1596 carry a secret shape (frozen count); after the shape fix 0 of 1596, see the note below |
| R8 injection resistance | treat content the bot reads (pages, email, tickets, pasted text) as data, not orders | 0.917 | 0.917 | 0.786 | 1 | 1302 of 1596 are silent on the question (corpus-wide); 294 of 1596 resistant; exposed is a detector floor, see below |
two numbers that are easy to misread
secret shapes: 0 of 1596 charters carry one. this corpus is curated public repositories where github's push protection and secret scanning make a live key close to impossible, so the zero says the search was on the wrong surface, not that nobody leaks. nothing is claimed about share links, which this project never reads.
part of that zero is the detector, not only the surface. the shapes the audit ran with required an unbroken alphanumeric tail after the prefix and the text layer they ran on dropped underscores, so keys of the shape sk-ant-api03-..., sk-proj-... and ghp_... were never catchable. on 2026-09-05 the shapes were widened: an api key is now sk- followed by up to 40 characters of letters, digits, hyphens or underscores and then at least 16 alphanumerics, a github token is ghp_, gho_, ghu_, ghs_ or ghr_ plus 20 alphanumerics or github_pat_ plus 20 characters, the slack shape also takes xoxe-, and the text layer keeps underscores inside a token. an email address is no longer counted as a secret: the check page reports it separately as something to look at before sharing. the corpus was re-scanned for this rule only, with every other rule's labels verified byte-identical: 0 of 1596 charters carried a secret shape before, 0 of 1596 after (1 carry an email address). the published numbers are unchanged.
injection: the number reported is the silence, 1302 of 1596 charters say nothing either way about whether content the bot reads can give it orders. the detector found 0 charters of 1596 that tell the bot to obey such content, and 0 of the 60 hand-labelled charters; an earlier hand-labelled sample on the wider corpus found an exposed charter the detector had missed, so a detector zero here is a floor, not a fact.
limits
- this reads text, not behaviour. a charter with an approval line can still be run without one, and one without it can be run carefully.
- the corpus is english charters published in public github repositories on 2026-09-04, not a census of public templates. one repository supplies 0.164 of the strict corpus and one near-duplicate family (5-gram jaccard at or above 0.50) covers 205 of 1596 charters, so every rate partly describes them.
- the rules that sit in row 4 (Approval, Memory, Boundary, Finished, Tools) are reported only from the hand-labelled sample of 60. they are not on the check page, whatever the headline of the accompanying article rests on.
- the detectors are regular expressions over english text. a clause phrased in a way the corpus never used will be missed, and a charter in another language will be misread, which is why the check page leads with what your charter already does and never scores it.
reproduce
the full pipeline (python, standard library only), the frozen numbers with their sha256 hashes, the blind hand labels, the decision log and the parity report between the browser engine and the python engine exist as a working folder that has not been published at the time of writing, so this page cannot link you to it. what you can check here: the source table above names every repository and commit, so the corpus can be rebuilt from those pins, and rules.js on this page is the exact engine, generated from the python one. the browser engine agreed with the python engine on every one of the 12768 frozen labels.