Our own visit statistics are always on. Google Analytics, which helps us understand how people use our public pages (not your signed-in workspace), is enabled only with your permission. See our Privacy policy.

One SKILL.md, Four AI Tools: A Competitor Review Skill

One competitor review SKILL.md for Claude Code, Codex, Antigravity CLI and Gemini, checked against each official doc. Nine real API calls read 967 reviews for $0.0125.

Illustration: a teal folder with one sheet sticking out sits in the center. Four dashed lines run from it to four desks. Three desks hold the same small folder. The desk on the far right also has the folder, but an unplugged network cable lies next to it. Review cards with star shapes float above the folder in three small piles.

We wrote one "competitor review analysis" SKILL.md and kept its frontmatter inside the Agent Skills spec. By each product's official docs, the same file loads in Claude Code, Codex and Antigravity CLI with no changes. On our machine we ran the skill scripts, the spec validator and the data API; we did not install Codex or Antigravity. The Gemini app can import it, but its skill scripts cannot reach the internet, so the skill cannot fetch data there.

On October 26, 2026, from 17:25 to 17:55 SGT, the skill built one report on three project-management tools. It used 9 calls to G2, Capterra and Trustpilot, read 967 reviews, and cost $0.012501 in API fees. The biggest risk was in the data, not in the tools. On Trustpilot, unprompted reviews for five companies averaged 1.29 to 2.77 stars, and invited reviews averaged 4.07 to 4.89 stars.

Isometric illustration: a folder in the middle of a square plate stands for the skill. Each corner has a dock with the same small folder, one dock per AI tool. A network post stands at the back, and wires run from it to three docks. The wire to the fourth dock stops halfway; a dashed teal line marks the gap, because Gemini app skill scripts cannot reach the network.

The short answer: one SKILL.md, four folders, one 9-call bill

This article answers one practical question. You use Claude Code skills today. Your teammates use Codex or Antigravity CLI. Can the whole team share one SKILL.md for competitor review analysis? We wrote down three pass criteria before the first API call.

First, the frontmatter must pass the Agent Skills spec, field by field. Second, the folder path and the way to call the skill must come from each product's own docs. Third, the API fee must equal the catalog price times the number of calls, with zero difference. All three passed. One product passed only half.

The table puts the four products side by side. Every cell comes from the vendors' own docs, which we read on October 26, 2026. The links are in the sections below. The last column asks one question: can the skill's own script reach api.everyinfra.com? Without that, this skill cannot do its job.

ProductProject folderPersonal folderHow to call itCan the script fetch data?
Claude Code.claude/skills/<name>/SKILL.md~/.claude/skills/<name>/SKILL.md/name, or Claude picks it from the descriptionYes in local sessions; not in Cowork or cloud sessions.
Codex (CLI, IDE, desktop).agents/skills, from the working folder up to the repo root$HOME/.agents/skills$name, /skills, or Codex picks itYes.
Antigravity CLI.agents/skills/~/.gemini/antigravity-cli/skills//skills to list, or the agent picks itYes.
Gemini appNot used (upload on the Skills page)Not used/ or @ and the skill nameNo: scripts that need the internet are not supported.

The first and third rows differ in one way that matters. Claude Code uses .claude/skills for projects. Codex, Antigravity CLI and the retired Gemini CLI all read .agents/skills. So a repo that serves all of these tools can keep the skill in .agents/skills/competitor-review-analysis/ and add a symlink to it under .claude/skills/. The Claude Code docs say a skill folder can be a symlink. The Codex docs say Codex follows symlinked skill folders (Claude Code skills docs; Codex Build skills).

What agent skills are: a SKILL.md with six fields

Agent Skills is an open format. A skill is a folder with at least one SKILL.md file. The file starts with YAML frontmatter, and Markdown steps follow (Agent Skills specification). The spec defines six fields. Two are required: name and description.

Four are optional: license, compatibility, metadata and allowed-tools. The name must be 1 to 64 characters of lowercase letters, digits and hyphens. It cannot start or end with a hyphen, cannot contain two hyphens in a row, and must match the folder name. The description must be 1 to 1,024 characters and say what the skill does and when to use it. The spec marks allowed-tools as experimental, so support differs between agents.

The format saves context through "progressive disclosure", which has three levels. At session start, the agent loads only the name and description of each skill, about 100 tokens by the spec's estimate. When a task matches the description, the agent reads the full SKILL.md. The spec suggests fewer than 5,000 tokens and fewer than 500 lines. Files in scripts/ and references/ load only when the steps need them (Agent Skills specification). Anthropic described the same idea on October 16, 2025: give the agent a table of contents first (Anthropic on Agent Skills).

Our skill's name and description total 363 characters. At about 4 characters per token, that is about 91 tokens, close to the spec's estimate. The full SKILL.md has 51 lines and 3,426 characters, far below the 500-line limit. These two numbers come back in the context section below.

The competitor review SKILL.md, in full

Here is the complete file. The skill folder also holds two scripts and one keyword list. scripts/fetch_reviews.py calls the EveryInfra data API. scripts/classify.py tags each review with themes by keyword rules. references/themes.md holds the keywords.

markdown
---
name: competitor-review-analysis
description: Pull public reviews for 2-5 competing products from G2, Capterra, Trustpilot or Amazon through the EveryInfra data API, tag each review with a theme, and write a comparison report with counts, shares and quotes. Use when the user asks to compare competitor reviews, find what customers complain about, or build a review-based battlecard.
license: MIT
compatibility: Needs network access to api.everyinfra.com, Python 3.9+, and an EVERYINFRA_API_KEY environment variable. Does not run inside the Gemini app, where skill scripts cannot reach the internet.
metadata:
  version: "1.1"
  author: everyinfra-blog-example
---

# Competitor review analysis

## Inputs to confirm first
1. The products to compare (2-5). For each one, get the exact review page:
   G2 `https://www.g2.com/products/<slug>`, Capterra `https://www.capterra.com/p/<id>/<name>/`,
   Trustpilot domain such as `clickup.com`, Amazon `https://www.amazon.com/dp/<ASIN>`.
   Use the URL, not the product name. Product names change (Capterra lists monday.com as "monday AI Work Platform").
2. The theme set: `saas` or `hardware` (see references/themes.md). Ask if unclear.

## Steps
1. Fetch: run `python3 scripts/fetch_reviews.py --plan plan.json --out raw/`.
   One request per product per source. The script waits 7 s between requests,
   retries 429 with the `retry_after` value, and sends slow requests with `"mode":"async"`.
2. Check counts: read `raw/summary.json`. A source with 0 rows was not charged.
   Do not treat a short page as "no more reviews". Write the counts into the report.
3. Tag: run `python3 scripts/classify.py raw/ --themes saas > tagged.json`.
   The script tags by keyword rules, so the same input gives the same output.
4. Read 5 tagged reviews per theme and check that the tag fits. If a keyword
   matches the wrong words (v1 had `plan`, which matched "planning"), fix
   references/themes.md and run step 3 again. Note each change in the report.
