Skip to content

feat(taxonomy): split capability into skill + tool axes (RFC-AI-0005)#641

Merged
potiuk merged 1 commit into
mainfrom
feat/capability-taxonomy
Jun 29, 2026
Merged

feat(taxonomy): split capability into skill + tool axes (RFC-AI-0005)#641
potiuk merged 1 commit into
mainfrom
feat/capability-taxonomy

Conversation

@potiuk

@potiuk potiuk commented Jun 29, 2026

Copy link
Copy Markdown
Member

What

Reviews the capability taxonomy and fixes the drift spotted in review:
one capability vocabulary was doing two incompatible jobs. It named
a workflow-lifecycle phase (right for skills) but was also stamped on
tools, collapsing 24 of 33 tools into a meaningless capability:setup
and leaving four capabilities (triage/review/fix/reassess) with
zero tools. Implements RFC-AI-0005 (added here).

Two orthogonal axes

  • Skill capability capability:* — the lifecycle phase: triage,
    review, fix, intake, reconciliation, resolve, reassess,
    stats, and setup split into platform (the setup-* family)
    and authoring (write-skill, optimize-skill).
  • Tool capability — the interface a tool provides:
    contract:<name> when it implements a capability contract under
    tools/<contract>/ (tracker, source-control, mail-archive,
    mail-source, mail-draft, cve-authority, report-relay,
    scan-format, project-metadata), or substrate:<name>
    (analytics, sandbox, action-guard, privacy, framework-dev).
    This kills the capability:setup grab-bag and makes a tool's
    capability equal the contract it implements.

A skill consumes contracts; a tool provides one — the edge the old
single axis couldn't express.

Scope of the change (49 files)

  • docs/rfcs/RFC-AI-0005.md — the taxonomy RFC, documenting all
    dimensions (area / capability [two-axis] / kind / mode / organization /
    standalone) + the migration.
  • skill-and-tool-validatorALLOWED_CAPABILITIES → per-axis
    SKILL_CAPABILITIES + TOOL_CAPABILITIES; skill frontmatter validated
    on Axis 1, tool README on Axis 2; token regex widened for
    contract:/substrate: + hyphens; tests updated.
  • All 33 tools re-labelled to contract:/substrate: values.
  • 10 capability:setup skills re-labelled platform/authoring.
  • docs/labels-and-capabilities.md rewritten as two capability
    tables + two maps; AGENTS.md, tools/AGENTS.md,
    docs/adapters/authoring.md, and the write-skill scaffold updated.

Verification

skill-and-tool-validate EXIT 0 (capability-sync passes against the new
two-table maps); validator pytest + mypy green; doctoc / markdownlint /
lychee / placeholder all green.

🤖 Generated with Claude Code

…contract:*/substrate:*) axes

Implements RFC-AI-0005. "Capability" was one vocabulary doing two jobs:
a workflow-lifecycle phase (right for skills) stamped onto tools (wrong),
which collapsed ~75% of tools into a meaningless capability:setup bucket
and left four capabilities with no tool ever using them.

Two orthogonal axes now:
- Skill capability `capability:*` — the lifecycle phase (triage, review,
  fix, intake, reconciliation, resolve, reassess, stats) + setup split
  into `platform` (setup-* family) and `authoring` (write-skill,
  optimize-skill).
- Tool capability — the interface a tool provides: `contract:<name>`
  when it implements a capability contract under tools/<contract>/
  (tracker, source-control, mail-archive, mail-source, mail-draft,
  cve-authority, report-relay, scan-format, project-metadata), or
  `substrate:<name>` (analytics, sandbox, action-guard, privacy,
  framework-dev). Replaces the capability:setup grab-bag.

Changes:
- docs/rfcs/RFC-AI-0005.md — the taxonomy RFC (covers area / capability
  [two-axis] / kind / mode / organization / standalone labels + migration).
- skill-and-tool-validator: ALLOWED_CAPABILITIES → SKILL_CAPABILITIES +
  TOOL_CAPABILITIES; per-axis validation; token regex widened for
  contract:/substrate: + hyphens; tests updated.
- All 33 tools re-labelled to contract:/substrate: values.
- The 10 capability:setup skills re-labelled platform/authoring.
- docs/labels-and-capabilities.md — two capability tables + two maps;
  AGENTS.md + tools/AGENTS.md + docs/adapters/authoring.md + write-skill
  scaffold updated to the new vocab.

Validator EXIT 0; validator pytest + mypy green.

Generated-by: Claude Code (Opus 4.8)
@potiuk

potiuk commented Jun 29, 2026

Copy link
Copy Markdown
Member Author

Hey @andreahlert -> I want to get it merged soon to be able to make last final cleanup of our site. It does not mean that we will not dicuss taxonomy, it's more to get a clean state that we can discuss about it. I have found that by iterating on the website and trying to make it more "user approachable", i was able to modify some of the taxonomy stuff - modes/ capabilities and .... looking at the website - they make awfully lot of sense when cleaned up / organized. And it's way easier to "sell" concept of Magpie when this is cleaned up.

But - it does not mean that the discussion is closed - I would say having a nice, well organized structure and "cleaned up/reviewed refactored taxonomy" will allow us to have a way more meaningful discussion on Taxonomy - approachable by more people, because it wiil not be abstract, but based on something tangible and reasoning about it will be easier (I already found it way easier when I worked on the site).

@potiuk potiuk merged commit 8ca01ca into main Jun 29, 2026
30 checks passed
@potiuk potiuk deleted the feat/capability-taxonomy branch June 29, 2026 08:00
@justinmclean

Copy link
Copy Markdown
Member

It's a good idea to run the review skill over things before merging.

Code quality / correctness — major

skills/write-skill/SKILL.md (~line 376) — the worked multi-capability example now reads:

