Agent skill

Blog Taxonomy

by AgriciDaniel in AgriciDaniel/claude-blog

Extract, suggest, and sync tags and categories for blog posts across all major CMS platforms.

MITAuto-check passedBackend & APIs

Install Blog Taxonomy

skills CLI
$ npx skills add AgriciDaniel/claude-blog --skill blog-taxonomy -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install AgriciDaniel/claude-blog blog-taxonomy --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/blog-taxonomy .claude/skills/blog-taxonomy && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
blog-taxonomy
GitHub stars
2.3k
Used in
1 other repo
Token cost
~2.5k tokens
SKILL.md length
892 words
Files
1
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

Extract, suggest, and sync tags and categories for blog posts across all major CMS platforms.

  • Works in 7 steps: Parse Content Structure → Frequency Analysis → Semantic Grouping → …
  • Tag suggestions
  • SKILL.md covers Commands, Tag Suggestion Workflow, CMS Adapters and Taxonomy Audit Workflow, plus 3 more sections
  • Needs CMS_API_KEY

What it does

Blog Taxonomy is an agent skill from AgriciDaniel/claude-blog. Extract, suggest, and sync tags and categories for blog posts across all major CMS platforms. Supports WordPress REST API, Shopify GraphQL, Ghost Content API, Strapi REST/GraphQL, and Sanity GROQ. Generates tag suggestions from content analysis (keyword frequency, heading extraction, semantic grouping), enforces minimum post-count thresholds to prevent thin tag archives, and syncs taxonomy via authenticated API calls. Use when user says "tags", "categories", "taxonomy", "tag suggestions", "sync tags", "WordPress…

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Backend & APIs, covering GraphQL, Blog and article writing and REST APIs. It works with Shopify, WordPress and GraphQL. The repository describes itself as: Claude Code blog skill suite: 30 sub-skills, 5 agents, 5-gate v1.9.0 Blog Delivery Contract, dual-optimized for Google rankings and AI citations. Active development at… The licence is MIT.

When your agent uses it

  • Tag suggestions
  • Tasks that involve GraphQL
  • Tasks that involve Blog and article writing

Example prompts

  • “categories”
  • “taxonomy”
  • “tag suggestions”
  • “/blog-taxonomy”

Requirements

  • A credential in CMS_API_KEY

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Parse Content Structure
  2. Frequency Analysis
  3. Semantic Grouping
  4. Deduplicate and Rank
  5. Inventory
  6. Health Checks
  7. Recommendations

What it can do on your machine

Read from SKILL.md and the folder at commit 2500d4c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are graphql).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • CMS_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Blog Taxonomy loads about 2.5k tokens when it runs. Until then it costs about 139 tokens; SKILL.md has 892 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~139
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from AgriciDaniel/claude-blog at commit 2500d4c, republished under its MIT licence (© AgriciDaniel). 892 words, ~2,466 tokens.