5. Write `report.md` with these sections, in this order:
   - Table: product x source -> reviews read, average rating, charged USD.
   - Table: theme x product -> count and share of reviews that mention it.
   - Top 3 complaints per product, each with one short quote and its review URL.
   - Limits: what the sample cannot show (see below).

## Rules
- Report rating scales as they are: G2 and Capterra 1-5, Trustpilot 1-5 stars, Amazon 1-5 stars.
  Do not average across sources.
- Split Trustpilot by the `source` field: `Organic` (the reviewer came on their own) versus
  invitation sources (`BasicLink`, `InvitationApi`, `FileUploadInvitation`, `Shopify` and others).
  Report the average for each group. Never report one Trustpilot average for a company.
- Theme keywords are per language. For reviews that are not in English, use the matching set
  (for example `saas_es`), or report them as untagged.
- Do not print reviewer names. Quote at most 25 words per review.
- Amazon returns only the reviews shown on the product page (usually 10-15). Say so.
- Cost: every request costs the `price_usd` from `GET /api/v1/social/catalog`. Add up `billing.charged_usd` from the responses; do not estimate.

## Limits to state in every report
- The sample is the newest page of each source, not all reviews.
- Trustpilot reviews of a software company are often about billing and support, not the product. Read them as a separate signal.

Several lines exist only to make the file portable. The frontmatter uses five of the six spec fields. It does not use Claude Code extensions such as model, context: fork or argument-hint. The compatibility line states the network and key requirements.

A person who imports the file into the Gemini app sees at once that it cannot run there. Script paths are relative to the skill root, and file references stay one level deep, as the spec asks (Agent Skills specification). Two rules came only after we ran the data: "split Trustpilot by source" and "keywords per language". The next sections explain why.

We did not check the file by eye. At 17:56 SGT we ran the reference validator skills-ref 0.1.1 from the spec repository (agentskills/skills-ref) on three samples. The original file returned Valid skill. A copy with context: fork and model: haiku returned "Unexpected fields in frontmatter: context, model".

A copy with name: Review_Skill returned two errors: the name must be lowercase, and it contains invalid characters. This matches the Claude Code docs. In local Claude Code, every field in its table works. Uploads to claude.ai, the Skills API and package_skill.py accept only the six spec fields. An extra field there is a hard error (Claude Code skills docs).

SampleChangeskills-ref 0.1.1 resultPortable?
OriginalNoneValid skillYes.
Negative 1Added context: fork and model: haikuError: unexpected fields context, modelWorks in local Claude Code; claude.ai upload fails.
Negative 2name: Review_SkillError: must be lowercase; invalid charactersNo.

Five entry points, five sets of frontmatter rules

Before you put one file in several places, check what each entry point accepts. The table lists only rules that the vendors' own docs state. Where the docs say nothing, the cell says "not in docs".

Entry point`name``description`Fields outside the specOther limits.
Agent Skills specRequired; 1–64 chars; lowercase, digits, hyphens; same as folderRequired; 1–1,024 charsNot part of the specBody under 500 lines suggested.
Claude Code, localOptional; folder name by defaultRecommended; 1,536 chars shownmodel, context, hooksUnknown fields ignored.
claude.ai upload and Skills APIRequired; ≤64 chars; no "claude" or XMLRequired; ≤1,024 charsExtra field is an errorUnder 30 MB; no network.
CodexRequiredRequiredUI and dependencies go in agents/openai.yamlFirst list uses 2% of context or 8,000 chars.
Entry point`name``description`Fields outside the specOther limits.
AntigravityOptional; folder name by defaultRequiredNot in docsNot in docs.
Gemini appAll lowercase, words split by hyphensLength not in docsNot in docs100 MB total; scripts cannot reach the internet.

The table shows why we keep to the spec fields. The spec is the common subset. Local Claude Code is the most tolerant entry point, and the claude.ai upload is the strictest. Write for the strictest one, and every entry point accepts the file.

The docs also agree on how to write the description. Codex shortens descriptions first when many skills are installed, so put the key use and trigger words first (Codex Build skills). Claude Code cuts the description at 1,536 characters, so put the key use case first (Claude Code skills docs). Google's first tip is to define when to use the skill (About the transition from Gems to skills).

Our first sentence says what the skill does, from which sites, through which API. The second says which user requests should trigger it. The total is 337 characters, so no entry point cuts it.

Claude Code skills: ~/.claude/skills or .claude/skills

Claude Code reads skills from five places. These are enterprise (.claude/skills/ in the managed settings folder), personal (~/.claude/skills/<name>/SKILL.md), project (.claude/skills/<name>/SKILL.md), nested folders, and folders added with --add-dir. When names clash, enterprise wins over personal, and personal wins over project (Claude Code skills docs). A project skill can be committed, so every teammate gets it with the code. A personal skill works in every repo on your machine. Project skills load from the start folder up to the repo root, so a session in packages/frontend/ still sees a root skill.

Three limits matter for a weekly competitor report. First, Cowork sessions and cloud sessions, including cloud scheduled tasks, do not read ~/.claude/skills/ on your machine. They load only the skills that you turn on in your claude.ai account. If the skill lives only in the local folder, a cloud scheduled task reports that it cannot find the skill.

Desktop scheduled tasks run on your machine, so they do read ~/.claude/skills/ (same docs, "Use skills in Cowork and cloud sessions"). Second, an upload to claude.ai accepts only the six spec fields. Third, the skill listing has a budget. Each description plus when_to_use shows at most 1,536 characters.

The whole listing gets 1% of the model's context window, and the least-used skills lose their descriptions first. After auto-compaction, Claude Code re-attaches recent skills with their first 5,000 tokens each, within 25,000 tokens in total (same docs). That is why our description stays at 337 characters, with the key use case in the first sentence.

Claude Code also has extensions that work only in Claude Code. model switches the model for the turn. context: fork runs the skill in a forked subagent context. Only the result comes back to the main session (skills docs; subagents docs). allowed-tools pre-approves tools, and ! command lines inject live data into the body. These features help, but a file that uses them is no longer portable.

Our approach keeps the shared file inside the spec. For Claude Code-only behavior, put a second skill with the same name in your personal folder. The "personal wins over project" rule makes Claude Code use it, and other tools still read the spec version. With context: fork, the 967 raw reviews stay out of the main session.

You can also let the model call tools instead of running a script. Add the EveryInfra remote MCP server to Claude Code. We tested this command in an earlier article, so here it is a configuration example:

bash
export EVERYINFRA_API_KEY="<your API key>"
claude mcp add --transport http everyinfra https://api.everyinfra.com/mcp \
  --scope user --header 'Authorization: Bearer ${EVERYINFRA_API_KEY}'
claude mcp get everyinfra

Claude Code turns on MCP tool search by default. At session start it loads only tool names and server instructions. It looks up tool definitions when needed (Claude Code MCP docs). This changes the context math in a later section.

Codex skills: .agents/skills and config.toml

