Skip to content

docs(guide): describe on-demand skill loading and sync the guide tools - #153

Draft
knihit wants to merge 16 commits into
feat/claude-preload-trim-agentsfrom
feat/claude-preload-docs
Draft

knihit wants to merge 16 commits into
feat/claude-preload-trim-agentsfrom
feat/claude-preload-docs

Conversation

@knihit

@knihit knihit commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

Description

Stack: 4 of 9 in the skills stack. Base: feat/claude-preload-trim-agents. Depends on #120, the lint PR and the trim PR, whose numbers and rules it documents. Third of three PRs that replace #137.

Docs:

  • User guide (agents.md, skills.md, reference.md, notes.md, tasks/install-claude-code.md, appendix/contributing.md) and both HTML bundles: "Skills" is the declared count, with a separate preloaded count; skills load on demand on Claude Code. The preload rules are stated: the preload is a subset of skillNames, except a skill whose description says it is Claude Code only, plus the 32-name cap.
  • On-demand loading on Claude Code needs a Skill entry in clientConfig.claudeCli.tools, and only when the spec sets tools.
  • The verification row lists the three specialists that declare it; the "recently fixed" callout says those skills are declared and load on demand.

Guide tools:

  • tools/user-guide-sync/check-guide-facts.py asserts the declared and preloaded counts, checks the "1 to 4 skills" preload range against the specs (and fails when a page has no range phrase), and fails an undeclared preload unless the skill's description marks it Claude Code only.
  • tools/build-user-guide/sync-html-content.py and html_sop_edits.py carry the matching bundle edits.

Type of Change

  • Documentation
  • Other: guide fact-check and bundle sync tools (Python)

Testing

  • npm test: not run (no JS changed).
  • cd cli && make test passes (no cli/ change)
  • Gate on this branch's head, and on the top of the stack (feat/slim-cypress-test-implementation, which contains it): make build && make synth, cd cli && make test (1,836 Rust tests on the top, 0 failed), make test-skills-sh, uvx --with pyyaml pytest -q tests/ (468 passed on the top), make claude-plugin-check. All pass.
  • make guide-html leaves docs/ unchanged. A scratch copy with an undeclared threat-modeling preload on k-tpm fails the new check as intended.
  • make guide-check: one failure, the withdrawn config item that also fails on main; no new failure.
  • Changed code files carry the required SPDX header

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own changes
  • I have commented my code where necessary
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings

Notes for Reviewers

  • Review: adversarial review in rounds until 0 CRITICAL and 0 IMPORTANT findings remained (5 rounds). The one IMPORTANT, a "recently fixed" callout that still said skills were added to clientConfig.claudeCli.skills, is fixed. Every finding has a fix commit.
  • The Claude-only preload exception is a documented contract enforced by check-guide-facts.py, not by the CLI: declaring the skill would list a Claude-only skill in Kiro's index.

Nihit Kasabwala added 16 commits October 30, 2026 01:36
The user guide now describes the trimmed Claude Code preload and the
generated "Skills you can load" list, and the guide sync and fact-check
tools follow the new skill rule. Content as on the original branch.

Verified on this commit:
- make build && make synth: pass
- cd cli && make test: pass
- make test-skills-sh: pass
- uvx --with pyyaml pytest -q tests/: pass (223 passed)
- make claude-plugin-check: pass
- make guide-html: no change to the checked-in HTML
- make guide-check: 1 failure, `config` listed in WITHDRAWN_COMMANDS
  but not declared by cli/README.md. Not from this change: the same
  failure appears on the lint branch and on the original branch head.
…tion and the name cap

F3: "Adding a skill to an agent" now states the contract the guide
checker already implements. skillNames is the on-demand set on both
runtimes; claudeCli.skills is the Claude Code preload and normally a
subset of it. The one exception is a skill that applies only on Claude
Code and says so in its description (today claude-teams-behavior on
konductor). check-guide-facts.py's comment now names the rule instead
of one agent.

Declined both code routes for F3: adding claude-teams-behavior to
konductor's skillNames contradicts the skill's own description and
would list a SendMessage-only skill in the Kiro prompt's skills index;
a synth warning with a hardcoded allowlist names agents inside the CLI,
which downstream packages cannot extend.

F4 wording: the page now says synth warns past 32 KiB and fails past
32 names. The matching sentence in both HTML bundles and its
PRELOAD_EDITS entry are updated; make guide-html is a no-op after.

Verified on this commit:
- make build && make synth: pass
- cd cli && make test: pass
- make test-skills-sh: pass
- uvx --with pyyaml pytest -q tests/: pass (223 passed)
- make claude-plugin-check: pass
- make guide-html: no change
- make guide-check: only the existing `config` WITHDRAWN_COMMANDS
  failure, also present on the original branch head
…sting it

