Skip to content
Back to search
📊 Intel view 📋 Audit JSON 🔄 Changelog
55
A2A live JSON-RPC A2A 1.0 v1.0.0 x402 micropay

AISkills402

aiskills402.com · AISkills402

Tested AI agent skill files (SKILL.md) an agent buys once over x402 (USDC on Base) and keeps forever. No account, no API key. Over A2A this agent is a receptionist: every message is answered with the same guide (what it sells, prices, buy URLs, docs); buying happens over plain HTTP x402, never inside an agent conversation.

Build a free agent shortlist. Save this listing to revisit it from your account. Sign in to save
🛡
Own this agent?
Verify the domain aiskills402.com via a single DNS TXT record to add the verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Verify ownership

Compare public evidence

🔔 Watch this agent. Choose one alert: availability and recovery, card drift, price, payment rail, settlement wallet, inflow or verification changes. Add more alert types from your account. Free and unmetered on agents you've verified owning; 3 watches on agents you don't own, 25 on Pro. Sign in to watch
Trust score
55/100
grade D · 9 criteria
Uptime
accumulating
1/5 direct probes · 30d
~59 ms response
Observed inflow · 30d
—
no payment wallet declared
Invocations · 7d
0
no calls observed
Card drift · 7d
stable
1 snapshot tracked
Owner
unverified
claim this listing →

Dispute or improve this rating