Codex skills also build on the open Agent Skills standard, and SKILL.md must have name and description (Codex Build skills). Codex reads four kinds of locations. The repo level is .agents/skills in every folder from the working folder up to the repo root. The user level is $HOME/.agents/skills. The admin level is /etc/codex/skills.

System skills ship with Codex. When two skills share a name, Codex does not merge them, and both can appear in the picker. In the CLI or IDE extension, type /skills or mention a skill with $. Codex can also pick a skill from its description. In ChatGPT, you mention a skill with @.

Two numbers in the Codex docs affect how you write the description. By default the first skills list uses at most 2% of the model's context window, or 8,000 characters if the window size is unknown. The skills.max_context_tokens setting changes the budget, up to 10,000 tokens. With many skills installed, Codex shortens descriptions first, then leaves some skills out and shows a warning (Codex Build skills). An optional agents/openai.yaml file sets the display name, the allow_implicit_invocation policy and MCP tool dependencies. It sits in the skill folder, and other tools ignore it, so the skill stays portable.

To connect the EveryInfra remote MCP server in Codex, add a [mcp_servers.<name>] table to ~/.codex/config.toml (Codex MCP docs). A trusted project can use .codex/config.toml. This is a configuration example. We did not run it in a local Codex install:

toml
[mcp_servers.everyinfra]
url = "https://api.everyinfra.com/mcp"
bearer_token_env_var = "EVERYINFRA_API_KEY"
enabled_tools = ["everyinfra_list_capabilities", "everyinfra_call_api", "everyinfra_get_job"]
default_tools_approval_mode = "writes"
tool_timeout_sec = 120

Our test data set two of these lines. enabled_tools keeps only 3 tools. At 17:25 SGT the EveryInfra MCP tools/list call returned 25 tools, and some of them create keys, delete keys, change settings or open tickets. A review report needs none of those. tool_timeout_sec is 120 seconds because Codex waits only 60 seconds per tool call by default (Codex MCP docs).

Our sync calls at 17:28 and 17:30 SGT took 87.8 and 88.3 seconds. With the default, Codex gives up before the API answers. default_tools_approval_mode = "writes" asks before any tool that is not marked read-only. everyinfra_call_api charges per call, so the server does not mark it read-only, and Codex asks each time. If you accept that cost, set tools.everyinfra_call_api.approval_mode for that one tool.

Antigravity CLI and Gemini CLI: the folders moved

Google replaced Gemini CLI with Antigravity CLI on June 18, 2026. The Gemini CLI docs site says so at the top of its skills page (Gemini CLI Agent Skills docs). The skill format is the same, and the folders are different. Gemini CLI used ~/.gemini/skills/ for users and .gemini/skills/ for workspaces, with .agents/skills/ as an alias for both.

Antigravity CLI uses .agents/skills/ for workspaces and ~/.gemini/antigravity-cli/skills/ for global skills (Antigravity CLI migration docs). The Antigravity desktop app uses yet another global folder: ~/.gemini/config/skills/ (Antigravity skills docs). This is the only place where we suggest two copies, one per folder.

Antigravity requires only description. If name is missing, it uses the folder name (same docs). Our skill has both fields, so it is not affected. A Google Codelab from September 25, 2026 shows the minimum steps.

Create .agents/skills/<name>/SKILL.md, start agy, list skills with /skills, and ask a question (Google Codelabs). On Reddit, one user asked how to set up Antigravity skills and wanted the folder structure, not a docs link (r/google_antigravity thread). The tables above give that structure.

Antigravity moved MCP servers out of settings.json into a separate mcp_config.json. The global file is ~/.gemini/config/mcp_config.json, and the project file is .agents/mcp_config.json. For remote servers, the address key changed from url or httpUrl to serverUrl (Antigravity CLI migration docs). It also has a tool allow list, enabledTools.

By default it waits 3 minutes per tool call and 5 minutes to connect (Antigravity MCP docs). That is longer than Codex, so our 88-second calls need no timeout change. Configuration example, not run locally:

json
{
  "mcpServers": {
    "everyinfra": {
      "serverUrl": "https://api.everyinfra.com/mcp",
      "headers": { "Authorization": "Bearer <your API key>" },
      "enabledTools": ["everyinfra_list_capabilities", "everyinfra_call_api", "everyinfra_get_job"]
    }
  }
}

Gemini skills: Gems go read-only on November 17, and scripts stay offline

On September 30, 2026, Google said skills will replace Gems. Skills are "built entirely on the open, Markdown-native SKILL.md standard", so you can copy skills from other platforms into the Gemini app (Google Workspace Updates, 2026-09-30). An update on October 13 said skills started to roll out in the Gemini app that day, with completion expected by mid-November. The Workspace apps launch is delayed until further notice (Google Workspace Updates, 2026-10-13).

Two Google sources give different Gems dates, so check your account type. The September 30 Workspace post says that on November 17 Gems move to the Settings panel, and users "can continue to create, edit, and use them". Business accounts lose Gems no sooner than March 1, 2027. The help center page for personal accounts says something stricter. For personal Google accounts of people 18 or older, Gems become read-only skills on November 17, 2026. You can see them, but you cannot use or edit them.

On December 17, 2026, Gems are removed from the Gemini app (Gemini Help: About the transition from Gems to skills). So "read-only on November 17" is true for personal accounts only. Workspace business accounts move in March 2027, and education accounts in June 2027. The Google blog agrees with the help center (Google blog: Let skills in Gemini tackle your most repetitive tasks).

Screenshot of the Gemini Help section "Upload a file or folder to create a skill". A teal box marks the line "Scripts that require access to the internet are not supported." The upload steps and supported file types follow.
The Gemini upload instructions say scripts that need the internet are not supported. Read on Oct 26, 2026. Gemini Help screenshot

Two sentences in the help center decide whether this skill can work in the Gemini app. For now, scripts that require access to the internet are not supported. Scripts cannot perform actions or requests on external websites (Gemini Help: Create & manage skills for Gemini Apps). The same page lists the upload rules.

SKILL.md must be in the root folder, the name must be lowercase with hyphens, and all files together must be 100 MB or less. Plain-text files such as .py, .sh, .md, .json and .csv are fine, but .docx and .xlsx are not. Our skill meets every format rule and imports, but fetch_reviews.py cannot get data there.

Gemini is not alone. The Claude Skills API runs skills in a code execution container with "no network access", so skills "cannot make external API calls". It also adds a name rule: name cannot contain the reserved words "anthropic" or "claude", or XML tags (Claude Skills API guide). In both places, the right split is "skill for the process, connector for the data".

In the Gemini app, connected apps fetch the data. In Claude on the web and in the API, an MCP connector fetches it. The skill body only tells the model which steps to follow and which report to write. The help center also says skills do not yet work with Canvas or Deep Research (About the transition from Gems to skills).

One real round trip: the call the model sends and the data we return

A script and an MCP tool call end at the same request on our side. The card below shows a real MCP tools/call at 17:46:24 SGT. The model called everyinfra_call_api for ClickUp's one-star and two-star Trustpilot reviews from the last 3 months, up to 50 reviews. The API took 27.8 seconds, returned 7 reviews, and charged $0.001389.