contributing.md says a skill may sit in clientConfig.claudeCli.skills
without skillNames only if its description says it is for Claude Code.
check-guide-facts.py unioned the two lists, so any undeclared preload
passed. It now fails such a preload unless the skill's description
mentions Claude Code.

Verified on feat/claude-preload-docs (includes the merge of
feat/claude-preload-trim-agents at 81a37a5): make guide-check reports
the same single pre-existing failure before and after (the withdrawn
`config` command, parked); on a scratch copy with `threat-modeling`
added to k-tpm's preload, the new check fails as intended.
make build && make synth exit 0, no preload warnings; cd cli && make
test exit 0 (lib 1784 passed); make test-skills-sh exit 0;
uvx --with pyyaml pytest -q tests/ 223 passed; make claude-plugin-check
exit 0 (1 non-blocking ICON_MISSING directory warning); make guide-html
leaves docs/ unchanged.
…emand

The callout said the four skills were also wired into
clientConfig.claudeCli.skills. After the preload trims none of them is
preloaded, and the sentence modelled the pattern the contributing page
now tells authors to avoid. Markdown, the bundle edit entry (chained off
the published sentence) and both bundles changed together.

Verified: sync-html-content.py reports no change; replaying the edit
tables on the 137b bundles reproduces both bundles exactly;
check-guide-facts.py has only its known config-withdrawal failure.
The verification row said it is preloaded into k-architect, k-developer
and k-quality-assurance, but its Declared by cell named only the
orchestrators. The cell now names all six agents, so check-guide-facts
checks it by name instead of skipping an 'all ...' cell.

Verified: check-guide-facts.py section 2 ok (only the known
config-withdrawal failure remains); sync-html-content.py no change;
replay of the edit tables on the 137b bundles matches both bundles.
…undeclared preload

The check passed any description that mentioned Claude Code, so a general
skill such as agents-md-authoring could be preloaded without skillNames.
It now needs 'Claude Code only' or 'only in Claude Code', and the
contributing page names those words.

Verified: check-guide-facts.py reports only the known config-withdrawal
failure; on a scratch copy with agents-md-authoring added to k-tpm's
preload, the Claude-only check fails as intended.
… specs

notes.md, reference.md and both bundles sum up the per-agent preloads as
a range. The script checked each agent's count but not the range, so the
next preload change would leave the prose stale.

Verified: check-guide-facts.py reports the range ok (6 mentions) and only
the known config-withdrawal failure; a scratch copy with '1 to 5' in
notes.md fails the new check.
Verified: check-guide-facts.py unchanged (only the known
config-withdrawal failure).
… by cell

Every other bundle catalog cell shortens k-quality-assurance to QA; the
verification entry spelled it out. The sync edit and both bundles now say
"architect, developer, QA, all 3 orchestrators".

Verified: sync-html-content.py preview reports no change on both
bundles; the bundles are byte-identical; check-guide-facts.py fails only
on the known config-withdrawal item.
…ge phrase

The check printed ok whenever no mismatch was found, including when it
found no "N to M skills" phrase at all, so rewording the prose ("between
1 and 4") would let a stale range return silently. Each page it reads
(notes.md, reference.md and both bundles) must now carry at least one
mention, or the check fails and says to update it.

Verified: check-guide-facts.py reports the range ok with 6 mentions;
rewording notes.md to "between 1 and 4 skills" makes it fail on
notes.md; only the known config-withdrawal failure remains otherwise.
The CLAUDE_ONLY_MARKER comment pointed to "Adding a skill"; the heading
is "Adding a skill to an agent", as the same file quotes further down.
Comment only.
…ude Code

"Adding a skill to an agent" said naming a skill in skillNames was enough
for both runtimes to load it on demand. On Claude Code that holds only
when the agent's clientConfig.claudeCli.tools lists Skill, which synth
warns about. One sentence after the JSON block now says so.

Gate on this tree, from the worktree root:
- make build && make synth: pass (no warnings)
- cd cli && make test: pass (1836 passed, 0 failed)
- make test-skills-sh: pass (10 scripts, 85 passed)
- uvx --with pyyaml pytest -q tests/: pass (223 passed)
- make claude-plugin-check: pass (only the existing ICON_MISSING warning)
… set

The contributing appendix said an agent's clientConfig.claudeCli.tools
"must list Skill". Synth only warns when the key is set without Skill;
an omitted key writes no tools line and Claude Code grants every tool.
Read literally, the old sentence told a contributor to add
"tools": ["Skill"], which would cut the agent down to that one tool.

Gate on this tree, from the worktree root:
- make build && make synth: pass
- cd cli && make test: pass (1836 passed)
- make test-skills-sh: pass (10 scripts, 85 passed)
- uvx --with pyyaml pytest -q tests/: pass (223 passed)
- make claude-plugin-check: pass
- check-guide-facts.py: preload range ok; only the known config
  WITHDRAWN_COMMANDS item fails, which predates this branch

This branch has not been deployed

No deployments
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