luigidemasi opened a new issue, #103:
URL: https://github.com/apache/camel-kit/issues/103

   > Imported from 
[luigidemasi/camel-kit#243](https://github.com/luigidemasi/camel-kit/issues/243),
 opened by [Croway](https://github.com/Croway) on 2026-10-10.
   
   ---
   
   ## Problem
   
   For `camel kit init --ai claude`, the generated `.claude/skills/*/SKILL.md` 
files keep the source frontmatter unchanged, and Claude Code (2.1.294) reads 
very little of it:
   
   - `user_invocable: false` / `true` is camel-kit's own key. Claude Code only 
knows `user-invocable` and `disable-model-invocation`, and [its 
docs](https://code.claude.com/docs/en/skills) say a field that does not match 
exactly, hyphens included, is ignored without an error. In a generated Claude 
workspace all 13 skills, including the internal camel-design, camel-implement, 
camel-test and camel-verify, show up in the session's init event under both 
`skills` (the model can invoke them) and `slash_commands`.
   - The descriptions say what a skill is, not when to use it. Claude Code 
decides from `description` (and `when_to_use`) whether to load a skill on its 
own. Today we have `camel-migrate`: "Migrate an existing integration from 
another product to Apache Camel", `camel-start`: "Route to the right camel-kit 
skill for integration work", `camel-knowledge`: "Look up Camel documentation, 
components, CVEs/security advisories, and versions". 
camel-design/implement/test also say "NOT user-invocable" in prose, which 
nothing enforces.
   - `CommandStubGenerator` also writes 9 `.claude/commands/camel-*.md` stubs 
("Read .claude/skills/camel-migrate/SKILL.md and follow those instructions. 
Requested input: $ARGUMENTS"). Both create the same `/camel-migrate`, and 
Claude Code docs say the skill wins over a command with the same name, so the 
stubs do nothing for Claude.
   
   ## Evidence
   
   In an evaluation of coding agents (Claude Code and IBM Bob) on migration 
tasks with camel-kit 0.4.1, Claude Code sessions with Claude 5.5 models (Haiku 
and Sonnet) almost never invoked a camel-kit skill: one Skill call (camel-ship) 
in about 80 sessions, even though every prompt was a migration request. The 
model's own explanations: "I did the migration directly rather than through the 
camel-kit pipeline skills, because your spec was complete"; "I did not use 
`/camel-ship` or the brainstorm and plan skills, since the requirements were 
fully specified". Older Haiku 4.5 sessions did follow the camel-start router. 
Bob uses the skills because the bob2 target writes `user-invocable` and has 
`whenToUse` text in its modes.
   
   ## Where
   
   
`camel-kit-core/src/main/java/io/github/luigidemasi/camelkit/generator/SkillResourceInstaller.java`
 (tag camel-kit-0.4.1):
   
   - `copySkillFile` (L157-170) rewrites frontmatter only for BOB2/QWEN 
(`addHyphenatedUserInvocableMetadata`, `user_invocable` -> `user-invocable`) 
and for COPILOT/PI (`addInternalSkillInvocationMetadata`, which adds 
`user-invocable: false` and `disable-model-invocation: true` to 
`MODEL_HIDDEN_INTERNAL_SKILLS` = camel-design, camel-implement, camel-test, 
camel-verify). Claude gets neither.
   - `CommandStubGenerator.generate` (L13-22) writes a stub for every 
user-facing command, even when the same-name skill is installed.
   - Descriptions in `camel-kit-core/src/main/resources/skills/*/SKILL.md`.
   
   Nothing has changed on `main` in these files since 0.4.1.
   
   ## Proposal
   
   1. Apply the Copilot/Pi internal-skill metadata to the Claude target too: 
`user-invocable: false` and `disable-model-invocation: true` on camel-design, 
camel-implement, camel-test, camel-verify.
   2. Map `user_invocable` to `user-invocable` for Claude (or emit the 
hyphenated key in the source and drop the underscore one); keep 
migrate/brainstorm/plan/execute/validate/debug/knowledge invocable by the model.
   3. Rewrite the descriptions as triggers, key use case first. For example, 
camel-migrate: "Use when the user asks to migrate, convert or port a MuleSoft, 
BizTalk, Fuse, Camel 2/3 or other integration project to Apache Camel, even if 
the request includes the full requirements." Similar "Use when ..." wording for 
camel-start, camel-knowledge, camel-debug, camel-validate, camel-brainstorm. 
`when_to_use` can hold example requests.
   4. Do not generate `.claude/commands/<name>.md` when 
`.claude/skills/<name>/SKILL.md` exists (or mark the command skill-only for the 
claude agent in the workflow manifest).
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to