Screenshot of a real EveryInfra MCP call to everyinfra_call_api for Trustpilot reviews of clickup.com: stars one and two, date last3months, limit 50. The response shows count 7; the first review has rating 1, source Organic, country AU, posted_at 2026-10-20 and a masked reviewer name. Billing shows charged_usd 0.001389, and teal boxes mark stars, count, source and charged_usd.
One real MCP round trip; the reviewer name is masked. Oct 26, 2026, 17:46 SGT. EveryInfra MCP response screenshot

The same request as a direct curl call to the data API looks like this. $EVERYINFRA_API_KEY comes from an environment variable and never goes into a file:

bash
curl -s -X POST https://api.everyinfra.com/api/v1/social \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"trustpilot","action":"reviews","params":{"company":"clickup.com","stars":["1","2"],"date":"last3months","limit":50}}'

The catalog lists 24 response fields for trustpilot/reviews (EveryInfra catalog). The skill uses the ones below. We matched each name and meaning against the catalog's response_fields and platform_field_meanings.

FieldMeaning (from the catalog)How the skill uses it.
id, urlReview ID and linkDedupe; link each quote.
title, textTitle and bodyKeyword tagging.
rating, rating_scaleStars and scaleAverage per source group.
sourceReview sourceSplit unprompted and invited.
FieldMeaning (from the catalog)How the skill uses it.
verification_levelVerification level (invited or organic)Cross-check against source.
language, countryLanguage and countryPick the keyword set.
experience_at, posted_atDate of the experience; date postedCut a time window.
FieldMeaning (from the catalog)How the skill uses it.
reply_textCompany replyReply rate.
author_nameReviewer display nameNever printed in the report.

The G2 and Capterra fields suit B2B buying. The first row of g2/reviews has record_type summary with the overall rating, the review count and the most mentioned pros and cons. Single reviews follow. Each capterra/reviews row has pros, cons, sub-ratings for ease of use and support, and switching_reasons. The catalog notes that switching_reasons is the most useful field for competitor analysis (EveryInfra catalog).

Nine calls: how many reviews G2, Capterra, Trustpilot and Amazon return

From 17:25 to 18:31 SGT we sent 31 requests in total. 23 were charged and 8 were not (four 429 responses, one timeout and three empty results), for a total of $0.032794. The table shows the 11 requests behind the software report, including the two that cost nothing.

SGTCapabilityTargetlimitReviews backTimeCharged.
17:25g2/reviews syncAsana10020, plus 1 summary row—$0.001389.
17:27g2/reviews syncmonday.com100Timeout, 50390.4 s$0.
17:28g2/reviews syncClickUp10020, plus 1 summary row87.8 s$0.001389.
17:30capterra/reviewsAsana, by name1005088.3 s$0.001389.
SGTCapabilityTargetlimitReviews backTimeCharged.
17:32capterra/reviews"monday.com", by name1000, refunded67.5 s$0.
17:33capterra/reviewsClickUp, by name10010022.3 s$0.001389.
17:33capterra/reviewsmonday.com, by product URL1009747.3 s$0.001389.
17:34g2/reviews asyncmonday.com10050, plus 1 summary row2.1 s to get a job ID$0.001389.
SGTCapabilityTargetlimitReviews backTimeCharged.
17:34trustpilot/reviewsasana.com20020044.5 s$0.001389.
17:35trustpilot/reviewsmonday.com20020037.3 s$0.001389.
17:36trustpilot/reviewsclickup.com20020042.4 s$0.001389.

Three lessons from this table went into the SKILL.md. First, Capterra found nothing for the name "monday.com". Capterra now calls the product "monday AI Work Platform" (Capterra product page). Our API returned 0 rows and refunded the call.

With the product URL, it returned 97 reviews. So step one asks for URLs, not names. Second, sync G2 calls run close to the 85-second sync budget. The monday.com call timed out at 90.4 seconds, and the response said "Not charged" and suggested "mode":"async".

With async mode we had a job ID in 2.1 seconds, and the job returned 50 reviews. Third, the same Asana G2 request returned 20 reviews in sync mode. At 17:48 SGT the skill script sent it again in async mode and got 50, and all 20 earlier reviews were among them. The price is the same, and async returned 2.5 times as many reviews.

Horizontal bar chart of the limit in each request and the reviews returned, at $0.001389 per call. G2 Asana returned 20 in sync mode and 50 in async mode, with limit 100. Capterra returned 50 for Asana, 97 for monday.com and 100 for ClickUp. Trustpilot returned 200 of 200 for Asana, 81 for monday.com in Spanish and 10 for ClickUp in Spanish. Amazon returned 13 of 100 for an Anker power bank.

The number of reviews per call sets the cost per 1,000 reviews, because these review capabilities charge per call, not per review. Trustpilot returns 200 per call, about $0.0069 per 1,000. Capterra returns 100, about $0.0139. G2 async returns 50, about $0.0278. G2 sync returns 20, about $0.0695.

Amazon returns 13 per product, about $0.1068, so the spread is about 15x. The Amazon count is not a fault. The catalog notes for amazon/reviews say that every country site gives only the featured reviews on the product page (EveryInfra catalog). That is usually 10 to 15 per product, not the full history. We read the same UGREEN power bank at 17:38 and 17:54 SGT. Both reads returned 13 reviews with the same IDs, so these 13 are a stable "featured" set, not a random sample.

Horizontal bar chart of API cost per 1,000 reviews at $0.001389 per call. Trustpilot at 200 per call costs $0.0069; Capterra at 100 per call costs $0.0139; G2 async at 50 per call costs $0.0278. G2 sync at 20 per call costs $0.0695, and Amazon at 13 per call costs $0.1068.

There were also four 429 responses. Between 17:37:59 and 17:38:50 SGT we sent calls 7 seconds apart, and four were rejected. Each response named the key's limit of 10 requests per minute, gave retry_after as 1 second, and said "Nothing was charged". Other requests had already used part of that minute.

The script waited retry_after plus the normal gap, and every retry worked. We capped the test key at 10 requests per minute. The account default is 60 a minute, shared by all keys, and it goes up with total top-ups (pricing page). Check your own key's limit in the console.

The biggest trap: split Trustpilot averages by source

Most competitor tables give each company one Trustpilot average. Our data says that number means very little. From 17:34 to 17:44 SGT we read the newest 200 Trustpilot reviews for six companies (Holded has only 48) and grouped them by the source field. Organic means the reviewer found the page alone. BasicLink, InvitationApi, FileUploadInvitation and Shopify all mean the company sent an invitation.

CompanyOrganic reviewsOrganic averageInvited reviewsInvited averageGapMixed average.
Asana1991.901——1.90.
monday.com1451.53554.512.982.35.
ClickUp372.511634.892.384.45.
Holded352.77134.691.923.29.
CompanyOrganic reviewsOrganic averageInvited reviewsInvited averageGapMixed average.
Anker1322.14684.622.482.98.
UGREEN211.291794.072.783.77.
Dumbbell chart of average Trustpilot stars for organic and invited reviews at five companies. monday.com: 1.53 organic (145 reviews) and 4.51 invited (55); ClickUp: 2.51 (37) and 4.89 (163); Holded: 2.77 (35) and 4.69 (13). Anker: 2.14 (132) and 4.62 (68); UGREEN: 1.29 (21) and 4.07 (179). Asana is not shown, because 199 of its 200 reviews are organic.