Download SKILL.mdSave it as .claude/skills/blog-taxonomy/SKILL.md (or your agent's skills folder).
name
blog-taxonomy
description
Extract, suggest, and sync tags and categories for blog posts across all major CMS platforms. Supports WordPress REST API, Shopify GraphQL, Ghost Content API, Strapi REST/GraphQL, and Sanity GROQ. Generates tag suggestions from content analysis (keyword frequency, heading extraction, semantic grouping), enforces minimum post-count thresholds to prevent thin tag archives, and syncs taxonomy via authenticated API calls. Use when user says "tags", "categories", "taxonomy", "tag suggestions", "sync tags", "WordPress tags", "Shopify tags".
user-invokable
true
argument-hint
[suggest|sync|audit] [file-or-cms]
license
MIT

Blog Taxonomy

Manage tags, categories, and topic clusters across CMS platforms.

Commands

CommandPurpose
/blog taxonomy suggest <file>Extract candidate tags and categories from content
/blog taxonomy sync <cms>Push taxonomy to CMS via authenticated API
/blog taxonomy audit [directory]Check for thin tags, orphan tags, taxonomy bloat

Tag Suggestion Workflow

Step 1: Parse Content Structure

Read the target file and extract:

  • All H2 and H3 headings (primary topic signals)
  • Bold and italic phrases (emphasis signals)
  • Existing frontmatter tags/categories if present
Step 2: Frequency Analysis

Scan the body text for high-frequency phrases:

  • 1-word terms: minimum 4 occurrences (excluding stop words)
  • 2-word phrases: minimum 3 occurrences
  • 3-word phrases: minimum 2 occurrences

Exclude common non-tag words: articles, prepositions, conjunctions, pronouns.

Step 3: Semantic Grouping

Group related candidates into clusters:

  • Merge singular/plural variants (keep the more common form)
  • Merge hyphenated and non-hyphenated forms
  • Group synonyms under the highest-frequency term
Step 4: Deduplicate and Rank
  • Fuzzy match on slugified names (Levenshtein distance <= 2)
  • Do not auto-merge short slugs under 5 characters using Levenshtein alone; require token overlap or manual review
  • Score each candidate: (frequency * 2) + (heading_presence * 5) + (emphasis * 1)
  • Return top 5-10 ranked suggestions
Output Format
## Tag Suggestions: [Post Title]

| Rank | Tag | Score | Source |
|------|-----|-------|--------|
| 1 | content-marketing | 18 | H2 + 6 mentions |
| 2 | seo-strategy | 14 | H3 + 4 mentions |
| 3 | keyword-research | 11 | 5 mentions + bold |

### Suggested Categories
- Primary: [best-fit category]
- Secondary: [optional second category]

CMS Adapters

Adapter Overview
CMSAPI TypeAuth MethodTags Model
WordPressRESTApplication Passwords (base64)First-class entities with IDs
ShopifyGraphQL (Admin API)Admin API access tokenString array on Article
GhostREST (Admin API)API key with JWT signingFirst-class entities
StrapiREST or GraphQLAPI token (Bearer)User-defined content type
SanityGROQ / MutationsProject token (Bearer)Document type
WordPress Adapter

List tags:

GET {CMS_URL}/wp-json/wp/v2/tags?per_page=100&search={keyword}
Authorization: Basic {base64(username:app_password)}

Create tag:

POST {CMS_URL}/wp-json/wp/v2/tags
Body: {"name": "Tag Name", "slug": "tag-name", "description": "Optional"}

List categories (hierarchical, supports parent field):

GET {CMS_URL}/wp-json/wp/v2/categories?per_page=100

Create category:

POST {CMS_URL}/wp-json/wp/v2/categories
Body: {"name": "Category", "slug": "category", "parent": 0}

Assign tags to post:

POST {CMS_URL}/wp-json/wp/v2/posts/{id}
Body: {"tags": [1, 2, 3], "categories": [4]}

Pagination: follow X-WP-TotalPages header for full listing.

Shopify Adapter

Tags on Shopify are string arrays on the Article object, not first-class entities.

Update article tags (GraphQL Admin API):

graphql
mutation {
  articleUpdate(id: "gid://shopify/Article/123", article: {
    tags: ["tag-one", "tag-two", "tag-three"]
  }) {
    article { id tags }
    userErrors { field message }
  }
}

List all tags in use (GraphQL):

graphql
{
  articles(first: 250, after: $cursor) {
    pageInfo { hasNextPage endCursor }
    edges {
      node { id title tags }
    }
  }
}

Auth header: X-Shopify-Access-Token: {token}

Pagination: loop while pageInfo.hasNextPage is true, passing endCursor as the next $cursor.

Note: REST API marked legacy Oct 2024. GraphQL required for new apps since Apr 2025.

Ghost Adapter

List tags:

GET {CMS_URL}/ghost/api/admin/tags/?limit=all
Authorization: Ghost {jwt_token}

Create tag:

POST {CMS_URL}/ghost/api/admin/tags/
Body: {"tags": [{"name": "Tag Name", "slug": "tag-name"}]}

JWT generation: sign with admin API key (id:secret format), iat = now, exp = 5 min, audience = /admin/.

Strapi Adapter

Endpoint auto-generated from content types. Typical setup:

GET {CMS_URL}/api/tags?pagination[pageSize]=100
POST {CMS_URL}/api/tags
Body: {"data": {"name": "Tag Name", "slug": "tag-name"}}
Authorization: Bearer {api_token}

Pagination: increment pagination[page] until all pages are exhausted.

Strapi v4 responses use the data wrapper with attributes; Strapi v5 uses a flatter response shape. Detect the version or normalize both shapes before deduplication. Check your content type schema for field names.

Sanity Adapter

Query tags (GROQ):

*[_type == "tag"] { _id, name, slug }

Create tag (Mutations API):

POST https://{project_id}.api.sanity.io/{SANITY_API_VERSION}/data/mutate/{dataset}
Body: {"mutations": [{"create": {"_type": "tag", "name": "Tag", "slug": {"current": "tag"}}}]}
Authorization: Bearer {token}

Default SANITY_API_VERSION to a current tested API date supplied by the project environment; do not hard-code it in generated requests.

Taxonomy Audit Workflow

Step 1: Inventory

Scan all posts in the target directory (or fetch from CMS). Build a map:

  • tag_name -> [list of post files/IDs using this tag]
  • category_name -> [list of post files/IDs]
Step 2: Health Checks
CheckThresholdAction
Thin tag archives< 5 posts per tagReview for merge or noindex after traffic, intent, and link checks
Orphan tags0 postsRecommend deletion
Tag bloatMore than max(50, post_count * 0.25) total tags, adjusted for taxonomy purposeRecommend consolidation
Category depth> 3 levelsRecommend flattening
Uncategorized postsNo category assignedAssign to appropriate category
Duplicate slugsSame slug, different nameMerge into canonical version
Show full SKILL.md (351 more words)Show less
Step 3: Recommendations

Group findings by priority:

  • Critical: orphan tags creating empty archive pages (crawl waste)
  • High: thin tags with < 5 posts after traffic, intent, and link checks
  • Medium: tag bloat above the scaled threshold (diluted taxonomy, harder to navigate)
  • Low: naming inconsistencies (mixed case, hyphen vs space)
Output Format
## Taxonomy Audit: [Site/Directory]

**Total tags**: [n] | **Total categories**: [n]
**Healthy**: [n] | **Thin**: [n] | **Orphan**: [n]

### Critical Issues
- [orphan tags list]

### Recommendations
1. Merge [tag-a] and [tag-b] (same topic, [n] combined posts)
2. Delete orphan tags: [list]
3. Merge or noindex tag archives with < 5 posts only after traffic, intent, and link checks

Site-Wide Guidelines

  • Aim for 5-10 main categories per site (broad topics)
  • Tags should have at least 5 posts before creating an archive page
  • Use consistent slug format: lowercase, hyphen-separated
  • Every post needs exactly 1 primary category
  • Tags per post: 3-8 recommended, never exceed 15

Environment Variables

VariablePurposeExample
CMS_TYPEPlatform identifierwordpress, shopify, ghost, strapi, sanity
CMS_URLHTTPS base URL of the CMShttps://example.com
CMS_ALLOWED_HOSTSOptional comma-separated allowlist for CMS hostsexample.com,admin.example.com
CMS_USERNAMEWordPress username when using Application Passwordseditor@example.com
CMS_API_KEYAuthentication credentialWordPress app password, API token, or key
SANITY_API_VERSIONSanity API date for mutationsv2026-07-01

These must be set in the shell environment. Never store credentials in files or commit them to version control. The skill reads them via $CMS_TYPE, $CMS_URL, $CMS_USERNAME, $CMS_API_KEY, and optional platform-specific variables at runtime.

Security rule for CMS calls: require HTTPS, allow only http and https parsing paths but send authenticated requests over HTTPS only, resolve DNS and block loopback/private/link-local/reserved IPs, validate redirects with the same checks or disable redirects, cap timeouts at 10 seconds, and enforce CMS_ALLOWED_HOSTS when set.

Error Handling

  • Missing environment variables: If CMS_TYPE, CMS_URL, or CMS_API_KEY is unset, or if WordPress lacks CMS_USERNAME, report which variable is missing and provide the expected format
  • Invalid credentials: If the CMS API returns 401/403, report "Authentication failed - check CMS_USERNAME/CMS_API_KEY" and do not retry
  • Connection timeouts: If the CMS endpoint is unreachable after 10 seconds, report the timeout and suggest checking CMS_URL
  • Duplicate tag slugs: If a tag already exists on the CMS, skip creation and note "Tag already exists: [name]"
  • Rate limits: If the CMS API returns 429, honor Retry-After when present; otherwise use exponential backoff and retry once. Report if the limit persists
  • Unsupported CMS: If CMS_TYPE is not one of the 5 supported platforms, list the valid options and exit

© AgriciDaniel, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/blog-taxonomy of AgriciDaniel/claude-blog.

Open the folder on GitHubat commit 2500d4c

Used in 1 other repository

We found 4 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in AgriciDaniel/claude-blog, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Blog Taxonomy next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Blog Taxonomy compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Blog Taxonomy this skillAgriciDaniel/claude-blog2.3k1 repos~2.5kAutomated safety check: PassMIT
Shopifyeinverne/dotfiles121—~2.8kAutomated safety check: PassGPL-3.0
Shopify Upgrade Migrationjeremylongshore/tons-of-skills-marketplace2.8k—~1.3kAutomated safety check: PassMIT
ShopifyMicrock/ordinary-claude-skills404—~1.9kAutomated safety check: PassCustom licence
Wordpress Contentjezweb/claude-skills1.1k—~2.6kAutomated safety check: PassMIT
Nodejs Backend Patternsever-works/ever-works16218 repos~4kAutomated safety check: PassAGPL-3.0

Similar skills

  • Shopify

    einverne/dotfiles

    Guide for implementing Shopify apps, extensions, themes, and integrations using GraphQL/REST APIs, Shopify CLI, Polaris UI, and various extension types (Checkout, Admin, POS).

    121 GitHub stars~2.8k tokensUpdated 1 mo ago
    Backend & APIsAuto-check passed
  • Shopify Upgrade Migration

    jeremylongshore/tons-of-skills-marketplace

    Upgrade Shopify API versions and migrate from REST to GraphQL with breaking change detection.

    2.8k GitHub stars~1.3k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Shopify

    Microck/ordinary-claude-skills

    Build Shopify applications, extensions, and themes using GraphQL/REST APIs, Shopify CLI, Polaris UI components, and Liquid templating.

    404 GitHub stars~1.9k tokensUpdated 1 mo ago
    Backend & APIsAuto-check passed
  • Wordpress Content

    jezweb/claude-skills

    Create and manage WordPress posts, pages, media, categories, tags, and menus via WP-CLI or the REST API.

    1.1k GitHub stars~2.6k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Nodejs Backend Patterns

    ever-works/ever-works

    Build production-ready Node.js backend services with Express/Fastify, implementing middleware patterns, error handling, authentication, database integration, and API design best practices.

    162 GitHub starsUsed in 18 repos~4k tokens
    Backend & APIsAuto-check passed
  • API Designer

    Jeffallan/claude-skills

    Designs REST and GraphQL APIs from resource modeling to an OpenAPI 3.1 contract, with versioning, pagination and RFC 7807 error handling.

    12k GitHub starsUsed in 1 repo~2k tokens
    Backend & APIsAuto-check passed

More from AgriciDaniel/claude-blog

All 39 skills in this repo
  • Blog Google

    AgriciDaniel/claude-blog

    Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…

    2.3k GitHub starsUsed in 1 repo~3.3k tokens
    Auto-check: notes
  • Blog Audio

    AgriciDaniel/claude-blog

    Generate audio narration of blog posts using Google Gemini TTS.

    2.3k GitHub starsUsed in 1 repo~2.2k tokens
    Auto-check: notes
  • Blog Flow

    AgriciDaniel/claude-blog

    FLOW framework integration for bloggers. An agent skill from AgriciDaniel/claude-blog.

    2.3k GitHub starsUsed in 1 repo~2k tokens
    Auto-check passed
  • Blog Notebooklm

    AgriciDaniel/claude-blog

    Query Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents.

    2.3k GitHub starsUsed in 1 repo~2.5k tokens
    Auto-check: warnings
  • Blog Image

    AgriciDaniel/claude-blog

    AI image generation and editing for blog content powered by Gemini via MCP.

    2.3k GitHub stars~3.4k tokensUpdated 2 days ago
    Auto-check passed
  • Blog Cluster

    AgriciDaniel/claude-blog

    Semantic topic cluster planning and automated execution engine for claude-blog.

    2.3k GitHub starsUsed in 1 repo~4.9k tokens
    Auto-check passed

Questions about Blog Taxonomy

What does Blog Taxonomy do?

Extract, suggest, and sync tags and categories for blog posts across all major CMS platforms. Blog Taxonomy is an agent skill from AgriciDaniel/claude-blog. Extract, suggest, and sync tags and categories for blog posts across all major CMS platforms.

When should I use Blog Taxonomy?

Blog Taxonomy fits situations like: tag suggestions; tasks that involve GraphQL; tasks that involve Blog and article writing.

How do I install Blog Taxonomy in Claude Code?

Run `npx skills add AgriciDaniel/claude-blog --skill blog-taxonomy -a claude-code`. Or copy the skill folder (skills/blog-taxonomy in AgriciDaniel/claude-blog) into .claude/skills/blog-taxonomy in your project. Claude Code loads it when a task matches its description.

How do I install Blog Taxonomy in Codex?

Run `npx skills add AgriciDaniel/claude-blog --skill blog-taxonomy -a codex`. Or copy the skill folder (skills/blog-taxonomy in AgriciDaniel/claude-blog) into .agents/skills/blog-taxonomy in your project. Codex loads it when a task matches its description.

Can I use Blog Taxonomy in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AgriciDaniel/claude-blog --skill blog-taxonomy -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/blog-taxonomy, .gemini/skills/blog-taxonomy, .github/skills/blog-taxonomy and .opencode/skills/blog-taxonomy in your project.

What does Blog Taxonomy need to run?

Going by SKILL.md and its folder, Blog Taxonomy needs credentials named CMS_API_KEY. Our summary lists: A credential in CMS_API_KEY.

Does Blog Taxonomy access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Blog Taxonomy safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Blog Taxonomy use?

Blog Taxonomy is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Blog Taxonomy use?

About 2.5k tokens (SKILL.md is roughly 9.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Blog Taxonomy?

Skills that share tags, products or a category with Blog Taxonomy: Shopify (einverne/dotfiles, 121 stars), Shopify Upgrade Migration (jeremylongshore/tons-of-skills-marketplace, 2.8k stars), Shopify (Microck/ordinary-claude-skills, 404 stars) and Wordpress Content (jezweb/claude-skills, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Blog Taxonomy?

AgriciDaniel (a GitHub user) maintains it in AgriciDaniel/claude-blog, which has 2,348 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 9, 2026.

Source: AgriciDaniel/claude-blog on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.