Skip to content

docs(crm-agent): SKILL.md — strip host/project-specific accretion#73

Merged
carvychen merged 2 commits into
mainfrom
docs/skill-md-compat-honest
May 10, 2026
Merged

docs(crm-agent): SKILL.md — strip host/project-specific accretion#73
carvychen merged 2 commits into
mainfrom
docs/skill-md-compat-honest

Conversation

@carvychen
Copy link
Copy Markdown
Owner

@carvychen carvychen commented May 10, 2026

Summary

Started as a focused fix to one overclaim in the Compatibility section. After review, the bigger issue surfaced: SKILL.md had accreted host-specific and project-specific content that violates the host-portable promise from ADR 0009. A skill bundle dropped into Claude Desktop or any other MCP host should not contain "Reference deployments: Bicep / run_mcp_server_local.py" or "Verified by us in Claude Code via proxy" — those are project-internal facts.

This PR strips that accretion back to the host-agnostic core.

Removed

Section Why
"Single-source note" callout (about in-repo agent + AF SkillsProvider) Project-internal; external customers don't care which class our agent uses to consume the bundle. ADR 0009 itself documents this.
"Setup" 3-step section enumerating Claude Desktop / VS Code / Custom agent wiring Each host has its own MCP docs; the bundle isn't the right place to teach hosts how MCP works.
"Reference deployments: Bicep / func start / run_mcp_server_local.py" paragraph Pure project-specific, already covered in docs/deployment/walkthrough-zh.md + llm-foundry-zh.md.
"Compatibility" section's "Verified end-to-end in this repo" + "Designed-for, not yet verified by us" "In this repo" framing falls apart the moment the bundle is dropped elsewhere.
Frontmatter compatibility: enumerating named hosts Generalized to "any client speaking Streamable HTTP MCP and attaching Authorization Bearer per request".
"Further reading" link to "Main repo docs/" Bundle shouldn't reach back into specific project layout.

Kept (host-agnostic)

  • Frontmatter (generalized).
  • 2-line intro: what the skill does + how to wire (.mcp.json + host docs).
  • Available tools table — the contract.
  • Rating values / Dates / FIELD_REFERENCE.md pointer.
  • SOP § 1-4 (name resolution, destructive confirm, RLS respect, error fidelity).
  • 3 example dialogues.
  • references/FIELD_REFERENCE.md link (still inside the bundle).

Net: 119 → 95 lines (-20%).

Where the removed content went

Old SKILL.md content New home
Setup steps (Bicep, run_mcp_server_local.py, func start) docs/deployment/walkthrough-zh.md + llm-foundry-zh.md (already there)
Claude Code wiring (auth proxy) llm-foundry-zh.md "本地 REPL" §4 (already there from PR #71)
ADR 0009 single-source rationale docs/adr/0009-skill-as-sop-single-source.md (canonical home)

Test plan

  • 31 affected tests pass (skill bundle structure + docs integrity)
  • Removed test_skill_md_references_adr_0009 — that assertion protected the project-specific "Single-source note" we deliberately deleted
  • test_skill_md_setup_is_host_neutral (the "no Lenovo" test) remains
  • Tool list still matches src/mcp_server/__init__.py (7 tools, unchanged)

🤖 Generated with Claude Code

carvychen and others added 2 commits May 10, 2026 12:11
…igned-for

The "Tested against" list claimed 4 hosts (Claude Desktop, VS Code Copilot
MCP, in-repo agent, Copilot Studio). In reality only the in-repo agent has
been verified end-to-end. The other 3 are aspirational MCP-spec compliance.
Today we also empirically verified Claude Code works — but only via the
auth-injecting proxy added in PR #71, not via `.mcp.json` directly, because
Claude Code's `--header` Bearer support is static and our tokens are short-lived.

Restructure to distinguish two categories:

- "Verified end-to-end": the in-repo agent + Claude Code (via local proxy).
  Names the proxy by reference for hosts with the same token-lifecycle gap.
- "Designed-for, not yet verified by us": Claude Desktop, VS Code Copilot MCP,
  Copilot Studio. All three accept static Bearer via `.mcp.json` directly;
  refresh discipline is on the customer.

Also explicitly states the implicit precondition that was always true but
never stated: hosts must be able to attach `Authorization: Bearer <user-jwt>`
to every request. The bundle's only interface with the host is `.mcp.json`;
how the host sources a JWT is host-specific (and is the gnarly part for
hosts whose token model isn't a great fit).

32 tests pass. No code/config change.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…expanded)

The "Compatibility honest" change in this PR's first commit was the right
direction but too narrow. SKILL.md had been accreting more than just one
overclaim — multiple sections were host-specific or project-specific in a
way that breaks the "host-portable bundle" promise from ADR 0009.

Removed (project / host specific noise):
- "Single-source note" callout about in-repo agent + SkillsProvider —
  external customers don't care that OUR agent consumes this bundle.
- "Setup" 3-step section enumerating Claude Desktop / VS Code / Custom
  agent wiring — those belong in each host's own MCP docs. The 1-line
  "edit .mcp.json + wire per host docs" is enough.
- "Reference deployments: Bicep / func start / run_mcp_server_local.py"
  paragraph — pure project-specific (already documented in
  docs/deployment/walkthrough-zh.md and llm-foundry-zh.md).
- "Compatibility" section listing verified-by-us hosts (Claude Code via
  proxy, etc.) — the "in this repo" framing falls apart the moment the
  bundle is dropped into a non-this-repo context.
- Frontmatter `compatibility:` field's enumeration of named hosts.
- "Further reading" link to "main repo docs/" — bundle shouldn't reach
  back into specific project layout.

Kept (host-agnostic core):
- Frontmatter (with generalized `compatibility:` text).
- 2-line intro: what the skill does + how to wire (.mcp.json + host docs).
- Available tools table — the contract.
- Rating values / dates / FIELD_REFERENCE pointer — tool data the LLM uses.
- SOP § 1-4 (name resolution, destructive confirm, RLS, error fidelity).
- 3 Example dialogues.
- references/FIELD_REFERENCE.md link.

Test casualty: removed `test_skill_md_references_adr_0009` since we
deliberately removed the ADR 0009 reference (it was the project-specific
"single-source note"). The host-neutrality test (`test_skill_md_setup_is_host_neutral`)
remains — its docstring no longer mentions ADR 0009 either.

Net: 119 → 95 lines (-20%). 31 affected tests pass.

Project-specific content all moved (or already lives) in the right docs:
- Setup mechanics → docs/deployment/walkthrough-zh.md, llm-foundry-zh.md
- Claude Code via proxy → llm-foundry-zh.md "本地 REPL" §4
- ADR 0009 single-source rationale → docs/adr/0009-...

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@carvychen carvychen changed the title docs(crm-agent): SKILL.md compatibility — distinguish verified vs designed-for docs(crm-agent): SKILL.md — strip host/project-specific accretion May 10, 2026
@carvychen carvychen merged commit 804d6eb into main May 10, 2026
3 checks passed
@carvychen carvychen deleted the docs/skill-md-compat-honest branch May 10, 2026 04:23
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.

1 participant