The mixed average says ClickUp has 4.45 stars and Asana has 1.90, so ClickUp looks far better. Split the groups, and both have low organic averages: 2.51 and 1.90. Most of the gap comes from invitations. 163 of ClickUp's newest 200 reviews came through an invitation link. monday.com shows the same pattern: 145 organic reviews average 1.53 stars, and 55 invited reviews average 4.51.

Hardware brands are no different. 178 of UGREEN's reviews came from automatic Shopify store invitations, and its 21 organic reviews average 1.29 stars. Our reading is simple. People who come on their own often write because something went wrong. People who get an invitation often write right after a purchase.

Mix the two, and the average measures how many invitations a company sends, not what customers think. Limits apply. Each sample is the newest 200 reviews, and the time spans differ a lot. We did not judge whether any review is real, and we do not judge any company's invitation practice.

"The newest 200" also covers very different time windows. Asana's 200 run from January 31, 2022 to October 3, 2026, almost five years. monday.com's run from December 15, 2024 to October 24, 2026. ClickUp's run from April 1, 2026 to October 22, 2026, under seven months. UGREEN's are the shortest: from August 30, 2026 to the day we read them, October 26, 2026.

In under two months UGREEN collected 200 reviews, and 178 came from store invitations. So one sample is two months of new buyers, and another is five years of long-term users. A report should also cut all sources to one window, for example with the Trustpilot parameter date: "last6months". We did not cut the window this time, because we wanted the full picture.

The website alone cannot show the split. Trustpilot's help center says that every company can invite customers for free by sending links. Automatic invitations (BCC email, store integrations, the API) produce reviews labeled "Verified". "Basic Link" invitations produce reviews labeled "Unprompted review" (Trustpilot Help: Trustpilot invitation methods).

We checked ClickUp's page. A five-star review labeled "Unprompted review" on the website is source: BasicLink and verification_level: invited in the API. A one-star review on the same page with the same label is source: Organic and verification_level: not-verified (Trustpilot: ClickUp reviews). The website calls both "Unprompted", and the API keeps them apart.

That is why the skill's Rules say "split by source, never one average". Trustpilot's own business guidelines ask for invitations without bias (Trustpilot Guidelines for Businesses). The guidelines control how companies invite. They do not change the fact that invited reviewers differ from unprompted ones.

Illustration of a balance scale. The left tray holds a neat stack of review cards that came in through a mail slot, with many stars. The right tray holds a loose pile of cards that people dropped off after they walked in through an open door, mostly with one star. The two trays sit at clearly different heights, and a dashed teal line separates the two sides.
Illustration: invited reviews and unprompted reviews do not belong on the same scale. Generated illustration for this article, no data

Same product, three sites, different complaints

Themes also change from site to site. Below is Asana: 50 reviews from G2 (async), 50 from Capterra and 200 from Trustpilot. We tagged them with the skill's keyword rules v1.1, and one review can hit several themes.

ThemeG2 (50)Capterra (50)Trustpilot (200).
Pricing and billing14%18%43%.
Support12%14%46%.
Learning curve26%22%5%.
Ease of use30%22%7%.
ThemeG2 (50)Capterra (50)Trustpilot (200).
Automation22%38%7%.
Mobile6%2%5.5%.
Grouped bar chart of the share of Asana reviews that mention each theme on G2, Capterra and Trustpilot. Pricing: 14%, 18% and 43%; support: 12%, 14% and 46%; learning curve: 26%, 22% and 5%. Ease of use: 30%, 22% and 7%; automation: 22%, 38% and 7%; mobile: 6%, 2% and 6%. On Trustpilot, support and pricing are far higher than on the other two sites.

Most G2 and Capterra reviewers are team members who use the product. They write about features, such as the learning curve and the automation. On Trustpilot, 46% of Asana reviews mention support and 43% mention pricing or billing. Most of them are about renewals, refunds and locked accounts. monday.com is similar, with 35% pricing and 29% support on Trustpilot.

ClickUp is the exception: automation leads at 39.5%, which fits a page full of invited, active users. The G2 summary rows give G2's own numbers. Asana has 4.4 stars from 14,051 reviews, and "Learning Curve" is its most mentioned con (605 mentions). monday.com has 4.7 stars from 17,294 reviews, and ClickUp has 4.6 from 15,159 (G2: Asana reviews).

So the skill's Limits section says it plainly. Trustpilot reviews of a software company are mostly about billing and support. Read them as a separate signal, and do not merge them with G2 and Capterra.

These are second-version numbers. The first keyword list had the word plan under pricing, with prefix matching. Step 4 of the skill says to read 5 tagged reviews per theme. When we did that, Capterra showed pricing at 58% for Asana, and many of those reviews were about "project planning".

A word count of those 50 Capterra reviews found planning 13 times. The app prefix under mobile also matched appreciate 6 times and approval or approvals 4 times. We switched to whole-word matching and removed plan, app, agent and simple. Asana's Capterra pricing share then fell from 58% to 18%, G2 from 30% to 14%, and Trustpilot from 48.5% to 43%.

Two lessons follow. Keyword rules are cheap and repeatable, but a person must spot-check them. Step 4 is not a formality: on the first run, it fixed a wrong result before it went into a report.

What the finished report looks like

Animated loop of six steps. Step 1, discover: only name and description, 363 characters in context; step 2, activate: read the full SKILL.md, 3,426 characters. Step 3, fetch with fetch_reviews.py, 7 seconds apart, and wait retry_after on 429; step 4, wait for the G2 async job until succeeded. Step 5, tag with classify.py and split Trustpilot by source; step 6, report with cost as the sum of charged_usd. The center reads: 3 competitors × 3 review sites = 9 calls, $0.012501 and 967 reviews.

Step 5 of the skill sets the report layout. Here is the first table, filled with this run's data: reviews read, average stars and cost for each product on each site. The three sites stay in separate columns, with no overall average. The Trustpilot cell shows the mixed average and the organic and invited groups, as the Rules require.

ProductG2: reviews / averageCapterra: reviews / averageTrustpilot: reviews / mixed (organic / invited)API fee.
Asana50 / 4.3850 / 4.76200 / 1.90 (1.90 / only 1 review)$0.004167.
monday.com50 / 4.6497 / 4.57200 / 2.35 (1.53 / 4.51)$0.004167.
ClickUp20 / 4.22100 / 4.60200 / 4.45 (2.51 / 4.89)$0.004167.

The third part of the report lists the top three complaints per product, each with a short quote and its link. We took titles of recent organic one-star and two-star Trustpilot reviews. A title is one line that the reviewer wrote, and no reviewer names appear. For Asana: "Ruthless company" on October 3, 2026, "Forever free doesn't mean forever free" on October 1, and a September 28 review that calls the cancellation policy "sneaky".