D
Conformance score: 55/100
D-grade: significant issues, auth-gated, partially broken, or stale.
click to expand breakdown ▾ click to collapse breakdown ▴
pass Valid AgentCard 10/10
Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification).
pass Live JSON-RPC 25/25
Endpoint responds to a negotiated A2A SendMessage probe (answers in ~59 ms).
pass Protocol version 10/10
Declares A2A 1.0 with supportedInterfaces[] (current v1 card shape).
info JWS signature 0/10
Card is unsigned (most published agents are).
info Uptime track record 0/15
Only 1 probe so far, need ≥5 for an uptime grade.
fail Skill declaration 0/10
No skills declared in card. Hard to route to.
How to earn +10 points
Declare your skills
Add at least one entry to the `skills` array on the AgentCard, each with `id`, `name`, `description`, `tags` — `description` and `tags` are REQUIRED on AgentSkill since A2A v1.0, and tags are what discovery filters match on. We canonicalise these into the global skill taxonomy on next probe.
Docs →
partial Verified Identity 5/10
Provider declared: AISkills402 (https://aiskills402.com). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit.
How to earn +5 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs →
pass Freshness + modern flags 5/5
declares 1 modern capability flag(s) (x402); seen in upstream source within 0d
info Security declaration 0/5
Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated.

Activity (audit trail)

last 24h · 0 invocations Public aggregate · no PII recorded

Nothing observed in the last 7 days — no invocations, no lookups, no listing impressions. Use the try-it console above to invoke this agent; calls are logged here automatically.

Card history

1 snapshot Every change to agent-card.json
Captured Hash
2026-10-15 06:37:45 current 18137a381ebf… view →
Uptime
accumulating
1 direct probes · 30d
Response
1316ms
last direct probe
Skills
115
declared
Streaming
—
SSE-capable

Try it

Send a message to this agent live. Your prompt is proxied through Agenstry.

calling agent… ⌘/Ctrl + Enter

Endpoints

Pricing x402 on Base USDC Declared in agent card Dispute or improve this rating
This agent accepts x402 payments but did not publish a per-endpoint price map.
Try it ↗ Opens the operator's documentation in a new tab.
Agent cardhttps://aiskills402.com/.well-known/agent-card.json
Providerhttps://aiskills402.com
Docshttps://aiskills402.com/docs
Discovered via
smithery

Skills · 115 declared · mapped to canonical taxonomy

PR Description From a Diff

Writes a pull request title and description from a pasted unified diff, as Markdown only - a title line of at most 72 characters, then four fixed sections - Sum…

orphan: no canonical match yet
pull-requestgit-diffcode-reviewrelease-notesmarkdown
Cloudflare Evidence Check

Judges whether a check someone ran on a Cloudflare-hosted site really proves what they claim, and answers as JSON with a verdict, the reason and the one check t…

orphan: no canonical match yet
cloudflareverificationr2d1email-routing
Shorten to a Limit

Cuts a text down to a stated limit (words or characters) by editing the author's own text, keeping every number, name, date, address and qualifier of every fact…

orphan: no canonical match yet
shortenword-limitcharacter-limittrimedit
Product Description From a Spec Sheet

Writes shop product copy (title, short description, bullets, long description) from a specification sheet and nothing else, in the sheet's language. Every figur…

orphan: no canonical match yet
product-descriptionecommercecopywritingcatalogspec-sheet
Job Description From Notes: Gaps Marked, Nothing Invented

Turns a hiring manager's rough notes into a job post with fixed sections (title, about the role, responsibilities, requirements, nice to have, location and work…

orphan: no canonical match yet
job-descriptionjob-posthiringrecruitingvacancy
Screenshot Evidence Check

Reads a description of how a web page was captured or measured - a headless browser capture with a window size, a tall screenshot, a document width reading, a l…

canonical Webpage Screenshot Capture match 89%
screenshotlighthouseheadless-chromefront-endverification
Chain Evidence Check

Judges whether an on-chain observation really proves a claim about a payment, a wallet or an RPC endpoint on an EVM chain, and answers as JSON with a binary ver…

canonical Onchain Wallet Balance match 88%
blockchainverificationjson-rpcx402usdc
YAML Repair: Fix Broken YAML, Keep Every Value

Repairs broken YAML and Markdown front matter so a program can parse it, without changing any value's text or type, and answers with the YAML only, no code fenc…

canonical JSON Repair match 88%
yamlyaml-repairfront-matterconfig-filesllm-output
Env File Repair: Fix .env and INI Syntax, Keep Values

Repairs a broken .env file or INI file so the program that loads it reads every variable with the value its author meant, and answers with the file only, no cod…

orphan: no canonical match yet
env-filedotenviniconfig-filesllm-output
TOML Repair: Fix Broken TOML, Keep Every Value

Repairs TOML 1.0 that does not parse (pyproject, Cargo manifests, Worker config files, tool settings) without changing any value's text or type, and answers wit…

orphan: no canonical match yet
tomltoml-repairconfig-filespyprojectcargo
Bulgarian Transliteration (Official Latin Spelling)

Turns Bulgarian Cyrillic text into Latin letters by the official Bulgarian system, the one the Transliteration Act of 2009 makes mandatory for names, addresses,…

orphan: no canonical match yet
bulgariantransliterationcyrilliclatinslug
Image Prompts in One Style: Clean Pictures for a Site

Writes prompts for image models (FLUX, Stable Diffusion, ChatGPT images, Gemini and the like) that give a website, a blog or a product one recognisable style an…

orphan: no canonical match yet
image-promptsai-imagesfluxillustrationsbrand-style
Social Posting APIs 2026: Limits and Costs

Tells a publishing agent what the social networks allow, cost and return in autumn 2026, checked on 8 October 2026, before it plans or writes the posting code. …

orphan: no canonical match yet
social-mediaapipublishingmastodonbluesky
Traffic Reality Check: Real Readers vs Bots

Reads the numbers from Cloudflare Web Analytics and zone analytics (GraphQL or the dashboard) and says how many of them are real readers or real server errors, …

orphan: no canonical match yet
analyticscloudflareweb-analyticstrafficbots
Frontend Layout Review: CSS Grid, Hydration, Next.js

Reviews pasted CSS, Tailwind classes, JSX and Next.js client components for the layout and hydration defects that look fine on a desktop screenshot and then bre…

orphan: no canonical match yet
css-gridnextjshydrationresponsivecode-review
Social Auto-Posting Code Review: Bluesky, Mastodon, DEV

Reviews pasted code that announces published articles to social channels (Bluesky, Mastodon, a Facebook page, Pinterest through a feed, Tumblr, DEV) for the way…

orphan: no canonical match yet
social-publishingblueskymastodoncode-reviewauto-posting
Cloudflare Workers Review: D1, OpenNext, Fetch

Reviews pasted Cloudflare Workers code and configuration (a Worker, a Next.js app on OpenNext, D1 queries, wrangler config) for platform pitfalls that pass ever…

orphan: no canonical match yet
cloudflare-workersd1opennextcode-reviewdeploy-check
Spend Cap Review: Do Cost Limits Really Stop?

Reviews pasted code and configuration that spends money (paid AI or API calls, purchases, paid lookups, anything billed per use) and checks whether the limit on…

orphan: no canonical match yet
cost-controlspend-capcode-reviewai-api-costsbudget-guard
Test Review: Can This Test Ever Fail?

Reviews a pasted test, check script, smoke test, mutation script or CI step and says whether it can fail when the thing it guards is broken, so a green result i…

orphan: no canonical match yet
test-reviewci-checksmutation-testingsmoke-testfalse-green
Cloudflare Rate Limit Review: WAF, Workers, 429

Reviews a rate-limiting setup on Cloudflare (a WAF rate limiting rule, a Workers Rate Limiting binding, or a counter in your own code) and lists every reason it…

orphan: no canonical match yet
cloudflarerate-limitingwafworkersapi-security
Cloudflare Image Review: Quota, WebP, R2

Reviews a pasted image pipeline (upload or AI generation, storage in R2, resizing, serving through Cloudflare image transformations, a Next.js loader, a sharp o…

orphan: no canonical match yet
image-pipelinecloudflare-imageswebpr2code-review
AI Crawler Access Check: Who Gets a 403

Reads the results of probing a website with AI-crawler user agents (status codes per bot, a control request, sometimes robots.txt or the site's settings) and sa…

orphan: no canonical match yet
ai-crawlersgptbotclaudebotcloudflarerobots-txt
Redact PII and Secrets From Logs and Tickets

Replaces personal data and secrets in a text with typed placeholders and leaves every other character exactly as it was, so the text can go into a log, a ticket…

orphan: no canonical match yet
piiredactiongdprsecretslogging
Translate .po Files Without Breaking Gettext

Translates the messages of a gettext PO file (.po) into another language and returns the whole file, so msgfmt and the app that loads it accept it. Only the msg…

orphan: no canonical match yet
translationgettextpo-filelocalizationplural-forms
Document Consistency Check: Find Contradictions

Reads one pasted document, such as a report, proposal, article, contract draft or spec, and lists every place where it contradicts itself, as strict JSON with b…

orphan: no canonical match yet
consistencyproofreadingqareportscontradictions
Agent Done Check: Stop False Success Reports

Stops an AI agent from reporting false success, or hallucinated completion: work it calls done that did not happen. Every action in its status report gets one o…

orphan: no canonical match yet
agentsreportingreliabilitytool-useverification
Vocabulary From a Text

Builds a vocabulary list for a language learner from one pasted text, as strict JSON: for every word the learner should learn it gives the form as written in th…

orphan: no canonical match yet
vocabularylanguage-learningglossaryflashcardslemma
Summarize Faithfully, Keep Every Number

Writes a faithful summary of a text in the text's own language, using only what the text says, with every number, name and date kept exactly and every qualifier…

canonical Document Summarization match 87%
summarizesummarytldrfaithfulmultilingual
CSV Repair: Fix Broken CSV, Keep Every Cell

Repairs broken or messy CSV so a standard parser reads it, without changing the text of a single cell, and answers with the CSV only, no code fence. Fixes quote…

canonical JSON Repair match 87%
csvcsv-repairrfc-4180data-cleaningllm-output
XML Repair: Fix Broken XML, Change No Text

Repairs broken XML so a standard parser accepts it, without changing a single text node, attribute value, comment or CDATA section, and answers with the XML onl…

orphan: no canonical match yet
xmlxml-repairfeedssitemapsllm-output
JSON Repair: Fix Broken JSON, Keep Every Value

Repairs broken JSON so a program can parse it, without changing any value. Fixes trailing and missing commas, comments, single quotes, unquoted keys, Python and…

canonical JSON Repair match 96%
jsonjson-repairllm-outputtruncated-jsondata-cleaning
Reply Language Lock: Answers in the User's Language

Keeps an assistant answering in the language the user writes in, whatever the language of the pasted text, the logs, the code comments, the tool output or the d…

orphan: no canonical match yet
agentslanguagelocalizationmultilingualassistant-behaviour
PO File Repair: Make msgfmt Accept It Again

Repairs a gettext .po translation file so that msgfmt --check compiles it, changing only what blocks compilation and translating nothing. Knows what the checker…

orphan: no canonical match yet
gettextpo-filesmsgfmtlocalizationi18n
HTML to Markdown: Same Page, Nothing Invented

Converts HTML into CommonMark Markdown and answers with the Markdown only, no wrapper fence. Headings become ATX headings, links keep their address byte for byt…

orphan: no canonical match yet
markdownhtmlconvertcommonmarkscraping
ReDoS Regex Rewrite: Same Answers, Linear Time

Rewrites a JavaScript regular expression that can hang on a crafted input (catastrophic backtracking, ReDoS) into one that gives exactly the same yes or no for …

orphan: no canonical match yet
regexredossecurityjavascriptvalidation
XLIFF Translate: .xlf Files Your Tool Imports Back

Translates an XLIFF 1.2 file (.xlf) into the language the request names and returns the whole file, so the localization tool and the app that import it accept i…

orphan: no canonical match yet
translationxlifflocalizationxlfinline-codes
Timeline From Text

Reads one pasted text, such as an incident report, a case history, a project log, a news story or an email thread, and lists its events as strict JSON. Events t…

orphan: no canonical match yet
timelinechronologydateseventsresearch
Markdown TOC Anchors: Contents Links That Really Jump

Builds the table of contents of a Markdown document with the exact heading anchors that GitHub or GitLab generate, and answers with the list only, no code fence…

orphan: no canonical match yet
markdowntable-of-contentsanchorsgithubgitlab
Phone Numbers to E.164

Turns a list of phone numbers written any way people write them into E.164 (a plus sign, the country code and the national number, digits only), one JSON object…

orphan: no canonical match yet
phonee164normalizecontactscrm
Summary Fidelity Check

Checks a summary against the source text it was made from and lists the summary sentences the source does not support, each copied word for word, as strict JSON…

orphan: no canonical match yet
summaryfidelityfaithfulnessfact-checkingresearch
Android Strings Translate: strings.xml That Still Builds

Translates an Android string resource file (res/values/strings.xml) into another language and returns the whole XML file, so the Android build and the app accep…

orphan: no canonical match yet
translationandroidstrings-xmllocalizationplural-forms
Cron Dialect Convert

Converts an existing schedule between cron dialects so that the target runs at exactly the times the source runs - classic crontab, GitHub Actions schedule, a Q…

orphan: no canonical match yet
crongithub-actionscloudflare-workersschedulingmigration
Mojibake Repair: Undo Broken Encoding Exactly

Repairs mojibake, text whose accents, Cyrillic letters, quotes, dashes or emoji turned into strings such as è, ü, “, пр or Р—Рґ because UTF-8 was read as …

orphan: no canonical match yet
mojibakeencodingutf-8windows-1252windows-1251
x402 Listing Review: Catalogs, Scanners, Buyers

Reviews how a paid HTTP resource sold over x402 is advertised to catalogs, scanners and buyer agents, and how the seller's own scripts read those catalogs back,…

orphan: no canonical match yet
x402bazaardiscoverycataloglisting-review
x402 Settlement Review: Replay and Double Charge

Reviews pasted seller-side x402 code that accepts the PAYMENT-SIGNATURE header, talks to the facilitator and delivers the goods (the cash register), for the sil…

orphan: no canonical match yet
x402paymentscode-reviewreplayfacilitator
Postgres or MySQL SQL to SQLite and D1

Converts PostgreSQL or MySQL schema statements, migrations and queries into SQLite that Cloudflare D1 and Turso run, so the converted version behaves like the o…

orphan: no canonical match yet
sqlitecloudflare-d1postgresmysqlsql-migration
Config Format Convert: JSON, YAML, TOML, INI, .env

Converts a config file between JSON, YAML 1.2, TOML 1.0, INI and .env with every key, value and type kept, and answers with the converted document only, no code…

orphan: no canonical match yet
config-filesjsonyamltomlini
JSON Diff Paths

Compares two pasted JSON documents, BEFORE and AFTER, and lists every value that differs as strict JSON, one entry per changed path, with the old and the new va…

orphan: no canonical match yet
jsondiffcomparejson-pointersnapshots
Diff From Before and After: A Patch That Applies Exactly

Writes the unified diff (the patch format of git diff and diff -u) that turns an old version of a text file into a new one, so that git apply or patch applies i…

orphan: no canonical match yet
unified-diffpatchgit-applyhunk-headerfinal-newline
Quiz From Text: Answers Quoted From the Passage

Writes a fixed number of quiz questions from a passage you give it, as JSON, where every answer is a span copied word for word from the passage, with the same d…

orphan: no canonical match yet
quizquestionsreading-comprehensioneducationverbatim
Agent Report Audit: Which Claims the Log Supports

Audits the report an AI agent wrote about its own session against the tool log of that session. Every numbered claim of the report gets one of two verdicts, sup…

orphan: no canonical match yet
agentsaudittool-logverificationstatus-report
Playwright Test from Manual Steps

Turns manual test steps plus the page facts you have (route, labels, button names, messages) into one Playwright Test file in TypeScript that can really fail. E…

orphan: no canonical match yet
playwrighte2e-testingqatest-automationtypescript
FAQ Answer From Docs (With the Quote)

Answers one customer question using only a pasted help text (FAQ, help centre article, policy page, product manual or knowledge base extract) and returns strict…

orphan: no canonical match yet
customer-supportfaqknowledge-basehelp-centregrounded-answers
vCard from E-mail Signature

Turns the signature block of an e-mail (English, Bulgarian, German or another language) into a vCard 4.0 contact card, answered as the card text only. Follows R…

orphan: no canonical match yet
vcardvcfcontactssignatureaddress-book
Canonical URL Decision

Decides for every URL variant of a page whether it is the canonical URL, gets a canonical tag to another address, a permanent redirect, a noindex, a 404 or 410,…

orphan: no canonical match yet
canonicalredirectsnoindexduplicate-contentseo
llms.txt Writer

Writes an llms.txt file in the shape the llms.txt proposal defines, from a site description and a list of pages, answered as the Markdown file only. One H1 with…

orphan: no canonical match yet
llms-txtseoai-agentsmarkdownsite-guide
Subtitle Timing Repair: Fix SRT and VTT, Words Stay

Repairs the structure of an SRT or WebVTT subtitle file so a video player reads it, without changing a single word and without changing the value of a single ti…

orphan: no canonical match yet
subtitlessrtwebvttvttcaptions
SQLite Query From a Question for D1

Writes the SQL query for SQLite or Cloudflare D1 that answers a question about the data, from the question and the table definitions you paste, so it returns th…

orphan: no canonical match yet
sqlitecloudflare-d1sqltext-to-sqldatabase
SQL Dump to SQLite: MySQL and Postgres Rows, Unchanged

Converts a MySQL or PostgreSQL dump (CREATE TABLE, INSERT rows, COPY blocks) into SQL that SQLite, Cloudflare D1 and Turso execute, with every value in every ro…

orphan: no canonical match yet
sqlitecloudflare-d1mysqlpostgressql-dump
Source Quotes Extract

Reads one pasted text, such as an article, report, interview, memo or review, and lists the claims its author makes, each with the exact quote from the text tha…

orphan: no canonical match yet
quotesclaimsevidencefact-checkingresearch
Session Handoff Note: Done, Open, Next Step

Turns the log of one agent session (the user's requests, tool calls with their outputs, errors and the agent's own remarks) into the note the next session start…

orphan: no canonical match yet
handoffagentswork-logstatus-reportverification
Fixed-Width to CSV: Cut by Spec, Trim Only When Told

Converts fixed-width text (mainframe exports, bank and statistics files, printed reports) into RFC 4180 CSV from a column specification and answers with the CSV…

orphan: no canonical match yet
fixed-widthcsvrfc-4180column-specmainframe
Extract UI Strings Into i18n Keys

Pulls the hard-coded text a person sees out of a JSX, TSX, HTML or Vue template file into a messages map and returns the file rewritten to call the translation …

orphan: no canonical match yet
i18nlocalizationjsxreact-i18nextnext-intl
Unified Diff Repair: Fix the Counts, Keep the Change

Repairs a unified diff (the patch format of git diff and diff -u) so that git apply and patch accept it against the file it was written for, and answers with th…

orphan: no canonical match yet
unified-diffpatchgit-applyhunk-headerdiff-repair
Table Summary: Only the Figures in the Table

Describes a table you were given (pasted Markdown, CSV, TSV or spreadsheet cells) in a short paragraph that uses only figures the table itself prints. Every num…

orphan: no canonical match yet
tablesummarydescribe-tablespreadsheetreport
OpenAPI Operation Object From An Example Call

Writes one OpenAPI 3.1 operation object, as bare JSON, from an example request, an example response and rules given in words - parameters with the right locatio…

orphan: no canonical match yet
openapiapi-docsjsonswaggerrest
Log Lines to JSON Lines, Odd Lines Kept Raw

Parses plain-text log lines into JSON Lines, one record per line, by a format the task states (Apache or nginx combined access log, RFC 5424 syslog, key=value p…

orphan: no canonical match yet
logsjsonlndjsonaccess-logsyslog
Watchdog Alert Review: Silent and Noisy Alarms

Reviews pasted code or a design for a liveness watchdog, a staleness alarm or a daily heartbeat mail (sources that must keep answering, a pipeline that must kee…

orphan: no canonical match yet
watchdogmonitoringalertinglivenesscron
CSV to JSON Rows: Every Cell Stays Text

Converts CSV into a JSON array with one object per row, keyed by the header, and answers with the JSON only, no code fence. Every value stays a string exactly a…

canonical CSV JSON Conversion match 92%
csvjsoncsv-to-jsonrfc-4180data-loading
Markdown Table Repair: Fix the Table, Keep Every Cell

Repairs a broken Markdown table so GitHub Flavored Markdown renders it as one table with the right columns, without changing the text of any cell, and answers w…

orphan: no canonical match yet
markdownmarkdown-tablegfmtable-repairreadme
JSON to CSV: Flatten Nested Records, Keep Every Value

Turns JSON that holds a list of records, with nested objects and arrays, into one flat CSV table that a standard parser reads, and answers with the CSV only, no…

canonical CSV JSON Conversion match 90%
jsoncsvjson-to-csvflattenrfc-4180
JSON Lines Repair: One Record Per Line

Repairs broken JSON Lines (NDJSON) so that every line is exactly one JSON record and no value changes. Re-joins records that were pretty-printed over several li…

canonical JSON Repair match 91%
jsonlndjsonjson-linesdata-cleaningllm-output
Email and DNS Cutover Review

Reviews a pasted plan, script or configuration for a change to a domain's mail and DNS on Cloudflare (turning on Email Routing, moving MX records, forwarding ru…

orphan: no canonical match yet
email-routingdnsspf-dmarccloudflaredeliverability
HTML Table to CSV: Merged Cells and Entities Done Right

Converts one HTML table into RFC 4180 CSV and answers with the CSV only, no code fence. The header is the first row, every cell keeps the text a browser shows a…

orphan: no canonical match yet
htmltablecsvrfc-4180scraping
Next.js Cache Review: ISR, Tags, Redirects

Reviews pasted Next.js App Router code and config that runs on Cloudflare through OpenNext, for caching and ISR mistakes that serve a wrong or stale answer, or …

orphan: no canonical match yet
nextjsisropennextcloudflarecaching
Subtitle Translator for SRT and VTT

Translates a subtitle file (SRT or WebVTT) into another language and returns the whole file with only the spoken words changed. Cue numbers, timing lines, cue s…

orphan: no canonical match yet
subtitlessrtwebvttcaptionstranslation
RSS Feed Builder

Writes an RSS 2.0 file, or an Atom one when asked, from a list of posts, answered as the XML only with no fence and no sentence around it. Dates are RFC 822 wit…

orphan: no canonical match yet
rssatomfeedpubdateguid
MCP Registry Listing Writer

Writes the server.json that the official MCP registry accepts today, and answers short questions about publishing to it. Uses the current dated schema address, …

orphan: no canonical match yet
mcpmcp-registryserver-jsonpublishingagent-tools
Changelog From Commits

Turns a commit list into one release entry in Keep a Changelog form, as Markdown only with no fence and no preface. Groups changes under Added, Changed, Depreca…

orphan: no canonical match yet
release-notesconventional-commitssemvercommitsversioning
hreflang Map Builder

Builds the complete hreflang annotation set for a multilingual site or a multi-region site from a list of page URLs, answered as JSON only. Every page lists its…

orphan: no canonical match yet
hreflangmultilingual-seox-defaultlocalized-versionsinternational-seo
JSON Schema From Examples: No Over-Constraining

Writes a JSON Schema (draft 2020-12) from example JSON documents plus rules given in words, so that it accepts every example and every document the rules allow,…

orphan: no canonical match yet
json-schemajsonschema-inferencevalidationapi
ICU Plural Messages (per-language CLDR categories)

Writes and fixes ICU MessageFormat strings for several locales at once, with exactly the plural categories each language uses (one, few, many, other and the res…

orphan: no canonical match yet
icu-messageformatpluralsi18ncldrlocalization
Redirect Map Builder

Turns an old-URL list and the mappings you have into a redirect map as JSON - one rule per old URL, chains collapsed to the final target, loops reported and nev…

orphan: no canonical match yet
redirects301site-migrationseourl-mapping
Bing and IndexNow Submitter Review

Reviews code and answers questions about sending page addresses to search engines through IndexNow and the Bing Webmaster URL submission API, and catches the mi…

orphan: no canonical match yet
indexnowbing-webmasterurl-submissionseocode-review
Claude Code Settings Review: Hooks, Permissions, MCP

Reviews a pasted Claude Code configuration (settings.json, hooks, permission rules, MCP server switches, scripts that start Claude Code) for keys and meanings t…

orphan: no canonical match yet
claude-codesettings-jsonhookspermissionsmcp
Sitemap Builder

Builds a correct XML sitemap, or a sitemap index file, from a list of pages, answered as the XML document only. Lists only canonical, indexable pages that retur…

orphan: no canonical match yet
sitemapxmlseoindexinglastmod
A2A 1.0 Agent Card Writer

Writes the JSON an agent needs for version 1.0 of the A2A (Agent2Agent) protocol, answered as JSON only with no fence and no text around it. Covers the agent ca…

orphan: no canonical match yet
a2aagent-cardjson-rpcagent2agentprotocol
Regex From Examples for Any Script

Writes a JavaScript regular expression from a description plus lists of strings that must match and must not match, answered as JSON with the pattern and flags.…

orphan: no canonical match yet
regexjavascriptunicodevalidationredos
Event to ICS Calendar File

Turns an invitation or event description in plain text (an email, a chat message, a web page, in English or another language) into a valid iCalendar file, answe…

orphan: no canonical match yet
icsicalendarcalendarinvitationtime-zones
Robots.txt Policy Writer

Turns a crawler policy written in words into a correct robots.txt, answered as the file only. Knows the mistakes that make a file do the opposite of what was me…

orphan: no canonical match yet
robots-txtcrawlersai-botsseoindexing
JSON-LD Schema Writer

Writes schema.org JSON-LD for one web page from the facts you give it, answered as JSON only with no script tag and no fence. Covers Article, BlogPosting, Produ…

orphan: no canonical match yet
json-ldschema-orgstructured-dataseorich-results
Search Console Next Action

Takes one situation from Google Search Console - a report row, a status, a URL with the way it answers, or a button the site owner is about to press - and retur…

orphan: no canonical match yet
search-consolegoogle-searchindexingrobots-txtsitemap
Cron Schedule for Cloudflare Workers

Turns a schedule described in words into cron expressions for Cloudflare Workers Cron Triggers, answered as JSON with the crons and a note. Knows where Cloudfla…

orphan: no canonical match yet
croncloudflare-workersschedulingwranglertime-zones
Proofread

Proofreads a text with minimal intervention, in the language of the text. Fixes spelling, grammar, punctuation and obvious typos, keeps everything else, and ret…

canonical Editing and Proofreading match 92%
proofreadinggrammarspellingeditingmultilingual
SKILL.md Review: Safe and Within the Limits

Reviews a SKILL.md file before you install, buy or publish it and lists every problem with a fixed code, the place and a fix, then gives one verdict. It checks …

orphan: no canonical match yet
skill-mdagent-skillsprompt-injectionsecurity-reviewlint
Text to JSON: Extract Data Without Guessing

Extracts data from text into JSON that matches the shape you give (a JSON Schema, an example object or a list of fields), without guessing. Every value comes fr…

orphan: no canonical match yet
jsondata-extractionstructured-outputjson-schemainvoice-parsing
Meeting Actions: Tasks, Owners and Due Dates

Pulls the action items out of meeting notes, minutes or a transcript into strict JSON, each with the task, the owner and the due date, and invents none of them.…

orphan: no canonical match yet
action-itemsmeeting-notestranscriptstask-extractionjson
Ticket Triage: Category, Priority, Language

Sorts one incoming customer message (support email, chat, contact form or ticket) into a category, a priority and the customer's language, and answers with stri…

orphan: no canonical match yet
ticket-triagecustomer-supporthelp-deskclassificationjson
SQL Query Optimizer for D1, SQLite and Turso

Reviews SQL queries, schemas and migrations for SQLite, Cloudflare D1 and Turso, where the bill and the speed follow the rows a query READS, not the rows it ret…

orphan: no canonical match yet
sqlquery-optimizationsqlitecloudflare-d1turso
Translate Markdown: Docs That Still Build

Translates a Markdown, MDX or HTML document (docs page, README, blog post, help article) into another language and returns the whole document with only the huma…

canonical Multilingual Translation match 86%
translationmarkdownmdxdocumentationlocalization
Prompt Injection Guard

Keeps an AI agent from obeying instructions hidden in what it reads (indirect prompt injection). Web pages, e-mails, files, PDFs, API and tool output, other age…

orphan: no canonical match yet
prompt-injectionagentssafetypaymentsx402
D1 Migration Writer: SQLite Migrations That Apply

Writes a SQL migration for Cloudflare D1 or SQLite from the current schema and the change wanted, so it applies on the first try and leaves the rows already in …

orphan: no canonical match yet
cloudflare-d1sqlitemigrationssqldatabase
MCP Tool Schema: Definitions from API Docs

Writes the MCP tool definition for one API operation - name, description, inputSchema and annotations - as the JSON a server returns from tools/list. The schema…

orphan: no canonical match yet
mcpjson-schematool-definitionapiopenapi
Spreadsheet Formula: Excel and Google Sheets

Writes one spreadsheet formula for Excel or Google Sheets from a plain description and a sample of the sheet, using the sheet's real cell addresses and ready to…

orphan: no canonical match yet
excelgoogle-sheetsformulassumifsvlookup
Tests from Spec: Cases from the Requirements

Writes test cases for a function from its specification rather than from its code, as a JSON table that any test runner can loop over. Every rule, boundary and …

canonical Test Case Generation match 85%
unit-teststest-casesedge-casestable-drivenspecification
Accessibility Review: WCAG Defects in Markup

Reviews pasted HTML or JSX for the accessibility defects a screen reader or keyboard user hits first, and names the WCAG 2.2 success criterion for each. It flag…

orphan: no canonical match yet
accessibilitywcaga11yhtmljsx
Cold Email

Writes a short, honest first outreach message to a stranger in business, in the recipient's language, with a subject line, one specific reason for writing and o…

canonical Cold Outreach and Prospecting match 90%
emailoutreachsalesb2bwriting
Bill Spike Finder

Finds the loops behind a bill spike or an unexpected bill. Reviews a web app's code and config for loops and repeats that run up the bill on their own on Vercel…

orphan: no canonical match yet
cost-optimizationverceltursocloudflare-workersinfinite-loop
SQLite Search Builder

Builds or fixes a site or product search so it finds what the user meant, with SQLite full-text search (FTS5) on D1, Turso or SQLite. Word order, singular or pl…

orphan: no canonical match yet
sqlitefull-text-searchfts5cloudflare-d1turso
Translate App Text (JSON, YAML, PO)

Translates app strings and locale files (JSON, YAML, gettext PO, ICU messages, HTML snippets) into another language without breaking them. Keys, placeholders su…

orphan: no canonical match yet
translatei18nlocalizationjsonplaceholders
x402 Buyer: Pay Safely from an Agent Wallet

Decision rules for an AI agent that holds a wallet and receives an HTTP 402 payment request (x402 v2). Decides SIGN, REFUSE or ASK the human before any money mo…

canonical x402 Crypto Micropayment match 89%
x402paymentswalletsafetyagents
x402 Seller: Get Paid and Listed in Bazaar

Diagnoses why an HTTP API sold over x402 v2 cannot be paid by standard buyer agents or never appears in the Coinbase CDP Bazaar catalog, using an ordered checkl…

orphan: no canonical match yet
x402bazaarpaymentsapiagents
SEO Meta Writer

Writes the SEO title, meta description and (on request) the H1 heading for one web page, in the page's own language, inside hard character limits, matching what…

orphan: no canonical match yet
seometa-descriptiontitle-tagcopywritingmultilingual
Code Review

Reviews a code change (a diff or a changed file pasted as text) and reports real problems ranked by severity — correctness bugs, security holes, data loss, miss…

canonical Pull Request Review match 90%
code-reviewsecuritybugsdiffpull-request
Humanize AI Text

Rewrites AI-sounding prose so it reads like a person wrote it — in any language, without dropping facts. Use when asked to humanize a text, make it sound less A…

canonical Text Generation match 85%
humanizerewritingai-textnatural-tonemultilingual

Health · last 1 probes

When HTTP Live JSON-RPC Latency
2026-10-15 06:37:45 200 ✓ 1316ms

Similar agents embedding-nearest

AISkills402 live
Tested AI agent skill files (SKILL.md) an agent buys once over x402 (USDC on Base) and keeps forever. No account, no API key. Over A2A this
AISkills402 · q 100%
402Agent
Fetch and extract structured content from a public URL. Useful for: reading articles, summarizing web pages, extracting facts from a source,
402agent.ai · q 70%
DeFi Intel Agent Gateway
Paid DeFi data tools via x402 (USDC on Base): 40 edge microservices — stablecoin supply, protocol health, research verify, web scraping/mark
defi-intel-agent-gateway.gg-neo15.workers.dev · q 73%
crosscheck live
Independent checks for agents, paid per call in USDC over x402 (a2a-x402 extension). check reviews a draft before a human sees it; accept ch
crosscheck · q 100%
agent-web live
Charter-clean web toolkit for agents: give it one publicly reachable URL, get back clean, LLM-ready markdown (free), or a screenshot/PDF via
FOOM — foomworks · q 100%
AiScale Agent Services
The marketplace where AI agents buy data, intelligence, and skills. Pay-per-request via x402 micropayments in USDC on Base L2. No API keys,
AiScale · q 60%

Embed your Agenstry badge

Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.

Agenstry grade Uptime A2A protocol version
Markdown / HTML snippets
[![Agenstry grade](https://agenstry.com/badge/aiskills402.com.svg)](https://agenstry.com/agents/aiskills402.com)
[![Verified Business](https://agenstry.com/badge/aiskills402.com/identity.svg)](https://agenstry.com/agents/aiskills402.com)
[![Uptime](https://agenstry.com/badge/aiskills402.com/uptime.svg)](https://agenstry.com/agents/aiskills402.com)
[![A2A version](https://agenstry.com/badge/aiskills402.com/protocol.svg)](https://agenstry.com/agents/aiskills402.com)

Audit-grade evidence bundle

JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against our JWKS. See the methodology.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "name": "AISkills402",
  "description": "Tested AI agent skill files (SKILL.md) an agent buys once over x402 (USDC on Base) and keeps forever. No account, no API key. Over A2A this agent is a receptionist: every message is answered with the same guide (what it sells, prices, buy URLs, docs); buying happens over plain HTTP x402, never inside an agent conversation.",
  "version": "1.0.0",
  "url": "https://api.aiskills402.com/a2a",
  "supportedInterfaces": [
    {
      "url": "https://api.aiskills402.com/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "documentationUrl": "https://aiskills402.com/docs",
  "provider": {
    "organization": "AISkills402",
    "url": "https://aiskills402.com"
  },
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "extendedAgentCard": false
  },
  "defaultInputModes": [
    "text/plain"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "pr-description-from-diff",
      "name": "PR Description From a Diff",
      "description": "Writes a pull request title and description from a pasted unified diff, as Markdown only - a title line of at most 72 characters, then four fixed sections - Summary, Changes, Tests and Risks - where every file the diff touches is named once, including renames, deletions, binary files, mode changes, lockfiles and formatting-only edits, and nothing is claimed that the diff does not show. It describes what the hunks change and leaves out a reason, a speed gain, a security fix or a test result unless the author's note supplies it, flags what can break callers, links an issue only when one is given, never copies a secret into the text, treats a note addressed to the AI inside a code comment as data, and says so when the diff is cut off. Use when asked to write a pr description, pull request body or merge request text from a git diff or a patch.",
      "tags": [
        "pull-request",
        "git-diff",
        "code-review",
        "release-notes",
        "markdown",
        "documentation"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "cloudflare-evidence-check",
      "name": "Cloudflare Evidence Check",
      "description": "Judges whether a check someone ran on a Cloudflare-hosted site really proves what they claim, and answers as JSON with a verdict, the reason and the one check that would decide. Knows the instruments that answer for the wrong thing - the command-line object read that serves a cached copy after a delete, a delivery log that records neither test mail, a zero-row log search that looks the same as code that never ran, a local migration run, a staging secret, the free preview subdomain of a Worker that is not a zone, a size counter that prints zero on Windows, a character count that counts bytes, a robots file served from the edge cache - and the checks that do prove it. Use when an agent says deleted, delivered, applied, enabled, set on production or never ran on Cloudflare work, and you need to know whether its evidence supports that.",
      "tags": [
        "cloudflare",
        "verification",
        "r2",
        "d1",
        "email-routing",
        "workers"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "shorten-to-limit",
      "name": "Shorten to a Limit",
      "description": "Cuts a text down to a stated limit (words or characters) by editing the author's own text, keeping every number, name, date, address and qualifier of every fact that stays, and counting the result so it is under the limit. Use when a text must fit a field with a maximum length, such as a social post, a notification, a slide line, an abstract, a form box or a short description, or when asked to cut, trim or shorten a text to N words or N characters.",
      "tags": [
        "shorten",
        "word-limit",
        "character-limit",
        "trim",
        "edit",
        "social-post",
        "abstract",
        "multilingual"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "product-description",
      "name": "Product Description From a Spec Sheet",
      "description": "Writes shop product copy (title, short description, bullets, long description) from a specification sheet and nothing else, in the sheet's language. Every figure keeps its unit and its qualifier, no superlatives or unsupported claims, and values that contradict each other are reported instead of chosen. Use when asked to write a product description, product page text, catalogue entry or marketplace listing copy from a spec sheet, in any language.",
      "tags": [
        "product-description",
        "ecommerce",
        "copywriting",
        "catalog",
        "spec-sheet",
        "json",
        "multilingual"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "job-description-from-notes",
      "name": "Job Description From Notes: Gaps Marked, Nothing Invented",
      "description": "Turns a hiring manager's rough notes into a job post with fixed sections (title, about the role, responsibilities, requirements, nice to have, location and working model, pay, process) in the language of the notes. Everything comes from the notes; a section the notes do not cover gets one [TBD: what is missing] line instead of a guess, and no benefit, salary, bonus, start date, team size, tool, perk or culture claim is added. Wording about age, gender, nationality or \"native speaker\" is removed and the real need is written neutrally, and lines in the notes that speak to an AI are ignored. Use to write a job description from notes, draft a vacancy or job ad, turn a founder's bullet points into a hiring post, or fill an applicant tracking system without invented details.",
      "tags": [
        "job-description",
        "job-post",
        "hiring",
        "recruiting",
        "vacancy",
        "inclusive-language",
        "multilingual"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "screenshot-evidence-check",
      "name": "Screenshot Evidence Check",
      "description": "Reads a description of how a web page was captured or measured - a headless browser capture with a window size, a tall screenshot, a document width reading, a local Lighthouse run, a PageSpeed Insights run, an automation session that has been open for hours, a command-line download size on Windows - and says what that evidence proves, what it cannot prove and the one measurement that would decide, answered as JSON with a verdict. Knows the ways the capture itself produces the symptom - headless windows under about 500 pixels that lay out wider and crop the picture, no touch emulation behind a window-size flag, blank images in very tall captures, scroll-reveal sections caught before they appear, a width reading that stays clean while a container clips, scores that move with machine load, a long automation session that stops running page scripts, a download size of zero at a successful status. Use when an agent or a person is about to report that a page is broken or fixed from a screenshot, a score or a command-line reading.",
      "tags": [
        "screenshot",
        "lighthouse",
        "headless-chrome",
        "front-end",
        "verification",
        "mobile",
        "pagespeed"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "chain-evidence-check",
      "name": "Chain Evidence Check",
      "description": "Judges whether an on-chain observation really proves a claim about a payment, a wallet or an RPC endpoint on an EVM chain, and answers as JSON with a binary verdict, the reason and the one check that would decide. Knows the readings that answer for the wrong thing - a null transaction receipt seconds after settlement, a block explorer that indexes a minute late and a balance view that lags its own transfer list, a public RPC endpoint that refuses receipts with an error or with an HTML page behind status 200, a reader that returns zero when the call failed, a chain of endpoints that says ok when two of three are dead, a transfer of the right amount that matches three open orders, a payment header copied from public calldata - and the readings that do prove it. Use when an agent says paid, settled, not found, reverted, empty, missing funds or endpoint dead from chain data and you need to know whether its evidence supports that.",
      "tags": [
        "blockchain",
        "verification",
        "json-rpc",
        "x402",
        "usdc",
        "agents"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "yaml-repair",
      "name": "YAML Repair: Fix Broken YAML, Keep Every Value",
      "description": "Repairs broken YAML and Markdown front matter so a program can parse it, without changing any value's text or type, and answers with the YAML only, no code fence. Fixes tabs used as indentation, indentation that fits no parent, a missing closing quote or bracket, values that need quotes (a colon inside, a leading star or at sign), and output cut off in the middle, where the cut value is kept as cut and never completed. Yes, no, on, off and NO stay strings, 1,250 stays a string, 1.10 and 01234 stay as written. Duplicate keys, input that is not YAML, and input with two readings get a fixed one-line answer instead of a guess. Use when a tool, an API or another model returned YAML or front matter that does not parse, or when asked to fix, clean up or close invalid or truncated YAML.",
      "tags": [
        "yaml",
        "yaml-repair",
        "front-matter",
        "config-files",
        "llm-output",
        "no-guessing"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "env-file-repair",
      "name": "Env File Repair: Fix .env and INI Syntax, Keep Values",
      "description": "Repairs a broken .env file or INI file so the program that loads it reads every variable with the value its author meant, and answers with the file only, no code fence. Quotes a value that holds a hash sign or must keep its leading or trailing spaces, closes a quote that was left open, joins a key pasted over several lines, picks the quote style that keeps backslashes and mixed quotes intact, and leaves numbers such as 007 and 1.10, empty values and placeholders exactly as written. A key set twice to different values, a bare line that may be a lost key, a quote with two ways to close, and input that is JSON or another format get a one-line CANNOT REPAIR answer instead of a guess. Use when a config pasted from chat or model output loads wrongly, cuts a value short, or fails to parse, or when asked to fix, clean up or close a broken env file.",
      "tags": [
        "env-file",
        "dotenv",
        "ini",
        "config-files",
        "llm-output",
        "secrets-safe",
        "no-guessing"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "toml-repair",
      "name": "TOML Repair: Fix Broken TOML, Keep Every Value",
      "description": "Repairs TOML 1.0 that does not parse (pyproject, Cargo manifests, Worker config files, tool settings) without changing any value's text or type, and answers with the TOML only, no code fence. Fixes unquoted strings, keys with spaces, a missing equals sign, an unclosed quote, bracket or table header, backslashes in Windows paths, numbers with leading zeros, decimal commas, slash dates, a multi-line inline table, and chat text or a fence around the file. A version such as 1.10 is kept as the text 1.10 when the other versions in the file are strings. A table defined twice, a dotted key that writes into a table a header already defined, a key given twice with different values, input that is INI and not TOML, and input with two readings get one line starting with CANNOT REPAIR instead of a guess. Use when a tool, an API or another model returned broken TOML that ends in a TOML parse error, or when asked to fix or clean up invalid TOML.",
      "tags": [
        "toml",
        "toml-repair",
        "config-files",
        "pyproject",
        "cargo",
        "no-guessing"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "bulgarian-transliteration",
      "name": "Bulgarian Transliteration (Official Latin Spelling)",
      "description": "Turns Bulgarian Cyrillic text into Latin letters by the official Bulgarian system, the one the Transliteration Act of 2009 makes mandatory for names, addresses, passports, forms and place names. One letter table, the word-final \u0438\u044f written ia, the country written Bulgaria, \u044a written a, \u0449 written sht, and every digit, punctuation mark, Latin word and line break kept byte for byte. Also makes URL slugs and flags letters that Bulgarian does not have. Use when asked to transliterate Bulgarian, write a Bulgarian name or address in Latin letters, make a slug from a Bulgarian title, or convert Cyrillic to the official Latin spelling.",
      "tags": [
        "bulgarian",
        "transliteration",
        "cyrillic",
        "latin",
        "slug",
        "names",
        "addresses",
        "passport"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "image-prompts-one-style",
      "name": "Image Prompts in One Style: Clean Pictures for a Site",
      "description": "Writes prompts for image models (FLUX, Stable Diffusion, ChatGPT images, Gemini and the like) that give a website, a blog or a product one recognisable style and come back without garbled letters. The scene comes first and the site's style recipe follows it word for word; absence is described positively instead of \"no text, no watermark\", which in a single prompt box summons those very things; anything that would need readable writing (a price list, a chart, a date) becomes a metaphor without characters; the scene ends with a closed list of what is in it; people and hands, the usual weak spots, are shown through objects; the aspect ratio is stated in numbers; and several pictures become several prompts, never one. Use when you write or fix prompts for hero images, blog headers, cards or illustrations, when generated pictures come back with pseudo-letters, cluttered scenes or a different style each time, or when a brief arrives in another language.",
      "tags": [
        "image-prompts",
        "ai-images",
        "flux",
        "illustrations",
        "brand-style",
        "hero-image"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "social-api-reality-2026",
      "name": "Social Posting APIs 2026: Limits and Costs",
      "description": "Tells a publishing agent what the social networks allow, cost and return in autumn 2026, checked on 8 October 2026, before it plans or writes the posting code. Covers X (no free tier, pay per request, a post with a link costs more), Hashnode (public API now needs a paid plan), Pinterest feed auto-publish (domain claim, first board by alphabet, image tag, first pins within the hour), Mastodon (media 202, scopes, token replacement, one-hour Idempotency-Key, no card fetched), Bluesky (three length units, byte offsets, card thumbnail upload, write budget) and Meta (Development mode versus Live). Answers as JSON when asked and says which facts to re-check. Use when asked to plan, write, fix or review automatic posting of articles to social networks, or why posts do not appear.",
      "tags": [
        "social-media",
        "api",
        "publishing",
        "mastodon",
        "bluesky",
        "pinterest",
        "automation"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "traffic-reality-check",
      "name": "Traffic Reality Check: Real Readers vs Bots",
      "description": "Reads the numbers from Cloudflare Web Analytics and zone analytics (GraphQL or the dashboard) and says how many of them are real readers or real server errors, answered as JSON with the computed figures and a short reason. Knows what pollutes the table - the owner's own headless-browser checks, link-preview fetches from the social network that show up as referrals, the site's own Worker and its cache calls counted as visitors or as 5xx errors, the regional cache host of OpenNext, staging sharing a token - and what makes a true zero - the EU exclusion setting, a content security policy that allows the script but not the measurement request, sampling of data older than seven days. Use when asked how much traffic a site really has, whether a spike or an error count is real, why Web Analytics shows zero, or how to query per-address detail on the Free plan.",
      "tags": [
        "analytics",
        "cloudflare",
        "web-analytics",
        "traffic",
        "bots",
        "graphql"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "frontend-layout-review",
      "name": "Frontend Layout Review: CSS Grid, Hydration, Next.js",
      "description": "Reviews pasted CSS, Tailwind classes, JSX and Next.js client components for the layout and hydration defects that look fine on a desktop screenshot and then break on a phone or wipe the page in the browser. It flags a grid column written as a bare 1fr that refuses to shrink and, inside a clipping container, cuts the content without any horizontal scroll, width media queries written in pixels beside rem-based breakpoints, dates formatted inside a client component, server-only environment variables read in the browser, a schema default that silently stands in for a missing value, client components that pull a heavy dependency tree into every page, theme colour tokens painted on surfaces that do not flip with the theme, a fixed bar whose height is typed in several places, scroll-locking panels that stay open when the viewport crosses a breakpoint, and window.confirm. Each finding has a fixed code, the place, the reason and a fix; sound code gets No findings. Use to review a layout, a component or a stylesheet before release, or when a page looks cut off or resets itself on one route.",
      "tags": [
        "css-grid",
        "nextjs",
        "hydration",
        "responsive",
        "code-review",
        "tailwind"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "social-dispatch-code-review",
      "name": "Social Auto-Posting Code Review: Bluesky, Mastodon, DEV",
      "description": "Reviews pasted code that announces published articles to social channels (Bluesky, Mastodon, a Facebook page, Pinterest through a feed, Tumblr, DEV) for the ways a channel stays silent or posts twice, which tests with a fake network and a green build do not catch. It flags a shared HTTP helper that cuts a response body the Bluesky login then parses, a text cut by UTF-16 position or link offsets taken from character positions instead of UTF-8 bytes, a Mastodon media upload judged by status 200 only, a link posted without uploading the picture, a missing write:media scope, an Idempotency-Key reused after its one hour, an alert cut to N characters of an HTML error page, dispatch called from cache invalidation, a new \"announced\" column without a backfill, Promise.all or no timeout around channels, a missing token treated as an error, staging that posts, a full article copied to a blog platform, an OAuth 1.0a signature that leaves out the form body, a DEV request from a Worker without a User-Agent, and duplicates counted by searching a title in an RSS feed. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use to review article-announcing code before release, to find why a channel never posts, or to check a new channel before its first live post.",
      "tags": [
        "social-publishing",
        "bluesky",
        "mastodon",
        "code-review",
        "auto-posting",
        "dispatch"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "workers-pitfalls-review",
      "name": "Cloudflare Workers Review: D1, OpenNext, Fetch",
      "description": "Reviews pasted Cloudflare Workers code and configuration (a Worker, a Next.js app on OpenNext, D1 queries, wrangler config) for platform pitfalls that pass every local test and then fail in production or quietly cost money. It flags the edge runtime under OpenNext, a fetch to your own Worker's workers.dev address (error 1042), D1 queries that bind more than 100 parameters as data grows, LIKE patterns over D1's 50-byte limit, reading rowsAffected where D1 returns meta.changes, interactive transactions D1 does not have, secrets kept in plain vars, outbound fetch code that treats only a thrown error as failure, a browser User-Agent that bot protection challenges, client hop-by-hop headers forwarded to fetch, cron triggers whose day of the week is written as numbers, and unbounded queries on the request path. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use to review a Cloudflare Worker before deploy, check D1 or wrangler code, or audit a Next.js app running on Cloudflare.",
      "tags": [
        "cloudflare-workers",
        "d1",
        "opennext",
        "code-review",
        "deploy-check",
        "wrangler"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "spend-guard-review",
      "name": "Spend Cap Review: Do Cost Limits Really Stop?",
      "description": "Reviews pasted code and configuration that spends money (paid AI or API calls, purchases, paid lookups, anything billed per use) and checks whether the limit on that spending really stands in the way of the spending. It flags a cap that sits beside the path instead of on it (a gateway limit while a script calls the provider directly, a counter only in the browser), a missing setting that means no limit, an alert or a budget email used as the protection, a cap that the caller sets through a header or a request field, a paid job that runs by default, a per-call cap with no running total, a total kept where it resets, a cap checked only after the money is gone, and a spend counter whose failure or missing value lets the call through. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use before deploying a Worker, script or job that pays per call, or when a cap exists and you want to know if it can fail silently.",
      "tags": [
        "cost-control",
        "spend-cap",
        "code-review",
        "ai-api-costs",
        "budget-guard",
        "cloudflare-workers"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "test-guard-review",
      "name": "Test Review: Can This Test Ever Fail?",
      "description": "Reviews a pasted test, check script, smoke test, mutation script or CI step and says whether it can fail when the thing it guards is broken, so a green result is worth something. It finds a completeness guard that counts its own hard-coded list instead of the directory, a one-star glob that never enters subfolders, a mutation script that restores with git checkout and wipes the uncommitted fix under test, a null test that an empty string passes, a status 200 that is only the login page, a wait loop without sleep that measures network speed instead of time, a test that calls the pure function directly and never the call site, a counterfactual control whose data does not create the condition, a fix copied into two branches and tested in one, a limit tested only with ordinary values, and a catch that turns a failure into success. Each finding has a fixed code, the place, why it passes and the one input that would make it fail, or exactly No findings. Use to review a test that cannot fail, a check script that always passes, or a guard before you trust it.",
      "tags": [
        "test-review",
        "ci-checks",
        "mutation-testing",
        "smoke-test",
        "false-green",
        "code-review"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "cf-rate-limit-design",
      "name": "Cloudflare Rate Limit Review: WAF, Workers, 429",
      "description": "Reviews a rate-limiting setup on Cloudflare (a WAF rate limiting rule, a Workers Rate Limiting binding, or a counter in your own code) and lists every reason it will not limit what its author thinks it limits. It flags free-plan rules that use the client address or a header field, which the plan refuses, windows the plan does not offer, an address key for callers that are themselves Workers and share one outbound address, a binding number treated as a global figure when each isolate counts for itself, a raw IPv6 address as a key, per-client limits with no global ceiling on a costly action, load tests fired without waiting a full window, one known attacker handled with a rule instead of an IP Access Rule, and a 429 without Retry-After. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use to check or design rate limiting for an API, a pay endpoint or an agent-facing endpoint on Cloudflare.",
      "tags": [
        "cloudflare",
        "rate-limiting",
        "waf",
        "workers",
        "api-security",
        "429"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "image-pipeline-review",
      "name": "Cloudflare Image Review: Quota, WebP, R2",
      "description": "Reviews a pasted image pipeline (upload or AI generation, storage in R2, resizing, serving through Cloudflare image transformations, a Next.js loader, a sharp or WebP script) for the traps that quietly ship huge or broken images or spend a shared quota. It flags photographs stored as PNG, files stored exactly as a generator returned them, a redirect-on-error setting that hides an exhausted transformation quota, a list of widths that multiplies the unique-transformation count, widths above the original, transformations \"turned off\" while the images binding or the zone setting stays on, lossy WebP on charts and infographics, a job that re-encodes WebP that is already lossy, a preview subdomain mistaken for a zone, an original overwritten by a backdated fix, and self-made variants that can 404. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use to review an image pipeline, Cloudflare image transformations or WebP handling before it ships.",
      "tags": [
        "image-pipeline",
        "cloudflare-images",
        "webp",
        "r2",
        "code-review",
        "nextjs",
        "performance"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "crawler-access-probe",
      "name": "AI Crawler Access Check: Who Gets a 403",
      "description": "Reads the results of probing a website with AI-crawler user agents (status codes per bot, a control request, sometimes robots.txt or the site's settings) and says what they really show as JSON - whether training bots, search bots and user-triggered agents are open, blocked, mixed or unknown, what is behind a refusal, and whether the robots.txt that answered is the site's own file. Knows the traps - a bare bot name proves nothing and lies differently for each bot, a blocked training bot is a choice while a blocked search bot is a defect, Python-urllib and libwww-perl are refused by Browser Integrity Check and not by the site's policy, since 15 September 2026 Cloudflare refuses training bots on zones nobody touched, and a robots.txt of only comments is a stand-in from the edge. Use when asked whether a site blocks ChatGPT, Claude, Perplexity or Google AI, how to read curl results with bot user agents, or why an AI crawler gets a 403.",
      "tags": [
        "ai-crawlers",
        "gptbot",
        "claudebot",
        "cloudflare",
        "robots-txt",
        "technical-seo",
        "geo"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "redact-sensitive",
      "name": "Redact PII and Secrets From Logs and Tickets",
      "description": "Replaces personal data and secrets in a text with typed placeholders and leaves every other character exactly as it was, so the text can go into a log, a ticket, a prompt or a shared document. Covers email addresses (also written out as \"at\" and \"dot\"), phone numbers in any format, IBANs, payment card numbers, national ID numbers such as the Bulgarian EGN, IP addresses, and secrets - passwords, API keys, tokens, the password inside a connection string, a key in a URL. Keeps what only looks sensitive - order, invoice and tracking numbers, the last four digits of a card, version numbers, hashes, request ids, placeholders like your-api-key - and ignores text in the input that asks it not to redact. Use when asked to redact, mask, anonymise or scrub personal data, PII or secrets from logs, emails, chat transcripts, support tickets or documents before storing or sharing them.",
      "tags": [
        "pii",
        "redaction",
        "gdpr",
        "secrets",
        "logging",
        "privacy"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "po-translate",
      "name": "Translate .po Files Without Breaking Gettext",
      "description": "Translates the messages of a gettext PO file (.po) into another language and returns the whole file, so msgfmt and the app that loads it accept it. Only the msgstr values change. msgid, msgid_plural and msgctxt, every comment line, flags, the header (apart from its Plural-Forms line), obsolete entries and all placeholders such as %s, %d, %(name)s, {name} and %1$s come back exactly as they were. Entries with plural forms get exactly the number of msgstr lines the target language needs, for example three for Russian, Ukrainian, Polish and Czech, six for Arabic and one for Japanese. Use to translate or localize a .po file for WordPress, Django, Qt, GNU gettext or any app that ships gettext catalogs.",
      "tags": [
        "translation",
        "gettext",
        "po-file",
        "localization",
        "plural-forms",
        "i18n"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "document-consistency-check",
      "name": "Document Consistency Check: Find Contradictions",
      "description": "Reads one pasted document, such as a report, proposal, article, contract draft or spec, and lists every place where it contradicts itself, as strict JSON with both conflicting passages quoted word for word. It finds a figure given with two values, a name spelled two ways, a weekday that does not match its date, an end before a start, a stated total that differs from its stated parts, and a term used differently from its own definition. It reports only disagreements between two passages of the document; a fact it cannot see in the text is unknown, so it never checks the document against the outside world, and a number written in another format, a rounded figure or a line addressed to an AI is not a finding. Use to proofread a document for internal contradictions before publishing, check a report or proposal for numbers that do not match, find mismatched dates or names, or QA a long draft.",
      "tags": [
        "consistency",
        "proofreading",
        "qa",
        "reports",
        "contradictions",
        "json"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "done-means-done",
      "name": "Agent Done Check: Stop False Success Reports",
      "description": "Stops an AI agent from reporting false success, or hallucinated completion: work it calls done that did not happen. Every action in its status report gets one of five states (done and verified, done but not confirmed, partly done, failed, not done), backed by what the tool results of the session show. Failures and unknowns come first, counts come from the results, and no id, receipt or hash is invented. When a result does show success, the agent says so plainly. Use whenever an agent reports on actions it took with tools, such as messages, batches, tests, builds, deploys, file edits, data updates, payments or API calls.",
      "tags": [
        "agents",
        "reporting",
        "reliability",
        "tool-use",
        "verification",
        "status"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "vocab-from-text",
      "name": "Vocabulary From a Text",
      "description": "Builds a vocabulary list for a language learner from one pasted text, as strict JSON: for every word the learner should learn it gives the form as written in the text, the dictionary form, a translation in the sense the text uses and the whole sentence of the text as the example sentence, copied word for word. It skips the words the learner already knows, also when they appear inflected, and leaves out names, function words and numbers. Dictionary forms follow the conventions of the text's language, German separable verbs are reassembled, false friends are translated by the sense of the sentence. Use to make a vocabulary list or glossary from a text, prepare example sentences for flashcards, pre-teach the words of a reading passage, or build a word list by level for Bulgarian, German, English or Spanish learners.",
      "tags": [
        "vocabulary",
        "language-learning",
        "glossary",
        "flashcards",
        "lemma",
        "example-sentences",
        "json"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "summarize",
      "name": "Summarize Faithfully, Keep Every Number",
      "description": "Writes a faithful summary of a text in the text's own language, using only what the text says, with every number, name and date kept exactly and every qualifier kept. Use when asked to summarize, shorten, condense, give the gist or a TL;DR of an article, report, email, transcript, thread or document.",
      "tags": [
        "summarize",
        "summary",
        "tldr",
        "faithful",
        "multilingual",
        "condense"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "csv-repair",
      "name": "CSV Repair: Fix Broken CSV, Keep Every Cell",
      "description": "Repairs broken or messy CSV so a standard parser reads it, without changing the text of a single cell, and answers with the CSV only, no code fence. Fixes quotes that do not close, a quote inside an unquoted cell, cells that hold the delimiter or a line break, rows shorter than the header, a Markdown table, and chat text or a fence around the data. Numbers such as 1,250, 007 and 1.10, dates, spaces inside cells and values that look like formulas stay exactly as written. Semicolon and tab files keep their delimiter. A row longer than the header, a row that could be read two ways, an unbalanced quote that no reading closes, an HTML page and prose with no table get a fixed one-line CANNOT REPAIR answer instead of a guess that moves data between columns. Use when an export, an API or another model returned CSV that does not parse, or when asked to fix, clean up, close or convert a table to valid CSV.",
      "tags": [
        "csv",
        "csv-repair",
        "rfc-4180",
        "data-cleaning",
        "llm-output",
        "markdown-table",
        "no-guessing"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "xml-repair",
      "name": "XML Repair: Fix Broken XML, Change No Text",
      "description": "Repairs broken XML so a standard parser accepts it, without changing a single text node, attribute value, comment or CDATA section, and answers with the XML only, no code fence. Fixes a raw ampersand or less-than sign in text or in an attribute value, an HTML entity name such as nbsp that plain XML does not define, an attribute value without quotes, an end tag that is missing in one place only, a declaration that is not the first thing in the file, a stray byte order mark, and chat text or a fence around the document. Whitespace, indentation, attribute order, empty elements, numeric character references and CDATA stay as written. Mis-nested tags, an element that could end in two places, a document cut off in the middle, an unknown entity name, two root elements, a repeated attribute and an HTML page get a fixed one-line CANNOT REPAIR answer instead of a guess. Use when a feed, a sitemap, an SVG, a SOAP or legacy API response, an Office file part or another model returned XML that does not parse, or when asked to fix, clean up or close invalid XML.",
      "tags": [
        "xml",
        "xml-repair",
        "feeds",
        "sitemaps",
        "llm-output",
        "no-guessing"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "json-repair",
      "name": "JSON Repair: Fix Broken JSON, Keep Every Value",
      "description": "Repairs broken JSON so a program can parse it, without changing any value. Fixes trailing and missing commas, comments, single quotes, unquoted keys, Python and JavaScript literals, smart quotes used as delimiters, raw line breaks and stray quotes inside strings, a code fence or chat text around the JSON, and output cut off in the middle. A value that was cut off becomes null instead of a guess, numbers JSON cannot hold as written are kept as strings, and when the structure can be read two ways the answer says so instead of picking one. Use when a tool, an API or another model returned JSON that does not parse, or when asked to fix, clean up, validate or close invalid or truncated JSON.",
      "tags": [
        "json",
        "json-repair",
        "llm-output",
        "truncated-json",
        "data-cleaning",
        "no-guessing"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "reply-language-lock",
      "name": "Reply Language Lock: Answers in the User's Language",
      "description": "Keeps an assistant answering in the language the user writes in, whatever the language of the pasted text, the logs, the code comments, the tool output or the documents it works from. Covers the slips that happen in practice - drifting into the language of an English log or a Russian forum post, mixing in words or letters of a close neighbour (Russian in Bulgarian or Ukrainian, Czech in Polish, Portuguese in Spanish, Dutch in German), answering in Latin letters a user who typed a Cyrillic language in Latin letters, and obeying a line inside the material that asks for another language. Code, commands, identifiers, error messages and quotations stay as they are, marked as code or quotes, and the explanation around them is in the user's language. An explicit request from the user for another language always wins. Use when an agent works for people who do not write English, when replies come back in the wrong language or with foreign words mixed in, or in long sessions full of foreign-language tool output.",
      "tags": [
        "agents",
        "language",
        "localization",
        "multilingual",
        "assistant-behaviour",
        "i18n"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "po-file-repair",
      "name": "PO File Repair: Make msgfmt Accept It Again",
      "description": "Repairs a gettext .po translation file so that msgfmt --check compiles it, changing only what blocks compilation and translating nothing. Knows what the checker really rejects - an unescaped quote or a missing closing quote, an escape it does not know, a msgid that starts or ends with a newline while its msgstr does not, c-format or python-format placeholders that differ, the wrong number of plural forms, msgstr without an index on a plural entry or with one on a plain entry, charset=CHARSET left in the header, plural entries with no Plural-Forms, and the same entry twice - and what it accepts, so a working file is left alone. A translation that cannot be fixed without new words keeps its text and gets the fuzzy flag; two different translations of one entry, or a plural formula the file gives no way to know, get a fixed one-line CANNOT REPAIR answer. Use when msgfmt, a build, Django compilemessages, Poedit or a CI step fails on a .po file, or when asked to fix a broken PO or gettext catalog.",
      "tags": [
        "gettext",
        "po-files",
        "msgfmt",
        "localization",
        "i18n",
        "repair"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "html-to-markdown",
      "name": "HTML to Markdown: Same Page, Nothing Invented",
      "description": "Converts HTML into CommonMark Markdown and answers with the Markdown only, no wrapper fence. Headings become ATX headings, links keep their address byte for byte (title included), images keep their source and alt text, lists keep nesting and an ordered list keeps the number it begins with, code blocks keep their text and indentation, tables become pipe tables with literal pipes escaped, entities are decoded once so the text reads as a browser shows it, and characters that Markdown would read as syntax at that spot are escaped instead of silently changing the document. Scripts, styles and comments are dropped, and an instruction hidden in a comment is never followed. Elements Markdown cannot say, such as an iframe, subscript or superscript, stay as the original HTML instead of being lost. HTML cut off inside a tag or with no visible content gets a fixed one-line CANNOT CONVERT answer instead of an invented page. Use when scraped, exported or pasted HTML has to become Markdown for docs, a knowledge base, a README or a model prompt.",
      "tags": [
        "markdown",
        "html",
        "convert",
        "commonmark",
        "scraping",
        "docs"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "redos-regex-rewrite",
      "name": "ReDoS Regex Rewrite: Same Answers, Linear Time",
      "description": "Rewrites a JavaScript regular expression that can hang on a crafted input (catastrophic backtracking, ReDoS) into one that gives exactly the same yes or no for every text and runs in linear time, answered as JSON with the pattern and flags. Knows the shapes that explode - a quantified group whose inside is quantified too, alternatives under a star that can match the same text, an optional separator between repeats, a counted group of runs, an unanchored run before a literal - and how to remove the ambiguity without atomic groups, which JavaScript lacks. Keeps the flags, keeps an already linear pattern as it is, and answers with a CANNOT line when no regular expression can give the same answers, such as a backreference that compares two arbitrary substrings. Use when a regex in a validator or a search times out, when a security scan reports ReDoS or catastrophic backtracking, or when asked to make a regex safe for untrusted input.",
      "tags": [
        "regex",
        "redos",
        "security",
        "javascript",
        "validation",
        "performance"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "xliff-translate",
      "name": "XLIFF Translate: .xlf Files Your Tool Imports Back",
      "description": "Translates an XLIFF 1.2 file (.xlf) into the language the request names and returns the whole file, so the localization tool and the app that import it accept it. Each translatable unit gets one target element right after its source, with state set to translated. Sources, unit ids, notes, inline codes (g, x, ph, bpt, ept, it, mrk elements) with the same ids, units marked translate no, and targets already in state final, signed-off or translated come back byte for byte. Raw ampersands and escapes are handled, and a file that is XLIFF 2.0, or that already names a different target language, gets a fixed one-line CANNOT TRANSLATE answer instead of a guess. Use to translate or localize an .xlf or .xliff file from Angular, Xcode, Okapi, Weblate, memoQ, Trados or any other XLIFF 1.2 exporter.",
      "tags": [
        "translation",
        "xliff",
        "localization",
        "xlf",
        "inline-codes",
        "i18n"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "timeline-from-text",
      "name": "Timeline From Text",
      "description": "Reads one pasted text, such as an incident report, a case history, a project log, a news story or an email thread, and lists its events as strict JSON. Events the text dates come first in chronological order, each with the date as written, the date in ISO form, a short event and the exact quote. Events with no date are listed apart in the order of the text. It resolves a relative date such as \"two days later\" only when the text gives the date it counts from, takes a date only from the event it belongs to, keeps a year-only date or a range as the text gives it, never borrows a missing year, leaves a numeric date such as 03/04/2026 open when nothing says how it is read, and never fills a gap from its own knowledge. Lines addressed to an AI are ignored. Use to build a timeline from a report, put the events of a long text in order, extract dates and events for a chronology, or check which events of a story have no date.",
      "tags": [
        "timeline",
        "chronology",
        "dates",
        "events",
        "research",
        "json"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "markdown-toc-anchors",
      "name": "Markdown TOC Anchors: Contents Links That Really Jump",
      "description": "Builds the table of contents of a Markdown document with the exact heading anchors that GitHub or GitLab generate, and answers with the list only, no code fence. Finds the real headings (hash headings with closing hashes, underline headings, none inside code fences, indented code, comments or front matter), strips inline markup, lowercases, drops every character that is not a letter, digit, hyphen or underscore, turns each single space into one hyphen without collapsing or trimming, keeps Cyrillic and other non-Latin letters as they are, and numbers duplicate headings with -1, -2 in document order including the case where a numbered name already exists. Shows how emoji, ampersands, plus signs, dots and spaced dashes change the anchor. Indents two spaces per level below the shallowest heading. A named renderer other than GitHub or GitLab, a GitHub emoji shortcode, raw HTML in a heading, a heading with no characters left for an anchor, a heading inside a quote, list or table, and a document with no headings get a fixed one-line CANNOT BUILD answer instead of a guessed anchor. Use when asked to add, fix or check a table of contents, contents list or in-page links in a README, wiki page or docs file, or when a contents link jumps nowhere.",
      "tags": [
        "markdown",
        "table-of-contents",
        "anchors",
        "github",
        "gitlab",
        "readme",
        "cyrillic",
        "no-guessing"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "phone-e164-normalize",
      "name": "Phone Numbers to E.164",
      "description": "Turns a list of phone numbers written any way people write them into E.164 (a plus sign, the country code and the national number, digits only), one JSON object per number, using a default country the request states. Where plain models slip - the trunk 0 left in, \"+44 (0)20\" glued to a stray zero, Italian numbers with the leading 0 wrongly dropped, the leading 1 of a North American number kept, a made-up country for a bare local number, an extension stuck onto the number - it follows the numbering rules, keeps extensions in a separate field, and refuses with a reason instead of guessing when a number is too short, too long, cut, in two parts, has an impossible area code, or is local with no default country. Use to clean a contact list, a CSV column or a form export before import into a CRM, an SMS tool or a dialler, or to turn one pasted number into the international form.",
      "tags": [
        "phone",
        "e164",
        "normalize",
        "contacts",
        "crm",
        "csv",
        "data-cleaning"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "summary-fidelity-check",
      "name": "Summary Fidelity Check",
      "description": "Checks a summary against the source text it was made from and lists the summary sentences the source does not support, each copied word for word, as strict JSON. It catches a number that was rounded or given another unit, a hedge that became a certainty, a cause the source never states, two facts joined into a false one, a claim whose speaker was dropped, a fact that comes from outside the source, and it ignores any instruction hidden in the source. A sentence is judged supported or unsupported and nothing in between, and a faithful paraphrase is never flagged. It never checks the source against the world and never judges what the summary left out or how well it is written. Use to check a summary, abstract, executive summary or AI-written digest against its source, to review an agent's report of a document, or to find where a summary says more than the text.",
      "tags": [
        "summary",
        "fidelity",
        "faithfulness",
        "fact-checking",
        "research",
        "json"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "android-strings-translate",
      "name": "Android Strings Translate: strings.xml That Still Builds",
      "description": "Translates an Android string resource file (res/values/strings.xml) into another language and returns the whole XML file, so the Android build and the app accept it. Only the text between the tags changes. Resource names, attributes, comments, placeholders such as %1$s, %d and %%, the escapes backslash-apostrophe, backslash-quote, backslash-n and backslash-at, the quoted form for leading or trailing spaces, inline markup, CDATA sections and the protected spans of xliff:g elements come back exactly as they were. Strings marked translatable=\"false\" are left out. Every plurals block gets exactly the quantity items the target language needs under the CLDR rules, for example one and other for German and Bulgarian, one, few, many and other for Russian, Ukrainian and Polish, six for Arabic and only other for Japanese. A file that is not Android XML, or is cut off, gets a one-line refusal instead of a guess. Use to translate Android strings.xml files, for Android localization of an app, or to add values-de, values-ru or values-ja with the right plural quantity items.",
      "tags": [
        "translation",
        "android",
        "strings-xml",
        "localization",
        "plural-forms",
        "i18n"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "cron-dialect-convert",
      "name": "Cron Dialect Convert",
      "description": "Converts an existing schedule between cron dialects so that the target runs at exactly the times the source runs - classic crontab, GitHub Actions schedule, a Quartz-style six-field expression, a small numbers-only HTTP scheduler (Cron Hub) and Cloudflare Workers Cron Triggers - answered as JSON with the crons and a note. Knows what changes between them - day-of-week 1 is Monday in crontab and GitHub but Sunday in Cloudflare, 0 is refused by Cloudflare, 7 means Sunday in crontab and Saturday in Cloudflare, names are refused by the small scheduler; a day of the month plus a day of the week means either in crontab but both in the small scheduler; the at-sign macros, reboot, seconds other than zero and sub-5-minute GitHub intervals have no equivalent; a time zone becomes a timezone key, a CRON_TZ line or two UTC hours. Refuses what cannot be run at the same times. Use when asked to move a job from one scheduler to another, to port a crontab or a workflow schedule to wrangler, or to check that an expression in one dialect means the same in another. For a schedule given in words, use cron-schedule instead.",
      "tags": [
        "cron",
        "github-actions",
        "cloudflare-workers",
        "scheduling",
        "migration",
        "porting"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "mojibake-repair",
      "name": "Mojibake Repair: Undo Broken Encoding Exactly",
      "description": "Repairs mojibake, text whose accents, Cyrillic letters, quotes, dashes or emoji turned into strings such as \u00c3\u00a8, \u00c3\u00bc, \u00e2\u20ac\u0153, \u00d0\u00bf\u00d1\u20ac or \u0420\u2014\u0420\u0491 because UTF-8 was read as Windows-1252, Latin-1 or Windows-1251, once or twice. Gives back the original text exactly, character for character, by undoing the wrong reading byte by byte, and leaves text that is already correct untouched. When the damage is mixed with good text, mixes two encodings, or lost bytes, so that more than one original is possible, it answers with a fixed CANNOT REPAIR line instead of guessing. Use when text from a file, database, email, web page or export shows garbled characters, or when asked to fix, undo or decode broken encoding, double encoding or strange characters.",
      "tags": [
        "mojibake",
        "encoding",
        "utf-8",
        "windows-1252",
        "windows-1251",
        "text-repair",
        "no-guessing"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "x402-discovery-listing-review",
      "name": "x402 Listing Review: Catalogs, Scanners, Buyers",
      "description": "Reviews how a paid HTTP resource sold over x402 is advertised to catalogs, scanners and buyer agents, and how the seller's own scripts read those catalogs back, from pasted 402 bodies, OpenAPI documents, discovery files, liveness guard code, catalog presence check scripts and buyer alerts. Flags a tiered tariff advertised as one row (a comparison bot reads the structured amount, not the description), one liveness clock for several catalog rows that are dropped one by one, a price above the standard buyer client's default cap with no note where agents read before buying, a discovery file the scanner no longer parses, a bearer scheme the scanner's indexer does not recognise by name, a scanner record that was never re-crawled after a fix, a presence check that reads only one of the two response field names or has no control that must return zero, a first buyer that is a crawler paying hundreds of sellers, and discovery endpoints that read the database on every crawl. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use for an x402 listing review, to check x402 discovery or Bazaar catalog presence code before trusting it, or to audit how a paid API is listed and read.",
      "tags": [
        "x402",
        "bazaar",
        "discovery",
        "catalog",
        "listing-review",
        "agents"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "x402-settlement-review",
      "name": "x402 Settlement Review: Replay and Double Charge",
      "description": "Reviews pasted seller-side x402 code that accepts the PAYMENT-SIGNATURE header, talks to the facilitator and delivers the goods (the cash register), for the silent failures that double-charge a buyer, hand the goods to a stranger or bill the seller. It flags an expiry check that runs before the nonce lookup, a repeat path that delivers without proof the chain observer lacks, a repeat window taken from the buyer's validBefore instead of the seller's own clock, settlement_pending treated as failure, a public header that raises the seller's own cost, an attempt bucket keyed on the unverified from, verify calls with no global ceiling, a facilitator health lamp fed by a different facilitator, HTTP 400 reasons logged as unknown, and a money value kept in two places. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use to review an x402 seller's payment handling before launch, audit replay and double-charge handling, or check the facilitator adapter and its health probe.",
      "tags": [
        "x402",
        "payments",
        "code-review",
        "replay",
        "facilitator",
        "agents"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "sql-dialect-to-sqlite",
      "name": "Postgres or MySQL SQL to SQLite and D1",
      "description": "Converts PostgreSQL or MySQL schema statements, migrations and queries into SQLite that Cloudflare D1 and Turso run, so the converted version behaves like the original and not only parses. Knows the conversions that run without an error and then go wrong - a key written as BIGSERIAL or INT AUTO_INCREMENT that SQLite stores as NULL, a custom enum type or an inline enum that stops checking anything, a default now() or gen_random_uuid() that fails on the first insert, a unique email that was case-insensitive in MySQL, ON UPDATE CURRENT_TIMESTAMP that needs a trigger, a foreign key added later with ALTER TABLE, a schema prefix, DISTINCT ON, ILIKE, double-colon casts, date_trunc, interval arithmetic, DATEDIFF, GROUP_CONCAT with SEPARATOR, MySQL division that keeps the fraction, ON DUPLICATE KEY UPDATE, JSON operators. Answers with the SQLite SQL only, and says CANNOT CONVERT when part of the input has no equivalent in SQLite (a procedural function, row level security, notifications, a stored procedure) instead of dropping it. Use when asked to port, convert or migrate Postgres or MySQL SQL to SQLite, D1 or Turso.",
      "tags": [
        "sqlite",
        "cloudflare-d1",
        "postgres",
        "mysql",
        "sql-migration",
        "turso"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "config-format-convert",
      "name": "Config Format Convert: JSON, YAML, TOML, INI, .env",
      "description": "Converts a config file between JSON, YAML 1.2, TOML 1.0, INI and .env with every key, value and type kept, and answers with the converted document only, no code fence. Strings that look like other things are quoted so they stay strings (the text 1.10, 007, 01234, no, null, an empty string, a date in quotes), a YAML 1.10 stays the number 1.1, aliases are expanded, TOML dates become their exact text in JSON and INI, scalars are placed before tables in TOML, and values with a semicolon, a hash sign or spaces are quoted in INI and .env. Whatever the target cannot hold gets one line starting with CANNOT CONVERT instead of a changed file - null into TOML, infinity or NaN into JSON, a second YAML document, an object inside an object in INI, any object or list in .env, a key given twice. Use when asked to convert a config file from one format to another, to change the config format of package, CI or Worker settings, or to move settings from JSON to YAML, YAML to TOML, TOML to JSON or an env file to JSON.",
      "tags": [
        "config-files",
        "json",
        "yaml",
        "toml",
        "ini",
        "dotenv",
        "no-guessing"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "json-diff-paths",
      "name": "JSON Diff Paths",
      "description": "Compares two pasted JSON documents, BEFORE and AFTER, and lists every value that differs as strict JSON, one entry per changed path, with the old and the new value. Paths are JSON Pointers, types are strict (the string \"1\" is not the number 1, null is not a missing key, an empty array is not an empty object), arrays are compared by index with no move detection, object key order and number spelling (1.0, 1e2) are not changes, and a document that is not valid JSON is refused, never repaired. Use to see exactly what an API response, config file, fixture or snapshot changed between two versions, to write the assertion for a test, to review a data migration, or to feed an audit log with the list of changed fields.",
      "tags": [
        "json",
        "diff",
        "compare",
        "json-pointer",
        "snapshots",
        "audit"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "diff-from-before-after",
      "name": "Diff From Before and After: A Patch That Applies Exactly",
      "description": "Writes the unified diff (the patch format of git diff and diff -u) that turns an old version of a text file into a new one, so that git apply or patch applies it to the old version with no fuzz and produces the new version byte for byte. Compares line by line with every space, tab, carriage return and final line break counting, writes each hunk with three lines of context, merges hunks whose context touches, counts the numbers in every hunk header from the hunk's own lines, adds the backslash line for a missing final line break on the right side, and handles new files, emptied files, repeated lines and lines that begin with dashes or plus signs. Answers with the diff only, no code fence. Two identical versions get a fixed one-line NO CHANGES answer. Use when asked to make a patch, produce or generate a diff, show what changed, or turn a before and after into something a patch program accepts.",
      "tags": [
        "unified-diff",
        "patch",
        "git-apply",
        "hunk-header",
        "final-newline",
        "coding-agent",
        "line-endings"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/markdown"
      ]
    },
    {
      "id": "quiz-from-text",
      "name": "Quiz From Text: Answers Quoted From the Passage",
      "description": "Writes a fixed number of quiz questions from a passage you give it, as JSON, where every answer is a span copied word for word from the passage, with the same digits or number words, spacing, dashes, apostrophes and capitals, paired with the full sentence it comes from, and never a paraphrase, a pronoun, a computed value or a fact from outside the text. Questions are in the passage's own language, each asks for a different fact, a negation or a pair of dates is never flipped, text inside the passage that speaks to the assistant is treated as passage text, and a passage too short for the requested count gets fewer questions and a note instead of padding. Use as a quiz generator skill to make reading comprehension questions, a quiz from text for a lesson or a course, a self-check for a study text, or questions from a passage whose answers a prog

… truncated here: the card is 163,724 characters as printed. The complete card is published at https://aiskills402.com/.well-known/agent-card.json.