[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-ethereum-tlsnotary":3,"mdc-7ibwar-key":34,"related-repo-ethereum-tlsnotary":628,"related-org-ethereum-tlsnotary":661},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"tlsnotary","build and debug TLSNotary workflows","Build, adapt, and debug TLSNotary agent workflows and TLSNotary Extension plugins. Use when a user wants to prove data from a web service with TLSNotary, create or review a TLSNotary extension plugin, find a JSON API endpoint to notarize, design selective disclosure handlers, intercept browser auth headers, size maxRecvData\u002FmaxSentData, or troubleshoot TLSNotary proof generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"ethereum","Ethereum","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fethereum.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Security","security","tag",{"name":17,"slug":18,"type":15},"Cryptography","cryptography",{"name":20,"slug":21,"type":15},"Web3","web3",{"name":9,"slug":8,"type":15},3,"https:\u002F\u002Fgithub.com\u002Fethereum\u002Fzk-skills","2026-08-20T03:53:27.874217",null,0,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"AI-friendly skills for EF \u002F PSE Projects","https:\u002F\u002Fgithub.com\u002Fethereum\u002Fzk-skills\u002Ftree\u002FHEAD\u002Fskills\u002Ftlsnotary","---\nname: tlsnotary\ndescription: Build, adapt, and debug TLSNotary agent workflows and TLSNotary Extension plugins. Use when a user wants to prove data from a web service with TLSNotary, create or review a TLSNotary extension plugin, find a JSON API endpoint to notarize, design selective disclosure handlers, intercept browser auth headers, size maxRecvData\u002FmaxSentData, or troubleshoot TLSNotary proof generation.\n---\n\n# TLSNotary\n\n## Overview\n\nUse this skill to help an agent turn a user goal such as \"prove my Spotify top artist\" or \"prove account data from a bank dashboard\" into a practical TLSNotary proof workflow.\n\nThe main current workflow is TLSNotary Extension plugin development: find an authenticated JSON endpoint, capture the required auth headers from the browser session, create a plugin that calls `prove(...)`, reveal only the minimum useful fields, build it, and review it for leaked personal data.\n\n## Workflow\n\n1. Clarify what the user wants to prove and who should verify it.\n2. Identify whether TLSNotary is appropriate: the data should be returned by a HTTPS endpoint, preferably JSON, and the proof should reveal only selected fields.\n3. Research the target service API before writing code.\n4. Plan the proof request: endpoint, method, auth headers, request body, response fields, reveal handlers, and data limits.\n5. Build or modify the TLSNotary Extension plugin.\n6. Verify the plugin locally and inspect the proof output.\n7. Review every changed file for secrets or personal data before committing or sharing.\n\nFor detailed TLSNotary Extension plugin implementation patterns, read `references\u002Fplugin-development.md`.\n\nFor one-shot plugin work, choose the most specific reference:\n\n- `references\u002Fcurl-to-plugin.md`: convert DevTools cURL or a discovered request into plugin code, including SDK source, verifier\u002Fproxy config, handlers, security review, and troubleshooting.\n\n## API Research\n\nPrefer a JSON endpoint over HTML. Look for a small authenticated GET or POST response that contains the exact user data to prove.\n\nTry automatic discovery first:\n\n- search official docs, known API endpoints, and reverse-engineered API notes;\n- inspect the website's JavaScript, `__NEXT_DATA__`, and inline `window.*` variables;\n- try common paths such as `\u002Fapi\u002F`, `\u002Fapi\u002Fv1\u002F`, `\u002Fgraphql`, `\u002Fproxy\u002F`, or service-specific API prefixes;\n- inspect existing TLSNotary demo plugins for similar auth or endpoint patterns.\n\nIf discovery fails, ask the user for a browser DevTools Network capture. Have them filter XHR\u002FFetch, choose the relevant request, and copy it as cURL. From that request, identify the URL, method, auth headers, request body, and response shape.\n\nNever hardcode real cookies, bearer tokens, CSRF tokens, email addresses, account IDs, or usernames into a skill, plugin, test fixture, or committed file.\n\n## Proof Planning Checklist\n\nBefore editing code, write down:\n\n- endpoint host, path, method, and request body if any;\n- auth strategy: Cookie, Authorization, CSRF token, or a combination;\n- `useHeaders()` filter strategy for each auth credential;\n- window URL to open, usually a dashboard or home page that continues making authenticated requests;\n- `maxRecvData` based on response size plus buffer;\n- `maxSentData` based on request size, especially cookie size;\n- JSON fields to reveal and why each field is necessary;\n- theme\u002Fname\u002FUI text only if building an extension plugin.\n\nUse broad header filters for cookies on the service domain. Use specific filters for API-only headers such as CSRF tokens. Remember that `useHeaders()` only captures requests after the listener is active; avoid pages where the needed API call fires once during initial page load.\n\n## Required TLSNotary Request Rules\n\nAlways include these headers in `prove(...)` requests unless upstream SDK guidance changes:\n\n```typescript\n'Accept-Encoding': 'identity',\nConnection: 'close',\n```\n\n`Accept-Encoding: identity` avoids compressed responses that are harder to handle. `Connection: close` gives clean TLS session termination.\n\nReveal the minimum useful data. Usually reveal the sent start line, received start line, response date header, and selected JSON response paths. Reveal request bodies only when needed to make a POST or GraphQL proof understandable.\n\n## Verification\n\nFor TLSNotary Extension plugins, build with `esbuild` using the verifier and proxy defines expected by the extension development flow. Then test the built JavaScript in the extension Developer Console.\n\nAfter verification, inspect all created or modified files for:\n\n- cookies,\n- bearer tokens,\n- CSRF tokens,\n- emails,\n- usernames,\n- account IDs,\n- copied personal API responses.\n\nIf any live secret or personal identifier appears in code, remove it before continuing.\n\nIf `@tlsn\u002Fplugin-sdk` cannot be installed from npm, use `references\u002Fcurl-to-plugin.md`: current upstream has the SDK inside the `tlsn-extension` monorepo. Do not spend time retrying npm until registry availability has been re-checked.\n\n## Output Expectations\n\nWhen building a plugin, produce:\n\n- the plugin file or patch,\n- the build command used,\n- the endpoint and auth strategy,\n- the fields revealed in the proof,\n- sizing choices for `maxRecvData` and `maxSentData`,\n- verification notes and known limitations.\n\nWhen only planning, produce the same information without code edits and clearly mark unknowns that require a Network capture or user-provided cURL.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,47,54,60,74,80,120,133,138,153,159,164,169,238,243,248,254,259,320,332,338,350,440,459,464,470,483,488,526,531,559,565,570,617,622],{"type":40,"tag":41,"props":42,"children":43},"element","h1",{"id":4},[44],{"type":45,"value":46},"text","TLSNotary",{"type":40,"tag":48,"props":49,"children":51},"h2",{"id":50},"overview",[52],{"type":45,"value":53},"Overview",{"type":40,"tag":55,"props":56,"children":57},"p",{},[58],{"type":45,"value":59},"Use this skill to help an agent turn a user goal such as \"prove my Spotify top artist\" or \"prove account data from a bank dashboard\" into a practical TLSNotary proof workflow.",{"type":40,"tag":55,"props":61,"children":62},{},[63,65,72],{"type":45,"value":64},"The main current workflow is TLSNotary Extension plugin development: find an authenticated JSON endpoint, capture the required auth headers from the browser session, create a plugin that calls ",{"type":40,"tag":66,"props":67,"children":69},"code",{"className":68},[],[70],{"type":45,"value":71},"prove(...)",{"type":45,"value":73},", reveal only the minimum useful fields, build it, and review it for leaked personal data.",{"type":40,"tag":48,"props":75,"children":77},{"id":76},"workflow",[78],{"type":45,"value":79},"Workflow",{"type":40,"tag":81,"props":82,"children":83},"ol",{},[84,90,95,100,105,110,115],{"type":40,"tag":85,"props":86,"children":87},"li",{},[88],{"type":45,"value":89},"Clarify what the user wants to prove and who should verify it.",{"type":40,"tag":85,"props":91,"children":92},{},[93],{"type":45,"value":94},"Identify whether TLSNotary is appropriate: the data should be returned by a HTTPS endpoint, preferably JSON, and the proof should reveal only selected fields.",{"type":40,"tag":85,"props":96,"children":97},{},[98],{"type":45,"value":99},"Research the target service API before writing code.",{"type":40,"tag":85,"props":101,"children":102},{},[103],{"type":45,"value":104},"Plan the proof request: endpoint, method, auth headers, request body, response fields, reveal handlers, and data limits.",{"type":40,"tag":85,"props":106,"children":107},{},[108],{"type":45,"value":109},"Build or modify the TLSNotary Extension plugin.",{"type":40,"tag":85,"props":111,"children":112},{},[113],{"type":45,"value":114},"Verify the plugin locally and inspect the proof output.",{"type":40,"tag":85,"props":116,"children":117},{},[118],{"type":45,"value":119},"Review every changed file for secrets or personal data before committing or sharing.",{"type":40,"tag":55,"props":121,"children":122},{},[123,125,131],{"type":45,"value":124},"For detailed TLSNotary Extension plugin implementation patterns, read ",{"type":40,"tag":66,"props":126,"children":128},{"className":127},[],[129],{"type":45,"value":130},"references\u002Fplugin-development.md",{"type":45,"value":132},".",{"type":40,"tag":55,"props":134,"children":135},{},[136],{"type":45,"value":137},"For one-shot plugin work, choose the most specific reference:",{"type":40,"tag":139,"props":140,"children":141},"ul",{},[142],{"type":40,"tag":85,"props":143,"children":144},{},[145,151],{"type":40,"tag":66,"props":146,"children":148},{"className":147},[],[149],{"type":45,"value":150},"references\u002Fcurl-to-plugin.md",{"type":45,"value":152},": convert DevTools cURL or a discovered request into plugin code, including SDK source, verifier\u002Fproxy config, handlers, security review, and troubleshooting.",{"type":40,"tag":48,"props":154,"children":156},{"id":155},"api-research",[157],{"type":45,"value":158},"API Research",{"type":40,"tag":55,"props":160,"children":161},{},[162],{"type":45,"value":163},"Prefer a JSON endpoint over HTML. Look for a small authenticated GET or POST response that contains the exact user data to prove.",{"type":40,"tag":55,"props":165,"children":166},{},[167],{"type":45,"value":168},"Try automatic discovery first:",{"type":40,"tag":139,"props":170,"children":171},{},[172,177,198,233],{"type":40,"tag":85,"props":173,"children":174},{},[175],{"type":45,"value":176},"search official docs, known API endpoints, and reverse-engineered API notes;",{"type":40,"tag":85,"props":178,"children":179},{},[180,182,188,190,196],{"type":45,"value":181},"inspect the website's JavaScript, ",{"type":40,"tag":66,"props":183,"children":185},{"className":184},[],[186],{"type":45,"value":187},"__NEXT_DATA__",{"type":45,"value":189},", and inline ",{"type":40,"tag":66,"props":191,"children":193},{"className":192},[],[194],{"type":45,"value":195},"window.*",{"type":45,"value":197}," variables;",{"type":40,"tag":85,"props":199,"children":200},{},[201,203,209,211,217,218,224,225,231],{"type":45,"value":202},"try common paths such as ",{"type":40,"tag":66,"props":204,"children":206},{"className":205},[],[207],{"type":45,"value":208},"\u002Fapi\u002F",{"type":45,"value":210},", ",{"type":40,"tag":66,"props":212,"children":214},{"className":213},[],[215],{"type":45,"value":216},"\u002Fapi\u002Fv1\u002F",{"type":45,"value":210},{"type":40,"tag":66,"props":219,"children":221},{"className":220},[],[222],{"type":45,"value":223},"\u002Fgraphql",{"type":45,"value":210},{"type":40,"tag":66,"props":226,"children":228},{"className":227},[],[229],{"type":45,"value":230},"\u002Fproxy\u002F",{"type":45,"value":232},", or service-specific API prefixes;",{"type":40,"tag":85,"props":234,"children":235},{},[236],{"type":45,"value":237},"inspect existing TLSNotary demo plugins for similar auth or endpoint patterns.",{"type":40,"tag":55,"props":239,"children":240},{},[241],{"type":45,"value":242},"If discovery fails, ask the user for a browser DevTools Network capture. Have them filter XHR\u002FFetch, choose the relevant request, and copy it as cURL. From that request, identify the URL, method, auth headers, request body, and response shape.",{"type":40,"tag":55,"props":244,"children":245},{},[246],{"type":45,"value":247},"Never hardcode real cookies, bearer tokens, CSRF tokens, email addresses, account IDs, or usernames into a skill, plugin, test fixture, or committed file.",{"type":40,"tag":48,"props":249,"children":251},{"id":250},"proof-planning-checklist",[252],{"type":45,"value":253},"Proof Planning Checklist",{"type":40,"tag":55,"props":255,"children":256},{},[257],{"type":45,"value":258},"Before editing code, write down:",{"type":40,"tag":139,"props":260,"children":261},{},[262,267,272,283,288,299,310,315],{"type":40,"tag":85,"props":263,"children":264},{},[265],{"type":45,"value":266},"endpoint host, path, method, and request body if any;",{"type":40,"tag":85,"props":268,"children":269},{},[270],{"type":45,"value":271},"auth strategy: Cookie, Authorization, CSRF token, or a combination;",{"type":40,"tag":85,"props":273,"children":274},{},[275,281],{"type":40,"tag":66,"props":276,"children":278},{"className":277},[],[279],{"type":45,"value":280},"useHeaders()",{"type":45,"value":282}," filter strategy for each auth credential;",{"type":40,"tag":85,"props":284,"children":285},{},[286],{"type":45,"value":287},"window URL to open, usually a dashboard or home page that continues making authenticated requests;",{"type":40,"tag":85,"props":289,"children":290},{},[291,297],{"type":40,"tag":66,"props":292,"children":294},{"className":293},[],[295],{"type":45,"value":296},"maxRecvData",{"type":45,"value":298}," based on response size plus buffer;",{"type":40,"tag":85,"props":300,"children":301},{},[302,308],{"type":40,"tag":66,"props":303,"children":305},{"className":304},[],[306],{"type":45,"value":307},"maxSentData",{"type":45,"value":309}," based on request size, especially cookie size;",{"type":40,"tag":85,"props":311,"children":312},{},[313],{"type":45,"value":314},"JSON fields to reveal and why each field is necessary;",{"type":40,"tag":85,"props":316,"children":317},{},[318],{"type":45,"value":319},"theme\u002Fname\u002FUI text only if building an extension plugin.",{"type":40,"tag":55,"props":321,"children":322},{},[323,325,330],{"type":45,"value":324},"Use broad header filters for cookies on the service domain. Use specific filters for API-only headers such as CSRF tokens. Remember that ",{"type":40,"tag":66,"props":326,"children":328},{"className":327},[],[329],{"type":45,"value":280},{"type":45,"value":331}," only captures requests after the listener is active; avoid pages where the needed API call fires once during initial page load.",{"type":40,"tag":48,"props":333,"children":335},{"id":334},"required-tlsnotary-request-rules",[336],{"type":45,"value":337},"Required TLSNotary Request Rules",{"type":40,"tag":55,"props":339,"children":340},{},[341,343,348],{"type":45,"value":342},"Always include these headers in ",{"type":40,"tag":66,"props":344,"children":346},{"className":345},[],[347],{"type":45,"value":71},{"type":45,"value":349}," requests unless upstream SDK guidance changes:",{"type":40,"tag":351,"props":352,"children":357},"pre",{"className":353,"code":354,"language":355,"meta":356,"style":356},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","'Accept-Encoding': 'identity',\nConnection: 'close',\n","typescript","",[358],{"type":40,"tag":66,"props":359,"children":360},{"__ignoreMap":356},[361,407],{"type":40,"tag":362,"props":363,"children":366},"span",{"class":364,"line":365},"line",1,[367,373,379,383,389,393,398,402],{"type":40,"tag":362,"props":368,"children":370},{"style":369},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[371],{"type":45,"value":372},"'",{"type":40,"tag":362,"props":374,"children":376},{"style":375},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[377],{"type":45,"value":378},"Accept-Encoding",{"type":40,"tag":362,"props":380,"children":381},{"style":369},[382],{"type":45,"value":372},{"type":40,"tag":362,"props":384,"children":386},{"style":385},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[387],{"type":45,"value":388},": ",{"type":40,"tag":362,"props":390,"children":391},{"style":369},[392],{"type":45,"value":372},{"type":40,"tag":362,"props":394,"children":395},{"style":375},[396],{"type":45,"value":397},"identity",{"type":40,"tag":362,"props":399,"children":400},{"style":369},[401],{"type":45,"value":372},{"type":40,"tag":362,"props":403,"children":404},{"style":369},[405],{"type":45,"value":406},",\n",{"type":40,"tag":362,"props":408,"children":410},{"class":364,"line":409},2,[411,417,422,427,432,436],{"type":40,"tag":362,"props":412,"children":414},{"style":413},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[415],{"type":45,"value":416},"Connection",{"type":40,"tag":362,"props":418,"children":419},{"style":369},[420],{"type":45,"value":421},":",{"type":40,"tag":362,"props":423,"children":424},{"style":369},[425],{"type":45,"value":426}," '",{"type":40,"tag":362,"props":428,"children":429},{"style":375},[430],{"type":45,"value":431},"close",{"type":40,"tag":362,"props":433,"children":434},{"style":369},[435],{"type":45,"value":372},{"type":40,"tag":362,"props":437,"children":438},{"style":369},[439],{"type":45,"value":406},{"type":40,"tag":55,"props":441,"children":442},{},[443,449,451,457],{"type":40,"tag":66,"props":444,"children":446},{"className":445},[],[447],{"type":45,"value":448},"Accept-Encoding: identity",{"type":45,"value":450}," avoids compressed responses that are harder to handle. ",{"type":40,"tag":66,"props":452,"children":454},{"className":453},[],[455],{"type":45,"value":456},"Connection: close",{"type":45,"value":458}," gives clean TLS session termination.",{"type":40,"tag":55,"props":460,"children":461},{},[462],{"type":45,"value":463},"Reveal the minimum useful data. Usually reveal the sent start line, received start line, response date header, and selected JSON response paths. Reveal request bodies only when needed to make a POST or GraphQL proof understandable.",{"type":40,"tag":48,"props":465,"children":467},{"id":466},"verification",[468],{"type":45,"value":469},"Verification",{"type":40,"tag":55,"props":471,"children":472},{},[473,475,481],{"type":45,"value":474},"For TLSNotary Extension plugins, build with ",{"type":40,"tag":66,"props":476,"children":478},{"className":477},[],[479],{"type":45,"value":480},"esbuild",{"type":45,"value":482}," using the verifier and proxy defines expected by the extension development flow. Then test the built JavaScript in the extension Developer Console.",{"type":40,"tag":55,"props":484,"children":485},{},[486],{"type":45,"value":487},"After verification, inspect all created or modified files for:",{"type":40,"tag":139,"props":489,"children":490},{},[491,496,501,506,511,516,521],{"type":40,"tag":85,"props":492,"children":493},{},[494],{"type":45,"value":495},"cookies,",{"type":40,"tag":85,"props":497,"children":498},{},[499],{"type":45,"value":500},"bearer tokens,",{"type":40,"tag":85,"props":502,"children":503},{},[504],{"type":45,"value":505},"CSRF tokens,",{"type":40,"tag":85,"props":507,"children":508},{},[509],{"type":45,"value":510},"emails,",{"type":40,"tag":85,"props":512,"children":513},{},[514],{"type":45,"value":515},"usernames,",{"type":40,"tag":85,"props":517,"children":518},{},[519],{"type":45,"value":520},"account IDs,",{"type":40,"tag":85,"props":522,"children":523},{},[524],{"type":45,"value":525},"copied personal API responses.",{"type":40,"tag":55,"props":527,"children":528},{},[529],{"type":45,"value":530},"If any live secret or personal identifier appears in code, remove it before continuing.",{"type":40,"tag":55,"props":532,"children":533},{},[534,536,542,544,549,551,557],{"type":45,"value":535},"If ",{"type":40,"tag":66,"props":537,"children":539},{"className":538},[],[540],{"type":45,"value":541},"@tlsn\u002Fplugin-sdk",{"type":45,"value":543}," cannot be installed from npm, use ",{"type":40,"tag":66,"props":545,"children":547},{"className":546},[],[548],{"type":45,"value":150},{"type":45,"value":550},": current upstream has the SDK inside the ",{"type":40,"tag":66,"props":552,"children":554},{"className":553},[],[555],{"type":45,"value":556},"tlsn-extension",{"type":45,"value":558}," monorepo. Do not spend time retrying npm until registry availability has been re-checked.",{"type":40,"tag":48,"props":560,"children":562},{"id":561},"output-expectations",[563],{"type":45,"value":564},"Output Expectations",{"type":40,"tag":55,"props":566,"children":567},{},[568],{"type":45,"value":569},"When building a plugin, produce:",{"type":40,"tag":139,"props":571,"children":572},{},[573,578,583,588,593,612],{"type":40,"tag":85,"props":574,"children":575},{},[576],{"type":45,"value":577},"the plugin file or patch,",{"type":40,"tag":85,"props":579,"children":580},{},[581],{"type":45,"value":582},"the build command used,",{"type":40,"tag":85,"props":584,"children":585},{},[586],{"type":45,"value":587},"the endpoint and auth strategy,",{"type":40,"tag":85,"props":589,"children":590},{},[591],{"type":45,"value":592},"the fields revealed in the proof,",{"type":40,"tag":85,"props":594,"children":595},{},[596,598,603,605,610],{"type":45,"value":597},"sizing choices for ",{"type":40,"tag":66,"props":599,"children":601},{"className":600},[],[602],{"type":45,"value":296},{"type":45,"value":604}," and ",{"type":40,"tag":66,"props":606,"children":608},{"className":607},[],[609],{"type":45,"value":307},{"type":45,"value":611},",",{"type":40,"tag":85,"props":613,"children":614},{},[615],{"type":45,"value":616},"verification notes and known limitations.",{"type":40,"tag":55,"props":618,"children":619},{},[620],{"type":45,"value":621},"When only planning, produce the same information without code edits and clearly mark unknowns that require a Network capture or user-provided cURL.",{"type":40,"tag":623,"props":624,"children":625},"style",{},[626],{"type":45,"value":627},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":629,"total":23},[630,643,654],{"slug":631,"name":631,"fn":632,"description":633,"org":634,"tags":635,"stars":23,"repoUrl":24,"updatedAt":642},"rln","build privacy-preserving rate-limiting applications","Route, build, adapt, and debug Rate-Limiting Nullifier (RLN) applications. Use when a user wants privacy-preserving rate limits, anonymous chat or posting with spam deterrence, nullifier-based abuse detection, RLN registration\u002Fsignaling\u002Fslashing flows, RLN V3 with Semaphore V4 or Noir, or guidance on choosing an RLN version.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[636,637,640,641],{"name":9,"slug":8,"type":15},{"name":638,"slug":639,"type":15},"Privacy","privacy",{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},"2026-08-20T03:53:24.30695",{"slug":644,"name":644,"fn":645,"description":646,"org":647,"tags":648,"stars":23,"repoUrl":24,"updatedAt":653},"semaphore","build anonymous group proof applications","Build, adapt, and debug Semaphore V4 applications. Use when a user wants anonymous voting, anonymous feedback, group membership proofs, nullifier-based double-spend prevention, off-chain Semaphore proof generation, on-chain Semaphore group management, or integration with Semaphore identities, groups, proofs, contracts, or subgraphs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[649,650,651,652],{"name":9,"slug":8,"type":15},{"name":638,"slug":639,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},"2026-08-20T03:53:28.249664",{"slug":4,"name":4,"fn":5,"description":6,"org":655,"tags":656,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[657,658,659,660],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"items":662,"total":697},[663,676,683,690],{"slug":664,"name":664,"fn":665,"description":666,"org":667,"tags":668,"stars":673,"repoUrl":674,"updatedAt":675},"state-actor","generate and verify Ethereum databases","Use this skill when a user wants to generate, boot, verify, or extend a state-actor-produced Ethereum database. Covers --client, --spec, --target-size, per-client boot recipes (geth \u002F reth \u002F besu \u002F nethermind \u002F ethrex \u002F erigon), and the canonical 29-entity spec fixture.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[669,672],{"name":670,"slug":671,"type":15},"Database","database",{"name":9,"slug":8,"type":15},10,"https:\u002F\u002Fgithub.com\u002Fethereum\u002Fstate-actor","2026-08-07T04:40:34.14665",{"slug":631,"name":631,"fn":632,"description":633,"org":677,"tags":678,"stars":23,"repoUrl":24,"updatedAt":642},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[679,680,681,682],{"name":9,"slug":8,"type":15},{"name":638,"slug":639,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"slug":644,"name":644,"fn":645,"description":646,"org":684,"tags":685,"stars":23,"repoUrl":24,"updatedAt":653},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[686,687,688,689],{"name":9,"slug":8,"type":15},{"name":638,"slug":639,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":691,"tags":692,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[693,694,695,696],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},4]