For monday.com: three reviews on October 24, October 22 and October 21, 2026, and two of the titles name "customer service". For ClickUp: the October 20, 2026 review "Inflexible, manual "subscription" model" about a 30-day notice to cut seats. An October 5 review describes a locked account after payment. These titles match the theme table. On Trustpilot, all three companies get the most complaints about billing and support, not features.

The last part of the report lists the limits. The sample is the newest batch on each site. Asana has no invited group on Trustpilot to compare. Keyword list v1.1 was spot-checked with only 5 reviews per theme.

We did not let a model write the numbers. Scripts computed every number in the table from the API responses. The model did two jobs. It read samples to find keyword errors in step 4, and it laid out the tables and quotes in step 5. The first job works well only if you ask the model to log each change in the report. The second job almost never goes wrong.

Make it weekly: where scheduled runs can live

The natural rhythm for competitor reviews is once a week, on Monday. Here is where each product can run this skill on a schedule with network access. Claude Code desktop scheduled tasks run on your machine and read ~/.claude/skills/. Cloud scheduled tasks start a fresh cloud session each time. They do not read the local folder. They use only skills enabled in your claude.ai account, or skills in the repo's .claude/skills/ (Claude Code skills docs).

At DevDay on September 29, 2026, OpenAI launched Codex Cloud, which runs tasks while your laptop is closed (DevDay 2026 community recap). The Codex docs do not clearly say that cloud tasks read .agents/skills from the repo. We did not test it, so we draw no conclusion. The Gemini app has schedules that can run a task with a chosen skill (Create & manage skills for Gemini Apps). But as noted above, skill scripts there cannot reach the internet.

Here is the yearly math. One 9-call software report per week is 468 calls a year, or $0.650052 in API fees. A weekly 5-call hardware report adds 260 calls and $0.36114. In our test, the slowest sync call took 88 seconds. With the 7-second gaps and about 5 minutes for the G2 async job, one 9-call report takes under 10 minutes.

A key with 10 requests per minute is enough. If the same key also serves other jobs, treat 429 as normal and retry. Claude Code 2.1.310, released on October 23, 2026, brought the Monitor tool to more deployment types. You can use it to watch a long async job instead of a sleeping script (Claude Code changelog).

Where keyword tagging misses: non-English and hardware reviews

Keywords depend on language. We asked for monday.com's Spanish Trustpilot reviews with lang: "es". A limit of 200 returned 81 reviews, and the newest was from December 28, 2023. With English keywords, 80 of the 81 reviews got no theme. With the skill's Spanish list saas_es, the untagged count fell to 45.

ClickUp has only 10 Spanish reviews. Holded, a Spanish accounting tool, has 100 reviews on Capterra, and about 76 read as Spanish. English rules left 74 untagged, and Spanish rules left 21. Holded also shows a coverage gap on Trustpilot.

At 17:44 SGT, a call without lang returned 48 reviews, all marked en. At 18:29 and 18:30 SGT, calls with lang: "es" and language: "es" both returned 0 rows and were refunded. The Spanish Trustpilot site shows 2,444 reviews for Holded (Trustpilot Spain: Holded). So this run did not get Holded's Spanish reviews, and a report must say "Trustpilot sample: 48 English reviews only".

Hardware reviews fail in a different way. For three 20,000 mAh power banks (Anker, UGREEN, INIU), Amazon US returned 13 featured reviews each, with averages of 4.92, 4.92 and 4.62 stars. These are far above the two brands' organic Trustpilot averages of 2.14 and 1.29, because Amazon's featured reviews lean toward helpful, positive ones. On Trustpilot, 26% of Anker reviews mention durability problems, such as a unit that broke or stopped working. None of that shows in Amazon's 13.

The hardware keyword list also covers Trustpilot poorly: 101 of Anker's 200 and 127 of UGREEN's 200 got no theme. Most of them are about shipping, returns and support, which the hardware list does not cover. We did not change the list to make the numbers look better. The report states the untagged counts.

The context math: 31,581 characters of MCP tools, 363 characters of skill

People often compare skills and MCP, but they use context in different ways. At 17:25 SGT we read the EveryInfra MCP tools/list. The 25 tool definitions total 31,581 characters, or about 7,895 tokens at 4 characters per token. 11 tools are marked read-only and 5 are marked destructive.

The three tools this skill needs, everyinfra_list_capabilities, everyinfra_call_api and everyinfra_get_job, total 3,314 characters. At session start, the skill adds only its name and description: 363 characters, about 91 tokens. The full SKILL.md has 3,426 characters, and it loads only when used.

Horizontal bar chart of characters that go into context. Skill listing entry (name and description): 363 characters, about 91 tokens. Full SKILL.md, read only when used: 3,426 characters, about 857 tokens. Definitions of the 3 MCP tools it needs: 3,314 characters, about 829 tokens. All 25 MCP tool definitions: 31,581 characters, about 7,895 tokens.

These numbers have limits. Claude Code turns on MCP tool search by default, and it loads only tool names and server instructions at session start. So in Claude Code, 25 tools do not cost 7,895 tokens up front (Claude Code MCP docs). For other hosts, check their docs. Codex and Antigravity both have tool allow lists (enabled_tools, enabledTools).

Cut 25 tools to 3, and the definitions fall from 31,581 to 3,314 characters. The MCP spec treats readOnlyHint and destructiveHint as hints to the client, not as security guarantees (MCP specification: Tools). An allow list is more reliable than hints. Our advice: let the skill own the process and the report format, and open only the 3 data tools in MCP. When you use both, the skill should say "use everyinfra_call_api, not other tools".

What one report costs

We priced the API side from the catalog price_usd. In the catalog read on October 26, 2026, g2/reviews, capterra/reviews, trustpilot/reviews and amazon/reviews each cost $0.001389 per call. None of them has a per-row pricing mark. One call returns up to max_limit reviews: 100 for G2, Capterra and Amazon, and 200 for Trustpilot (EveryInfra catalog). A software report on 3 competitors across 3 sites is 9 calls: 9 × $0.001389 = $0.012501.

The charges came to exactly $0.012501, a zero difference. The report read 967 reviews, about $0.0129 per 1,000. A hardware report on 3 power banks is 3 Amazon calls plus 2 Trustpilot calls: 5 × $0.001389 = $0.006945 for 439 reviews. Timeouts, empty results and 429 responses cost nothing, so retries do not grow the bill.

ItemUnit priceCallsAmountNotes.
Software report (G2 + Capterra + Trustpilot)$0.001389 per call9$0.012501967 reviews.
Hardware report (Amazon + Trustpilot)$0.001389 per call5$0.006945439 reviews.
Software report every week for a year$0.001389 per call468$0.650052Same 9 calls each week.
All real calls for this article—31 requests, 23 charged$0.032794Includes 1 amazon/search call ($0.002236).