setup-isolated-setup-doctor does capability:authoring + capability:reassess

but this same PR relabels that skill's frontmatter to capability:platform + capability:reassess. authoring is reserved for skills that author other skills (write-skill, optimize-skill); the setup-doctor is a platform skill. This is a bad mechanical replacement — setup→authoring where it should have been setup→platform. It matters because it's the example inside the canonical skill-authoring skill, so a contributor copying it mislabels their skill, and the validator won't catch it (it's prose in a skill body, not frontmatter). Fix: capability:platform + capability:reassess.

Code quality / consistency — minor

Stale "nine buckets" count. Splitting setup into platform + authoring makes ten skill capabilities, but three references the PR leaves untouched still say nine: docs/labels-and-capabilities.md (~line 324, "doesn't fit any of the nine buckets cleanly"), and skills/write-skill/SKILL.md (~line 378 "any of the nine buckets at all" and ~line 403 "nine capability buckets"). The PR creates the inconsistency by doing the split, so these should move to "ten" in the same change.
Categories checked, clean

License headers (RFC-AI-0005.md carries the Apache SPDX header; .md exempt regardless), third-party license, compiled artifacts, and the security model (taxonomy-only change, no disclosure-signal or threat-model surface touched) — no findings.

@justinmclean

Copy link
Copy Markdown
Member

Overall this is a good change and the right direction.

The problem it fixes is real. One set of labels was being used for two different things: what a skill does (a step in a workflow) and what a tool is (a piece of plumbing). Those aren't the same kind of thing, so trying to label both the same way pushed most tools into a vague "setup" bucket that didn't tell you anything useful. Splitting them into two separate label systems is the correct fix.

My main concern is the new "substrate" label. Right now, it just means "a tool that doesn't fit one of the named slots," which describes what it isn't, not what it is. It already includes five distinct kinds of tools, and one of them ("framework-dev") covers six tools on its own. There's no rule for what belongs in it or when to add a new type, so over time, it could turn into the same junk drawer the old "setup" label was. Before that happens, it would help to write down what "substrate" is actually for and a simple rule for adding new ones.

Two smaller things. There are now three label prefixes a reader has to keep straight, and a reader has to know which one goes with skills and which goes with tools. That confusion is what probably caused the one labeling mistake I flagged in the review above.

@potiuk

potiuk commented Jun 29, 2026

Copy link
Copy Markdown
Member Author

Absolutely - I plan to start discussion about it today - when i complete the website refresh with all the taxonomy in .. Those are "quick wins" to make our website "complete" and surface some of the things like "Vendor Neutrality" and how it is achieved, and "Organisation agnostic" approach - both important to have "up" on our website with consitent (even if not final) taxonomy once we get announcements. I think I am close to get a landing page and structure that is pretty straightforward and not too confusing what Magpie is and who can use it for what :).

@potiuk

potiuk commented Jun 29, 2026

Copy link
Copy Markdown
Member Author

#645 fix

potiuk added a commit that referenced this pull request Jun 29, 2026
* docs(taxonomy): fix relabel collateral from the capability split

Deep review of the #641 capability-axis split surfaced prose that the
mechanical relabel left in the old single-vocabulary state — the
validator can't catch these because they live in skill/doc bodies, not
frontmatter or the machine-checked maps.

Flagged in #641 review:
- write-skill worked example said `setup-isolated-setup-doctor` is
  `capability:authoring` — wrong. `authoring` is reserved for skills
  that author other skills (write-skill, optimize-skill); the
  setup-doctor is a platform skill. Fixed to `capability:platform`
  (matching its frontmatter `platform + reassess`).
- stale "nine buckets" count (the split makes ten skill capabilities)
  in docs/labels-and-capabilities.md and two write-skill references.

Found in the deep review (lifecycle phases wrongly stamped on tools,
which RFC-AI-0005 explicitly abolishes for the tool axis):
- cve-org row carried `*(resolve)*` / `*(intake)*` skill-phase tags.
- mail-source row said "the abstraction is setup".
- ponymail row described the removed "dual role / intake-pipeline
  component".
- skill-evals row said "setup infrastructure".
- the Capability-to-tool map header still implied dual-value rows.

All rewritten to describe the interface the tool provides. Validator
green; no frontmatter or capability-sync changes.

Generated-by: Claude Code (Opus 4.8)

* docs(taxonomy): gmail declares both mail contracts; classify MCP servers

gmail does inbound report intake *and* outbound courtesy-reply drafting,
so it provides two contracts, not one. Declare
`contract:mail-source + contract:mail-draft` and thread the mail-source
membership through both directions so it stays consistent:

- tools/gmail README capability line + role text.
- docs/labels-and-capabilities.md tool-map row + the dual-value note in
  the map header (gmail is the one tool carrying two values today).
- tools/mail-source README and the two docs/vendor-neutrality backend
  rosters now list the Gmail API as a mail-source backend.

Also add an "MCP servers, classified by capability" section to
docs/labels-and-capabilities.md: the four MCP servers the framework's
tools consume (GitHub, Gmail, PonyMail, apache-projects), each
classified by the capability its wrapping tool provides — an MCP is a
transport behind a contract, not a separate axis.

Validator green (capability-sync matches the dual gmail label).

Generated-by: Claude Code (Opus 4.8)

---------

Co-authored-by: Tester <t@example.com>
HarshMehta112 pushed a commit to HarshMehta112/magpie that referenced this pull request Jun 29, 2026
Resolve docs/labels-and-capabilities.md conflict: adopt the new
contract:/substrate: tool-capability taxonomy from apache#641/apache#645 and relabel
the tools/asf-svn row to contract:source-control. Update tools/asf-svn
README to the new taxonomy and add the Organization: ASF declaration.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants