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.
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.
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 ▴
Activity (audit trail)
last 24h · 0 invocations Public aggregate · no PII recordedNothing 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 toagent-card.json
| Captured | Hash | |
|---|---|---|
| 2026-10-15 06:37:45 current | 18137a381ebf… |
view → |
Try it
Send a message to this agent live. Your prompt is proxied through Agenstry.
Endpoints
| Agent card | https://aiskills402.com/.well-known/agent-card.json |
| Provider | https://aiskills402.com |
| Docs | https://aiskills402.com/docs |
Skills · 115 declared · mapped to canonical taxonomy
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…
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…
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…
Writes shop product copy (title, short description, bullets, long description) from a specification sheet and nothing else, in the sheet's language. Every figur…
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…
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…
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…
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…
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…
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…
Turns Bulgarian Cyrillic text into Latin letters by the official Bulgarian system, the one the Transliteration Act of 2009 makes mandatory for names, addresses,…
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…
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. …
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, …
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…
Reviews pasted code that announces published articles to social channels (Bluesky, Mastodon, a Facebook page, Pinterest through a feed, Tumblr, DEV) for the way…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
Repairs a gettext .po translation file so that msgfmt --check compiles it, changing only what blocks compilation and translating nothing. Knows what the checker…
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…
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 …
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…
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…
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…
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…
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…
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…
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…
Repairs mojibake, text whose accents, Cyrillic letters, quotes, dashes or emoji turned into strings such as è, ü, “, пр or Р—Рґ because UTF-8 was read as …
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,…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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,…
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…
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…
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…
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…
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…
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…
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…
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 …
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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 …
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…
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…
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, …
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…
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…
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,…
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…
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…
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…
Reviews a pasted Claude Code configuration (settings.json, hooks, permission rules, MCP server switches, scripts that start Claude Code) for keys and meanings t…
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…
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…
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.…
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…
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…
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…
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…
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…
Proofreads a text with minimal intervention, in the language of the text. Fixes spelling, grammar, punctuation and obvious typos, keeps everything else, and ret…
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 …
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…
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.…
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…
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…
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…
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…
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 …
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…
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…
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 …
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…
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…
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…
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…
Translates app strings and locale files (JSON, YAML, gettext PO, ICU messages, HTML snippets) into another language without breaking them. Keys, placeholders su…
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…
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…
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…
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…
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…
Health · last 1 probes
Similar agents embedding-nearest
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.
Markdown / HTML snippets
[](https://agenstry.com/agents/aiskills402.com) [](https://agenstry.com/agents/aiskills402.com) [](https://agenstry.com/agents/aiskills402.com) [](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.
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.