The AI product side is a subscription, not a per-call fee. We read these public prices on October 26, 2026. Claude Pro is $20 a month, or $17 a month billed yearly, and includes Claude Code (Claude pricing). ChatGPT Plus is $20 a month (OpenAI Help). On Plus, Codex works in the CLI, the IDE extension and the web (Codex pricing). Google AI Pro is $19.99 a month and includes entry-level Antigravity usage (Google AI plans).

Next to these plans, the API fee is small change. The real cost is the plan usage that the model spends to read 967 reviews. No vendor publishes that per review, and we did not measure it, so we give no number.

A bug in the script: "finalizing" is not done

The skill script showed a bug on its first real run, and the lesson is worth its own section. At 17:48 SGT, fetch_reviews.py sent the Asana G2 request in async mode and polled the job. It treated the first status other than running or queued as the end. At 306 seconds it read finalizing, wrote 0 rows and stopped. At 17:55 SGT we checked the same job by hand.

Its status was succeeded, and all 51 rows (50 reviews and 1 summary row) were there. The fix: treat only succeeded, failed, canceled and expired as final, and keep waiting on every other status. This kind of bug hides well inside a skill. When the model sees "0 rows", it writes "no new reviews on G2" without a second thought. So step 2 of the skill says to check the counts, write 0 into the report, and never read 0 as "no reviews".

The responses state the error and charge rules clearly, and the script only needs to read them:

  • 429: error.code is rate_limited, with retry_after in seconds and "Nothing was charged". Wait and retry.
  • 503 timeout: error.code is timeout, and billing.charged is false. Switch to "mode":"async" or lower limit.
  • Empty result: count is 0, and refund.status is succeeded. The charge comes back automatically.
  • Async: 202 returns job_id and poll_url. The charge happens at submit. Poll GET /api/v1/jobs/{job_id} until a final status.

What this skill cannot do, and what to watch

Here is what the skill cannot do, or must do with care. In the Gemini app and the Claude Skills API, skill scripts cannot reach the network, so a connector or MCP must fetch the data. Claude Code cloud sessions and cloud scheduled tasks do not read the local ~/.claude/skills/. Enable the skill in your claude.ai account, or commit it to the repo. In the Claude Skills API, name cannot contain "claude" or "anthropic".

Our name is fine, but a skill named claude-review-helper would fail to upload. Amazon gives only the featured reviews on the product page, so do not compute a "negative review rate" from it. Do not compare companies on Trustpilot without the source split. Write one keyword list per language and per category, and put coverage in the report.

On law and platform rules, we describe data methods only and give no legal advice. The US Federal Trade Commission announced a final rule on August 14, 2024. It bans fake reviews, bought reviews, and rewards that depend on a positive review (FTC press release; 16 CFR Part 465). The rule is about how companies get reviews.

Reading public reviews for competitor analysis is a different activity. Still, keep reviewer names out of reports and keep quotes to a line or two. The skill's Rules already say so.

Industry updates

  • September 29, 2026, OpenAI DevDay: plugins became the shared way to ship work to ChatGPT and Codex. One plugin can carry skills and MCP servers, and the submission process got review tracking (DevDay 2026 community recap; OpenAI DevDay recap). What it means for you: this skill and the EveryInfra MCP server can ship as one plugin. It also installs in ChatGPT on the web (ChatGPT Skills & Plugins).
  • September 30, 2026, Google: skills replace Gems. The Gemini app rollout started on October 13. Gems on personal accounts become read-only on November 17 and disappear on December 17 (Workspace Updates; Gemini Help). What it means for you: if you use Gems for competitor summaries, export the instructions and files before December 17. Data fetches still cannot run inside Gemini app skills.
  • October 19 to October 23, 2026, three Claude Code releases. Version 2.1.304 (October 19, 2026) sends the skill list again after compaction, and /reload-skills now sends only new or changed skills. Version 2.1.309 (October 22, 2026) fixed same-named skills in --add-dir folders, which now run as <folder>:<name>. Version 2.1.310 (October 23, 2026) brought the Monitor tool to more platforms (Claude Code changelog). What it means for you: in a long session that runs many reports, skills no longer drop out after compaction.
  • October 14, 2026, GPT-5.5 retired from Codex with ChatGPT sign-in, with GPT-6.1 Sol and other models in its place (Codex pricing). What it means for you: the skill steps stay the same, but redo the step-4 spot check. With the same keyword rules, a new model may pick different quotes.
  • September 25, 2026, Google published an Antigravity CLI skills Codelab. It uses .agents/skills and installs third-party skills with npx skills add (Google Codelabs; vercel-labs/skills). What it means for you: .agents/skills is becoming the shared project folder across tools, so put new skills there first.

When these findings do not hold

The samples are small, so the limits come first. Theme shares come from the newest 20 to 200 reviews on each site, not all reviews, and the numbers will move next week. "Organic reviews score 1.9 to 3.0 stars lower" comes from one read of five companies. Asana has no comparable invited group, so it is not part of that range. Keyword rules v1.1 were spot-checked with 5 reviews per theme.

The word "support" also matches feature text such as "supports multiple views", and we did not measure that error. The folder paths and behavior of the four products come from the vendors' own docs, read on October 26, 2026. The Codex and Antigravity MCP configs are configuration examples that we did not run. On our machine we tested the skill scripts, the spec validator and the EveryInfra API. If your competitors are not on G2, Capterra, Trustpilot or Amazon, swap in the matching catalog capability, such as google_play/reviews, app_store/reviews or yelp/reviews.

FAQ

What does "skill.md must start with yaml frontmatter (---)" mean? Source: Google autocomplete "skill.md must start with yaml frontmatter (---)", read on Oct 26, 2026. The first line of SKILL.md must be ---. The Claude Code docs say it reads frontmatter only when the opening --- is on the first line. Otherwise the whole file is the body. If the YAML does not parse, the skill still loads, but with no fields (Claude Code skills docs). Run agentskills validate from skills-ref to catch this early.

What is the codex skills location? Source: Google autocomplete "codex skills location" and "codex skills folder". In a repo, use .agents/skills, from the working folder up to the repo root. For one user, use $HOME/.agents/skills. For the machine, use /etc/codex/skills. Codex follows symlinks (Codex Build skills).

How do claude code skills reduce token usage? Source: Google autocomplete "claude code skills to reduce token usage". At session start a skill adds only its name and description, 363 characters for this one. The body loads only when used. Keep the description short and put the key use first. For skills you rarely use, set "name-only" in skillOverrides (Claude Code skills docs). Put long reference text in references/, not in the body.

How do I fix "skill.md description cannot contain xml tags"? Source: Google autocomplete "skill.md description cannot contain xml tags". The Claude Skills API and claude.ai uploads check this. Neither name nor description can contain XML tags, and name cannot contain "claude" or "anthropic" (Claude Skills API guide). Replace any <...> text in the description with plain words.

Can agent skills call outside APIs in the Gemini app? Source: Google autocomplete "agent skills claude" and "gemini skills", and the Gemini Help text. Not today. The help center says scripts that need the internet are not supported. Scripts cannot send requests to outside websites (Gemini Help). Use Gemini's connected apps for the data, and keep only steps and formats in the skill.

