Commerce agent● operational

agents/taxonomy-categorization

Somewhere in your catalog is a category called “Other.”

It has four thousand SKUs in it. None of them are filterable, none rank, and none can be syndicated — because the category determines the template, the required attributes and the rules. Category is not metadata. It is the root dependency.

Simultaneous classification1 SKU · 4 standards

input

ProCraft Brushless Cordless Impact Driver 20V Max 1/4in Hex

GoogleCordless Impact Drivers99.9%
AmazonImpact Drivers100%
UNSPSCImpact drivers99.8%
GS1 GPCheld at parent61.4%

Three standards resolve to a leaf · one honestly does not

The job

Category is not a label. It is the root dependency.

Teams treat categorisation as filing — a tidy-up task worth doing when there is time. It is not. The leaf category determines which template applies, which attributes are required, which compliance rules bind, which facets appear, and which search queries you are eligible for at all.

A SKU in the wrong node fails downstream in ways that look like unrelated problems: a rejected feed, a missing filter, an unexplained ranking gap.

It is also not one problem. A single SKU needs a Google node for shopping feeds, an Amazon browse node to list, a UNSPSC code for procurement buyers, and a GS1 brick for data pools. These trees were built by different bodies for different purposes and they disagree.

So the agent classifies into all of them at once, and reports each independently — including when one of them has no honest answer.

One descent

Down the tree, one level at a time.

Each step names the evidence that chose the branch. GS1 GPC is the interesting one — it stops.

Standard

Product Taxonomy

Code

GPT-6491

L0

├─Hardware

100%
L1

├─Tools

100%
L2

├─Impact Drivers & Drills

"impact driver" in title · hex chuck attribute

99.9%
L3

└─Cordless Impact Drivers

battery platform attribute present · 20V Max

99.9%
Capability ledger

Any classifier can reach 100% coverage by inventing a bucket. Coverage is not the metric.

Does

Classifies into several standards at once, because a SKU needs a Google node for shopping feeds, an Amazon browse node for listing, and a UNSPSC code for procurement customers — and these trees do not agree with each other.

Uses attributes and imagery, not only the title, so a product whose name says nothing useful is still classified from its specification.

Explains each descent step, naming the evidence that selected a branch, so a disputed classification can be argued with rather than merely overridden.

Re-classifies when a standard revises its tree, and reports which SKUs moved.

Learns your own overrides — a correction applied once becomes a rule for structurally similar products.

Will not

Guess a leaf to avoid holding at a parent. A 61% split between two sibling nodes is reported as a 61% split.

Create a catch-all node. There is no "Other", "Miscellaneous" or "Uncategorised" bucket in the output.

Force a SKU into a standard where no honest node exists, rather than reporting the standard as unmappable.

Silently reclassify a product a human has pinned to a category.

Use a competitor's classification as evidence — their node choice is not a fact about your product.

Invocation

Runs ahead of listing and compliance, since both depend on the node it returns.

One call, every standard you publish against.

Direct invocation
POST /v1/agents/taxonomy-categorization/run

{
  "sku": "PC-ID20-BL",
  "standards": ["google", "amazon", "unspsc", "gpc"],
  "min_leaf_confidence": 0.95,
  "on_ambiguous": "hold_at_parent"
}
Response
{
  "run_id": "run_b410fe93",
  "google": { "code": "GPT-6491", "confidence": 0.999 },
  "amazon": { "code": "NODE_228013", "confidence": 1.0 },
  "unspsc": { "code": "27112713", "confidence": 0.998 },
  "gpc": {
    "held_at": "Drilling / Driving Machines (Powered)",
    "candidates": [
      { "brick": "Impact Driver", "p": 0.614 },
      { "brick": "Impact Wrench", "p": 0.386 }
    ],
    "resolve_with": "drive_size"
  }
}
On ingest

Classifies new SKUs as they arrive, before anything downstream runs.

On enrichment

Re-runs when a new attribute might resolve a held classification.

On tree revision

Fires when a standard publishes a new version and reports what moved.

On override

Learns from a human correction and applies it to similar products.

Deploy

Send us everything in “Other.”

Export whatever is sitting in your catch-all category. We will classify it into every standard you publish against, return the confidence and evidence for each decision, and flag the ones no honest classifier should resolve without more data.

Titles and attributes only · No integration · Results in 5 working days