26 Composio toolkits ship duplicate skills under underscore and hyphen directory names

Author: Chirag6722Created Aug 13, 2026Updated Aug 13, 2026

Problem

26 Composio toolkits ship two skill directories each — one named with the toolkit's raw id (underscores) and one with a hyphenated slug:

composio-skills/zoho_mail-automation/      composio-skills/zoho-mail-automation/
composio-skills/google_maps-automation/    composio-skills/google-maps-automation/
composio-skills/wave_accounting-automation/ composio-skills/wave-accounting-automation/
...

Full list: anthropic_administrator, capsule_crm, docker_hub, fillout_forms, google_admin, google_classroom, google_maps, google_search_console, launch_darkly, lemon_squeezy, many_chat, microsoft_clarity, mistral_ai, new_relic, onesignal_rest_api, ring_central, share_point, similarweb_digitalrank_api, survey_monkey, wave_accounting, zoho_bigin, zoho_books, zoho_desk, zoho_inventory, zoho_invoice, zoho_mail.

Both members of every pair were added in the same bulk commit (7404a6c, "feat: add composio toolkit specific skills"), so this is a generator that emitted each toolkit twice under two naming conventions rather than a deliberate alias.

Why it matters

Ambiguous triggering and wasted context. Codex loads every skill's description eagerly and picks skills by matching them against the request. Two skills describing the same toolkit in near-identical words means the metadata for 26 toolkits is paid for twice and the choice between them is arbitrary.

Contradictory guidance in 3 cases. For ring_central, wave_accounting and zoho_desk, the two files say opposite things. The hyphenated version documents that the toolkit has no tools in Composio:

Status: Toolkit Not Available — RUBE_SEARCH_TOOLS returned no zoho_desk-specific tools. […] Ticket creation queries returned Freshdesk, HubSpot, and Zendesk tools

while the underscored version instructs the agent to discover and execute zoho_desk tools as though they exist. Following the latter, tool discovery returns a different vendor's tools — and the skill's own instruction is to execute what discovery returned. An agent asked to file a Zoho Desk ticket can end up creating one in Zendesk or Freshdesk.

Invalid directory names. All 26 underscored directories fail the lowercase-hyphenated-slug convention every other skill follows, along with two unrelated directories whose names begin with a stray hyphen: -21risk-automation and -2chat-automation.

Root cause

The bulk generator ran once per toolkit id and once per display-name slug, with nothing checking that two directories normalise to the same skill. Nothing in the repo detects it: there is no uniqueness rule anywhere (see #222 for the absence of validation generally).

Proposed solution

  1. Keep one directory per toolkit, the hyphenated one, and delete the underscored duplicate. The hyphenated version is the one with a valid directory name and toolkit-specific content: either richer workflows, or — in the three contradictory cases — a researched availability note that names the exact wrong-vendor tools discovery returns, which is precisely the failure the generic template walks into. What is deleted is a uniform template whose only unique sections (Search Before Action, Pagination, Error Handling, Batch Operations) are generic boilerplate repeated across hundreds of other skills.
  2. Rename -21risk-automation21risk-automation and -2chat-automation2chat-automation, fixing their name: frontmatter, so every skill directory is a valid slug.
  3. Add a uniqueness rule to the validator proposed in #222, so no future submission can add a second directory normalising to an existing skill's slug.

Neither composio-skills/.claude-plugin/marketplace.json nor the README references any of the 26 duplicated directories, so nothing else needs updating.

Source: composio-community/awesome-codex-skills