Is it safe to install claude code skills from GitHub? Source: Google autocomplete "claude code skills github" and "claude code skills marketplace". Skills can carry scripts, so read SKILL.md and scripts/ before you install. Gemini CLI shows a security prompt when it installs a skill (Gemini CLI Agent Skills docs). Example skills from Anthropic and OpenAI are at anthropics/skills and openai/skills. OpenAI also explains how to test skills with evals (Testing Agent Skills Systematically with Evals).

Further reading

References

  1. Extend Claude with skills, Anthropic (Claude Code docs), read 2026-10-26, https://code.claude.com/docs/en/skills
  2. Agent Skills Specification, agentskills.io, read 2026-10-26, https://agentskills.io/specification
  3. skills-ref reference validator, agentskills (GitHub), 0.1.1, run 2026-10-26, https://github.com/agentskills/agentskills/tree/main/skills-ref
  4. Build skills, OpenAI (Codex docs), read 2026-10-26, https://developers.openai.com/codex/build-skills
  5. Model Context Protocol, OpenAI (Codex docs), read 2026-10-26, https://developers.openai.com/codex/mcp
  6. Agent skills, Google Antigravity Docs, read 2026-10-26, https://antigravity.google/docs/skills/
  7. Migration - Antigravity CLI, Google Antigravity Docs, read 2026-10-26, https://antigravity.google/docs/cli/gcli-migration
  8. MCP, Google Antigravity Docs, read 2026-10-26, https://antigravity.google/docs/mcp
  9. Agent Skills, Gemini CLI docs, read 2026-10-26, https://geminicli.com/docs/cli/skills/
  10. Introducing skills in the Gemini app and Workspace, plus what's next for Gems, Google Workspace Updates, 2026-09-30, https://workspaceupdates.googleblog.com/2026/09/skills-gemini-app-workspace.html
  11. An update on the launch of skills in the Gemini app and Workspace, Google Workspace Updates, 2026-10-13, https://workspaceupdates.googleblog.com/2026/10/an-update-on-launch-of-skills-in-gemini-app-and-workspace.html
  12. Let skills in Gemini tackle your most repetitive tasks, Google blog, 2026-09-30, https://blog.google/products-and-platforms/products/gemini/automate-tasks-with-skills/
  13. Create & manage skills for Gemini Apps, Gemini Help, read 2026-10-27, https://support.google.com/gemini/answer/17094296
  14. About the transition from Gems to skills, Gemini Help, read 2026-10-27, https://support.google.com/gemini?p=gems_to_skills
  15. Using Agent Skills with the API, Anthropic (Claude docs), read 2026-10-26, https://docs.claude.com/en/api/skills-guide
  16. Connect Claude Code to tools via MCP, Anthropic (Claude Code docs), read 2026-10-26, https://code.claude.com/docs/en/mcp
  17. Claude Code changelog, Anthropic, versions 2.1.304 to 2.1.310 (2026-10-19 to 2026-10-23), https://code.claude.com/docs/en/changelog
  18. Equipping agents for the real world with Agent Skills, Anthropic, 2025-10-16, https://www.anthropic.com/research/equipping-agents-for-the-real-world-with-agent-skills
  19. EveryInfra data catalog GET /api/v1/social/catalog, EveryInfra, read 2026-10-26 17:25 SGT, https://api.everyinfra.com/api/v1/social/catalog
  20. EveryInfra MCP (tools/list, tools/call), EveryInfra, called 2026-10-26 17:25 and 17:46 SGT, https://api.everyinfra.com/mcp
  21. monday AI Work Platform product page, Capterra, read 2026-10-26 (script access returns 403; read with a browser engine), https://www.capterra.com/p/147657/monday-com/
  22. Trustpilot invitation methods, Trustpilot Help Center, read 2026-10-26, https://help.trustpilot.com/s/article/Trustpilot-invitation-methods?language=en_US
  23. ClickUp Reviews, Trustpilot, read 2026-10-26 (script access returns 403; read with a browser engine), https://www.trustpilot.com/review/clickup.com
  24. Guidelines for Businesses, Trustpilot, read 2026-10-26, https://corporate.trustpilot.com/legal/for-businesses/guidelines-for-businesses
  25. Asana Reviews, G2, read 2026-10-26 (script access returns 403; read with a browser engine), https://www.g2.com/products/asana/reviews
  26. Tools, Model Context Protocol specification 2025-06-18, read 2026-10-26, https://modelcontextprotocol.io/specification/2025-06-18/server/tools
  27. Plans & pricing, Claude, read 2026-10-26, https://claude.com/pricing
  28. What is ChatGPT Plus?, OpenAI Help Center, read 2026-10-26, https://help.openai.com/en/articles/6950777-what-is-chatgpt-plus
  29. Pricing, OpenAI (Codex docs), read 2026-10-26, https://developers.openai.com/codex/pricing
  30. Google AI Pro & Ultra, Google, read 2026-10-26, https://gemini.google/subscriptions/
  31. How to use AI Agent Skills (with Antigravity CLI), Google Codelabs, 2026-09-25, https://codelabs.developers.google.com/antigravity/how-to-create-agent-skills-for-antigravity-cli
  32. How do you actually set up Antigravity agent skills?, Reddit r/google_antigravity, read 2026-10-26, https://www.reddit.com/r/google_antigravity/comments/1qvrxxx/how_do_you_actually_set_up_antigravity_agent/
  33. Federal Trade Commission Announces Final Rule Banning Fake Reviews and Testimonials, FTC, 2024-08-14, https://www.ftc.gov/news-events/news/press-releases/2024/08/federal-trade-commission-announces-final-rule-banning-fake-reviews-testimonials
  34. 16 CFR Part 465, Rule on the Use of Consumer Reviews and Testimonials, eCFR, read 2026-10-26, https://www.ecfr.gov/current/title-16/chapter-I/subchapter-D/part-465
  35. Create custom subagents, Anthropic (Claude Code docs), read 2026-10-26, https://code.claude.com/docs/en/sub-agents
  36. DevDay 2026 announcements and developer resources, OpenAI Developer Community, 2026-09-29, https://community.openai.com/t/devday-2026-announcements-and-developer-resources/1402006
  37. DevDay 2026 Recap, OpenAI, 2026-09-29, https://openai.com/index/devday-2026-recap/
  38. Skills & Plugins, ChatGPT Learn, read 2026-10-26, https://learn.chatgpt.com/docs/skills-and-plugins
  39. vercel-labs/skills, GitHub, read 2026-10-26, https://github.com/vercel-labs/skills
  40. anthropics/skills, GitHub, read 2026-10-26, https://github.com/anthropics/skills
  41. openai/skills, GitHub, read 2026-10-26, https://github.com/openai/skills
  42. Testing Agent Skills Systematically with Evals, OpenAI Developers blog, 2026-01-22, https://developers.openai.com/blog/eval-skills
  43. Holded reviews (Spanish site), Trustpilot, read 2026-10-26, https://es.trustpilot.com/review/holded.com

Reference BL-54